#ifndef CRYPTOPP_PKCSPAD_H #define CRYPTOPP_PKCSPAD_H #include "cryptlib.h" #include "pubkey.h" NAMESPACE_BEGIN(CryptoPP) /// EME-PKCS1-v1_5 class PKCS_EncryptionPaddingScheme { public: unsigned int MaxUnpaddedLength(unsigned int paddedLength) const; void Pad(RandomNumberGenerator &rng, const byte *raw, unsigned int inputLength, byte *padded, unsigned int paddedLength) const; unsigned int Unpad(const byte *padded, unsigned int paddedLength, byte *raw) const; }; /// EME-PKCS1-v1_5 class PKCS_SignaturePaddingScheme { public: unsigned int MaxUnpaddedLength(unsigned int paddedLength) const; void Pad(RandomNumberGenerator &rng, const byte *raw, unsigned int inputLength, byte *padded, unsigned int paddedLength) const; unsigned int Unpad(const byte *padded, unsigned int paddedLength, byte *raw) const; }; /// EME-PKCS1-v1_5 template class PKCS_DecoratedHashModule : public HashModule { public: void Update(const byte *input, unsigned int length) {h.Update(input, length);} unsigned int DigestSize() const; void Final(byte *digest); private: H h; }; template struct PKCS_DigestDecoration { static const byte decoration[]; static const unsigned int length; }; // PKCS_DecoratedHashModule can be instantiated with the following three // classes as specified in PKCS#1 v2.0. class SHA; class MD2; class MD5; template void PKCS_DecoratedHashModule::Final(byte *digest) { const unsigned int decorationLen = PKCS_DigestDecoration::length; memcpy(digest, PKCS_DigestDecoration::decoration, decorationLen); h.Final(digest+decorationLen); } template unsigned int PKCS_DecoratedHashModule::DigestSize() const { return h.DigestSize() + PKCS_DigestDecoration::length; } NAMESPACE_END #endif