Convert evp_test to GTest.
This is a fairly shallow conversion because of the somewhat screwy Error lines in the test which may target random functions like EVP_PKEY_CTX_set_signature_md. We probably should revise this, perhaps moving those to normal tests and leaving error codes to the core operation itself. BUG=129 Change-Id: I27dcc945058911b2de40cd48466d4e0366813a12 Reviewed-on: https://boringssl-review.googlesource.com/16988 Commit-Queue: David Benjamin <davidben@google.com> Commit-Queue: Steven Valdez <svaldez@google.com> Reviewed-by: Steven Valdez <svaldez@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
This commit is contained in:
committed by
CQ bot account: commit-bot@chromium.org
parent
e7d6988c25
commit
16c3f06eb0
@@ -236,6 +236,7 @@ add_executable(
|
||||
dsa/dsa_test.cc
|
||||
err/err_test.cc
|
||||
evp/evp_extra_test.cc
|
||||
evp/evp_test.cc
|
||||
evp/pbkdf_test.cc
|
||||
fipsmodule/aes/aes_test.cc
|
||||
fipsmodule/bn/bn_test.cc
|
||||
|
||||
@@ -20,15 +20,3 @@ add_library(
|
||||
print.c
|
||||
sign.c
|
||||
)
|
||||
|
||||
|
||||
add_executable(
|
||||
evp_test
|
||||
|
||||
evp_test.cc
|
||||
|
||||
$<TARGET_OBJECTS:test_support>
|
||||
)
|
||||
|
||||
target_link_libraries(evp_test crypto)
|
||||
add_dependencies(all_tests evp_test)
|
||||
|
||||
+27
-30
@@ -68,6 +68,8 @@ OPENSSL_MSVC_PRAGMA(warning(disable: 4702))
|
||||
|
||||
OPENSSL_MSVC_PRAGMA(warning(pop))
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <openssl/bytestring.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/digest.h>
|
||||
@@ -75,6 +77,7 @@ OPENSSL_MSVC_PRAGMA(warning(pop))
|
||||
#include <openssl/rsa.h>
|
||||
|
||||
#include "../test/file_test.h"
|
||||
#include "../test/test_util.h"
|
||||
|
||||
|
||||
// evp_test dispatches between multiple test types. PrivateKey tests take a key
|
||||
@@ -96,7 +99,7 @@ static const EVP_MD *GetDigest(FileTest *t, const std::string &name) {
|
||||
} else if (name == "SHA512") {
|
||||
return EVP_sha512();
|
||||
}
|
||||
t->PrintLine("Unknown digest: '%s'", name.c_str());
|
||||
ADD_FAILURE() << "Unknown digest: " << name;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -113,7 +116,7 @@ static int GetKeyType(FileTest *t, const std::string &name) {
|
||||
if (name == "Ed25519") {
|
||||
return EVP_PKEY_ED25519;
|
||||
}
|
||||
t->PrintLine("Unknown key type: '%s'", name.c_str());
|
||||
ADD_FAILURE() << "Unknown key type: " << name;
|
||||
return EVP_PKEY_NONE;
|
||||
}
|
||||
|
||||
@@ -130,7 +133,7 @@ static int GetRSAPadding(FileTest *t, int *out, const std::string &name) {
|
||||
*out = RSA_PKCS1_OAEP_PADDING;
|
||||
return true;
|
||||
}
|
||||
t->PrintLine("Unknown RSA padding mode: '%s'", name.c_str());
|
||||
ADD_FAILURE() << "Unknown RSA padding mode: " << name;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -155,10 +158,7 @@ static bool ImportKey(FileTest *t, KeyMap *key_map,
|
||||
if (!t->GetAttribute(&key_type, "Type")) {
|
||||
return false;
|
||||
}
|
||||
if (EVP_PKEY_id(pkey.get()) != GetKeyType(t, key_type)) {
|
||||
t->PrintLine("Bad key type.");
|
||||
return false;
|
||||
}
|
||||
EXPECT_EQ(GetKeyType(t, key_type), EVP_PKEY_id(pkey.get()));
|
||||
|
||||
// The key must re-encode correctly.
|
||||
bssl::ScopedCBB cbb;
|
||||
@@ -176,23 +176,16 @@ static bool ImportKey(FileTest *t, KeyMap *key_map,
|
||||
!t->GetBytes(&output, "Output")) {
|
||||
return false;
|
||||
}
|
||||
if (!t->ExpectBytesEqual(output.data(), output.size(), der, der_len)) {
|
||||
t->PrintLine("Re-encoding the key did not match.");
|
||||
return false;
|
||||
}
|
||||
EXPECT_EQ(Bytes(output), Bytes(der, der_len)) << "Re-encoding the key did not match.";
|
||||
|
||||
// Save the key for future tests.
|
||||
const std::string &key_name = t->GetParameter();
|
||||
if (key_map->count(key_name) > 0) {
|
||||
t->PrintLine("Duplicate key '%s'.", key_name.c_str());
|
||||
return false;
|
||||
}
|
||||
EXPECT_EQ(0u, key_map->count(key_name)) << "Duplicate key: " << key_name;
|
||||
(*key_map)[key_name] = std::move(pkey);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool TestEVP(FileTest *t, void *arg) {
|
||||
KeyMap *key_map = reinterpret_cast<KeyMap*>(arg);
|
||||
static bool TestEVP(FileTest *t, KeyMap *key_map) {
|
||||
if (t->GetType() == "PrivateKey") {
|
||||
return ImportKey(t, key_map, EVP_parse_private_key,
|
||||
EVP_marshal_private_key);
|
||||
@@ -223,14 +216,14 @@ static bool TestEVP(FileTest *t, void *arg) {
|
||||
key_op_init = EVP_PKEY_verify_init;
|
||||
verify_op = EVP_PKEY_verify_message;
|
||||
} else {
|
||||
t->PrintLine("Unknown test '%s'", t->GetType().c_str());
|
||||
ADD_FAILURE() << "Unknown test " << t->GetType();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Load the key.
|
||||
const std::string &key_name = t->GetParameter();
|
||||
if (key_map->count(key_name) == 0) {
|
||||
t->PrintLine("Could not find key '%s'.", key_name.c_str());
|
||||
ADD_FAILURE() << "Could not find key " << key_name;
|
||||
return false;
|
||||
}
|
||||
EVP_PKEY *key = (*key_map)[key_name].get();
|
||||
@@ -292,20 +285,24 @@ static bool TestEVP(FileTest *t, void *arg) {
|
||||
return false;
|
||||
}
|
||||
actual.resize(len);
|
||||
if (!t->GetBytes(&output, "Output") ||
|
||||
!t->ExpectBytesEqual(output.data(), output.size(), actual.data(), len)) {
|
||||
if (!t->GetBytes(&output, "Output")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
EXPECT_EQ(Bytes(output), Bytes(actual));
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
CRYPTO_library_init();
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "%s <test file.txt>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
KeyMap map;
|
||||
return FileTestMain(TestEVP, &map, argv[1]);
|
||||
TEST(EVPTest, TestVectors) {
|
||||
KeyMap key_map;
|
||||
FileTestGTest("crypto/evp/evp_tests.txt", [&](FileTest *t) {
|
||||
bool result = TestEVP(t, &key_map);
|
||||
if (t->HasAttribute("Error")) {
|
||||
ASSERT_FALSE(result) << "Operation unexpectedly succeeded.";
|
||||
uint32_t err = ERR_peek_error();
|
||||
EXPECT_EQ(t->GetAttributeOrDie("Error"), ERR_reason_error_string(err));
|
||||
} else {
|
||||
ASSERT_TRUE(result) << "Operation unexpectedly failed.";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ set(
|
||||
crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt
|
||||
crypto/curve25519/ed25519_tests.txt
|
||||
crypto/ecdh/ecdh_tests.txt
|
||||
crypto/evp/evp_tests.txt
|
||||
crypto/fipsmodule/aes/aes_tests.txt
|
||||
crypto/fipsmodule/bn/bn_tests.txt
|
||||
crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
[
|
||||
["crypto/crypto_test"],
|
||||
["crypto/evp/evp_test", "crypto/evp/evp_tests.txt"],
|
||||
["crypto/fipsmodule/example_mul"],
|
||||
["crypto/fipsmodule/p256-x86_64_test", "crypto/fipsmodule/ec/p256-x86_64_tests.txt"],
|
||||
["crypto/x509v3/tab_test"],
|
||||
|
||||
Reference in New Issue
Block a user