11455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis/* 21455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** 31455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** Copyright 2017, The Android Open Source Project 41455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** 51455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** Licensed under the Apache License, Version 2.0 (the "License"); 61455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** you may not use this file except in compliance with the License. 71455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** You may obtain a copy of the License at 81455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** 91455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** http://www.apache.org/licenses/LICENSE-2.0 101455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** 111455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** Unless required by applicable law or agreed to in writing, software 121455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** distributed under the License is distributed on an "AS IS" BASIS, 131455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 141455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** See the License for the specific language governing permissions and 151455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis** limitations under the License. 161455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis*/ 171455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis 181455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis#ifndef INCLUDE_KEYMASTER_SOFT_KEYMASTER_ENFORCEMENT_H_ 191455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis#define INCLUDE_KEYMASTER_SOFT_KEYMASTER_ENFORCEMENT_H_ 201455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis 218b940582387a8a8f35584bd557b01a8b87610481Shawn Willden#include <keymaster/android_keymaster_messages.h> 221455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis#include <keymaster/keymaster_enforcement.h> 231455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis 241455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskisnamespace keymaster { 251455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis 261455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskisclass SoftKeymasterEnforcement : public KeymasterEnforcement { 278b940582387a8a8f35584bd557b01a8b87610481Shawn Willden public: 288b940582387a8a8f35584bd557b01a8b87610481Shawn Willden SoftKeymasterEnforcement(uint32_t max_access_time_map_size, uint32_t max_access_count_map_size) 298b940582387a8a8f35584bd557b01a8b87610481Shawn Willden : KeymasterEnforcement(max_access_time_map_size, max_access_count_map_size) {} 308b940582387a8a8f35584bd557b01a8b87610481Shawn Willden virtual ~SoftKeymasterEnforcement() {} 311455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis bool activation_date_valid(uint64_t /*activation_date*/) const override { return true; } 321455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis bool expiration_date_passed(uint64_t /*expiration_date*/) const override { return false; } 338b940582387a8a8f35584bd557b01a8b87610481Shawn Willden bool auth_token_timed_out(const hw_auth_token_t& /*token*/, 348b940582387a8a8f35584bd557b01a8b87610481Shawn Willden uint32_t /*timeout*/) const override { 351455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis return false; 361455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis } 3718534d54bc4b5087dc10d4c8901ce38ed19669dbShawn Willden uint64_t get_current_time_ms() const override; 3818534d54bc4b5087dc10d4c8901ce38ed19669dbShawn Willden keymaster_security_level_t SecurityLevel() const override { return KM_SECURITY_LEVEL_SOFTWARE; } 391455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis bool ValidateTokenSignature(const hw_auth_token_t& /*token*/) const override { return true; } 401455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis bool CreateKeyId(const keymaster_key_blob_t& key_blob, km_id_t* keyid) const override; 418b940582387a8a8f35584bd557b01a8b87610481Shawn Willden 428b940582387a8a8f35584bd557b01a8b87610481Shawn Willden keymaster_error_t GetHmacSharingParameters(HmacSharingParameters* params) override; 438b940582387a8a8f35584bd557b01a8b87610481Shawn Willden keymaster_error_t ComputeSharedHmac(const HmacSharingParametersArray& params_array, 448b940582387a8a8f35584bd557b01a8b87610481Shawn Willden KeymasterBlob* sharingCheck) override; 4518534d54bc4b5087dc10d4c8901ce38ed19669dbShawn Willden VerifyAuthorizationResponse 4618534d54bc4b5087dc10d4c8901ce38ed19669dbShawn Willden VerifyAuthorization(const VerifyAuthorizationRequest& request) override; 478b940582387a8a8f35584bd557b01a8b87610481Shawn Willden 488b940582387a8a8f35584bd557b01a8b87610481Shawn Willden private: 498b940582387a8a8f35584bd557b01a8b87610481Shawn Willden bool have_saved_params_ = false; 508b940582387a8a8f35584bd557b01a8b87610481Shawn Willden HmacSharingParameters saved_params_; 518b940582387a8a8f35584bd557b01a8b87610481Shawn Willden KeymasterKeyBlob hmac_key_; 521455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis}; 531455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis 548b940582387a8a8f35584bd557b01a8b87610481Shawn Willden} // namespace keymaster 551455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis 561455d2ea9966089cac31c1f46542e74e9925e995Janis Danisevskis#endif // INCLUDE_KEYMASTER_SOFT_KEYMASTER_ENFORCEMENT_H_ 57