From d00b465123d798e3fa9f72f8a93151d9b193573b Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Mon, 4 Mar 2024 19:03:02 +0700 Subject: Add regression test for #524 --- crypto/test/src/crypto/test/PSSTest.cs | 40 +++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'crypto/test/src') diff --git a/crypto/test/src/crypto/test/PSSTest.cs b/crypto/test/src/crypto/test/PSSTest.cs index 599c2c8c7..72558e62f 100644 --- a/crypto/test/src/crypto/test/PSSTest.cs +++ b/crypto/test/src/crypto/test/PSSTest.cs @@ -4,6 +4,7 @@ using NUnit.Framework; using Org.BouncyCastle.Crypto.Digests; using Org.BouncyCastle.Crypto.Engines; +using Org.BouncyCastle.Crypto.Generators; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Crypto.Signers; using Org.BouncyCastle.Math; @@ -215,7 +216,44 @@ namespace Org.BouncyCastle.Crypto.Tests get { return "PSSTest"; } } - private void doTestSig( + [Test] + public void TestRegression_GitHub_bc_csharp_524() + { + SecureRandom secureRandom = new SecureRandom(); + + var kpg = new RsaKeyPairGenerator(); + kpg.Init(new RsaKeyGenerationParameters(BigInteger.ValueOf(17), secureRandom, 1024, 100)); + var keyPair = kpg.GenerateKeyPair(); + + var digest = new Sha256Digest(); + + var hash = SecureRandom.GetNextBytes(secureRandom, digest.GetDigestSize()); + + var signer = PssSigner.CreateRawSigner(new RsaBlindedEngine(), digest); + signer.Init(true, keyPair.Private); + // NOTE: .NET Core 3.1 has Span, but is tested against our .NET Standard 2.0 assembly. + //#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER +#if NET6_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER + signer.BlockUpdate(hash); +#else + signer.BlockUpdate(hash, 0, hash.Length); +#endif + byte[] signature = signer.GenerateSignature(); + + signer.Init(false, keyPair.Public); + // NOTE: .NET Core 3.1 has Span, but is tested against our .NET Standard 2.0 assembly. +//#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER +#if NET6_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER + signer.BlockUpdate(hash); +#else + signer.BlockUpdate(hash, 0, hash.Length); +#endif + bool verified = signer.VerifySignature(signature); + + Assert.IsTrue(verified); + } + + private void doTestSig( int id, RsaKeyParameters pub, RsaKeyParameters prv, -- cgit 1.5.1