ESIGN
From Crypto++ Wiki
ESIGN, or Efficient Digital Signature, is a Signature Scheme created by NTT Japan and specified in IEEE P1363. The chief advantage of using ESIGN over other Signature Schemes is speed. According to the Crypto++ benchmarks, ESIGN achieves high throughput with respect to both Signing and Verification. ESIGN is a Digital Signature Scheme with Appendix, meaning the original message must be presented to the Verify function to perform the verification.
[edit] Sample Programs
The following example demonstrates signing and verification using the ESIGN signature scheme and Signer::SignMessage and Verifier::VerifyMessage.
///////////////////////////////////////
// Quote of the Day by Francis Jeffrey
string message( "Opinions founded on prejudice are always " \
"sustained with the greatest of violence" );
///////////////////////////////////////
// Pseudo Random Number Generator
AutoSeededRandomPool rng;
///////////////////////////////////////
// Key Generation
InvertibleESIGNFunction parameters;
// Modulus size should be a multiple of 3
// k = 32 by default
parameters.GenerateRandomWithKeySize( rng, 64 * 3 );
ESIGN<Whirlpool>::PrivateKey privateKey( parameters );
ESIGN<Whirlpool>::PublicKey publicKey( parameters );
///////////////////////////////////////
// Signature
ESIGN< Whirlpool >::Signer signer( privateKey );
// Set up for SignMessage()
size_t length = signer.MaxSignatureLength();
byte* signature = new byte[ length ];
if( NULL == signature ) { return -1; }
// Sign...
signer.SignMessage( rng, (const byte*) message.c_str(),
message.length(), signature );
///////////////////////////////////////
// Verification
ESIGN< Whirlpool >::Verifier verifier( publicKey );
bool result = verifier.VerifyMessage( (const byte*)message.c_str(),
message.length(), signature, signer.SignatureLength() );
///////////////////////////////////////
// Result
if( true == result ) {
cout << "Signature on message verified" << endl;
} else {
cout << "Message verification failed" << endl;
}
[edit] Downloads
ESIGN-Test.zip - Demonstrates ESIGN Signature and Verification - 5KB