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 22398c158a0206217025f327c2d26bb6c86659f5a0Shawn Willden#include <keymaster/rsa_key_factory.h> 23398c158a0206217025f327c2d26bb6c86659f5a0Shawn Willden 242beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden#include "rsa_key.h" 252beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 262beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdennamespace keymaster { 272beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 282beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass Keymaster0Engine; 292beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass SoftKeymasterContext; 302beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 312beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden/** 322beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * An RsaKeyFactory which can delegate key generation, importing and loading operations to a 332beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden * keymaster0-backed OpenSSL engine. 342beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden */ 352beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass RsaKeymaster0KeyFactory : public RsaKeyFactory { 362beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden typedef RsaKeyFactory super; 372beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 382beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden public: 390629810b145187575bc26c910dded0d24c64569dShawn Willden RsaKeymaster0KeyFactory(const SoftKeymasterContext* context, const Keymaster0Engine* engine); 402beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 412beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_error_t GenerateKey(const AuthorizationSet& key_description, 422beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden KeymasterKeyBlob* key_blob, AuthorizationSet* hw_enforced, 430629810b145187575bc26c910dded0d24c64569dShawn Willden AuthorizationSet* sw_enforced) const override; 442beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 452beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_error_t ImportKey(const AuthorizationSet& key_description, 462beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_key_format_t input_key_material_format, 472beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden const KeymasterKeyBlob& input_key_material, 482beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden KeymasterKeyBlob* output_key_blob, AuthorizationSet* hw_enforced, 490629810b145187575bc26c910dded0d24c64569dShawn Willden AuthorizationSet* sw_enforced) const override; 502beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 512beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden keymaster_error_t LoadKey(const KeymasterKeyBlob& key_material, 52d599b15c0693950bdc72fb867872044fdc484ef5Shawn Willden const AuthorizationSet& additional_params, 532beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden const AuthorizationSet& hw_enforced, 540629810b145187575bc26c910dded0d24c64569dShawn Willden const AuthorizationSet& sw_enforced, 550629810b145187575bc26c910dded0d24c64569dShawn Willden UniquePtr<Key>* key) const override; 562beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 572beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden private: 582beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden const Keymaster0Engine* engine_; 592beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden}; 602beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 612beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willdenclass RsaKeymaster0Key : public RsaKey { 622beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden public: 632beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden RsaKeymaster0Key(RSA* rsa_key, const AuthorizationSet& hw_enforced, 644fc15704d86aab977c2bdbb14345a2c417be2babShawn Willden const AuthorizationSet& sw_enforced, keymaster_error_t* error) 654fc15704d86aab977c2bdbb14345a2c417be2babShawn Willden : RsaKey(rsa_key, hw_enforced, sw_enforced, error) {} 662beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden}; 672beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 682beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden} // namespace keymaster 692beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden 702beb628bfefae72fa6bb84a6235da7e3de532823Shawn Willden#endif // SYSTEM_KEYMASTER_RSA_KEYMASTER0_KEY_H_ 71