• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <stdarg.h>
6 
7 #include <string>
8 
9 #include "base/base_paths.h"
10 #include "base/command_line.h"
11 #include "base/files/file_path.h"
12 #include "base/logging.h"
13 #include "base/path_service.h"
14 #include "base/process/launch.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 
17 namespace {
18 
TestProcess(const std::string & name,const std::vector<base::CommandLine::StringType> & args)19 void TestProcess(const std::string& name,
20                  const std::vector<base::CommandLine::StringType>& args) {
21   base::FilePath exe_dir;
22   ASSERT_TRUE(PathService::Get(base::DIR_EXE, &exe_dir));
23   base::FilePath test_binary =
24       exe_dir.AppendASCII("boringssl_" + name);
25   base::CommandLine cmd(test_binary);
26 
27   for (size_t i = 0; i < args.size(); ++i) {
28     cmd.AppendArgNative(args[i]);
29   }
30 
31   std::string output;
32   EXPECT_TRUE(base::GetAppOutput(cmd, &output));
33 
34   const bool ok = output.size() >= 5 &&
35                   memcmp("PASS\n", &output[output.size() - 5], 5) == 0 &&
36                   (output.size() == 5 || output[output.size() - 6] == '\n');
37 
38   EXPECT_TRUE(ok) << output;
39 }
40 
TestSimple(const std::string & name)41 void TestSimple(const std::string& name) {
42   std::vector<base::CommandLine::StringType> empty;
43   TestProcess(name, empty);
44 }
45 
BoringSSLPath(base::FilePath * result)46 bool BoringSSLPath(base::FilePath* result) {
47   if (!PathService::Get(base::DIR_SOURCE_ROOT, result))
48     return false;
49 
50   *result = result->Append(FILE_PATH_LITERAL("third_party"));
51   *result = result->Append(FILE_PATH_LITERAL("boringssl"));
52   *result = result->Append(FILE_PATH_LITERAL("src"));
53   return true;
54 }
55 
CryptoCipherPath(base::FilePath * result)56 bool CryptoCipherPath(base::FilePath *result) {
57   if (!BoringSSLPath(result))
58     return false;
59 
60   *result = result->Append(FILE_PATH_LITERAL("crypto"));
61   *result = result->Append(FILE_PATH_LITERAL("cipher"));
62   return true;
63 }
64 
65 }  // anonymous namespace
66 
TEST(BoringSSL,AES128GCM)67 TEST(BoringSSL, AES128GCM) {
68   base::FilePath data_file;
69   ASSERT_TRUE(CryptoCipherPath(&data_file));
70   data_file = data_file.Append(FILE_PATH_LITERAL("aes_128_gcm_tests.txt"));
71 
72   std::vector<base::CommandLine::StringType> args;
73   args.push_back(FILE_PATH_LITERAL("aes-128-gcm"));
74   args.push_back(data_file.value());
75 
76   TestProcess("aead_test", args);
77 }
78 
TEST(BoringSSL,AES256GCM)79 TEST(BoringSSL, AES256GCM) {
80   base::FilePath data_file;
81   ASSERT_TRUE(CryptoCipherPath(&data_file));
82   data_file = data_file.Append(FILE_PATH_LITERAL("aes_256_gcm_tests.txt"));
83 
84   std::vector<base::CommandLine::StringType> args;
85   args.push_back(FILE_PATH_LITERAL("aes-256-gcm"));
86   args.push_back(data_file.value());
87 
88   TestProcess("aead_test", args);
89 }
90 
TEST(BoringSSL,ChaCha20Poly1305)91 TEST(BoringSSL, ChaCha20Poly1305) {
92   base::FilePath data_file;
93   ASSERT_TRUE(CryptoCipherPath(&data_file));
94   data_file =
95       data_file.Append(FILE_PATH_LITERAL("chacha20_poly1305_tests.txt"));
96 
97   std::vector<base::CommandLine::StringType> args;
98   args.push_back(FILE_PATH_LITERAL("chacha20-poly1305"));
99   args.push_back(data_file.value());
100 
101   TestProcess("aead_test", args);
102 }
103 
TEST(BoringSSL,RC4MD5)104 TEST(BoringSSL, RC4MD5) {
105   base::FilePath data_file;
106   ASSERT_TRUE(CryptoCipherPath(&data_file));
107   data_file = data_file.Append(FILE_PATH_LITERAL("rc4_md5_tests.txt"));
108 
109   std::vector<base::CommandLine::StringType> args;
110   args.push_back(FILE_PATH_LITERAL("rc4-md5"));
111   args.push_back(data_file.value());
112 
113   TestProcess("aead_test", args);
114 }
115 
TEST(BoringSSL,AESKW128)116 TEST(BoringSSL, AESKW128) {
117   base::FilePath data_file;
118   ASSERT_TRUE(CryptoCipherPath(&data_file));
119   data_file = data_file.Append(FILE_PATH_LITERAL("aes_128_key_wrap_tests.txt"));
120 
121   std::vector<base::CommandLine::StringType> args;
122   args.push_back(FILE_PATH_LITERAL("aes-128-key-wrap"));
123   args.push_back(data_file.value());
124 
125   TestProcess("aead_test", args);
126 }
127 
TEST(BoringSSL,AESKW256)128 TEST(BoringSSL, AESKW256) {
129   base::FilePath data_file;
130   ASSERT_TRUE(CryptoCipherPath(&data_file));
131   data_file = data_file.Append(FILE_PATH_LITERAL("aes_256_key_wrap_tests.txt"));
132 
133   std::vector<base::CommandLine::StringType> args;
134   args.push_back(FILE_PATH_LITERAL("aes-256-key-wrap"));
135   args.push_back(data_file.value());
136 
137   TestProcess("aead_test", args);
138 }
139 
TEST(BoringSSL,Base64)140 TEST(BoringSSL, Base64) {
141   TestSimple("base64_test");
142 }
143 
TEST(BoringSSL,BIO)144 TEST(BoringSSL, BIO) {
145   TestSimple("bio_test");
146 }
147 
TEST(BoringSSL,BN)148 TEST(BoringSSL, BN) {
149   TestSimple("bn_test");
150 }
151 
TEST(BoringSSL,ByteString)152 TEST(BoringSSL, ByteString) {
153   TestSimple("bytestring_test");
154 }
155 
TEST(BoringSSL,Cipher)156 TEST(BoringSSL, Cipher) {
157   base::FilePath data_file;
158   ASSERT_TRUE(CryptoCipherPath(&data_file));
159   data_file = data_file.Append(FILE_PATH_LITERAL("cipher_test.txt"));
160 
161   std::vector<base::CommandLine::StringType> args;
162   args.push_back(data_file.value());
163 
164   TestProcess("cipher_test", args);
165 }
166 
TEST(BoringSSL,DH)167 TEST(BoringSSL, DH) {
168   TestSimple("dh_test");
169 }
170 
TEST(BoringSSL,DSA)171 TEST(BoringSSL, DSA) {
172   TestSimple("dsa_test");
173 }
174 
TEST(BoringSSL,ECDSA)175 TEST(BoringSSL, ECDSA) {
176   TestSimple("ecdsa_test");
177 }
178 
TEST(BoringSSL,ERR)179 TEST(BoringSSL, ERR) {
180   TestSimple("err_test");
181 }
182 
TEST(BoringSSL,GCM)183 TEST(BoringSSL, GCM) {
184   TestSimple("gcm_test");
185 }
186 
TEST(BoringSSL,HMAC)187 TEST(BoringSSL, HMAC) {
188   TestSimple("hmac_test");
189 }
190 
TEST(BoringSSL,LH)191 TEST(BoringSSL, LH) {
192   TestSimple("lhash_test");
193 }
194 
TEST(BoringSSL,MD5)195 TEST(BoringSSL, MD5) {
196   TestSimple("md5_test");
197 }
198 
TEST(BoringSSL,RSA)199 TEST(BoringSSL, RSA) {
200   TestSimple("rsa_test");
201 }
202 
TEST(BoringSSL,SHA1)203 TEST(BoringSSL, SHA1) {
204   TestSimple("sha1_test");
205 }
206 
TEST(BoringSSL,PKCS7)207 TEST(BoringSSL, PKCS7) {
208   TestSimple("pkcs7_test");
209 }
210 
TEST(BoringSSL,PKCS12)211 TEST(BoringSSL, PKCS12) {
212   TestSimple("pkcs12_test");
213 }
214 
TEST(BoringSSL,ExampleMul)215 TEST(BoringSSL, ExampleMul) {
216   TestSimple("example_mul");
217 }
218 
TEST(BoringSSL,ExampleSign)219 TEST(BoringSSL, ExampleSign) {
220   TestSimple("example_sign");
221 }
222 
TEST(BoringSSL,SSL)223 TEST(BoringSSL, SSL) {
224   TestSimple("ssl_test");
225 }
226 
TEST(BoringSSL,PQueue)227 TEST(BoringSSL, PQueue) {
228   TestSimple("pqueue_test");
229 }
230