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