diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/pqc/crypto/test/BitStringTest.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/pqc/crypto/test/BitStringTest.java | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/pqc/crypto/test/BitStringTest.java b/bcprov/src/main/java/org/bouncycastle/pqc/crypto/test/BitStringTest.java new file mode 100644 index 0000000..85e1ffa --- /dev/null +++ b/bcprov/src/main/java/org/bouncycastle/pqc/crypto/test/BitStringTest.java @@ -0,0 +1,88 @@ +package org.bouncycastle.pqc.crypto.test; + +import junit.framework.TestCase; +import org.bouncycastle.pqc.crypto.ntru.IndexGenerator.BitString; +import org.bouncycastle.util.Arrays; + +public class BitStringTest + extends TestCase +{ + public void testAppendBitsByteArray() + { + BitString bs = new BitString(); + bs.appendBits((byte)78); + assertBitStringEquals(bs, new byte[]{78}); + bs.appendBits((byte)-5); + assertBitStringEquals(bs, new byte[]{78, -5}); + bs.appendBits((byte)127); + assertBitStringEquals(bs, new byte[]{78, -5, 127}); + bs.appendBits((byte)0); + assertBitStringEquals(bs, new byte[]{78, -5, 127, 0}); + bs.appendBits((byte)100); + assertBitStringEquals(bs, new byte[]{78, -5, 127, 0, 100}); + } + + private void assertBitStringEquals(BitString bs, byte[] arr) + { + byte[] bsBytes = bs.getBytes(); + + assertTrue(bsBytes.length >= arr.length); + arr = copyOf(arr, bsBytes.length); + assertTrue(Arrays.areEqual(arr, bsBytes)); + } + + public void testGetTrailing() + { + BitString bs = new BitString(); + bs.appendBits((byte)78); + BitString bs2 = bs.getTrailing(3); + assertBitStringEquals(bs2, new byte[]{6}); + + bs = new BitString(); + bs.appendBits((byte)78); + bs.appendBits((byte)-5); + bs2 = bs.getTrailing(9); + assertBitStringEquals(bs2, new byte[]{78, 1}); + + bs2.appendBits((byte)100); + assertBitStringEquals(bs2, new byte[]{78, -55}); + bs = bs2.getTrailing(13); + assertBitStringEquals(bs, new byte[]{78, 9}); + bs2 = bs2.getTrailing(11); + assertBitStringEquals(bs2, new byte[]{78, 1}); + + bs2.appendBits((byte)100); + assertBitStringEquals(bs2, new byte[]{78, 33, 3}); + bs2 = bs2.getTrailing(16); + assertBitStringEquals(bs2, new byte[]{78, 33}); + } + + public void testGetLeadingAsInt() + { + BitString bs = new BitString(); + bs.appendBits((byte)78); + bs.appendBits((byte)42); + assertEquals(1, bs.getLeadingAsInt(3)); + assertEquals(84, bs.getLeadingAsInt(9)); + assertEquals(338, bs.getLeadingAsInt(11)); + + BitString bs2 = bs.getTrailing(11); + assertBitStringEquals(bs2, new byte[]{78, 2}); + assertEquals(590, bs2.getLeadingAsInt(11)); + assertEquals(9, bs2.getLeadingAsInt(5)); + + bs2.appendBits((byte)115); + assertEquals(230, bs2.getLeadingAsInt(9)); + assertEquals(922, bs2.getLeadingAsInt(11)); + + bs2.appendBits((byte)-36); + assertEquals(55, bs2.getLeadingAsInt(6)); + } + + private byte[] copyOf(byte[] src, int length) + { + byte[] tmp = new byte[length]; + System.arraycopy(src, 0, tmp, 0, tmp.length > src.length ? src.length : tmp.length); + return tmp; + } +}
\ No newline at end of file |