tiger_policy.hpp
Go to the documentation of this file.
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2018-2020 Mikhail Komarov <nemo@nil.foundation>
3 //
4 // MIT License
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to deal
8 // in the Software without restriction, including without limitation the rights
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 // copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in all
14 // copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 // SOFTWARE.
23 //---------------------------------------------------------------------------//
24 
25 #ifndef CRYPTO3_TIGER_POLICY_HPP
26 #define CRYPTO3_TIGER_POLICY_HPP
27 
29 
30 namespace nil {
31  namespace crypto3 {
32  namespace hashes {
33  namespace detail {
34  template<std::size_t DigestBits, std::size_t Passes>
35  struct tiger_policy : public tiger_functions<DigestBits> {
37 
38  constexpr static const std::size_t word_bits = tiger_functions<DigestBits>::word_bits;
40 
41  constexpr static const std::size_t passes = Passes;
42 
44 
45  constexpr static const std::size_t digest_bits = DigestBits;
47 
48  constexpr static const std::size_t pkcs_id_size = 0;
49  constexpr static const std::size_t pkcs_id_bits = pkcs_id_size * CHAR_BIT;
50  typedef std::array<std::uint8_t, pkcs_id_size> pkcs_id_type;
51 
52  constexpr static const pkcs_id_type pkcs_id = {};
53 
54  constexpr static const std::size_t state_bits = tiger_functions<DigestBits>::state_bits;
55  constexpr static const std::size_t state_words = tiger_functions<DigestBits>::state_words;
57 
58  struct iv_generator {
59  state_type const &operator()() const {
60  constexpr static const state_type H0 = {
61  {0x0123456789ABCDEF, 0xFEDCBA9876543210, 0xF096A5B4C3B2E187}};
62  return H0;
63  }
64  };
65  };
66 
67  template<>
68  struct tiger_policy<192, 3> : public tiger_functions<192> {
69  constexpr static const std::size_t digest_bits = 192;
71 
73 
74  constexpr static const std::size_t word_bits = tiger_functions<digest_bits>::word_bits;
76 
77  constexpr static const std::size_t passes = 3;
78 
80 
81  constexpr static const std::size_t pkcs_id_size = 19;
82  constexpr static const std::size_t pkcs_id_bits = pkcs_id_size * CHAR_BIT;
83  typedef std::array<std::uint8_t, pkcs_id_size> pkcs_id_type;
84 
85  constexpr static const pkcs_id_type pkcs_id = {0x30, 0x29, 0x30, 0x0D, 0x06, 0x09, 0x2B,
86  0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0C,
87  0x02, 0x05, 0x00, 0x04, 0x18};
88 
89  constexpr static const std::size_t state_bits = tiger_functions<digest_bits>::state_bits;
90  constexpr static const std::size_t state_words = tiger_functions<digest_bits>::state_words;
92 
93  struct iv_generator {
94  state_type const &operator()() const {
95  constexpr static const state_type H0 = {
96  {0x0123456789ABCDEF, 0xFEDCBA9876543210, 0xF096A5B4C3B2E187}};
97  return H0;
98  }
99  };
100  };
101 
102  template<std::size_t DigestBits, std::size_t Passes>
103  constexpr typename tiger_policy<DigestBits, Passes>::pkcs_id_type const
105  } // namespace detail
106  } // namespace hashes
107  } // namespace crypto3
108 } // namespace nil
109 
110 #endif // CRYPTO3_TIGER_POLICY_HPP
Definition: block/include/nil/crypto3/detail/static_digest.hpp:72
Definition: pair.hpp:31
std::array< word_type, state_words > state_type
Definition: basic_tiger_policy.hpp:48
Definition: tiger_functions.hpp:37
policy_type::word_type word_type
Definition: tiger_functions.hpp:43
basic_tiger_policy< DigestBits >::state_type state_type
Definition: tiger_functions.hpp:47
policy_type::byte_type byte_type
Definition: tiger_functions.hpp:40
state_type const & operator()() const
Definition: tiger_policy.hpp:59
state_type const & operator()() const
Definition: tiger_policy.hpp:94
tiger_functions< digest_bits >::state_type state_type
Definition: tiger_policy.hpp:91
tiger_functions< digest_bits >::byte_type byte_type
Definition: tiger_policy.hpp:72
stream_endian::little_octet_big_bit digest_endian
Definition: tiger_policy.hpp:79
tiger_functions< digest_bits >::word_type word_type
Definition: tiger_policy.hpp:75
std::array< std::uint8_t, pkcs_id_size > pkcs_id_type
Definition: tiger_policy.hpp:83
static_digest< digest_bits > digest_type
Definition: tiger_policy.hpp:70
Definition: tiger_policy.hpp:35
tiger_functions< DigestBits >::word_type word_type
Definition: tiger_policy.hpp:39
constexpr static const std::size_t word_bits
Definition: tiger_policy.hpp:38
constexpr static const std::size_t state_bits
Definition: tiger_policy.hpp:54
constexpr static const std::size_t pkcs_id_size
Definition: tiger_policy.hpp:48
stream_endian::little_octet_big_bit digest_endian
Definition: tiger_policy.hpp:43
constexpr static const std::size_t state_words
Definition: tiger_policy.hpp:55
constexpr static const std::size_t passes
Definition: tiger_policy.hpp:41
constexpr static const std::size_t pkcs_id_bits
Definition: tiger_policy.hpp:49
tiger_functions< DigestBits >::byte_type byte_type
Definition: tiger_policy.hpp:36
std::array< std::uint8_t, pkcs_id_size > pkcs_id_type
Definition: tiger_policy.hpp:50
constexpr static const pkcs_id_type pkcs_id
Definition: tiger_policy.hpp:52
tiger_functions< DigestBits >::state_type state_type
Definition: tiger_policy.hpp:56
constexpr static const std::size_t digest_bits
Definition: tiger_policy.hpp:45
static_digest< DigestBits > digest_type
Definition: tiger_policy.hpp:46
Definition: algebra/include/nil/crypto3/detail/stream_endian.hpp:45