Merge branch '0.4.x' into 0.5.0.x
authorLuke Dashjr <luke-jr+git@utopios.org>
Thu, 5 Apr 2012 22:20:18 +0000 (18:20 -0400)
committerLuke Dashjr <luke-jr+git@utopios.org>
Thu, 5 Apr 2012 22:20:18 +0000 (18:20 -0400)
1  2 
src/crypter.cpp

diff --combined src/crypter.cpp
@@@ -7,7 -7,7 +7,7 @@@
  #include <vector>
  #include <string>
  #include "headers.h"
 -#ifdef __WXMSW__
 +#ifdef WIN32
  #include <windows.h>
  #endif
  
@@@ -15,7 -15,7 +15,7 @@@
  #include "main.h"
  #include "util.h"
  
 -bool CCrypter::SetKeyFromPassphrase(const std::string& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod)
 +bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod)
  {
      if (nRounds < 1 || chSalt.size() != WALLET_CRYPTO_SALT_SIZE)
          return false;
@@@ -73,14 -73,16 +73,16 @@@ bool CCrypter::Encrypt(const CKeyingMat
  
      EVP_CIPHER_CTX ctx;
  
-     EVP_CIPHER_CTX_init(&ctx);
-     EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV);
-     EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen);
-     EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen);
+     bool fOk = true;
  
+     EVP_CIPHER_CTX_init(&ctx);
+     if (fOk) fOk = EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV);
+     if (fOk) fOk = EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen);
+     if (fOk) fOk = EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen);
      EVP_CIPHER_CTX_cleanup(&ctx);
  
+     if (!fOk) return false;
      vchCiphertext.resize(nCLen + nFLen);
      return true;
  }
@@@ -98,14 -100,16 +100,16 @@@ bool CCrypter::Decrypt(const std::vecto
  
      EVP_CIPHER_CTX ctx;
  
-     EVP_CIPHER_CTX_init(&ctx);
-     EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV);
-     EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen);
-     EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen);
+     bool fOk = true;
  
+     EVP_CIPHER_CTX_init(&ctx);
+     if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV);
+     if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen);
+     if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen);
      EVP_CIPHER_CTX_cleanup(&ctx);
  
+     if (!fOk) return false;
      vchPlaintext.resize(nPLen + nFLen);
      return true;
  }