Once you've got the key parts into intn and inte, just do this:
CryptoPP::RSASS<CryptoPP::PSS, CryptoPP::SHA>::Verifier pub(intn, inte);
or:
CryptoPP::RSASS<CryptoPP::PSS, CryptoPP::SHA>::Verifier pub;
pub.AccessKey().Initialize(intn, inte);
----- Original Message -----
From: "BlackEye" <[EMAIL PROTECTED]>
To: "Crypto++ Users" <[EMAIL PROTECTED]>
Sent: Sunday, February 25, 2007 2:38 AM
Subject: Re: Load RSA Verifier with non-encoded key parts
>
> I had looked at the wiki before, but everything I see assumes that the
> public key is encoded. I've tried to encode the key parts myself, but
> I'm doing something wrong and can't figure out what it is. Here is a
> sample piece of code that shows what I've tried.
>
> void Base64Encode(std::string &in, std::string &out)
> {
> CryptoPP::StringSource(in, true, new CryptoPP::Base64Encoder(new
> CryptoPP::StringSink(out),false));
> }
>
> void Base64Decode(std::string &in, std::string &out)
> {
> CryptoPP::StringSource(in, true, new CryptoPP::Base64Decoder(new
> CryptoPP::StringSink(out)));
> }
>
> void test()
> {
>
> // I have base64 encoded n and e public key parts
> std::string strb64n="AKvhKNxRU/
> +aXwJSoOSmCjldk2YT2mVoH6w1+fprfL8qZ51ZNVPjRSCYHaKtZXgxcCENbsPbUtoV7VL0Z
> +dGBsYtWIbQqYGZjlXPgSDNl9BvSfHpJXFVH/HTLfYWKn59E
> +CpggHezBsscw5G9xFryqJ7MyrReMtYgGYlAwLK8n8p";
> std::string strb64e="EQ==";
> std::string strn;
> std::string stre;
>
> // decode encoded key parts
> Base64Decode(strb64n,strn);
> Base64Decode(strb64e,stre);
>
> // load 2 integers with decoded key parts
> CryptoPP::Integer intn((byte
> *)strn.c_str(),strn.size(),CryptoPP::Integer::SIGNED);
> CryptoPP::Integer inte((byte
> *)stre.c_str(),stre.size(),CryptoPP::Integer::SIGNED);
>
>
> std::string encodedpubstr;
> CryptoPP::Base64Encoder encout(new
> CryptoPP::StringSink(encodedpubstr),false);
>
> // start DER sequence
> CryptoPP::DERSequenceEncoder derenc(encout);
>
> // encode n and e - tried both DEREncode and BEREncode
> intn.DEREncode(derenc);
> inte.DEREncode(derenc);
>
> derenc.MessageEnd();
>
> // output the encoded key - seems to look OK
> std::cout << encodedpubstr << std::endl;
>
>
> // now try to load this DER encoded public key into RSA verifier
> CryptoPP::StringSource inpsource(encodedpubstr,true,new
> CryptoPP::Base64Decoder);
> try
> {
> // throws BER decode error
> CryptoPP::RSASS<CryptoPP::PSS, CryptoPP::SHA>::Verifier
> pub(inpsource);
> }
> catch( CryptoPP::Exception& e )
> {
> std::cerr << "Error e: " << e.what() << std::endl;
> }
> catch(...)
> {
> std::cout << "An error occurred" << std::endl;
> }
>
> }
>
>
> On Feb 24, 11:33 am, "Jeffrey Walton" <[EMAIL PROTECTED]> wrote:
>> Hi BlackEye,
>>
>> http://www.cryptopp.com/wiki/RSA
>>
>> Jeff
>>
>> On 2/24/07, BlackEye <[EMAIL PROTECTED]> wrote:
>>
>>
>>
>> > I'm trying to verify a signature (PSS encoded) on a message that was
>> > generated with a 3rd party program. I have the n and e parts of the
>> > RSA
>> > public key in hex format. How can I load this non-encoded public key
>> > into
>> > an RSA verifier? I've tried to load up two Integers with the numbers
>> > and
>> > DEREncode them together, but the verifier keeps throwing a BER decode
>> > error
>> > when it's initialized. All the examples I have seen have assumed
>> > some
>> > DER/BER encoding of the key. I'm sure there is some way I can easily
>> > do
>> > this. Does anyone have any ideas?
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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.
-~----------~----~----~----~------~----~------~--~---