Am Montag, 19. August 2013 03:45:41 UTC+2 schrieb Jeffrey Walton:
>
>
>
> On Friday, August 16, 2013 3:28:52 AM UTC-4, robert.hegner wrote:
>>
>> Hi there!
>>
>> I have a binary file with the following content
>>
>>    - length of the signature as an uint32
>>    - signature
>>    - length of the data as an uint32
>>    - data
>>
>> and I'd like to verify the data. First I create my verifier like this:
>>
>> CryptoPP::RSA::PublicKey publicKey;
>> CryptoPP::Integer n(PUBLIC_KEY_MODULUS, sizeof(PUBLIC_KEY_MODULUS));
>> CryptoPP::Integer e(PUBLIC_KEY_EXPONENT, sizeof(PUBLIC_KEY_EXPONENT));
>> publicKey.Initialize(n, e);
>> CryptoPP::RSASS<CryptoPP::PKCS1v15, CryptoPP::SHA1>::Verifier 
>> verifier(publicKey);
>>
>  ...
>
> But it returns false. I also tried this:
>>
>> CryptoPP::FileSource fileSource(packagePath.c_str(), true);
>> CryptoPP::VerifierFilter verifierFilter(verifier);
>> uint32_t len;
>> fileSource.GetWord32(len);
>> fileSource.TransferTo(verifierFilter, len);
>> fileSource.GetWord32(len);
>> fileSource.TransferTo(verifierFilter, len);
>> bool valid = verifierFilter.GetLastResult();
>>
> I also forgot to mention.... 
>
> By default, SignatureVerificationFilter uses SIGNATURE_AT_END. If you want 
> to insert the signature first, you should use SIGNATURE_AT_BEGIN. See 
> http://www.cryptopp.com/wiki/SignatureVerificationFilter.
>
> Jeff 
>



Thanks Jeff for your help!
I tried both your suggestions but it still doesn't work. To make sure that 
my data is correct I also tried (with the same verifier as in my original 
post) this solution without using filters:

std::ifstream ifs(packagePath.c_str(), std::ios::in + std::ios::binary);
uint32_t signatureLen;
ifs.read((char*)&signatureLen, sizeof(uint32_t));
boost::scoped_array<uint8_t> signature(new uint8_t[signatureLen]);
ifs.read((char*)signature.get(), signatureLen);
uint32_t dataLen;
ifs.read((char*)&dataLen, sizeof(uint32_t));
boost::scoped_array<uint8_t> data(new uint8_t[dataLen]);
ifs.read((char*)data.get(), dataLen);
bool valid = verifier.VerifyMessage(data.get(), dataLen, signature.get(), 
signatureLen);
 
This works fine!
But I would still like to use the FileSource / VerifierFilter approach for 
working with my file. What else could be the problem with my original code??

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to