summaryrefslogtreecommitdiffstats
path: root/src/libgcrypt.c
diff options
context:
space:
mode:
authorDmitriy Kuznetsov <dk@yandex.ru>2012-09-07 12:19:43 +0200
committerAndreas Schneider <asn@cryptomilk.org>2012-09-07 12:19:43 +0200
commit320951f42ff5def186da70d2e52457b7c1d06f50 (patch)
treeb8dbd3e27959c3694c8639e3cd11335137a3a378 /src/libgcrypt.c
parenta3f83e72740bfc0062ab8232e5a0325354ecc1a8 (diff)
downloadlibssh-320951f42ff5def186da70d2e52457b7c1d06f50.tar.gz
libssh-320951f42ff5def186da70d2e52457b7c1d06f50.tar.xz
libssh-320951f42ff5def186da70d2e52457b7c1d06f50.zip
kex: Add simple DES support for SSHv1.
Diffstat (limited to 'src/libgcrypt.c')
-rw-r--r--src/libgcrypt.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libgcrypt.c b/src/libgcrypt.c
index 70ce828..bc10bd8 100644
--- a/src/libgcrypt.c
+++ b/src/libgcrypt.c
@@ -262,6 +262,17 @@ static void aes_decrypt(struct ssh_cipher_struct *cipher, void *in, void *out,
gcry_cipher_decrypt(cipher->key[0], out, len, in, len);
}
+static int des1_set_key(struct ssh_cipher_struct *cipher, void *key){
+ if(!cipher->key){
+ if (alloc_key(cipher) < 0) {
+ return -1;
+ }
+ DES_set_odd_parity(key);
+ DES_set_key_unchecked(key,cipher->key);
+ }
+ return 0;
+}
+
static int des3_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV) {
if (cipher->key == NULL) {
if (alloc_key(cipher) < 0) {
@@ -285,6 +296,19 @@ static int des3_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV) {
return 0;
}
+
+static void des1_1_encrypt(struct ssh_cipher_struct *cipher, void *in, void *out,
+ unsigned long len, void *IV){
+
+ DES_ncbc_encrypt(in, out, len, cipher->key, IV, 1);
+}
+
+static void des1_1_decrypt(struct ssh_cipher_struct *cipher, void *in, void *out,
+ unsigned long len, void *IV){
+
+ DES_ncbc_encrypt(in,out,len, cipher->key, IV, 0);
+}
+
static void des3_encrypt(struct ssh_cipher_struct *cipher, void *in,
void *out, unsigned long len) {
gcry_cipher_encrypt(cipher->key[0], out, len, in, len);
@@ -462,6 +486,17 @@ static struct ssh_cipher_struct ssh_ciphertab[] = {
.cbc_decrypt = des3_1_decrypt
},
{
+ .name = "des-cbc-ssh1",
+ .blocksize = 8,
+ .keylen = sizeof(DES_key_schedule),
+ .key = NULL,
+ .keysize = 64,
+ .set_encrypt_key = des1_set_key,
+ .set_decrypt_key = des1_set_key,
+ .cbc_encrypt = des1_1_encrypt,
+ .cbc_decrypt = des1_1_decrypt
+ },
+ {
.name = NULL,
.blocksize = 0,
.keylen = 0,