Example #1
0
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;
}
Example #2
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);
	}
}
Example #3
0
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);
	}
}