/* * PSSR * (C) 1999-2007 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_PSSR_H_ #define BOTAN_PSSR_H_ #include #include BOTAN_FUTURE_INTERNAL_HEADER(pssr.h) namespace Botan { /** * PSSR (called EMSA4 in IEEE 1363 and in old versions of the library) */ class BOTAN_PUBLIC_API(2,0) PSSR final : public EMSA { public: /** * @param hash the hash function to use */ explicit PSSR(HashFunction* hash); /** * @param hash the hash function to use * @param salt_size the size of the salt to use in bytes */ PSSR(HashFunction* hash, size_t salt_size); EMSA* clone() override; std::string name() const override; AlgorithmIdentifier config_for_x509(const Private_Key& key, const std::string& cert_hash_name) const override; private: void update(const uint8_t input[], size_t length) override; secure_vector raw_data() override; secure_vector encoding_of(const secure_vector& msg, size_t output_bits, RandomNumberGenerator& rng) override; bool verify(const secure_vector& coded, const secure_vector& raw, size_t key_bits) override; std::unique_ptr m_hash; size_t m_salt_size; bool m_required_salt_len; }; /** * PSSR_Raw * This accepts a pre-hashed buffer */ class BOTAN_PUBLIC_API(2,3) PSSR_Raw final : public EMSA { public: /** * @param hash the hash function to use */ explicit PSSR_Raw(HashFunction* hash); /** * @param hash the hash function to use * @param salt_size the size of the salt to use in bytes */ PSSR_Raw(HashFunction* hash, size_t salt_size); EMSA* clone() override; std::string name() const override; private: void update(const uint8_t input[], size_t length) override; secure_vector raw_data() override; secure_vector encoding_of(const secure_vector& msg, size_t output_bits, RandomNumberGenerator& rng) override; bool verify(const secure_vector& coded, const secure_vector& raw, size_t key_bits) override; std::unique_ptr m_hash; secure_vector m_msg; size_t m_salt_size; bool m_required_salt_len; }; } #endif