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