diff options
author | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 2013-10-26 14:51:44 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2013-10-26 14:51:44 +0300 |
commit | d9431725952e40f201c7eda000d3c8511ebd5b33 (patch) | |
tree | 3218ae8a1f59ce18017450d7223067e0911fb98b /cipher | |
parent | 6c6d4810927de7310ae7bac61b4ff5467d7cb485 (diff) | |
download | libgcrypt-d9431725952e40f201c7eda000d3c8511ebd5b33.tar.gz |
Drop _gcry_cipher_ofb_decrypt as it duplicates _gcry_cipher_ofb_encrypt
* cipher/cipher.c (cipher_decrypt): Use _gcry_cipher_ofb_encrypt for OFB
decryption.
* cipher/cipher-internal.h: Remove _gcry_cipher_ofb_decrypt declaration.
* cipher/cipher-ofb.c (_gcry_cipher_ofb_decrypt): Remove.
(_gcry_cipher_ofb_encrypt): remove copying of IV to lastiv, it's
unused there.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Diffstat (limited to 'cipher')
-rw-r--r-- | cipher/cipher-internal.h | 4 | ||||
-rw-r--r-- | cipher/cipher-ofb.c | 69 | ||||
-rw-r--r-- | cipher/cipher.c | 2 |
3 files changed, 1 insertions, 74 deletions
diff --git a/cipher/cipher-internal.h b/cipher/cipher-internal.h index 981caa83..f528c84e 100644 --- a/cipher/cipher-internal.h +++ b/cipher/cipher-internal.h @@ -173,10 +173,6 @@ gcry_err_code_t _gcry_cipher_ofb_encrypt /* */ (gcry_cipher_hd_t c, unsigned char *outbuf, unsigned int outbuflen, const unsigned char *inbuf, unsigned int inbuflen); -gcry_err_code_t _gcry_cipher_ofb_decrypt -/* */ (gcry_cipher_hd_t c, - unsigned char *outbuf, unsigned int outbuflen, - const unsigned char *inbuf, unsigned int inbuflen); /*-- cipher-ctr.c --*/ gcry_err_code_t _gcry_cipher_ctr_encrypt diff --git a/cipher/cipher-ofb.c b/cipher/cipher-ofb.c index 333a7481..c6d84dd2 100644 --- a/cipher/cipher-ofb.c +++ b/cipher/cipher-ofb.c @@ -70,7 +70,6 @@ _gcry_cipher_ofb_encrypt (gcry_cipher_hd_t c, while ( inbuflen >= blocksize ) { /* Encrypt the IV (and save the current one). */ - buf_cpy( c->lastiv, c->u_iv.iv, blocksize ); nburn = enc_fn ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); burn = nburn > burn ? nburn : burn; buf_xor(outbuf, c->u_iv.iv, inbuf, blocksize); @@ -80,74 +79,6 @@ _gcry_cipher_ofb_encrypt (gcry_cipher_hd_t c, } if ( inbuflen ) { /* process the remaining bytes */ - buf_cpy( c->lastiv, c->u_iv.iv, blocksize ); - nburn = enc_fn ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); - burn = nburn > burn ? nburn : burn; - c->unused = blocksize; - c->unused -= inbuflen; - buf_xor(outbuf, c->u_iv.iv, inbuf, inbuflen); - outbuf += inbuflen; - inbuf += inbuflen; - inbuflen = 0; - } - - if (burn > 0) - _gcry_burn_stack (burn + 4 * sizeof(void *)); - - return 0; -} - - -gcry_err_code_t -_gcry_cipher_ofb_decrypt (gcry_cipher_hd_t c, - unsigned char *outbuf, unsigned int outbuflen, - const unsigned char *inbuf, unsigned int inbuflen) -{ - unsigned char *ivp; - gcry_cipher_encrypt_t enc_fn = c->spec->encrypt; - size_t blocksize = c->spec->blocksize; - unsigned int burn, nburn; - - if (outbuflen < inbuflen) - return GPG_ERR_BUFFER_TOO_SHORT; - - if( inbuflen <= c->unused ) - { - /* Short enough to be encoded by the remaining XOR mask. */ - ivp = c->u_iv.iv + blocksize - c->unused; - buf_xor(outbuf, ivp, inbuf, inbuflen); - c->unused -= inbuflen; - return 0; - } - - burn = 0; - - if ( c->unused ) - { - inbuflen -= c->unused; - ivp = c->u_iv.iv + blocksize - c->unused; - buf_xor(outbuf, ivp, inbuf, c->unused); - outbuf += c->unused; - inbuf += c->unused; - c->unused = 0; - } - - /* Now we can process complete blocks. */ - while ( inbuflen >= blocksize ) - { - /* Encrypt the IV (and save the current one). */ - buf_cpy( c->lastiv, c->u_iv.iv, blocksize ); - nburn = enc_fn ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); - burn = nburn > burn ? nburn : burn; - buf_xor(outbuf, c->u_iv.iv, inbuf, blocksize); - outbuf += blocksize; - inbuf += blocksize; - inbuflen -= blocksize; - } - if ( inbuflen ) - { /* Process the remaining bytes. */ - /* Encrypt the IV (and save the current one). */ - buf_cpy( c->lastiv, c->u_iv.iv, blocksize ); nburn = enc_fn ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); burn = nburn > burn ? nburn : burn; c->unused = blocksize; diff --git a/cipher/cipher.c b/cipher/cipher.c index c0d1d0be..df6d2025 100644 --- a/cipher/cipher.c +++ b/cipher/cipher.c @@ -814,7 +814,7 @@ cipher_decrypt (gcry_cipher_hd_t c, byte *outbuf, unsigned int outbuflen, break; case GCRY_CIPHER_MODE_OFB: - rc = _gcry_cipher_ofb_decrypt (c, outbuf, outbuflen, inbuf, inbuflen); + rc = _gcry_cipher_ofb_encrypt (c, outbuf, outbuflen, inbuf, inbuflen); break; case GCRY_CIPHER_MODE_CTR: |