package model.x501; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; import model.TestConstants; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class NameTest { @Test void testConstructor() { assertEquals("users", TestConstants.NAME_1.getRdnSequence()[1].getArray()[0].getValue().toString()); assertEquals("CN", TestConstants.NAME_2.getRdnSequence()[2].getArray()[0].getValue().toString()); } @Test void testParse() throws ParseException { assertEquals("CA", new Name(new BytesReader(new Byte[]{ 0x30, 45, // Name 0x31, 14, // RDN[0] 0x30, 12, // KV[0] 0x6, 3, 0x55, 0x04, 0x03, // CN 0x13, 5, 'y', 'u', 'u', 't', 'a', // yuuta 0x31, 14, // RDN[1] 0x30, 12, // KV[0] 0x6, 3, 0x55, 0x04, 0xB, // OU 0x13, 5, 'u', 's', 'e', 'r', 's', // users 0x31, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'A' // CA }), false).getRdnSequence()[2].getArray()[0].getValue().toString()); assertEquals("SN=Qwq", new Name(new BytesReader(new Byte[]{ 0x30, 38, // Name 0x31, 12, // RDN[0] 0x30, 10, // KV[0] 0x6, 3, 0x55, 0x04, 0x04, // CN 0x13, 3, 'Q', 'w', 'q', // Qwq 0x31, 9, // RDN[1] 0x30, 7, // KV[0] 0x6, 3, 0x55, 0x04, 0xA, // O 0x13, 2, 'I', 'T', // IT 0x31, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'N' // CN }), false).getRdnSequence()[0].toString()); } @Test void testParseFail() { assertThrows(ParseException.class, () -> new Name(new BytesReader(new Byte[]{ 0x30, 38, // Name // Wrong tag here 0x30, 12, // RDN[0] 0x30, 10, // KV[0] 0x6, 3, 0x55, 0x04, 0x04, // CN 0x13, 3, 'Q', 'w', 'q', // Qwq 0x31, 9, // RDN[1] 0x30, 7, // KV[0] 0x6, 3, 0x55, 0x04, 0xA, // O 0x13, 2, 'I', 'T', // IT 0x31, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'N' // CN }), false)); assertThrows(ParseException.class, () -> new Name(new BytesReader(new Byte[]{ 0x30, 38, // Name 0x31, 12, // RDN[0] 0x30, 10, // KV[0] 0x6, 3, 0x55, 0x04, 0x04, // CN 0x13, 3, 'Q', 'w', 'q', // Qwq 0x31, 9, // RDN[1] // Wrong tag here 0x31, 7, // KV[0] 0x6, 3, 0x55, 0x04, 0xA, // O 0x13, 2, 'I', 'T', // IT 0x31, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'N' // CN }), false)); assertThrows(ParseException.class, () -> new Name(new BytesReader(new Byte[]{ 0x30, 38, // Name 0x31, 12, // RDN[0] 0x30, 10, // KV[0] 0x6, 3, 0x55, 0x04, 0x04, // CN 0x13, 3, 'Q', 'w', 'q', // Qwq 0x31, 9, // RDN[1] 0x30, 7, // KV[0] 0x6, 3, 0x55, 0x04, 0xA, // O 0x13, 2, 'I', 'T', // IT // Wrong tag here 0x30, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'N' // CN }), false)); } @Test void testEncode() { assertArrayEquals(new Byte[]{ 0x30, 45, // Name 0x31, 14, // RDN[0] 0x30, 12, // KV[0] 0x6, 3, 0x55, 0x04, 0x03, // CN 0x13, 5, 'y', 'u', 'u', 't', 'a', // yuuta 0x31, 14, // RDN[1] 0x30, 12, // KV[0] 0x6, 3, 0x55, 0x04, 0xB, // OU 0x13, 5, 'u', 's', 'e', 'r', 's', // users 0x31, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'A' // CA }, TestConstants.NAME_1.encodeDER()); assertArrayEquals(new Byte[]{ 0x30, 40, // Name 0x31, 12, // RDN[0] 0x30, 10, // KV[0] 0x6, 3, 0x55, 0x04, 0x04, // CN 0x13, 3, 'Q', 'w', 'q', // Qwq 0x31, 11, // RDN[1] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0xA, // O 0x13, 2, 'I', 'T', // IT 0x31, 11, // RDN[2] 0x30, 9, // KV[0] 0x6, 3, 0x55, 0x04, 0x6, // C 0x13, 2, 'C', 'N' // CN }, TestConstants.NAME_2.encodeDER()); } @Test void testToString() { assertEquals("CN=yuuta,OU=users,C=CA", TestConstants.NAME_1.toString()); assertEquals("SN=Qwq,O=IT,C=CN", TestConstants.NAME_2.toString()); } }