@@ -25,33 +25,67 @@ namespace org.whispersystems.libsignal.fingerprint
25
25
[ TestClass ]
26
26
public class NumericFingerprintGeneratorTest
27
27
{
28
- private const int VERSION = 1 ;
29
28
private static readonly byte [ ] ALICE_IDENTITY = { 0x05 , 0x06 , 0x86 , 0x3b , 0xc6 , 0x6d , 0x02 , 0xb4 , 0x0d , 0x27 , 0xb8 , 0xd4 , 0x9c , 0xa7 , 0xc0 , 0x9e , 0x92 , 0x39 , 0x23 , 0x6f , 0x9d , 0x7d , 0x25 , 0xd6 , 0xfc , 0xca , 0x5c , 0xe1 , 0x3c , 0x70 , 0x64 , 0xd8 , 0x68 } ;
30
29
private static readonly byte [ ] BOB_IDENTITY = { 0x05 , 0xf7 , 0x81 , 0xb6 , 0xfb , 0x32 , 0xfe , 0xd9 , 0xba , 0x1c , 0xf2 , 0xde , 0x97 , 0x8d , 0x4d , 0x5d , 0xa2 , 0x8d , 0xc3 , 0x40 , 0x46 , 0xae , 0x81 , 0x44 , 0x02 , 0xb5 , 0xc0 , 0xdb , 0xd9 , 0x6f , 0xda , 0x90 , 0x7b } ;
31
- private static readonly string DISPLAYABLE_FINGERPRINT = "300354477692869396892869876765458257569162576843440918079131" ;
32
- private static readonly byte [ ] ALICE_SCANNABLE_FINGERPRINT = new byte [ ] { 0x08 , 0x01 , 0x12 , 0x22 , 0x0a , 0x20 , 0x1e , 0x30 , 0x1a , 0x03 , 0x53 , 0xdc , 0xe3 , 0xdb , 0xe7 , 0x68 , 0x4c , 0xb8 , 0x33 , 0x6e , 0x85 , 0x13 , 0x6c , 0xdc , 0x0e , 0xe9 , 0x62 , 0x19 , 0x49 , 0x4a , 0xda , 0x30 , 0x5d , 0x62 , 0xa7 , 0xbd , 0x61 , 0xdf , 0x1a , 0x22 , 0x0a , 0x20 , 0xd6 , 0x2c , 0xbf , 0x73 , 0xa1 , 0x15 , 0x92 , 0x01 , 0x5b , 0x6b , 0x9f , 0x16 , 0x82 , 0xac , 0x30 , 0x6f , 0xea , 0x3a , 0xaf , 0x38 , 0x85 , 0xb8 , 0x4d , 0x12 , 0xbc , 0xa6 , 0x31 , 0xe9 , 0xd4 , 0xfb , 0x3a , 0x4d } ;
33
- private static readonly byte [ ] BOB_SCANNABLE_FINGERPRINT = new byte [ ] { 0x08 , 0x01 , 0x12 , 0x22 , 0x0a , 0x20 , 0xd6 , 0x2c , 0xbf , 0x73 , 0xa1 , 0x15 , 0x92 , 0x01 , 0x5b , 0x6b , 0x9f , 0x16 , 0x82 , 0xac , 0x30 , 0x6f , 0xea , 0x3a , 0xaf , 0x38 , 0x85 , 0xb8 , 0x4d , 0x12 , 0xbc , 0xa6 , 0x31 , 0xe9 , 0xd4 , 0xfb , 0x3a , 0x4d , 0x1a , 0x22 , 0x0a , 0x20 , 0x1e , 0x30 , 0x1a , 0x03 , 0x53 , 0xdc , 0xe3 , 0xdb , 0xe7 , 0x68 , 0x4c , 0xb8 , 0x33 , 0x6e , 0x85 , 0x13 , 0x6c , 0xdc , 0x0e , 0xe9 , 0x62 , 0x19 , 0x49 , 0x4a , 0xda , 0x30 , 0x5d , 0x62 , 0xa7 , 0xbd , 0x61 , 0xdf } ;
30
+
31
+ private const int VERSION_1 = 1 ;
32
+ private const string DISPLAYABLE_FINGERPRINT_V1 = "300354477692869396892869876765458257569162576843440918079131" ;
33
+ private static readonly byte [ ] ALICE_SCANNABLE_FINGERPRINT_V1 = new byte [ ] { 0x08 , 0x01 , 0x12 , 0x22 , 0x0a , 0x20 , 0x1e , 0x30 , 0x1a , 0x03 , 0x53 , 0xdc , 0xe3 , 0xdb , 0xe7 , 0x68 , 0x4c , 0xb8 , 0x33 , 0x6e , 0x85 , 0x13 , 0x6c , 0xdc , 0x0e , 0xe9 , 0x62 , 0x19 , 0x49 , 0x4a , 0xda , 0x30 , 0x5d , 0x62 , 0xa7 , 0xbd , 0x61 , 0xdf , 0x1a , 0x22 , 0x0a , 0x20 , 0xd6 , 0x2c , 0xbf , 0x73 , 0xa1 , 0x15 , 0x92 , 0x01 , 0x5b , 0x6b , 0x9f , 0x16 , 0x82 , 0xac , 0x30 , 0x6f , 0xea , 0x3a , 0xaf , 0x38 , 0x85 , 0xb8 , 0x4d , 0x12 , 0xbc , 0xa6 , 0x31 , 0xe9 , 0xd4 , 0xfb , 0x3a , 0x4d } ;
34
+ private static readonly byte [ ] BOB_SCANNABLE_FINGERPRINT_V1 = new byte [ ] { 0x08 , 0x01 , 0x12 , 0x22 , 0x0a , 0x20 , 0xd6 , 0x2c , 0xbf , 0x73 , 0xa1 , 0x15 , 0x92 , 0x01 , 0x5b , 0x6b , 0x9f , 0x16 , 0x82 , 0xac , 0x30 , 0x6f , 0xea , 0x3a , 0xaf , 0x38 , 0x85 , 0xb8 , 0x4d , 0x12 , 0xbc , 0xa6 , 0x31 , 0xe9 , 0xd4 , 0xfb , 0x3a , 0x4d , 0x1a , 0x22 , 0x0a , 0x20 , 0x1e , 0x30 , 0x1a , 0x03 , 0x53 , 0xdc , 0xe3 , 0xdb , 0xe7 , 0x68 , 0x4c , 0xb8 , 0x33 , 0x6e , 0x85 , 0x13 , 0x6c , 0xdc , 0x0e , 0xe9 , 0x62 , 0x19 , 0x49 , 0x4a , 0xda , 0x30 , 0x5d , 0x62 , 0xa7 , 0xbd , 0x61 , 0xdf } ;
35
+
36
+ private const int VERSION_2 = 2 ;
37
+ private const string DISPLAYABLE_FINGERPRINT_V2 = DISPLAYABLE_FINGERPRINT_V1 ;
38
+ private static readonly byte [ ] ALICE_SCANNABLE_FINGERPRINT_V2 = new byte [ ] { 0x08 , 0x02 , 0x12 , 0x22 , 0x0a , 0x20 , 0x1e , 0x30 , 0x1a , 0x03 , 0x53 , 0xdc , 0xe3 , 0xdb , 0xe7 , 0x68 , 0x4c , 0xb8 , 0x33 , 0x6e , 0x85 , 0x13 , 0x6c , 0xdc , 0x0e , 0xe9 , 0x62 , 0x19 , 0x49 , 0x4a , 0xda , 0x30 , 0x5d , 0x62 , 0xa7 , 0xbd , 0x61 , 0xdf , 0x1a , 0x22 , 0x0a , 0x20 , 0xd6 , 0x2c , 0xbf , 0x73 , 0xa1 , 0x15 , 0x92 , 0x01 , 0x5b , 0x6b , 0x9f , 0x16 , 0x82 , 0xac , 0x30 , 0x6f , 0xea , 0x3a , 0xaf , 0x38 , 0x85 , 0xb8 , 0x4d , 0x12 , 0xbc , 0xa6 , 0x31 , 0xe9 , 0xd4 , 0xfb , 0x3a , 0x4d } ;
39
+ private static readonly byte [ ] BOB_SCANNABLE_FINGERPRINT_V2 = new byte [ ] { 0x08 , 0x02 , 0x12 , 0x22 , 0x0a , 0x20 , 0xd6 , 0x2c , 0xbf , 0x73 , 0xa1 , 0x15 , 0x92 , 0x01 , 0x5b , 0x6b , 0x9f , 0x16 , 0x82 , 0xac , 0x30 , 0x6f , 0xea , 0x3a , 0xaf , 0x38 , 0x85 , 0xb8 , 0x4d , 0x12 , 0xbc , 0xa6 , 0x31 , 0xe9 , 0xd4 , 0xfb , 0x3a , 0x4d , 0x1a , 0x22 , 0x0a , 0x20 , 0x1e , 0x30 , 0x1a , 0x03 , 0x53 , 0xdc , 0xe3 , 0xdb , 0xe7 , 0x68 , 0x4c , 0xb8 , 0x33 , 0x6e , 0x85 , 0x13 , 0x6c , 0xdc , 0x0e , 0xe9 , 0x62 , 0x19 , 0x49 , 0x4a , 0xda , 0x30 , 0x5d , 0x62 , 0xa7 , 0xbd , 0x61 , 0xdf } ;
34
40
35
41
[ TestMethod ]
36
- public void testVectors ( )
42
+ public void testVectorsVersion1 ( )
37
43
{
38
44
IdentityKey aliceIdentityKey = new IdentityKey ( ALICE_IDENTITY , 0 ) ;
39
45
IdentityKey bobIdentityKey = new IdentityKey ( BOB_IDENTITY , 0 ) ;
46
+ byte [ ] aliceStableId = Encoding . UTF8 . GetBytes ( "+14152222222" ) ;
47
+ byte [ ] bobStableId = Encoding . UTF8 . GetBytes ( "+14153333333" ) ;
40
48
41
49
NumericFingerprintGenerator generator = new NumericFingerprintGenerator ( 5200 ) ;
42
- Fingerprint aliceFingerprint = generator . createFor ( VERSION ,
43
- Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ,
44
- Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ) ;
45
50
46
- Fingerprint bobFingerprint = generator . createFor ( VERSION ,
47
- Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ,
48
- Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ) ;
51
+ Fingerprint aliceFingerprint = generator . createFor ( VERSION_1 ,
52
+ aliceStableId , aliceIdentityKey ,
53
+ bobStableId , bobIdentityKey ) ;
54
+
55
+ Fingerprint bobFingerprint = generator . createFor ( VERSION_1 ,
56
+ bobStableId , bobIdentityKey ,
57
+ aliceStableId , aliceIdentityKey ) ;
58
+
59
+ Assert . AreEqual ( DISPLAYABLE_FINGERPRINT_V1 , aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
60
+ Assert . AreEqual ( DISPLAYABLE_FINGERPRINT_V1 , bobFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
61
+
62
+ CollectionAssert . AreEqual ( ALICE_SCANNABLE_FINGERPRINT_V1 , aliceFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ;
63
+ CollectionAssert . AreEqual ( BOB_SCANNABLE_FINGERPRINT_V1 , bobFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ;
64
+ }
65
+
66
+ [ TestMethod ]
67
+ public void testVectorsVersion2 ( )
68
+ {
69
+ IdentityKey aliceIdentityKey = new IdentityKey ( ALICE_IDENTITY , 0 ) ;
70
+ IdentityKey bobIdentityKey = new IdentityKey ( BOB_IDENTITY , 0 ) ;
71
+ byte [ ] aliceStableId = Encoding . UTF8 . GetBytes ( "+14152222222" ) ;
72
+ byte [ ] bobStableId = Encoding . UTF8 . GetBytes ( "+14153333333" ) ;
49
73
50
- Assert . AreEqual ( aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) , DISPLAYABLE_FINGERPRINT ) ;
51
- Assert . AreEqual ( bobFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) , DISPLAYABLE_FINGERPRINT ) ;
74
+ NumericFingerprintGenerator generator = new NumericFingerprintGenerator ( 5200 ) ;
75
+
76
+ Fingerprint aliceFingerprint = generator . createFor ( VERSION_2 ,
77
+ aliceStableId , aliceIdentityKey ,
78
+ bobStableId , bobIdentityKey ) ;
79
+
80
+ Fingerprint bobFingerprint = generator . createFor ( VERSION_2 ,
81
+ bobStableId , bobIdentityKey ,
82
+ aliceStableId , aliceIdentityKey ) ;
83
+
84
+ Assert . AreEqual ( DISPLAYABLE_FINGERPRINT_V2 , aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
85
+ Assert . AreEqual ( DISPLAYABLE_FINGERPRINT_V2 , bobFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
52
86
53
- CollectionAssert . AreEqual ( aliceFingerprint . getScannableFingerprint ( ) . getSerialized ( ) , ALICE_SCANNABLE_FINGERPRINT ) ;
54
- CollectionAssert . AreEqual ( bobFingerprint . getScannableFingerprint ( ) . getSerialized ( ) , BOB_SCANNABLE_FINGERPRINT ) ;
87
+ CollectionAssert . AreEqual ( ALICE_SCANNABLE_FINGERPRINT_V2 , aliceFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ;
88
+ CollectionAssert . AreEqual ( BOB_SCANNABLE_FINGERPRINT_V2 , bobFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ;
55
89
}
56
90
57
91
[ TestMethod ]
@@ -64,11 +98,11 @@ public void testMatchingFingerprints()
64
98
IdentityKey bobIdentityKey = new IdentityKey ( bobKeyPair . getPublicKey ( ) ) ;
65
99
66
100
NumericFingerprintGenerator generator = new NumericFingerprintGenerator ( 1024 ) ;
67
- Fingerprint aliceFingerprint = generator . createFor ( VERSION ,
101
+ Fingerprint aliceFingerprint = generator . createFor ( VERSION_1 ,
68
102
Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ,
69
103
Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ) ;
70
104
71
- Fingerprint bobFingerprint = generator . createFor ( VERSION ,
105
+ Fingerprint bobFingerprint = generator . createFor ( VERSION_1 ,
72
106
Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ,
73
107
Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ) ;
74
108
@@ -97,15 +131,15 @@ public void testMismatchingFingerprints()
97
131
IdentityKey mitmIdentityKey = new IdentityKey ( mitmKeyPair . getPublicKey ( ) ) ;
98
132
99
133
NumericFingerprintGenerator generator = new NumericFingerprintGenerator ( 1024 ) ;
100
- Fingerprint aliceFingerprint = generator . createFor ( VERSION ,
134
+ Fingerprint aliceFingerprint = generator . createFor ( VERSION_1 ,
101
135
Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ,
102
136
Encoding . UTF8 . GetBytes ( "+14153333333" ) , mitmIdentityKey ) ;
103
137
104
- Fingerprint bobFingerprint = generator . createFor ( VERSION ,
138
+ Fingerprint bobFingerprint = generator . createFor ( VERSION_1 ,
105
139
Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ,
106
140
Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ) ;
107
141
108
- Assert . AreNotEqual < string > ( aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ,
142
+ Assert . AreNotEqual ( aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ,
109
143
bobFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
110
144
111
145
Assert . IsFalse ( aliceFingerprint . getScannableFingerprint ( ) . compareTo ( bobFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ) ;
@@ -122,19 +156,43 @@ public void testMismatchingIdentifiers()
122
156
IdentityKey bobIdentityKey = new IdentityKey ( bobKeyPair . getPublicKey ( ) ) ;
123
157
124
158
NumericFingerprintGenerator generator = new NumericFingerprintGenerator ( 1024 ) ;
125
- Fingerprint aliceFingerprint = generator . createFor ( VERSION ,
159
+ Fingerprint aliceFingerprint = generator . createFor ( VERSION_1 ,
126
160
Encoding . UTF8 . GetBytes ( "+141512222222" ) , aliceIdentityKey ,
127
161
Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ) ;
128
162
129
- Fingerprint bobFingerprint = generator . createFor ( VERSION ,
163
+ Fingerprint bobFingerprint = generator . createFor ( VERSION_1 ,
130
164
Encoding . UTF8 . GetBytes ( "+14153333333" ) , bobIdentityKey ,
131
165
Encoding . UTF8 . GetBytes ( "+14152222222" ) , aliceIdentityKey ) ;
132
166
133
- Assert . AreNotEqual < string > ( aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ,
167
+ Assert . AreNotEqual ( aliceFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ,
134
168
bobFingerprint . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
135
169
Assert . IsFalse ( aliceFingerprint . getScannableFingerprint ( ) . compareTo ( bobFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ) ;
136
170
Assert . IsFalse ( bobFingerprint . getScannableFingerprint ( ) . compareTo ( aliceFingerprint . getScannableFingerprint ( ) . getSerialized ( ) ) ) ;
137
171
}
138
172
173
+ [ TestMethod ]
174
+ public void testDifferentVersionsMakeSameFingerPrintsButDifferentScannable ( )
175
+ {
176
+ IdentityKey aliceIdentityKey = new IdentityKey ( ALICE_IDENTITY , 0 ) ;
177
+ IdentityKey bobIdentityKey = new IdentityKey ( BOB_IDENTITY , 0 ) ;
178
+ byte [ ] aliceStableId = Encoding . UTF8 . GetBytes ( "+14152222222" ) ;
179
+ byte [ ] bobStableId = Encoding . UTF8 . GetBytes ( "+14153333333" ) ;
180
+
181
+ NumericFingerprintGenerator generator = new NumericFingerprintGenerator ( 5200 ) ;
182
+
183
+ Fingerprint aliceFingerprintV1 = generator . createFor ( VERSION_1 ,
184
+ aliceStableId , aliceIdentityKey ,
185
+ bobStableId , bobIdentityKey ) ;
186
+
187
+ Fingerprint aliceFingerprintV2 = generator . createFor ( VERSION_2 ,
188
+ aliceStableId , aliceIdentityKey ,
189
+ bobStableId , bobIdentityKey ) ;
190
+
191
+ Assert . IsTrue ( aliceFingerprintV1 . getDisplayableFingerprint ( ) . getDisplayText ( ) ==
192
+ aliceFingerprintV2 . getDisplayableFingerprint ( ) . getDisplayText ( ) ) ;
193
+
194
+ CollectionAssert . AreNotEqual ( aliceFingerprintV1 . getScannableFingerprint ( ) . getSerialized ( ) ,
195
+ aliceFingerprintV2 . getScannableFingerprint ( ) . getSerialized ( ) ) ;
196
+ }
139
197
}
140
198
}
0 commit comments