svn commit: r362518 - head/sys/crypto/aesni
John Baldwin
jhb at FreeBSD.org
Mon Jun 22 23:22:14 UTC 2020
Author: jhb
Date: Mon Jun 22 23:22:13 2020
New Revision: 362518
URL: https://svnweb.freebsd.org/changeset/base/362518
Log:
Add support for requests with separate AAD to aesni(4).
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D25289
Modified:
head/sys/crypto/aesni/aesni.c
Modified: head/sys/crypto/aesni/aesni.c
==============================================================================
--- head/sys/crypto/aesni/aesni.c Mon Jun 22 23:20:43 2020 (r362517)
+++ head/sys/crypto/aesni/aesni.c Mon Jun 22 23:22:13 2020 (r362518)
@@ -254,7 +254,8 @@ aesni_probesession(device_t dev, const struct crypto_s
struct aesni_softc *sc;
sc = device_get_softc(dev);
- if ((csp->csp_flags & ~(CSP_F_SEPARATE_OUTPUT)) != 0)
+ if ((csp->csp_flags & ~(CSP_F_SEPARATE_OUTPUT | CSP_F_SEPARATE_AAD)) !=
+ 0)
return (EINVAL);
switch (csp->csp_mode) {
case CSP_MODE_DIGEST:
@@ -697,8 +698,11 @@ aesni_cipher_crypt(struct aesni_session *ses, struct c
authbuf = NULL;
if (csp->csp_cipher_alg == CRYPTO_AES_NIST_GCM_16 ||
csp->csp_cipher_alg == CRYPTO_AES_CCM_16) {
- authbuf = aesni_cipher_alloc(crp, crp->crp_aad_start,
- crp->crp_aad_length, &authallocated);
+ if (crp->crp_aad != NULL)
+ authbuf = crp->crp_aad;
+ else
+ authbuf = aesni_cipher_alloc(crp, crp->crp_aad_start,
+ crp->crp_aad_length, &authallocated);
if (authbuf == NULL) {
error = ENOMEM;
goto out;
@@ -850,8 +854,12 @@ aesni_cipher_mac(struct aesni_session *ses, struct cry
hmac_key[i] = 0 ^ HMAC_IPAD_VAL;
ses->hash_update(&sctx, hmac_key, sizeof(hmac_key));
- crypto_apply(crp, crp->crp_aad_start, crp->crp_aad_length,
- ses->hash_update, &sctx);
+ if (crp->crp_aad != NULL)
+ ses->hash_update(&sctx, crp->crp_aad,
+ crp->crp_aad_length);
+ else
+ crypto_apply(crp, crp->crp_aad_start,
+ crp->crp_aad_length, ses->hash_update, &sctx);
if (CRYPTO_HAS_OUTPUT_BUFFER(crp) &&
CRYPTO_OP_IS_ENCRYPT(crp->crp_op))
crypto_apply_buf(&crp->crp_obuf,
@@ -876,8 +884,12 @@ aesni_cipher_mac(struct aesni_session *ses, struct cry
} else {
ses->hash_init(&sctx);
- crypto_apply(crp, crp->crp_aad_start, crp->crp_aad_length,
- ses->hash_update, &sctx);
+ if (crp->crp_aad != NULL)
+ ses->hash_update(&sctx, crp->crp_aad,
+ crp->crp_aad_length);
+ else
+ crypto_apply(crp, crp->crp_aad_start,
+ crp->crp_aad_length, ses->hash_update, &sctx);
if (CRYPTO_HAS_OUTPUT_BUFFER(crp) &&
CRYPTO_OP_IS_ENCRYPT(crp->crp_op))
crypto_apply_buf(&crp->crp_obuf,
More information about the svn-src-all
mailing list