5 #ifndef CRYPTOPP_IMPORTS
10 NAMESPACE_BEGIN(CryptoPP)
14 size_t
OAEP_Base::MaxUnpaddedLength(
size_t paddedLength)
const
16 return SaturatingSubtract(paddedLength/8, 1+2*DigestSize());
24 if (oaepBlockLen % 8 != 0)
31 std::auto_ptr<HashTransformation> pHash(NewHash());
32 const size_t hLen = pHash->DigestSize();
33 const size_t seedLen = hLen, dbLen = oaepBlockLen-seedLen;
34 byte *
const maskedSeed = oaepBlock;
35 byte *
const maskedDB = oaepBlock+seedLen;
41 pHash->CalculateDigest(maskedDB, encodingParameters.begin(), encodingParameters.size());
42 memset(maskedDB+hLen, 0, dbLen-hLen-inputLength-1);
43 maskedDB[dbLen-inputLength-1] = 0x01;
44 memcpy(maskedDB+dbLen-inputLength, input, inputLength);
47 std::auto_ptr<MaskGeneratingFunction> pMGF(NewMGF());
48 pMGF->GenerateAndMask(*pHash, maskedDB, dbLen, maskedSeed, seedLen);
49 pMGF->GenerateAndMask(*pHash, maskedSeed, seedLen, maskedDB, dbLen);
57 if (oaepBlockLen % 8 != 0)
59 invalid = (oaepBlock[0] != 0) || invalid;
64 std::auto_ptr<HashTransformation> pHash(NewHash());
65 const size_t hLen = pHash->DigestSize();
66 const size_t seedLen = hLen, dbLen = oaepBlockLen-seedLen;
68 invalid = (oaepBlockLen < 2*hLen+1) || invalid;
71 byte *
const maskedSeed = t;
72 byte *
const maskedDB = t+seedLen;
74 std::auto_ptr<MaskGeneratingFunction> pMGF(NewMGF());
75 pMGF->GenerateAndMask(*pHash, maskedSeed, seedLen, maskedDB, dbLen);
76 pMGF->GenerateAndMask(*pHash, maskedDB, dbLen, maskedSeed, seedLen);
82 byte *M = std::find(maskedDB+hLen, maskedDB+dbLen, 0x01);
83 invalid = (M == maskedDB+dbLen) || invalid;
84 invalid = (std::find_if(maskedDB+hLen, M, std::bind2nd(std::not_equal_to<byte>(), 0)) != M) || invalid;
85 invalid = !pHash->VerifyDigest(maskedDB, encodingParameters.begin(), encodingParameters.size()) || invalid;
91 memcpy(output, M, maskedDB+dbLen-M);
used to pass byte array input as part of a NameValuePairs object
virtual void GenerateBlock(byte *output, size_t size)
generate random array of bytes
a block of memory allocated using A
interface for random number generators
used to return decoding results
bool GetValue(const char *name, T &value) const
get a named value, returns true if the name exists
size_t MaxUnpaddedLength(size_t paddedLength) const
max size of unpadded message in bytes, given max size of padded message in bits (1 less than size of ...
const char * EncodingParameters()
ConstByteArrayParameter.
interface for retrieving values given their names