crypto_des_cbc.h revision 86964e0bae1a38c6817243959026603b4b8c69b7
1823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov// Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov// Use of this source code is governed by a BSD-style license that can be 3823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov// found in the LICENSE file. 4823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 5823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#ifndef SHILL_CRYPTO_DES_CBC_ 6823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#define SHILL_CRYPTO_DES_CBC_ 7823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 8823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#include <vector> 9823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 1086964e0bae1a38c6817243959026603b4b8c69b7Darin Petkov#include <base/basictypes.h> 11823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#include <gtest/gtest_prod.h> // for FRIEND_TEST 12823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 13823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#include "shill/crypto_interface.h" 14823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 15823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovclass FilePath; 16823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 17823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovnamespace shill { 18823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 19823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovclass GLib; 20823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 21823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov// DES-CBC crypto module implementation. 22823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovclass CryptoDESCBC : public CryptoInterface { 23823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov public: 24823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const char kID[]; 25823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 2686964e0bae1a38c6817243959026603b4b8c69b7Darin Petkov explicit CryptoDESCBC(GLib *glib); 27823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 28823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // Sets the DES key to the last |kBlockSize| bytes of |key_matter_path| and 29823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // the DES initialization vector to the second to last |kBlockSize| bytes of 30823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // |key_matter_path|. Returns true on success. 31823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov bool LoadKeyMatter(const FilePath &path); 32823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 33823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // Inherited from CryptoInterface. 34823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov virtual std::string GetID(); 35823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov virtual bool Encrypt(const std::string &plaintext, std::string *ciphertext); 36823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov virtual bool Decrypt(const std::string &ciphertext, std::string *plaintext); 37823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 38823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov const std::vector<char> &key() const { return key_; } 39823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov const std::vector<char> &iv() const { return iv_; } 40823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 41823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov private: 42823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov FRIEND_TEST(CryptoDESCBCTest, Decrypt); 43823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov FRIEND_TEST(CryptoDESCBCTest, Encrypt); 44823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 45823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const int kBlockSize; 46823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const char kSentinel[]; 47823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const char kVersion2Prefix[]; 48823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 49823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov GLib *glib_; 50823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov std::vector<char> key_; 51823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov std::vector<char> iv_; 5286964e0bae1a38c6817243959026603b4b8c69b7Darin Petkov 5386964e0bae1a38c6817243959026603b4b8c69b7Darin Petkov DISALLOW_COPY_AND_ASSIGN(CryptoDESCBC); 54823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov}; 55823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 56823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov} // namespace shill 57823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 58823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#endif // SHILL_CRYPTO_DES_CBC_ 59