910e62b5创建于 1月15日历史提交
// 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.
//
// This file contains utility functions and types for working with BoringSSL's
// EVP_* types.

#ifndef CRYPTO_EVP_H_
#define CRYPTO_EVP_H_

#include <vector>

#include "base/containers/span.h"
#include "crypto/crypto_export.h"
#include "third_party/boringssl/src/include/openssl/evp.h"

namespace crypto::evp {

// These functions consume an entire span of bytes and return a parsed EVP_PKEY,
// if the span encodes a valid object of the named kind. If the span contains
// any trailing data that is not parsed, or no valid EVP_PKEY can be parsed from
// the span, these return null.
CRYPTO_EXPORT bssl::UniquePtr<EVP_PKEY> PublicKeyFromBytes(
    base::span<const uint8_t> bytes);
CRYPTO_EXPORT bssl::UniquePtr<EVP_PKEY> PrivateKeyFromBytes(
    base::span<const uint8_t> bytes);

// These functions marshal a key of the named type into a buffer. Unlike the
// parsing functions they cannot fail.
CRYPTO_EXPORT std::vector<uint8_t> PublicKeyToBytes(const EVP_PKEY* key);
CRYPTO_EXPORT std::vector<uint8_t> PrivateKeyToBytes(const EVP_PKEY* key);

}  // namespace crypto::evp

#endif  // CRYPTO_EVP_H_