a7firm/src/sega/a7/PrivkeyModulusWrite.java

43 lines
1.7 KiB
Java

package sega.a7;
import javacard.security.MessageDigest;
public class PrivkeyModulusWrite extends AuthCommand {
private static final short RECV_PACKET_SIZE = 302;
private static final byte AUTH_LEVEL = 2;
private static final short PARAM_SIZE = 46;
public PrivkeyModulusWrite(short cmd, AppData data, MakePacket packet, MessageDigest sha1, HmacSha1 hmacSha1,
Crypt crypt) {
super(cmd, RECV_PACKET_SIZE, PARAM_SIZE, AUTH_LEVEL, data, packet, sha1, hmacSha1, crypt);
}
public short core(byte[] data, short dataOffset, short dataLength) {
if (this.m_ee_data.getSflag_ee())
return AppConfig.A7_EEPWRITE_DISABLE;
short ramD_dataSize = (short) 256;
byte[] ramD_newRSAKey = this.m_ee_data.getGeneralBuffer_ramD();
if (ramD_newRSAKey.length < ramD_dataSize)
return AppConfig.A7_FAIL;
short ramD_decSize = decData(data, (short) (6 + dataOffset), ramD_dataSize, ramD_newRSAKey, (short) 0);
if (ramD_dataSize > ramD_decSize)
return AppConfig.A7_FAIL;
if (!this.m_ee_data.setRsaPriKeyModulus_ee(ramD_newRSAKey, (short) 0, (short) 256))
return AppConfig.A7_EEP_WRITEFAIL;
this.m_ee_data.activeRssaModulusUpdate_ramD();
if (this.m_ee_data.getRsaExponentUpdate_ramD()) {
byte[] exponent = this.m_ee_data.getRsaPriExponent_ee();
byte[] modulus = this.m_ee_data.getRsaPriModulus_ee();
if (!changeRsaKey_ee(modulus, (short) 0, (short) modulus.length, exponent, (short) 0,
(short) exponent.length))
return AppConfig.A7_FAIL;
}
return AppConfig.A7_SUCCESS;
}
}