blob: ef46933e964dd7ee6e5f7790f4b12df6ed428b52 [file] [log] [blame]
// 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_