diff options
author | Dmitry Belyavskiy <beldmit@gmail.com> | 2020-05-04 20:55:31 +0300 |
---|---|---|
committer | Dmitry Belyavskiy <beldmit@gmail.com> | 2020-05-04 20:55:31 +0300 |
commit | accdf6582714e6c3acab1cf142de905e54e5559f (patch) | |
tree | 190cd23309d881ed78a4b1370efbe3b8ec73cf55 /gost_grasshopper_cipher.c | |
parent | cf43fbf26194688bc1823e9a8ab13762d69b23b7 (diff) | |
download | gost-engine-accdf6582714e6c3acab1cf142de905e54e5559f.zip gost-engine-accdf6582714e6c3acab1cf142de905e54e5559f.tar.gz gost-engine-accdf6582714e6c3acab1cf142de905e54e5559f.tar.bz2 |
CTR encryption update
Diffstat (limited to 'gost_grasshopper_cipher.c')
-rw-r--r-- | gost_grasshopper_cipher.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gost_grasshopper_cipher.c b/gost_grasshopper_cipher.c index 32af154..ceafa41 100644 --- a/gost_grasshopper_cipher.c +++ b/gost_grasshopper_cipher.c @@ -462,19 +462,19 @@ int gost_grasshopper_cipher_do_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out, grasshopper_w128_t *currentInputBlock; grasshopper_w128_t *currentOutputBlock; unsigned int n = EVP_CIPHER_CTX_num(ctx); - size_t lasted; + size_t lasted = inl; size_t i; size_t blocks; grasshopper_w128_t *iv_buffer; grasshopper_w128_t tmp; - while (n && inl) { + while (n && lasted) { *(current_out++) = *(current_in++) ^ c->partial_buffer.b[n]; - --inl; + --lasted; n = (n + 1) % GRASSHOPPER_BLOCK_SIZE; } EVP_CIPHER_CTX_set_num(ctx, n); - blocks = inl / GRASSHOPPER_BLOCK_SIZE; + blocks = lasted / GRASSHOPPER_BLOCK_SIZE; iv_buffer = (grasshopper_w128_t *) iv; @@ -489,10 +489,9 @@ int gost_grasshopper_cipher_do_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out, ctr128_inc(iv_buffer->b); current_in += GRASSHOPPER_BLOCK_SIZE; current_out += GRASSHOPPER_BLOCK_SIZE; + lasted -= GRASSHOPPER_BLOCK_SIZE; } - // last part - lasted = inl - blocks * GRASSHOPPER_BLOCK_SIZE; if (lasted > 0) { currentInputBlock = (grasshopper_w128_t *) current_in; currentOutputBlock = (grasshopper_w128_t *) current_out; @@ -506,7 +505,7 @@ int gost_grasshopper_cipher_do_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out, ctr128_inc(iv_buffer->b); } - return 1; + return inl; } #define GRASSHOPPER_BLOCK_MASK (GRASSHOPPER_BLOCK_SIZE - 1) |