internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.WriteInteger(Version); FieldID.Encode(writer); Curve.Encode(writer); writer.WriteOctetString(Base.Span); writer.WriteInteger(Order.Span); if (Cofactor.HasValue) { writer.WriteInteger(Cofactor.Value.Span); } if (Hash != null) { writer.WriteObjectIdentifier(Hash); } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.WriteInteger(Version); PrivateKeyAlgorithm.Encode(writer); writer.WriteOctetString(PrivateKey.Span); if (Attributes != null) { writer.PushSetOf(new Asn1Tag(TagClass.ContextSpecific, 0)); for (int i = 0; i < Attributes.Length; i++) { Attributes[i].Encode(writer); } writer.PopSetOf(new Asn1Tag(TagClass.ContextSpecific, 0)); } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.WriteInteger(Version); writer.WriteOctetString(PrivateKey.Span); if (Parameters.HasValue) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); Parameters.Value.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); } if (PublicKey.HasValue) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.WriteBitString(PublicKey.Value.Span); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); // DEFAULT value handler for HashAlgorithm. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { HashAlgorithm.Encode(tmp); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultHashAlgorithm)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); writer.WriteEncodedValue(encoded.ToArray()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); } } } // DEFAULT value handler for MaskGenAlgorithm. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { MaskGenAlgorithm.Encode(tmp); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultMaskGenAlgorithm)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.WriteEncodedValue(encoded.ToArray()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); } } } // DEFAULT value handler for SaltLength. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { tmp.WriteInteger(SaltLength); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultSaltLength)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); writer.WriteEncodedValue(encoded.ToArray()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); } } } // DEFAULT value handler for TrailerField. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { tmp.WriteInteger(TrailerField); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultTrailerField)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); writer.WriteEncodedValue(encoded.ToArray()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); } } } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); // DEFAULT value handler for HashAlgorithm. { AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER); HashAlgorithm.Encode(tmp); if (!tmp.EncodedValueEquals(DefaultHashAlgorithm)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); tmp.CopyTo(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); } } // DEFAULT value handler for MaskGenAlgorithm. { AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER); MaskGenAlgorithm.Encode(tmp); if (!tmp.EncodedValueEquals(DefaultMaskGenAlgorithm)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); tmp.CopyTo(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); } } // DEFAULT value handler for SaltLength. { AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER); tmp.WriteInteger(SaltLength); if (!tmp.EncodedValueEquals(DefaultSaltLength)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); tmp.CopyTo(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); } } // DEFAULT value handler for TrailerField. { AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER); tmp.WriteInteger(TrailerField); if (!tmp.EncodedValueEquals(DefaultTrailerField)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); tmp.CopyTo(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); } } writer.PopSequence(tag); }