diff options
Diffstat (limited to 'crypto/src')
-rw-r--r-- | crypto/src/asn1/Asn1Encodable.cs | 41 | ||||
-rw-r--r-- | crypto/src/asn1/Asn1Object.cs | 26 | ||||
-rw-r--r-- | crypto/src/asn1/Asn1Set.cs | 2 | ||||
-rw-r--r-- | crypto/src/asn1/BERGenerator.cs | 10 | ||||
-rw-r--r-- | crypto/src/asn1/DERSequenceGenerator.cs | 10 | ||||
-rw-r--r-- | crypto/src/asn1/DERSetGenerator.cs | 10 | ||||
-rw-r--r-- | crypto/src/asn1/DerOctetString.cs | 2 | ||||
-rw-r--r-- | crypto/src/asn1/DerSequence.cs | 2 | ||||
-rw-r--r-- | crypto/src/cms/CMSSignedDataGenerator.cs | 2 |
9 files changed, 56 insertions, 49 deletions
diff --git a/crypto/src/asn1/Asn1Encodable.cs b/crypto/src/asn1/Asn1Encodable.cs index f3c0f725f..247b0e0bf 100644 --- a/crypto/src/asn1/Asn1Encodable.cs +++ b/crypto/src/asn1/Asn1Encodable.cs @@ -8,41 +8,28 @@ namespace Org.BouncyCastle.Asn1 public const string Der = "DER"; public const string Ber = "BER"; - public byte[] GetEncoded() + public virtual void EncodeTo(Stream output) { - MemoryStream bOut = new MemoryStream(); - Asn1OutputStream aOut = Asn1OutputStream.Create(bOut); + ToAsn1Object().EncodeTo(output); + } - ToAsn1Object().Encode(aOut); + public virtual void EncodeTo(Stream output, string encoding) + { + ToAsn1Object().EncodeTo(output, encoding); + } + public byte[] GetEncoded() + { + MemoryStream bOut = new MemoryStream(); + EncodeTo(bOut); return bOut.ToArray(); } public byte[] GetEncoded(string encoding) { - if (encoding.Equals(Der)) - { - MemoryStream bOut = new MemoryStream(); - Asn1OutputStream dOut = Asn1OutputStream.Create(bOut, Der); - - Asn1Object asn1Object = ToAsn1Object(); - - Asn1Set asn1Set = asn1Object as Asn1Set; - if (null != asn1Set) - { - /* - * NOTE: Even a DerSet isn't necessarily already in sorted order (particularly from DerSetParser), - * so all sets have to be converted here. - */ - asn1Object = new DerSet(asn1Set.elements); - } - - asn1Object.Encode(dOut); - - return bOut.ToArray(); - } - - return GetEncoded(); + MemoryStream bOut = new MemoryStream(); + EncodeTo(bOut, encoding); + return bOut.ToArray(); } /** diff --git a/crypto/src/asn1/Asn1Object.cs b/crypto/src/asn1/Asn1Object.cs index d98f52b06..1abf0e0bd 100644 --- a/crypto/src/asn1/Asn1Object.cs +++ b/crypto/src/asn1/Asn1Object.cs @@ -6,6 +6,32 @@ namespace Org.BouncyCastle.Asn1 public abstract class Asn1Object : Asn1Encodable { + public override void EncodeTo(Stream output) + { + Asn1OutputStream.Create(output).WriteObject(this); + } + + public override void EncodeTo(Stream output, string encoding) + { + Asn1OutputStream asn1Out = Asn1OutputStream.Create(output, encoding); + Asn1Object asn1Object = this; + + if (Der.Equals(encoding)) + { + Asn1Set asn1Set = asn1Object as Asn1Set; + if (null != asn1Set) + { + /* + * NOTE: Even a DerSet isn't necessarily already in sorted order (particularly from DerSetParser), + * so all sets have to be converted here. + */ + asn1Object = new DerSet(asn1Set.elements); + } + } + + asn1Out.WriteObject(asn1Object); + } + /// <summary>Create a base ASN.1 object from a byte array.</summary> /// <param name="data">The byte array to parse.</param> /// <returns>The base ASN.1 object represented by the byte array.</returns> diff --git a/crypto/src/asn1/Asn1Set.cs b/crypto/src/asn1/Asn1Set.cs index 68ede2275..8c6e2f0e4 100644 --- a/crypto/src/asn1/Asn1Set.cs +++ b/crypto/src/asn1/Asn1Set.cs @@ -279,7 +279,7 @@ namespace Org.BouncyCastle.Asn1 byte[][] keys = new byte[count][]; for (int i = 0; i < count; ++i) { - keys[i] = elements[i].GetEncoded(Asn1Encodable.Der); + keys[i] = elements[i].GetEncoded(Der); } Array.Sort(keys, elements, new DerComparer()); #endif diff --git a/crypto/src/asn1/BERGenerator.cs b/crypto/src/asn1/BERGenerator.cs index f5465b756..0b9c43b13 100644 --- a/crypto/src/asn1/BERGenerator.cs +++ b/crypto/src/asn1/BERGenerator.cs @@ -28,16 +28,14 @@ namespace Org.BouncyCastle.Asn1 _tagNo = tagNo; } - public override void AddObject( - Asn1Encodable obj) + public override void AddObject(Asn1Encodable obj) { - new Asn1OutputStream(Out).WriteObject(obj); + obj.EncodeTo(Out); } - public override void AddObject( - Asn1Object obj) + public override void AddObject(Asn1Object obj) { - new Asn1OutputStream(Out).WriteObject(obj); + obj.EncodeTo(Out); } public override Stream GetRawOutputStream() diff --git a/crypto/src/asn1/DERSequenceGenerator.cs b/crypto/src/asn1/DERSequenceGenerator.cs index d5c8a7a64..12c978508 100644 --- a/crypto/src/asn1/DERSequenceGenerator.cs +++ b/crypto/src/asn1/DERSequenceGenerator.cs @@ -21,16 +21,14 @@ namespace Org.BouncyCastle.Asn1 { } - public override void AddObject( - Asn1Encodable obj) + public override void AddObject(Asn1Encodable obj) { - Asn1OutputStream.Create(_bOut, Asn1Encodable.Der).WriteObject(obj); + obj.EncodeTo(_bOut, Asn1Encodable.Der); } - public override void AddObject( - Asn1Object obj) + public override void AddObject(Asn1Object obj) { - Asn1OutputStream.Create(_bOut, Asn1Encodable.Der).WriteObject(obj); + obj.EncodeTo(_bOut, Asn1Encodable.Der); } public override Stream GetRawOutputStream() diff --git a/crypto/src/asn1/DERSetGenerator.cs b/crypto/src/asn1/DERSetGenerator.cs index 6b4d03eec..677241798 100644 --- a/crypto/src/asn1/DERSetGenerator.cs +++ b/crypto/src/asn1/DERSetGenerator.cs @@ -21,16 +21,14 @@ namespace Org.BouncyCastle.Asn1 { } - public override void AddObject( - Asn1Encodable obj) + public override void AddObject(Asn1Encodable obj) { - Asn1OutputStream.Create(_bOut, Asn1Encodable.Der).WriteObject(obj); + obj.EncodeTo(_bOut, Asn1Encodable.Der); } - public override void AddObject( - Asn1Object obj) + public override void AddObject(Asn1Object obj) { - Asn1OutputStream.Create(_bOut, Asn1Encodable.Der).WriteObject(obj); + obj.EncodeTo(_bOut, Asn1Encodable.Der); } public override Stream GetRawOutputStream() diff --git a/crypto/src/asn1/DerOctetString.cs b/crypto/src/asn1/DerOctetString.cs index b9659bf84..4dc5bff2c 100644 --- a/crypto/src/asn1/DerOctetString.cs +++ b/crypto/src/asn1/DerOctetString.cs @@ -18,7 +18,7 @@ namespace Org.BouncyCastle.Asn1 } public DerOctetString(Asn1Encodable obj) - : base(obj.GetEncoded(Asn1Encodable.Der)) + : base(obj.GetEncoded(Der)) { } diff --git a/crypto/src/asn1/DerSequence.cs b/crypto/src/asn1/DerSequence.cs index 651350d91..9b4504cfe 100644 --- a/crypto/src/asn1/DerSequence.cs +++ b/crypto/src/asn1/DerSequence.cs @@ -63,7 +63,7 @@ namespace Org.BouncyCastle.Asn1 // TODO Intermediate buffer could be avoided if we could calculate expected length MemoryStream bOut = new MemoryStream(); - Asn1OutputStream dOut = Asn1OutputStream.Create(bOut, Asn1Encodable.Der); + Asn1OutputStream dOut = Asn1OutputStream.Create(bOut, Der); foreach (Asn1Encodable obj in this) { diff --git a/crypto/src/cms/CMSSignedDataGenerator.cs b/crypto/src/cms/CMSSignedDataGenerator.cs index beabab911..f2d54baa6 100644 --- a/crypto/src/cms/CMSSignedDataGenerator.cs +++ b/crypto/src/cms/CMSSignedDataGenerator.cs @@ -166,7 +166,7 @@ namespace Org.BouncyCastle.Cms signedAttr = outer.GetAttributeSet(signed); // sig must be composed from the DER encoding. - Asn1OutputStream.Create(sigStr, Asn1Encodable.Der).WriteObject(signedAttr); + signedAttr.EncodeTo(sigStr, Asn1Encodable.Der); } else if (content != null) { |