Ejemplo n.º 1
0
uint8_t bcal_eax_init(const bcdesc_t *desc, const void *key, uint16_t keysize_b, bcal_eax_ctx_t *ctx){
	uint8_t r;
	ctx->blocksize_B = (bcal_cipher_getBlocksize_b(desc)+7)/8;
	ctx->nonce = malloc(ctx->blocksize_B);
	if(ctx->nonce==NULL){
		return 0x81;
	}
	r = bcal_cmac_init(desc, key, keysize_b, &(ctx->ctag));
	if(r){
		return r;
	}
	r = bcal_cmac_init(desc, key, keysize_b, &(ctx->htag));
	if(r){
		return (r|0x10);
	}
	r = bcal_cmac_init(desc, key, keysize_b, &(ctx->ntag));
	if(r){
		return (r|0x20);
	}
	r = bcal_ctr_init(desc, key, keysize_b, NULL, &(ctx->cipher));
	if(r){
		return (r|0x30);
	}
	ctx->header_set=0;
	uint8_t tmp[ctx->blocksize_B];
	memset(tmp, 0, ctx->blocksize_B);
	bcal_cmac_nextBlock(&(ctx->ntag), tmp);
	tmp[ctx->blocksize_B-1]=1;
	bcal_cmac_nextBlock(&(ctx->htag), tmp);
	tmp[ctx->blocksize_B-1]=2;
	bcal_cmac_nextBlock(&(ctx->ctag), tmp);
	return 0;
}
Ejemplo n.º 2
0
/*
Klen = 16
Mlen = 18
Tlen = 2
Key = 3250974e306b4b678f914b514d1e90f6
Msg = cf132fd4ebc25fd3866f1a95a6193a1a9cdf
*/
void testrun_aes128_cmac72(void){
	uint8_t key[16]= {
			0x32, 0x50, 0x97, 0x4e, 0x30, 0x6b, 0x4b, 0x67,
			0x8f, 0x91, 0x4b, 0x51, 0x4d, 0x1e, 0x90, 0xf6
	};
	uint8_t tag[2];
	uint8_t plain[18] = {
			0xcf, 0x13, 0x2f, 0xd4, 0xeb, 0xc2, 0x5f, 0xd3,
			0x86, 0x6f, 0x1a, 0x95, 0xa6, 0x19, 0x3a, 0x1a,
			0x9c, 0xdf,
	};
	bcal_cmac_ctx_t ctx;
	uint8_t r;


	cli_putstr("\r\n** AES128-CMAC-72-TEST **");

	cli_putstr("\r\n  key:   ");
	cli_hexdump(key, 128/8);
	r = bcal_cmac_init(&aes128_desc, key, 128, &ctx);
	cli_putstr("\r\n  init = 0x");
	cli_hexdump(&r, 1);
	cli_putstr("\r\n  message: ");
	cli_hexdump_block(plain, 18, 4, 16);
	if(r)
		return;
	bcal_cmac(tag, 16, plain, 18*8, &ctx);
	cli_putstr("\r\n  tag:     ");
	cli_hexdump_block(tag, 2, 4, 16);
	bcal_cmac_free(&ctx);
}
Ejemplo n.º 3
0
/*
Count = 0
Klen = 24
Mlen = 0
Tlen = 2
Key = 2b2aaa666be161ed16648e862ac9bd1e317f71bc69e268b5
Msg = 00
*/
void testrun_aes192_cmac0(void){
	uint8_t key[24]= {
			0x2b, 0x2a, 0xaa, 0x66, 0x6b, 0xe1, 0x61, 0xed,
			0x16, 0x64, 0x8e, 0x86, 0x2a, 0xc9, 0xbd, 0x1e,
			0x31, 0x7f, 0x71, 0xbc, 0x69, 0xe2, 0x68, 0xb5
	};
	uint8_t tag[2];
	uint8_t plain[1] = {
			0x00
	};
	bcal_cmac_ctx_t ctx;
	uint8_t r;


	cli_putstr("\r\n** AES192-CMAC-0-TEST **");

	cli_putstr("\r\n  key:   ");
	cli_hexdump(key, 192/8);
	r = bcal_cmac_init(&aes192_desc, key, 192, &ctx);
	cli_putstr("\r\n  init = 0x");
	cli_hexdump(&r, 1);
	if(r)
		return;
	bcal_cmac(tag, 16, plain, 0*8, &ctx);
	cli_putstr("\r\n  tag:     ");
	cli_hexdump_block(tag, 2, 4, 16);
	bcal_cmac_free(&ctx);
}
Ejemplo n.º 4
0
void testrun_aes128_cmac(void){
	uint8_t key[16];
	uint8_t tag[16];
	uint8_t plain[64];
	uint16_t length[] = { 0, 128, 320, 512 };
	bcal_cmac_ctx_t ctx;
	uint8_t r,i;

	memcpy(key,   modes_key,   16);
	memcpy(plain, modes_plain, 64);

	cli_putstr("\r\n** AES128-CMAC-TEST **");

	cli_putstr("\r\n  key:   ");
	cli_hexdump(key, 128/8);
	for(i=0; i<4; ++i){
		r = bcal_cmac_init(&aes128_desc, key, 128, &ctx);
		cli_putstr("\r\n  init = 0x");
		cli_hexdump(&r, 1);
		cli_putstr("\r\n  message: ");
		cli_hexdump_block(plain, length[i]/8, 4, 16);
		if(r)
			return;
		bcal_cmac(tag, 128, plain, length[i], &ctx);
		cli_putstr("\r\n  tag:     ");
		cli_hexdump_block(tag, 128/8, 4, 16);
		bcal_cmac_free(&ctx);
	}
}