Android-cuttlefish cvd tool
proxy_keymaster_context.h
Go to the documentation of this file.
1//
2// Copyright (C) 2020 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
18#include <stdint.h>
19
20#include <map>
21#include <vector>
22
23#include <keymaster/key.h>
24#include <keymaster/keymaster_context.h>
25#include <keymaster/km_openssl/attestation_record.h>
26
28
29namespace cuttlefish {
30
31class TpmAttestationRecordContext;
32class TpmResourceManager;
33class TpmKeyBlobMaker;
34class TpmRandomSource;
35class TpmRemoteProvisioningContext;
36
46class ProxyKeymasterContext : public keymaster::KeymasterContext {
47 public:
48 ProxyKeymasterContext(KeymasterContext& wrapped) : wrapped_(wrapped) {}
50
51 keymaster::KmVersion GetKmVersion() const override {
52 return wrapped_.GetKmVersion();
53 }
54
55 keymaster_error_t SetSystemVersion(uint32_t os_version,
56 uint32_t os_patchlevel) override {
57 return wrapped_.SetSystemVersion(os_version, os_patchlevel);
58 }
59 void GetSystemVersion(uint32_t* os_version,
60 uint32_t* os_patchlevel) const override {
61 return wrapped_.GetSystemVersion(os_version, os_patchlevel);
62 }
63
64 const keymaster::KeyFactory* GetKeyFactory(
65 keymaster_algorithm_t algorithm) const override {
66 return wrapped_.GetKeyFactory(algorithm);
67 }
68 const keymaster::OperationFactory* GetOperationFactory(
69 keymaster_algorithm_t algorithm,
70 keymaster_purpose_t purpose) const override {
71 return wrapped_.GetOperationFactory(algorithm, purpose);
72 }
73 const keymaster_algorithm_t* GetSupportedAlgorithms(
74 size_t* algorithms_count) const override {
75 return wrapped_.GetSupportedAlgorithms(algorithms_count);
76 }
77
78 keymaster_error_t UpgradeKeyBlob(
79 const keymaster::KeymasterKeyBlob& key_to_upgrade,
80 const keymaster::AuthorizationSet& upgrade_params,
81 keymaster::KeymasterKeyBlob* upgraded_key) const override {
82 return wrapped_.UpgradeKeyBlob(key_to_upgrade, upgrade_params,
83 upgraded_key);
84 }
85
86 keymaster_error_t ParseKeyBlob(
87 const keymaster::KeymasterKeyBlob& blob,
88 const keymaster::AuthorizationSet& additional_params,
89 keymaster::UniquePtr<keymaster::Key>* key) const override {
90 return wrapped_.ParseKeyBlob(blob, additional_params, key);
91 }
92
93 keymaster_error_t AddRngEntropy(const uint8_t* buf,
94 size_t length) const override {
95 return wrapped_.AddRngEntropy(buf, length);
96 }
97
98 keymaster::KeymasterEnforcement* enforcement_policy() override {
99 return wrapped_.enforcement_policy();
100 }
101
102 keymaster::AttestationContext* attestation_context() override {
103 return wrapped_.attestation_context();
104 }
105
106 keymaster::CertificateChain GenerateAttestation(
107 const keymaster::Key& key,
108 const keymaster::AuthorizationSet& attest_params,
109 keymaster::UniquePtr<keymaster::Key> attest_key,
110 const keymaster::KeymasterBlob& issuer_subject,
111 keymaster_error_t* error) const override {
112 return wrapped_.GenerateAttestation(
113 key, attest_params, std::move(attest_key), issuer_subject, error);
114 }
115
116 keymaster::CertificateChain GenerateSelfSignedCertificate(
117 const keymaster::Key& key, const keymaster::AuthorizationSet& cert_params,
118 bool fake_signature, keymaster_error_t* error) const override {
119 return wrapped_.GenerateSelfSignedCertificate(key, cert_params,
120 fake_signature, error);
121 }
122
123 keymaster_error_t UnwrapKey(
124 const keymaster::KeymasterKeyBlob& wrapped_key_blob,
125 const keymaster::KeymasterKeyBlob& wrapping_key_blob,
126 const keymaster::AuthorizationSet& wrapping_key_params,
127 const keymaster::KeymasterKeyBlob& masking_key,
128 keymaster::AuthorizationSet* wrapped_key_params,
129 keymaster_key_format_t* wrapped_key_format,
130 keymaster::KeymasterKeyBlob* wrapped_key_material) const override {
131 return wrapped_.UnwrapKey(
132 wrapped_key_blob, wrapping_key_blob, wrapping_key_params, masking_key,
133 wrapped_key_params, wrapped_key_format, wrapped_key_material);
134 }
135
136 keymaster_error_t CheckConfirmationToken(
137 const uint8_t* input_data, size_t input_data_size,
138 const uint8_t confirmation_token[keymaster::kConfirmationTokenSize])
139 const {
140 return wrapped_.CheckConfirmationToken(input_data, input_data_size,
141 confirmation_token);
142 }
143
144 keymaster::RemoteProvisioningContext* GetRemoteProvisioningContext()
145 const override {
146 return wrapped_.GetRemoteProvisioningContext();
147 }
148
149 keymaster_error_t SetVendorPatchlevel(uint32_t vendor_patchlevel) override {
150 return wrapped_.SetVendorPatchlevel(vendor_patchlevel);
151 }
152 keymaster_error_t SetBootPatchlevel(uint32_t boot_patchlevel) override {
153 return wrapped_.SetBootPatchlevel(boot_patchlevel);
154 }
155 keymaster_error_t SetVerifiedBootInfo(
156 std::string_view verified_boot_state, std::string_view bootloader_state,
157 const std::vector<uint8_t>& vbmeta_digest) {
158 return wrapped_.SetVerifiedBootInfo(verified_boot_state, bootloader_state,
159 vbmeta_digest);
160 }
161 std::optional<uint32_t> GetVendorPatchlevel() const override {
162 return wrapped_.GetVendorPatchlevel();
163 }
164 std::optional<uint32_t> GetBootPatchlevel() const override {
165 return wrapped_.GetBootPatchlevel();
166 }
167
168 keymaster_error_t SetAttestationIds(
169 const keymaster::SetAttestationIdsRequest& request) override {
170 return wrapped_.SetAttestationIds(request);
171 }
172
173 keymaster_error_t SetAttestationIdsKM3(
174 const keymaster::SetAttestationIdsKM3Request& request) override {
175 return wrapped_.SetAttestationIdsKM3(request);
176 }
177
178 private:
179 KeymasterContext& wrapped_;
180};
181
182} // namespace cuttlefish
Definition: proxy_keymaster_context.h:46
keymaster_error_t SetSystemVersion(uint32_t os_version, uint32_t os_patchlevel) override
Definition: proxy_keymaster_context.h:55
keymaster_error_t SetBootPatchlevel(uint32_t boot_patchlevel) override
Definition: proxy_keymaster_context.h:152
keymaster_error_t UnwrapKey(const keymaster::KeymasterKeyBlob &wrapped_key_blob, const keymaster::KeymasterKeyBlob &wrapping_key_blob, const keymaster::AuthorizationSet &wrapping_key_params, const keymaster::KeymasterKeyBlob &masking_key, keymaster::AuthorizationSet *wrapped_key_params, keymaster_key_format_t *wrapped_key_format, keymaster::KeymasterKeyBlob *wrapped_key_material) const override
Definition: proxy_keymaster_context.h:123
std::optional< uint32_t > GetVendorPatchlevel() const override
Definition: proxy_keymaster_context.h:161
keymaster::KeymasterEnforcement * enforcement_policy() override
Definition: proxy_keymaster_context.h:98
keymaster::RemoteProvisioningContext * GetRemoteProvisioningContext() const override
Definition: proxy_keymaster_context.h:144
keymaster_error_t SetAttestationIds(const keymaster::SetAttestationIdsRequest &request) override
Definition: proxy_keymaster_context.h:168
const keymaster::KeyFactory * GetKeyFactory(keymaster_algorithm_t algorithm) const override
Definition: proxy_keymaster_context.h:64
std::optional< uint32_t > GetBootPatchlevel() const override
Definition: proxy_keymaster_context.h:164
keymaster_error_t CheckConfirmationToken(const uint8_t *input_data, size_t input_data_size, const uint8_t confirmation_token[keymaster::kConfirmationTokenSize]) const
Definition: proxy_keymaster_context.h:136
keymaster::AttestationContext * attestation_context() override
Definition: proxy_keymaster_context.h:102
keymaster_error_t ParseKeyBlob(const keymaster::KeymasterKeyBlob &blob, const keymaster::AuthorizationSet &additional_params, keymaster::UniquePtr< keymaster::Key > *key) const override
Definition: proxy_keymaster_context.h:86
keymaster_error_t SetVerifiedBootInfo(std::string_view verified_boot_state, std::string_view bootloader_state, const std::vector< uint8_t > &vbmeta_digest)
Definition: proxy_keymaster_context.h:155
void GetSystemVersion(uint32_t *os_version, uint32_t *os_patchlevel) const override
Definition: proxy_keymaster_context.h:59
keymaster::CertificateChain GenerateAttestation(const keymaster::Key &key, const keymaster::AuthorizationSet &attest_params, keymaster::UniquePtr< keymaster::Key > attest_key, const keymaster::KeymasterBlob &issuer_subject, keymaster_error_t *error) const override
Definition: proxy_keymaster_context.h:106
keymaster::KmVersion GetKmVersion() const override
Definition: proxy_keymaster_context.h:51
keymaster_error_t UpgradeKeyBlob(const keymaster::KeymasterKeyBlob &key_to_upgrade, const keymaster::AuthorizationSet &upgrade_params, keymaster::KeymasterKeyBlob *upgraded_key) const override
Definition: proxy_keymaster_context.h:78
keymaster_error_t AddRngEntropy(const uint8_t *buf, size_t length) const override
Definition: proxy_keymaster_context.h:93
const keymaster_algorithm_t * GetSupportedAlgorithms(size_t *algorithms_count) const override
Definition: proxy_keymaster_context.h:73
KeymasterContext & wrapped_
Definition: proxy_keymaster_context.h:179
keymaster_error_t SetVendorPatchlevel(uint32_t vendor_patchlevel) override
Definition: proxy_keymaster_context.h:149
keymaster_error_t SetAttestationIdsKM3(const keymaster::SetAttestationIdsKM3Request &request) override
Definition: proxy_keymaster_context.h:173
const keymaster::OperationFactory * GetOperationFactory(keymaster_algorithm_t algorithm, keymaster_purpose_t purpose) const override
Definition: proxy_keymaster_context.h:68
keymaster::CertificateChain GenerateSelfSignedCertificate(const keymaster::Key &key, const keymaster::AuthorizationSet &cert_params, bool fake_signature, keymaster_error_t *error) const override
Definition: proxy_keymaster_context.h:116
ProxyKeymasterContext(KeymasterContext &wrapped)
Definition: proxy_keymaster_context.h:48
#define key
Definition: dict.c:55
#define error(format, args...)
Definition: fec_private.h:201
Definition: alloc_driver.h:20