diff --git a/crypto/test/src/cms/test/SignedDataTest.cs b/crypto/test/src/cms/test/SignedDataTest.cs
index 0c176bdeb..2b5d147f6 100644
--- a/crypto/test/src/cms/test/SignedDataTest.cs
+++ b/crypto/test/src/cms/test/SignedDataTest.cs
@@ -17,6 +17,7 @@ using Org.BouncyCastle.Utilities.IO;
using Org.BouncyCastle.Utilities.Test;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.X509.Store;
+using Org.BouncyCastle.Crypto.Operators;
namespace Org.BouncyCastle.Cms.Tests
{
@@ -522,7 +523,101 @@ namespace Org.BouncyCastle.Cms.Tests
CheckSignerStoreReplacement(s, signers);
}
- // NB: C# build doesn't support "no attributes" version of CmsSignedDataGenerator.Generate
+ [Test]
+ public void TestSha1AndMD5WithRsaEncapsulatedRepeatedWithSignerInfoGen()
+ {
+ CmsProcessable msg = new CmsProcessableByteArray(Encoding.ASCII.GetBytes("Hello World!"));
+
+ IX509Store x509Certs = CmsTestUtil.MakeCertStore(OrigCert, SignCert);
+
+ CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
+ gen.AddSignerInfoGenerator(new SignerInfoGeneratorBuilder().Build(
+ new Asn1SignatureCalculator("SHA1withRSA", OrigKP.Private), OrigCert));
+ gen.AddSignerInfoGenerator(new SignerInfoGeneratorBuilder().Build(
+ new Asn1SignatureCalculator("MD5withRSA", OrigKP.Private), OrigCert));
+
+ gen.AddCertificates(x509Certs);
+
+ CmsSignedData s = gen.Generate(msg, true);
+
+ s = new CmsSignedData(ContentInfo.GetInstance(Asn1Object.FromByteArray(s.GetEncoded())));
+
+ x509Certs = s.GetCertificates("Collection");
+
+ SignerInformationStore signers = s.GetSignerInfos();
+
+ Assert.AreEqual(2, signers.Count);
+
+ SignerID sid = null;
+ ICollection c = signers.GetSigners();
+
+ foreach (SignerInformation signer in c)
+ {
+ ICollection certCollection = x509Certs.GetMatches(signer.SignerID);
+
+ IEnumerator certEnum = certCollection.GetEnumerator();
+
+ certEnum.MoveNext();
+ X509Certificate cert = (X509Certificate)certEnum.Current;
+
+ sid = signer.SignerID;
+
+ Assert.IsTrue(signer.Verify(cert));
+
+ //
+ // check content digest
+ //
+
+ byte[] contentDigest = (byte[])gen.GetGeneratedDigests()[signer.DigestAlgOid];
+
+ AttributeTable table = signer.SignedAttributes;
+ Asn1.Cms.Attribute hash = table[CmsAttributes.MessageDigest];
+
+ Assert.IsTrue(Arrays.AreEqual(contentDigest, ((Asn1OctetString)hash.AttrValues[0]).GetOctets()));
+ }
+
+ c = signers.GetSigners(sid);
+
+ Assert.AreEqual(2, c.Count);
+
+ //
+ // try using existing signer
+ //
+
+ gen = new CmsSignedDataGenerator();
+
+ gen.AddSigners(s.GetSignerInfos());
+
+ gen.AddCertificates(s.GetCertificates("Collection"));
+ gen.AddCrls(s.GetCrls("Collection"));
+
+ s = gen.Generate(msg, true);
+
+ s = new CmsSignedData(ContentInfo.GetInstance(Asn1Object.FromByteArray(s.GetEncoded())));
+
+ x509Certs = s.GetCertificates("Collection");
+
+ signers = s.GetSignerInfos();
+ c = signers.GetSigners();
+
+ Assert.AreEqual(2, c.Count);
+
+ foreach (SignerInformation signer in c)
+ {
+ ICollection certCollection = x509Certs.GetMatches(signer.SignerID);
+
+ IEnumerator certEnum = certCollection.GetEnumerator();
+
+ certEnum.MoveNext();
+ X509Certificate cert = (X509Certificate)certEnum.Current;
+
+ Assert.AreEqual(true, signer.Verify(cert));
+ }
+
+ CheckSignerStoreReplacement(s, signers);
+ }
+
+ // NB: C# build doesn't support "no attributes" version of CmsSignedDataGenerator.Generate
//[Test]
//public void TestSha1WithRsaNoAttributes()
//{
@@ -544,7 +639,7 @@ namespace Org.BouncyCastle.Cms.Tests
// VerifySignatures(s, hash);
//}
- [Test]
+ [Test]
public void TestSha1WithRsaAndAttributeTable()
{
byte[] testBytes = Encoding.ASCII.GetBytes("Hello world!");
@@ -643,7 +738,31 @@ namespace Org.BouncyCastle.Cms.Tests
EncapsulatedTest(SignKP, SignCert, CmsSignedDataGenerator.DigestRipeMD256);
}
- [Test]
+ [Test]
+ public void TestSha224WithDsaEncapsulated()
+ {
+ EncapsulatedTest(SignDsaKP, SignDsaCert, CmsSignedDataGenerator.DigestSha224);
+ }
+
+ [Test]
+ public void TestSha256WithDsaEncapsulated()
+ {
+ EncapsulatedTest(SignDsaKP, SignDsaCert, CmsSignedDataGenerator.DigestSha256);
+ }
+
+ [Test]
+ public void TestSha384WithDsaEncapsulated()
+ {
+ EncapsulatedTest(SignDsaKP, SignDsaCert, CmsSignedDataGenerator.DigestSha384);
+ }
+
+ [Test]
+ public void TestSha512WithDsaEncapsulated()
+ {
+ EncapsulatedTest(SignDsaKP, SignDsaCert, CmsSignedDataGenerator.DigestSha512);
+ }
+
+ [Test]
public void TestECDsaEncapsulated()
{
EncapsulatedTest(SignECDsaKP, SignECDsaCert, CmsSignedDataGenerator.DigestSha1);
@@ -903,6 +1022,8 @@ namespace Org.BouncyCastle.Cms.Tests
certEnum.MoveNext();
X509Certificate cert = (X509Certificate) certEnum.Current;
+ Assert.AreEqual(digestAlgorithm, signer.DigestAlgOid);
+
Assert.IsTrue(signer.Verify(cert));
}
diff --git a/crypto/test/src/openssl/test/WriterTest.cs b/crypto/test/src/openssl/test/WriterTest.cs
index 41f371708..0d7887771 100644
--- a/crypto/test/src/openssl/test/WriterTest.cs
+++ b/crypto/test/src/openssl/test/WriterTest.cs
@@ -90,21 +90,21 @@ namespace Org.BouncyCastle.OpenSsl.Tests
AsymmetricCipherKeyPair testDsaKp = dsaKpg.GenerateKeyPair();
AsymmetricKeyParameter testDsaKey = testDsaKp.Private;
- doWriteReadTest(testDsaKey);
- doWriteReadTests(testDsaKey, algorithms);
+ DoWriteReadTest(testDsaKey);
+ DoWriteReadTests(testDsaKey, algorithms);
- doWriteReadTest(testRsaKey);
- doWriteReadTests(testRsaKey, algorithms);
+ DoWriteReadTest(testRsaKey);
+ DoWriteReadTests(testRsaKey, algorithms);
AsymmetricKeyParameter ecPriv = PrivateKeyFactory.CreateKey(testEcDsaKeyBytes);
- doWriteReadTest(ecPriv);
- doWriteReadTests(ecPriv, algorithms);
+ DoWriteReadTest(ecPriv);
+ DoWriteReadTests(ecPriv, algorithms);
IAsymmetricCipherKeyPairGenerator ecKpg = GeneratorUtilities.GetKeyPairGenerator("ECDSA");
ecKpg.Init(new KeyGenerationParameters(random, 239));
ecPriv = ecKpg.GenerateKeyPair().Private;
- doWriteReadTest(ecPriv);
- doWriteReadTests(ecPriv, algorithms);
+ DoWriteReadTest(ecPriv);
+ DoWriteReadTests(ecPriv, algorithms);
// override test
PemWriter pWrt = new PemWriter(new StringWriter());
@@ -115,17 +115,17 @@ namespace Org.BouncyCastle.OpenSsl.Tests
pWrt.Writer.Close();
}
- private void doWriteReadTests(
+ private void DoWriteReadTests(
AsymmetricKeyParameter akp,
string[] algorithms)
{
foreach (string algorithm in algorithms)
{
- doWriteReadTest(akp, algorithm);
+ DoWriteReadTest(akp, algorithm);
}
}
- private void doWriteReadTest(
+ private void DoWriteReadTest(
AsymmetricKeyParameter akp)
{
StringWriter sw = new StringWriter();
@@ -146,7 +146,7 @@ namespace Org.BouncyCastle.OpenSsl.Tests
}
}
- private void doWriteReadTest(
+ private void DoWriteReadTest(
AsymmetricKeyParameter akp,
string algorithm)
{
|