92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
-
-
-
+
+
+
-
+
-
+
-
+
-
+
|
OFTruncatedDataException, [[OFData dataWithItems: "\x02\x02\x00"
count: 3] ASN1DERValue])
/* Bit string */
TEST(@"Parsing of bit string",
(bitString = [[OFData dataWithItems: "\x03\x01\x00"
count: 3] ASN1DERValue]) &&
[[bitString bitStringValue] isEqual: [OFData dataWithItems: ""
count: 0]] &&
[bitString bitStringLength] == 0 &&
[bitString.bitStringValue isEqual: [OFData dataWithItems: ""
count: 0]] &&
bitString.bitStringLength == 0 &&
(bitString = [[OFData dataWithItems: "\x03\x0D\x01Hello World\x80"
count: 15] ASN1DERValue]) &&
[[bitString bitStringValue]
[bitString.bitStringValue
isEqual: [OFData dataWithItems: "Hello World\x80"
count: 12]] &&
[bitString bitStringLength] == 97 &&
bitString.bitStringLength == 97 &&
(bitString = [[OFData dataWithItems: "\x03\x81\x80\x00xxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxxxx"
count: 131] ASN1DERValue]) &&
[[bitString bitStringValue]
[bitString.bitStringValue
isEqual: [OFData dataWithItems: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxxxxxxx"
count: 127]] &&
[bitString bitStringLength] == 127 * 8)
bitString.bitStringLength == 127 * 8)
EXPECT_EXCEPTION(@"Detection of invalid bit string #1",
OFInvalidFormatException, [[OFData dataWithItems: "\x03\x00"
count: 2] ASN1DERValue])
EXPECT_EXCEPTION(@"Detection of invalid bit string #2",
OFInvalidFormatException, [[OFData dataWithItems: "\x03\x01\x01"
|
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
-
+
-
+
-
+
-
+
|
OFInvalidFormatException, [[OFData dataWithItems: "\x05\x01\x00"
count: 3] ASN1DERValue])
/* Object Identifier */
TEST(@"Parsing of Object Identifier",
(array = [[[OFData dataWithItems: "\x06\x01\x27"
count: 3] ASN1DERValue]
subidentifiers]) && [array count] == 2 &&
subidentifiers]) && array.count == 2 &&
[[array objectAtIndex: 0] uIntMaxValue] == 0 &&
[[array objectAtIndex: 1] uIntMaxValue] == 39 &&
(array = [[[OFData dataWithItems: "\x06\x01\x4F"
count: 3] ASN1DERValue]
subidentifiers]) && [array count] == 2 &&
subidentifiers]) && array.count == 2 &&
[[array objectAtIndex: 0] uIntMaxValue] == 1 &&
[[array objectAtIndex: 1] uIntMaxValue] == 39 &&
(array = [[[OFData dataWithItems: "\x06\x02\x88\x37"
count: 4] ASN1DERValue]
subidentifiers]) && [array count] == 2 &&
subidentifiers]) && array.count == 2 &&
[[array objectAtIndex: 0] uIntMaxValue] == 2 &&
[[array objectAtIndex: 1] uIntMaxValue] == 999 &&
(array = [[[OFData dataWithItems: "\x06\x09\x2A\x86\x48\x86\xF7\x0D"
"\x01\x01\x0B"
count: 11] ASN1DERValue]
subidentifiers]) && [array count] == 7 &&
subidentifiers]) && array.count == 7 &&
[[array objectAtIndex: 0] uIntMaxValue] == 1 &&
[[array objectAtIndex: 1] uIntMaxValue] == 2 &&
[[array objectAtIndex: 2] uIntMaxValue] == 840 &&
[[array objectAtIndex: 3] uIntMaxValue] == 113549 &&
[[array objectAtIndex: 4] uIntMaxValue] == 1 &&
[[array objectAtIndex: 5] uIntMaxValue] == 1 &&
[[array objectAtIndex: 6] uIntMaxValue] == 11)
|
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
-
+
-
+
-
+
-
+
|
"xxxxxxxxxxxxxxxxxx"
count: 132] ASN1DERValue])
/* Sequence */
TEST(@"Parsing of sequence",
(array = [[OFData dataWithItems: "\x30\x00"
count: 2] ASN1DERValue]) &&
[array isKindOfClass: [OFArray class]] && [array count] == 0 &&
[array isKindOfClass: [OFArray class]] && array.count == 0 &&
(array = [[OFData dataWithItems: "\x30\x09\x02\x01\x7B\x0C\x04Test"
count: 11] ASN1DERValue]) &&
[array isKindOfClass: [OFArray class]] && [array count] == 2 &&
[array isKindOfClass: [OFArray class]] && array.count == 2 &&
[[array objectAtIndex: 0] integerValue] == 123 &&
[[[array objectAtIndex: 1] stringValue] isEqual: @"Test"])
EXPECT_EXCEPTION(@"Detection of truncated sequence #1",
OFTruncatedDataException, [[OFData dataWithItems: "\x30\x01"
count: 2] ASN1DERValue])
EXPECT_EXCEPTION(@"Detection of truncated sequence #2",
OFTruncatedDataException,
[[OFData dataWithItems: "\x30\x04\x02\x01\x01\x00\x00"
count: 7] ASN1DERValue])
/* Set */
TEST(@"Parsing of set",
(set = [[OFData dataWithItems: "\x31\x00"
count: 2] ASN1DERValue]) &&
[set isKindOfClass: [OFSet class]] && [set count] == 0 &&
[set isKindOfClass: [OFSet class]] && set.count == 0 &&
(set = [[OFData dataWithItems: "\x31\x09\x02\x01\x7B\x0C\x04Test"
count: 11] ASN1DERValue]) &&
[set isKindOfClass: [OFSet class]] && [set count] == 2 &&
[set isKindOfClass: [OFSet class]] && set.count == 2 &&
(enumerator = [set objectEnumerator]) &&
[[enumerator nextObject] integerValue] == 123 &&
[[[enumerator nextObject] stringValue] isEqual: @"Test"])
EXPECT_EXCEPTION(@"Detection of invalid set",
OFInvalidFormatException,
[[OFData dataWithItems: "\x31\x06\x02\x01\x02\x02\x01\x01"
|