package org.apache.kerberos.kerb.spec.common;
import org.apache.haox.asn1.type.Asn1FieldInfo;
import org.apache.haox.asn1.type.Asn1Integer;
import org.apache.haox.asn1.type.Asn1OctetString;
import org.apache.kerberos.kerb.spec.KrbSequenceType;
import java.util.Arrays;
/**
Checksum ::= SEQUENCE {
cksumtype [0] Int32,
checksum [1] OCTET STRING
}
*/
public class CheckSum extends KrbSequenceType {
private static int CKSUM_TYPE = 0;
private static int CHECK_SUM = 1;
static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
new Asn1FieldInfo(CKSUM_TYPE, 0, Asn1Integer.class),
new Asn1FieldInfo(CHECK_SUM, 1, Asn1OctetString.class)
};
public CheckSum() {
super(fieldInfos);
}
public CheckSum(CheckSumType cksumType, byte[] checksum) {
this();
setCksumtype(cksumType);
setChecksum(checksum);
}
public CheckSum(int cksumType, byte[] checksum) {
this(CheckSumType.fromValue(cksumType), checksum);
}
public CheckSumType getCksumtype() {
Integer value = getFieldAsInteger(CKSUM_TYPE);
return CheckSumType.fromValue(value);
}
public void setCksumtype(CheckSumType cksumtype) {
setFieldAsInt(CKSUM_TYPE, cksumtype.getValue());
}
public byte[] getChecksum() {
return getFieldAsOctets(CHECK_SUM);
}
public void setChecksum(byte[] checksum) {
setFieldAsOctets(CHECK_SUM, checksum);
}
@Override
public boolean equals(Object other) {
if (this == other) return true;
if (other == null || getClass() != other.getClass()) return false;
CheckSum that = (CheckSum) other;
if (getCksumtype() != that.getCksumtype()) return false;
return Arrays.equals(getChecksum(), that.getChecksum());
}
public boolean isEqual(CheckSum other) {
return this.equals(other);
}
public boolean isEqual(byte[] cksumBytes) {
return Arrays.equals(getChecksum(), cksumBytes);
}
}