Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ECDsaX509SignatureGenerator.cs
Go to the documentation of this file.
3
5
7{
8 private readonly ECDsa _key;
9
11 {
12 _key = key;
13 }
14
15 public override byte[] GetSignatureAlgorithmIdentifier(HashAlgorithmName hashAlgorithm)
16 {
17 string oidValue;
18 if (hashAlgorithm == HashAlgorithmName.SHA256)
19 {
20 oidValue = "1.2.840.10045.4.3.2";
21 }
22 else if (hashAlgorithm == HashAlgorithmName.SHA384)
23 {
24 oidValue = "1.2.840.10045.4.3.3";
25 }
26 else
27 {
28 if (!(hashAlgorithm == HashAlgorithmName.SHA512))
29 {
30 throw new ArgumentOutOfRangeException("hashAlgorithm", hashAlgorithm, System.SR.Format(System.SR.Cryptography_UnknownHashAlgorithm, hashAlgorithm.Name));
31 }
32 oidValue = "1.2.840.10045.4.3.4";
33 }
34 AsnWriter asnWriter = new AsnWriter(AsnEncodingRules.DER);
35 asnWriter.PushSequence();
36 asnWriter.WriteObjectIdentifier(oidValue);
37 asnWriter.PopSequence();
38 return asnWriter.Encode();
39 }
40
41 public override byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm)
42 {
43 byte[] array = _key.SignData(data, hashAlgorithm);
45 }
46
47 protected override PublicKey BuildPublicKey()
48 {
49 ECParameters eCParameters = _key.ExportParameters(includePrivateParameters: false);
50 if (!eCParameters.Curve.IsNamed)
51 {
53 }
54 string text = eCParameters.Curve.Oid.Value;
55 if (string.IsNullOrEmpty(text))
56 {
57 string friendlyName = eCParameters.Curve.Oid.FriendlyName;
58 text = friendlyName switch
59 {
60 "nistP256" => "1.2.840.10045.3.1.7",
61 "nistP384" => "1.3.132.0.34",
62 "nistP521" => "1.3.132.0.35",
63 _ => new Oid(friendlyName).Value,
64 };
65 }
66 AsnWriter asnWriter = new AsnWriter(AsnEncodingRules.DER);
67 asnWriter.WriteObjectIdentifier(text);
68 byte[] rawData = asnWriter.Encode();
69 byte[] array = new byte[1 + eCParameters.Q.X.Length + eCParameters.Q.Y.Length];
70 array[0] = 4;
71 Buffer.BlockCopy(eCParameters.Q.X, 0, array, 1, eCParameters.Q.X.Length);
72 Buffer.BlockCopy(eCParameters.Q.Y, 0, array, 1 + eCParameters.Q.X.Length, eCParameters.Q.Y.Length);
74 return new PublicKey(ecPublicKeyOid, new AsnEncodedData(ecPublicKeyOid, rawData), new AsnEncodedData(ecPublicKeyOid, array));
75 }
76}
static byte[] ConvertIeee1363ToDer(ReadOnlySpan< byte > input)
static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)
Definition Buffer.cs:102
void WriteObjectIdentifier(string oidValue, Asn1Tag? tag=null)
Definition AsnWriter.cs:954
Scope PushSequence(Asn1Tag? tag=null)
int Encode(Span< byte > destination)
Definition AsnWriter.cs:195
void PopSequence(Asn1Tag? tag=null)
static string Cryptography_UnknownHashAlgorithm
Definition SR.cs:152
static string Cryptography_ECC_NamedCurvesOnly
Definition SR.cs:56
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
virtual byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm)
Definition ECDsa.cs:49
virtual ECParameters ExportParameters(bool includePrivateParameters)
Definition ECDsa.cs:29
override byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm)