package org.apache.haox.asn1.type;
import org.apache.haox.asn1.UniversalTag;
import java.io.IOException;
public class Asn1BitString extends Asn1Simple<byte[]>
{
private int padding;
public Asn1BitString() {
this(null);
}
public Asn1BitString(byte[] value) {
this(value, 0);
}
public Asn1BitString(byte[] value, int padding) {
super(UniversalTag.BIT_STRING, value);
this.padding = padding;
}
public void setPadding(int padding) {
this.padding = padding;
}
public int getPadding() {
return padding;
}
@Override
protected int encodingBodyLength() {
return getValue().length + 1;
}
@Override
protected void toBytes() {
byte[] bytes = new byte[encodingBodyLength()];
bytes[0] = (byte)padding;
System.arraycopy(getValue(), 0, bytes, 1, bytes.length - 1);
setBytes(bytes);
}
@Override
protected void toValue() throws IOException {
byte[] bytes = getBytes();
if (bytes.length < 1) {
throw new IOException("Bad stream, zero bytes found for bitstring");
}
int paddingBits = bytes[0];
validatePaddingBits(paddingBits);
setPadding(paddingBits);
byte[] newBytes = new byte[bytes.length - 1];
if (bytes.length > 1) {
System.arraycopy(bytes, 1, newBytes, 0, bytes.length - 1);
}
setValue(newBytes);
}
private void validatePaddingBits(int paddingBits) throws IOException {
if (paddingBits < 0 || paddingBits > 7) {
throw new IOException("Bad padding number: " + paddingBits + ", should be in [0, 7]");
}
}
}