Add tests for the detached aes256gcm API
This commit is contained in:
parent
e8dfc764d3
commit
cf4f0c48dc
@ -3082,20 +3082,25 @@ tv(void)
|
|||||||
unsigned char *ad;
|
unsigned char *ad;
|
||||||
unsigned char *ciphertext;
|
unsigned char *ciphertext;
|
||||||
unsigned char *decrypted;
|
unsigned char *decrypted;
|
||||||
|
unsigned char *detached_ciphertext;
|
||||||
unsigned char *expected_ciphertext;
|
unsigned char *expected_ciphertext;
|
||||||
unsigned char *key;
|
unsigned char *key;
|
||||||
unsigned char *message;
|
unsigned char *message;
|
||||||
|
unsigned char *mac;
|
||||||
unsigned char *nonce;
|
unsigned char *nonce;
|
||||||
char *hex;
|
char *hex;
|
||||||
unsigned long long found_ciphertext_len;
|
unsigned long long found_ciphertext_len;
|
||||||
|
unsigned long long found_mac_len;
|
||||||
unsigned long long found_message_len;
|
unsigned long long found_message_len;
|
||||||
size_t ad_len;
|
size_t ad_len;
|
||||||
size_t ciphertext_len;
|
size_t ciphertext_len;
|
||||||
|
size_t detached_ciphertext_len;
|
||||||
size_t i = 0U;
|
size_t i = 0U;
|
||||||
size_t message_len;
|
size_t message_len;
|
||||||
|
|
||||||
key = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_KEYBYTES);
|
key = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_KEYBYTES);
|
||||||
nonce = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_NPUBBYTES);
|
nonce = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_NPUBBYTES);
|
||||||
|
mac = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_ABYTES);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
assert(strlen(tests[i].key_hex) == 2 * crypto_aead_aes256gcm_KEYBYTES);
|
assert(strlen(tests[i].key_hex) == 2 * crypto_aead_aes256gcm_KEYBYTES);
|
||||||
@ -3117,6 +3122,7 @@ tv(void)
|
|||||||
tests[i].ad_hex, strlen(tests[i].ad_hex),
|
tests[i].ad_hex, strlen(tests[i].ad_hex),
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
ciphertext_len = message_len + crypto_aead_aes256gcm_ABYTES;
|
ciphertext_len = message_len + crypto_aead_aes256gcm_ABYTES;
|
||||||
|
detached_ciphertext_len = message_len;
|
||||||
expected_ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
|
expected_ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
|
||||||
assert(strlen(tests[i].ciphertext_hex) == 2 * message_len);
|
assert(strlen(tests[i].ciphertext_hex) == 2 * message_len);
|
||||||
sodium_hex2bin(expected_ciphertext, message_len,
|
sodium_hex2bin(expected_ciphertext, message_len,
|
||||||
@ -3127,6 +3133,24 @@ tv(void)
|
|||||||
tests[i].mac_hex, strlen(tests[i].mac_hex),
|
tests[i].mac_hex, strlen(tests[i].mac_hex),
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
|
ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
|
||||||
|
detached_ciphertext = (unsigned char *) sodium_malloc(detached_ciphertext_len);
|
||||||
|
|
||||||
|
crypto_aead_aes256gcm_encrypt_detached(detached_ciphertext, mac,
|
||||||
|
&found_mac_len,
|
||||||
|
message, message_len,
|
||||||
|
ad, ad_len, NULL, nonce, key);
|
||||||
|
assert(found_mac_len == crypto_aead_aes256gcm_ABYTES);
|
||||||
|
if (memcmp(detached_ciphertext, expected_ciphertext,
|
||||||
|
detached_ciphertext_len) != 0 ||
|
||||||
|
memcmp(mac, expected_ciphertext + message_len,
|
||||||
|
crypto_aead_aes256gcm_ABYTES) != 0) {
|
||||||
|
printf("Detached encryption of test vector #%u failed\n", (unsigned int) i);
|
||||||
|
hex = (char *) sodium_malloc((size_t) found_ciphertext_len * 2 + 1);
|
||||||
|
sodium_bin2hex(hex, (size_t) found_ciphertext_len * 2 + 1,
|
||||||
|
ciphertext, ciphertext_len);
|
||||||
|
printf("Computed: [%s]\n", hex);
|
||||||
|
sodium_free(hex);
|
||||||
|
}
|
||||||
|
|
||||||
crypto_aead_aes256gcm_encrypt(ciphertext, &found_ciphertext_len,
|
crypto_aead_aes256gcm_encrypt(ciphertext, &found_ciphertext_len,
|
||||||
message, message_len,
|
message, message_len,
|
||||||
@ -3141,6 +3165,7 @@ tv(void)
|
|||||||
printf("Computed: [%s]\n", hex);
|
printf("Computed: [%s]\n", hex);
|
||||||
sodium_free(hex);
|
sodium_free(hex);
|
||||||
}
|
}
|
||||||
|
|
||||||
decrypted = (unsigned char *) sodium_malloc(message_len);
|
decrypted = (unsigned char *) sodium_malloc(message_len);
|
||||||
if (crypto_aead_aes256gcm_decrypt(decrypted, &found_message_len,
|
if (crypto_aead_aes256gcm_decrypt(decrypted, &found_message_len,
|
||||||
NULL, ciphertext,
|
NULL, ciphertext,
|
||||||
@ -3165,14 +3190,29 @@ tv(void)
|
|||||||
if (memcmp(decrypted, message, message_len) != 0) {
|
if (memcmp(decrypted, message, message_len) != 0) {
|
||||||
printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
|
printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(decrypted, 0xd0, message_len);
|
||||||
|
if (crypto_aead_aes256gcm_decrypt_detached(decrypted, &found_message_len,
|
||||||
|
NULL, detached_ciphertext,
|
||||||
|
detached_ciphertext_len,
|
||||||
|
mac, ad, ad_len, nonce, key) != 0) {
|
||||||
|
printf("Detached verification of test vector #%u failed\n", (unsigned int) i);
|
||||||
|
}
|
||||||
|
assert((size_t) found_message_len == message_len);
|
||||||
|
if (memcmp(decrypted, message, message_len) != 0) {
|
||||||
|
printf("Incorrect decryption of test vector #%u\n", (unsigned int) i);
|
||||||
|
}
|
||||||
|
|
||||||
sodium_free(message);
|
sodium_free(message);
|
||||||
sodium_free(ad);
|
sodium_free(ad);
|
||||||
sodium_free(expected_ciphertext);
|
sodium_free(expected_ciphertext);
|
||||||
sodium_free(ciphertext);
|
sodium_free(ciphertext);
|
||||||
sodium_free(decrypted);
|
sodium_free(decrypted);
|
||||||
|
sodium_free(detached_ciphertext);
|
||||||
} while (++i < (sizeof tests) / (sizeof tests[0]));
|
} while (++i < (sizeof tests) / (sizeof tests[0]));
|
||||||
|
|
||||||
sodium_free(key);
|
sodium_free(key);
|
||||||
|
sodium_free(mac);
|
||||||
sodium_free(nonce);
|
sodium_free(nonce);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user