Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CurveAsn.cs
Go to the documentation of this file.
2
4
5internal struct CurveAsn
6{
7 internal ReadOnlyMemory<byte> A;
8
9 internal ReadOnlyMemory<byte> B;
10
11 internal ReadOnlyMemory<byte>? Seed;
12
13 internal void Encode(AsnWriter writer)
14 {
16 }
17
18 internal void Encode(AsnWriter writer, Asn1Tag tag)
19 {
20 writer.PushSequence(tag);
21 writer.WriteOctetString(A.Span);
22 writer.WriteOctetString(B.Span);
23 if (Seed.HasValue)
24 {
25 writer.WriteBitString(Seed.Value.Span);
26 }
27 writer.PopSequence(tag);
28 }
29
31 {
32 Decode(ref reader, Asn1Tag.Sequence, rebind, out decoded);
33 }
34
35 internal static void Decode(ref System.Formats.Asn1.AsnValueReader reader, Asn1Tag expectedTag, ReadOnlyMemory<byte> rebind, out System.Security.Cryptography.Asn1.CurveAsn decoded)
36 {
37 try
38 {
39 DecodeCore(ref reader, expectedTag, rebind, out decoded);
40 }
41 catch (AsnContentException inner)
42 {
44 }
45 }
46
47 private static void DecodeCore(ref System.Formats.Asn1.AsnValueReader reader, Asn1Tag expectedTag, ReadOnlyMemory<byte> rebind, out System.Security.Cryptography.Asn1.CurveAsn decoded)
48 {
49 decoded = default(System.Security.Cryptography.Asn1.CurveAsn);
50 System.Formats.Asn1.AsnValueReader asnValueReader = reader.ReadSequence(expectedTag);
51 ReadOnlySpan<byte> span = rebind.Span;
52 int elementOffset;
53 if (asnValueReader.TryReadPrimitiveOctetString(out var value))
54 {
55 decoded.A = (span.Overlaps(value, out elementOffset) ? rebind.Slice(elementOffset, value.Length) : ((ReadOnlyMemory<byte>)value.ToArray()));
56 }
57 else
58 {
59 decoded.A = asnValueReader.ReadOctetString();
60 }
61 if (asnValueReader.TryReadPrimitiveOctetString(out value))
62 {
63 decoded.B = (span.Overlaps(value, out elementOffset) ? rebind.Slice(elementOffset, value.Length) : ((ReadOnlyMemory<byte>)value.ToArray()));
64 }
65 else
66 {
67 decoded.B = asnValueReader.ReadOctetString();
68 }
69 if (asnValueReader.HasData && asnValueReader.PeekTag().HasSameClassAndValue(Asn1Tag.PrimitiveBitString))
70 {
71 if (asnValueReader.TryReadPrimitiveBitString(out var unusedBitCount, out value))
72 {
73 decoded.Seed = (span.Overlaps(value, out elementOffset) ? rebind.Slice(elementOffset, value.Length) : ((ReadOnlyMemory<byte>)value.ToArray()));
74 }
75 else
76 {
77 decoded.Seed = asnValueReader.ReadBitString(out unusedBitCount);
78 }
79 }
80 asnValueReader.ThrowIfNotEmpty();
81 }
82}
static string Cryptography_Der_Invalid_Encoding
Definition SR.cs:50
Definition SR.cs:7
static readonly Asn1Tag Sequence
Definition Asn1Tag.cs:29
static readonly Asn1Tag PrimitiveBitString
Definition Asn1Tag.cs:15
bool HasSameClassAndValue(Asn1Tag other)
Definition Asn1Tag.cs:251
bool TryReadPrimitiveOctetString(out ReadOnlySpan< byte > value, Asn1Tag? expectedTag=null)
byte[] ReadOctetString(Asn1Tag? expectedTag=null)
byte[] ReadBitString(out int unusedBitCount, Asn1Tag? expectedTag=null)
bool TryReadPrimitiveBitString(out int unusedBitCount, out ReadOnlySpan< byte > value, Asn1Tag? expectedTag=null)
AsnValueReader ReadSequence(Asn1Tag? expectedTag=null)
unsafe ReadOnlySpan< T > Span
ReadOnlyMemory< T > Slice(int start)
static void Decode(ref System.Formats.Asn1.AsnValueReader reader, ReadOnlyMemory< byte > rebind, out System.Security.Cryptography.Asn1.CurveAsn decoded)
Definition CurveAsn.cs:30
static void DecodeCore(ref System.Formats.Asn1.AsnValueReader reader, Asn1Tag expectedTag, ReadOnlyMemory< byte > rebind, out System.Security.Cryptography.Asn1.CurveAsn decoded)
Definition CurveAsn.cs:47
static void Decode(ref System.Formats.Asn1.AsnValueReader reader, Asn1Tag expectedTag, ReadOnlyMemory< byte > rebind, out System.Security.Cryptography.Asn1.CurveAsn decoded)
Definition CurveAsn.cs:35
static void DecodeCore(ref AsnValueReader reader, Asn1Tag expectedTag, ReadOnlyMemory< byte > rebind, out CurveAsn decoded)
Definition CurveAsn.cs:47
static void Decode(ref AsnValueReader reader, ReadOnlyMemory< byte > rebind, out CurveAsn decoded)
Definition CurveAsn.cs:30
void Encode(AsnWriter writer, Asn1Tag tag)
Definition CurveAsn.cs:18