Changeset View
Changeset View
Standalone View
Standalone View
sys/opencrypto/cryptodev.c
Show First 20 Lines • Show All 872 Lines • ▼ Show 20 Lines | if (cop->iv) { | ||||
} | } | ||||
error = copyin(cop->iv, crp->crp_iv, cse->ivsize); | error = copyin(cop->iv, crp->crp_iv, cse->ivsize); | ||||
if (error) { | if (error) { | ||||
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | ||||
goto bail; | goto bail; | ||||
} | } | ||||
crp->crp_flags |= CRYPTO_F_IV_SEPARATE; | crp->crp_flags |= CRYPTO_F_IV_SEPARATE; | ||||
} else if (cse->ivsize != 0) { | } else if (cse->ivsize != 0) { | ||||
if (crp->crp_payload_length < cse->ivsize) { | |||||
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | |||||
error = EINVAL; | |||||
goto bail; | |||||
} | |||||
crp->crp_iv_start = 0; | crp->crp_iv_start = 0; | ||||
crp->crp_payload_start += cse->ivsize; | crp->crp_payload_start += cse->ivsize; | ||||
crp->crp_payload_length -= cse->ivsize; | crp->crp_payload_length -= cse->ivsize; | ||||
dst += cse->ivsize; | dst += cse->ivsize; | ||||
} | } | ||||
if (cop->mac != NULL && crp->crp_op & CRYPTO_OP_VERIFY_DIGEST) { | if (cop->mac != NULL && crp->crp_op & CRYPTO_OP_VERIFY_DIGEST) { | ||||
error = copyin(cop->mac, cod->buf + crp->crp_digest_start, | error = copyin(cop->mac, cod->buf + crp->crp_digest_start, | ||||
▲ Show 20 Lines • Show All 164 Lines • ▼ Show 20 Lines | if (caead->iv) { | ||||
* Permit a 16-byte IV for AES-XTS, but only use the | * Permit a 16-byte IV for AES-XTS, but only use the | ||||
* first 8 bytes as a block number. | * first 8 bytes as a block number. | ||||
*/ | */ | ||||
if (cse->mode == CSP_MODE_ETA && | if (cse->mode == CSP_MODE_ETA && | ||||
caead->ivlen == AES_BLOCK_LEN && | caead->ivlen == AES_BLOCK_LEN && | ||||
cse->ivsize == AES_XTS_IV_LEN) | cse->ivsize == AES_XTS_IV_LEN) | ||||
caead->ivlen = AES_XTS_IV_LEN; | caead->ivlen = AES_XTS_IV_LEN; | ||||
if (cse->ivsize == 0) { | |||||
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | |||||
error = EINVAL; | |||||
goto bail; | |||||
} | |||||
if (caead->ivlen != cse->ivsize) { | if (caead->ivlen != cse->ivsize) { | ||||
error = EINVAL; | error = EINVAL; | ||||
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | ||||
goto bail; | goto bail; | ||||
} | } | ||||
error = copyin(caead->iv, crp->crp_iv, cse->ivsize); | error = copyin(caead->iv, crp->crp_iv, cse->ivsize); | ||||
if (error) { | if (error) { | ||||
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | ||||
goto bail; | goto bail; | ||||
} | } | ||||
crp->crp_flags |= CRYPTO_F_IV_SEPARATE; | crp->crp_flags |= CRYPTO_F_IV_SEPARATE; | ||||
} else { | } else { | ||||
crp->crp_iv_start = crp->crp_payload_start; | error = EINVAL; | ||||
crp->crp_payload_start += cse->ivsize; | SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | ||||
crp->crp_payload_length -= cse->ivsize; | goto bail; | ||||
dst += cse->ivsize; | |||||
} | } | ||||
if (crp->crp_op & CRYPTO_OP_VERIFY_DIGEST) { | if (crp->crp_op & CRYPTO_OP_VERIFY_DIGEST) { | ||||
error = copyin(caead->tag, cod->buf + crp->crp_digest_start, | error = copyin(caead->tag, cod->buf + crp->crp_digest_start, | ||||
cse->hashsize); | cse->hashsize); | ||||
if (error) { | if (error) { | ||||
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__); | ||||
goto bail; | goto bail; | ||||
▲ Show 20 Lines • Show All 298 Lines • Show Last 20 Lines |