aboutsummaryrefslogtreecommitdiff
path: root/src/test/model/csr/ValuesTest.java
blob: 93229a4eaac0b8c8a7e38d5ec43f4b6d8aecfdb5 (plain)
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());
    }
}