svn commit: r360135 - head/sys/netipsec
John Baldwin
jhb at FreeBSD.org
Mon Apr 20 22:20:27 UTC 2020
Author: jhb
Date: Mon Apr 20 22:20:26 2020
New Revision: 360135
URL: https://svnweb.freebsd.org/changeset/base/360135
Log:
Generate IVs directly in esp_output.
This is the only place that uses CRYPTO_F_IV_GENERATE. All crypto
drivers currently duplicate the same boilerplate code to handle this
case. Doing the generation directly removes complexity from drivers.
It also simplifies support for separate input and output buffers.
Reviewed by: cem
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D24449
Modified:
head/sys/netipsec/xform_esp.c
Modified: head/sys/netipsec/xform_esp.c
==============================================================================
--- head/sys/netipsec/xform_esp.c Mon Apr 20 19:16:10 2020 (r360134)
+++ head/sys/netipsec/xform_esp.c Mon Apr 20 22:20:26 2020 (r360135)
@@ -813,10 +813,9 @@ esp_output(struct mbuf *m, struct secpolicy *sp, struc
crp->crp_payload_length = m->m_pkthdr.len - (skip + hlen + alen);
crp->crp_op = CRYPTO_OP_ENCRYPT;
- /* Encryption operation. */
+ /* Generate IV / nonce. */
+ ivp = &crp->crp_iv[0];
if (SAV_ISCTRORGCM(sav)) {
- ivp = &crp->crp_iv[0];
-
/* GCM IV Format: RFC4106 4 */
/* CTR IV Format: RFC3686 4 */
/* Salt is last four bytes of key, RFC4106 8.1 */
@@ -833,8 +832,9 @@ esp_output(struct mbuf *m, struct secpolicy *sp, struc
m_copyback(m, skip + hlen - sav->ivlen, sav->ivlen, &ivp[4]);
crp->crp_flags |= CRYPTO_F_IV_SEPARATE;
} else if (sav->ivlen != 0) {
+ arc4rand(ivp, sav->ivlen, 0);
crp->crp_iv_start = skip + hlen - sav->ivlen;
- crp->crp_flags |= CRYPTO_F_IV_GENERATE;
+ m_copyback(m, crp->crp_iv_start, sav->ivlen, ivp);
}
/* Callback parameters */
More information about the svn-src-all
mailing list