1 /* 2 * SHA-{384,512} 3 * (C) 1999-2010,2015 Jack Lloyd 4 * 5 * Botan is released under the Simplified BSD License (see license.txt) 6 */ 7 8 #ifndef BOTAN_SHA_64BIT_H_ 9 #define BOTAN_SHA_64BIT_H_ 10 11 #include <botan/mdx_hash.h> 12 13 BOTAN_FUTURE_INTERNAL_HEADER(sha2_64.h) 14 15 namespace Botan { 16 17 /** 18 * SHA-384 19 */ 20 class BOTAN_PUBLIC_API(2,0) SHA_384 final : public MDx_HashFunction 21 { 22 public: name()23 std::string name() const override { return "SHA-384"; } output_length()24 size_t output_length() const override { return 48; } clone()25 HashFunction* clone() const override { return new SHA_384; } 26 std::unique_ptr<HashFunction> copy_state() const override; 27 std::string provider() const override; 28 29 void clear() override; 30 SHA_384()31 SHA_384() : MDx_HashFunction(128, true, true, 16), m_digest(8) 32 { clear(); } 33 private: 34 void compress_n(const uint8_t[], size_t blocks) override; 35 void copy_out(uint8_t[]) override; 36 37 secure_vector<uint64_t> m_digest; 38 }; 39 40 /** 41 * SHA-512 42 */ 43 class BOTAN_PUBLIC_API(2,0) SHA_512 final : public MDx_HashFunction 44 { 45 public: name()46 std::string name() const override { return "SHA-512"; } output_length()47 size_t output_length() const override { return 64; } clone()48 HashFunction* clone() const override { return new SHA_512; } 49 std::unique_ptr<HashFunction> copy_state() const override; 50 std::string provider() const override; 51 52 void clear() override; 53 54 /* 55 * Perform a SHA-512 compression. For internal use 56 */ 57 static void compress_digest(secure_vector<uint64_t>& digest, 58 const uint8_t input[], 59 size_t blocks); 60 SHA_512()61 SHA_512() : MDx_HashFunction(128, true, true, 16), m_digest(8) 62 { clear(); } 63 private: 64 void compress_n(const uint8_t[], size_t blocks) override; 65 void copy_out(uint8_t[]) override; 66 67 static const uint64_t K[80]; 68 69 #if defined(BOTAN_HAS_SHA2_64_BMI2) 70 static void compress_digest_bmi2(secure_vector<uint64_t>& digest, 71 const uint8_t input[], 72 size_t blocks); 73 #endif 74 75 secure_vector<uint64_t> m_digest; 76 }; 77 78 /** 79 * SHA-512/256 80 */ 81 class BOTAN_PUBLIC_API(2,0) SHA_512_256 final : public MDx_HashFunction 82 { 83 public: name()84 std::string name() const override { return "SHA-512-256"; } output_length()85 size_t output_length() const override { return 32; } clone()86 HashFunction* clone() const override { return new SHA_512_256; } 87 std::unique_ptr<HashFunction> copy_state() const override; 88 std::string provider() const override; 89 90 void clear() override; 91 SHA_512_256()92 SHA_512_256() : MDx_HashFunction(128, true, true, 16), m_digest(8) { clear(); } 93 private: 94 void compress_n(const uint8_t[], size_t blocks) override; 95 void copy_out(uint8_t[]) override; 96 97 secure_vector<uint64_t> m_digest; 98 }; 99 100 } 101 102 #endif 103