Skip to content

Commit 20c3eb3

Browse files
author
DV
committed
#21 support for RSA key type with .NET 4.6 for RSA-OAEP-256
1 parent 648e136 commit 20c3eb3

33 files changed

+3469
-32
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ _ReSharper*/
1515
package/
1616
artifacts/
1717
.vs
18-
.vscode
18+
.vscode
19+
packages

UnitTests/project.lock.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -2582,7 +2582,7 @@
25822582
"lib/dotnet/xunit.runner.utility.dotnet.dll": {}
25832583
}
25842584
},
2585-
"jose-jwt/2.0.2": {
2585+
"jose-jwt/2.0.1": {
25862586
"type": "project",
25872587
"framework": ".NETStandard,Version=v1.4",
25882588
"dependencies": {
@@ -7613,7 +7613,7 @@
76137613
"xunit.runner.utility.nuspec"
76147614
]
76157615
},
7616-
"jose-jwt/2.0.2": {
7616+
"jose-jwt/2.0.1": {
76177617
"type": "project",
76187618
"path": "../jose-jwt/project.json",
76197619
"msbuildProject": "../jose-jwt/jose-jwt.xproj"

UnitTestsNet46/AesGcmTest.cs

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System.Text;
2+
using Jose;
3+
using Xunit;
4+
5+
namespace UnitTests
6+
{
7+
public class AesGcmTest
8+
{
9+
private byte[] aes128Key = new byte[] { 194, 164, 235, 6, 138, 248, 171, 239, 24, 216, 11, 22, 137, 199, 215, 133 };
10+
11+
[Fact]
12+
public void Encrypt()
13+
{
14+
//given
15+
byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
16+
byte[] aad = Encoding.UTF8.GetBytes("secre");
17+
byte[] text = Encoding.UTF8.GetBytes("hellow aes !");
18+
19+
//when
20+
byte[][] test=AesGcm.Encrypt(aes128Key, iv, aad, text);
21+
22+
//then
23+
Assert.Equal(test[0], new byte[] { 245, 242, 160, 166, 250, 62, 102, 211, 158, 42, 62, 73 });
24+
Assert.Equal(test[1], new byte[] { 195, 69, 216, 140, 118, 58, 48, 131, 47, 225, 205, 198, 78, 12, 180, 76 });
25+
}
26+
27+
[Fact]
28+
public void Decrypt()
29+
{
30+
//given
31+
byte[] iv = { 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
32+
byte[] tag = { 121, 235, 93, 169, 185, 192, 202, 230, 130, 37, 35, 135, 46, 129, 168, 104 };
33+
byte[] cipher = { 33, 6, 206, 1, 182, 114, 131, 218, 124, 60 };
34+
byte[] aad = Encoding.UTF8.GetBytes("top secret");
35+
36+
//when
37+
byte[] test=AesGcm.Decrypt(aes128Key, iv, aad, cipher, tag);
38+
39+
//then
40+
Assert.Equal(test, Encoding.UTF8.GetBytes("decrypt me"));
41+
}
42+
}
43+
}

UnitTestsNet46/AesKeyWrapTest.cs

+260
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
using Jose;
2+
using Xunit;
3+
4+
namespace UnitTests
5+
{
6+
public class AesKeyWrapTest
7+
{
8+
[Fact]
9+
public void Wrap_128Key_128Kek()
10+
{
11+
//given (Section 4.1)
12+
13+
//000102030405060708090A0B0C0D0E0F
14+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
15+
16+
//00112233445566778899AABBCCDDEEFF
17+
byte[] key = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 };
18+
19+
//1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5
20+
byte[] expected = { 31, 166, 139, 10, 129, 18, 180, 71, 174, 243, 75, 216, 251, 90, 123, 130, 157, 62, 134, 35, 113, 210, 207, 229 };
21+
22+
//when
23+
byte[] test = AesKeyWrap.Wrap(key, kek);
24+
25+
//then
26+
Assert.Equal(test, expected);
27+
}
28+
29+
[Fact]
30+
public void Unwrap_128key_128kek()
31+
{
32+
//given (Section 4.1)
33+
34+
//000102030405060708090A0B0C0D0E0F
35+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
36+
37+
//00112233445566778899AABBCCDDEEFF
38+
byte[] expected = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 };
39+
40+
//1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5
41+
byte[] key = { 31, 166, 139, 10, 129, 18, 180, 71, 174, 243, 75, 216, 251, 90, 123, 130, 157, 62, 134, 35, 113, 210, 207, 229 };
42+
43+
//when
44+
byte[] test = AesKeyWrap.Unwrap(key, kek);
45+
46+
//then
47+
Assert.Equal(test, expected);
48+
}
49+
50+
[Fact]
51+
public void Wrap_128Key_192Kek()
52+
{
53+
//given (Section 4.2)
54+
55+
//000102030405060708090A0B0C0D0E0F1011121314151617
56+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
57+
58+
//00112233445566778899AABBCCDDEEFF
59+
byte[] key = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 };
60+
61+
//96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D
62+
byte[] expected = { 150, 119, 139, 37, 174, 108, 164, 53, 249, 43, 91, 151, 192, 80, 174, 210, 70, 138, 184, 161, 122, 216, 78, 93 };
63+
64+
//when
65+
byte[] test = AesKeyWrap.Wrap(key, kek);
66+
67+
//then
68+
Assert.Equal(test, expected);
69+
}
70+
71+
[Fact]
72+
public void Unwrap_128Key_192Kek()
73+
{
74+
//given (Section 4.2)
75+
76+
//000102030405060708090A0B0C0D0E0F1011121314151617
77+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
78+
79+
//00112233445566778899AABBCCDDEEFF
80+
byte[] expected = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 };
81+
82+
//96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D
83+
byte[] key = { 150, 119, 139, 37, 174, 108, 164, 53, 249, 43, 91, 151, 192, 80, 174, 210, 70, 138, 184, 161, 122, 216, 78, 93 };
84+
85+
//when
86+
byte[] test = AesKeyWrap.Unwrap(key, kek);
87+
88+
//then
89+
Assert.Equal(test, expected);
90+
}
91+
92+
[Fact]
93+
public void Wrap_128Key_256Kek()
94+
{
95+
//given (Section 4.3)
96+
97+
//000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
98+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
99+
100+
//00112233445566778899AABBCCDDEEFF
101+
byte[] key = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 };
102+
103+
//64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7
104+
byte[] expected = { 100, 232, 195, 249, 206, 15, 91, 162, 99, 233, 119, 121, 5, 129, 138, 42, 147, 200, 25, 30, 125, 110, 138, 231 };
105+
106+
//when
107+
byte[] test = AesKeyWrap.Wrap(key, kek);
108+
109+
//then
110+
Assert.Equal(test, expected);
111+
}
112+
113+
[Fact]
114+
public void Unwrap_128Key_256Kek()
115+
{
116+
//given (Section 4.3)
117+
118+
//000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
119+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
120+
121+
//00112233445566778899AABBCCDDEEFF
122+
byte[] expected = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 };
123+
124+
//64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7
125+
byte[] key = { 100, 232, 195, 249, 206, 15, 91, 162, 99, 233, 119, 121, 5, 129, 138, 42, 147, 200, 25, 30, 125, 110, 138, 231 };
126+
127+
//when
128+
byte[] test = AesKeyWrap.Unwrap(key, kek);
129+
130+
//then
131+
Assert.Equal(test, expected);
132+
}
133+
134+
[Fact]
135+
public void Wrap_192Key_192Kek()
136+
{
137+
//given (Section 4.4)
138+
139+
//000102030405060708090A0B0C0D0E0F1011121314151617
140+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
141+
142+
//00112233445566778899AABBCCDDEEFF0001020304050607
143+
byte[] key = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 0, 1, 2, 3, 4, 5, 6, 7 };
144+
145+
//031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2
146+
byte[] expected = { 3, 29, 51, 38, 78, 21, 211, 50, 104, 242, 78, 194, 96, 116, 62, 220, 225, 198, 199, 221, 238, 114, 90, 147, 107, 168, 20, 145, 92, 103, 98, 210 };
147+
148+
//when
149+
byte[] test = AesKeyWrap.Wrap(key, kek);
150+
151+
//then
152+
Assert.Equal(test, expected);
153+
}
154+
155+
[Fact]
156+
public void UnWwrap_192Key_192Kek()
157+
{
158+
//given (Section 4.4)
159+
160+
//000102030405060708090A0B0C0D0E0F1011121314151617
161+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
162+
163+
//00112233445566778899AABBCCDDEEFF0001020304050607
164+
byte[] expected = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 0, 1, 2, 3, 4, 5, 6, 7 };
165+
166+
//031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2
167+
byte[] key = { 3, 29, 51, 38, 78, 21, 211, 50, 104, 242, 78, 194, 96, 116, 62, 220, 225, 198, 199, 221, 238, 114, 90, 147, 107, 168, 20, 145, 92, 103, 98, 210 };
168+
169+
//when
170+
byte[] test = AesKeyWrap.Unwrap(key, kek);
171+
172+
//then
173+
Assert.Equal(test, expected);
174+
}
175+
176+
[Fact]
177+
public void Wrap_192Key_256Kek()
178+
{
179+
//given (Section 4.5)
180+
181+
//000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
182+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
183+
184+
//00112233445566778899AABBCCDDEEFF0001020304050607
185+
byte[] key = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 0, 1, 2, 3, 4, 5, 6, 7 };
186+
187+
//A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1
188+
byte[] expected = { 168, 249, 188, 22, 18, 198, 139, 63, 246, 230, 244, 251, 227, 14, 113, 228, 118, 156, 139, 128, 163, 44, 184, 149, 140, 213, 209, 125, 107, 37, 77, 161 };
189+
190+
//when
191+
byte[] test = AesKeyWrap.Wrap(key, kek);
192+
193+
//then
194+
Assert.Equal(test, expected);
195+
}
196+
197+
[Fact]
198+
public void Unwrap_192Key_256Kek()
199+
{
200+
//given (Section 4.5)
201+
202+
//000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
203+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
204+
205+
//00112233445566778899AABBCCDDEEFF0001020304050607
206+
byte[] expected = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 0, 1, 2, 3, 4, 5, 6, 7 };
207+
208+
//A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1
209+
byte[] key = { 168, 249, 188, 22, 18, 198, 139, 63, 246, 230, 244, 251, 227, 14, 113, 228, 118, 156, 139, 128, 163, 44, 184, 149, 140, 213, 209, 125, 107, 37, 77, 161 };
210+
211+
//when
212+
byte[] test = AesKeyWrap.Unwrap(key, kek);
213+
214+
//then
215+
Assert.Equal(test, expected);
216+
}
217+
218+
[Fact]
219+
public void Wrap_256Key_256Kek()
220+
{
221+
//given (Section 4.6)
222+
223+
//000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
224+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
225+
226+
//00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
227+
byte[] key = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
228+
229+
//28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21
230+
byte[] expected = { 40, 201, 244, 4, 196, 184, 16, 244, 203, 204, 179, 92, 251, 135, 248, 38, 63, 87, 134, 226, 216, 14, 211, 38, 203, 199, 240, 231, 26, 153, 244, 59, 251, 152, 139, 155, 122, 2, 221, 33 };
231+
232+
//when
233+
byte[] test = AesKeyWrap.Wrap(key, kek);
234+
235+
//then
236+
Assert.Equal(test, expected);
237+
}
238+
239+
[Fact]
240+
public void Unwrap_256Key_256Kek()
241+
{
242+
//given (Section 4.6)
243+
244+
//000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
245+
byte[] kek = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
246+
247+
//00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
248+
byte[] expected = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
249+
250+
//28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21
251+
byte[] key = { 40, 201, 244, 4, 196, 184, 16, 244, 203, 204, 179, 92, 251, 135, 248, 38, 63, 87, 134, 226, 216, 14, 211, 38, 203, 199, 240, 231, 26, 153, 244, 59, 251, 152, 139, 155, 122, 2, 221, 33 };
252+
253+
//when
254+
byte[] test = AesKeyWrap.Unwrap(key, kek);
255+
256+
//then
257+
Assert.Equal(test, expected);
258+
}
259+
}
260+
}

0 commit comments

Comments
 (0)