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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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
128
129
130
131
132
133
|
package model.csr;
import model.asn1.ASN1Object;
import model.asn1.Null;
import model.asn1.ObjectIdentifier;
import model.asn1.PrintableString;
import model.asn1.exceptions.ParseException;
import model.asn1.parsing.BytesReader;
import model.x501.AttributeTypeAndValue;
import model.x501.RelativeDistinguishedName;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static model.asn1.ASN1Object.TAG_SET;
import static model.asn1.ObjectIdentifier.OID_C;
import static model.asn1.ObjectIdentifier.OID_OU;
import static org.junit.jupiter.api.Assertions.*;
public class ValuesTest {
// An opaque value of extended key usage block.
private ASN1Object extKeyUsage;
// Example SubjectAlternativeName request attribute.
private ASN1Object san;
private Values values;
@BeforeEach
void setup() throws ParseException {
extKeyUsage = ASN1Object.parse(new BytesReader(new Byte[]{
0x30, 0x1F, // SEQUENCE (AttributeValue)
0x30, 0x1D, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x25, // 2.5.29.37 extKeyUsage
0x04, 0x16, // OCTET STRING
0x30, 0x14, // SEQUENCE
// 1.3.6.1.5.5.7.3.1 serverAuth
0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01,
// 1.3.6.1.5.5.7.3.2 clientAuth
0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02
}), false);
san = ASN1Object.parse(new BytesReader(new Byte[]{
0x30, 0x21, // SEQUENCE (AttributeValue)
0x30, 0x1F, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x11, // 2.5.29.17 subjectAltName
0x04, 0x18, // OCTET STRING
0x30, 0x16, // SEQUENCE
-126, 0x14, // [2]
0x6C, 0x70, 0x2D, 0x62, 0x32, 0x35, 0x35, 0x2E, 0x61, // lp-b255.yuuta.moe
0x64, 0x2E, 0x79, 0x75, 0x75, 0x74, 0x61, 0x2E, 0x6D, 0x6F, 0x65
}), false);
values = new Values(TAG_SET, null, new ASN1Object[]{
extKeyUsage,
san
});
}
@Test
void testConstructor() {
assertEquals(0x1F, values.getArray()[0].getLength());
assertEquals(0x21, values.getArray()[1].getLength());
}
@Test
void testParse() throws ParseException {
assertEquals(0x1F, new Values(new BytesReader(new Byte[]{
0x31, 0x21,
0x30, 0x1F, // SEQUENCE (AttributeValue)
0x30, 0x1D, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x25, // 2.5.29.37 extKeyUsage
0x04, 0x16, // OCTET STRING
0x30, 0x14, // SEQUENCE
// 1.3.6.1.5.5.7.3.1 serverAuth
0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01,
// 1.3.6.1.5.5.7.3.2 clientAuth
0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02
}), false).getArray()[0].getLength());
assertEquals(0x21, new Values(new BytesReader(new Byte[]{
0x31, 0x23,
0x30, 0x21, // SEQUENCE (AttributeValue)
0x30, 0x1F, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x11, // 2.5.29.17 subjectAltName
0x04, 0x18, // OCTET STRING
0x30, 0x16, // SEQUENCE
-126, 0x14, // [2]
0x6C, 0x70, 0x2D, 0x62, 0x32, 0x35, 0x35, 0x2E, 0x61, // lp-b255.yuuta.moe
0x64, 0x2E, 0x79, 0x75, 0x75, 0x74, 0x61, 0x2E, 0x6D, 0x6F, 0x65
}), false).getArray()[0].getLength());
}
@Test
void testParseFail() {
// Incorrect length
assertThrows(ParseException.class, () -> new Values(new BytesReader(new Byte[]{
0x31, 0x29, // Incorrect length!
0x30, 0x21, // SEQUENCE (AttributeValue)
0x30, 0x1F, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x11, // 2.5.29.17 subjectAltName
0x04, 0x18, // OCTET STRING
0x30, 0x16, // SEQUENCE
-126, 0x14, // [2]
0x6C, 0x70, 0x2D, 0x62, 0x32, 0x35, 0x35, 0x2E, 0x61, // lp-b255.yuuta.moe
0x64, 0x2E, 0x79, 0x75, 0x75, 0x74, 0x61, 0x2E, 0x6D, 0x6F, 0x65
}), false));
}
@Test
void testEncode() {
assertArrayEquals(new Byte[]{
0x31, 68,
0x30, 0x1F, // SEQUENCE (AttributeValue)
0x30, 0x1D, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x25, // 2.5.29.37 extKeyUsage
0x04, 0x16, // OCTET STRING
0x30, 0x14, // SEQUENCE
// 1.3.6.1.5.5.7.3.1 serverAuth
0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01,
// 1.3.6.1.5.5.7.3.2 clientAuth
0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02,
0x30, 0x21, // SEQUENCE (AttributeValue)
0x30, 0x1F, // SEQUENCE
0x06, 0x03, 0x55, 0x1D, 0x11, // 2.5.29.17 subjectAltName
0x04, 0x18, // OCTET STRING
0x30, 0x16, // SEQUENCE
-126, 0x14, // [2]
0x6C, 0x70, 0x2D, 0x62, 0x32, 0x35, 0x35, 0x2E, 0x61, // lp-b255.yuuta.moe
0x64, 0x2E, 0x79, 0x75, 0x75, 0x74, 0x61, 0x2E, 0x6D, 0x6F, 0x65
}, values.encodeDER());
}
}
|