#ifndef COMPONENTS_WEBCRYPTO_ALGORITHMS_ASYMMETRIC_KEY_UTIL_H_
#define COMPONENTS_WEBCRYPTO_ALGORITHMS_ASYMMETRIC_KEY_UTIL_H_
#include "base/containers/span.h"
#include "third_party/blink/public/platform/web_crypto_algorithm.h"
#include "third_party/blink/public/platform/web_crypto_key.h"
#include "third_party/boringssl/src/include/openssl/base.h"
namespace webcrypto {
class Status;
Status ExportPKeySpki(EVP_PKEY* key, std::vector<uint8_t>* buffer);
Status ExportPKeyPkcs8(EVP_PKEY* key, std::vector<uint8_t>* buffer);
Status CreateWebCryptoPublicKey(bssl::UniquePtr<EVP_PKEY> public_key,
const blink::WebCryptoKeyAlgorithm& algorithm,
bool extractable,
blink::WebCryptoKeyUsageMask usages,
blink::WebCryptoKey* key);
Status CreateWebCryptoPrivateKey(bssl::UniquePtr<EVP_PKEY> private_key,
const blink::WebCryptoKeyAlgorithm& algorithm,
bool extractable,
blink::WebCryptoKeyUsageMask usages,
blink::WebCryptoKey* key);
Status ImportUnverifiedPkeyFromSpki(base::span<const uint8_t> key_data,
int expected_pkey_id,
bssl::UniquePtr<EVP_PKEY>* pkey);
Status ImportUnverifiedPkeyFromPkcs8(base::span<const uint8_t> key_data,
int expected_pkey_id,
bssl::UniquePtr<EVP_PKEY>* pkey);
Status GetUsagesForGenerateAsymmetricKey(
blink::WebCryptoKeyUsageMask combined_usages,
blink::WebCryptoKeyUsageMask all_public_usages,
blink::WebCryptoKeyUsageMask all_private_usages,
blink::WebCryptoKeyUsageMask* public_usages,
blink::WebCryptoKeyUsageMask* private_usages);
}
#endif