1*789431f2SAndroid Build Coastguard Worker /* 2*789431f2SAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 3*789431f2SAndroid Build Coastguard Worker * 4*789431f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*789431f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*789431f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*789431f2SAndroid Build Coastguard Worker * 8*789431f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*789431f2SAndroid Build Coastguard Worker * 10*789431f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*789431f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*789431f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*789431f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*789431f2SAndroid Build Coastguard Worker * limitations under the License. 15*789431f2SAndroid Build Coastguard Worker */ 16*789431f2SAndroid Build Coastguard Worker 17*789431f2SAndroid Build Coastguard Worker #ifndef SYSTEM_KEYMASTER_AES_OPERATION_H_ 18*789431f2SAndroid Build Coastguard Worker #define SYSTEM_KEYMASTER_AES_OPERATION_H_ 19*789431f2SAndroid Build Coastguard Worker 20*789431f2SAndroid Build Coastguard Worker #include <openssl/aes.h> 21*789431f2SAndroid Build Coastguard Worker 22*789431f2SAndroid Build Coastguard Worker #include "block_cipher_operation.h" 23*789431f2SAndroid Build Coastguard Worker 24*789431f2SAndroid Build Coastguard Worker namespace keymaster { 25*789431f2SAndroid Build Coastguard Worker 26*789431f2SAndroid Build Coastguard Worker class AesEvpCipherDescription : public EvpCipherDescription { 27*789431f2SAndroid Build Coastguard Worker public: algorithm()28*789431f2SAndroid Build Coastguard Worker keymaster_algorithm_t algorithm() const override { return KM_ALGORITHM_AES; } 29*789431f2SAndroid Build Coastguard Worker 30*789431f2SAndroid Build Coastguard Worker const keymaster_block_mode_t* SupportedBlockModes(size_t* block_mode_count) const override; 31*789431f2SAndroid Build Coastguard Worker 32*789431f2SAndroid Build Coastguard Worker const EVP_CIPHER* GetCipherInstance(size_t key_size, keymaster_block_mode_t block_mode, 33*789431f2SAndroid Build Coastguard Worker keymaster_error_t* error) const override; 34*789431f2SAndroid Build Coastguard Worker block_size_bytes()35*789431f2SAndroid Build Coastguard Worker size_t block_size_bytes() const override { return AES_BLOCK_SIZE; } 36*789431f2SAndroid Build Coastguard Worker }; 37*789431f2SAndroid Build Coastguard Worker 38*789431f2SAndroid Build Coastguard Worker class AesOperationFactory : public BlockCipherOperationFactory { 39*789431f2SAndroid Build Coastguard Worker public: AesOperationFactory(keymaster_purpose_t purpose)40*789431f2SAndroid Build Coastguard Worker explicit AesOperationFactory(keymaster_purpose_t purpose) 41*789431f2SAndroid Build Coastguard Worker : BlockCipherOperationFactory(purpose) {} 42*789431f2SAndroid Build Coastguard Worker const EvpCipherDescription& GetCipherDescription() const override; 43*789431f2SAndroid Build Coastguard Worker }; 44*789431f2SAndroid Build Coastguard Worker 45*789431f2SAndroid Build Coastguard Worker } // namespace keymaster 46*789431f2SAndroid Build Coastguard Worker 47*789431f2SAndroid Build Coastguard Worker #endif // SYSTEM_KEYMASTER_AES_OPERATION_H_ 48