summaryrefslogtreecommitdiffstats
path: root/src/crypto/rsa/rsa_test.cc
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2015-11-05 19:23:03 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-11-05 19:23:03 +0000
commit307714c70648c5d1caa23193f59a78f2ff72d2ea (patch)
treeb4e43f0c1d2161af97e2b7e030644ca1d54a839c /src/crypto/rsa/rsa_test.cc
parentff852233d8e5d47ce7110147e836fc5a35047139 (diff)
parentfdeb488e6332a17729db5a04236e48a46a019272 (diff)
downloadexternal_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.cc73
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;