19 #include <gtest/gtest.h> 
   23 #include "../internal.h" 
   24 #include "../test/file_test.h" 
   25 #include "../test/test_util.h" 
   26 #include "../test/wycheproof_util.h" 
   29 TEST(X25519Test, TestVector) {
 
   31   static const uint8_t kScalar1[32] = {
 
   32       0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d, 0x3b, 0x16, 0x15,
 
   33       0x4b, 0x82, 0x46, 0x5e, 0xdd, 0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc,
 
   34       0x5a, 0x18, 0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4,
 
   36   static const uint8_t kPoint1[32] = {
 
   37       0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb, 0x35, 0x94, 0xc1,
 
   38       0xa4, 0x24, 0xb1, 0x5f, 0x7c, 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3,
 
   39       0x35, 0x3b, 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c,
 
   45   static const uint8_t kExpected1[32] = {
 
   46       0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90, 0x8e, 0x94, 0xea,
 
   47       0x4d, 0xf2, 0x8d, 0x08, 0x4f, 0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c,
 
   48       0x71, 0xf7, 0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52,
 
   52   static const uint8_t kScalar2[32] = {
 
   53       0x4b, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c, 0x5a, 0xd2, 0x26,
 
   54       0x91, 0x95, 0x7d, 0x6a, 0xf5, 0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea,
 
   55       0x01, 0xd4, 0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x0d,
 
   57   static const uint8_t kPoint2[32] = {
 
   58       0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3, 0xf4, 0xb7, 0x95,
 
   59       0x9d, 0x05, 0x38, 0xae, 0x2c, 0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0,
 
   60       0x3c, 0x3e, 0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x93,
 
   65   static const uint8_t kExpected2[32] = {
 
   66       0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d, 0x7a, 0xad, 0xe4,
 
   67       0x5c, 0xb4, 0xb8, 0x73, 0xf8, 0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f,
 
   68       0xa1, 0x52, 0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57,
 
   73 TEST(X25519Test, SmallOrder) {
 
   74   static const uint8_t kSmallOrderPoint[32] = {
 
   75       0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae, 0x16, 0x56, 0xe3,
 
   76       0xfa, 0xf1, 0x9f, 0xc4, 0x6a, 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32,
 
   77       0xb1, 0xfd, 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8,
 
   85       << 
"X25519 returned success with a small-order input.";
 
   88   static const uint8_t kZeros[32] = {0};
 
   92 TEST(X25519Test, Iterated) {
 
   96   for (
unsigned i = 0; 
i < 1000; 
i++) {
 
  102   static const uint8_t kExpected[32] = {
 
  103       0x68, 0x4c, 0xf5, 0x9b, 0xa8, 0x33, 0x09, 0x55, 0x28, 0x00, 0xef,
 
  104       0x56, 0x6f, 0x2f, 0x4d, 0x3c, 0x1c, 0x38, 0x87, 0xc4, 0x93, 0x60,
 
  105       0xe3, 0x87, 0x5f, 0x2e, 0xb9, 0x4d, 0x99, 0x53, 0x2c, 0x51,
 
  111 TEST(X25519Test, DISABLED_IteratedLarge) {
 
  115   for (
unsigned i = 0; 
i < 1000000; 
i++) {
 
  121   static const uint8_t kExpected[32] = {
 
  122       0x7c, 0x39, 0x11, 0xe0, 0xab, 0x25, 0x86, 0xfd, 0x86, 0x44, 0x97,
 
  123       0x29, 0x7e, 0x57, 0x5e, 0x6f, 0x3b, 0xc6, 0x01, 0xc0, 0x88, 0x3c,
 
  124       0x30, 0xdf, 0x5f, 0x4d, 0xd2, 0xd2, 0x4f, 0x66, 0x54, 0x24,
 
  131   FileTestGTest(
"third_party/wycheproof_testvectors/x25519_test.txt",
 
  133       t->IgnoreInstruction(
"curve");
 
  134       t->IgnoreAttribute(
"curve");
 
  138       std::vector<uint8_t> priv, pub, shared;
 
  145       int ret = 
X25519(secret, priv.data(), pub.data());