crypto_des_cbc.h revision d887589550018383cf6aa09e4c5313b067651891
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 5c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#ifndef SHILL_CRYPTO_DES_CBC_H_ 6c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#define SHILL_CRYPTO_DES_CBC_H_ 7823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 88a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko#include <string> 9823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#include <vector> 10823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 11cc67c52a2c00f90e877971d552208dd99825d84eBen Chan#include <base/macros.h> 12823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#include <gtest/gtest_prod.h> // for FRIEND_TEST 13823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 14823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov#include "shill/crypto_interface.h" 15823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 165ad1606ad8b3f74b2b7960a3003a2d1ca75d52b8Paul Stewartnamespace base { 175ad1606ad8b3f74b2b7960a3003a2d1ca75d52b8Paul Stewart 18823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovclass FilePath; 19823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 205ad1606ad8b3f74b2b7960a3003a2d1ca75d52b8Paul Stewart} // namespace base 215ad1606ad8b3f74b2b7960a3003a2d1ca75d52b8Paul Stewart 22823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovnamespace shill { 23823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 24823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov// DES-CBC crypto module implementation. 25823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkovclass CryptoDESCBC : public CryptoInterface { 26823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov public: 27823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const char kID[]; 28823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 29d887589550018383cf6aa09e4c5313b067651891mukesh agrawal CryptoDESCBC(); 30823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 31823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // Sets the DES key to the last |kBlockSize| bytes of |key_matter_path| and 32823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // the DES initialization vector to the second to last |kBlockSize| bytes of 33823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // |key_matter_path|. Returns true on success. 34a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart bool LoadKeyMatter(const base::FilePath& path); 35823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 36823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov // Inherited from CryptoInterface. 37823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov virtual std::string GetID(); 38a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart virtual bool Encrypt(const std::string& plaintext, std::string* ciphertext); 39a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart virtual bool Decrypt(const std::string& ciphertext, std::string* plaintext); 40823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 41a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart const std::vector<char>& key() const { return key_; } 42a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart const std::vector<char>& iv() const { return iv_; } 43823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 44823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov private: 45823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov FRIEND_TEST(CryptoDESCBCTest, Decrypt); 46823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov FRIEND_TEST(CryptoDESCBCTest, Encrypt); 47823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 48c74cf9cb439ef518bc00210fe5cd3b121f3079b3Eric Shienbrood static const unsigned int kBlockSize; 49823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const char kSentinel[]; 50823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov static const char kVersion2Prefix[]; 51823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 52823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov std::vector<char> key_; 53823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov std::vector<char> iv_; 5486964e0bae1a38c6817243959026603b4b8c69b7Darin Petkov 5586964e0bae1a38c6817243959026603b4b8c69b7Darin Petkov DISALLOW_COPY_AND_ASSIGN(CryptoDESCBC); 56823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov}; 57823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 58823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov} // namespace shill 59823c47e9ce362e6ba66ab21b1aa889a1848e3c4cDarin Petkov 60c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#endif // SHILL_CRYPTO_DES_CBC_H_ 61