internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); Salt.Encode(writer); writer.WriteInteger(IterationCount); if (KeyLength.HasValue) { writer.WriteInteger(KeyLength.Value); } // DEFAULT value handler for Prf. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { Prf.Encode(tmp); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultPrf)) { writer.WriteEncodedValue(encoded.ToArray()); } } } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.WriteInteger(Version); writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); Originator.Encode(writer); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); if (Ukm.HasValue) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.WriteOctetString(Ukm.Value.Span); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); } KeyEncryptionAlgorithm.Encode(writer); writer.PushSequence(); for (int i = 0; i < RecipientEncryptedKeys.Length; i++) { RecipientEncryptedKeys[i].Encode(writer); } writer.PopSequence(); 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.WriteEncodedValue(encoded.ToArray()); } } } writer.WriteOctetString(Hash.Span); if (IssuerSerial.HasValue) { IssuerSerial.Value.Encode(writer); } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); EncryptionAlgorithm.Encode(writer); writer.WriteOctetString(EncryptedData.Span); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); DigestAlgorithm.Encode(writer); writer.WriteOctetString(Digest.Span); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); Algorithm.Encode(writer); writer.WriteBitString(SubjectPublicKey.Span); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); KeyDerivationFunc.Encode(writer); EncryptionScheme.Encode(writer); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); HashAlgorithm.Encode(writer); writer.WriteOctetString(HashedMessage.Span); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); TbsCertificate.Encode(writer); SignatureAlgorithm.Encode(writer); writer.WriteBitString(SignatureValue.Span); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); // DEFAULT value handler for HashFunc. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { HashFunc.Encode(tmp); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultHashFunc)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); writer.WriteEncodedValue(encoded); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); } } } // DEFAULT value handler for MaskGenFunc. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { MaskGenFunc.Encode(tmp); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultMaskGenFunc)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); writer.WriteEncodedValue(encoded); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 1)); } } } // DEFAULT value handler for PSourceFunc. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { PSourceFunc.Encode(tmp); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultPSourceFunc)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); writer.WriteEncodedValue(encoded); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 2)); } } } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.WriteInteger(Version); Rid.Encode(writer); KeyEncryptionAlgorithm.Encode(writer); writer.WriteOctetString(EncryptedKey.Span); writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); writer.WriteObjectIdentifier(ContentType); ContentEncryptionAlgorithm.Encode(writer); if (EncryptedContent.HasValue) { writer.WriteOctetString(new Asn1Tag(TagClass.ContextSpecific, 0), EncryptedContent.Value.Span); } 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); Sid.Encode(writer); DigestAlgorithm.Encode(writer); if (SignedAttributes.HasValue) { // Validator for tag constraint for SignedAttributes { if (!Asn1Tag.TryDecode(SignedAttributes.Value.Span, out Asn1Tag validateTag, out _) || !validateTag.HasSameClassAndValue(new Asn1Tag(TagClass.ContextSpecific, 0))) { throw new CryptographicException(); } } writer.WriteEncodedValue(SignedAttributes.Value.Span); } SignatureAlgorithm.Encode(writer); writer.WriteOctetString(SignatureValue.Span); if (UnsignedAttributes != null) { writer.PushSetOf(new Asn1Tag(TagClass.ContextSpecific, 1)); for (int i = 0; i < UnsignedAttributes.Length; i++) { UnsignedAttributes[i].Encode(writer); } writer.PopSetOf(new Asn1Tag(TagClass.ContextSpecific, 1)); } writer.PopSequence(tag); }
internal void Encode(AsnWriter writer, Asn1Tag tag) { writer.PushSequence(tag); // DEFAULT value handler for Version. { using (AsnWriter tmp = new AsnWriter(AsnEncodingRules.DER)) { tmp.WriteInteger(Version); ReadOnlySpan <byte> encoded = tmp.EncodeAsSpan(); if (!encoded.SequenceEqual(s_defaultVersion)) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); writer.WriteEncodedValue(encoded.ToArray()); writer.PopSequence(new Asn1Tag(TagClass.ContextSpecific, 0)); } } } writer.WriteInteger(SerialNumber.Span); SignatureAlgorithm.Encode(writer); // Validator for tag constraint for Issuer { if (!Asn1Tag.TryDecode(Issuer.Span, out Asn1Tag validateTag, out _) || !validateTag.HasSameClassAndValue(new Asn1Tag((UniversalTagNumber)16))) { throw new CryptographicException(); } } writer.WriteEncodedValue(Issuer.Span); Validity.Encode(writer); // Validator for tag constraint for Subject { if (!Asn1Tag.TryDecode(Subject.Span, out Asn1Tag validateTag, out _) || !validateTag.HasSameClassAndValue(new Asn1Tag((UniversalTagNumber)16))) { throw new CryptographicException(); } } writer.WriteEncodedValue(Subject.Span); SubjectPublicKeyInfo.Encode(writer); if (IssuerUniqueId.HasValue) { writer.WriteBitString(new Asn1Tag(TagClass.ContextSpecific, 1), IssuerUniqueId.Value.Span); } if (SubjectUniqueId.HasValue) { writer.WriteBitString(new Asn1Tag(TagClass.ContextSpecific, 2), SubjectUniqueId.Value.Span); } if (Extensions != null) { writer.PushSequence(new Asn1Tag(TagClass.ContextSpecific, 3)); writer.PushSequence(); for (int i = 0; i < Extensions.Length; i++) { Extensions[i].Encode(writer); } writer.PopSequence(); 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. { 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); }