Remove the dual-callback scheme for numeric and pointer thread IDs,
[openssl.git] / crypto / rsa / rsa_test.c
index 51135ea3e03ca3c693e8e90564e4687bea9eae34..c8705a0f6e59939ad51415face76c0f49f5ea33a 100644 (file)
@@ -219,6 +219,7 @@ int main(int argc, char *argv[])
     int plen;
     int clen = 0;
     int num;
+    int n;
 
     CRYPTO_malloc_debug_init();
     CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);
@@ -278,7 +279,7 @@ int main(int argc, char *argv[])
            err=1;
            goto next;
            }
-  
+
        num = RSA_private_decrypt(num, ctext, ptext, key,
                                  RSA_PKCS1_OAEP_PADDING);
        if (num != plen || memcmp(ptext, ptext_ex, num) != 0)
@@ -287,10 +288,7 @@ int main(int argc, char *argv[])
            err=1;
            }
        else if (memcmp(ctext, ctext_ex, num) == 0)
-           {
            printf("OAEP test vector %d passed!\n", v);
-           goto next;
-           }
     
        /* Different ciphertexts (rsa_oaep.c without -DPKCS_TESTVECT).
           Try decrypting ctext_ex */
@@ -305,12 +303,32 @@ int main(int argc, char *argv[])
            }
        else
            printf("OAEP encryption/decryption ok\n");
+
+       /* Try decrypting corrupted ciphertexts */
+       for(n = 0 ; n < clen ; ++n)
+           {
+           int b;
+           unsigned char saved = ctext[n];
+           for(b = 0 ; b < 256 ; ++b)
+               {
+               if(b == saved)
+                   continue;
+               ctext[n] = b;
+               num = RSA_private_decrypt(num, ctext, ptext, key,
+                                         RSA_PKCS1_OAEP_PADDING);
+               if(num > 0)
+                   {
+                   printf("Corrupt data decrypted!\n");
+                   err = 1;
+                   }
+               }
+           }
     next:
        RSA_free(key);
        }
 
     CRYPTO_cleanup_all_ex_data();
-    ERR_remove_state(0);
+    ERR_remove_thread_state(NULL);
 
     CRYPTO_mem_leaks_fp(stderr);