/* * PKCS #1 v1.5 signature padding * (C) 1999-2008 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_EMSA_PKCS1_H__ #define BOTAN_EMSA_PKCS1_H__ #include #include namespace Botan { /** * PKCS #1 v1.5 signature padding * aka PKCS #1 block type 1 * aka EMSA3 from IEEE 1363 */ class BOTAN_DLL EMSA_PKCS1v15 final : public EMSA { public: /** * @param hash the hash function to use */ explicit EMSA_PKCS1v15(HashFunction* hash); EMSA* clone() override { return new EMSA_PKCS1v15(m_hash->clone()); } void update(const uint8_t[], size_t) override; secure_vector raw_data() override; secure_vector encoding_of(const secure_vector&, size_t, RandomNumberGenerator& rng) override; bool verify(const secure_vector&, const secure_vector&, size_t) override; private: std::unique_ptr m_hash; std::vector m_hash_id; }; /** * EMSA_PKCS1v15_Raw which is EMSA_PKCS1v15 without a hash or digest id * (which according to QCA docs is "identical to PKCS#11's CKM_RSA_PKCS * mechanism", something I have not confirmed) */ class BOTAN_DLL EMSA_PKCS1v15_Raw final : public EMSA { public: EMSA* clone() override { return new EMSA_PKCS1v15_Raw(); } void update(const uint8_t[], size_t) override; secure_vector raw_data() override; secure_vector encoding_of(const secure_vector&, size_t, RandomNumberGenerator& rng) override; bool verify(const secure_vector&, const secure_vector&, size_t) override; private: secure_vector m_message; }; } #endif