本文整理汇总了Java中javacard.framework.ISO7816.OFFSET_CLA属性的典型用法代码示例。如果您正苦于以下问题:Java ISO7816.OFFSET_CLA属性的具体用法?Java ISO7816.OFFSET_CLA怎么用?Java ISO7816.OFFSET_CLA使用的例子?那么恭喜您, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类javacard.framework.ISO7816
的用法示例。
在下文中一共展示了ISO7816.OFFSET_CLA属性的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: get_data
public void get_data(APDU apdu, byte[] buf)
{
//verify that the class for this instruction is correct
if((short)(buf[ISO7816.OFFSET_CLA] & 0xFF) != 0x80)
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
//check state - this command only works in the PERSO state
if(PROFILE.STATE != PERSO)
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
//check that P1 & P2 are correct
if(buf[ISO7816.OFFSET_P1] != (byte) 0x00 || (byte)buf[ISO7816.OFFSET_P2] != (byte) 0xCF)
ISOException.throwIt((short)0x6A88); //referenced data not found
//build response message
apdu.setOutgoing();
apdu.setOutgoingLength((short)13);
buf[0]=(byte)0xCF; //Key Data Tag
buf[1]=(byte)11; //length
buf[2]=PROFILE.VER_KMC;
Util.arrayCopyNonAtomic(PROFILE.KMC_ID,(short)0,buf,(short)3,(short)6);
Util.arrayCopyNonAtomic(PROFILE.CSN,(short)0,buf,(short)9,(short)4);
apdu.sendBytes((short)0,(short)13);
}
示例2: get_data
public void get_data(APDU apdu, byte[] buf) {
// verify that the class for this instruction is correct
if ((short) (buf[ISO7816.OFFSET_CLA] & 0xFF) != 0x80)
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
// check state - this command only works in the PERSO state
if (PROFILE.STATE != PERSO)
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
// check that P1 & P2 are correct
if (buf[ISO7816.OFFSET_P1] != (byte) 0x00 || (byte) buf[ISO7816.OFFSET_P2] != (byte) 0xCF)
ISOException.throwIt((short) 0x6A88); //referenced data not found
// build response message
apdu.setOutgoing();
apdu.setOutgoingLength((short) 13);
buf[0] = (byte) 0xCF; //Key Data Tag
buf[1] = (byte) 11; //length
buf[2] = PROFILE.VER_KMC;
Util.arrayCopyNonAtomic(PROFILE.KMC_ID, (short) 0, buf, (short) 3, (short) 6);
Util.arrayCopyNonAtomic(PROFILE.CSN, (short) 0, buf, (short) 9, (short) 4);
apdu.sendBytes((short) 0, (short) 13);
}
示例3: process
public void process(APDU apdu) throws ISOException {
byte[] buff = apdu.getBuffer();
if (selectingApplet()) {
return;
}
// account for logical channels
if (((byte) (buff[ISO7816.OFFSET_CLA] & (byte) 0xFC)) != CLA) {
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch (buff[ISO7816.OFFSET_INS]) {
case INS_GET_STATUS:
getInitStatus(apdu);
break;
case INS_GEN_RANDOM:
prng(apdu);
break;
case INS_GEN_KEY:
generateKeys(apdu);
break;
case INS_ENCRYPT:
encrypt(apdu);
break;
case INS_DECRYPT:
decrypt(apdu);
break;
case INS_CLEAR:
clear(apdu);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
示例4: process
public void process(APDU apdu) throws ISOException {
byte[] buffer = apdu.getBuffer();
if (selectingApplet()) {
if (attestationCertificateSet) {
Util.arrayCopyNonAtomic(VERSION, (short)0, buffer, (short)0, (short)VERSION.length);
apdu.setOutgoingAndSend((short)0, (short)VERSION.length);
}
return;
}
if (buffer[ISO7816.OFFSET_CLA] == PROPRIETARY_CLA) {
if (attestationCertificateSet) {
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
}
switch(buffer[ISO7816.OFFSET_INS]) {
case FIDO_ADM_SET_ATTESTATION_CERT:
handleSetAttestationCert(apdu);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
else if (buffer[ISO7816.OFFSET_CLA] == FIDO_CLA) {
if (!attestationCertificateSet) {
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
}
switch(buffer[ISO7816.OFFSET_INS]) {
case FIDO_INS_ENROLL:
handleEnroll(apdu);
break;
case FIDO_INS_SIGN:
handleSign(apdu);
break;
case FIDO_INS_VERSION:
handleVersion(apdu);
break;
case ISO_INS_GET_DATA:
handleGetData(apdu);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
else {
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
}
示例5: process
@Override
public void process(APDU apdu)
{
if (selectingApplet())
return;
byte[] buffer = apdu.getBuffer();
if (buffer[ISO7816.OFFSET_CLA] != BASE_CLA)
{
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
if (equals(ROOT, buffer))
{
ISOException.throwIt(ISO7816.SW_NO_ERROR);
}
else if (equals(READ_StatusVD, buffer))
{
response(apdu, statusData);
}
// else if (equals(READ_VERSION_RECORD1, buffer))
// {
// response(apdu, versionR1Data);
// }
// else if (equals(READ_VERSION_RECORD2, buffer))
// {
// response(apdu, versionR2Data);
// }
// else if (equals(READ_VERSION_RECORD3, buffer))
// {
// response(apdu, versionR3Data);
// }
else if (equals(READ_ATR, buffer))
{
response(apdu, atrData);
}
else if (equals(HCA, buffer))
{
ISOException.throwIt(ISO7816.SW_NO_ERROR);
}
else if (equals(READ_PD, buffer))
{
response(apdu, pData);
}
else if (equals(READ_VD, buffer))
{
response(apdu, vData);
}
else
{
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
示例6: process
@Override
public void process(APDU apdu)
{
if (selectingApplet())
return;
byte[] buffer = apdu.getBuffer();
if (buffer[ISO7816.OFFSET_CLA] != BASE_CLA)
{
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
if (equals(ROOT, buffer))
{
ISOException.throwIt(ISO7816.SW_NO_ERROR);
}
else if (equals(READ_StatusVD, buffer))
{
response(apdu, statusData);
}
else if (equals(READ_VERSION_RECORD1, buffer))
{
response(apdu, versionR1Data);
}
else if (equals(READ_VERSION_RECORD2, buffer))
{
response(apdu, versionR2Data);
}
else if (equals(READ_VERSION_RECORD3, buffer))
{
response(apdu, versionR3Data);
}
else if (equals(READ_ATR, buffer))
{
response(apdu, atrData);
}
else if (equals(HCA, buffer))
{
ISOException.throwIt(ISO7816.SW_NO_ERROR);
}
else if (equals(READ_PD, buffer))
{
response(apdu, pData);
}
else if (equals(READ_VD, buffer))
{
response(apdu, vData);
}
else
{
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
示例7: process
/**
* \brief Processes an incoming APDU.
*
* \see APDU.
*
* \param apdu The incoming APDU.
*/
public void process(APDU apdu) {
byte buffer[] = apdu.getBuffer();
byte ins = buffer[ISO7816.OFFSET_INS];
// No secure messaging at the moment
if((buffer[ISO7816.OFFSET_CLA] & 0x0C) != 0) {
ISOException.throwIt(ISO7816.SW_SECURE_MESSAGING_NOT_SUPPORTED);
}
transmitManager.processChainInitialization(apdu);
if((buffer[ISO7816.OFFSET_CLA] & 0xE0) == 0) {
switch (ins) {
case INS_ACTIVATE_FILE:
fs.processActivateFile(apdu);
break;
case INS_CREATE_FILE:
fs.processCreateFile(apdu);
break;
case INS_CHANGE_REFERENCE_DATA:
pinManager.processChangeReferenceData(apdu);
break;
case INS_DELETE_FILE:
fs.processDeleteFile(apdu);
break;
case INS_GENERAL_AUTHENTICATE:
pinManager.processGeneralAuthenticate(apdu);
break;
case INS_GENERATE_ASYMMETRIC_KEYPAIR:
processGenerateAsymmetricKeypair(apdu);
break;
case INS_GET_DATA:
processGetData(apdu);
break;
case INS_GET_RESPONSE:
transmitManager.processGetResponse(apdu);
break;
case INS_MANAGE_SECURITY_ENVIRONMENT:
processManageSecurityEnvironment(apdu);
break;
case INS_PERFORM_SECURITY_OPERATION:
processPerformSecurityOperation(apdu);
break;
case INS_PUT_DATA:
processPutData(apdu);
break;
case INS_RESET_RETRY_COUNTER:
pinManager.processResetRetryCounter(apdu);
break;
case ISO7816.INS_SELECT:
fs.processSelectFile(apdu, selectingApplet());
break;
case INS_TERMINATE_DF:
processTerminateDF(apdu);
break;
case INS_VERIFY:
pinManager.processVerify(apdu);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
} // switch
} else {
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
}
示例8: doPutData
private void doPutData(APDU apdu) throws ISOException {
byte[] buf = apdu.getBuffer();
byte p1 = buf[ISO7816.OFFSET_P1];
byte p2 = buf[ISO7816.OFFSET_P2];
byte cla = buf[ISO7816.OFFSET_CLA];
short lc = apdu.setIncomingAndReceive();
short offset = apdu.getOffsetCdata();
byte id;
if (p1 != (byte) 0x3F || p2 != (byte) 0xFF) {
ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);
}
if ((cla != 0x0) && (cla != 0x10)) {
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
if (!authenticated[0]) {
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
}
if (io.isLoaded()) {
io.receiveFile(buf, offset, lc);
if (cla == 0x00) {
io.clear();
}
ISOException.throwIt(ISO7816.SW_NO_ERROR);
}
if (lc != apdu.getIncomingLength() || lc < (byte) 0x06) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
}
if (buf[offset] == (byte) 0x5C) {
if ((buf[(short) (offset + 1)] != (byte) 0x03)
|| (buf[(short) (offset + 2)] != (byte) 0x5F)
|| (buf[(short) (offset + 3)] != (byte) 0xC1)) {
ISOException.throwIt(ISO7816.SW_DATA_INVALID);
}
id = (byte) (buf[(short) (offset + 4)] - 1);
if ((id == (byte) 0x03)
|| (id > (byte) 0x0A)) {
ISOException.throwIt(ISO7816.SW_FILE_NOT_FOUND);
}
offset += 5;
} else if (buf[offset] == (byte) 0x7E) {
id = FileIndex.DISCOVERY;
offset += 1;
} else {
ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED);
return;
}
if (buf[offset] != (byte) 0x53) {
ISOException.throwIt(ISO7816.SW_DATA_INVALID);
}
BERTLV btlv = new BERTLV(buf, (short) (offset + 1),
(short) (apdu.getOffsetCdata() + lc));
short l = btlv.readLength();
short off = btlv.getOffset();
io.createFile(id, (short) (l + (off - offset)));
io.receiveFile(buf, offset, (short) (lc - (offset - apdu.getOffsetCdata())));
if (cla == 0x00) {
io.clear();
}
}
示例9: process
@Override
public void process(APDU apdu) throws ISOException {
if (selectingApplet()) {
return;
}
byte[] buffer = apdu.getBuffer();
if (buffer[ISO7816.OFFSET_CLA] != NFCFORUM_CLA) {
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch(buffer[ISO7816.OFFSET_INS]) {
case INS_SELECT: {
apdu.setIncomingAndReceive();
short selectedFile = Util.getShort(buffer, ISO7816.OFFSET_CDATA);
switch(selectedFile) {
case EF_CONTAINER:
scratch[OFFSET_SELECTED_FILE] = SELECTED_FILE_CONTAINER;
break;
case EF_NDEF:
scratch[OFFSET_SELECTED_FILE] = SELECTED_FILE_NDEF;
break;
default:
ISOException.throwIt(ISO7816.SW_FILE_NOT_FOUND);
}
}
break;
case INS_READ: {
short offset = Util.makeShort(buffer[ISO7816.OFFSET_P1], buffer[ISO7816.OFFSET_P2]);
if (scratch[OFFSET_SELECTED_FILE] == SELECTED_FILE_NONE) {
ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);
}
byte[] fileData = null;
switch(scratch[OFFSET_SELECTED_FILE]) {
case SELECTED_FILE_CONTAINER:
fileData = CONTAINER_DATA;
break;
case SELECTED_FILE_NDEF:
fileData = FILE_DATA;
break;
}
if (offset >= (short)fileData.length) {
ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);
}
short sizeRead = (short)(buffer[ISO7816.OFFSET_LC] & 0xff);
short blockLength = (((short)(offset + sizeRead) > (short)fileData.length) ? (short)(fileData.length - offset) : sizeRead);
Util.arrayCopyNonAtomic(fileData, offset, buffer, (short)0, blockLength);
apdu.setOutgoingAndSend((short)0, blockLength);
}
break;
}
}