diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2003-03-20 01:24:12 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2003-03-20 01:24:12 +0000 |
commit | d23a489940499bd6c634a1cb0a9875f094f8a850 (patch) | |
tree | f85b3bed971083e90e5f3dbb84539ea4ba0359e9 /validat2.cpp | |
parent | b3517523a738277cfe22428bd757833e69abb66e (diff) | |
download | cryptopp-d23a489940499bd6c634a1cb0a9875f094f8a850.tar.gz |
various changes for 5.1
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@38 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'validat2.cpp')
-rw-r--r-- | validat2.cpp | 63 |
1 files changed, 41 insertions, 22 deletions
diff --git a/validat2.cpp b/validat2.cpp index 783f7be..9a93019 100644 --- a/validat2.cpp +++ b/validat2.cpp @@ -113,23 +113,42 @@ bool SignatureValidate(PK_Signer &priv, PK_Verifier &pub, bool thorough = false) const byte *message = (byte *)"test message"; const int messageLen = 12; - byte buffer[512]; - memset(buffer, 0, sizeof(buffer)); - priv.SignMessage(GlobalRNG(), message, messageLen, buffer); - fail = !pub.VerifyMessage(message, messageLen, buffer); + SecByteBlock signature(priv.MaxSignatureLength()); + unsigned int signatureLength = priv.SignMessage(GlobalRNG(), message, messageLen, signature); + fail = !pub.VerifyMessage(message, messageLen, signature, signatureLength); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "signature and verification\n"; - ++buffer[0]; - fail = pub.VerifyMessage(message, messageLen, buffer); + ++signature[0]; + fail = pub.VerifyMessage(message, messageLen, signature, signatureLength); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "checking invalid signature" << endl; + if (priv.MaxRecoverableLength() > 0) + { + signatureLength = priv.SignMessageWithRecovery(GlobalRNG(), message, messageLen, NULL, 0, signature); + SecByteBlock recovered(priv.MaxRecoverableLengthFromSignatureLength(signatureLength)); + DecodingResult result = pub.RecoverMessage(recovered, NULL, 0, signature, signatureLength); + fail = !(result.isValidCoding && result.messageLength == messageLen && memcmp(recovered, message, messageLen) == 0); + pass = pass && !fail; + + cout << (fail ? "FAILED " : "passed "); + cout << "signature and verification with recovery" << endl; + + ++signature[0]; + result = pub.RecoverMessage(recovered, NULL, 0, signature, signatureLength); + fail = result.isValidCoding; + pass = pass && !fail; + + cout << (fail ? "FAILED " : "passed "); + cout << "recovery with invalid signature" << endl; + } + return pass; } @@ -149,7 +168,7 @@ bool CryptoSystemValidate(PK_Decryptor &priv, PK_Encryptor &pub, bool thorough = SecByteBlock plaintext(priv.MaxPlaintextLength(ciphertext.size())); pub.Encrypt(GlobalRNG(), message, messageLen, ciphertext); - fail = priv.Decrypt(ciphertext, priv.CiphertextLength(messageLen), plaintext) != DecodingResult(messageLen); + fail = priv.Decrypt(GlobalRNG(), ciphertext, priv.CiphertextLength(messageLen), plaintext) != DecodingResult(messageLen); fail = fail || memcmp(message, plaintext, messageLen); pass = pass && !fail; @@ -254,21 +273,21 @@ bool ValidateRSA() RSASSA_PKCS1v15_MD2_Signer rsaPriv(keys); RSASSA_PKCS1v15_MD2_Verifier rsaPub(rsaPriv); - rsaPriv.SignMessage(GlobalRNG(), (byte *)plain, strlen(plain), out); + unsigned int signatureLength = rsaPriv.SignMessage(GlobalRNG(), (byte *)plain, strlen(plain), out); fail = memcmp(signature, out, 64) != 0; pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "signature check against test vector\n"; - fail = !rsaPub.VerifyMessage((byte *)plain, strlen(plain), out); + fail = !rsaPub.VerifyMessage((byte *)plain, strlen(plain), out, signatureLength); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "verification check against test vector\n"; out[10]++; - fail = rsaPub.VerifyMessage((byte *)plain, strlen(plain), out); + fail = rsaPub.VerifyMessage((byte *)plain, strlen(plain), out, signatureLength); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); @@ -305,7 +324,7 @@ bool ValidateRSA() memset(out, 0, 50); memset(outPlain, 0, 8); rsaPub.Encrypt(rng, plain, 8, out); - DecodingResult result = rsaPriv.FixedLengthDecrypt(encrypted, outPlain); + DecodingResult result = rsaPriv.FixedLengthDecrypt(GlobalRNG(), encrypted, outPlain); fail = !result.isValidCoding || (result.messageLength!=8) || memcmp(out, encrypted, 50) || memcmp(plain, outPlain, 8); pass = pass && !fail; @@ -447,20 +466,20 @@ bool ValidateDSA(bool thorough) cout << (fail ? "FAILED " : "passed "); cout << "prime generation test\n"; - priv.GetDigestSignatureScheme().RawSign(k, h, rOut, sOut); + priv.RawSign(k, h, rOut, sOut); fail = (rOut != r) || (sOut != s); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "signature check against test vector\n"; - fail = !pub.VerifyMessage((byte *)"abc", 3, sig); + fail = !pub.VerifyMessage((byte *)"abc", 3, sig, sizeof(sig)); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "verification check against test vector\n"; - fail = pub.VerifyMessage((byte *)"xyz", 3, sig); + fail = pub.VerifyMessage((byte *)"xyz", 3, sig, sizeof(sig)); pass = pass && !fail; } FileSource fs1("dsa1024.dat", true, new HexDecoder()); @@ -518,8 +537,8 @@ bool ValidateRabin() { FileSource f("rabi1024.dat", true, new HexDecoder); - RabinPSSR<SHA>::Signer priv(f); - RabinPSSR<SHA>::Verifier pub(priv); + RabinSS<PSSR, SHA>::Signer priv(f); + RabinSS<PSSR, SHA>::Verifier pub(priv); pass = SignatureValidate(priv, pub) && pass; } { @@ -535,8 +554,8 @@ bool ValidateRW() cout << "\nRW validation suite running...\n\n"; FileSource f("rw1024.dat", true, new HexDecoder); - RWSSA<SHA>::Signer priv(f); - RWSSA<SHA>::Verifier pub(priv); + RWSS<PSSR, SHA>::Signer priv(f); + RWSS<PSSR, SHA>::Verifier pub(priv); return SignatureValidate(priv, pub); } @@ -681,20 +700,20 @@ bool ValidateECDSA() Integer rOut, sOut; bool fail, pass=true; - priv.GetDigestSignatureScheme().RawSign(k, h, rOut, sOut); + priv.RawSign(k, h, rOut, sOut); fail = (rOut != r) || (sOut != s); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "signature check against test vector\n"; - fail = !pub.VerifyMessage((byte *)"abc", 3, sig); + fail = !pub.VerifyMessage((byte *)"abc", 3, sig, sizeof(sig)); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); cout << "verification check against test vector\n"; - fail = pub.VerifyMessage((byte *)"xyz", 3, sig); + fail = pub.VerifyMessage((byte *)"xyz", 3, sig, sizeof(sig)); pass = pass && !fail; pass = SignatureValidate(priv, pub) && pass; @@ -723,7 +742,7 @@ bool ValidateESIGN() fail = !SignatureValidate(signer, verifier); pass = pass && !fail; - fail = !verifier.VerifyMessage((byte *)plain, strlen(plain), signature); + fail = !verifier.VerifyMessage((byte *)plain, strlen(plain), signature, verifier.SignatureLength()); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); |