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; /** EncryptionKey ::= SEQUENCE { keytype [0] Int32 -- actually encryption type --, keyvalue [1] OCTET STRING } */ public class EncryptionKey extends KrbSequenceType { private static int KEY_TYPE = 0; private static int KEY_VALUE = 1; private int kvno = -1; static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] { new Asn1FieldInfo(KEY_TYPE, 0, Asn1Integer.class), new Asn1FieldInfo(KEY_VALUE, 1, Asn1OctetString.class) }; public EncryptionKey() { super(fieldInfos); } public EncryptionKey(int keyType, byte[] keyData) { this(keyType, keyData, -1); } public EncryptionKey(int keyType, byte[] keyData, int kvno) { this(EncryptionType.fromValue(keyType), keyData, kvno); } public EncryptionKey(EncryptionType keyType, byte[] keyData) { this(keyType, keyData, -1); } public EncryptionKey(EncryptionType keyType, byte[] keyData, int kvno) { this(); setKeyType(keyType); setKeyData(keyData); setKvno(kvno); } public EncryptionType getKeyType() { Integer value = getFieldAsInteger(KEY_TYPE); return EncryptionType.fromValue(value); } public void setKeyType(EncryptionType keyType) { setFieldAsInt(KEY_TYPE, keyType.getValue()); } public byte[] getKeyData() { return getFieldAsOctets(KEY_VALUE); } public void setKeyData(byte[] keyData) { setFieldAsOctets(KEY_VALUE, keyData); } public void setKvno(int kvno) { this.kvno = kvno; } public int getKvno() { return kvno; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; EncryptionKey that = (EncryptionKey) o; if (kvno != -1 && that.kvno != -1 && kvno != that.kvno) return false; if (getKeyType() != that.getKeyType()) return false; return Arrays.equals(getKeyData(), that.getKeyData()); } }