summary refs log tree commit diff
path: root/crypto/src
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src')
-rw-r--r--crypto/src/asn1/Asn1Encodable.cs8
-rw-r--r--crypto/src/cms/SignerInformation.cs29
2 files changed, 20 insertions, 17 deletions
diff --git a/crypto/src/asn1/Asn1Encodable.cs b/crypto/src/asn1/Asn1Encodable.cs
index c7fde6e07..6314bf76f 100644
--- a/crypto/src/asn1/Asn1Encodable.cs
+++ b/crypto/src/asn1/Asn1Encodable.cs
@@ -28,10 +28,12 @@ namespace Org.BouncyCastle.Asn1
 
 				if (this is Asn1Set)
 				{
-					(this as Asn1Set).Sort();
+					dOut.WriteObject(new DerSet((this as Asn1Set).elements));
+				}
+				else
+				{
+					dOut.WriteObject(this);
 				}
-
-				dOut.WriteObject(this);
 
 				return bOut.ToArray();
 			}
diff --git a/crypto/src/cms/SignerInformation.cs b/crypto/src/cms/SignerInformation.cs
index 58bb312b3..3ab1c09f9 100644
--- a/crypto/src/cms/SignerInformation.cs
+++ b/crypto/src/cms/SignerInformation.cs
@@ -27,8 +27,8 @@ namespace Org.BouncyCastle.Cms
 		private CmsProcessable		content;
 		private byte[]				signature;
 		private DerObjectIdentifier	contentType;
-		private IDigestCalculator	digestCalculator;
-		private byte[]				resultDigest;
+		private byte[]	calculatedDigest;
+		private byte[]	resultDigest;
 
 		// Derived
 		private Asn1.Cms.AttributeTable	signedAttributeTable;
@@ -80,10 +80,10 @@ namespace Org.BouncyCastle.Cms
 			this.signedAttributeSet = info.AuthenticatedAttributes;
 			this.unsignedAttributeSet = info.UnauthenticatedAttributes;
 			this.encryptionAlgorithm = info.DigestEncryptionAlgorithm;
-			this.signature = info.EncryptedDigest.GetOctets();
+			this.signature = (byte[])info.EncryptedDigest.GetOctets().Clone();
 
 			this.content = content;
-			this.digestCalculator = digestCalculator;
+			this.calculatedDigest = (digestCalculator != null) ? digestCalculator.GetDigest() : null;
 		}
 
         /**
@@ -96,16 +96,17 @@ namespace Org.BouncyCastle.Cms
         protected SignerInformation(SignerInformation baseInfo)
         {
             this.info = baseInfo.info;
-            this.contentType = baseInfo.contentType;
+			this.content = baseInfo.content;
+			this.contentType = baseInfo.contentType;
             this.isCounterSignature = baseInfo.IsCounterSignature;
-            this.sid = baseInfo.SignerID;
-            this.digestAlgorithm = info.DigestAlgorithm;
+			this.sid = baseInfo.sid;
+			this.digestAlgorithm = info.DigestAlgorithm;
             this.signedAttributeSet = info.AuthenticatedAttributes;
             this.unsignedAttributeSet = info.UnauthenticatedAttributes;
             this.encryptionAlgorithm = info.DigestEncryptionAlgorithm;
-            this.signature = info.EncryptedDigest.GetOctets();
-            this.content = baseInfo.content;
-            this.resultDigest = baseInfo.resultDigest;
+			this.signature = (byte[])info.EncryptedDigest.GetOctets().Clone();
+			
+			this.calculatedDigest = baseInfo.calculatedDigest;
             this.signedAttributeTable = baseInfo.signedAttributeTable;
             this.unsignedAttributeTable = baseInfo.unsignedAttributeTable;
         }
@@ -364,7 +365,7 @@ namespace Org.BouncyCastle.Cms
 
 					IAsymmetricBlockCipher rsa = new RsaBlindedEngine();
 
-					if (signedAttributeSet == null && digestCalculator != null)
+					if (signedAttributeSet == null && calculatedDigest != null)
 					{
                         sig = PssSigner.CreateRawSigner(rsa, pssDigest, pssDigest, saltLength, PssSigner.TrailerImplicit);
                     }
@@ -394,9 +395,9 @@ namespace Org.BouncyCastle.Cms
 
 			try
 			{
-				if (digestCalculator != null)
+				if (calculatedDigest != null)
 				{
-					resultDigest = digestCalculator.GetDigest();
+					resultDigest = calculatedDigest;
 				}
 				else
 				{
@@ -493,7 +494,7 @@ namespace Org.BouncyCastle.Cms
 
 				if (signedAttributeSet == null)
 				{
-					if (digestCalculator != null)
+					if (calculatedDigest != null)
 					{
 						if (sig is PssSigner)
 						{