class StrictBitVector implements BitVector {

  public static StrictBitVector concat(StrictBitVector... bitVectors) {
    // compute length of result byte array and number of bits
    int combinedBitLength = 0;
    for (StrictBitVector bitVector : bitVectors) {
      combinedBitLength += bitVector.getSize();
    }
    byte[] combined = new byte[combinedBitLength / 8];
    int offset = 0;
    for (StrictBitVector bitVector : bitVectors) {
      byte[] rawBytes = bitVector.toByteArray();
      System.arraycopy(rawBytes, 0, combined, offset, rawBytes.length);
      offset += rawBytes.length;
    }
    return new StrictBitVector(combined);
  }

  public  StrictBitVector(byte[] bits);
  public  StrictBitVector(int size);
  public  StrictBitVector(int size, Drbg rand);

}