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; } }