internal override void Encode( DerOutputStream derOut) { if (!IsEmpty()) { byte[] bytes = obj.GetDerEncoded(); if (explicitly) { derOut.WriteEncoded(Asn1Tags.Constructed | Asn1Tags.Tagged, tagNo, bytes); } else { // // need to mark constructed types... (preserve Constructed tag) // int flags = (bytes[0] & Asn1Tags.Constructed) | Asn1Tags.Tagged; derOut.WriteTag(flags, tagNo); derOut.Write(bytes, 1, bytes.Length - 1); } } else { derOut.WriteEncoded(Asn1Tags.Constructed | Asn1Tags.Tagged, tagNo, new byte[0]); } }
internal override void Encode(DerOutputStream derOut) { if (derOut is Asn1OutputStream || derOut is BerOutputStream) { derOut.WriteTag(160, tagNo); derOut.WriteByte(128); if (!IsEmpty()) { if (!explicitly) { IEnumerable enumerable; if (base.obj is Asn1OctetString) { if (base.obj is BerOctetString) { enumerable = (BerOctetString)base.obj; } else { Asn1OctetString asn1OctetString = (Asn1OctetString)base.obj; enumerable = new BerOctetString(asn1OctetString.GetOctets()); } } else if (base.obj is Asn1Sequence) { enumerable = (Asn1Sequence)base.obj; } else { if (!(base.obj is Asn1Set)) { throw Platform.CreateNotImplementedException(Platform.GetTypeName(base.obj)); } enumerable = (Asn1Set)base.obj; } foreach (Asn1Encodable item in enumerable) { derOut.WriteObject(item); } } else { derOut.WriteObject(obj); } } derOut.WriteByte(0); derOut.WriteByte(0); } else { base.Encode(derOut); } }
internal override void Encode(DerOutputStream derOut) { if (!IsEmpty()) { byte[] derEncoded = obj.GetDerEncoded(); if (explicitly) { derOut.WriteEncoded(160, tagNo, derEncoded); return; } int flags = (derEncoded[0] & 0x20) | 0x80; derOut.WriteTag(flags, tagNo); derOut.Write(derEncoded, 1, derEncoded.Length - 1); } else { derOut.WriteEncoded(160, tagNo, new byte[0]); } }