summary refs log tree commit diff
path: root/crypto/test/src
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2024-01-29 21:23:42 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2024-01-29 21:23:42 +0700
commit196797d73f1b675e1e6b49ea538c8e22ba3b2a5f (patch)
treea0c3e65ebdeacc0a64fb7b9dc6448a38ca639697 /crypto/test/src
parentAdd Prehash digest for safer raw signers (diff)
downloadBouncyCastle.NET-ed25519-196797d73f1b675e1e6b49ea538c8e22ba3b2a5f.tar.xz
Support signer reuse in SM2Signer
Diffstat (limited to 'crypto/test/src')
-rw-r--r--crypto/test/src/crypto/test/SM2SignerTest.cs42
1 files changed, 39 insertions, 3 deletions
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; @@ -136,6 +133,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); AsymmetricCipherKeyPair kp = GenerateKeyPair(domainParams, x); @@ -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;