diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2020-02-19 21:03:22 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2020-02-19 21:03:22 +0700 |
commit | ad0b6c99d34da50d5473a9c14837a9ce199d0200 (patch) | |
tree | fbe5e81540f15b7a3cca0401380d33bd9fbb9cc6 /crypto/src/asn1/BerOctetString.cs | |
parent | Case-insensitive check of boolean env. var. (diff) | |
download | BouncyCastle.NET-ed25519-ad0b6c99d34da50d5473a9c14837a9ce199d0200.tar.xz |
ASN.1 updates from bc-java
Diffstat (limited to 'crypto/src/asn1/BerOctetString.cs')
-rw-r--r-- | crypto/src/asn1/BerOctetString.cs | 103 |
1 files changed, 57 insertions, 46 deletions
diff --git a/crypto/src/asn1/BerOctetString.cs b/crypto/src/asn1/BerOctetString.cs index a7c8ad33e..fb4291612 100644 --- a/crypto/src/asn1/BerOctetString.cs +++ b/crypto/src/asn1/BerOctetString.cs @@ -9,66 +9,77 @@ namespace Org.BouncyCastle.Asn1 public class BerOctetString : DerOctetString, IEnumerable { - public static BerOctetString FromSequence(Asn1Sequence seq) - { - IList v = Platform.CreateArrayList(); - - foreach (Asn1Encodable obj in seq) - { - v.Add(obj); - } - - return new BerOctetString(v); - } + private static readonly int DefaultChunkSize = 1000; - private const int MaxLength = 1000; + public static BerOctetString FromSequence(Asn1Sequence seq) + { + int count = seq.Count; + Asn1OctetString[] v = new Asn1OctetString[count]; + for (int i = 0; i < count; ++i) + { + v[i] = Asn1OctetString.GetInstance(seq[i]); + } + return new BerOctetString(v); + } - /** - * convert a vector of octet strings into a single byte string - */ - private static byte[] ToBytes( - IEnumerable octs) + private static byte[] ToBytes(Asn1OctetString[] octs) { MemoryStream bOut = new MemoryStream(); - foreach (DerOctetString o in octs) - { + foreach (Asn1OctetString o in octs) + { byte[] octets = o.GetOctets(); bOut.Write(octets, 0, octets.Length); } - return bOut.ToArray(); + return bOut.ToArray(); + } + + private static Asn1OctetString[] ToOctetStringArray(IEnumerable e) + { + IList list = Platform.CreateArrayList(e); + + int count = list.Count; + Asn1OctetString[] v = new Asn1OctetString[count]; + for (int i = 0; i < count; ++i) + { + v[i] = Asn1OctetString.GetInstance(list[i]); + } + return v; } - private readonly IEnumerable octs; + private readonly int chunkSize; + private readonly Asn1OctetString[] octs; + + [Obsolete("Will be removed")] + public BerOctetString(IEnumerable e) + : this(ToOctetStringArray(e)) + { + } - /// <param name="str">The octets making up the octet string.</param> - public BerOctetString( - byte[] str) - : base(str) + public BerOctetString(byte[] str) + : this(str, DefaultChunkSize) { } - public BerOctetString( - IEnumerable octets) - : base(ToBytes(octets)) + public BerOctetString(Asn1OctetString[] octs) + : this(octs, DefaultChunkSize) { - this.octs = octets; } - public BerOctetString( - Asn1Object obj) - : base(obj) + public BerOctetString(byte[] str, int chunkSize) + : this(str, null, chunkSize) { } - public BerOctetString( - Asn1Encodable obj) - : base(obj.ToAsn1Object()) + public BerOctetString(Asn1OctetString[] octs, int chunkSize) + : this(ToBytes(octs), octs, chunkSize) { } - public override byte[] GetOctets() + private BerOctetString(byte[] str, Asn1OctetString[] octs, int chunkSize) + : base(str) { - return str; + this.octs = octs; + this.chunkSize = chunkSize; } /** @@ -93,17 +104,17 @@ namespace Org.BouncyCastle.Asn1 private IList GenerateOcts() { IList vec = Platform.CreateArrayList(); - for (int i = 0; i < str.Length; i += MaxLength) - { - int end = System.Math.Min(str.Length, i + MaxLength); + for (int i = 0; i < str.Length; i += chunkSize) + { + int end = System.Math.Min(str.Length, i + chunkSize); - byte[] nStr = new byte[end - i]; + byte[] nStr = new byte[end - i]; - Array.Copy(str, i, nStr, 0, nStr.Length); + Array.Copy(str, i, nStr, 0, nStr.Length); - vec.Add(new DerOctetString(nStr)); - } - return vec; + vec.Add(new DerOctetString(nStr)); + } + return vec; } internal override void Encode( @@ -118,7 +129,7 @@ namespace Org.BouncyCastle.Asn1 // // write out the octet array // - foreach (DerOctetString oct in this) + foreach (Asn1OctetString oct in this) { derOut.WriteObject(oct); } |