package generated.javacard.mondex.purse;

import javacard.security.DESKey;
import javacard.security.KeyBuilder;
import javacard.security.RandomData;

public class Symmkey extends Key implements Codeable, PlainData {

	public final static short SYMMKEYLENGTH = 24;

	public byte[] key;
	private DESKey apikey;
	private static RandomData rd = RandomData
			.getInstance(RandomData.ALG_SECURE_RANDOM);

	public Symmkey() {
		key = new byte[SYMMKEYLENGTH];
		apikey = (DESKey) KeyBuilder.buildKey(KeyBuilder.TYPE_DES,
				KeyBuilder.LENGTH_DES3_3KEY, false);
	}

	public Symmkey(byte[] key) {
		this();
		Arrays.copy(key, this.key);
		updateKey();
	}

	public static Symmkey generateKey() {
		return Store.newSymmkey().instGenerateKey();
	}

	private Symmkey instGenerateKey() {
		rd.generateData(key, (short) 0, (short) Symmkey.SYMMKEYLENGTH);
		updateKey();
		return this;
	}

	public boolean equals(Codeable other) {
		if (getCode() != other.getCode())
			return false;
		return Arrays.equals(key, ((Symmkey) other).key);
	}

	public byte getCode() {
		return Code.SYMMKEY;
	}

	public void updateKey() {
		apikey.setKey(key, (short) 0);
	}

	public void copy(Symmkey s) {
		Arrays.copy(s.key, key);
		apikey.setKey(key, (short) 0);
	}

	public boolean isSymmKey() {
		return true;
	}

	public javacard.security.Key toAPIKey() {
		return apikey;
	}
}