internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); Key?.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.PushSequence(); for (int i = 0; i < LastReq.Length; i++) { LastReq[i]?.Encode(writer); } writer.PopSequence(); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); writer.WriteInteger(Nonce); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); if (Asn1Extension.HasValue(KeyExpiration)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); writer.WriteGeneralizedTime(KeyExpiration.Value); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); } writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 4)); writer.WriteBitString(Flags.AsReadOnly()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 4)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 5)); writer.WriteGeneralizedTime(AuthTime); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 5)); if (Asn1Extension.HasValue(StartTime)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 6)); writer.WriteGeneralizedTime(StartTime.Value); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 6)); } writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 7)); writer.WriteGeneralizedTime(EndTime); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 7)); if (Asn1Extension.HasValue(RenewTill)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 8)); writer.WriteGeneralizedTime(RenewTill.Value); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 8)); } writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 9)); writer.WriteCharacterString(UniversalTagNumber.GeneralString, Realm); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 9)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 10)); SName?.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 10)); if (Asn1Extension.HasValue(CAddr)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 11)); writer.PushSequence(); for (int i = 0; i < CAddr.Length; i++) { CAddr[i]?.Encode(writer); } writer.PopSequence(); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 11)); } if (Asn1Extension.HasValue(EncryptedPaData)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 12)); EncryptedPaData?.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 12)); } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); writer.WriteBitString(Flags.AsReadOnly()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); Key?.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); writer.WriteCharacterString(UniversalTagNumber.GeneralString, CRealm); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); CName?.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 4)); Transited?.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 4)); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 5)); writer.WriteGeneralizedTime(AuthTime); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 5)); if (Asn1Extension.HasValue(StartTime)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 6)); writer.WriteGeneralizedTime(StartTime.Value); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 6)); } writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 7)); writer.WriteGeneralizedTime(EndTime); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 7)); if (Asn1Extension.HasValue(RenewTill)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 8)); writer.WriteGeneralizedTime(RenewTill.Value); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 8)); } if (Asn1Extension.HasValue(CAddr)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 9)); writer.PushSequence(); for (int i = 0; i < CAddr.Length; i++) { CAddr[i]?.Encode(writer); } writer.PopSequence(); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 9)); } if (Asn1Extension.HasValue(AuthorizationData)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 10)); writer.PushSequence(); for (int i = 0; i < AuthorizationData.Length; i++) { AuthorizationData[i]?.Encode(writer); } writer.PopSequence(); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 10)); } writer.PopSequence(tag); }