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.
