10a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden/* 20a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * Copyright 2014 The Android Open Source Project 30a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * 40a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 50a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * you may not use this file except in compliance with the License. 60a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * You may obtain a copy of the License at 70a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * 80a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * http://www.apache.org/licenses/LICENSE-2.0 90a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * 100a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * Unless required by applicable law or agreed to in writing, software 110a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 120a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * See the License for the specific language governing permissions and 140a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden * limitations under the License. 150a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden */ 160a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 170a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#ifndef SYSTEM_KEYMASTER_DSA_OPERATION_H_ 180a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#define SYSTEM_KEYMASTER_DSA_OPERATION_H_ 190a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 200a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#include <openssl/dsa.h> 210a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 220a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#include <UniquePtr.h> 230a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 240a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#include <keymaster/key_blob.h> 250a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 260a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#include "operation.h" 270a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 280a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willdennamespace keymaster { 290a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 300a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willdenclass DsaOperation : public Operation { 310a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden public: 32f6ca3a3f1bbe206e2fd05be36da10cb4204e5388Shawn Willden DsaOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest, 330a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden keymaster_padding_t padding, DSA* key) 34f6ca3a3f1bbe206e2fd05be36da10cb4204e5388Shawn Willden : Operation(purpose, logger), dsa_key_(key), digest_(digest), padding_(padding) {} 350a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden ~DsaOperation(); 360a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 370a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden virtual keymaster_error_t Begin() { return KM_ERROR_OK; } 380a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden virtual keymaster_error_t Update(const Buffer& input, Buffer* output); 390a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden virtual keymaster_error_t Abort() { return KM_ERROR_OK; } 400a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 410a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden protected: 420a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden keymaster_error_t StoreData(const Buffer& input); 430a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 440a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden DSA* dsa_key_; 450a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden keymaster_digest_t digest_; 460a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden keymaster_padding_t padding_; 470a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden Buffer data_; 480a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden}; 490a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 500a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willdenclass DsaSignOperation : public DsaOperation { 510a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden public: 52f6ca3a3f1bbe206e2fd05be36da10cb4204e5388Shawn Willden DsaSignOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest, 530a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden keymaster_padding_t padding, DSA* key) 54f6ca3a3f1bbe206e2fd05be36da10cb4204e5388Shawn Willden : DsaOperation(purpose, logger, digest, padding, key) {} 550a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output); 560a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden}; 570a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 580a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willdenclass DsaVerifyOperation : public DsaOperation { 590a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden public: 60f6ca3a3f1bbe206e2fd05be36da10cb4204e5388Shawn Willden DsaVerifyOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest, 610a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden keymaster_padding_t padding, DSA* key) 62f6ca3a3f1bbe206e2fd05be36da10cb4204e5388Shawn Willden : DsaOperation(purpose, logger, digest, padding, key) {} 630a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output); 640a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden}; 650a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 660a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden} // namespace keymaster 670a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden 680a4df7e3a83a59e4a5abc3f605d7d7e9f636c682Shawn Willden#endif // SYSTEM_KEYMASTER_DSA_OPERATION_H_ 69