File: kex.cc

package info (click to toggle)
chromium 143.0.7499.169-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,786,920 kB
  • sloc: cpp: 35,784,218; ansic: 7,477,365; javascript: 3,962,116; python: 1,480,523; xml: 764,832; asm: 710,816; pascal: 188,028; sh: 88,717; perl: 88,692; objc: 79,984; sql: 57,625; cs: 42,265; fortran: 24,101; makefile: 22,509; tcl: 15,277; php: 14,018; yacc: 9,043; ruby: 7,553; awk: 3,720; lisp: 3,233; lex: 1,330; ada: 727; jsp: 228; sed: 36
file content (27 lines) | stat: -rw-r--r-- 908 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "crypto/kex.h"

#include "third_party/boringssl/src/include/openssl/ec_key.h"
#include "third_party/boringssl/src/include/openssl/ecdh.h"
#include "third_party/boringssl/src/include/openssl/evp.h"

namespace crypto::kex {

void EcdhP256(const crypto::keypair::PublicKey& theirs,
              const crypto::keypair::PrivateKey& ours,
              base::span<uint8_t, 32> out) {
  CHECK(theirs.IsEcP256());
  CHECK(ours.IsEcP256());

  const EC_KEY* ourkey = EVP_PKEY_get0_EC_KEY(ours.key());
  const EC_KEY* theirkey = EVP_PKEY_get0_EC_KEY(theirs.key());
  const EC_POINT* theirpoint = EC_KEY_get0_public_key(theirkey);

  CHECK(ECDH_compute_key(out.data(), out.size(), theirpoint, ourkey, nullptr) ==
        out.size());
}

}  // namespace crypto::kex