1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CRYPTO_SIGNATURE_CREATOR_H_ 6#define CRYPTO_SIGNATURE_CREATOR_H_ 7#pragma once 8 9#include "build/build_config.h" 10 11#if defined(USE_OPENSSL) 12// Forward declaration for openssl/*.h 13typedef struct env_md_ctx_st EVP_MD_CTX; 14#elif defined(USE_NSS) 15// Forward declaration. 16struct SGNContextStr; 17#elif defined(OS_MACOSX) 18#include <Security/cssm.h> 19#endif 20 21#include <vector> 22 23#include "base/basictypes.h" 24#include "crypto/rsa_private_key.h" 25 26#if defined(OS_WIN) 27#include "crypto/scoped_capi_types.h" 28#endif 29 30namespace crypto { 31 32// Signs data using a bare private key (as opposed to a full certificate). 33// Currently can only sign data using SHA-1 with RSA encryption. 34class SignatureCreator { 35 public: 36 ~SignatureCreator(); 37 38 // Create an instance. The caller must ensure that the provided PrivateKey 39 // instance outlives the created SignatureCreator. 40 static SignatureCreator* Create(RSAPrivateKey* key); 41 42 // Update the signature with more data. 43 bool Update(const uint8* data_part, int data_part_len); 44 45 // Finalize the signature. 46 bool Final(std::vector<uint8>* signature); 47 48 private: 49 // Private constructor. Use the Create() method instead. 50 SignatureCreator(); 51 52 RSAPrivateKey* key_; 53 54#if defined(USE_OPENSSL) 55 EVP_MD_CTX* sign_context_; 56#elif defined(USE_NSS) 57 SGNContextStr* sign_context_; 58#elif defined(OS_MACOSX) 59 CSSM_CC_HANDLE sig_handle_; 60#elif defined(OS_WIN) 61 ScopedHCRYPTHASH hash_object_; 62#endif 63 64 DISALLOW_COPY_AND_ASSIGN(SignatureCreator); 65}; 66 67} // namespace crypto 68 69#endif // CRYPTO_SIGNATURE_CREATOR_H_ 70