X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=nucleus%2Flibrary%2Fcrypto%2Fblowfish_crypto.cpp;fp=nucleus%2Flibrary%2Fcrypto%2Fblowfish_crypto.cpp;h=37543df8507098d92d589791bda5e3a07f0730d4;hb=68c13351f6768d8104716fc5757fbaf11bb02519;hp=2a6d8282d9868c3ec658ab99f8967330822e4c7d;hpb=5a8e13e7a44ed98d9683bc6cd3bb374e9d3b0756;p=feisty_meow.git diff --git a/nucleus/library/crypto/blowfish_crypto.cpp b/nucleus/library/crypto/blowfish_crypto.cpp index 2a6d8282..37543df8 100644 --- a/nucleus/library/crypto/blowfish_crypto.cpp +++ b/nucleus/library/crypto/blowfish_crypto.cpp @@ -38,7 +38,7 @@ const int FUDGE = 128; // the cipher block size, but we ensure there will definitely be no // problems. -#undef set_key +//#undef set_key // get rid of a macro we don't want. //#define DEBUG_BLOWFISH @@ -203,18 +203,19 @@ bool blowfish_crypto::encrypt(const byte_array &source, bool to_return = true; // initialize an encoding session. - EVP_CIPHER_CTX session; - EVP_CIPHER_CTX_init(&session); - EVP_EncryptInit_ex(&session, EVP_bf_cbc(), NIL, _key->observe(), + EVP_CIPHER_CTX *session = EVP_CIPHER_CTX_new(); + + EVP_CIPHER_CTX_init(session); + EVP_EncryptInit_ex(session, EVP_bf_cbc(), NIL, _key->observe(), init_vector().observe()); - EVP_CIPHER_CTX_set_key_length(&session, _key_size); + EVP_CIPHER_CTX_set_key_length(session, _key_size); // allocate temporary space for encrypted data. byte_array encoded(source.length() + FUDGE); // encrypt the entire source buffer. int encoded_len = 0; - int enc_ret = EVP_EncryptUpdate(&session, encoded.access(), &encoded_len, + int enc_ret = EVP_EncryptUpdate(session, encoded.access(), &encoded_len, source.observe(), source.length()); if (enc_ret != 1) { continuable_error(class_name(), func, a_sprintf("encryption failed, " @@ -232,7 +233,7 @@ bool blowfish_crypto::encrypt(const byte_array &source, // finalize the encryption. encoded.reset(FUDGE); // reinflate for padding. int pad_len = 0; - enc_ret = EVP_EncryptFinal_ex(&session, encoded.access(), &pad_len); + enc_ret = EVP_EncryptFinal_ex(session, encoded.access(), &pad_len); if (enc_ret != 1) { continuable_error(class_name(), func, a_sprintf("finalizing encryption " "failed, result=%d.", enc_ret)); @@ -244,7 +245,8 @@ bool blowfish_crypto::encrypt(const byte_array &source, } } - EVP_CIPHER_CTX_cleanup(&session); + EVP_CIPHER_CTX_cleanup(session); + EVP_CIPHER_CTX_free(session); return to_return; } @@ -255,18 +257,18 @@ bool blowfish_crypto::decrypt(const byte_array &source, target.reset(); if (!_key->length() || !source.length()) return false; bool to_return = true; - EVP_CIPHER_CTX session; - EVP_CIPHER_CTX_init(&session); + EVP_CIPHER_CTX *session = EVP_CIPHER_CTX_new(); + EVP_CIPHER_CTX_init(session); LOG(a_sprintf("key size %d bits.\n", BITS_PER_BYTE * _key->length())); - EVP_DecryptInit_ex(&session, EVP_bf_cbc(), NIL, _key->observe(), + EVP_DecryptInit_ex(session, EVP_bf_cbc(), NIL, _key->observe(), init_vector().observe()); - EVP_CIPHER_CTX_set_key_length(&session, _key_size); + EVP_CIPHER_CTX_set_key_length(session, _key_size); // allocate enough space for decoded bytes. byte_array decoded(source.length() + FUDGE); int decoded_len = 0; - int dec_ret = EVP_DecryptUpdate(&session, decoded.access(), &decoded_len, + int dec_ret = EVP_DecryptUpdate(session, decoded.access(), &decoded_len, source.observe(), source.length()); if (dec_ret != 1) { continuable_error(class_name(), func, "decryption failed."); @@ -281,7 +283,7 @@ bool blowfish_crypto::decrypt(const byte_array &source, if (dec_ret == 1) { decoded.reset(FUDGE); // reinflate for padding. int pad_len = 0; - dec_ret = EVP_DecryptFinal_ex(&session, decoded.access(), &pad_len); + dec_ret = EVP_DecryptFinal_ex(session, decoded.access(), &pad_len); LOG(a_sprintf("padding added %d bytes.\n", pad_len)); if (dec_ret != 1) { continuable_error(class_name(), func, a_sprintf("finalizing decryption " @@ -295,7 +297,8 @@ bool blowfish_crypto::decrypt(const byte_array &source, } } - EVP_CIPHER_CTX_cleanup(&session); + EVP_CIPHER_CTX_cleanup(session); + EVP_CIPHER_CTX_free(session); return to_return; }