| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef ARC_KEYMINT_CONVERSION_H_ | |
| #define ARC_KEYMINT_CONVERSION_H_ | |
| #include <algorithm> | |
| #include <memory> | |
| #include <vector> | |
| #include <keymaster/android_keymaster.h> | |
| #include <mojo/keymint.mojom.h> | |
| namespace arc::keymint { | |
| // Convenience helper methods. | |
| keymaster_key_format_t ConvertEnum(arc::mojom::keymint::KeyFormat key_format); | |
| keymaster_tag_t ConvertEnum(arc::mojom::keymint::Tag tag); | |
| keymaster_purpose_t ConvertEnum(arc::mojom::keymint::KeyPurpose key_purpose); | |
| keymaster_key_param_t ConvertEnum( | |
| const arc::mojom::keymint::KeyParameterPtr& param); | |
| template <typename T, typename OutIter> | |
| inline OutIter copy_bytes_to_iterator(const T& value, OutIter dest) { | |
| const uint8_t* value_ptr = reinterpret_cast<const uint8_t*>(&value); | |
| return std::copy(value_ptr, value_ptr + sizeof(value), dest); | |
| } | |
| std::vector<uint8_t> authToken2AidlVec( | |
| const arc::mojom::keymint::HardwareAuthToken& token); | |
| std::vector<uint8_t> ConvertFromKeymasterMessage(const uint8_t* data, | |
| const size_t size); | |
| std::vector<arc::mojom::keymint::CertificatePtr> ConvertFromKeymasterMessage( | |
| const keymaster_cert_chain_t& cert); | |
| std::vector<::arc::mojom::keymint::KeyParameterPtr> ConvertFromKeymasterMessage( | |
| const keymaster_key_param_set_t& set); | |
| ::arc::mojom::keymint::KeyParameterValuePtr | |
| ConvertEnumParamFromKeymasterMessage(const keymaster_key_param_t& param); | |
| arc::mojom::keymint::KeyMintKeyBlobPtr ConvertFromKeyMintKeyBlob( | |
| const ::keymaster::KeymasterKeyBlob& key_blob); | |
| arc::mojom::keymint::KeyMintBlobPtr ConvertFromKeyMintBlob( | |
| const ::keymaster::KeymasterBlob& blob); | |
| void ConvertToKeymasterMessage(const std::vector<uint8_t>& data, | |
| ::keymaster::Buffer* out); | |
| void ConvertToKeymasterMessage(const std::vector<uint8_t>& clientId, | |
| const std::vector<uint8_t>& appData, | |
| ::keymaster::AuthorizationSet* params); | |
| void ConvertToKeymasterMessage( | |
| const std::vector<arc::mojom::keymint::KeyParameterPtr>& data, | |
| ::keymaster::AuthorizationSet* out); | |
| // Request Methods. | |
| std::unique_ptr<::keymaster::GetKeyCharacteristicsRequest> | |
| MakeGetKeyCharacteristicsRequest( | |
| const ::arc::mojom::keymint::GetKeyCharacteristicsRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::GenerateKeyRequest> MakeGenerateKeyRequest( | |
| const arc::mojom::keymint::GenerateKeyRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::ImportKeyRequest> MakeImportKeyRequest( | |
| const arc::mojom::keymint::ImportKeyRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::ImportWrappedKeyRequest> | |
| MakeImportWrappedKeyRequest( | |
| const arc::mojom::keymint::ImportWrappedKeyRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::UpgradeKeyRequest> MakeUpgradeKeyRequest( | |
| const arc::mojom::keymint::UpgradeKeyRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::UpdateOperationRequest> MakeUpdateOperationRequest( | |
| const arc::mojom::keymint::UpdateRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::UpdateOperationRequest> | |
| MakeUpdateAadOperationRequest( | |
| const arc::mojom::keymint::UpdateRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::BeginOperationRequest> MakeBeginOperationRequest( | |
| const arc::mojom::keymint::BeginRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::DeviceLockedRequest> MakeDeviceLockedRequest( | |
| bool password_only, | |
| const arc::mojom::keymint::TimeStampTokenPtr& timestamp_token, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::FinishOperationRequest> MakeFinishOperationRequest( | |
| const arc::mojom::keymint::FinishRequestPtr& request, | |
| const int32_t keymint_message_version); | |
| std::unique_ptr<::keymaster::ComputeSharedHmacRequest> | |
| MakeComputeSharedSecretRequest( | |
| const std::vector<arc::mojom::keymint::SharedSecretParametersPtr>& request, | |
| const int32_t keymint_message_version); | |
| // Mojo Result Methods. | |
| arc::mojom::keymint::KeyCharacteristicsArrayOrErrorPtr | |
| MakeGetKeyCharacteristicsResult( | |
| const ::keymaster::GetKeyCharacteristicsResponse& km_response); | |
| arc::mojom::keymint::KeyCreationResultOrErrorPtr MakeGenerateKeyResult( | |
| const ::keymaster::GenerateKeyResponse& km_response); | |
| arc::mojom::keymint::KeyCreationResultOrErrorPtr MakeImportKeyResult( | |
| const ::keymaster::ImportKeyResponse& km_response); | |
| arc::mojom::keymint::KeyCreationResultOrErrorPtr MakeImportWrappedKeyResult( | |
| const ::keymaster::ImportWrappedKeyResponse& km_response); | |
| arc::mojom::keymint::ByteArrayOrErrorPtr MakeUpgradeKeyResult( | |
| const ::keymaster::UpgradeKeyResponse& km_response); | |
| arc::mojom::keymint::ByteArrayOrErrorPtr MakeUpdateResult( | |
| const ::keymaster::UpdateOperationResponse& km_response); | |
| arc::mojom::keymint::BeginResultOrErrorPtr MakeBeginResult( | |
| const ::keymaster::BeginOperationResponse& km_response); | |
| arc::mojom::keymint::ByteArrayOrErrorPtr MakeFinishResult( | |
| const ::keymaster::FinishOperationResponse& km_response); | |
| arc::mojom::keymint::SharedSecretParametersOrErrorPtr | |
| MakeGetSharedSecretParametersResult( | |
| const ::keymaster::GetHmacSharingParametersResponse& km_response); | |
| arc::mojom::keymint::ByteArrayOrErrorPtr MakeComputeSharedSecretResult( | |
| const ::keymaster::ComputeSharedHmacResponse& km_response); | |
| arc::mojom::keymint::TimeStampTokenOrErrorPtr MakeGenerateTimeStampTokenResult( | |
| const ::keymaster::GenerateTimestampTokenResponse& km_response); | |
| arc::mojom::keymint::GenerateEcdsaP256KeyPairResultOrErrorPtr | |
| MakeGenerateEcdsaP256KeyPairResult( | |
| const ::keymaster::GenerateRkpKeyResponse& km_response); | |
| } // namespace arc::keymint | |
| #endif // ARC_KEYMINT_CONVERSION_H_ |