AnCH Framework  0.1
Another C++ Hack Framework
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
sha384_512.hpp
1 /*
2  ANCH Framework: ANother C++ Hack is a C++ framework based on C++11 standard
3  Copyright (C) 2012 Vincent Lachenal
4 
5  This file is part of ANCH Framework.
6 
7  ANCH Framework is free software: you can redistribute it and/or modify
8  it under the terms of the GNU Lesser General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  ANCH Framework is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public License
18  along with ANCH Framework. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef _ANCH_CRYPTO_SHA384_512_H_
21 #define _ANCH_CRYPTO_SHA384_512_H_
22 
23 #include "crypto/hash/sha2.hpp"
24 
25 #include <array>
26 #include <list>
27 
28 
29 namespace anch {
30  namespace crypto {
31 
32  template<typename H> H HMAC(const std::string&, const std::string&);
33 
43  template<std::size_t O, const std::array<uint64_t,8>& I>
44  class SHA384_512: public SHA2<O,128,uint64_t,80,I> {
45 
46  friend SHA384_512 anch::crypto::HMAC<SHA384_512>(const std::string&, const std::string&);
47 
48  // Constructors +
49  public:
53  SHA384_512(): SHA2<O,128,uint64_t,80,I>() {
54  // Nothing to do
55  }
56 
62  template<class CharT, class Traits, class Allocator>
63  SHA384_512(const std::basic_string<CharT,Traits,Allocator>& data):
64  SHA2<O,128,uint64_t,80,I>() {
65  Hash<O,128>::digest(data);
66  }
67 
73  template<class CharT, class Traits>
74  SHA384_512(std::basic_istream<CharT,Traits>& stream):
75  SHA2<O,128,uint64_t,80,I>() {
76  Hash<O,128>::digest(stream);
77  }
78 
79  private:
86  SHA384_512(const uint8_t* data, std::size_t len):
88  Hash<O,128>::digest(data, len);
89  }
90  // Constructors -
91 
92 
93  // Destructor +
94  public:
98  virtual ~SHA384_512() {
99  // Nothing to do
100  }
101  // Destructor -
102 
103 
104  // Methods +
105  private:
111  virtual const std::array<uint64_t,80>& getTranslationArray() const {
112  static std::array<uint64_t,80> trArray = { {
113  0x428A2F98D728AE22, 0x7137449123EF65CD, 0xB5C0FBCFEC4D3B2F, 0xE9B5DBA58189DBBC,
114  0x3956C25BF348B538, 0x59F111F1B605D019, 0x923F82A4AF194F9B, 0xAB1C5ED5DA6D8118,
115  0xD807AA98A3030242, 0x12835B0145706FBE, 0x243185BE4EE4B28C, 0x550C7DC3D5FFB4E2,
116  0x72BE5D74F27B896F, 0x80DEB1FE3B1696B1, 0x9BDC06A725C71235, 0xC19BF174CF692694,
117  0xE49B69C19EF14AD2, 0xEFBE4786384F25E3, 0x0FC19DC68B8CD5B5, 0x240CA1CC77AC9C65,
118  0x2DE92C6F592B0275, 0x4A7484AA6EA6E483, 0x5CB0A9DCBD41FBD4, 0x76F988DA831153B5,
119  0x983E5152EE66DFAB, 0xA831C66D2DB43210, 0xB00327C898FB213F, 0xBF597FC7BEEF0EE4,
120  0xC6E00BF33DA88FC2, 0xD5A79147930AA725, 0x06CA6351E003826F, 0x142929670A0E6E70,
121  0x27B70A8546D22FFC, 0x2E1B21385C26C926, 0x4D2C6DFC5AC42AED, 0x53380D139D95B3DF,
122  0x650A73548BAF63DE, 0x766A0ABB3C77B2A8, 0x81C2C92E47EDAEE6, 0x92722C851482353B,
123  0xA2BFE8A14CF10364, 0xA81A664BBC423001, 0xC24B8B70D0F89791, 0xC76C51A30654BE30,
124  0xD192E819D6EF5218, 0xD69906245565A910, 0xF40E35855771202A, 0x106AA07032BBD1B8,
125  0x19A4C116B8D2D0C8, 0x1E376C085141AB53, 0x2748774CDF8EEB99, 0x34B0BCB5E19B48A8,
126  0x391C0CB3C5C95A63, 0x4ED8AA4AE3418ACB, 0x5B9CCA4F7763E373, 0x682E6FF3D6B2B8A3,
127  0x748F82EE5DEFB2FC, 0x78A5636F43172F60, 0x84C87814A1F0AB72, 0x8CC702081A6439EC,
128  0x90BEFFFA23631E28, 0xA4506CEBDE82BDE9, 0xBEF9A3F7B2C67915, 0xC67178F2E372532B,
129  0xCA273ECEEA26619C, 0xD186B8C721C0C207, 0xEADA7DD6CDE0EB1E, 0xF57D4F7FEE6ED178,
130  0x06F067AA72176FBA, 0x0A637DC5A2C898A6, 0x113F9804BEF90DAE, 0x1B710B35131C471B,
131  0x28DB77F523047D84, 0x32CAAB7B40C72493, 0x3C9EBE0A15C9BEBC, 0x431D67C49C100D4C,
132  0x4CC5D4BECB3E42B6, 0x597F299CFC657E2A, 0x5FCB6FAB3AD6FAEC, 0x6C44198C4A475817
133  } };
134  return trArray;
135  }
136 
142  virtual uint64_t SIGMA0(uint64_t word) const {
146  }
147 
153  virtual uint64_t SIGMA1(uint64_t word) const {
157  }
158 
164  virtual uint64_t sigma0(uint64_t word) const {
168  }
169 
175  virtual uint64_t sigma1(uint64_t word) const {
179  }
180  // Methods -
181 
182  };
183 
184  }
185 }
186 
187 #endif // _ANCH_CRYPTO_SHA384_512_H_
SHA2 384/512 implementation.
Definition: sha384_512.hpp:44
virtual const std::array< uint8_t, O > & digest() const =0
H HMAC(const std::string &, const std::string &)
Definition: hmac.hpp:38
SHA2 abstract class.
Definition: sha2.hpp:51
SHA384_512(std::basic_istream< CharT, Traits > &stream)
Definition: sha384_512.hpp:74
virtual ~SHA384_512()
Definition: sha384_512.hpp:98
AnCH framework base namespace.
Definition: base64.hpp:28
SHA384_512()
Definition: sha384_512.hpp:53
SHA384_512(const std::basic_string< CharT, Traits, Allocator > &data)
Definition: sha384_512.hpp:63