Index: base/signatures.h |
diff --git a/base/signatures.h b/base/signatures.h |
deleted file mode 100644 |
index 2b2b507beb6d79e32e0d472d83c2f8d7d02368ef..0000000000000000000000000000000000000000 |
--- a/base/signatures.h |
+++ /dev/null |
@@ -1,296 +0,0 @@ |
-// Copyright 2003-2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
-// |
-// signatures.h |
-// |
-// Classes and functions related to crypto-hashes of buffers and digital |
-// signatures of buffers. |
- |
-#ifndef OMAHA_BASE_SIGNATURES_H_ |
-#define OMAHA_BASE_SIGNATURES_H_ |
- |
-#include <windows.h> |
-#include <wincrypt.h> |
-#include <atlstr.h> |
-#include <vector> |
-#include "base/basictypes.h" |
-#include "omaha/base/scoped_any.h" |
- |
-namespace omaha { |
- |
-// Forward decls of classes defined here |
-class CryptoHash; |
-class CryptoComputeSignature; |
-class CryptoVerifySignature; |
-class CryptoSigningCertificate; |
-class CryptoSignatureVerificationCertificate; |
- |
-// Useful scoped pointers for working with CryptoAPI objects |
-namespace CryptDetails { |
- |
- void crypt_close_store(HCERTSTORE); |
- void crypt_release_context(HCRYPTPROV); |
- void crypt_free_certificate(PCCERT_CONTEXT); |
- void crypt_destroy_key(HCRYPTKEY); |
- |
- typedef close_fun<void (*)(HCERTSTORE),crypt_close_store> smart_close_store; // NOLINT |
- typedef close_fun<void (*)(HCRYPTPROV),crypt_release_context> smart_release_context; // NOLINT |
- typedef close_fun<void (*)(PCCERT_CONTEXT),crypt_free_certificate> smart_free_certificate; // NOLINT |
- typedef close_fun<void (*)(HCRYPTKEY),crypt_destroy_key> smart_destroy_key; // NOLINT |
- |
- typedef scoped_any<HCERTSTORE,smart_close_store,null_t> scoped_crypt_store; // NOLINT |
- typedef scoped_any<HCRYPTPROV,smart_release_context,null_t> scoped_crypt_context; // NOLINT |
- typedef scoped_any<PCCERT_CONTEXT,smart_free_certificate,null_t> scoped_crypt_cert; // NOLINT |
- typedef scoped_any<HCRYPTKEY,smart_destroy_key,null_t> scoped_crypt_key; // NOLINT |
-} |
- |
-// A namespace for encoding binary into base64 (portable ASCII) representation |
-// and for decoding it again. |
-namespace Base64 { |
- // Binary -> base64 in a buffer |
- HRESULT Encode(const std::vector<byte>& buffer_in, |
- std::vector<byte>* encoded, |
- bool break_into_lines = true); |
- |
- // Binary -> base64 in a string |
- HRESULT Encode(const std::vector<byte>& buffer_in, |
- CStringA* encoded, |
- bool break_into_lines = true); |
- |
- // Binary -> base64 in a wide string |
- HRESULT Encode(const std::vector<byte>& buffer_in, |
- CString* encoded, |
- bool break_into_lines = true); |
- |
- // Base64 in a buffer -> binary |
- HRESULT Decode(const std::vector<byte>& encoded, |
- std::vector<byte>* buffer_out); |
- |
- // Base64 in a CStringA -> binary |
- HRESULT Decode(const CStringA& encoded, std::vector<byte>* buffer_out); |
- |
- // Base64 in a CString -> binary |
- HRESULT Decode(const CString& encoded, std::vector<byte>* buffer_out); |
-} |
- |
- |
-// Compute and validate SHA-1 hashes of data |
-class CryptoHash { |
- public: |
- |
- CryptoHash(); |
- ~CryptoHash(); |
- |
- static const int kHashSize = 20; |
- |
- // Hash a file |
- HRESULT Compute(const TCHAR * filepath, |
- uint64 max_len, |
- std::vector<byte>* hash_out); |
- |
- // Hash a list of files |
- HRESULT Compute(const std::vector<CString>& filepaths, |
- uint64 max_len, |
- std::vector<byte>* hash_out); |
- |
- // Hash a buffer |
- HRESULT Compute(const std::vector<byte>& buffer_in, |
- std::vector<byte>* hash_out); |
- |
- // Verify hash of a file |
- HRESULT Validate(const TCHAR * filepath, |
- uint64 max_len, |
- const std::vector<byte>& hash_in); |
- |
- // Verify hash of a list of files |
- HRESULT Validate(const std::vector<CString>& filepaths, |
- uint64 max_len, |
- const std::vector<byte>& hash_in); |
- |
- // Verify hash of a buffer |
- HRESULT Validate(const std::vector<byte>& buffer_in, |
- const std::vector<byte>& hash_in); |
- |
- private: |
- // Compute or verify hash of a file |
- HRESULT ComputeOrValidate(const std::vector<CString>& filepaths, |
- uint64 max_len, |
- const std::vector<byte>* hash_in, |
- std::vector<byte>* hash_out); |
- |
- // Compute or verify hash of a buffer |
- HRESULT ComputeOrValidate(const std::vector<byte>& buffer_in, |
- const std::vector<byte>* hash_in, |
- std::vector<byte>* hash_out); |
- |
- DISALLOW_EVIL_CONSTRUCTORS(CryptoHash); |
-}; |
- |
- |
-// Import and use a certificate for signing data (has a private key) |
-class CryptoSigningCertificate { |
- public: |
- CryptoSigningCertificate(); |
- ~CryptoSigningCertificate(); |
- |
- // Import certificate - with both public key and private key. |
- // Must be in PFX format. Password must unlock the PFX file. |
- // subject_name is the certificate's subject name (who it was |
- // issued to) - if not NULL then it is checked for an exact |
- // match against the certificate. |
- |
- // User can get the certificate in PFX format by following the procedure at |
- // http://support.globalsign.net/en/objectsign/transform.cfm |
- |
- HRESULT ImportCertificate(const TCHAR * filepath, |
- const TCHAR * password, |
- const TCHAR * subject_name); |
- |
- HRESULT ImportCertificate(const std::vector<byte>& certificate_in, |
- const TCHAR * password, |
- const TCHAR * subject_name); |
- |
- CString subject_name() { return subject_name_; } |
- |
- private: |
- static const int kMaxCertificateSize = 100000; |
- |
- CryptDetails::scoped_crypt_store store_; |
- CryptDetails::scoped_crypt_cert certificate_; |
- CryptDetails::scoped_crypt_context csp_; |
- CString subject_name_; |
- DWORD key_spec_; |
- |
- friend class CryptoComputeSignature; |
- // Get the CSP with the private key |
- // (CryptoSigningCertificate retains ownership of csp_context.) |
- HRESULT GetCSPContext(HCRYPTPROV* csp_context); |
- |
- DISALLOW_EVIL_CONSTRUCTORS(CryptoSigningCertificate); |
-}; |
- |
- |
-// Compute digital signatures |
-class CryptoComputeSignature { |
- public: |
- explicit CryptoComputeSignature(CryptoSigningCertificate* certificate); |
- ~CryptoComputeSignature(); |
- |
- // Sign a file, returning a separate signature |
- HRESULT Sign(const TCHAR * filepath, |
- uint32 max_len, |
- std::vector<byte>* signature_out); |
- |
- // Sign a chunk of memory, returning a separate signature |
- HRESULT Sign(const std::vector<byte>& buffer_in, |
- std::vector<byte>* signature_out); |
- |
- private: |
- // Does not take ownership of the certificate |
- CryptoSigningCertificate* const certificate_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(CryptoComputeSignature); |
-}; |
- |
- |
-// Import and use a certificate for verifying signatures (has public key only) |
-class CryptoSignatureVerificationCertificate { |
- public: |
- CryptoSignatureVerificationCertificate(); |
- ~CryptoSignatureVerificationCertificate(); |
- |
- // Import certificate - with only public key. Must be in DER (.cer) format. |
- // subject_name is the certificate's subject name (who it was |
- // issued to) - if not NULL then it is checked for an exact |
- // match against the certificate. |
- |
- // User can get certificate in DER format (.cer) by exporting from |
- // certmgr.exe, using openssl, etc.) |
- |
- HRESULT ImportCertificate(const TCHAR * filepath, |
- const TCHAR * subject_name); |
- HRESULT ImportCertificate(const std::vector<byte>& certificate_in, |
- const TCHAR * subject_name); |
- |
- CString subject_name() { return subject_name_; } |
- |
- private: |
- static const int kMaxCertificateSize = 100000; |
- |
- CryptDetails::scoped_crypt_cert certificate_; |
- CryptDetails::scoped_crypt_context csp_; |
- CryptDetails::scoped_crypt_key key_; |
- CString subject_name_; |
- |
- friend class CryptoVerifySignature; |
- // Get the CSP and the public key |
- // (CryptoSignatureVerificationCertificate retains ownership of csp_context |
- // and public_key.) |
- HRESULT GetCSPContextAndKey(HCRYPTPROV* csp_context, HCRYPTKEY* public_key); |
- |
- DISALLOW_EVIL_CONSTRUCTORS(CryptoSignatureVerificationCertificate); |
-}; |
- |
- |
-// Verify digital signatures |
-class CryptoVerifySignature { |
- public: |
- explicit CryptoVerifySignature( |
- CryptoSignatureVerificationCertificate& certificate); |
- ~CryptoVerifySignature(); |
- |
- // Validate signature of a file, signature given separately |
- HRESULT Validate(const TCHAR * filepath, |
- uint32 max_len, |
- const std::vector<byte>& signature_in); |
- |
- // Validate signature of a buffer of data, signature given separately |
- HRESULT Validate(const std::vector<byte>& buffer_in, |
- const std::vector<byte>& signature_in); |
- |
- private: |
- // Does not take ownership of the certificate |
- CryptoSignatureVerificationCertificate* const certificate_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(CryptoVerifySignature); |
-}; |
- |
- |
-// All-in-one routine to sign a chunk of data and return the signature |
-// (encoded in base64) |
-HRESULT SignData(const TCHAR* certificate_path, |
- const TCHAR* certificate_password, |
- const TCHAR* certificate_subject_name, |
- const std::vector<byte>& data, |
- CString* signature_base64); |
- |
-// All-in-one routine to verify the signature of a chunk of data |
-HRESULT VerifyData(const TCHAR* certificate_path, |
- const TCHAR* certificate_subject_name, |
- const std::vector<byte>& data, |
- const TCHAR* signature_base64); |
- |
-HRESULT VerifyData(const std::vector<byte>& certificate_buffer, |
- const TCHAR* certificate_subject_name, |
- const std::vector<byte>& data, |
- const TCHAR* signature_base64); |
- |
-// Authenticate files |
-HRESULT AuthenticateFiles(const std::vector<CString>& files, |
- const CString& hash); |
- |
-} // namespace omaha |
- |
-#endif // OMAHA_BASE_SIGNATURES_H_ |