41 lines
2.0 KiB
Java
41 lines
2.0 KiB
Java
package sega.a7;
|
|
|
|
import javacard.framework.Util;
|
|
import javacard.security.MessageDigest;
|
|
import javacard.security.RandomData;
|
|
|
|
public class PlayCountRead extends AuthCommand {
|
|
private static final short RECV_PACKET_SIZE = 46;
|
|
private static final byte AUTH_LEVEL = 2;
|
|
private static final short PARAM_SIZE = 62;
|
|
private static final short PLAY_COUNT_VALUE_SIZE = 4;
|
|
private static final short RANDOM_VALUE_SIZE = 12;
|
|
private static final short ENC_DATA_SIZE = 16;
|
|
private RandomData m_ee_rand;
|
|
|
|
public PlayCountRead(short cmd, AppData data, MakePacket packet, MessageDigest sha1,
|
|
HmacSha1 hmacSha1, Crypt crypt, RandomData rand) {
|
|
super(cmd, RECV_PACKET_SIZE, PARAM_SIZE, AUTH_LEVEL, data, packet, sha1, hmacSha1, crypt);
|
|
this.m_ee_rand = rand;
|
|
}
|
|
|
|
public short core(byte[] data, short dataOffset, short dataLength) {
|
|
byte[] ramD_playCount = this.m_ee_data.getGeneralBuffer_ramD();
|
|
if (ramD_playCount.length < PLAY_COUNT_VALUE_SIZE + RANDOM_VALUE_SIZE + ENC_DATA_SIZE)
|
|
return AppConfig.A7_FAIL;
|
|
this.m_ee_rand.generateData(ramD_playCount, (short) 0, (short) (PLAY_COUNT_VALUE_SIZE + RANDOM_VALUE_SIZE));
|
|
this.m_ee_data.getPlayCounter_ee(ramD_playCount, (short) 0, PLAY_COUNT_VALUE_SIZE);
|
|
short ramD_encSize = encData(ramD_playCount, (short) 0, ENC_DATA_SIZE, ramD_playCount,
|
|
(short) (PLAY_COUNT_VALUE_SIZE + RANDOM_VALUE_SIZE));
|
|
if (ramD_encSize != ENC_DATA_SIZE)
|
|
return AppConfig.A7_FAIL;
|
|
|
|
this.m_ramD_outDataInfo[AppConfig.SEND_BUUFER_INFO_OFFSET] = 16;
|
|
this.m_ramD_outDataInfo[AppConfig.SEND_BUUFER_INFO_SIZE] = ramD_encSize;
|
|
Util.arrayCopyNonAtomic(ramD_playCount, this.m_ramD_outDataInfo[AppConfig.SEND_BUUFER_INFO_OFFSET],
|
|
this.m_ramD_outData, this.m_ramD_outDataInfo[AppConfig.SEND_BUUFER_INFO_OFFSET],
|
|
this.m_ramD_outDataInfo[AppConfig.SEND_BUUFER_INFO_SIZE]);
|
|
return AppConfig.A7_SUCCESS;
|
|
}
|
|
}
|