| 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; |
| } |
| } |