// helpers private void WriteIdentifier(ASN1Class asn1Class, bool constructed, ASN1UniversalTag tag) { WriteIdentifier(asn1Class, constructed, (byte)tag); }
private ASN1Object ReadUniversal(bool constructed, ASN1UniversalTag tag) { if (tag == ASN1UniversalTag.LongForm) { throw new NotImplementedException(); } var length = ReadLength(); // ignoring: // * 8.5 Encoding of a real value if (!constructed) { switch (tag) { case ASN1UniversalTag.Boolean: return(ReadBoolean(length)); case ASN1UniversalTag.Integer: case ASN1UniversalTag.Enumerated: return(ReadInteger(length)); case ASN1UniversalTag.BitString: return(ReadPrimitiveBitString(length)); case ASN1UniversalTag.OctetString: return(ReadPrimitiveOctetString(length)); case ASN1UniversalTag.Null: return(new ASN1Null()); case ASN1UniversalTag.ObjectIdentifier: return(ReadObjectIdentifier(length)); case ASN1UniversalTag.PrintableString: return(ReadPrintableString(length)); case ASN1UniversalTag.UTF8String: return(ReadUTF8String(length)); case ASN1UniversalTag.UTCTime: return(ReadUTCTime(length)); } } else { switch (tag) { case ASN1UniversalTag.Sequence: return(ReadSequence(length)); case ASN1UniversalTag.Set: return(ReadSet(length)); case ASN1UniversalTag.UTCTime: return(ReadUTCTime(length)); } } throw new NotImplementedException(); }
private ASN1Object ReadUniversal(bool constructed, ASN1UniversalTag tag) { if (tag == ASN1UniversalTag.LongForm) { throw new NotImplementedException(); } var length = ReadLength(); // ignoring: // * 8.5 Encoding of a real value if (!constructed) { switch (tag) { case ASN1UniversalTag.Boolean: return ReadBoolean(length); case ASN1UniversalTag.Integer: case ASN1UniversalTag.Enumerated: return ReadInteger(length); case ASN1UniversalTag.BitString: return ReadPrimitiveBitString(length); case ASN1UniversalTag.OctetString: return ReadPrimitiveOctetString(length); case ASN1UniversalTag.Null: return new ASN1Null(); case ASN1UniversalTag.ObjectIdentifier: return ReadObjectIdentifier(length); case ASN1UniversalTag.UTF8String: return ReadUTF8String(length); case ASN1UniversalTag.UTCTime: return ReadUTCTime(length); } } else { switch (tag) { case ASN1UniversalTag.Sequence: return ReadSequence(length); case ASN1UniversalTag.Set: return ReadSet(length); case ASN1UniversalTag.UTCTime: return ReadUTCTime(length); } } throw new NotImplementedException(); }