summaryrefslogtreecommitdiff
path: root/usr/src/common/crypto/modes/ctr.c
diff options
context:
space:
mode:
authorMatt Barden <matt.barden@nexenta.com>2017-09-04 07:25:59 -0500
committerGordon Ross <gwr@nexenta.com>2017-11-30 19:44:43 -0500
commitcd964fce751ca752af4158842063a9579a2d4331 (patch)
tree968b949de63f645bbbd84739221812eb3093530d /usr/src/common/crypto/modes/ctr.c
parent6dfcdabd85f09409c5d2f9fb25a3013384ffaf74 (diff)
downloadillumos-joyent-cd964fce751ca752af4158842063a9579a2d4331.tar.gz
5869 Need AES CMAC support in KCF+PKCS11
Portions contributed by: Jason King <jason.king@joyent.com> Reviewed by: Robert Mustacchi <rm@joyent.com> Reviewed by: Dan McDonald <danmcd@joyent.com> Approved by: Gordon Ross <gwr@nexenta.com>
Diffstat (limited to 'usr/src/common/crypto/modes/ctr.c')
-rw-r--r--usr/src/common/crypto/modes/ctr.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/usr/src/common/crypto/modes/ctr.c b/usr/src/common/crypto/modes/ctr.c
index e44dc3e642..919ed3ab53 100644
--- a/usr/src/common/crypto/modes/ctr.c
+++ b/usr/src/common/crypto/modes/ctr.c
@@ -169,13 +169,9 @@ ctr_mode_final(ctr_ctx_t *ctx, crypto_data_t *out,
int (*encrypt_block)(const void *, const uint8_t *, uint8_t *))
{
uint8_t *lastp;
- void *iov_or_mp;
- offset_t offset;
- uint8_t *out_data_1;
- uint8_t *out_data_2;
- size_t out_data_1_len;
uint8_t *p;
int i;
+ int rv;
if (out->cd_length < ctx->ctr_remainder_len)
return (CRYPTO_DATA_LEN_RANGE);
@@ -189,23 +185,17 @@ ctr_mode_final(ctr_ctx_t *ctx, crypto_data_t *out,
p[i] ^= lastp[i];
}
- crypto_init_ptrs(out, &iov_or_mp, &offset);
- crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1,
- &out_data_1_len, &out_data_2, ctx->ctr_remainder_len);
-
- bcopy(p, out_data_1, out_data_1_len);
- if (out_data_2 != NULL) {
- bcopy((uint8_t *)p + out_data_1_len,
- out_data_2, ctx->ctr_remainder_len - out_data_1_len);
+ rv = crypto_put_output_data(p, out, ctx->ctr_remainder_len);
+ if (rv == CRYPTO_SUCCESS) {
+ out->cd_offset += ctx->ctr_remainder_len;
+ ctx->ctr_remainder_len = 0;
}
- out->cd_offset += ctx->ctr_remainder_len;
- ctx->ctr_remainder_len = 0;
- return (CRYPTO_SUCCESS);
+ return (rv);
}
int
ctr_init_ctx(ctr_ctx_t *ctr_ctx, ulong_t count, uint8_t *cb,
-void (*copy_block)(uint8_t *, uint8_t *))
+ void (*copy_block)(uint8_t *, uint8_t *))
{
uint64_t upper_mask = 0;
uint64_t lower_mask = 0;