Convert ed25519_test to GTest.

BUG=129

Change-Id: I784a745f102d9d09d35b27542d94b2b85dfb332e
Reviewed-on: https://boringssl-review.googlesource.com/16508
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 3a2e802..60bec17 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -244,6 +244,7 @@
   cmac/cmac_test.cc
   compiler_test.cc
   constant_time_test.cc
+  curve25519/ed25519_test.cc
   curve25519/spake25519_test.cc
   curve25519/x25519_test.cc
   dh/dh_test.cc
diff --git a/crypto/curve25519/CMakeLists.txt b/crypto/curve25519/CMakeLists.txt
index ae95be0..c6004d3 100644
--- a/crypto/curve25519/CMakeLists.txt
+++ b/crypto/curve25519/CMakeLists.txt
@@ -27,13 +27,3 @@
 
   ${CURVE25519_ARCH_SOURCES}
 )
-
-add_executable(
-  ed25519_test
-
-  ed25519_test.cc
-  $<TARGET_OBJECTS:test_support>
-)
-
-target_link_libraries(ed25519_test crypto)
-add_dependencies(all_tests ed25519_test)
diff --git a/crypto/curve25519/ed25519_test.cc b/crypto/curve25519/ed25519_test.cc
index 7581730..31216f1 100644
--- a/crypto/curve25519/ed25519_test.cc
+++ b/crypto/curve25519/ed25519_test.cc
@@ -15,46 +15,36 @@
 #include <stdint.h>
 #include <string.h>
 
+#include <gtest/gtest.h>
+
 #include <openssl/curve25519.h>
 
 #include "../internal.h"
 #include "../test/file_test.h"
+#include "../test/test_util.h"
 
 
-static bool TestSignature(FileTest *t, void *arg) {
-  std::vector<uint8_t> private_key, public_key, message, expected_signature;
-  if (!t->GetBytes(&private_key, "PRIV") ||
-      private_key.size() != 64 ||
-      !t->GetBytes(&public_key, "PUB") ||
-      public_key.size() != 32 ||
-      !t->GetBytes(&message, "MESSAGE") ||
-      !t->GetBytes(&expected_signature, "SIG") ||
-      expected_signature.size() != 64) {
-    return false;
-  }
+TEST(Ed25519Test, TestVectors) {
+  FileTestGTest("crypto/curve25519/ed25519_tests.txt", [](FileTest *t) {
+    std::vector<uint8_t> private_key, public_key, message, expected_signature;
+    ASSERT_TRUE(t->GetBytes(&private_key, "PRIV"));
+    ASSERT_EQ(64u, private_key.size());
+    ASSERT_TRUE(t->GetBytes(&public_key, "PUB"));
+    ASSERT_EQ(32u, public_key.size());
+    ASSERT_TRUE(t->GetBytes(&message, "MESSAGE"));
+    ASSERT_TRUE(t->GetBytes(&expected_signature, "SIG"));
+    ASSERT_EQ(64u, expected_signature.size());
 
-  uint8_t signature[64];
-  if (!ED25519_sign(signature, message.data(), message.size(),
-                    private_key.data())) {
-    t->PrintLine("ED25519_sign failed");
-    return false;
-  }
-
-  if (!t->ExpectBytesEqual(expected_signature.data(), expected_signature.size(),
-                           signature, sizeof(signature))) {
-    return false;
-  }
-
-  if (!ED25519_verify(message.data(), message.size(), signature,
-                      public_key.data())) {
-    t->PrintLine("ED25519_verify failed");
-    return false;
-  }
-
-  return true;
+    uint8_t signature[64];
+    ASSERT_TRUE(ED25519_sign(signature, message.data(), message.size(),
+                             private_key.data()));
+    EXPECT_EQ(Bytes(expected_signature), Bytes(signature));
+    EXPECT_TRUE(ED25519_verify(message.data(), message.size(), signature,
+                               public_key.data()));
+  });
 }
 
-static bool TestKeypairFromSeed() {
+TEST(Ed25519Test, KeypairFromSeed) {
   uint8_t public_key1[32], private_key1[64];
   ED25519_keypair(public_key1, private_key1);
 
@@ -64,20 +54,6 @@
   uint8_t public_key2[32], private_key2[64];
   ED25519_keypair_from_seed(public_key2, private_key2, seed);
 
-  if (OPENSSL_memcmp(public_key1, public_key2, sizeof(public_key1)) != 0 ||
-      OPENSSL_memcmp(private_key1, private_key2, sizeof(private_key1)) != 0) {
-    fprintf(stderr, "TestKeypairFromSeed: resulting keypairs did not match.\n");
-    return false;
-  }
-
-  return true;
-}
-
-int main(int argc, char **argv) {
-  if (argc != 2) {
-    fprintf(stderr, "%s <test input.txt>\n", argv[0]);
-    return 1;
-  }
-
-  return TestKeypairFromSeed() && FileTestMain(TestSignature, nullptr, argv[1]);
+  EXPECT_EQ(Bytes(public_key1), Bytes(public_key2));
+  EXPECT_EQ(Bytes(private_key1), Bytes(private_key2));
 }
diff --git a/sources.cmake b/sources.cmake
index 185e961..4de0d07 100644
--- a/sources.cmake
+++ b/sources.cmake
@@ -6,5 +6,6 @@
 set(
   CRYPTO_TEST_DATA
 
+  crypto/curve25519/ed25519_tests.txt
   crypto/fipsmodule/aes/aes_tests.txt
 )
diff --git a/util/all_tests.json b/util/all_tests.json
index f926d07..41cf230 100644
--- a/util/all_tests.json
+++ b/util/all_tests.json
@@ -32,7 +32,6 @@
 	["crypto/cipher_extra/cipher_test", "crypto/cipher_extra/test/nist_cavp/tdes_cbc.txt"],
 	["crypto/cipher_extra/cipher_test", "crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt"],
 	["crypto/crypto_test"],
-	["crypto/curve25519/ed25519_test", "crypto/curve25519/ed25519_tests.txt"],
 	["crypto/ecdh/ecdh_test", "crypto/ecdh/ecdh_tests.txt"],
 	["crypto/evp/evp_test", "crypto/evp/evp_tests.txt"],
 	["crypto/evp/pbkdf_test"],