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_ENCRYPTOR_H_ 6#define CRYPTO_ENCRYPTOR_H_ 7#pragma once 8 9#include <string> 10 11#include "build/build_config.h" 12 13#if defined(USE_NSS) 14#include "crypto/scoped_nss_types.h" 15#elif defined(OS_WIN) 16#include "crypto/scoped_capi_types.h" 17#endif 18 19namespace crypto { 20 21class SymmetricKey; 22 23class Encryptor { 24 public: 25 enum Mode { 26 CBC 27 }; 28 Encryptor(); 29 virtual ~Encryptor(); 30 31 // Initializes the encryptor using |key| and |iv|. Returns false if either the 32 // key or the initialization vector cannot be used. 33 bool Init(SymmetricKey* key, Mode mode, const std::string& iv); 34 35 // Encrypts |plaintext| into |ciphertext|. 36 bool Encrypt(const std::string& plaintext, std::string* ciphertext); 37 38 // Decrypts |ciphertext| into |plaintext|. 39 bool Decrypt(const std::string& ciphertext, std::string* plaintext); 40 41 // TODO(albertb): Support streaming encryption. 42 43 private: 44 SymmetricKey* key_; 45 Mode mode_; 46 47#if defined(USE_OPENSSL) 48 bool Crypt(bool encrypt, // Pass true to encrypt, false to decrypt. 49 const std::string& input, 50 std::string* output); 51 std::string iv_; 52#elif defined(USE_NSS) 53 ScopedPK11Slot slot_; 54 ScopedSECItem param_; 55#elif defined(OS_MACOSX) 56 bool Crypt(int /*CCOperation*/ op, 57 const std::string& input, 58 std::string* output); 59 60 std::string iv_; 61#elif defined(OS_WIN) 62 ScopedHCRYPTKEY capi_key_; 63 DWORD block_size_; 64#endif 65}; 66 67} // namespace crypto 68 69#endif // CRYPTO_ENCRYPTOR_H_ 70