Changeset View
Changeset View
Standalone View
Standalone View
sys/netipsec/xform_esp.c
Show First 20 Lines • Show All 400 Lines • ▼ Show 20 Lines | if (csp->csp_flags & CSP_F_ESN && | ||||
sav->replay != NULL && sav->replay->wsize != 0) | sav->replay != NULL && sav->replay->wsize != 0) | ||||
memcpy(crp->crp_esn, &seqh, sizeof(seqh)); | memcpy(crp->crp_esn, &seqh, sizeof(seqh)); | ||||
crp->crp_digest_start = m->m_pkthdr.len - alen; | crp->crp_digest_start = m->m_pkthdr.len - alen; | ||||
} | } | ||||
/* Crypto operation descriptor */ | /* Crypto operation descriptor */ | ||||
crp->crp_flags = CRYPTO_F_CBIFSYNC; | crp->crp_flags = CRYPTO_F_CBIFSYNC; | ||||
if (V_async_crypto) | |||||
crp->crp_flags |= CRYPTO_F_ASYNC | CRYPTO_F_ASYNC_KEEPORDER; | |||||
crypto_use_mbuf(crp, m); | crypto_use_mbuf(crp, m); | ||||
crp->crp_callback = esp_input_cb; | crp->crp_callback = esp_input_cb; | ||||
crp->crp_opaque = xd; | crp->crp_opaque = xd; | ||||
/* These are passed as-is to the callback */ | /* These are passed as-is to the callback */ | ||||
xd->sav = sav; | xd->sav = sav; | ||||
xd->protoff = protoff; | xd->protoff = protoff; | ||||
xd->skip = skip; | xd->skip = skip; | ||||
Show All 36 Lines | if (SAV_ISCTRORGCM(sav)) { | ||||
m_copydata(m, skip + hlen - sav->ivlen, sav->ivlen, &ivp[4]); | m_copydata(m, skip + hlen - sav->ivlen, sav->ivlen, &ivp[4]); | ||||
if (SAV_ISCTR(sav)) { | if (SAV_ISCTR(sav)) { | ||||
be32enc(&ivp[sav->ivlen + 4], 1); | be32enc(&ivp[sav->ivlen + 4], 1); | ||||
} | } | ||||
crp->crp_flags |= CRYPTO_F_IV_SEPARATE; | crp->crp_flags |= CRYPTO_F_IV_SEPARATE; | ||||
} else if (sav->ivlen != 0) | } else if (sav->ivlen != 0) | ||||
crp->crp_iv_start = skip + hlen - sav->ivlen; | crp->crp_iv_start = skip + hlen - sav->ivlen; | ||||
if (V_async_crypto) | |||||
return (crypto_dispatch_async(crp, CRYPTO_ASYNC_ORDERED)); | |||||
else | |||||
return (crypto_dispatch(crp)); | return (crypto_dispatch(crp)); | ||||
crp_aad_fail: | crp_aad_fail: | ||||
free(xd, M_XDATA); | free(xd, M_XDATA); | ||||
xd_fail: | xd_fail: | ||||
crypto_freereq(crp); | crypto_freereq(crp); | ||||
ESPSTAT_INC(esps_crypto); | ESPSTAT_INC(esps_crypto); | ||||
error = ENOBUFS; | error = ENOBUFS; | ||||
bad: | bad: | ||||
▲ Show 20 Lines • Show All 418 Lines • ▼ Show 20 Lines | #endif | ||||
xd->sp = sp; | xd->sp = sp; | ||||
xd->sav = sav; | xd->sav = sav; | ||||
xd->idx = idx; | xd->idx = idx; | ||||
xd->cryptoid = cryptoid; | xd->cryptoid = cryptoid; | ||||
xd->vnet = curvnet; | xd->vnet = curvnet; | ||||
/* Crypto operation descriptor. */ | /* Crypto operation descriptor. */ | ||||
crp->crp_flags |= CRYPTO_F_CBIFSYNC; | crp->crp_flags |= CRYPTO_F_CBIFSYNC; | ||||
if (V_async_crypto) | |||||
crp->crp_flags |= CRYPTO_F_ASYNC | CRYPTO_F_ASYNC_KEEPORDER; | |||||
crypto_use_mbuf(crp, m); | crypto_use_mbuf(crp, m); | ||||
crp->crp_callback = esp_output_cb; | crp->crp_callback = esp_output_cb; | ||||
crp->crp_opaque = xd; | crp->crp_opaque = xd; | ||||
if (esph) { | if (esph) { | ||||
/* Authentication descriptor. */ | /* Authentication descriptor. */ | ||||
crp->crp_op |= CRYPTO_OP_COMPUTE_DIGEST; | crp->crp_op |= CRYPTO_OP_COMPUTE_DIGEST; | ||||
if (SAV_ISGCM(sav)) | if (SAV_ISGCM(sav)) | ||||
Show All 31 Lines | if (csp->csp_flags & CSP_F_SEPARATE_AAD && | ||||
crp->crp_aad_start = skip; | crp->crp_aad_start = skip; | ||||
if (csp->csp_flags & CSP_F_ESN && sav->replay != NULL) | if (csp->csp_flags & CSP_F_ESN && sav->replay != NULL) | ||||
memcpy(crp->crp_esn, &seqh, sizeof(seqh)); | memcpy(crp->crp_esn, &seqh, sizeof(seqh)); | ||||
crp->crp_digest_start = m->m_pkthdr.len - alen; | crp->crp_digest_start = m->m_pkthdr.len - alen; | ||||
} | } | ||||
return crypto_dispatch(crp); | if (V_async_crypto) | ||||
return (crypto_dispatch_async(crp, CRYPTO_ASYNC_ORDERED)); | |||||
else | |||||
return (crypto_dispatch(crp)); | |||||
crp_aad_fail: | crp_aad_fail: | ||||
free(xd, M_XDATA); | free(xd, M_XDATA); | ||||
xd_fail: | xd_fail: | ||||
crypto_freereq(crp); | crypto_freereq(crp); | ||||
ESPSTAT_INC(esps_crypto); | ESPSTAT_INC(esps_crypto); | ||||
error = ENOBUFS; | error = ENOBUFS; | ||||
bad: | bad: | ||||
▲ Show 20 Lines • Show All 107 Lines • Show Last 20 Lines |