1
- using System ;
2
- using Microsoft . VisualStudio . TestTools . UnitTesting ;
1
+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
3
2
using Renci . SshNet . Security . Cryptography . Ciphers ;
4
3
using Renci . SshNet . Security . Cryptography . Ciphers . Modes ;
5
4
using Renci . SshNet . Tests . Common ;
6
5
using Renci . SshNet . Tests . Properties ;
7
- using System . Linq ;
8
- using Renci . SshNet . Common ;
9
6
10
7
namespace Renci . SshNet . Tests . Classes . Security . Cryptography . Ciphers
11
8
{
@@ -16,21 +13,36 @@ namespace Renci.SshNet.Tests.Classes.Security.Cryptography.Ciphers
16
13
public class AesCipherTest : TestBase
17
14
{
18
15
[ TestMethod ]
19
- public void Test_Cipher_AES_128_CBC ( )
16
+ public void Encrypt_Input_128_CBC ( )
20
17
{
21
18
var input = new byte [ ] { 0x00 , 0x00 , 0x00 , 0x2c , 0x1a , 0x05 , 0x00 , 0x00 , 0x00 , 0x0c , 0x73 , 0x73 , 0x68 , 0x2d , 0x75 , 0x73 , 0x65 , 0x72 , 0x61 , 0x75 , 0x74 , 0x68 , 0x30 , 0x9e , 0xe0 , 0x9c , 0x12 , 0xee , 0x3a , 0x30 , 0x03 , 0x52 , 0x1c , 0x1a , 0xe7 , 0x3e , 0x0b , 0x9a , 0xcf , 0x9a , 0x57 , 0x42 , 0x0b , 0x4f , 0x4a , 0x15 , 0xa0 , 0xf5 } ;
22
19
var key = new byte [ ] { 0xe4 , 0x94 , 0xf9 , 0xb1 , 0x00 , 0x4f , 0x16 , 0x2a , 0x80 , 0x11 , 0xea , 0x73 , 0x0d , 0xb9 , 0xbf , 0x64 } ;
23
20
var iv = new byte [ ] { 0x74 , 0x8b , 0x4f , 0xe6 , 0xc1 , 0x29 , 0xb3 , 0x54 , 0xec , 0x77 , 0x92 , 0xf3 , 0x15 , 0xa0 , 0x41 , 0xa8 } ;
24
- var output = new byte [ ] { 0x19 , 0x7f , 0x80 , 0xd8 , 0xc9 , 0x89 , 0xc4 , 0xa7 , 0xc6 , 0xc6 , 0x3f , 0x9f , 0x1e , 0x00 , 0x1f , 0x72 , 0xa7 , 0x5e , 0xde , 0x40 , 0x88 , 0xa2 , 0x72 , 0xf2 , 0xed , 0x3f , 0x81 , 0x45 , 0xb6 , 0xbd , 0x45 , 0x87 , 0x15 , 0xa5 , 0x10 , 0x92 , 0x4a , 0x37 , 0x9e , 0xa9 , 0x80 , 0x1c , 0x14 , 0x83 , 0xa3 , 0x39 , 0x45 , 0x28 } ;
21
+ var expected = new byte [ ] { 0x19 , 0x7f , 0x80 , 0xd8 , 0xc9 , 0x89 , 0xc4 , 0xa7 , 0xc6 , 0xc6 , 0x3f , 0x9f , 0x1e , 0x00 , 0x1f , 0x72 , 0xa7 , 0x5e , 0xde , 0x40 , 0x88 , 0xa2 , 0x72 , 0xf2 , 0xed , 0x3f , 0x81 , 0x45 , 0xb6 , 0xbd , 0x45 , 0x87 , 0x15 , 0xa5 , 0x10 , 0x92 , 0x4a , 0x37 , 0x9e , 0xa9 , 0x80 , 0x1c , 0x14 , 0x83 , 0xa3 , 0x39 , 0x45 , 0x28 } ;
25
22
var testCipher = new AesCipher ( key , new CbcCipherMode ( iv ) , null ) ;
26
- var r = testCipher . Encrypt ( input ) ;
27
23
28
- if ( ! r . SequenceEqual ( output ) )
29
- Assert . Fail ( "Invalid encryption" ) ;
24
+ var actual = testCipher . Encrypt ( input ) ;
25
+
26
+ Assert . IsTrue ( actual . IsEqualTo ( expected ) ) ;
30
27
}
31
28
32
29
[ TestMethod ]
33
- public void Test_Cipher_AES_128_CTR ( )
30
+ public void Encrypt_InputAndOffsetAndLength_128_CBC ( )
31
+ {
32
+ // 2 dummy bytes before and 3 after the input from test case above
33
+ var input = new byte [ ] { 0x05 , 0x07 , 0x00 , 0x00 , 0x00 , 0x2c , 0x1a , 0x05 , 0x00 , 0x00 , 0x00 , 0x0c , 0x73 , 0x73 , 0x68 , 0x2d , 0x75 , 0x73 , 0x65 , 0x72 , 0x61 , 0x75 , 0x74 , 0x68 , 0x30 , 0x9e , 0xe0 , 0x9c , 0x12 , 0xee , 0x3a , 0x30 , 0x03 , 0x52 , 0x1c , 0x1a , 0xe7 , 0x3e , 0x0b , 0x9a , 0xcf , 0x9a , 0x57 , 0x42 , 0x0b , 0x4f , 0x4a , 0x15 , 0xa0 , 0xf5 , 0x0f , 0x0d , 0x03 } ;
34
+ var key = new byte [ ] { 0xe4 , 0x94 , 0xf9 , 0xb1 , 0x00 , 0x4f , 0x16 , 0x2a , 0x80 , 0x11 , 0xea , 0x73 , 0x0d , 0xb9 , 0xbf , 0x64 } ;
35
+ var iv = new byte [ ] { 0x74 , 0x8b , 0x4f , 0xe6 , 0xc1 , 0x29 , 0xb3 , 0x54 , 0xec , 0x77 , 0x92 , 0xf3 , 0x15 , 0xa0 , 0x41 , 0xa8 } ;
36
+ var expected = new byte [ ] { 0x19 , 0x7f , 0x80 , 0xd8 , 0xc9 , 0x89 , 0xc4 , 0xa7 , 0xc6 , 0xc6 , 0x3f , 0x9f , 0x1e , 0x00 , 0x1f , 0x72 , 0xa7 , 0x5e , 0xde , 0x40 , 0x88 , 0xa2 , 0x72 , 0xf2 , 0xed , 0x3f , 0x81 , 0x45 , 0xb6 , 0xbd , 0x45 , 0x87 , 0x15 , 0xa5 , 0x10 , 0x92 , 0x4a , 0x37 , 0x9e , 0xa9 , 0x80 , 0x1c , 0x14 , 0x83 , 0xa3 , 0x39 , 0x45 , 0x28 } ;
37
+ var testCipher = new AesCipher ( key , new CbcCipherMode ( iv ) , null ) ;
38
+
39
+ var actual = testCipher . Encrypt ( input , 2 , input . Length - 5 ) ;
40
+
41
+ Assert . IsTrue ( actual . IsEqualTo ( expected ) ) ;
42
+ }
43
+
44
+ [ TestMethod ]
45
+ public void Encrypt_Input_128_CTR ( )
34
46
{
35
47
var input = new byte [ ] { 0x00 , 0x00 , 0x00 , 0x2c , 0x1a , 0x05 , 0x00 , 0x00 , 0x00 , 0x0c , 0x73 , 0x73 , 0x68 , 0x2d , 0x75 , 0x73 , 0x65 , 0x72 , 0x61 , 0x75 , 0x74 , 0x68 , 0xb0 , 0x74 , 0x21 , 0x87 , 0x16 , 0xb9 , 0x69 , 0x48 , 0x33 , 0xce , 0xb3 , 0xe7 , 0xdc , 0x3f , 0x50 , 0xdc , 0xcc , 0xd5 , 0x27 , 0xb7 , 0xfe , 0x7a , 0x78 , 0x22 , 0xae , 0xc8 } ;
36
48
var key = new byte [ ] { 0x17 , 0x78 , 0x56 , 0xe1 , 0x3e , 0xbd , 0x3e , 0x50 , 0x1d , 0x79 , 0x3f , 0x0f , 0x55 , 0x37 , 0x45 , 0x54 } ;
@@ -44,17 +56,31 @@ public void Test_Cipher_AES_128_CTR()
44
56
}
45
57
46
58
[ TestMethod ]
47
- public void Decrypt_AES_128_CTR ( )
59
+ public void Decrypt_Input_128_CTR ( )
60
+ {
61
+ var key = new byte [ ] { 0x17 , 0x78 , 0x56 , 0xe1 , 0x3e , 0xbd , 0x3e , 0x50 , 0x1d , 0x79 , 0x3f , 0x0f , 0x55 , 0x37 , 0x45 , 0x54 } ;
62
+ var iv = new byte [ ] { 0xe6 , 0x65 , 0x36 , 0x0d , 0xdd , 0xd7 , 0x50 , 0xc3 , 0x48 , 0xdb , 0x48 , 0x07 , 0xa1 , 0x30 , 0xd2 , 0x38 } ;
63
+ var input = new byte [ ] { 0xca , 0xfb , 0x1c , 0x49 , 0xbf , 0x82 , 0x2a , 0xbb , 0x1c , 0x52 , 0xc7 , 0x86 , 0x22 , 0x8a , 0xe5 , 0xa4 , 0xf3 , 0xda , 0x4e , 0x1c , 0x3a , 0x87 , 0x41 , 0x1c , 0xd2 , 0x6e , 0x76 , 0xdc , 0xc2 , 0xe9 , 0xc2 , 0x0e , 0xf5 , 0xc7 , 0xbd , 0x12 , 0x85 , 0xfa , 0x0e , 0xda , 0xee , 0x50 , 0xd7 , 0xfd , 0x81 , 0x34 , 0x25 , 0x6d } ;
64
+ var expected = new byte [ ] { 0x00 , 0x00 , 0x00 , 0x2c , 0x1a , 0x05 , 0x00 , 0x00 , 0x00 , 0x0c , 0x73 , 0x73 , 0x68 , 0x2d , 0x75 , 0x73 , 0x65 , 0x72 , 0x61 , 0x75 , 0x74 , 0x68 , 0xb0 , 0x74 , 0x21 , 0x87 , 0x16 , 0xb9 , 0x69 , 0x48 , 0x33 , 0xce , 0xb3 , 0xe7 , 0xdc , 0x3f , 0x50 , 0xdc , 0xcc , 0xd5 , 0x27 , 0xb7 , 0xfe , 0x7a , 0x78 , 0x22 , 0xae , 0xc8 } ;
65
+ var testCipher = new AesCipher ( key , new CtrCipherMode ( iv ) , null ) ;
66
+
67
+ var actual = testCipher . Decrypt ( input ) ;
68
+
69
+ Assert . IsTrue ( expected . IsEqualTo ( actual ) ) ;
70
+ }
71
+
72
+ [ TestMethod ]
73
+ public void Decrypt_InputAndOffsetAndLength_128_CTR ( )
48
74
{
49
- var input = new byte [ ] { 0x00 , 0x00 , 0x00 , 0x2c , 0x1a , 0x05 , 0x00 , 0x00 , 0x00 , 0x0c , 0x73 , 0x73 , 0x68 , 0x2d , 0x75 , 0x73 , 0x65 , 0x72 , 0x61 , 0x75 , 0x74 , 0x68 , 0xb0 , 0x74 , 0x21 , 0x87 , 0x16 , 0xb9 , 0x69 , 0x48 , 0x33 , 0xce , 0xb3 , 0xe7 , 0xdc , 0x3f , 0x50 , 0xdc , 0xcc , 0xd5 , 0x27 , 0xb7 , 0xfe , 0x7a , 0x78 , 0x22 , 0xae , 0xc8 } ;
50
75
var key = new byte [ ] { 0x17 , 0x78 , 0x56 , 0xe1 , 0x3e , 0xbd , 0x3e , 0x50 , 0x1d , 0x79 , 0x3f , 0x0f , 0x55 , 0x37 , 0x45 , 0x54 } ;
51
76
var iv = new byte [ ] { 0xe6 , 0x65 , 0x36 , 0x0d , 0xdd , 0xd7 , 0x50 , 0xc3 , 0x48 , 0xdb , 0x48 , 0x07 , 0xa1 , 0x30 , 0xd2 , 0x38 } ;
52
- var output = new byte [ ] { 0xca , 0xfb , 0x1c , 0x49 , 0xbf , 0x82 , 0x2a , 0xbb , 0x1c , 0x52 , 0xc7 , 0x86 , 0x22 , 0x8a , 0xe5 , 0xa4 , 0xf3 , 0xda , 0x4e , 0x1c , 0x3a , 0x87 , 0x41 , 0x1c , 0xd2 , 0x6e , 0x76 , 0xdc , 0xc2 , 0xe9 , 0xc2 , 0x0e , 0xf5 , 0xc7 , 0xbd , 0x12 , 0x85 , 0xfa , 0x0e , 0xda , 0xee , 0x50 , 0xd7 , 0xfd , 0x81 , 0x34 , 0x25 , 0x6d } ;
77
+ var input = new byte [ ] { 0x0a , 0xca , 0xfb , 0x1c , 0x49 , 0xbf , 0x82 , 0x2a , 0xbb , 0x1c , 0x52 , 0xc7 , 0x86 , 0x22 , 0x8a , 0xe5 , 0xa4 , 0xf3 , 0xda , 0x4e , 0x1c , 0x3a , 0x87 , 0x41 , 0x1c , 0xd2 , 0x6e , 0x76 , 0xdc , 0xc2 , 0xe9 , 0xc2 , 0x0e , 0xf5 , 0xc7 , 0xbd , 0x12 , 0x85 , 0xfa , 0x0e , 0xda , 0xee , 0x50 , 0xd7 , 0xfd , 0x81 , 0x34 , 0x25 , 0x6d , 0x0a , 0x05 } ;
78
+ var expected = new byte [ ] { 0x00 , 0x00 , 0x00 , 0x2c , 0x1a , 0x05 , 0x00 , 0x00 , 0x00 , 0x0c , 0x73 , 0x73 , 0x68 , 0x2d , 0x75 , 0x73 , 0x65 , 0x72 , 0x61 , 0x75 , 0x74 , 0x68 , 0xb0 , 0x74 , 0x21 , 0x87 , 0x16 , 0xb9 , 0x69 , 0x48 , 0x33 , 0xce , 0xb3 , 0xe7 , 0xdc , 0x3f , 0x50 , 0xdc , 0xcc , 0xd5 , 0x27 , 0xb7 , 0xfe , 0x7a , 0x78 , 0x22 , 0xae , 0xc8 } ;
53
79
var testCipher = new AesCipher ( key , new CtrCipherMode ( iv ) , null ) ;
54
80
55
- var actual = testCipher . Decrypt ( output ) ;
81
+ var actual = testCipher . Decrypt ( input , 1 , input . Length - 3 ) ;
56
82
57
- Assert . IsTrue ( input . IsEqualTo ( actual ) ) ;
83
+ Assert . IsTrue ( expected . IsEqualTo ( actual ) ) ;
58
84
}
59
85
60
86
[ TestMethod ]
0 commit comments