From 196797d73f1b675e1e6b49ea538c8e22ba3b2a5f Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Mon, 29 Jan 2024 21:23:42 +0700 Subject: Support signer reuse in SM2Signer --- crypto/test/src/crypto/test/SM2SignerTest.cs | 42 ++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'crypto/test/src') diff --git a/crypto/test/src/crypto/test/SM2SignerTest.cs b/crypto/test/src/crypto/test/SM2SignerTest.cs index a8cc016fd..e9d40fdc6 100644 --- a/crypto/test/src/crypto/test/SM2SignerTest.cs +++ b/crypto/test/src/crypto/test/SM2SignerTest.cs @@ -1,6 +1,3 @@ -using System; -using System.IO; - using NUnit.Framework; using Org.BouncyCastle.Asn1; @@ -135,6 +132,12 @@ namespace Org.BouncyCastle.Crypto.Tests } private void DoSignerTest(ECDomainParameters domainParams, IDigest d, string ident, string msg, string x, string nonce, string r, string s) + { + ImplSignerTest(domainParams, d, ident, msg, x, nonce, r, s); + ImplSignerTestReuse(domainParams, d, ident, msg, x); + } + + private void ImplSignerTest(ECDomainParameters domainParams, IDigest d, string ident, string msg, string x, string nonce, string r, string s) { byte[] idBytes = Strings.ToByteArray(ident); byte[] msgBytes = Strings.ToByteArray(msg); @@ -162,6 +165,39 @@ namespace Org.BouncyCastle.Crypto.Tests IsTrue("verification failed", signer.VerifySignature(sig)); } + private void ImplSignerTestReuse(ECDomainParameters domainParams, IDigest d, string ident, string msg, string x) + { + byte[] idBytes = Strings.ToByteArray(ident); + byte[] msgBytes = Strings.ToByteArray(msg); + AsymmetricCipherKeyPair kp = GenerateKeyPair(domainParams, x); + + SM2Signer signer = new SM2Signer(d); + + signer.Init(true, new ParametersWithID(kp.Private, idBytes)); + signer.BlockUpdate(msgBytes, 0, msgBytes.Length); + byte[] sig1 = signer.GenerateSignature(); + + signer.BlockUpdate(msgBytes, 0, msgBytes.Length); + byte[] sig2 = signer.GenerateSignature(); + + signer.Update(0x00); + signer.Reset(); + signer.BlockUpdate(msgBytes, 0, msgBytes.Length); + byte[] sig3 = signer.GenerateSignature(); + + signer.Init(false, new ParametersWithID(kp.Public, idBytes)); + signer.BlockUpdate(msgBytes, 0, msgBytes.Length); + IsTrue("verification failed", signer.VerifySignature(sig1)); + + signer.BlockUpdate(msgBytes, 0, msgBytes.Length); + IsTrue("verification failed", signer.VerifySignature(sig2)); + + signer.Update(0x00); + signer.Reset(); + signer.BlockUpdate(msgBytes, 0, msgBytes.Length); + IsTrue("verification failed", signer.VerifySignature(sig3)); + } + private void DoVerifyBoundsCheck() { ECDomainParameters domainParams = ParametersF2m; -- cgit 1.5.1