
com.github.devnied.emvnfccard.utils.CommandApdu Maven / Gradle / Ivy
package com.github.devnied.emvnfccard.utils;
import com.github.devnied.emvnfccard.enums.CommandEnum;
/*
* Copyright 2010 Giesecke & Devrient GmbH.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class CommandApdu {
protected int mCla = 0x00;
protected int mIns = 0x00;
protected int mP1 = 0x00;
protected int mP2 = 0x00;
protected int mLc = 0x00;
protected byte[] mData = new byte[0];
protected int mLe = 0x00;
protected boolean mLeUsed = false;
public CommandApdu(final CommandEnum pEnum, final byte[] data, final int le) {
mCla = pEnum.getCla();
mIns = pEnum.getIns();
mP1 = pEnum.getP1();
mP2 = pEnum.getP2();
mLc = data == null ? 0 : data.length;
mData = data;
mLe = le;
mLeUsed = true;
}
public CommandApdu(final CommandEnum pEnum, final int p1, final int p2, final int le) {
mCla = pEnum.getCla();
mIns = pEnum.getIns();
mP1 = p1;
mP2 = p2;
mLe = le;
mLeUsed = true;
}
public CommandApdu(final CommandEnum pEnum, final int p1, final int p2) {
mCla = pEnum.getCla();
mIns = pEnum.getIns();
mP1 = p1;
mP2 = p2;
mLeUsed = false;
}
public byte[] toBytes() {
int length = 4; // CLA, INS, P1, P2
if (mData != null && mData.length != 0) {
length += 1; // LC
length += mData.length; // DATA
}
if (mLeUsed) {
length += 1; // LE
}
byte[] apdu = new byte[length];
int index = 0;
apdu[index] = (byte) mCla;
index++;
apdu[index] = (byte) mIns;
index++;
apdu[index] = (byte) mP1;
index++;
apdu[index] = (byte) mP2;
index++;
if (mData != null && mData.length != 0) {
apdu[index] = (byte) mLc;
index++;
System.arraycopy(mData, 0, apdu, index, mData.length);
index += mData.length;
}
if (mLeUsed) {
apdu[index] += (byte) mLe; // LE
}
return apdu;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy