Blob Blame History Raw
--- boinc_core_release_6_4_5/lib/crypt.cpp (revision 16069)
+++ boinc_core_release_6_4_5/lib/crypt.cpp (revision 16883)
@@ -244,5 +244,5 @@
 //
 int encrypt_private(R_RSA_PRIVATE_KEY& key, DATA_BLOCK& in, DATA_BLOCK& out) {
-    int n, modulus_len;
+    int n, modulus_len, retval;
 
     modulus_len = (key.bits+7)/8;
@@ -253,5 +253,9 @@
     RSA* rp = RSA_new();
     private_to_openssl(key, rp);
-    RSA_private_encrypt(n, in.data, out.data, rp, RSA_PKCS1_PADDING);
+    retval = RSA_private_encrypt(n, in.data, out.data, rp, RSA_PKCS1_PADDING);
+    if (retval < 0) {
+        RSA_free(rp);
+        return ERR_CRYPTO;
+    }
     out.len = RSA_size(rp);
     RSA_free(rp);
@@ -260,8 +264,14 @@
 
 int decrypt_public(R_RSA_PUBLIC_KEY& key, DATA_BLOCK& in, DATA_BLOCK& out) {
+    int retval;
     RSA* rp = RSA_new();
     public_to_openssl(key, rp);
-    RSA_public_decrypt(in.len, in.data, out.data, rp, RSA_PKCS1_PADDING);
+    retval = RSA_public_decrypt(in.len, in.data, out.data, rp, RSA_PKCS1_PADDING);
+    if (retval < 0) {
+        RSA_free(rp);
+        return ERR_CRYPTO;
+    }
     out.len = RSA_size(rp);
+    RSA_free(rp);
     return 0;
 }
--- boinc_core_release_6_4_5/lib/error_numbers.h (revision 15762)
+++ boinc_core_release_6_4_5/lib/error_numbers.h (revision 16883)
@@ -186,4 +186,5 @@
 #define ERR_SYMLINK         -229
 #define ERR_DB_CONN_LOST    -230
+#define ERR_CRYPTO          -231
 
 // PLEASE: add a text description of your error to 
--- boinc_core_release_6_4_5/lib/str_util.cpp (revision 16069)
+++ boinc_core_release_6_4_5/lib/str_util.cpp (revision 16883)
@@ -736,4 +736,5 @@
         case ERR_SYMLINK: return "symlink() failed";
         case ERR_DB_CONN_LOST: return "DB connection lost during enumeration";
+        case ERR_CRYPTO: return "encryption error";
         case 404: return "HTTP file not found";
         case 407: return "HTTP proxy authentication failure";