xref: /btstack/test/crypto/aes_ccm_test.c (revision 995faa292db215ca122bed722ea5056d014ede23)
181132a39SMatthias Ringwald #include <stdio.h>
281132a39SMatthias Ringwald #include <stdint.h>
381132a39SMatthias Ringwald #include "btstack_util.h"
4ba1e2dc4SMatthias Ringwald #include "aes_ccm.h"
5*995faa29SMatthias Ringwald #include "btstack_crypto.h"
675ba91cfSMatthias Ringwald 
781132a39SMatthias Ringwald typedef uint8_t key_t[16];
881132a39SMatthias Ringwald 
981132a39SMatthias Ringwald #define LOG_KEY(NAME) { printf("%16s: ", #NAME); printf_hexdump(NAME, 16); }
1081132a39SMatthias Ringwald #define PARSE_KEY(NAME) { parse_hex(NAME, NAME##_string); LOG_KEY(NAME); }
1181132a39SMatthias Ringwald #define DEFINE_KEY(NAME, VALUE) key_t NAME; parse_hex(NAME, VALUE); LOG_KEY(NAME);
1281132a39SMatthias Ringwald 
1381132a39SMatthias Ringwald static int parse_hex(uint8_t * buffer, const char * hex_string){
1481132a39SMatthias Ringwald 	int len = 0;
1581132a39SMatthias Ringwald 	while (*hex_string){
1681132a39SMatthias Ringwald 		if (*hex_string == ' '){
1781132a39SMatthias Ringwald 			hex_string++;
1881132a39SMatthias Ringwald 			continue;
1981132a39SMatthias Ringwald 		}
2081132a39SMatthias Ringwald 		int high_nibble = nibble_for_char(*hex_string++);
2181132a39SMatthias Ringwald 		int low_nibble = nibble_for_char(*hex_string++);
2281132a39SMatthias Ringwald 		*buffer++ = (high_nibble << 4) | low_nibble;
2381132a39SMatthias Ringwald 		len++;
2481132a39SMatthias Ringwald 	}
2581132a39SMatthias Ringwald 	return len;
2681132a39SMatthias Ringwald }
2781132a39SMatthias Ringwald 
28*995faa29SMatthias Ringwald static void ccm_done(void * arg){
29*995faa29SMatthias Ringwald 
30*995faa29SMatthias Ringwald }
31*995faa29SMatthias Ringwald 
3281132a39SMatthias Ringwald static void message_24(void){
3381132a39SMatthias Ringwald 	DEFINE_KEY(encryption_key, "0953fa93e7caac9638f58820220a398e");
3481132a39SMatthias Ringwald 
3581132a39SMatthias Ringwald 	uint8_t network_nonce[13];
3681132a39SMatthias Ringwald 	parse_hex(network_nonce, "000307080d1234000012345677");
3781132a39SMatthias Ringwald 	printf("%16s: ", "network_nonce"); printf_hexdump(network_nonce, 13);
3881132a39SMatthias Ringwald 
3981132a39SMatthias Ringwald 	uint8_t plaintext[18];
4081132a39SMatthias Ringwald 	parse_hex(plaintext, "9736e6a03401de1547118463123e5f6a17b9");
4181132a39SMatthias Ringwald 	printf("%16s: ", "plaintext"); printf_hexdump(plaintext, sizeof(plaintext));
4281132a39SMatthias Ringwald 
43*995faa29SMatthias Ringwald 	printf("Reference:\n");
4481132a39SMatthias Ringwald 	uint8_t ciphertext[18+4];
4581132a39SMatthias Ringwald 	bt_mesh_ccm_encrypt(encryption_key, network_nonce, plaintext, sizeof(plaintext), NULL, 0, ciphertext, 4);
4681132a39SMatthias Ringwald 	printf("%16s: ", "ciphertext"); printf_hexdump(ciphertext, 18);
4781132a39SMatthias Ringwald 	printf("%16s: ", "NetMIC");     printf_hexdump(&ciphertext[18], 4);
48*995faa29SMatthias Ringwald 
49*995faa29SMatthias Ringwald 	// btstack_crypto
50*995faa29SMatthias Ringwald 	printf("btstack_crypto:\n");
51*995faa29SMatthias Ringwald 	uint8_t net_mic[4];
52*995faa29SMatthias Ringwald 	btstack_crypto_init();
53*995faa29SMatthias Ringwald 	btstack_crypto_ccm_t btstack_crypto_ccm;
54*995faa29SMatthias Ringwald 	btstack_crypo_ccm_init(&btstack_crypto_ccm, encryption_key, network_nonce, sizeof(plaintext), 4);
55*995faa29SMatthias Ringwald 	btstack_crypto_ccm_encrypt_block(&btstack_crypto_ccm, sizeof(plaintext), plaintext, ciphertext, &ccm_done, NULL);
56*995faa29SMatthias Ringwald 	btstack_crypo_ccm_get_authentication_value(&btstack_crypto_ccm, net_mic);
57*995faa29SMatthias Ringwald 	printf("%16s: ", "ciphertext"); printf_hexdump(ciphertext, 18);
58*995faa29SMatthias Ringwald 	printf("%16s: ", "NetMIC");     printf_hexdump(net_mic, 4);
5981132a39SMatthias Ringwald }
6081132a39SMatthias Ringwald 
6181132a39SMatthias Ringwald int main(void){
6281132a39SMatthias Ringwald 	message_24();
6381132a39SMatthias Ringwald 	return 0;
6481132a39SMatthias Ringwald }
65