static u_int get_tsc(__unused struct timecounter *tc) { return (rdtsc32()); }
int main() { const unsigned char key[16] = {0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70}; unsigned char nonce[16] = {0x09,0xf9,0x11,0x02,0x9d,0x74,0xe3,0x5b,0xd8,0x41,0x56,0xc5,0x63,0x56,0x88,0xc0}; unsigned char in[4096], out[4096],adata[4096]; unsigned long long tag[16]; //asm volatile ("mcr p15, 0, %0, c15, c9, 0\n" : : "r" (1)); int i, j, k, l=100; // srand(time(NULL)); for (i=0; i<16*BLOCKS*l; i++) in[i] = (unsigned char)rand(); uint32_t overhead = rdtsc32(); overhead = rdtsc32() - overhead; uint32_t t0,t1; uint32_t tMin = 0xFFFFFFFF; /* big number to start */ printf("Cycles for calibrate: %d\n", overhead); for (j=0;j<1000;j++) crypto_aead_encrypt(out,tag,in,4096,0,0,0,nonce,key); printf("\nEncryption: \nWithout Adata\n"); for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,64,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(64)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,128,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(128)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,256,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(256))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,512,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(512))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,1024,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(1024))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,2048,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(2048))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,4096,0,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(4096))); tMin = 0xFFFFFFFF; /* big number to start */ printf("Cycles for calibrate: %d\n", overhead); for (j=0;j<1000;j++) crypto_aead_encrypt(out,tag,in,4096,0,0,0,nonce,key); printf("\nEncryption: \nWith Adata\n"); for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,64,adata,64,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(64)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,128,adata,128,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(128)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,256,adata,256,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(256))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,512,adata,512,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(512))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,1024,adata,1024,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(1024))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,2048,adata,2048,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(2048))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_encrypt(out,tag,in,4096,adata,4096,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(4096))); tMin = 0xFFFFFFFF; /* big number to start */ printf("\ndecryption: \nWithout Adata\n"); for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,64,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(64)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,128,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(128)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,256,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(256))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,512,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(512))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,1024,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(1024))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,2048,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(2048))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,4096,0,0,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(4096))); tMin = 0xFFFFFFFF; /* big number to start */ for (j=0;j<1000;j++) crypto_aead_decrypt(out,tag,0,in,4096,0,0,nonce,key); printf("\nDecryption: \nWith Adata\n"); for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,64,adata,64,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(64)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,128,adata,128,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/(((double)(128)))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,256,adata,256,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(256))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,512,adata,512,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(512))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,1024,adata,1024,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(1024))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,2048,adata,2048,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(2048))); tMin = 0xFFFFFFFF; /* big number to start */ for (k=0;k < TIMER_SAMPLE_CNT;k++) { t0 = rdtsc32(); crypto_aead_decrypt(out,tag,0,in,4096,adata,4096,nonce,key); t1 = rdtsc32(); if (tMin > t1-t0 - overhead) tMin = t1-t0 - overhead; } printf("Cycles for YAES: %d\n", tMin); printf("Cycles per byte: %f\n", tMin/((double)(4096))); return 0; }
int main(UNUSED(int argc), UNUSED(char** argv)) { uint32_t tso = rdtsc32(); stdio_mode(STDIO_MODE_CANON); // initialize mraa and software SPI mraa_init(); printf("MRAA paltform %s, version %s\n", mraa_get_platform_name(), mraa_get_version()); mraa_spi_sw_context spi = sw_spi_init(MRAA_SCK, MRAA_MOSI, MRAA_MISO); // initialize RFM12BS rfm12_t rfm; memset(&rfm, 0, sizeof(rfm)); rfm12_init_spi(&rfm, spi, MRAA_CS1, MRAA_GP047); rfm12_init(&rfm, 0xD4, RFM12_BAND_868, 868.0, RFM12_BPS_9600); rfm12_set_mode(&rfm, RFM_MODE_RX); printf("started up in %u msec\n", millis(tso)); // default application configuration cfg.flags |= APPF_ECHO_DAN; cfg.rfm = &rfm; // initialize command line interface console_io_t cli; memset(&cli, 0, sizeof(cli)); cli.prompt = '>'; cli.data = &cfg; stdio_init(&cli, stdio_cmd_handler); stdio_mode(STDIO_MODE_RAW); dnode_t node; while(!cli.stop) { cli.interact(&cli, cli_cmd); if (rfm12_receive_data(&rfm, &node, sizeof(node), cfg.flags & RFM_RX_DEBUG) == sizeof(node)) { rfm12_set_mode(&rfm, RFM_MODE_RX); if (node.nid == NODE_TSYNC) { tso = rdtsc32(); ts_unpack(&node); cfg.rtc_hour = node.hour; cfg.rtc_min = node.min; cfg.rtc_sec = node.sec; } if (cfg.flags & APPF_ECHO_DAN) print_node(&cli, &node); } if (millis(tso) >= 1000) { tso = rdtsc32(); if (++cfg.rtc_sec == 60) { cfg.rtc_sec = 0; if (++cfg.rtc_min == 60) { cfg.rtc_min = 0; if (++cfg.rtc_hour == 24) cfg.rtc_hour = 0; } } } usleep(1); // be nice } stdio_mode(STDIO_MODE_CANON); rfm12_close_spi(&rfm); sw_spi_close(spi); mraa_deinit(); }