1 /* 2 * SM3 3 * (C) 2017 Ribose Inc. 4 * 5 * Botan is released under the Simplified BSD License (see license.txt) 6 */ 7 8 #ifndef BOTAN_SM3_H_ 9 #define BOTAN_SM3_H_ 10 11 #include <botan/mdx_hash.h> 12 13 BOTAN_FUTURE_INTERNAL_HEADER(sm3.h) 14 15 namespace Botan { 16 17 enum { 18 SM3_BLOCK_BYTES = 64, 19 SM3_DIGEST_BYTES = 32 20 }; 21 22 /** 23 * SM3 24 */ 25 class BOTAN_PUBLIC_API(2,2) SM3 final : public MDx_HashFunction 26 { 27 public: name()28 std::string name() const override { return "SM3"; } output_length()29 size_t output_length() const override { return SM3_DIGEST_BYTES; } clone()30 HashFunction* clone() const override { return new SM3; } 31 std::unique_ptr<HashFunction> copy_state() const override; 32 33 void clear() override; 34 SM3()35 SM3() : MDx_HashFunction(SM3_BLOCK_BYTES, true, true), m_digest(SM3_DIGEST_BYTES) 36 { clear(); } 37 private: 38 void compress_n(const uint8_t[], size_t blocks) override; 39 void copy_out(uint8_t[]) override; 40 41 /** 42 * The digest value 43 */ 44 secure_vector<uint32_t> m_digest; 45 }; 46 47 } 48 49 #endif 50