From fcb0234e46e8fc656748f364148754a1cc80ea4b Mon Sep 17 00:00:00 2001 From: Michal Rokos Date: Mon, 11 Mar 2002 21:35:28 +0000 Subject: * Cipher IV fixup --- ChangeLog | 3 +++ ossl_cipher.c | 16 ++++++++++++---- test/ossl_cipher.rb | 8 +++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c2f38a..e9f3389 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,9 @@ Copyright (C) 2001 Michal Rokos All rights reserved. $Log$ +Revision 1.36 2002/03/11 21:35:39 majkl + * Cipher IV fixup + Revision 1.35 2002/03/11 17:20:22 majkl * Big internal cleanup (all structs with only 1 member rearranged) * improved getting time_t from cTime diff --git a/ossl_cipher.c b/ossl_cipher.c index e3bb9ff..48053fc 100644 --- a/ossl_cipher.c +++ b/ossl_cipher.c @@ -124,7 +124,7 @@ ossl_cipher_encrypt(int argc, VALUE *argv, VALUE self) * TODO: * random IV generation! */ - memcpy(iv, "OpenSSL for Ruby rulez!", sizeof(iv)); + memcpy(iv, "OpenSSL for Ruby rulez!", EVP_MAX_IV_LENGTH); /* RAND_add(data,i,0); where from take data? if (RAND_pseudo_bytes(iv, 8) < 0) { @@ -133,7 +133,11 @@ ossl_cipher_encrypt(int argc, VALUE *argv, VALUE self) */ } else { init_v = rb_obj_as_string(init_v); - memcpy(iv, RSTRING(init_v)->ptr, sizeof(iv)); + if (EVP_MAX_IV_LENGTH > RSTRING(init_v)->len) { + memset(iv, 0, EVP_MAX_IV_LENGTH); + memcpy(iv, RSTRING(init_v)->ptr, RSTRING(init_v)->len); + } else + memcpy(iv, RSTRING(init_v)->ptr, EVP_MAX_IV_LENGTH); } EVP_CIPHER_CTX_init(ciphp->ctx); @@ -165,10 +169,14 @@ ossl_cipher_decrypt(int argc, VALUE *argv, VALUE self) * TODO: * random IV generation! */ - memcpy(iv, "OpenSSL for Ruby rulez!", sizeof(iv)); + memcpy(iv, "OpenSSL for Ruby rulez!", EVP_MAX_IV_LENGTH); } else { init_v = rb_obj_as_string(init_v); - memcpy(iv, RSTRING(init_v)->ptr, sizeof(iv)); + if (EVP_MAX_IV_LENGTH > RSTRING(init_v)->len) { + memset(iv, 0, EVP_MAX_IV_LENGTH); + memcpy(iv, RSTRING(init_v)->ptr, RSTRING(init_v)->len); + } else + memcpy(iv, RSTRING(init_v)->ptr, EVP_MAX_IV_LENGTH); } EVP_CIPHER_CTX_init(ciphp->ctx); diff --git a/test/ossl_cipher.rb b/test/ossl_cipher.rb index ce21342..6a54dce 100755 --- a/test/ossl_cipher.rb +++ b/test/ossl_cipher.rb @@ -6,12 +6,10 @@ include Cipher p des = DES.new(EDE3, CBC) #Des3 CBC mode p "ENCRYPT" -p des.encrypt("key") #, "initial_vector") -p cipher = des.update("data1") -#p cipher = des.encrypt("key", "initial_vector", "data") +p des.encrypt("key")#, "iv12345678") +p cipher = des.update("abcdefghijklmnopqrstuvwxyz") p cipher += des.cipher p "DECRYPT" -p des.decrypt("key") -#p des.decrypt("key", "initial_vector") +p des.decrypt("key") #, "iv12345678") p des.update(cipher) + des.cipher -- cgit v1.2.3