12beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden/* 22beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * Copyright 2015 The Android Open Source Project 32beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * 42beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 52beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * you may not use this file except in compliance with the License. 62beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * You may obtain a copy of the License at 72beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * 82beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * http://www.apache.org/licenses/LICENSE-2.0 92beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * 102beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * Unless required by applicable law or agreed to in writing, software 112beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 122beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * See the License for the specific language governing permissions and 142beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * limitations under the License. 152beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden */ 162beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 172beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden#ifndef SYSTEM_KEYMASTER_RSA_KEYMASTER0_KEY_H_ 182beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden#define SYSTEM_KEYMASTER_RSA_KEYMASTER0_KEY_H_ 192beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 202beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden#include <openssl/rsa.h> 212beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 22f54cc93ccf57a94f9a2c660dbf3e06494adf178dJanis Danisevskis#include <keymaster/km_openssl/rsa_key.h> 23f54cc93ccf57a94f9a2c660dbf3e06494adf178dJanis Danisevskis#include <keymaster/km_openssl/rsa_key_factory.h> 242beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 252beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdennamespace keymaster { 262beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 272beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass Keymaster0Engine; 282beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 292beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden/** 302beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * An RsaKeyFactory which can delegate key generation, importing and loading operations to a 312beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * keymaster0-backed OpenSSL engine. 322beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden */ 332beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass RsaKeymaster0KeyFactory : public RsaKeyFactory { 342beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden typedef RsaKeyFactory super; 352beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 362beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden public: 37da157a3b17b315c1c36f346c18037656946755aaJanis Danisevskis RsaKeymaster0KeyFactory(const SoftwareKeyBlobMaker* blob_maker, 38da157a3b17b315c1c36f346c18037656946755aaJanis Danisevskis const Keymaster0Engine* engine); 392beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 402beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_error_t GenerateKey(const AuthorizationSet& key_description, 412beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden KeymasterKeyBlob* key_blob, AuthorizationSet* hw_enforced, 420629810b145187575bc26c910dded0d24c64569dShawn Willden AuthorizationSet* sw_enforced) const override; 432beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 442beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_error_t ImportKey(const AuthorizationSet& key_description, 452beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_key_format_t input_key_material_format, 462beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden const KeymasterKeyBlob& input_key_material, 472beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden KeymasterKeyBlob* output_key_blob, AuthorizationSet* hw_enforced, 480629810b145187575bc26c910dded0d24c64569dShawn Willden AuthorizationSet* sw_enforced) const override; 492beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 5059c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis keymaster_error_t LoadKey(KeymasterKeyBlob&& key_material, 51d599b15c0693950bdc72fb867872044fdc484ef5Shawn Willden const AuthorizationSet& additional_params, 5259c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis AuthorizationSet&& hw_enforced, 5359c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis AuthorizationSet&& sw_enforced, 540629810b145187575bc26c910dded0d24c64569dShawn Willden UniquePtr<Key>* key) const override; 552beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 562beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden private: 572beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden const Keymaster0Engine* engine_; 582beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden}; 592beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 602beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass RsaKeymaster0Key : public RsaKey { 612beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden public: 6259c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis RsaKeymaster0Key(RSA* rsa_key, AuthorizationSet&& hw_enforced, 6359c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis AuthorizationSet&& sw_enforced, 6459c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis const KeyFactory* key_factory) 6559c6af81b6b510dd991ab04b8d65f1bab966d0c8Janis Danisevskis : RsaKey(rsa_key, move(hw_enforced), move(sw_enforced), key_factory) {} 662beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden}; 672beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 682beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden} // namespace keymaster 692beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 702beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden#endif // SYSTEM_KEYMASTER_RSA_KEYMASTER0_KEY_H_ 71