Changeset View
Changeset View
Standalone View
Standalone View
sys/opencrypto/ktls_ocf.c
Show First 20 Lines • Show All 280 Lines • ▼ Show 20 Lines | #endif | ||||
crp.crp_op = CRYPTO_OP_ENCRYPT; | crp.crp_op = CRYPTO_OP_ENCRYPT; | ||||
crp.crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | crp.crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | ||||
if (os->implicit_iv) | if (os->implicit_iv) | ||||
memcpy(crp.crp_iv, os->iv, AES_BLOCK_LEN); | memcpy(crp.crp_iv, os->iv, AES_BLOCK_LEN); | ||||
else | else | ||||
memcpy(crp.crp_iv, hdr + 1, AES_BLOCK_LEN); | memcpy(crp.crp_iv, hdr + 1, AES_BLOCK_LEN); | ||||
if (outiov != NULL) { | if (outiov != NULL) { | ||||
/* Duplicate iovec and append vector for trailer. */ | uio.uio_iov = outiov; | ||||
memcpy(iov, outiov, outiovcnt * sizeof(struct iovec)); | uio.uio_iovcnt = outiovcnt; | ||||
iov[outiovcnt].iov_base = m->m_epg_trail; | |||||
iov[outiovcnt].iov_len = m->m_epg_trllen; | |||||
uio.uio_iov = iov; | |||||
uio.uio_iovcnt = outiovcnt + 1; | |||||
uio.uio_offset = 0; | uio.uio_offset = 0; | ||||
uio.uio_segflg = UIO_SYSSPACE; | uio.uio_segflg = UIO_SYSSPACE; | ||||
uio.uio_td = curthread; | uio.uio_td = curthread; | ||||
uio.uio_resid = crp.crp_payload_length; | uio.uio_resid = crp.crp_payload_length; | ||||
crypto_use_output_uio(&crp, &uio); | crypto_use_output_uio(&crp, &uio); | ||||
} | } | ||||
if (os->implicit_iv) | if (os->implicit_iv) | ||||
Show All 27 Lines | |||||
ktls_ocf_tls12_aead_encrypt(struct ktls_session *tls, struct mbuf *m, | ktls_ocf_tls12_aead_encrypt(struct ktls_session *tls, struct mbuf *m, | ||||
struct iovec *outiov, int outiovcnt) | struct iovec *outiov, int outiovcnt) | ||||
{ | { | ||||
const struct tls_record_layer *hdr; | const struct tls_record_layer *hdr; | ||||
struct uio uio; | struct uio uio; | ||||
struct tls_aead_data ad; | struct tls_aead_data ad; | ||||
struct cryptop crp; | struct cryptop crp; | ||||
struct ocf_session *os; | struct ocf_session *os; | ||||
struct iovec iov[outiovcnt + 1]; | |||||
int error; | int error; | ||||
uint16_t tls_comp_len; | uint16_t tls_comp_len; | ||||
os = tls->cipher; | os = tls->cipher; | ||||
hdr = (const struct tls_record_layer *)m->m_epg_hdr; | hdr = (const struct tls_record_layer *)m->m_epg_hdr; | ||||
crypto_initreq(&crp, os->sid); | crypto_initreq(&crp, os->sid); | ||||
Show All 23 Lines | ktls_ocf_tls12_aead_encrypt(struct ktls_session *tls, struct mbuf *m, | ||||
crp.crp_aad_length = sizeof(ad); | crp.crp_aad_length = sizeof(ad); | ||||
/* Set fields for input payload. */ | /* Set fields for input payload. */ | ||||
crypto_use_single_mbuf(&crp, m); | crypto_use_single_mbuf(&crp, m); | ||||
crp.crp_payload_start = m->m_epg_hdrlen; | crp.crp_payload_start = m->m_epg_hdrlen; | ||||
crp.crp_payload_length = tls_comp_len; | crp.crp_payload_length = tls_comp_len; | ||||
if (outiov != NULL) { | if (outiov != NULL) { | ||||
/* Duplicate iovec and append vector for tag. */ | |||||
memcpy(iov, outiov, outiovcnt * sizeof(struct iovec)); | |||||
iov[outiovcnt].iov_base = m->m_epg_trail; | |||||
iov[outiovcnt].iov_len = tls->params.tls_tlen; | |||||
crp.crp_digest_start = crp.crp_payload_length; | crp.crp_digest_start = crp.crp_payload_length; | ||||
uio.uio_iov = iov; | uio.uio_iov = outiov; | ||||
uio.uio_iovcnt = outiovcnt + 1; | uio.uio_iovcnt = outiovcnt; | ||||
uio.uio_offset = 0; | uio.uio_offset = 0; | ||||
uio.uio_segflg = UIO_SYSSPACE; | uio.uio_segflg = UIO_SYSSPACE; | ||||
uio.uio_td = curthread; | uio.uio_td = curthread; | ||||
uio.uio_resid = crp.crp_payload_length + tls->params.tls_tlen; | uio.uio_resid = crp.crp_payload_length + tls->params.tls_tlen; | ||||
crypto_use_output_uio(&crp, &uio); | crypto_use_output_uio(&crp, &uio); | ||||
} else | } else | ||||
crp.crp_digest_start = crp.crp_payload_start + | crp.crp_digest_start = crp.crp_payload_start + | ||||
crp.crp_payload_length; | crp.crp_payload_length; | ||||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | ktls_ocf_tls13_aead_encrypt(struct ktls_session *tls, struct mbuf *m, | ||||
struct iovec *outiov, int outiovcnt) | struct iovec *outiov, int outiovcnt) | ||||
{ | { | ||||
const struct tls_record_layer *hdr; | const struct tls_record_layer *hdr; | ||||
struct uio uio; | struct uio uio; | ||||
struct tls_aead_data_13 ad; | struct tls_aead_data_13 ad; | ||||
char nonce[12]; | char nonce[12]; | ||||
struct cryptop crp; | struct cryptop crp; | ||||
struct ocf_session *os; | struct ocf_session *os; | ||||
struct iovec iov[outiovcnt + 1]; | |||||
int error; | int error; | ||||
os = tls->cipher; | os = tls->cipher; | ||||
hdr = (const struct tls_record_layer *)m->m_epg_hdr; | hdr = (const struct tls_record_layer *)m->m_epg_hdr; | ||||
crypto_initreq(&crp, os->sid); | crypto_initreq(&crp, os->sid); | ||||
/* Setup the nonce. */ | /* Setup the nonce. */ | ||||
Show All 13 Lines | ktls_ocf_tls13_aead_encrypt(struct ktls_session *tls, struct mbuf *m, | ||||
crp.crp_payload_start = m->m_epg_hdrlen; | crp.crp_payload_start = m->m_epg_hdrlen; | ||||
crp.crp_payload_length = m->m_len - (m->m_epg_hdrlen + m->m_epg_trllen); | crp.crp_payload_length = m->m_len - (m->m_epg_hdrlen + m->m_epg_trllen); | ||||
/* Store the record type as the first byte of the trailer. */ | /* Store the record type as the first byte of the trailer. */ | ||||
m->m_epg_trail[0] = m->m_epg_record_type; | m->m_epg_trail[0] = m->m_epg_record_type; | ||||
crp.crp_payload_length++; | crp.crp_payload_length++; | ||||
if (outiov != NULL) { | if (outiov != NULL) { | ||||
/* Duplicate iovec and append vector for tag. */ | |||||
memcpy(iov, outiov, outiovcnt * sizeof(struct iovec)); | |||||
iov[outiovcnt].iov_base = m->m_epg_trail; | |||||
iov[outiovcnt].iov_len = tls->params.tls_tlen; | |||||
crp.crp_digest_start = crp.crp_payload_length; | crp.crp_digest_start = crp.crp_payload_length; | ||||
uio.uio_iov = iov; | uio.uio_iov = outiov; | ||||
uio.uio_iovcnt = outiovcnt + 1; | uio.uio_iovcnt = outiovcnt; | ||||
uio.uio_offset = 0; | uio.uio_offset = 0; | ||||
uio.uio_segflg = UIO_SYSSPACE; | uio.uio_segflg = UIO_SYSSPACE; | ||||
uio.uio_td = curthread; | uio.uio_td = curthread; | ||||
uio.uio_resid = m->m_len - m->m_epg_hdrlen; | uio.uio_resid = m->m_len - m->m_epg_hdrlen; | ||||
crypto_use_output_uio(&crp, &uio); | crypto_use_output_uio(&crp, &uio); | ||||
} else | } else | ||||
crp.crp_digest_start = crp.crp_payload_start + | crp.crp_digest_start = crp.crp_payload_start + | ||||
crp.crp_payload_length; | crp.crp_payload_length; | ||||
▲ Show 20 Lines • Show All 190 Lines • Show Last 20 Lines |