Use libsodium for aes-256-gcm when available.

This commit is contained in:
edsgerlin
2018-09-12 00:52:33 +09:00
parent 57e74eaa34
commit 79592a8b16
+19 -4
View File
@@ -166,9 +166,17 @@ aead_cipher_encrypt(cipher_ctx_t *cipher_ctx,
size_t tlen = cipher_ctx->cipher->tag_len;
switch (cipher_ctx->cipher->method) {
case AES128GCM:
case AES256GCM: // Only AES-256-GCM is supported by libsodium.
if (crypto_aead_aes256gcm_is_available()) { // Use it if availble
err = crypto_aead_aes256gcm_encrypt(c, &long_clen, m, mlen,
ad, adlen, NULL, n, k);
*clen = (size_t)long_clen; // it's safe to cast 64bit to 32bit length here
break;
}
// Otherwise, just use the mbedTLS one with crappy AES-NI.
case AES192GCM:
case AES256GCM:
case AES128GCM:
err = mbedtls_cipher_auth_encrypt(cipher_ctx->evp, n, nlen, ad, adlen,
m, mlen, c, clen, c + mlen, tlen);
*clen += tlen;
@@ -206,9 +214,16 @@ aead_cipher_decrypt(cipher_ctx_t *cipher_ctx,
size_t tlen = cipher_ctx->cipher->tag_len;
switch (cipher_ctx->cipher->method) {
case AES128GCM:
case AES256GCM: // Only AES-256-GCM is supported by libsodium.
if (crypto_aead_aes256gcm_is_available()) { // Use it if availble
err = crypto_aead_aes256gcm_decrypt(p, &long_plen, NULL, m, mlen,
ad, adlen, n, k);
*plen = (size_t)long_plen; // it's safe to cast 64bit to 32bit length here
break;
}
// Otherwise, just use the mbedTLS one with crappy AES-NI.
case AES192GCM:
case AES256GCM:
case AES128GCM:
err = mbedtls_cipher_auth_decrypt(cipher_ctx->evp, n, nlen, ad, adlen,
m, mlen - tlen, p, plen, m + mlen - tlen, tlen);
break;