add APDUResponse class and test
This commit is contained in:
parent
dfdc61bb5e
commit
9e2596f835
|
@ -0,0 +1,53 @@
|
|||
package im.status.applet_installer_test.appletinstaller;
|
||||
|
||||
public class APDUResponse {
|
||||
public static int SW_OK = 0x9000;
|
||||
public static int SW_SECURITY_CONDITION_NOT_SATISFIED = 0x6982;
|
||||
public static int SW_AUTHENTICATION_METHOD_BLOCKED = 0x6983;
|
||||
|
||||
private byte[] apdu;
|
||||
private byte[] data;
|
||||
private int sw;
|
||||
private int sw1;
|
||||
private int sw2;
|
||||
|
||||
public APDUResponse(byte[] apdu) {
|
||||
if (apdu.length < 2) {
|
||||
throw new IllegalArgumentException("APDU response must be at least 2 bytes");
|
||||
|
||||
}
|
||||
this.apdu = apdu;
|
||||
this.parse();
|
||||
}
|
||||
|
||||
private void parse() {
|
||||
int length = this.apdu.length;
|
||||
|
||||
this.sw1 = this.apdu[length - 2] & 0xff;
|
||||
this.sw2 = this.apdu[length - 1] & 0xff;
|
||||
this.sw = (this.sw1 << 8) | this.sw2;
|
||||
|
||||
this.data = new byte[length - 2];
|
||||
System.arraycopy(this.apdu, 0, this.data, 0, length - 2);
|
||||
}
|
||||
|
||||
public boolean isOK() {
|
||||
return this.sw == SW_OK;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
public int getSw() {
|
||||
return this.sw;
|
||||
}
|
||||
|
||||
public int getSw1() {
|
||||
return this.sw1;
|
||||
}
|
||||
|
||||
public int getSw2() {
|
||||
return this.sw2;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package im.status.applet_installer_test.appletinstaller;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class APDUResponseTest {
|
||||
@Test
|
||||
public void parsing() {
|
||||
byte[] apdu = HexUtils.hexStringToByteArray("000002650183039536622002003b5e508f751c0af3016e3fbc23d3a69000");
|
||||
APDUResponse resp = new APDUResponse(apdu);
|
||||
|
||||
assertEquals(0x9000, resp.getSw());
|
||||
assertEquals(0x90, resp.getSw1());
|
||||
assertEquals(0x00, resp.getSw2());
|
||||
|
||||
String expected = "000002650183039536622002003B5E508F751C0AF3016E3FBC23D3A6";
|
||||
assertEquals(expected, HexUtils.byteArrayToHexString(resp.getData()));
|
||||
assertTrue(resp.isOK());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue