Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ToKeyBlob() [1/2]

static byte[] Internal.NativeCrypto.CapiHelper.ToKeyBlob ( this DSAParameters dsaParameters)
inlinestaticpackage

Definition at line 44 of file CapiHelper.cs.

45 {
46 if (dsaParameters.P == null || dsaParameters.P.Length == 0 || dsaParameters.Q == null || dsaParameters.Q.Length != 20)
47 {
48 throw GetBadDataException();
49 }
50 if (dsaParameters.G == null || dsaParameters.G.Length != dsaParameters.P.Length)
51 {
52 throw GetBadDataException();
53 }
54 if (dsaParameters.J != null && dsaParameters.J.Length >= dsaParameters.P.Length)
55 {
56 throw GetBadDataException();
57 }
58 if (dsaParameters.Y != null && dsaParameters.Y.Length != dsaParameters.P.Length)
59 {
60 throw GetBadDataException();
61 }
62 if (dsaParameters.Seed != null && dsaParameters.Seed.Length != 20)
63 {
64 throw GetBadDataException();
65 }
66 bool flag = dsaParameters.X != null && dsaParameters.X.Length != 0;
67 if (flag && dsaParameters.X.Length != 20)
68 {
69 throw GetBadDataException();
70 }
71 uint value = (uint)(dsaParameters.P.Length * 8);
72 uint num = ((dsaParameters.J != null) ? ((uint)(dsaParameters.J.Length * 8)) : 0u);
73 using MemoryStream memoryStream = new MemoryStream();
74 using BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
75 WriteKeyBlobHeader(dsaParameters, binaryWriter, flag, out var isV);
76 if (isV)
77 {
78 binaryWriter.Write(flag ? 877876036 : 861098820);
79 binaryWriter.Write(value);
80 binaryWriter.Write((uint)(dsaParameters.Q.Length * 8));
81 binaryWriter.Write(num);
82 if (flag)
83 {
84 binaryWriter.Write((uint)(dsaParameters.X.Length * 8));
85 }
86 WriteDSSSeed(dsaParameters, binaryWriter);
87 binaryWriter.WriteReversed(dsaParameters.P);
88 binaryWriter.WriteReversed(dsaParameters.Q);
89 binaryWriter.WriteReversed(dsaParameters.G);
90 if (num != 0)
91 {
92 binaryWriter.WriteReversed(dsaParameters.J);
93 }
94 binaryWriter.WriteReversed(dsaParameters.Y);
95 if (flag)
96 {
97 binaryWriter.WriteReversed(dsaParameters.X);
98 }
99 }
100 else
101 {
102 binaryWriter.Write(flag ? 844321604 : 827544388);
103 binaryWriter.Write(value);
104 binaryWriter.WriteReversed(dsaParameters.P);
105 binaryWriter.WriteReversed(dsaParameters.Q);
106 binaryWriter.WriteReversed(dsaParameters.G);
107 if (flag)
108 {
109 binaryWriter.WriteReversed(dsaParameters.X);
110 }
111 else
112 {
113 binaryWriter.WriteReversed(dsaParameters.Y);
114 }
115 WriteDSSSeed(dsaParameters, binaryWriter);
116 }
117 binaryWriter.Flush();
118 return memoryStream.ToArray();
119 }
static void WriteKeyBlobHeader(DSAParameters dsaParameters, BinaryWriter bw, bool isPrivate, out bool isV3)
static CryptographicException GetBadDataException()
static void WriteDSSSeed(DSAParameters dsaParameters, BinaryWriter bw)

References System.Security.Cryptography.DSAParameters.G, Internal.NativeCrypto.CapiHelper.GetBadDataException(), System.Security.Cryptography.DSAParameters.J, System.Security.Cryptography.DSAParameters.P, System.Security.Cryptography.DSAParameters.Q, System.Security.Cryptography.DSAParameters.Seed, System.value, Internal.NativeCrypto.CapiHelper.WriteDSSSeed(), Internal.NativeCrypto.CapiHelper.WriteKeyBlobHeader(), System.Security.Cryptography.DSAParameters.X, and System.Security.Cryptography.DSAParameters.Y.