summaryrefslogtreecommitdiff
path: root/cipher
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>2013-10-26 14:51:44 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2013-10-26 14:51:44 +0300
commitd9431725952e40f201c7eda000d3c8511ebd5b33 (patch)
tree3218ae8a1f59ce18017450d7223067e0911fb98b /cipher
parent6c6d4810927de7310ae7bac61b4ff5467d7cb485 (diff)
downloadlibgcrypt-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.h4
-rw-r--r--cipher/cipher-ofb.c69
-rw-r--r--cipher/cipher.c2
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: