Thank you Jeff. I appreciate it a lot.

Basically I would like to convert the code in the first example (below) to 
use anything safe to first sign the message with a private key and then 
verify and extract with public key (the 'recovered' variable below). 

No need for any large content, yeah.

Olli

int main(int argc, char* argv[])
{
    try {

        ////////////////////////////////////////////////
        // Generate keys
        AutoSeededRandomPool rng;

        InvertibleRSAFunction parameters;
        parameters.GenerateRandomWithKeySize( rng, 1024 );

        RSA::PrivateKey privateKey( parameters );
        RSA::PublicKey publicKey( parameters );

        // Signing      
        RSASS<PSSR, SHA1>::Signer signer( privateKey );
        RSASS<PSSR, SHA1>::Verifier verifier( publicKey );

        // Setup
        byte message[] = "RSA-PSSR Test";
        size_t messageLen = sizeof(message);      

        ////////////////////////////////////////////////
        // Sign and Encode
        SecByteBlock signature(signer.MaxSignatureLength(messageLen));

        size_t signatureLen = signer.SignMessageWithRecovery(rng, message,
            messageLen, NULL, 0, signature);

        ////////////////////////////////////////////////
        // Verify and Recover
        SecByteBlock recovered(
            verifier.MaxRecoverableLengthFromSignatureLength(signatureLen)
        );

        DecodingResult result = verifier.RecoverMessage(recovered, NULL,
            0, signature, signatureLen);

        if (!result.isValidCoding) {
            throw Exception( Exception::OTHER_ERROR, "Invalid Signature" );
        }

        ////////////////////////////////////////////////
        // Use recovered message
        size_t recoveredLen = result.messageLength;

        assert( 0 == memcmp( message, (const byte*)recovered,
            std::min( messageLen, recoveredLen ) ) );

    } // try

    catch( CryptoPP::Exception&e ) {
        std::cerr << "Error: " << e.what() << endl;
    }

    return 0;
}




On Saturday, January 12, 2019 at 1:16:27 PM UTC+2, Olli Savolainen wrote:
>
> Hi there, 
>
> I'm using crypto++ according to the RSA-PSSR-Filter-Test.zip example from 
> this link and it works:
> http://marko-editor.com/articles/cryptopp_sign_string/
>
> I'm trying to find something I can use reliably for signing a message with 
> private key and verifying its origin with public key programmatically in a 
> Qt app.
>
> I am happy I can actually get the message extracted while verifying the 
> signature:
>
>         StringSource(signature, true,
>         new SignatureVerificationFilter(
>             verifier,
>             new StringSink(recovered),
>             SignatureVerificationFilter::THROW_EXCEPTION | 
> SignatureVerificationFilter::PUT_MESSAGE) // SignatureVerificationFilter
>     ); // StringSource
>
>     assert(ui->plainTextEdit->toPlainText().toStdString() == recovered);
>
> But SHA1 is unsafe.
>
> Then I found this example with Whirlpool. However, it doesn't seem to 
> extract the actual original message, just claims to verify it.Does this 
> code actually verify the message though? The ArraySink usage seems a bit 
> esoteric to me so I can't tell.
> http://marko-editor.com/articles/cryptopp_sign_string/
>
>   bool result = false;
>   Verifier verifier(publicKey);
>   CryptoPP::StringSource ss2(decodedSignature + aMessage, true,
>                          new 
> CryptoPP::SignatureVerificationFilter(verifier,
>                            new CryptoPP::ArraySink((byte*)&result,
>                                                    sizeof(result))));
>
>   return result;
>
> I tried to convert the code to be similar to the SHA1 example but this 
> does not extract any message:
>
>     CryptoPP::StringSource ss2(decodedSignature, true,
>         new CryptoPP::SignatureVerificationFilter(verifier,
>             new StringSink(recovered)));
>
> Is it possible to convert this code with Whirlpool to actually extract the 
> message from the signature, or is the actual message not contained in the 
> signature although it appears to be PSSR?
>
> I am also wondering about the usage of 'new' allocations here; does this 
> code actually leak memory?
>
> My apologies for any erroneous terminology; I am not in the security field.
> I hope linking to the full examples instead of attaching to them to this 
> message is enough, it seemed extraneous to attach files here that are 
> already publicly available. I already asked this on stackoverflow before, 
> feel free to respond there if you like. 
>
> https://stackoverflow.com/questions/54033029/using-crypto-to-sign-using-private-key-sha1-vs-whirlpool
>
> Kind regards,
> Olli Savolainen
>
>
>

-- 
You received this message because you are subscribed to "Crypto++ Users". More 
information about Crypto++ and this group is available at 
http://www.cryptopp.com and 
http://groups.google.com/forum/#!forum/cryptopp-users.
--- 
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 cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to