Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
UniversalCryptoEncryptor.cs
Go to the documentation of this file.
1using System;
3
5
7{
8 public UniversalCryptoEncryptor(PaddingMode paddingMode, BasicSymmetricCipher basicSymmetricCipher)
9 : base(paddingMode, basicSymmetricCipher)
10 {
11 }
12
13 protected override int UncheckedTransformBlock(ReadOnlySpan<byte> inputBuffer, Span<byte> outputBuffer)
14 {
15 return base.BasicSymmetricCipher.Transform(inputBuffer, outputBuffer);
16 }
17
18 protected override int UncheckedTransformFinalBlock(ReadOnlySpan<byte> inputBuffer, Span<byte> outputBuffer)
19 {
20 int length = PadBlock(inputBuffer, outputBuffer);
21 return base.BasicSymmetricCipher.TransformFinal(outputBuffer.Slice(0, length), outputBuffer);
22 }
23
24 protected override byte[] UncheckedTransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
25 {
26 byte[] array = GC.AllocateUninitializedArray<byte>(GetCiphertextLength(inputCount));
27 int num = UncheckedTransformFinalBlock(inputBuffer.AsSpan(inputOffset, inputCount), array);
28 return array;
29 }
30
31 public override bool TransformOneShot(ReadOnlySpan<byte> input, Span<byte> output, out int bytesWritten)
32 {
33 int ciphertextLength = GetCiphertextLength(input.Length);
34 if (output.Length < ciphertextLength)
35 {
36 bytesWritten = 0;
37 return false;
38 }
39 Span<byte> span = output[..PadBlock(input, output)];
40 bytesWritten = base.BasicSymmetricCipher.TransformFinal(span, span);
41 return true;
42 }
43
44 private int GetCiphertextLength(int plaintextLength)
45 {
46 int result;
47 int num = Math.DivRem(plaintextLength, base.PaddingSizeBytes, out result) * base.PaddingSizeBytes;
48 switch (base.PaddingMode)
49 {
50 case PaddingMode.None:
51 if (result != 0)
52 {
54 }
55 goto IL_004c;
56 case PaddingMode.Zeros:
57 if (result == 0)
58 {
59 goto IL_004c;
60 }
61 goto case PaddingMode.PKCS7;
62 case PaddingMode.PKCS7:
63 case PaddingMode.ANSIX923:
64 case PaddingMode.ISO10126:
65 return checked(num + base.PaddingSizeBytes);
66 default:
67 {
69 }
70 IL_004c:
71 return plaintextLength;
72 }
73 }
74
76 {
77 int length = block.Length;
78 int num = length % base.PaddingSizeBytes;
79 int num2 = base.PaddingSizeBytes - num;
80 switch (base.PaddingMode)
81 {
82 case PaddingMode.None:
83 if (num != 0)
84 {
86 }
87 if (destination.Length < length)
88 {
90 }
91 block.CopyTo(destination);
92 return length;
93 case PaddingMode.ANSIX923:
94 {
95 int num4 = length + num2;
96 if (destination.Length < num4)
97 {
99 }
100 block.CopyTo(destination);
101 destination.Slice(length, num2 - 1).Clear();
102 destination[length + num2 - 1] = (byte)num2;
103 return num4;
104 }
105 case PaddingMode.ISO10126:
106 {
107 int num6 = length + num2;
108 if (destination.Length < num6)
109 {
111 }
112 block.CopyTo(destination);
114 destination[length + num2 - 1] = (byte)num2;
115 return num6;
116 }
117 case PaddingMode.PKCS7:
118 {
119 int num5 = length + num2;
120 if (destination.Length < num5)
121 {
123 }
124 block.CopyTo(destination);
125 destination.Slice(length, num2).Fill((byte)num2);
126 return num5;
127 }
128 case PaddingMode.Zeros:
129 {
130 if (num2 == base.PaddingSizeBytes)
131 {
132 num2 = 0;
133 }
134 int num3 = length + num2;
135 if (destination.Length < num3)
136 {
138 }
139 block.CopyTo(destination);
140 destination.Slice(length, num2).Clear();
141 return num3;
142 }
143 default:
145 }
146 }
147}
override byte[] UncheckedTransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
UniversalCryptoEncryptor(PaddingMode paddingMode, BasicSymmetricCipher basicSymmetricCipher)
override int UncheckedTransformBlock(ReadOnlySpan< byte > inputBuffer, Span< byte > outputBuffer)
int PadBlock(ReadOnlySpan< byte > block, Span< byte > destination)
override bool TransformOneShot(ReadOnlySpan< byte > input, Span< byte > output, out int bytesWritten)
override int UncheckedTransformFinalBlock(ReadOnlySpan< byte > inputBuffer, Span< byte > outputBuffer)
Definition GC.cs:8
static int DivRem(int a, int b, out int result)
Definition Math.cs:329
static string Argument_DestinationTooShort
Definition SR.cs:14
static string Cryptography_UnknownPaddingMode
Definition SR.cs:154
static string Cryptography_PartialBlock
Definition SR.cs:124
Definition SR.cs:7
void CopyTo(Span< T > destination)
Span< T > Slice(int start)
Definition Span.cs:271
int Length
Definition Span.cs:70