1 /* 2 * Poly1305 3 * (C) 2014 Jack Lloyd 4 * 5 * Botan is released under the Simplified BSD License (see license.txt) 6 */ 7 8 #ifndef BOTAN_MAC_POLY1305_H_ 9 #define BOTAN_MAC_POLY1305_H_ 10 11 #include <botan/mac.h> 12 #include <memory> 13 14 BOTAN_FUTURE_INTERNAL_HEADER(poly1305.h) 15 16 namespace Botan { 17 18 /** 19 * DJB's Poly1305 20 * Important note: each key can only be used once 21 */ 22 class BOTAN_PUBLIC_API(2,0) Poly1305 final : public MessageAuthenticationCode 23 { 24 public: name()25 std::string name() const override { return "Poly1305"; } 26 clone()27 MessageAuthenticationCode* clone() const override { return new Poly1305; } 28 29 void clear() override; 30 output_length()31 size_t output_length() const override { return 16; } 32 key_spec()33 Key_Length_Specification key_spec() const override 34 { 35 return Key_Length_Specification(32); 36 } 37 38 private: 39 void add_data(const uint8_t[], size_t) override; 40 void final_result(uint8_t[]) override; 41 void key_schedule(const uint8_t[], size_t) override; 42 43 secure_vector<uint64_t> m_poly; 44 secure_vector<uint8_t> m_buf; 45 size_t m_buf_pos = 0; 46 }; 47 48 } 49 50 #endif 51