diff options
author | Kenny Root <kroot@google.com> | 2015-11-05 19:23:03 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-11-05 19:23:03 +0000 |
commit | 307714c70648c5d1caa23193f59a78f2ff72d2ea (patch) | |
tree | b4e43f0c1d2161af97e2b7e030644ca1d54a839c /src/crypto/rsa/rsa_test.cc | |
parent | ff852233d8e5d47ce7110147e836fc5a35047139 (diff) | |
parent | fdeb488e6332a17729db5a04236e48a46a019272 (diff) | |
download | external_boringssl-307714c70648c5d1caa23193f59a78f2ff72d2ea.zip external_boringssl-307714c70648c5d1caa23193f59a78f2ff72d2ea.tar.gz external_boringssl-307714c70648c5d1caa23193f59a78f2ff72d2ea.tar.bz2 |
Merge "external/boringssl: sync with upstream."
Diffstat (limited to 'src/crypto/rsa/rsa_test.cc')
-rw-r--r-- | src/crypto/rsa/rsa_test.cc | 73 |
1 files changed, 40 insertions, 33 deletions
diff --git a/src/crypto/rsa/rsa_test.cc b/src/crypto/rsa/rsa_test.cc index d52b78b..57b360c 100644 --- a/src/crypto/rsa/rsa_test.cc +++ b/src/crypto/rsa/rsa_test.cc @@ -498,7 +498,7 @@ static const uint8_t kEstonianRSAKey[] = { static bool TestRSA(const uint8_t *der, size_t der_len, const uint8_t *oaep_ciphertext, size_t oaep_ciphertext_len) { - ScopedRSA key(d2i_RSAPrivateKey(nullptr, &der, der_len)); + ScopedRSA key(RSA_private_key_from_bytes(der, der_len)); if (!key) { return false; } @@ -510,43 +510,48 @@ static bool TestRSA(const uint8_t *der, size_t der_len, uint8_t ciphertext[256]; - int num = RSA_public_encrypt(kPlaintextLen, kPlaintext, ciphertext, key.get(), - RSA_PKCS1_PADDING); - if (num < 0 || (size_t)num != RSA_size(key.get())) { + size_t ciphertext_len = 0; + if (!RSA_encrypt(key.get(), &ciphertext_len, ciphertext, sizeof(ciphertext), + kPlaintext, kPlaintextLen, RSA_PKCS1_PADDING) || + ciphertext_len != RSA_size(key.get())) { fprintf(stderr, "PKCS#1 v1.5 encryption failed!\n"); return false; } uint8_t plaintext[256]; - num = RSA_private_decrypt(num, ciphertext, plaintext, key.get(), - RSA_PKCS1_PADDING); - if (num < 0 || - (size_t)num != kPlaintextLen || memcmp(plaintext, kPlaintext, num) != 0) { + size_t plaintext_len = 0; + if (!RSA_decrypt(key.get(), &plaintext_len, plaintext, sizeof(plaintext), + ciphertext, ciphertext_len, RSA_PKCS1_PADDING) || + plaintext_len != kPlaintextLen || + memcmp(plaintext, kPlaintext, plaintext_len) != 0) { fprintf(stderr, "PKCS#1 v1.5 decryption failed!\n"); return false; } - num = RSA_public_encrypt(kPlaintextLen, kPlaintext, ciphertext, key.get(), - RSA_PKCS1_OAEP_PADDING); - if (num < 0 || (size_t)num != RSA_size(key.get())) { + ciphertext_len = 0; + if (!RSA_encrypt(key.get(), &ciphertext_len, ciphertext, sizeof(ciphertext), + kPlaintext, kPlaintextLen, RSA_PKCS1_OAEP_PADDING) || + ciphertext_len != RSA_size(key.get())) { fprintf(stderr, "OAEP encryption failed!\n"); return false; } - num = RSA_private_decrypt(num, ciphertext, plaintext, key.get(), - RSA_PKCS1_OAEP_PADDING); - if (num < 0 || - (size_t)num != kPlaintextLen || memcmp(plaintext, kPlaintext, num) != 0) { + plaintext_len = 0; + if (!RSA_decrypt(key.get(), &plaintext_len, plaintext, sizeof(plaintext), + ciphertext, ciphertext_len, RSA_PKCS1_OAEP_PADDING) || + plaintext_len != kPlaintextLen || + memcmp(plaintext, kPlaintext, plaintext_len) != 0) { fprintf(stderr, "OAEP decryption (encrypted data) failed!\n"); return false; } // |oaep_ciphertext| should decrypt to |kPlaintext|. - num = RSA_private_decrypt(oaep_ciphertext_len, oaep_ciphertext, plaintext, - key.get(), RSA_PKCS1_OAEP_PADDING); - - if (num < 0 || - (size_t)num != kPlaintextLen || memcmp(plaintext, kPlaintext, num) != 0) { + plaintext_len = 0; + if (!RSA_decrypt(key.get(), &plaintext_len, plaintext, sizeof(plaintext), + oaep_ciphertext, oaep_ciphertext_len, + RSA_PKCS1_OAEP_PADDING) || + plaintext_len != kPlaintextLen || + memcmp(plaintext, kPlaintext, plaintext_len) != 0) { fprintf(stderr, "OAEP decryption (test vector data) failed!\n"); return false; } @@ -554,20 +559,22 @@ static bool TestRSA(const uint8_t *der, size_t der_len, // Try decrypting corrupted ciphertexts. memcpy(ciphertext, oaep_ciphertext, oaep_ciphertext_len); for (size_t i = 0; i < oaep_ciphertext_len; i++) { - uint8_t saved = ciphertext[i]; - for (unsigned b = 0; b < 256; b++) { - if (b == saved) { - continue; - } - ciphertext[i] = b; - num = RSA_private_decrypt(num, ciphertext, plaintext, key.get(), - RSA_PKCS1_OAEP_PADDING); - if (num > 0) { - fprintf(stderr, "Corrupt data decrypted!\n"); - return false; - } + ciphertext[i] ^= 1; + if (RSA_decrypt(key.get(), &plaintext_len, plaintext, sizeof(plaintext), + ciphertext, oaep_ciphertext_len, RSA_PKCS1_OAEP_PADDING)) { + fprintf(stderr, "Corrupt data decrypted!\n"); + return false; + } + ciphertext[i] ^= 1; + } + + // Test truncated ciphertexts. + for (size_t len = 0; len < oaep_ciphertext_len; len++) { + if (RSA_decrypt(key.get(), &plaintext_len, plaintext, sizeof(plaintext), + ciphertext, len, RSA_PKCS1_OAEP_PADDING)) { + fprintf(stderr, "Corrupt data decrypted!\n"); + return false; } - ciphertext[i] = saved; } return true; |