ecdsa_test.cc
Go to the documentation of this file.
1 /* ====================================================================
2  * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  *
16  * 3. All advertising materials mentioning features or use of this
17  * software must display the following acknowledgment:
18  * "This product includes software developed by the OpenSSL Project
19  * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
20  *
21  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22  * endorse or promote products derived from this software without
23  * prior written permission. For written permission, please contact
24  * openssl-core@OpenSSL.org.
25  *
26  * 5. Products derived from this software may not be called "OpenSSL"
27  * nor may "OpenSSL" appear in their names without prior written
28  * permission of the OpenSSL Project.
29  *
30  * 6. Redistributions of any form whatsoever must retain the following
31  * acknowledgment:
32  * "This product includes software developed by the OpenSSL Project
33  * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
34  *
35  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46  * OF THE POSSIBILITY OF SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This product includes cryptographic software written by Eric Young
50  * (eay@cryptsoft.com). This product includes software written by Tim
51  * Hudson (tjh@cryptsoft.com). */
52 
53 #include <openssl/ecdsa.h>
54 
55 #include <vector>
56 
57 #include <gtest/gtest.h>
58 
59 #include <openssl/bn.h>
60 #include <openssl/crypto.h>
61 #include <openssl/ec.h>
62 #include <openssl/err.h>
63 #include <openssl/mem.h>
64 #include <openssl/nid.h>
65 #include <openssl/rand.h>
66 
67 #include "../ec/internal.h"
68 #include "../../test/file_test.h"
69 #include "../../test/test_util.h"
70 
71 
72 static bssl::UniquePtr<BIGNUM> HexToBIGNUM(const char *hex) {
73  BIGNUM *bn = nullptr;
74  BN_hex2bn(&bn, hex);
75  return bssl::UniquePtr<BIGNUM>(bn);
76 }
77 
78 // Though we do not support secp160r1, it is reachable from the deprecated
79 // custom curve APIs and has some unique properties (n is larger than p with the
80 // difference crossing a word boundary on 32-bit), so test it explicitly.
81 static bssl::UniquePtr<EC_GROUP> NewSecp160r1Group() {
82  static const char kP[] = "ffffffffffffffffffffffffffffffff7fffffff";
83  static const char kA[] = "ffffffffffffffffffffffffffffffff7ffffffc";
84  static const char kB[] = "1c97befc54bd7a8b65acf89f81d4d4adc565fa45";
85  static const char kX[] = "4a96b5688ef573284664698968c38bb913cbfc82";
86  static const char kY[] = "23a628553168947d59dcc912042351377ac5fb32";
87  static const char kN[] = "0100000000000000000001f4c8f927aed3ca752257";
88 
89  bssl::UniquePtr<BIGNUM> p = HexToBIGNUM(kP), a = HexToBIGNUM(kA),
90  b = HexToBIGNUM(kB), x = HexToBIGNUM(kX),
91  y = HexToBIGNUM(kY), n = HexToBIGNUM(kN);
92  if (!p || !a || !b || !x || !y || !n) {
93  return nullptr;
94  }
95 
96  bssl::UniquePtr<EC_GROUP> group(
97  EC_GROUP_new_curve_GFp(p.get(), a.get(), b.get(), nullptr));
98  if (!group) {
99  return nullptr;
100  }
101  bssl::UniquePtr<EC_POINT> g(EC_POINT_new(group.get()));
102  if (!g ||
103  !EC_POINT_set_affine_coordinates_GFp(group.get(), g.get(), x.get(),
104  y.get(), nullptr) ||
105  !EC_GROUP_set_generator(group.get(), g.get(), n.get(), BN_value_one())) {
106  return nullptr;
107  }
108  return group;
109 }
110 
111 enum API {
114 };
115 
116 // VerifyECDSASig checks that verifying |ecdsa_sig| gives |expected_result|.
117 static void VerifyECDSASig(API api, const uint8_t *digest, size_t digest_len,
118  const ECDSA_SIG *ecdsa_sig, EC_KEY *eckey,
119  int expected_result) {
120  switch (api) {
121  case kEncodedAPI: {
122  uint8_t *der;
123  size_t der_len;
124  ASSERT_TRUE(ECDSA_SIG_to_bytes(&der, &der_len, ecdsa_sig));
125  bssl::UniquePtr<uint8_t> delete_der(der);
126  EXPECT_EQ(expected_result,
127  ECDSA_verify(0, digest, digest_len, der, der_len, eckey));
128  break;
129  }
130 
131  case kRawAPI:
132  EXPECT_EQ(expected_result,
133  ECDSA_do_verify(digest, digest_len, ecdsa_sig, eckey));
134  break;
135 
136  default:
137  FAIL() << "Unknown API type.";
138  }
139 }
140 
141 // TestTamperedSig verifies that signature verification fails when a valid
142 // signature is tampered with. |ecdsa_sig| must be a valid signature, which will
143 // be modified.
144 static void TestTamperedSig(API api, const uint8_t *digest,
145  size_t digest_len, ECDSA_SIG *ecdsa_sig,
146  EC_KEY *eckey, const BIGNUM *order) {
147  SCOPED_TRACE(api);
148  // Modify a single byte of the signature: to ensure we don't
149  // garble the ASN1 structure, we read the raw signature and
150  // modify a byte in one of the bignums directly.
151 
152  // Store the two BIGNUMs in raw_buf.
153  size_t r_len = BN_num_bytes(ecdsa_sig->r);
154  size_t s_len = BN_num_bytes(ecdsa_sig->s);
155  size_t bn_len = BN_num_bytes(order);
156  ASSERT_LE(r_len, bn_len);
157  ASSERT_LE(s_len, bn_len);
158  size_t buf_len = 2 * bn_len;
159  std::vector<uint8_t> raw_buf(buf_len);
160  // Pad the bignums with leading zeroes.
161  ASSERT_TRUE(BN_bn2bin_padded(raw_buf.data(), bn_len, ecdsa_sig->r));
162  ASSERT_TRUE(BN_bn2bin_padded(raw_buf.data() + bn_len, bn_len, ecdsa_sig->s));
163 
164  // Modify a single byte in the buffer.
165  size_t offset = raw_buf[10] % buf_len;
166  uint8_t dirt = raw_buf[11] ? raw_buf[11] : 1;
167  raw_buf[offset] ^= dirt;
168  // Now read the BIGNUMs back in from raw_buf.
169  ASSERT_TRUE(BN_bin2bn(raw_buf.data(), bn_len, ecdsa_sig->r));
170  ASSERT_TRUE(BN_bin2bn(raw_buf.data() + bn_len, bn_len, ecdsa_sig->s));
171  VerifyECDSASig(api, digest, digest_len, ecdsa_sig, eckey, 0);
172 
173  // Sanity check: Undo the modification and verify signature.
174  raw_buf[offset] ^= dirt;
175  ASSERT_TRUE(BN_bin2bn(raw_buf.data(), bn_len, ecdsa_sig->r));
176  ASSERT_TRUE(BN_bin2bn(raw_buf.data() + bn_len, bn_len, ecdsa_sig->s));
177  VerifyECDSASig(api, digest, digest_len, ecdsa_sig, eckey, 1);
178 }
179 
180 TEST(ECDSATest, BuiltinCurves) {
181  // Fill digest values with some random data.
182  uint8_t digest[20], wrong_digest[20];
183  ASSERT_TRUE(RAND_bytes(digest, 20));
184  ASSERT_TRUE(RAND_bytes(wrong_digest, 20));
185 
186  static const struct {
187  int nid;
188  const char *name;
189  } kCurves[] = {
190  { NID_secp224r1, "secp224r1" },
191  { NID_X9_62_prime256v1, "secp256r1" },
192  { NID_secp384r1, "secp384r1" },
193  { NID_secp521r1, "secp521r1" },
194  { NID_secp160r1, "secp160r1" },
195  };
196 
197  for (const auto &curve : kCurves) {
198  SCOPED_TRACE(curve.name);
199 
200  bssl::UniquePtr<EC_GROUP> group;
201  if (curve.nid == NID_secp160r1) {
203  } else {
204  group.reset(EC_GROUP_new_by_curve_name(curve.nid));
205  }
207  const BIGNUM *order = EC_GROUP_get0_order(group.get());
208 
209  // Create a new ECDSA key.
210  bssl::UniquePtr<EC_KEY> eckey(EC_KEY_new());
211  ASSERT_TRUE(eckey);
212  ASSERT_TRUE(EC_KEY_set_group(eckey.get(), group.get()));
213  ASSERT_TRUE(EC_KEY_generate_key(eckey.get()));
214 
215  // Create a second key.
216  bssl::UniquePtr<EC_KEY> wrong_eckey(EC_KEY_new());
217  ASSERT_TRUE(wrong_eckey);
218  ASSERT_TRUE(EC_KEY_set_group(wrong_eckey.get(), group.get()));
219  ASSERT_TRUE(EC_KEY_generate_key(wrong_eckey.get()));
220 
221  // Check the key.
222  EXPECT_TRUE(EC_KEY_check_key(eckey.get()));
223 
224  // Test ASN.1-encoded signatures.
225  // Create a signature.
226  unsigned sig_len = ECDSA_size(eckey.get());
227  std::vector<uint8_t> signature(sig_len);
228  ASSERT_TRUE(
229  ECDSA_sign(0, digest, 20, signature.data(), &sig_len, eckey.get()));
230  signature.resize(sig_len);
231 
232  // ECDSA signing should be non-deterministic. This does not verify k is
233  // generated securely but at least checks it was randomized at all.
234  sig_len = ECDSA_size(eckey.get());
235  std::vector<uint8_t> signature2(sig_len);
236  ASSERT_TRUE(
237  ECDSA_sign(0, digest, 20, signature2.data(), &sig_len, eckey.get()));
238  signature2.resize(sig_len);
239  EXPECT_NE(Bytes(signature), Bytes(signature2));
240 
241  // Verify the signature.
242  EXPECT_TRUE(ECDSA_verify(0, digest, 20, signature.data(), signature.size(),
243  eckey.get()));
244 
245  // Verify the signature with the wrong key.
246  EXPECT_FALSE(ECDSA_verify(0, digest, 20, signature.data(), signature.size(),
247  wrong_eckey.get()));
248  ERR_clear_error();
249 
250  // Verify the signature using the wrong digest.
251  EXPECT_FALSE(ECDSA_verify(0, wrong_digest, 20, signature.data(),
252  signature.size(), eckey.get()));
253  ERR_clear_error();
254 
255  // Verify a truncated signature.
256  EXPECT_FALSE(ECDSA_verify(0, digest, 20, signature.data(),
257  signature.size() - 1, eckey.get()));
258  ERR_clear_error();
259 
260  // Verify a tampered signature.
261  bssl::UniquePtr<ECDSA_SIG> ecdsa_sig(
262  ECDSA_SIG_from_bytes(signature.data(), signature.size()));
263  ASSERT_TRUE(ecdsa_sig);
264  TestTamperedSig(kEncodedAPI, digest, 20, ecdsa_sig.get(), eckey.get(),
265  order);
266 
267  // Test ECDSA_SIG signing and verification.
268  // Create a signature.
269  ecdsa_sig.reset(ECDSA_do_sign(digest, 20, eckey.get()));
270  ASSERT_TRUE(ecdsa_sig);
271 
272  // Verify the signature using the correct key.
273  EXPECT_TRUE(ECDSA_do_verify(digest, 20, ecdsa_sig.get(), eckey.get()));
274 
275  // Verify the signature with the wrong key.
276  EXPECT_FALSE(
277  ECDSA_do_verify(digest, 20, ecdsa_sig.get(), wrong_eckey.get()));
278  ERR_clear_error();
279 
280  // Verify the signature using the wrong digest.
281  EXPECT_FALSE(
282  ECDSA_do_verify(wrong_digest, 20, ecdsa_sig.get(), eckey.get()));
283  ERR_clear_error();
284 
285  // Verify a tampered signature.
286  TestTamperedSig(kRawAPI, digest, 20, ecdsa_sig.get(), eckey.get(), order);
287  }
288 }
289 
290 static size_t BitsToBytes(size_t bits) {
291  return (bits / 8) + (7 + (bits % 8)) / 8;
292 }
293 
294 TEST(ECDSATest, MaxSigLen) {
295  static const size_t kBits[] = {224, 256, 384, 521, 10000};
296  for (size_t bits : kBits) {
298  size_t order_len = BitsToBytes(bits);
299 
300  // Create the largest possible |ECDSA_SIG| of the given constraints.
301  bssl::UniquePtr<ECDSA_SIG> sig(ECDSA_SIG_new());
302  ASSERT_TRUE(sig);
303  std::vector<uint8_t> bytes(order_len, 0xff);
304  ASSERT_TRUE(BN_bin2bn(bytes.data(), bytes.size(), sig->r));
305  ASSERT_TRUE(BN_bin2bn(bytes.data(), bytes.size(), sig->s));
306  // Serialize it.
307  uint8_t *der;
308  size_t der_len;
309  ASSERT_TRUE(ECDSA_SIG_to_bytes(&der, &der_len, sig.get()));
310  OPENSSL_free(der);
311 
312  EXPECT_EQ(der_len, ECDSA_SIG_max_len(order_len));
313  }
314 }
315 
316 static bssl::UniquePtr<EC_GROUP> GetCurve(FileTest *t, const char *key) {
317  std::string curve_name;
318  if (!t->GetAttribute(&curve_name, key)) {
319  return nullptr;
320  }
321 
322  if (curve_name == "P-224") {
323  return bssl::UniquePtr<EC_GROUP>(EC_GROUP_new_by_curve_name(NID_secp224r1));
324  }
325  if (curve_name == "P-256") {
326  return bssl::UniquePtr<EC_GROUP>(
328  }
329  if (curve_name == "P-384") {
330  return bssl::UniquePtr<EC_GROUP>(EC_GROUP_new_by_curve_name(NID_secp384r1));
331  }
332  if (curve_name == "P-521") {
333  return bssl::UniquePtr<EC_GROUP>(EC_GROUP_new_by_curve_name(NID_secp521r1));
334  }
335  if (curve_name == "secp160r1") {
336  return NewSecp160r1Group();
337  }
338 
339  ADD_FAILURE() << "Unknown curve: " << curve_name;
340  return nullptr;
341 }
342 
343 static bssl::UniquePtr<EC_GROUP> MakeCustomClone(const EC_GROUP *group) {
344  bssl::UniquePtr<BN_CTX> ctx(BN_CTX_new());
345  bssl::UniquePtr<BIGNUM> p(BN_new()), a(BN_new()), b(BN_new()), x(BN_new()),
346  y(BN_new());
347  if (!ctx || !p || !a || !b || !x || !y ||
348  !EC_GROUP_get_curve_GFp(group, p.get(), a.get(), b.get(), ctx.get()) ||
350  group, EC_GROUP_get0_generator(group), x.get(), y.get(), ctx.get())) {
351  return nullptr;
352  }
353  bssl::UniquePtr<EC_GROUP> ret(
354  EC_GROUP_new_curve_GFp(p.get(), a.get(), b.get(), ctx.get()));
355  if (!ret) {
356  return nullptr;
357  }
358  bssl::UniquePtr<EC_POINT> g(EC_POINT_new(ret.get()));
359  if (!g ||
360  !EC_POINT_set_affine_coordinates_GFp(ret.get(), g.get(), x.get(), y.get(),
361  ctx.get()) ||
363  BN_value_one())) {
364  return nullptr;
365  }
366  return ret;
367 }
368 
369 static bssl::UniquePtr<BIGNUM> GetBIGNUM(FileTest *t, const char *key) {
370  std::vector<uint8_t> bytes;
371  if (!t->GetBytes(&bytes, key)) {
372  return nullptr;
373  }
374 
375  return bssl::UniquePtr<BIGNUM>(BN_bin2bn(bytes.data(), bytes.size(), nullptr));
376 }
377 
378 TEST(ECDSATest, VerifyTestVectors) {
379  FileTestGTest("crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt",
380  [](FileTest *t) {
381  for (bool custom_group : {false, true}) {
382  SCOPED_TRACE(custom_group);
383  bssl::UniquePtr<EC_GROUP> group = GetCurve(t, "Curve");
385  if (custom_group) {
386  group = MakeCustomClone(group.get());
388  }
389  bssl::UniquePtr<BIGNUM> x = GetBIGNUM(t, "X");
390  ASSERT_TRUE(x);
391  bssl::UniquePtr<BIGNUM> y = GetBIGNUM(t, "Y");
392  ASSERT_TRUE(y);
393  bssl::UniquePtr<BIGNUM> r = GetBIGNUM(t, "R");
394  ASSERT_TRUE(r);
395  bssl::UniquePtr<BIGNUM> s = GetBIGNUM(t, "S");
396  ASSERT_TRUE(s);
397  std::vector<uint8_t> digest;
398  ASSERT_TRUE(t->GetBytes(&digest, "Digest"));
399 
400  bssl::UniquePtr<EC_KEY> key(EC_KEY_new());
401  ASSERT_TRUE(key);
402  bssl::UniquePtr<EC_POINT> pub_key(EC_POINT_new(group.get()));
403  ASSERT_TRUE(pub_key);
404  bssl::UniquePtr<ECDSA_SIG> sig(ECDSA_SIG_new());
405  ASSERT_TRUE(sig);
406  ASSERT_TRUE(EC_KEY_set_group(key.get(), group.get()));
408  group.get(), pub_key.get(), x.get(), y.get(), nullptr));
409  ASSERT_TRUE(EC_KEY_set_public_key(key.get(), pub_key.get()));
410  ASSERT_TRUE(BN_copy(sig->r, r.get()));
411  ASSERT_TRUE(BN_copy(sig->s, s.get()));
412 
413  EXPECT_EQ(
414  t->HasAttribute("Invalid") ? 0 : 1,
415  ECDSA_do_verify(digest.data(), digest.size(), sig.get(), key.get()));
416  }
417  });
418 }
419 
420 TEST(ECDSATest, SignTestVectors) {
421  FileTestGTest("crypto/fipsmodule/ecdsa/ecdsa_sign_tests.txt",
422  [](FileTest *t) {
423  for (bool custom_group : {false, true}) {
424  SCOPED_TRACE(custom_group);
425  bssl::UniquePtr<EC_GROUP> group = GetCurve(t, "Curve");
427  if (custom_group) {
428  group = MakeCustomClone(group.get());
430  }
431  bssl::UniquePtr<BIGNUM> priv_key = GetBIGNUM(t, "Private");
432  ASSERT_TRUE(priv_key);
433  bssl::UniquePtr<BIGNUM> x = GetBIGNUM(t, "X");
434  ASSERT_TRUE(x);
435  bssl::UniquePtr<BIGNUM> y = GetBIGNUM(t, "Y");
436  ASSERT_TRUE(y);
437  std::vector<uint8_t> k;
438  ASSERT_TRUE(t->GetBytes(&k, "K"));
439  bssl::UniquePtr<BIGNUM> r = GetBIGNUM(t, "R");
440  ASSERT_TRUE(r);
441  bssl::UniquePtr<BIGNUM> s = GetBIGNUM(t, "S");
442  ASSERT_TRUE(s);
443  std::vector<uint8_t> digest;
444  ASSERT_TRUE(t->GetBytes(&digest, "Digest"));
445 
446  bssl::UniquePtr<EC_KEY> key(EC_KEY_new());
447  ASSERT_TRUE(key);
448  bssl::UniquePtr<EC_POINT> pub_key(EC_POINT_new(group.get()));
449  ASSERT_TRUE(pub_key);
450  ASSERT_TRUE(EC_KEY_set_group(key.get(), group.get()));
451  ASSERT_TRUE(EC_KEY_set_private_key(key.get(), priv_key.get()));
453  group.get(), pub_key.get(), x.get(), y.get(), nullptr));
454  ASSERT_TRUE(EC_KEY_set_public_key(key.get(), pub_key.get()));
456 
457  bssl::UniquePtr<ECDSA_SIG> sig(
459  digest.data(), digest.size(), key.get(), k.data(), k.size()));
460  ASSERT_TRUE(sig);
461 
462  EXPECT_EQ(0, BN_cmp(r.get(), sig->r));
463  EXPECT_EQ(0, BN_cmp(s.get(), sig->s));
464  }
465  });
466 }
MakeCustomClone
static bssl::UniquePtr< EC_GROUP > MakeCustomClone(const EC_GROUP *group)
Definition: ecdsa_test.cc:343
EC_GROUP_get0_order
#define EC_GROUP_get0_order
Definition: boringssl_prefix_symbols.h:1323
EXPECT_FALSE
#define EXPECT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1970
TEST
TEST(ECDSATest, BuiltinCurves)
Definition: ecdsa_test.cc:180
bn.h
EC_POINT_new
#define EC_POINT_new
Definition: boringssl_prefix_symbols.h:1384
ecdsa_sig_st::r
BIGNUM * r
Definition: ecdsa.h:106
RAND_bytes
#define RAND_bytes
Definition: boringssl_prefix_symbols.h:2060
Bytes
Definition: boringssl-with-bazel/src/crypto/test/test_util.h:38
BitsToBytes
static size_t BitsToBytes(size_t bits)
Definition: ecdsa_test.cc:290
EC_KEY_new
#define EC_KEY_new
Definition: boringssl_prefix_symbols.h:1355
ctx
Definition: benchmark-async.c:30
EC_GROUP_get_curve_GFp
#define EC_GROUP_get_curve_GFp
Definition: boringssl_prefix_symbols.h:1326
NID_X9_62_prime256v1
#define NID_X9_62_prime256v1
Definition: nid.h:1914
EC_KEY_generate_key
#define EC_KEY_generate_key
Definition: boringssl_prefix_symbols.h:1342
TestTamperedSig
static void TestTamperedSig(API api, const uint8_t *digest, size_t digest_len, ECDSA_SIG *ecdsa_sig, EC_KEY *eckey, const BIGNUM *order)
Definition: ecdsa_test.cc:144
ecdsa.h
ECDSA_SIG_to_bytes
#define ECDSA_SIG_to_bytes
Definition: boringssl_prefix_symbols.h:1308
y
const double y
Definition: bloaty/third_party/googletest/googlemock/test/gmock-matchers_test.cc:3611
BN_bin2bn
#define BN_bin2bn
Definition: boringssl_prefix_symbols.h:900
ECDSA_SIG_max_len
#define ECDSA_SIG_max_len
Definition: boringssl_prefix_symbols.h:1304
kRawAPI
@ kRawAPI
Definition: ecdsa_test.cc:113
EC_KEY_set_group
#define EC_KEY_set_group
Definition: boringssl_prefix_symbols.h:1365
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
EC_KEY_set_public_key
#define EC_KEY_set_public_key
Definition: boringssl_prefix_symbols.h:1367
ecdsa_sig_st::s
BIGNUM * s
Definition: ecdsa.h:107
ECDSA_SIG_new
#define ECDSA_SIG_new
Definition: boringssl_prefix_symbols.h:1305
ctx
static struct test_ctx ctx
Definition: test-ipc-send-recv.c:65
EC_GROUP_new_by_curve_name
#define EC_GROUP_new_by_curve_name
Definition: boringssl_prefix_symbols.h:1331
setup.name
name
Definition: setup.py:542
GetBIGNUM
static bssl::UniquePtr< BIGNUM > GetBIGNUM(FileTest *t, const char *key)
Definition: ecdsa_test.cc:369
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
ASSERT_LE
#define ASSERT_LE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2064
xds_manager.p
p
Definition: xds_manager.py:60
ECDSA_do_sign
#define ECDSA_do_sign
Definition: boringssl_prefix_symbols.h:1309
BN_num_bytes
#define BN_num_bytes
Definition: boringssl_prefix_symbols.h:976
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
setup.k
k
Definition: third_party/bloaty/third_party/capstone/bindings/python/setup.py:42
BN_hex2bn
#define BN_hex2bn
Definition: boringssl_prefix_symbols.h:930
BN_value_one
const OPENSSL_EXPORT BIGNUM * BN_value_one(void)
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
EC_GROUP_set_generator
#define EC_GROUP_set_generator
Definition: boringssl_prefix_symbols.h:1335
FileTestGTest
void FileTestGTest(const char *path, std::function< void(FileTest *)> run_test)
Definition: file_test_gtest.cc:68
EC_POINT_get_affine_coordinates_GFp
#define EC_POINT_get_affine_coordinates_GFp
Definition: boringssl_prefix_symbols.h:1379
SCOPED_TRACE
#define SCOPED_TRACE(message)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2264
EC_POINT_set_affine_coordinates_GFp
#define EC_POINT_set_affine_coordinates_GFp
Definition: boringssl_prefix_symbols.h:1389
ECDSA_verify
#define ECDSA_verify
Definition: boringssl_prefix_symbols.h:1314
NID_secp521r1
#define NID_secp521r1
Definition: nid.h:3172
EXPECT_NE
#define EXPECT_NE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2028
GetCurve
static bssl::UniquePtr< EC_GROUP > GetCurve(FileTest *t, const char *key)
Definition: ecdsa_test.cc:316
FileTest
Definition: file_test.h:90
bits
OPENSSL_EXPORT ASN1_BIT_STRING * bits
Definition: x509v3.h:482
err.h
crypto.h
FAIL
@ FAIL
Definition: call_creds.cc:42
x
int x
Definition: bloaty/third_party/googletest/googlemock/test/gmock-matchers_test.cc:3610
NewSecp160r1Group
static bssl::UniquePtr< EC_GROUP > NewSecp160r1Group()
Definition: ecdsa_test.cc:81
BN_CTX_new
#define BN_CTX_new
Definition: boringssl_prefix_symbols.h:885
b
uint64_t b
Definition: abseil-cpp/absl/container/internal/layout_test.cc:53
g
struct @717 g
ADD_FAILURE
#define ADD_FAILURE()
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1911
VerifyECDSASig
static void VerifyECDSASig(API api, const uint8_t *digest, size_t digest_len, const ECDSA_SIG *ecdsa_sig, EC_KEY *eckey, int expected_result)
Definition: ecdsa_test.cc:117
ECDSA_do_verify
#define ECDSA_do_verify
Definition: boringssl_prefix_symbols.h:1310
n
int n
Definition: abseil-cpp/absl/container/btree_test.cc:1080
nid
int nid
Definition: cipher_extra.c:71
ec_key_st
Definition: third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h:723
BN_copy
#define BN_copy
Definition: boringssl_prefix_symbols.h:914
ECDSA_sign
#define ECDSA_sign
Definition: boringssl_prefix_symbols.h:1311
nid.h
rand.h
key
const char * key
Definition: hpack_parser_table.cc:164
upload.group
group
Definition: bloaty/third_party/googletest/googlemock/scripts/upload.py:397
bytes
uint8 bytes[10]
Definition: bloaty/third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc:153
HexToBIGNUM
static bssl::UniquePtr< BIGNUM > HexToBIGNUM(const char *hex)
Definition: ecdsa_test.cc:72
NID_secp160r1
#define NID_secp160r1
Definition: nid.h:3144
ECDSA_sign_with_nonce_and_leak_private_key_for_testing
#define ECDSA_sign_with_nonce_and_leak_private_key_for_testing
Definition: boringssl_prefix_symbols.h:1312
bignum_st
Definition: bn.h:957
ret
UniquePtr< SSL_SESSION > ret
Definition: ssl_x509.cc:1029
ec_group_st
Definition: third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h:573
fix_build_deps.r
r
Definition: fix_build_deps.py:491
BN_cmp
#define BN_cmp
Definition: boringssl_prefix_symbols.h:912
API
API
Definition: ecdsa_test.cc:111
EC_KEY_check_key
#define EC_KEY_check_key
Definition: boringssl_prefix_symbols.h:1338
ASSERT_TRUE
#define ASSERT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1973
EC_KEY_set_private_key
#define EC_KEY_set_private_key
Definition: boringssl_prefix_symbols.h:1366
ERR_clear_error
#define ERR_clear_error
Definition: boringssl_prefix_symbols.h:1413
BN_bn2bin_padded
#define BN_bn2bin_padded
Definition: boringssl_prefix_symbols.h:902
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
NID_secp224r1
#define NID_secp224r1
Definition: nid.h:3160
mem.h
NID_secp384r1
#define NID_secp384r1
Definition: nid.h:3168
kEncodedAPI
@ kEncodedAPI
Definition: ecdsa_test.cc:112
ECDSA_size
#define ECDSA_size
Definition: boringssl_prefix_symbols.h:1313
ec.h
OPENSSL_free
#define OPENSSL_free
Definition: boringssl_prefix_symbols.h:1869
ECDSA_SIG_from_bytes
#define ECDSA_SIG_from_bytes
Definition: boringssl_prefix_symbols.h:1299
ecdsa_sig_st
Definition: ecdsa.h:105
BN_new
#define BN_new
Definition: boringssl_prefix_symbols.h:971
offset
voidpf uLong offset
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:142
EC_GROUP_get0_generator
#define EC_GROUP_get0_generator
Definition: boringssl_prefix_symbols.h:1322
EC_GROUP_new_curve_GFp
#define EC_GROUP_new_curve_GFp
Definition: boringssl_prefix_symbols.h:1332


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:14