ssl_key_share.cc
Go to the documentation of this file.
1 /* Copyright (c) 2015, Google Inc.
2  *
3  * Permission to use, copy, modify, and/or distribute this software for any
4  * purpose with or without fee is hereby granted, provided that the above
5  * copyright notice and this permission notice appear in all copies.
6  *
7  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14 
15 #include <openssl/ssl.h>
16 
17 #include <assert.h>
18 #include <string.h>
19 
20 #include <utility>
21 
22 #include <openssl/bn.h>
23 #include <openssl/bytestring.h>
24 #include <openssl/curve25519.h>
25 #include <openssl/ec.h>
26 #include <openssl/err.h>
27 #include <openssl/hrss.h>
28 #include <openssl/mem.h>
29 #include <openssl/nid.h>
30 #include <openssl/rand.h>
31 
32 #include "internal.h"
33 #include "../crypto/internal.h"
34 
36 
37 namespace {
38 
39 class ECKeyShare : public SSLKeyShare {
40  public:
41  ECKeyShare(int nid, uint16_t group_id) : nid_(nid), group_id_(group_id) {}
42 
43  uint16_t GroupID() const override { return group_id_; }
44 
45  bool Offer(CBB *out) override {
46  assert(!private_key_);
47  // Set up a shared |BN_CTX| for all operations.
48  UniquePtr<BN_CTX> bn_ctx(BN_CTX_new());
49  if (!bn_ctx) {
50  return false;
51  }
52  BN_CTXScope scope(bn_ctx.get());
53 
54  // Generate a private key.
55  UniquePtr<EC_GROUP> group(EC_GROUP_new_by_curve_name(nid_));
56  private_key_.reset(BN_new());
57  if (!group || !private_key_ ||
58  !BN_rand_range_ex(private_key_.get(), 1,
59  EC_GROUP_get0_order(group.get()))) {
60  return false;
61  }
62 
63  // Compute the corresponding public key and serialize it.
64  UniquePtr<EC_POINT> public_key(EC_POINT_new(group.get()));
65  if (!public_key ||
66  !EC_POINT_mul(group.get(), public_key.get(), private_key_.get(), NULL,
67  NULL, bn_ctx.get()) ||
68  !EC_POINT_point2cbb(out, group.get(), public_key.get(),
69  POINT_CONVERSION_UNCOMPRESSED, bn_ctx.get())) {
70  return false;
71  }
72 
73  return true;
74  }
75 
76  bool Finish(Array<uint8_t> *out_secret, uint8_t *out_alert,
77  Span<const uint8_t> peer_key) override {
78  assert(private_key_);
79  *out_alert = SSL_AD_INTERNAL_ERROR;
80 
81  // Set up a shared |BN_CTX| for all operations.
82  UniquePtr<BN_CTX> bn_ctx(BN_CTX_new());
83  if (!bn_ctx) {
84  return false;
85  }
86  BN_CTXScope scope(bn_ctx.get());
87 
88  UniquePtr<EC_GROUP> group(EC_GROUP_new_by_curve_name(nid_));
89  if (!group) {
90  return false;
91  }
92 
93  UniquePtr<EC_POINT> peer_point(EC_POINT_new(group.get()));
94  UniquePtr<EC_POINT> result(EC_POINT_new(group.get()));
95  BIGNUM *x = BN_CTX_get(bn_ctx.get());
96  if (!peer_point || !result || !x) {
97  return false;
98  }
99 
100  if (peer_key.empty() || peer_key[0] != POINT_CONVERSION_UNCOMPRESSED ||
101  !EC_POINT_oct2point(group.get(), peer_point.get(), peer_key.data(),
102  peer_key.size(), bn_ctx.get())) {
104  *out_alert = SSL_AD_DECODE_ERROR;
105  return false;
106  }
107 
108  // Compute the x-coordinate of |peer_key| * |private_key_|.
109  if (!EC_POINT_mul(group.get(), result.get(), NULL, peer_point.get(),
110  private_key_.get(), bn_ctx.get()) ||
111  !EC_POINT_get_affine_coordinates_GFp(group.get(), result.get(), x, NULL,
112  bn_ctx.get())) {
113  return false;
114  }
115 
116  // Encode the x-coordinate left-padded with zeros.
117  Array<uint8_t> secret;
118  if (!secret.Init((EC_GROUP_get_degree(group.get()) + 7) / 8) ||
119  !BN_bn2bin_padded(secret.data(), secret.size(), x)) {
120  return false;
121  }
122 
123  *out_secret = std::move(secret);
124  return true;
125  }
126 
127  bool SerializePrivateKey(CBB *out) override {
128  assert(private_key_);
129  UniquePtr<EC_GROUP> group(EC_GROUP_new_by_curve_name(nid_));
130  // Padding is added to avoid leaking the length.
131  size_t len = BN_num_bytes(EC_GROUP_get0_order(group.get()));
132  return BN_bn2cbb_padded(out, len, private_key_.get());
133  }
134 
135  bool DeserializePrivateKey(CBS *in) override {
136  assert(!private_key_);
137  private_key_.reset(BN_bin2bn(CBS_data(in), CBS_len(in), nullptr));
138  return private_key_ != nullptr;
139  }
140 
141  private:
142  UniquePtr<BIGNUM> private_key_;
143  int nid_;
145 };
146 
147 class X25519KeyShare : public SSLKeyShare {
148  public:
150 
151  uint16_t GroupID() const override { return SSL_CURVE_X25519; }
152 
153  bool Offer(CBB *out) override {
154  uint8_t public_key[32];
155  X25519_keypair(public_key, private_key_);
156  return !!CBB_add_bytes(out, public_key, sizeof(public_key));
157  }
158 
159  bool Finish(Array<uint8_t> *out_secret, uint8_t *out_alert,
160  Span<const uint8_t> peer_key) override {
161  *out_alert = SSL_AD_INTERNAL_ERROR;
162 
163  Array<uint8_t> secret;
164  if (!secret.Init(32)) {
166  return false;
167  }
168 
169  if (peer_key.size() != 32 ||
170  !X25519(secret.data(), private_key_, peer_key.data())) {
171  *out_alert = SSL_AD_DECODE_ERROR;
173  return false;
174  }
175 
176  *out_secret = std::move(secret);
177  return true;
178  }
179 
180  bool SerializePrivateKey(CBB *out) override {
181  return CBB_add_bytes(out, private_key_, sizeof(private_key_));
182  }
183 
184  bool DeserializePrivateKey(CBS *in) override {
185  if (CBS_len(in) != sizeof(private_key_) ||
186  !CBS_copy_bytes(in, private_key_, sizeof(private_key_))) {
187  return false;
188  }
189  return true;
190  }
191 
192  private:
193  uint8_t private_key_[32];
194 };
195 
196 class CECPQ2KeyShare : public SSLKeyShare {
197  public:
199 
200  uint16_t GroupID() const override { return SSL_CURVE_CECPQ2; }
201 
202  bool Offer(CBB *out) override {
203  uint8_t x25519_public_key[32];
204  X25519_keypair(x25519_public_key, x25519_private_key_);
205 
206  uint8_t hrss_entropy[HRSS_GENERATE_KEY_BYTES];
207  HRSS_public_key hrss_public_key;
208  RAND_bytes(hrss_entropy, sizeof(hrss_entropy));
209  if (!HRSS_generate_key(&hrss_public_key, &hrss_private_key_,
210  hrss_entropy)) {
211  return false;
212  }
213 
214  uint8_t hrss_public_key_bytes[HRSS_PUBLIC_KEY_BYTES];
215  HRSS_marshal_public_key(hrss_public_key_bytes, &hrss_public_key);
216 
217  if (!CBB_add_bytes(out, x25519_public_key, sizeof(x25519_public_key)) ||
218  !CBB_add_bytes(out, hrss_public_key_bytes,
219  sizeof(hrss_public_key_bytes))) {
220  return false;
221  }
222 
223  return true;
224  }
225 
226  bool Accept(CBB *out_public_key, Array<uint8_t> *out_secret,
227  uint8_t *out_alert, Span<const uint8_t> peer_key) override {
228  Array<uint8_t> secret;
229  if (!secret.Init(32 + HRSS_KEY_BYTES)) {
231  return false;
232  }
233 
234  uint8_t x25519_public_key[32];
235  X25519_keypair(x25519_public_key, x25519_private_key_);
236 
237  HRSS_public_key peer_public_key;
238  if (peer_key.size() != 32 + HRSS_PUBLIC_KEY_BYTES ||
239  !HRSS_parse_public_key(&peer_public_key, peer_key.data() + 32) ||
240  !X25519(secret.data(), x25519_private_key_, peer_key.data())) {
241  *out_alert = SSL_AD_DECODE_ERROR;
243  return false;
244  }
245 
247  uint8_t entropy[HRSS_ENCAP_BYTES];
248  RAND_bytes(entropy, sizeof(entropy));
249 
250  if (!HRSS_encap(ciphertext, secret.data() + 32, &peer_public_key,
251  entropy) ||
252  !CBB_add_bytes(out_public_key, x25519_public_key,
253  sizeof(x25519_public_key)) ||
254  !CBB_add_bytes(out_public_key, ciphertext, sizeof(ciphertext))) {
255  return false;
256  }
257 
258  *out_secret = std::move(secret);
259  return true;
260  }
261 
262  bool Finish(Array<uint8_t> *out_secret, uint8_t *out_alert,
263  Span<const uint8_t> peer_key) override {
264  *out_alert = SSL_AD_INTERNAL_ERROR;
265 
266  Array<uint8_t> secret;
267  if (!secret.Init(32 + HRSS_KEY_BYTES)) {
269  return false;
270  }
271 
272  if (peer_key.size() != 32 + HRSS_CIPHERTEXT_BYTES ||
273  !X25519(secret.data(), x25519_private_key_, peer_key.data())) {
274  *out_alert = SSL_AD_DECODE_ERROR;
276  return false;
277  }
278 
279  if (!HRSS_decap(secret.data() + 32, &hrss_private_key_,
280  peer_key.data() + 32, peer_key.size() - 32)) {
281  return false;
282  }
283 
284  *out_secret = std::move(secret);
285  return true;
286  }
287 
288  private:
289  uint8_t x25519_private_key_[32];
291 };
292 
294  {NID_secp224r1, SSL_CURVE_SECP224R1, "P-224", "secp224r1"},
295  {NID_X9_62_prime256v1, SSL_CURVE_SECP256R1, "P-256", "prime256v1"},
296  {NID_secp384r1, SSL_CURVE_SECP384R1, "P-384", "secp384r1"},
297  {NID_secp521r1, SSL_CURVE_SECP521R1, "P-521", "secp521r1"},
298  {NID_X25519, SSL_CURVE_X25519, "X25519", "x25519"},
299  {NID_CECPQ2, SSL_CURVE_CECPQ2, "CECPQ2", "CECPQ2"},
300 };
301 
302 } // namespace
303 
306 }
307 
308 UniquePtr<SSLKeyShare> SSLKeyShare::Create(uint16_t group_id) {
309  switch (group_id) {
310  case SSL_CURVE_SECP224R1:
311  return UniquePtr<SSLKeyShare>(
312  New<ECKeyShare>(NID_secp224r1, SSL_CURVE_SECP224R1));
313  case SSL_CURVE_SECP256R1:
314  return UniquePtr<SSLKeyShare>(
315  New<ECKeyShare>(NID_X9_62_prime256v1, SSL_CURVE_SECP256R1));
316  case SSL_CURVE_SECP384R1:
317  return UniquePtr<SSLKeyShare>(
318  New<ECKeyShare>(NID_secp384r1, SSL_CURVE_SECP384R1));
319  case SSL_CURVE_SECP521R1:
320  return UniquePtr<SSLKeyShare>(
321  New<ECKeyShare>(NID_secp521r1, SSL_CURVE_SECP521R1));
322  case SSL_CURVE_X25519:
323  return UniquePtr<SSLKeyShare>(New<X25519KeyShare>());
324  case SSL_CURVE_CECPQ2:
325  return UniquePtr<SSLKeyShare>(New<CECPQ2KeyShare>());
326  default:
327  return nullptr;
328  }
329 }
330 
331 UniquePtr<SSLKeyShare> SSLKeyShare::Create(CBS *in) {
332  uint64_t group;
334  if (!CBS_get_asn1_uint64(in, &group) || group > 0xffff ||
336  return nullptr;
337  }
338  UniquePtr<SSLKeyShare> key_share = Create(static_cast<uint16_t>(group));
339  if (!key_share || !key_share->DeserializePrivateKey(&private_key)) {
340  return nullptr;
341  }
342  return key_share;
343 }
344 
347  if (!CBB_add_asn1_uint64(out, GroupID()) ||
350  !CBB_flush(out)) {
351  return false;
352  }
353  return true;
354 }
355 
356 bool SSLKeyShare::Accept(CBB *out_public_key, Array<uint8_t> *out_secret,
357  uint8_t *out_alert, Span<const uint8_t> peer_key) {
358  *out_alert = SSL_AD_INTERNAL_ERROR;
359  return Offer(out_public_key) &&
360  Finish(out_secret, out_alert, peer_key);
361 }
362 
363 bool ssl_nid_to_group_id(uint16_t *out_group_id, int nid) {
364  for (const auto &group : kNamedGroups) {
365  if (group.nid == nid) {
366  *out_group_id = group.group_id;
367  return true;
368  }
369  }
370  return false;
371 }
372 
373 bool ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len) {
374  for (const auto &group : kNamedGroups) {
375  if (len == strlen(group.name) &&
376  !strncmp(group.name, name, len)) {
377  *out_group_id = group.group_id;
378  return true;
379  }
380  if (len == strlen(group.alias) &&
381  !strncmp(group.alias, name, len)) {
382  *out_group_id = group.group_id;
383  return true;
384  }
385  }
386  return false;
387 }
388 
390 
391 using namespace bssl;
392 
393 const char* SSL_get_curve_name(uint16_t group_id) {
394  for (const auto &group : kNamedGroups) {
395  if (group.group_id == group_id) {
396  return group.name;
397  }
398  }
399  return nullptr;
400 }
EC_GROUP_get0_order
#define EC_GROUP_get0_order
Definition: boringssl_prefix_symbols.h:1323
CBS_get_asn1_uint64
#define CBS_get_asn1_uint64
Definition: boringssl_prefix_symbols.h:1066
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
bn.h
EC_POINT_new
#define EC_POINT_new
Definition: boringssl_prefix_symbols.h:1384
hrss.h
CBB_flush
#define CBB_flush
Definition: boringssl_prefix_symbols.h:1045
Array::Init
bool Init(size_t new_size)
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:314
public_key
Definition: hrss.c:1881
gen_build_yaml.out
dictionary out
Definition: src/benchmark/gen_build_yaml.py:24
RAND_bytes
#define RAND_bytes
Definition: boringssl_prefix_symbols.h:2060
Span::size
size_t size() const
Definition: boringssl-with-bazel/src/include/openssl/span.h:133
cbs_st
Definition: bytestring.h:39
NID_X9_62_prime256v1
#define NID_X9_62_prime256v1
Definition: nid.h:1914
Array::data
const T * data() const
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:274
CBS_data
#define CBS_data
Definition: boringssl_prefix_symbols.h:1057
BSSL_NAMESPACE_BEGIN::X25519KeyShare::X25519KeyShare
X25519KeyShare()
Definition: ssl_key_share.cc:149
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare
Definition: ssl_key_share.cc:196
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare::Accept
bool Accept(CBB *out_public_key, Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key) override
Definition: ssl_key_share.cc:226
CONSTEXPR_ARRAY
#define CONSTEXPR_ARRAY
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:253
BSSL_NAMESPACE_BEGIN::ECKeyShare::SerializePrivateKey
bool SerializePrivateKey(CBB *out) override
Definition: ssl_key_share.cc:127
BSSL_NAMESPACE_BEGIN::kNamedGroups
CONSTEXPR_ARRAY NamedGroup kNamedGroups[]
Definition: ssl_key_share.cc:293
BN_bin2bn
#define BN_bin2bn
Definition: boringssl_prefix_symbols.h:900
OPENSSL_PUT_ERROR
#define OPENSSL_PUT_ERROR(library, reason)
Definition: err.h:423
internal.h
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare::Offer
bool Offer(CBB *out) override
Definition: ssl_key_share.cc:202
string.h
OPENSSL_ARRAY_SIZE
#define OPENSSL_ARRAY_SIZE(array)
Definition: third_party/boringssl-with-bazel/src/crypto/internal.h:179
CBS_ASN1_OCTETSTRING
#define CBS_ASN1_OCTETSTRING
Definition: bytestring.h:209
SSL_AD_INTERNAL_ERROR
#define SSL_AD_INTERNAL_ERROR
Definition: ssl.h:3815
ciphertext
const char * ciphertext
Definition: protobuf/src/google/protobuf/stubs/strutil_unittest.cc:86
CBS_len
#define CBS_len
Definition: boringssl_prefix_symbols.h:1089
bssl
Definition: hpke_test.cc:37
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
CBS_get_asn1
#define CBS_get_asn1
Definition: boringssl_prefix_symbols.h:1061
SSLKeyShare::Serialize
bool Serialize(CBB *out)
Definition: ssl_key_share.cc:345
BSSL_NAMESPACE_BEGIN::X25519KeyShare::GroupID
uint16_t GroupID() const override
Definition: ssl_key_share.cc:151
NamedGroups
Span< const NamedGroup > NamedGroups()
Definition: ssl_key_share.cc:304
BN_CTX_get
#define BN_CTX_get
Definition: boringssl_prefix_symbols.h:884
BN_num_bytes
#define BN_num_bytes
Definition: boringssl_prefix_symbols.h:976
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
HRSS_CIPHERTEXT_BYTES
#define HRSS_CIPHERTEXT_BYTES
Definition: hrss.h:52
HRSS_parse_public_key
#define HRSS_parse_public_key
Definition: boringssl_prefix_symbols.h:1800
bytestring.h
BSSL_NAMESPACE_BEGIN::X25519KeyShare::Finish
bool Finish(Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key) override
Definition: ssl_key_share.cc:159
SSLKeyShare::SerializePrivateKey
virtual bool SerializePrivateKey(CBB *out)
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1111
EC_POINT_get_affine_coordinates_GFp
#define EC_POINT_get_affine_coordinates_GFp
Definition: boringssl_prefix_symbols.h:1379
NID_CECPQ2
#define NID_CECPQ2
Definition: nid.h:4239
BSSL_NAMESPACE_BEGIN::ECKeyShare::group_id_
uint16_t group_id_
Definition: ssl_key_share.cc:144
BSSL_NAMESPACE_BEGIN::X25519KeyShare::Offer
bool Offer(CBB *out) override
Definition: ssl_key_share.cc:153
in
const char * in
Definition: third_party/abseil-cpp/absl/strings/internal/str_format/parser_test.cc:391
EC_POINT_mul
#define EC_POINT_mul
Definition: boringssl_prefix_symbols.h:1383
HRSS_ENCAP_BYTES
#define HRSS_ENCAP_BYTES
Definition: hrss.h:48
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
Array< uint8_t >
HRSS_public_key
Definition: hrss.h:35
BSSL_NAMESPACE_BEGIN::ECKeyShare::DeserializePrivateKey
bool DeserializePrivateKey(CBS *in) override
Definition: ssl_key_share.cc:135
NID_secp521r1
#define NID_secp521r1
Definition: nid.h:3172
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare::CECPQ2KeyShare
CECPQ2KeyShare()
Definition: ssl_key_share.cc:198
Span::empty
bool empty() const
Definition: boringssl-with-bazel/src/include/openssl/span.h:134
HRSS_PUBLIC_KEY_BYTES
#define HRSS_PUBLIC_KEY_BYTES
Definition: hrss.h:50
Array::size
size_t size() const
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:276
ssl_st
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:3698
HRSS_generate_key
#define HRSS_generate_key
Definition: boringssl_prefix_symbols.h:1798
BN_bn2cbb_padded
#define BN_bn2cbb_padded
Definition: boringssl_prefix_symbols.h:904
HRSS_KEY_BYTES
#define HRSS_KEY_BYTES
Definition: hrss.h:54
HRSS_encap
#define HRSS_encap
Definition: boringssl_prefix_symbols.h:1797
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
SSL_CURVE_SECP224R1
#define SSL_CURVE_SECP224R1
Definition: ssl.h:2326
SSLKeyShare
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1067
SSLKeyShare::Accept
virtual bool Accept(CBB *out_public_key, Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key)
Definition: ssl_key_share.cc:356
BSSL_NAMESPACE_END
#define BSSL_NAMESPACE_END
Definition: base.h:480
CBB_add_asn1
#define CBB_add_asn1
Definition: boringssl_prefix_symbols.h:1019
SSL_CURVE_SECP521R1
#define SSL_CURVE_SECP521R1
Definition: ssl.h:2329
err.h
BSSL_NAMESPACE_BEGIN::ECKeyShare::ECKeyShare
ECKeyShare(int nid, uint16_t group_id)
Definition: ssl_key_share.cc:41
NID_X25519
#define NID_X25519
Definition: nid.h:4195
ssl_name_to_group_id
bool ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len)
Definition: ssl_key_share.cc:373
x
int x
Definition: bloaty/third_party/googletest/googlemock/test/gmock-matchers_test.cc:3610
BN_CTX_new
#define BN_CTX_new
Definition: boringssl_prefix_symbols.h:885
EC_GROUP_get_degree
#define EC_GROUP_get_degree
Definition: boringssl_prefix_symbols.h:1328
SSL_CURVE_X25519
#define SSL_CURVE_X25519
Definition: ssl.h:2330
SSLKeyShare::Offer
virtual bool Offer(CBB *out_public_key) PURE_VIRTUAL
Span< const uint8_t >
BSSL_NAMESPACE_BEGIN::X25519KeyShare::SerializePrivateKey
bool SerializePrivateKey(CBB *out) override
Definition: ssl_key_share.cc:180
ssl.h
nid
int nid
Definition: cipher_extra.c:71
BSSL_NAMESPACE_BEGIN::ECKeyShare::nid_
int nid_
Definition: ssl_key_share.cc:143
HRSS_GENERATE_KEY_BYTES
#define HRSS_GENERATE_KEY_BYTES
Definition: hrss.h:45
X25519_keypair
#define X25519_keypair
Definition: boringssl_prefix_symbols.h:2210
CBB_add_bytes
#define CBB_add_bytes
Definition: boringssl_prefix_symbols.h:1025
BSSL_NAMESPACE_BEGIN
Definition: trust_token_test.cc:45
nid.h
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare::Finish
bool Finish(Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key) override
Definition: ssl_key_share.cc:262
rand.h
SSLKeyShare::Create
static HAS_VIRTUAL_DESTRUCTOR UniquePtr< SSLKeyShare > Create(uint16_t group_id)
Definition: ssl_key_share.cc:308
upload.group
group
Definition: bloaty/third_party/googletest/googlemock/scripts/upload.py:397
SSL_get_curve_name
const char * SSL_get_curve_name(uint16_t group_id)
Definition: ssl_key_share.cc:393
BSSL_NAMESPACE_BEGIN::ECKeyShare::private_key_
UniquePtr< BIGNUM > private_key_
Definition: ssl_key_share.cc:142
HRSS_decap
#define HRSS_decap
Definition: boringssl_prefix_symbols.h:1796
EC_POINT_oct2point
#define EC_POINT_oct2point
Definition: boringssl_prefix_symbols.h:1385
CBS_copy_bytes
#define CBS_copy_bytes
Definition: boringssl_prefix_symbols.h:1056
POINT_CONVERSION_UNCOMPRESSED
@ POINT_CONVERSION_UNCOMPRESSED
Definition: ec.h:91
SSL_CURVE_CECPQ2
#define SSL_CURVE_CECPQ2
Definition: ssl.h:2331
SSL_CURVE_SECP256R1
#define SSL_CURVE_SECP256R1
Definition: ssl.h:2327
SSL_AD_DECODE_ERROR
#define SSL_AD_DECODE_ERROR
Definition: ssl.h:3810
bignum_st
Definition: bn.h:957
BSSL_NAMESPACE_BEGIN::ECKeyShare::GroupID
uint16_t GroupID() const override
Definition: ssl_key_share.cc:43
private_key
Definition: hrss.c:1885
ssl_nid_to_group_id
bool ssl_nid_to_group_id(uint16_t *out_group_id, int nid)
Definition: ssl_key_share.cc:363
SSLKeyShare::GroupID
virtual uint16_t GroupID() const PURE_VIRTUAL
BN_rand_range_ex
#define BN_rand_range_ex
Definition: boringssl_prefix_symbols.h:986
BSSL_NAMESPACE_BEGIN::ECKeyShare::Finish
bool Finish(Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key) override
Definition: ssl_key_share.cc:76
curve25519.h
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare::hrss_private_key_
HRSS_private_key hrss_private_key_
Definition: ssl_key_share.cc:290
BSSL_NAMESPACE_BEGIN::X25519KeyShare
Definition: ssl_key_share.cc:147
BN_bn2bin_padded
#define BN_bn2bin_padded
Definition: boringssl_prefix_symbols.h:902
SSL_R_BAD_ECPOINT
#define SSL_R_BAD_ECPOINT
Definition: ssl.h:5376
NID_secp224r1
#define NID_secp224r1
Definition: nid.h:3160
SSL_CURVE_SECP384R1
#define SSL_CURVE_SECP384R1
Definition: ssl.h:2328
Span::data
T * data() const
Definition: boringssl-with-bazel/src/include/openssl/span.h:132
BSSL_NAMESPACE_BEGIN::CECPQ2KeyShare::GroupID
uint16_t GroupID() const override
Definition: ssl_key_share.cc:200
SSLKeyShare::Finish
virtual bool Finish(Array< uint8_t > *out_secret, uint8_t *out_alert, Span< const uint8_t > peer_key) PURE_VIRTUAL
EC_POINT_point2cbb
#define EC_POINT_point2cbb
Definition: boringssl_prefix_symbols.h:1386
mem.h
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
NID_secp384r1
#define NID_secp384r1
Definition: nid.h:3168
tests.interop.resources.private_key
def private_key()
Definition: interop/resources.py:29
HRSS_private_key
Definition: hrss.h:31
NamedGroup
Definition: third_party/boringssl-with-bazel/src/ssl/internal.h:1118
ec.h
BSSL_NAMESPACE_BEGIN::ECKeyShare::Offer
bool Offer(CBB *out) override
Definition: ssl_key_share.cc:45
BN_new
#define BN_new
Definition: boringssl_prefix_symbols.h:971
BSSL_NAMESPACE_BEGIN::ECKeyShare
Definition: ssl_key_share.cc:39
HRSS_marshal_public_key
#define HRSS_marshal_public_key
Definition: boringssl_prefix_symbols.h:1799
BSSL_NAMESPACE_BEGIN::X25519KeyShare::DeserializePrivateKey
bool DeserializePrivateKey(CBS *in) override
Definition: ssl_key_share.cc:184
ERR_R_MALLOC_FAILURE
#define ERR_R_MALLOC_FAILURE
Definition: err.h:371
CBB_add_asn1_uint64
#define CBB_add_asn1_uint64
Definition: boringssl_prefix_symbols.h:1024
absl::MakeConstSpan
constexpr Span< const T > MakeConstSpan(T *ptr, size_t size) noexcept
Definition: abseil-cpp/absl/types/span.h:707
cbb_st
Definition: bytestring.h:375
X25519
#define X25519
Definition: boringssl_prefix_symbols.h:2209


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:15