summaryrefslogtreecommitdiff
path: root/lib/gnutls_cipher_int.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2003-08-07 18:01:45 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2003-08-07 18:01:45 +0000
commite9964513db0626bda7ade731b39c388514f653c2 (patch)
tree822bea73eff3248b3d0c14ca8f7a5c17ea60fb31 /lib/gnutls_cipher_int.c
parent2df1162fa6b6df695d2bd5d50f481c18783538f6 (diff)
downloadgnutls-e9964513db0626bda7ade731b39c388514f653c2.tar.gz
Ported to the new libgcrypt (still unstable). Also added the RC2 cipher and improved the PKCS #12 stuff in order to support it.
Diffstat (limited to 'lib/gnutls_cipher_int.c')
-rw-r--r--lib/gnutls_cipher_int.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/lib/gnutls_cipher_int.c b/lib/gnutls_cipher_int.c
index 53eb9ab99b..5ffba69067 100644
--- a/lib/gnutls_cipher_int.c
+++ b/lib/gnutls_cipher_int.c
@@ -24,43 +24,46 @@
#include <gnutls_cipher_int.h>
#include <gnutls_datum.h>
+extern int _gcry_rc2_40_id;
+
GNUTLS_CIPHER_HANDLE _gnutls_cipher_init( gnutls_cipher_algorithm cipher,
const gnutls_datum *key, const gnutls_datum *iv)
{
-GNUTLS_CIPHER_HANDLE ret;
+GNUTLS_CIPHER_HANDLE ret = NULL;
+gcry_error_t err = GPG_ERR_GENERAL; /* doesn't matter */
+
switch (cipher) {
- case GNUTLS_CIPHER_NULL:
- ret = GNUTLS_CIPHER_FAILED;
- break;
case GNUTLS_CIPHER_RIJNDAEL_128_CBC:
- ret = gcry_cipher_open(GCRY_CIPHER_RIJNDAEL, GCRY_CIPHER_MODE_CBC, 0);
+ err = gcry_cipher_open(&ret, GCRY_CIPHER_RIJNDAEL, GCRY_CIPHER_MODE_CBC, 0);
break;
case GNUTLS_CIPHER_RIJNDAEL_256_CBC:
- ret = gcry_cipher_open(GCRY_CIPHER_RIJNDAEL256, GCRY_CIPHER_MODE_CBC, 0);
+ err = gcry_cipher_open(&ret, GCRY_CIPHER_RIJNDAEL256, GCRY_CIPHER_MODE_CBC, 0);
break;
case GNUTLS_CIPHER_TWOFISH_128_CBC:
- ret = gcry_cipher_open(GCRY_CIPHER_TWOFISH, GCRY_CIPHER_MODE_CBC, 0);
+ err = gcry_cipher_open(&ret, GCRY_CIPHER_TWOFISH, GCRY_CIPHER_MODE_CBC, 0);
break;
case GNUTLS_CIPHER_3DES_CBC:
- ret = gcry_cipher_open(GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_CBC, 0);
+ err = gcry_cipher_open(&ret, GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_CBC, 0);
break;
case GNUTLS_CIPHER_DES_CBC:
- ret = gcry_cipher_open(GCRY_CIPHER_DES, GCRY_CIPHER_MODE_CBC, 0);
+ err = gcry_cipher_open(&ret, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_CBC, 0);
break;
case GNUTLS_CIPHER_ARCFOUR_128:
case GNUTLS_CIPHER_ARCFOUR_40:
- ret = gcry_cipher_open(GCRY_CIPHER_ARCFOUR, GCRY_CIPHER_MODE_STREAM, 0);
+ err = gcry_cipher_open(&ret, GCRY_CIPHER_ARCFOUR, GCRY_CIPHER_MODE_STREAM, 0);
+ break;
+ case GNUTLS_CIPHER_RC2_40_CBC:
+ err = gcry_cipher_open(&ret, _gcry_rc2_40_id, GCRY_CIPHER_MODE_CBC, 0);
break;
- default:
- ret = GNUTLS_CIPHER_FAILED;
}
- if (ret!=GNUTLS_CIPHER_FAILED) {
+
+ if (err == 0) {
gcry_cipher_setkey(ret, key->data, key->size);
if (iv->data!=NULL && iv->size>0) gcry_cipher_setiv(ret, iv->data, iv->size);
}
-return ret;
+ return ret;
}
int _gnutls_cipher_encrypt(GNUTLS_CIPHER_HANDLE handle, void* text, int textlen) {