package model.asn1; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class BitStringTest { @Test void testConstructor() { assertArrayEquals(new Byte[]{ 0x2, 0x3 }, new BitString(BitString.TAG, null, 0, new Byte[]{ 0x2, 0x3 }) .getVal()); assertEquals(3, new BitString(BitString.TAG, null, 3, new Byte[]{ 0x2, 0x8 }) .getUnused()); } @Test void testConvert() { // 00000010 00001000 // 00000000 01000001 = 65 assertArrayEquals(new Byte[]{ 65 }, new BitString(BitString.TAG, null, 3, new Byte[]{ 0x2, 0x8 }) .getConvertedVal()); assertArrayEquals(new Byte[]{ 0x2, 0x8 }, new BitString(BitString.TAG, null, 0, new Byte[]{ 0x2, 0x8 }) .getConvertedVal()); } @Test void testParse() throws ParseException { assertArrayEquals(new Byte[]{ 0x6e, 0x5d, -64 }, new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -64 }), false) .getVal()); assertEquals(6, new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -64 }), false) .getUnused()); assertArrayEquals(new Byte[]{ 0x01, -71, 0x77 }, new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -64 }), false) .getConvertedVal()); } @Test void testParseFail() { assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04 }), false)); // 0b11100000 assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -32 }), false)); // 0b11000001 assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -63 }), false)); // Unused bits = 8 assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x08, 0x6e, 0x5d, -64 }), false)); // Unused bits = 6 -> 7 assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x07, 0x6e, 0x5d, -64 }), false)); // Illegal unused bits: 8 and -1 assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x08, 0x6e, 0x5d, -64 }), false)); assertThrows(ParseException.class, () -> new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, -1, 0x6e, 0x5d, -64 }), false)); } @Test void testEncode() throws ParseException { assertArrayEquals(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -64 }, new BitString(new BytesReader(new Byte[]{ 0x03, 0x04, 0x06, 0x6e, 0x5d, -64 }), false) .encodeDER()); } }