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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ENTERPRISE_CLIENT_CERTIFICATES_CORE_PRIVATE_KEY_H_
#define COMPONENTS_ENTERPRISE_CLIENT_CERTIFICATES_CORE_PRIVATE_KEY_H_
#include <optional>
#include <vector>
#include "base/containers/span.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_refptr.h"
#include "base/values.h"
#include "components/enterprise/client_certificates/core/private_key_types.h"
#include "components/enterprise/client_certificates/proto/client_certificates_database.pb.h"
#include "crypto/signature_verifier.h"
namespace net {
class SSLPrivateKey;
} // namespace net
namespace client_certificates {
// Interface representing objects owning references to private keys loaded into
// memory.
class PrivateKey : public base::RefCountedThreadSafe<PrivateKey> {
public:
// Returns a signature generated by the private key over `data`. Returns
// `std::nullopt` if no signature could be generated.
virtual std::optional<std::vector<uint8_t>> SignSlowly(
base::span<const uint8_t> data) const = 0;
// Returns the public key bytes in SPKI format.
virtual std::vector<uint8_t> GetSubjectPublicKeyInfo() const = 0;
// Returns the algorithm of the asymmetric key pair.
virtual crypto::SignatureVerifier::SignatureAlgorithm GetAlgorithm()
const = 0;
// Returns a proto representation of the current private key which can be
// serialized and loaded again through the PrivateKeyFactory.
virtual client_certificates_pb::PrivateKey ToProto() const = 0;
// Returns a dictionary representation of the current private key which can
// be serialized and loaded again through the PrivateKeyFactory.
virtual base::Value::Dict ToDict() const = 0;
// Returns the source from where the private key was created.
PrivateKeySource GetSource() const;
// Returns a version of this private key which can be used in TLS protocols.
// May be nullptr if not supported.
scoped_refptr<net::SSLPrivateKey> GetSSLPrivateKey();
protected:
PrivateKey(PrivateKeySource source,
scoped_refptr<net::SSLPrivateKey> ssl_private_key);
// Builds a dictionary representation of a `key`.
base::Value::Dict BuildSerializedPrivateKey(std::vector<uint8_t> key) const;
virtual ~PrivateKey();
PrivateKeySource source_;
scoped_refptr<net::SSLPrivateKey> ssl_private_key_;
private:
friend class base::RefCountedThreadSafe<PrivateKey>;
};
} // namespace client_certificates
#endif // COMPONENTS_ENTERPRISE_CLIENT_CERTIFICATES_CORE_PRIVATE_KEY_H_
|