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