blob: ac62f106e8617d3c4baf30271fcdd9459b33f5f6 [file] [log] [blame] [edit]
// 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.
#ifndef CRYPTO_KEX_H_
#define CRYPTO_KEX_H_
#include "base/containers/span.h"
#include "crypto/keypair.h"
namespace crypto::kex {
// Derives a shared secret using elliptic-curve Diffie Hellman from a public key
// and a private key, and stores it in the provided out span. The resulting
// secret is not processed in any way and is not appropriate to use directly as
// key material (not all of the bits are uniformly random).
//
// The caller is responsible for ensuring that `theirs` and `ours` are P-256
// keys, e.g. with `IsEcP256`. Passing keys of the wrong type will cause the
// function to abort. Note that these conditions imply ECDH is infallible;
// `PublicKey` constructors enforce that P-256 keys are on the curve and not the
// point at infinity.
CRYPTO_EXPORT void EcdhP256(const crypto::keypair::PublicKey& theirs,
const crypto::keypair::PrivateKey& ours,
base::span<uint8_t, 32> out);
} // namespace crypto::kex
#endif // CRYPTO_KEX_H_