int main() { int encryptedLen = 0; char* encrypted = repeating_key_xor_encrypt(sInputStr1, "ICE", &encryptedLen); int keySize = get_keysize(encrypted, encryptedLen); char transposedInput[encryptedLen]; transpose(encrypted, transposedInput, keySize, encryptedLen); char key[keySize]; for (int i = 0; i < keySize; i++) { char singleKeyChunk[encryptedLen/keySize]; memcpy(singleKeyChunk, (char*)&transposedInput[i*(encryptedLen/keySize)], encryptedLen/keySize); key[i] = find_key_single_xor_cipher(singleKeyChunk, encryptedLen/keySize); printf("%d\n",find_key_single_xor_cipher(singleKeyChunk,encryptedLen/keySize)); } key[keySize] = 0; printf("%s\n",key); return 0; }
void bcal_performance(const bcdesc_t* bcd){ bcdesc_t bc; memcpy_P(&bc, bcd, sizeof(bcdesc_t)); uint8_t ctx[bc.ctxsize_B]; uint8_t data[(bc.blocksize_b+7)/8]; uint16_t keysize = get_keysize(bc.valid_keysize_desc); uint8_t key[(keysize+7)/8]; uint64_t t; uint8_t i; if(bc.type!=BCDESC_TYPE_BLOCKCIPHER) return; calibrateTimer(); print_overhead(); cli_putstr_P(PSTR("\r\n\r\n === ")); cli_putstr_P(bc.name); cli_putstr_P(PSTR(" performance === " "\r\n type: blockcipher" "\r\n keysize (bits): ")); printvalue(keysize); cli_putstr_P(PSTR("\r\n ctxsize (bytes): ")); printvalue(bc.ctxsize_B); cli_putstr_P(PSTR("\r\n blocksize (bits): ")); printvalue(bc.blocksize_b); t=0; if(bc.init.init1){ if((bc.flags&BC_INIT_TYPE)==BC_INIT_TYPE_1){ for(i=0; i<32; ++i){ startTimer(0); START_TIMER; (bc.init.init1)(key, &ctx); STOP_TIMER; t += stopTimer(); if(i!=31 && bc.free){ bc.free(&ctx); } } } else { for(i=0; i<32; ++i){ startTimer(0); START_TIMER; (bc.init.init2)(key, keysize, &ctx); STOP_TIMER; t += stopTimer(); if(i!=31 && bc.free){ bc.free(&ctx); } } } t>>=5; cli_putstr_P(PSTR("\r\n init (cycles): ")); printvalue(t); } t=0; for(i=0; i<32; ++i){ startTimer(0); START_TIMER; bc.enc.enc1(data, &ctx); STOP_TIMER; t += stopTimer(); } t>>=5; cli_putstr_P(PSTR("\r\n encrypt (cycles): ")); printvalue(t); t=0; for(i=0; i<32; ++i){ startTimer(0); START_TIMER; bc.dec.dec1(data, &ctx); STOP_TIMER; t += stopTimer(); } t>>=5; cli_putstr_P(PSTR("\r\n decrypt (cycles): ")); printvalue(t); if(bc.free){ bc.free(&ctx); } }
void bcal_stacksize(const bcdesc_t* bcd){ bcdesc_t bc; stack_measuring_ctx_t smctx; memcpy_P(&bc, bcd, sizeof(bcdesc_t)); uint8_t ctx[bc.ctxsize_B]; uint8_t data[(bc.blocksize_b+7)/8]; uint16_t keysize = get_keysize(bc.valid_keysize_desc); uint8_t key[(keysize+7)/8]; uint16_t t1, t2; if(bc.type!=BCDESC_TYPE_BLOCKCIPHER) return; cli_putstr_P(PSTR("\r\n\r\n === ")); cli_putstr_P(bc.name); cli_putstr_P(PSTR(" stack-usage === ")); if(bc.init.init1){ if((bc.flags&BC_INIT_TYPE)==BC_INIT_TYPE_1){ cli(); stack_measure_init(&smctx, PATTERN_A); bc.init.init1(&ctx, key); t1 = stack_measure_final(&smctx); stack_measure_init(&smctx, PATTERN_B); bc.init.init1(&ctx, key); t2 = stack_measure_final(&smctx); sei(); } else { cli(); stack_measure_init(&smctx, PATTERN_A); bc.init.init2(&ctx, keysize, key); t1 = stack_measure_final(&smctx); stack_measure_init(&smctx, PATTERN_B); bc.init.init2(&ctx, keysize, key); t2 = stack_measure_final(&smctx); sei(); } t1 = (t1>t2)?t1:t2; cli_putstr_P(PSTR("\r\n init (bytes): ")); printvalue((unsigned long)t1); } cli(); stack_measure_init(&smctx, PATTERN_A); bc.enc.enc1(data, &ctx); t1 = stack_measure_final(&smctx); stack_measure_init(&smctx, PATTERN_B); bc.enc.enc1(data, &ctx); t2 = stack_measure_final(&smctx); sei(); t1 = (t1>t2)?t1:t2; cli_putstr_P(PSTR("\r\n encBlock (bytes): ")); printvalue((unsigned long)t1); cli(); stack_measure_init(&smctx, PATTERN_A); bc.dec.dec1(data, &ctx); t1 = stack_measure_final(&smctx); stack_measure_init(&smctx, PATTERN_B); bc.dec.dec1(data, &ctx); t2 = stack_measure_final(&smctx); sei(); t1 = (t1>t2)?t1:t2; cli_putstr_P(PSTR("\r\n decBlock (bytes): ")); printvalue((unsigned long)t1); if(bc.free){ bc.free(&ctx); } }