Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TripleDESCng.cs
Go to the documentation of this file.
3
5
7{
9
10 public override byte[] Key
11 {
12 get
13 {
15 }
16 set
17 {
19 }
20 }
21
22 public override int KeySize
23 {
24 get
25 {
26 return base.KeySize;
27 }
28 set
29 {
30 _core.SetKeySize(value, this);
31 }
32 }
33
34 byte[] ICngSymmetricAlgorithm.BaseKey
35 {
36 get
37 {
38 return base.Key;
39 }
40 set
41 {
42 base.Key = value;
43 }
44 }
45
46 int ICngSymmetricAlgorithm.BaseKeySize
47 {
48 get
49 {
50 return base.KeySize;
51 }
52 set
53 {
54 base.KeySize = value;
55 }
56 }
57
58 public TripleDESCng()
59 {
61 }
62
63 public TripleDESCng(string keyName)
64 : this(keyName, CngProvider.MicrosoftSoftwareKeyStorageProvider)
65 {
66 }
67
68 public TripleDESCng(string keyName, CngProvider provider)
69 : this(keyName, provider, CngKeyOpenOptions.None)
70 {
71 }
72
73 public TripleDESCng(string keyName, CngProvider provider, CngKeyOpenOptions openOptions)
74 {
75 _core = new CngSymmetricAlgorithmCore(this, keyName, provider, openOptions);
76 }
77
79 {
80 return _core.CreateDecryptor();
81 }
82
83 public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[]? rgbIV)
84 {
85 return _core.CreateDecryptor(rgbKey, rgbIV);
86 }
87
89 {
90 return _core.CreateEncryptor();
91 }
92
93 public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[]? rgbIV)
94 {
95 return _core.CreateEncryptor(rgbKey, rgbIV);
96 }
97
98 public override void GenerateKey()
99 {
101 }
102
103 public override void GenerateIV()
104 {
106 }
107
108 protected override bool TryDecryptEcbCore(ReadOnlySpan<byte> ciphertext, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
109 {
110 Internal.Cryptography.UniversalCryptoTransform universalCryptoTransform = _core.CreateCryptoTransform(null, encrypting: false, paddingMode, CipherMode.ECB, 0);
111 using (universalCryptoTransform)
112 {
113 return universalCryptoTransform.TransformOneShot(ciphertext, destination, out bytesWritten);
114 }
115 }
116
117 protected override bool TryEncryptEcbCore(ReadOnlySpan<byte> plaintext, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
118 {
119 Internal.Cryptography.UniversalCryptoTransform universalCryptoTransform = _core.CreateCryptoTransform(null, encrypting: true, paddingMode, CipherMode.ECB, 0);
120 using (universalCryptoTransform)
121 {
122 return universalCryptoTransform.TransformOneShot(plaintext, destination, out bytesWritten);
123 }
124 }
125
126 protected override bool TryEncryptCbcCore(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
127 {
128 Internal.Cryptography.UniversalCryptoTransform universalCryptoTransform = _core.CreateCryptoTransform(iv.ToArray(), encrypting: true, paddingMode, CipherMode.CBC, 0);
129 using (universalCryptoTransform)
130 {
131 return universalCryptoTransform.TransformOneShot(plaintext, destination, out bytesWritten);
132 }
133 }
134
135 protected override bool TryDecryptCbcCore(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, out int bytesWritten)
136 {
137 Internal.Cryptography.UniversalCryptoTransform universalCryptoTransform = _core.CreateCryptoTransform(iv.ToArray(), encrypting: false, paddingMode, CipherMode.CBC, 0);
138 using (universalCryptoTransform)
139 {
140 return universalCryptoTransform.TransformOneShot(ciphertext, destination, out bytesWritten);
141 }
142 }
143
144 protected override bool TryDecryptCfbCore(ReadOnlySpan<byte> ciphertext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
145 {
146 Internal.Cryptography.UniversalCryptoTransform universalCryptoTransform = _core.CreateCryptoTransform(iv.ToArray(), encrypting: false, paddingMode, CipherMode.CFB, feedbackSizeInBits);
147 using (universalCryptoTransform)
148 {
149 return universalCryptoTransform.TransformOneShot(ciphertext, destination, out bytesWritten);
150 }
151 }
152
153 protected override bool TryEncryptCfbCore(ReadOnlySpan<byte> plaintext, ReadOnlySpan<byte> iv, Span<byte> destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
154 {
155 Internal.Cryptography.UniversalCryptoTransform universalCryptoTransform = _core.CreateCryptoTransform(iv.ToArray(), encrypting: true, paddingMode, CipherMode.CFB, feedbackSizeInBits);
156 using (universalCryptoTransform)
157 {
158 return universalCryptoTransform.TransformOneShot(plaintext, destination, out bytesWritten);
159 }
160 }
161
162 protected override void Dispose(bool disposing)
163 {
164 base.Dispose(disposing);
165 }
166
168 {
169 return TripleDES.IsWeakKey(key);
170 }
171
172 int ICngSymmetricAlgorithm.GetPaddingSize(CipherMode mode, int feedbackSizeBits)
173 {
174 return this.GetPaddingSize(mode, feedbackSizeBits);
175 }
176
181
183 {
184 return "3DES";
185 }
186
188 {
189 if (key.Length == 16)
190 {
191 byte[] array = new byte[24];
192 Array.Copy(key, array, 16);
193 Array.Copy(key, 0, array, 16, 8);
194 return array;
195 }
196 return key;
197 }
198
200 {
201 if (feedbackSizeInBits != 8)
202 {
203 return feedbackSizeInBits == 64;
204 }
205 return true;
206 }
207}
static SafeAlgorithmHandle GetSharedHandle(CipherMode cipherMode, int feedback)
bool TransformOneShot(ReadOnlySpan< byte > input, Span< byte > output, out int bytesWritten)
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
override bool TryEncryptCfbCore(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
TripleDESCng(string keyName, CngProvider provider)
override ICryptoTransform CreateEncryptor()
override bool TryDecryptCbcCore(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
override bool TryDecryptCfbCore(ReadOnlySpan< byte > ciphertext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, int feedbackSizeInBits, out int bytesWritten)
override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[]? rgbIV)
override bool TryEncryptCbcCore(ReadOnlySpan< byte > plaintext, ReadOnlySpan< byte > iv, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
TripleDESCng(string keyName, CngProvider provider, CngKeyOpenOptions openOptions)
override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[]? rgbIV)
override ICryptoTransform CreateDecryptor()
override void Dispose(bool disposing)
int ICngSymmetricAlgorithm. GetPaddingSize(CipherMode mode, int feedbackSizeBits)
override bool TryDecryptEcbCore(ReadOnlySpan< byte > ciphertext, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
override bool TryEncryptEcbCore(ReadOnlySpan< byte > plaintext, Span< byte > destination, PaddingMode paddingMode, out int bytesWritten)
static bool IsWeakKey(byte[] rgbKey)
Definition TripleDES.cs:70
int GetPaddingSize(CipherMode mode, int feedbackSizeBits)
Internal.NativeCrypto.SafeAlgorithmHandle GetEphemeralModeHandle(CipherMode mode, int feedbackSizeInBits)
bool IsValidEphemeralFeedbackSize(int feedbackSizeInBits)
void SetKeySize(int keySize, ICngSymmetricAlgorithm outer)