aboutsummaryrefslogtreecommitdiff
path: root/src/test/model/csr/ValuesTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/model/csr/ValuesTest.java')
-rw-r--r--src/test/model/csr/ValuesTest.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/test/model/csr/ValuesTest.java b/src/test/model/csr/ValuesTest.java
new file mode 100644
index 0000000..93229a4
--- /dev/null
+++ b/src/test/model/csr/ValuesTest.java
@@ -0,0 +1,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());
+ }
+}