Compare commits
8 Commits
zcy_dev
...
4dcf92584c
| Author | SHA1 | Date | |
|---|---|---|---|
| 4dcf92584c | |||
| 8893172ea9 | |||
| b331864cee | |||
| 747ac56a68 | |||
| 2310d0aca1 | |||
| e8b2fa9c65 | |||
| 5122f8eade | |||
| 11c46c5557 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -4,4 +4,6 @@ __pycache__
|
|||||||
.vscode
|
.vscode
|
||||||
*.class
|
*.class
|
||||||
/out/
|
/out/
|
||||||
|
/.gradle/
|
||||||
/.idea/
|
/.idea/
|
||||||
|
/Project/bin/
|
||||||
|
|||||||
56
Bat/GenCap.bat
Normal file
56
Bat/GenCap.bat
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
@REM SET PATH=""
|
||||||
|
@rem %JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.converter.Converter %*
|
||||||
|
|
||||||
|
SET _BUILD_DIR=%CD%
|
||||||
|
SET _PROJ_PATH="%_BUILD_DIR%\.."
|
||||||
|
SET _DELIVERY_PATH=%_BUILD_DIR%\Delivery
|
||||||
|
|
||||||
|
SET _SRC_PATH=%_PROJ_PATH%\Project\Src
|
||||||
|
SET _CAP_PATH=%_PROJ_PATH%\Project\bin\com\cscn\javacard
|
||||||
|
SET _OUT_PATH=%_PROJ_PATH%\Project\bin
|
||||||
|
SET _TOOLS_PATH=%_PROJ_PATH%\Tools
|
||||||
|
|
||||||
|
CD ..\Project
|
||||||
|
DEL /Q %_DELIVERY_PATH%\*.*
|
||||||
|
DEL /Q %_CAP_PATH%\*.*
|
||||||
|
RMDIR /S /Q %_OUT_PATH%
|
||||||
|
MKDIR %_OUT_PATH%
|
||||||
|
REM PAUSE
|
||||||
|
|
||||||
|
SET JAVA_HOME=%_TOOLS_PATH%\jdk1.5.0_19
|
||||||
|
SET JC_HOME=%_TOOLS_PATH%\jcdk222
|
||||||
|
SET PATH=%JAVA_HOME%\bin;%JC_HOME%\bin;%PATH%
|
||||||
|
|
||||||
|
SET EXT_API_PATH=%_TOOLS_PATH%\ext_api
|
||||||
|
SET _JavaC_HOME=%_TOOLS_PATH%\jdk1.5.0_19\jre\bin
|
||||||
|
SET _CLASS_PATH=%_TOOLS_PATH%\jcdk222\lib\api.jar;%EXT_API_PATH%\gp221.jar
|
||||||
|
|
||||||
|
SET JCDK_EXPORT_DIR=%_TOOLS_PATH%\api_exp\JCDK222
|
||||||
|
SET PROJ_EXPORT_DIR=%_OUT_PATH%
|
||||||
|
SET EXT_EXPORT_DIR=%_TOOLS_PATH%\api_exp\gp221
|
||||||
|
SET EXPORT_DIR=%JCDK_EXPORT_DIR%;%PROJ_EXPORT_DIR%;%EXT_EXPORT_DIR%
|
||||||
|
|
||||||
|
REM COMPILE JAVA TO CLASS
|
||||||
|
ECHO **********************************************
|
||||||
|
ECHO *** Compile Java Source Code ***
|
||||||
|
ECHO **********************************************
|
||||||
|
ECHO Setting Build Path
|
||||||
|
REM use <-verbose> display compile info
|
||||||
|
REM SET COMPILE_PARAM=-nowarn -verbose
|
||||||
|
SET COMPILE_PARAM= -nowarn
|
||||||
|
|
||||||
|
ECHO Compiling Java Card API source code
|
||||||
|
Call javac %COMPILE_PARAM% -classpath %_CLASS_PATH% %_SRC_PATH%\*.java -d %_OUT_PATH% -g
|
||||||
|
|
||||||
|
ECHO **********************************************
|
||||||
|
ECHO *** Convert Java Card Assembly File ***
|
||||||
|
ECHO **********************************************
|
||||||
|
|
||||||
|
CALL converter -nowarn -i -classdir .\bin -exportpath %EXPORT_DIR% -out EXP CAP -applet 0xA0:0x00:0x00:0x03:0x00:0x73:0x74:0x61:0x72:0x2E:0x61:0x70:0x70 com.cscn.XwSecurity com.cscn 0xA0:0x00:0x00:0x03:0x00:0x73:0x74:0x61:0x72:0x2E:0x70:0x6B:0x67 1.0
|
||||||
|
|
||||||
|
ECHO **********************************************
|
||||||
|
ECHO *** Copy Exp and Cap File ***
|
||||||
|
ECHO **********************************************
|
||||||
|
COPY %_CAP_PATH%\*.* %_BUILD_DIR%\Delivery\
|
||||||
|
PAUSE
|
||||||
18
LICENSE
18
LICENSE
@@ -1,18 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2025 gj
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
||||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
|
||||||
following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
||||||
portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
||||||
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
|
|
||||||
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
19
Project/Src/com/cscn/Method.java
Normal file
19
Project/Src/com/cscn/Method.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.cscn;
|
||||||
|
|
||||||
|
import javacard.framework.APDU;
|
||||||
|
|
||||||
|
public class Method {
|
||||||
|
|
||||||
|
public void processData(APDU apdu)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateKey(APDU apdu)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
82
Project/Src/com/cscn/XwSecurity.java
Normal file
82
Project/Src/com/cscn/XwSecurity.java
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.cscn;
|
||||||
|
|
||||||
|
import javacard.framework.APDU;
|
||||||
|
import javacard.framework.Applet;
|
||||||
|
import javacard.framework.ISO7816;
|
||||||
|
import javacard.framework.ISOException;
|
||||||
|
import org.globalplatform.GPSystem;
|
||||||
|
import org.globalplatform.SecureChannel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author liuww
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class XwSecurity extends Applet {
|
||||||
|
|
||||||
|
public static final byte INS_PROCESS_DATA = (byte)0xCA;
|
||||||
|
|
||||||
|
public static final byte INS_STORE_DATA = (byte)0xE2;
|
||||||
|
|
||||||
|
public static final byte INS_INITIAL_UPDATE = (byte)0x50;
|
||||||
|
|
||||||
|
public static final byte INS_EXTERNAL_AUTH = (byte)0x82;
|
||||||
|
|
||||||
|
private Method method;
|
||||||
|
|
||||||
|
public XwSecurity(byte[] bArray, short bOffset, byte bLength) {
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
method = new Method();
|
||||||
|
|
||||||
|
register(bArray, (short)(bOffset + 1), bArray[bOffset]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void install(byte[] bArray, short bOffset, byte bLength)
|
||||||
|
{
|
||||||
|
// GP-compliant JavaCard applet registration
|
||||||
|
new XwSecurity(bArray, bOffset, bLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void process(APDU apdu)
|
||||||
|
{
|
||||||
|
// Good practice: Return 9000 on SELECT
|
||||||
|
if(selectingApplet())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(method == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] buf = apdu.getBuffer();
|
||||||
|
switch (buf[ISO7816.OFFSET_INS])
|
||||||
|
{
|
||||||
|
case INS_INITIAL_UPDATE:
|
||||||
|
SecureChannel sc = GPSystem.getSecureChannel();
|
||||||
|
sc.processSecurity(apdu);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INS_EXTERNAL_AUTH:
|
||||||
|
sc = GPSystem.getSecureChannel();
|
||||||
|
sc.processSecurity(apdu);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INS_PROCESS_DATA:
|
||||||
|
method.processData(apdu);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INS_STORE_DATA:
|
||||||
|
method.updateKey(apdu);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// good practice: If you don't know the INStruction, say so:
|
||||||
|
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
package com.zuc.zuc256;
|
package com.cscn;
|
||||||
|
|
||||||
|
|
||||||
import static com.zuc.zuc256.Zuc256Util.L1;
|
import static com.cscn.Zuc256Util.L1;
|
||||||
import static com.zuc.zuc256.Zuc256Util.L2;
|
import static com.cscn.Zuc256Util.L2;
|
||||||
import static com.zuc.zuc256.Zuc256Util.add31;
|
import static com.cscn.Zuc256Util.add31;
|
||||||
import static com.zuc.zuc256.Zuc256Util.makeU31;
|
import static com.cscn.Zuc256Util.add31_pair;
|
||||||
import static com.zuc.zuc256.Zuc256Util.makeU32;
|
import static com.cscn.Zuc256Util.makeU31;
|
||||||
import static com.zuc.zuc256.Zuc256Util.rot31;
|
import static com.cscn.Zuc256Util.makeU32;
|
||||||
|
import static com.cscn.Zuc256Util.rot31;
|
||||||
|
import static com.cscn.Zuc256Util.rot31_pair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ZUC-256 核心:状态初始化、密钥字生成、密钥流生成。
|
* ZUC-256 核心:状态初始化、密钥字生成、密钥流生成。
|
||||||
66
Project/Src/com/cscn/Zuc256Demo.java
Normal file
66
Project/Src/com/cscn/Zuc256Demo.java
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
//package com.cscn;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * 演示主函数
|
||||||
|
// */
|
||||||
|
//public final class Zuc256Demo {
|
||||||
|
//
|
||||||
|
// public static void main(String[] args) {
|
||||||
|
// // 1. 明文
|
||||||
|
// byte[] plaintext = "ZUC256对称加解密测试:1234567890".getBytes();
|
||||||
|
// int plaintextLen = plaintext.length;
|
||||||
|
// System.out.println("明文: " + new String(plaintext));
|
||||||
|
// printHex("明文(十六进制)", plaintext, plaintextLen);
|
||||||
|
//
|
||||||
|
// // 2. 密钥(32字节ASCII)
|
||||||
|
// byte[] key = "0123456789abcdef0123456789abcdef".getBytes();
|
||||||
|
// printHex("密钥", key, 32);
|
||||||
|
//
|
||||||
|
// // 3. 初始向量(25字节ASCII)
|
||||||
|
// byte[] inputIv25Byte = "0123456789abcdefg01234567".getBytes();
|
||||||
|
// byte[] iv = new byte[23];
|
||||||
|
// extractIv(inputIv25Byte, iv);
|
||||||
|
// printHex("提取后的IV", iv, 23);
|
||||||
|
//
|
||||||
|
// // 4. 分配加密/解密缓冲区
|
||||||
|
// byte[] ciphertext = new byte[plaintextLen];
|
||||||
|
// byte[] decryptedtext = new byte[plaintextLen];
|
||||||
|
//
|
||||||
|
// // 5. 加密
|
||||||
|
// Zuc256State stateEnc = new Zuc256State();
|
||||||
|
// Zuc256Core.initState(stateEnc, key, iv);
|
||||||
|
// zuc256Crypt(stateEnc, plaintext, plaintextLen, ciphertext);
|
||||||
|
// printHex("密文", ciphertext, plaintextLen);
|
||||||
|
//
|
||||||
|
// // 6. 解密(重新初始化状态)
|
||||||
|
// Zuc256State stateDec = new Zuc256State();
|
||||||
|
// Zuc256Core.initState(stateDec, key, iv);
|
||||||
|
// zuc256Crypt(stateDec, ciphertext, plaintextLen, decryptedtext);
|
||||||
|
// printHex("解密后", decryptedtext, plaintextLen);
|
||||||
|
// System.out.println("解密文本: " + new String(decryptedtext));
|
||||||
|
//
|
||||||
|
// // 7. 验证结果
|
||||||
|
// if (Arrays.equals(plaintext, decryptedtext)) {
|
||||||
|
// System.out.println("=== 测试成功: 解密结果与明文一致 ===");
|
||||||
|
// } else {
|
||||||
|
// System.out.println("=== 测试失败: 解密结果与明文不一致 ===");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 一次性加密
|
||||||
|
// public static void zuc256Crypt(Zuc256State state, byte[] in, int inlen, byte[] out) {
|
||||||
|
// if (state == null || in == null || out == null) return;
|
||||||
|
//
|
||||||
|
// Zuc256EncryptCtx ctx = new Zuc256EncryptCtx(state);
|
||||||
|
//
|
||||||
|
// // 执行加解密
|
||||||
|
// ctx.update(in, inlen, out);
|
||||||
|
// int remainingOffset = (inlen / 4) * 4;
|
||||||
|
// byte[] finishOut = new byte[out.length - remainingOffset];
|
||||||
|
// if (finishOut.length > 0) {
|
||||||
|
// System.arraycopy(out, remainingOffset, finishOut, 0, finishOut.length);
|
||||||
|
// }
|
||||||
|
// ctx.finish(finishOut);
|
||||||
|
// System.arraycopy(finishOut, 0, out, remainingOffset, finishOut.length);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
141
Project/Src/com/cscn/Zuc256EncryptCtx.java
Normal file
141
Project/Src/com/cscn/Zuc256EncryptCtx.java
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
package com.zuc.zuc256;
|
||||||
|
|
||||||
|
import javacard.framework.JCSystem;
|
||||||
|
import javacard.framework.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密上下文类(Java Card兼容版本)
|
||||||
|
*/
|
||||||
|
public final class Zuc256EncryptCtx {
|
||||||
|
Zuc256State state;
|
||||||
|
byte[] buf;
|
||||||
|
short buflen;
|
||||||
|
|
||||||
|
// 构造函数 - 使用已分配的缓冲区
|
||||||
|
public Zuc256EncryptCtx(Zuc256State state, byte[] buf) {
|
||||||
|
this.state = state;
|
||||||
|
this.buf = buf;
|
||||||
|
this.buflen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造函数 - 自动分配缓冲区
|
||||||
|
public Zuc256EncryptCtx(Zuc256State state) {
|
||||||
|
this.state = state;
|
||||||
|
this.buf = JCSystem.makeTransientByteArray((short)4, JCSystem.CLEAR_ON_DESELECT);
|
||||||
|
this.buflen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造函数 - 完整初始化
|
||||||
|
public Zuc256EncryptCtx() {
|
||||||
|
this.state = new Zuc256State();
|
||||||
|
this.buf = JCSystem.makeTransientByteArray((short)4, JCSystem.CLEAR_ON_DESELECT);
|
||||||
|
this.buflen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化加密上下文
|
||||||
|
public void init(byte[] key32, short keyOff, short keyLen, byte[] iv, short ivOff, short ivLen) {
|
||||||
|
// 清空缓冲区
|
||||||
|
Util.arrayFillNonAtomic(buf, (short)0, (short)buf.length, (byte)0);
|
||||||
|
this.buflen = 0;
|
||||||
|
// 初始化状态
|
||||||
|
Zuc256Core.initState(this.state, key32, keyOff, keyLen, iv, ivOff, ivLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分阶段处理加密数据
|
||||||
|
public void update(byte[] in, short inOff, short inlen, byte[] out, short outOff) {
|
||||||
|
if (in == null || out == null || inlen == 0) return;
|
||||||
|
|
||||||
|
short currentInOff = inOff;
|
||||||
|
short currentOutOff = outOff;
|
||||||
|
|
||||||
|
// 处理缓冲区中剩余的非4字节数据
|
||||||
|
if (this.buflen > 0) {
|
||||||
|
short need = (short)(4 - this.buflen);
|
||||||
|
short copy = (short)Math.min(inlen, need);
|
||||||
|
|
||||||
|
// 复制数据到缓冲区
|
||||||
|
Util.arrayCopyNonAtomic(in, currentInOff, this.buf, this.buflen, copy);
|
||||||
|
this.buflen += copy;
|
||||||
|
|
||||||
|
// 调整输入指针和长度
|
||||||
|
currentInOff += copy;
|
||||||
|
inlen -= copy;
|
||||||
|
|
||||||
|
// 缓冲区已满,处理一个完整的4字节块
|
||||||
|
if (this.buflen == 4) {
|
||||||
|
short keystream = zuc256GenerateKeyword(this.state);
|
||||||
|
short plain = getU16(this.buf, (short)0); // 改为16位操作
|
||||||
|
putU16(out, currentOutOff, (short)(plain ^ keystream));
|
||||||
|
|
||||||
|
// 重置缓冲区
|
||||||
|
this.buflen = 0;
|
||||||
|
Util.arrayFillNonAtomic(this.buf, (short)0, (short)this.buf.length, (byte)0);
|
||||||
|
|
||||||
|
// 调整输出指针
|
||||||
|
currentOutOff += 2; // 16位数据占2字节
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理完整的2字节块(Java Card 16位操作)
|
||||||
|
if (inlen > 0) {
|
||||||
|
short fullBlocks = (short)(inlen / 2); // 16位块
|
||||||
|
if (fullBlocks > 0) {
|
||||||
|
short[] keystream = JCSystem.makeTransientShortArray(fullBlocks, JCSystem.CLEAR_ON_DESELECT);
|
||||||
|
zuc256GenerateKeystream(this.state, fullBlocks, keystream);
|
||||||
|
|
||||||
|
// 逐块异或加密
|
||||||
|
for (short i = 0; i < fullBlocks; i++) {
|
||||||
|
short plain = getU16(in, (short)(currentInOff + (short)(i * 2)));
|
||||||
|
putU16(out, (short)(currentOutOff + (short)(i * 2)), (short)(plain ^ keystream[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调整输入指针和长度
|
||||||
|
short processed = (short)(fullBlocks * 2);
|
||||||
|
currentInOff += processed;
|
||||||
|
inlen -= processed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 缓存剩余不足2字节的数据
|
||||||
|
if (inlen > 0) {
|
||||||
|
Util.arrayCopyNonAtomic(in, currentInOff, this.buf, (short)0, inlen);
|
||||||
|
this.buflen = inlen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 完成加密处理
|
||||||
|
public void finish(byte[] out, short outOff) {
|
||||||
|
if (out == null) return;
|
||||||
|
|
||||||
|
// 处理缓冲区中剩余的不足2字节数据
|
||||||
|
if (this.buflen > 0) {
|
||||||
|
short keystream = zuc256GenerateKeyword(this.state);
|
||||||
|
byte[] keystreamBytes = JCSystem.makeTransientByteArray((short)2, JCSystem.CLEAR_ON_DESELECT);
|
||||||
|
putU16(keystreamBytes, (short)0, keystream);
|
||||||
|
|
||||||
|
// 逐字节异或
|
||||||
|
for (short i = 0; i < this.buflen; i++) {
|
||||||
|
out[(short)(outOff + i)] = (byte)(this.buf[i] ^ keystreamBytes[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清理上下文
|
||||||
|
Util.arrayFillNonAtomic(this.buf, (short)0, (short)this.buf.length, (byte)0);
|
||||||
|
this.buflen = 0;
|
||||||
|
// 清理状态
|
||||||
|
Util.arrayFillNonAtomic(this.state.LFSR, (short)0, (short)this.state.LFSR.length, (short)0);
|
||||||
|
this.state.R1 = 0;
|
||||||
|
this.state.R2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 16位数据读取(替代原32位实现)
|
||||||
|
private short getU16(byte[] buf, short off) {
|
||||||
|
return (short)(((buf[off] & 0xFF) << 8) | (buf[(short)(off + 1)] & 0xFF));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 16位数据写入(替代原32位实现)
|
||||||
|
private void putU16(byte[] buf, short off, short value) {
|
||||||
|
buf[off] = (byte)((value >>> 8) & 0xFF);
|
||||||
|
buf[(short)(off + 1)] = (byte)(value & 0xFF);
|
||||||
|
}
|
||||||
|
}
|
||||||
31
Project/Src/com/cscn/Zuc256MacCtx.java
Normal file
31
Project/Src/com/cscn/Zuc256MacCtx.java
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package com.cscn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MAC上下文类(JavaCard版,int 拆分为两个 short)
|
||||||
|
*/
|
||||||
|
public final class Zuc256MacCtx {
|
||||||
|
// LFSR: 原本 int[16],拆成 hi/lo 各 16 short
|
||||||
|
short[] LFSR_hi = new short[16];
|
||||||
|
short[] LFSR_lo = new short[16];
|
||||||
|
|
||||||
|
// R1、R2: 原本 int,拆成 hi/lo
|
||||||
|
short R1_hi;
|
||||||
|
short R1_lo;
|
||||||
|
short R2_hi;
|
||||||
|
short R2_lo;
|
||||||
|
|
||||||
|
// 缓冲区
|
||||||
|
byte[] buf = new byte[4];
|
||||||
|
short buflen;
|
||||||
|
|
||||||
|
// T: 原本 int[4],拆成 hi/lo
|
||||||
|
short[] T_hi = new short[4];
|
||||||
|
short[] T_lo = new short[4];
|
||||||
|
|
||||||
|
// K0: 原本 int[4],拆成 hi/lo
|
||||||
|
short[] K0_hi = new short[4];
|
||||||
|
short[] K0_lo = new short[4];
|
||||||
|
|
||||||
|
// macbits: 原本 int,改成 short 足够
|
||||||
|
short macbits;
|
||||||
|
}
|
||||||
16
Project/Src/com/cscn/Zuc256State.java
Normal file
16
Project/Src/com/cscn/Zuc256State.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package com.cscn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ZUC状态类(JavaCard版,int 拆为 hi/lo short)
|
||||||
|
*/
|
||||||
|
public final class Zuc256State {
|
||||||
|
// LFSR: 原 int[16] -> hi/lo 各 16
|
||||||
|
public short[] LFSR_hi = new short[16];
|
||||||
|
public short[] LFSR_lo = new short[16];
|
||||||
|
|
||||||
|
// R1, R2: 原 int -> hi/lo
|
||||||
|
public short R1_hi;
|
||||||
|
public short R1_lo;
|
||||||
|
public short R2_hi;
|
||||||
|
public short R2_lo;
|
||||||
|
}
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
package com.zuc.zuc256;
|
package com.cscn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 常量表:S0/S1 与 ZUC256_D。
|
* 常量表:S0/S1 与 ZUC256_D。
|
||||||
* 注意:JavaCard 目标环境建议将表定义为 static final 数组,按 int/short 存放。
|
* 注意:JavaCard 目标环境建议将表定义为 static final 数组,按 int/short 存放。
|
||||||
|
* 适配说明:已将 32bit int 数组改为 16bit short 数组,符合JavaCard 16bit能力要求
|
||||||
*/
|
*/
|
||||||
public final class Zuc256Tables {
|
public final class Zuc256Tables {
|
||||||
|
|
||||||
|
// 私有构造函数:防止类被实例化
|
||||||
private Zuc256Tables() {}
|
private Zuc256Tables() {}
|
||||||
|
|
||||||
// S盒:S0, S1
|
// S盒:S0, S1
|
||||||
public static final int[] S0 = {
|
public static final short[] S0 = {
|
||||||
0x3e,0x72,0x5b,0x47,0xca,0xe0,0x00,0x33,0x04,0xd1,0x54,0x98,0x09,0xb9,0x6d,0xcb,
|
0x3e,0x72,0x5b,0x47,0xca,0xe0,0x00,0x33,0x04,0xd1,0x54,0x98,0x09,0xb9,0x6d,0xcb,
|
||||||
0x7b,0x1b,0xf9,0x32,0xaf,0x9d,0x6a,0xa5,0xb8,0x2d,0xfc,0x1d,0x08,0x53,0x03,0x90,
|
0x7b,0x1b,0xf9,0x32,0xaf,0x9d,0x6a,0xa5,0xb8,0x2d,0xfc,0x1d,0x08,0x53,0x03,0x90,
|
||||||
0x4d,0x4e,0x84,0x99,0xe4,0xce,0xd9,0x91,0xdd,0xb6,0x85,0x48,0x8b,0x29,0x6e,0xac,
|
0x4d,0x4e,0x84,0x99,0xe4,0xce,0xd9,0x91,0xdd,0xb6,0x85,0x48,0x8b,0x29,0x6e,0xac,
|
||||||
@@ -28,7 +30,7 @@ public final class Zuc256Tables {
|
|||||||
0x8d,0x27,0x1a,0xdb,0x81,0xb3,0xa0,0xf4,0x45,0x7a,0x19,0xdf,0xee,0x78,0x34,0x60
|
0x8d,0x27,0x1a,0xdb,0x81,0xb3,0xa0,0xf4,0x45,0x7a,0x19,0xdf,0xee,0x78,0x34,0x60
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final int[] S1 = {
|
public static final short[] S1 = {
|
||||||
0x55,0xc2,0x63,0x71,0x3b,0xc8,0x47,0x86,0x9f,0x3c,0xda,0x5b,0x29,0xaa,0xfd,0x77,
|
0x55,0xc2,0x63,0x71,0x3b,0xc8,0x47,0x86,0x9f,0x3c,0xda,0x5b,0x29,0xaa,0xfd,0x77,
|
||||||
0x8c,0xc5,0x94,0x0c,0xa6,0x1a,0x13,0x00,0xe3,0xa8,0x16,0x72,0x40,0xf9,0xf8,0x42,
|
0x8c,0xc5,0x94,0x0c,0xa6,0x1a,0x13,0x00,0xe3,0xa8,0x16,0x72,0x40,0xf9,0xf8,0x42,
|
||||||
0x44,0x26,0x68,0x96,0x81,0xd9,0x45,0x3e,0x10,0x76,0xc6,0xa7,0x8b,0x39,0x43,0xe1,
|
0x44,0x26,0x68,0x96,0x81,0xd9,0x45,0x3e,0x10,0x76,0xc6,0xa7,0x8b,0x39,0x43,0xe1,
|
||||||
@@ -48,9 +50,9 @@ public final class Zuc256Tables {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 常量数组 D
|
* 常量数组 D(16bit short二维数组适配)
|
||||||
*/
|
*/
|
||||||
public static final int[][] ZUC256_D = {
|
public static final short[][] ZUC256_D = {
|
||||||
{0x22,0x2F,0x24,0x2A,0x6D,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x52,0x10,0x30},
|
{0x22,0x2F,0x24,0x2A,0x6D,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x52,0x10,0x30},
|
||||||
{0x22,0x2F,0x25,0x2A,0x6D,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x52,0x10,0x30},
|
{0x22,0x2F,0x25,0x2A,0x6D,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x52,0x10,0x30},
|
||||||
{0x23,0x2F,0x24,0x2A,0x6D,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x52,0x10,0x30},
|
{0x23,0x2F,0x24,0x2A,0x6D,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x52,0x10,0x30},
|
||||||
332
Project/Src/com/cscn/Zuc256Util.java
Normal file
332
Project/Src/com/cscn/Zuc256Util.java
Normal file
@@ -0,0 +1,332 @@
|
|||||||
|
package com.cscn;
|
||||||
|
|
||||||
|
import javacard.framework.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 辅助工具:装载/存储、位运算、线性变换、打印等。
|
||||||
|
*/
|
||||||
|
public final class Zuc256Util {
|
||||||
|
|
||||||
|
private Zuc256Util() {}
|
||||||
|
|
||||||
|
// /** 辅助方法:将字节数组转换为32位整数 */
|
||||||
|
// public static int getU32(byte[] p, int offset) {
|
||||||
|
// return ((p[offset] & 0xFF) << 24) |
|
||||||
|
// ((p[offset + 1] & 0xFF) << 16) |
|
||||||
|
// ((p[offset + 2] & 0xFF) << 8) |
|
||||||
|
// (p[offset + 3] & 0xFF);
|
||||||
|
// }
|
||||||
|
/** 辅助方法:从字节数组取出 32 位整数,存放到 short[2] (lo, hi) */
|
||||||
|
public static void getU32(byte[] p, short offset, short[] out32 /* len=2 */) {
|
||||||
|
out32[0] = (short) (((p[offset + 2] & 0xFF) << 8) | (p[offset + 3] & 0xFF)); //低16位
|
||||||
|
out32[1] = (short) (((p[offset] & 0xFF) << 8) | (p[offset + 1] & 0xFF)); //高16位
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /** 辅助方法:将32位整数转换为字节数组 */
|
||||||
|
// public static void putU32(byte[] p, int offset, int v) {
|
||||||
|
// p[offset] = (byte) (v >> 24);
|
||||||
|
// p[offset + 1] = (byte) (v >> 16);
|
||||||
|
// p[offset + 2] = (byte) (v >> 8);
|
||||||
|
// p[offset + 3] = (byte) v;
|
||||||
|
// }
|
||||||
|
/** 辅助方法:将32位整数(vlo=低16位, vhi=高16位)写入字节数组 */
|
||||||
|
public static void putU32(byte[] p, short offset, short vlo, short vhi) {
|
||||||
|
// 写高16位
|
||||||
|
p[offset] = (byte) ((vhi >> 8) & 0xFF);
|
||||||
|
p[offset + 1] = (byte) (vhi & 0xFF);
|
||||||
|
|
||||||
|
// 写低16位
|
||||||
|
p[offset + 2] = (byte) ((vlo >> 8) & 0xFF);
|
||||||
|
p[offset + 3] = (byte) (vlo & 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// === 31/32 位运算 ===
|
||||||
|
|
||||||
|
// /** 31位加法 */
|
||||||
|
// public static int add31(int a, int b) {
|
||||||
|
// long sum = (long)a + b;
|
||||||
|
// return (int) ((sum & 0x7FFFFFFF) + (sum >> 31));
|
||||||
|
// }
|
||||||
|
/** 31位加法: (a+b) mod (2^31 - 1)
|
||||||
|
* 输入: a_lo=低16位, a_hi=高15位
|
||||||
|
* b_lo=低16位, b_hi=高15位
|
||||||
|
* 输出: out[0]=lo, out[1]=hi
|
||||||
|
*/
|
||||||
|
public static void add31(short a_lo, short a_hi, short b_lo, short b_hi, short[] out /* len==2 */) {
|
||||||
|
// ---- 低16位相加 ----
|
||||||
|
short lo = (short)(a_lo + b_lo);
|
||||||
|
short carry = (short)(((lo & 0xFFFF) < (a_lo & 0xFFFF)) ? 1 : 0);
|
||||||
|
|
||||||
|
// ---- 高15位相加 + 进位 ----
|
||||||
|
short hi_raw = (short)((short)((a_hi & 0x7FFF) + (b_hi & 0x7FFF)) + carry);
|
||||||
|
|
||||||
|
// 提取第31位(hi_raw bit15)
|
||||||
|
short topbit = (short)((hi_raw >>> 15) & 1);
|
||||||
|
short hi = (short)(hi_raw & 0x7FFF); // 保留15位
|
||||||
|
|
||||||
|
// ---- 若第31位=1,再+1 ----
|
||||||
|
if (topbit == 1) {
|
||||||
|
short lo2 = (short)(lo + 1);
|
||||||
|
short c2 = (short)((lo2 == 0) ? 1 : 0); // lo溢出时进位
|
||||||
|
lo = lo2;
|
||||||
|
hi = (short)((hi + c2) & 0x7FFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
out[0] = lo;
|
||||||
|
out[1] = hi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /** 31位旋转 */
|
||||||
|
// public static int rot31(int a, int k) {
|
||||||
|
// return ((a << k) | (a >>> (31 - k))) & 0x7FFFFFFF;
|
||||||
|
// }
|
||||||
|
/** 31位循环左移: (a <<< k) mod (2^31 -1)
|
||||||
|
* 输入: a_lo=低16位, a_hi=高15位
|
||||||
|
* 输出: out[0]=lo, out[1]=hi
|
||||||
|
*/
|
||||||
|
public static void rot31(short a_lo, short a_hi, short k, short[] out /* len==2 */) {
|
||||||
|
k = (short)(k % 31); // 限制在 0..30
|
||||||
|
if (k == 0) {
|
||||||
|
out[0] = a_lo;
|
||||||
|
out[1] = (short)(a_hi & 0x7FFF);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拆成 31 位数组 [bit0..bit30]
|
||||||
|
short[] bits = new short[31];
|
||||||
|
for (short i = 0; i < 16; i++) {
|
||||||
|
bits[i] = (short)((a_lo >>> i) & 1);
|
||||||
|
}
|
||||||
|
for (short i = 0; i < 15; i++) {
|
||||||
|
bits[16 + i] = (short)((a_hi >>> i) & 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 旋转
|
||||||
|
short[] resBits = new short[31];
|
||||||
|
for (short i = 0; i < 31; i++) {
|
||||||
|
short j = (short)((i + k) % 31);
|
||||||
|
resBits[j] = bits[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拼回 lo, hi
|
||||||
|
short lo = 0;
|
||||||
|
for (short i = 0; i < 16; i++) {
|
||||||
|
lo = (short)(lo | (resBits[i] << i));
|
||||||
|
}
|
||||||
|
short hi = 0;
|
||||||
|
for (short i = 0; i < 15; i++) {
|
||||||
|
hi = (short)(hi | (resBits[16 + i] << i));
|
||||||
|
}
|
||||||
|
|
||||||
|
out[0] = lo;
|
||||||
|
out[1] = hi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /** 32位旋转 */
|
||||||
|
// public static int rot32(int a, int k) {
|
||||||
|
// return (a << k) | (a >>> (32 - k));
|
||||||
|
// }
|
||||||
|
/** 32位循环左移: (a<<<k) */
|
||||||
|
public static void rot32(short a_lo, short a_hi, short k, short[] out /*len==2*/) {
|
||||||
|
k = (short)(k & 31); // 限制 0..31
|
||||||
|
if (k == 0) {
|
||||||
|
out[0] = a_lo;
|
||||||
|
out[1] = a_hi;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
short lo, hi;
|
||||||
|
|
||||||
|
if (k < 16) {
|
||||||
|
// 左移 k
|
||||||
|
lo = (short)(a_lo << k);
|
||||||
|
hi = (short)(a_hi << k);
|
||||||
|
|
||||||
|
// 把溢出部分拼接
|
||||||
|
lo |= (short)((a_hi & 0xFFFF) >>> (16 - k));
|
||||||
|
hi |= (short)((a_lo & 0xFFFF) >>> (16 - k));
|
||||||
|
} else {
|
||||||
|
short s = (short)(k - 16);
|
||||||
|
lo = (short)(a_hi << s);
|
||||||
|
hi = (short)(a_lo << s);
|
||||||
|
|
||||||
|
lo |= (short)((a_lo & 0xFFFF) >>> (16 - s));
|
||||||
|
hi |= (short)((a_hi & 0xFFFF) >>> (16 - s));
|
||||||
|
}
|
||||||
|
|
||||||
|
out[0] = lo;
|
||||||
|
out[1] = hi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * L1函数
|
||||||
|
// */
|
||||||
|
// public static int L1(int x) {
|
||||||
|
// return x ^ rot32(x, 2) ^ rot32(x, 10) ^ rot32(x, 18) ^ rot32(x, 24);
|
||||||
|
// }
|
||||||
|
/**
|
||||||
|
* L1函数: x ^ (x<<<2) ^ (x<<<10) ^ (x<<<18) ^ (x<<<24)
|
||||||
|
* 输入: x_lo, x_hi
|
||||||
|
* 输出: out[0]=lo, out[1]=hi
|
||||||
|
*/
|
||||||
|
public static void L1(short x_lo, short x_hi, short[] out /*len==2*/) {
|
||||||
|
short[] t = new short[2];
|
||||||
|
short[] acc = new short[2];
|
||||||
|
|
||||||
|
// acc = x
|
||||||
|
acc[0] = x_lo;
|
||||||
|
acc[1] = x_hi;
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 2)
|
||||||
|
rot32(x_lo, x_hi, (short)2, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 10)
|
||||||
|
rot32(x_lo, x_hi, (short)10, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 18)
|
||||||
|
rot32(x_lo, x_hi, (short)18, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 24)
|
||||||
|
rot32(x_lo, x_hi, (short)24, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
out[0] = acc[0];
|
||||||
|
out[1] = acc[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * L2函数
|
||||||
|
// */
|
||||||
|
// public static int L2(int x) {
|
||||||
|
// return x ^ rot32(x, 8) ^ rot32(x, 14) ^ rot32(x, 22) ^ rot32(x, 30);
|
||||||
|
// }
|
||||||
|
/**
|
||||||
|
* L2函数: x ^ (x<<<8) ^ (x<<<14) ^ (x<<<22) ^ (x<<<30)
|
||||||
|
* 输入: x_lo, x_hi
|
||||||
|
* 输出: out[0]=lo, out[1]=hi
|
||||||
|
*/
|
||||||
|
public static void L2(short x_lo, short x_hi, short[] out /*len==2*/) {
|
||||||
|
short[] t = new short[2];
|
||||||
|
short[] acc = new short[2];
|
||||||
|
|
||||||
|
// acc = x
|
||||||
|
acc[0] = x_lo;
|
||||||
|
acc[1] = x_hi;
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 8)
|
||||||
|
rot32(x_lo, x_hi, (short)8, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 14)
|
||||||
|
rot32(x_lo, x_hi, (short)14, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 22)
|
||||||
|
rot32(x_lo, x_hi, (short)22, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
// acc ^= rot32(x, 30)
|
||||||
|
rot32(x_lo, x_hi, (short)30, t);
|
||||||
|
acc[0] ^= t[0];
|
||||||
|
acc[1] ^= t[1];
|
||||||
|
|
||||||
|
out[0] = acc[0];
|
||||||
|
out[1] = acc[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /** 创建31位无符号整数 */
|
||||||
|
// public static int makeU31(int a, int b, int c, int d) {
|
||||||
|
// return (((a & 0xFF) << 23) |
|
||||||
|
// ((b & 0xFF) << 16) |
|
||||||
|
// ((c & 0xFF) << 8) |
|
||||||
|
// (d & 0xFF)) & 0x7FFFFFFF;
|
||||||
|
// }
|
||||||
|
/** 创建31位无符号整数,结果放到 out[0]=lo, out[1]=hi(15位) */
|
||||||
|
public static void makeU31(short a, short b, short c, short d, short[] out /*len==2*/) {
|
||||||
|
// 四个字节
|
||||||
|
short b0 = (short)(a & 0xFF); // 最高字节
|
||||||
|
short b1 = (short)(b & 0xFF);
|
||||||
|
short b2 = (short)(c & 0xFF);
|
||||||
|
short b3 = (short)(d & 0xFF); // 最低字节
|
||||||
|
|
||||||
|
// 拼成 32 位: b0<<24 | b1<<16 | b2<<8 | b3
|
||||||
|
// lo = 低16位
|
||||||
|
out[0] = (short)((b2 << 8) | b3);
|
||||||
|
|
||||||
|
// hi = 高15位(丢弃 bit31)
|
||||||
|
out[1] = (short)(((b0 & 0x7F) << 8) | b1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /** 创建32位无符号整数 */
|
||||||
|
// public static int makeU32(int a, int b, int c, int d) {
|
||||||
|
// return ((a & 0xFF) << 24) |
|
||||||
|
// ((b & 0xFF) << 16) |
|
||||||
|
// ((c & 0xFF) << 8) |
|
||||||
|
// (d & 0xFF);
|
||||||
|
// }
|
||||||
|
/** 创建32位无符号整数,结果放到 out[0]=lo, out[1]=hi */
|
||||||
|
public static void makeU32(short a, short b, short c, short d, short[] out /*len==2*/) {
|
||||||
|
// 四个字节
|
||||||
|
short b0 = (short)(a & 0xFF); // 最高字节
|
||||||
|
short b1 = (short)(b & 0xFF);
|
||||||
|
short b2 = (short)(c & 0xFF);
|
||||||
|
short b3 = (short)(d & 0xFF); // 最低字节
|
||||||
|
|
||||||
|
// lo = 低16位
|
||||||
|
out[0] = (short)((b2 << 8) | b3);
|
||||||
|
|
||||||
|
// hi = 高16位
|
||||||
|
out[1] = (short)((b0 << 8) | b1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 提取IV */
|
||||||
|
public static void extractIv(byte[] input25Byte, byte[] output23Byte) {
|
||||||
|
if (input25Byte == null || output23Byte == null) return;
|
||||||
|
|
||||||
|
// 复制前17字节
|
||||||
|
Util.arrayCopyNonAtomic(input25Byte, (short)0, output23Byte, (short)0, (short)17);
|
||||||
|
|
||||||
|
|
||||||
|
// 处理剩余8字节
|
||||||
|
byte[] src = new byte[8];
|
||||||
|
for (short i = 0; i < 8; i++) {
|
||||||
|
src[i] = (byte) (input25Byte[17 + i] & 0x3F);
|
||||||
|
}
|
||||||
|
|
||||||
|
output23Byte[17] = (byte) ((src[0] << 2) | (src[1] >>> 4));
|
||||||
|
output23Byte[18] = (byte) (((src[1] & 0x0F) << 4) | (src[2] >>> 2));
|
||||||
|
output23Byte[19] = (byte) (((src[2] & 0x03) << 6) | src[3]);
|
||||||
|
output23Byte[20] = (byte) ((src[4] << 2) | (src[5] >>> 4));
|
||||||
|
output23Byte[21] = (byte) (((src[5] & 0x0F) << 4) | (src[6] >>> 2));
|
||||||
|
output23Byte[22] = (byte) (((src[6] & 0x03) << 6) | src[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 打印/*十六进制(调试用,TODO 生产/JC 环境可移除) *//*
|
||||||
|
public static void printHex(String label, byte[] data, int len) {
|
||||||
|
System.out.print(label + ": ");
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
System.out.printf("%02x ", data[i] & 0xFF);
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
}*/
|
||||||
|
}
|
||||||
40
SConscript
40
SConscript
@@ -1,40 +0,0 @@
|
|||||||
import os
|
|
||||||
from SCons.Script import *
|
|
||||||
|
|
||||||
# 导入环境
|
|
||||||
Import('env')
|
|
||||||
|
|
||||||
# 项目根目录
|
|
||||||
CWD = os.getcwd()
|
|
||||||
|
|
||||||
# 收集源码(.c 和 .S 文件)
|
|
||||||
sources = Glob(os.path.join(CWD, 'src/*.c')) + Glob(os.path.join(CWD, 'src/*.S'))
|
|
||||||
|
|
||||||
# 编译选项
|
|
||||||
cpppath = [
|
|
||||||
CWD,
|
|
||||||
os.path.join(CWD, 'inc'), # 仅使用项目内的头文件目录
|
|
||||||
]
|
|
||||||
|
|
||||||
# 确保 build 目录存在
|
|
||||||
BUILD_DIR = 'build'
|
|
||||||
if not os.path.exists(BUILD_DIR):
|
|
||||||
os.makedirs(BUILD_DIR)
|
|
||||||
|
|
||||||
# 逐个编译源码生成目标文件(输出到 build 目录)
|
|
||||||
objs = []
|
|
||||||
for src in sources:
|
|
||||||
src_path = str(src) # 转换为字符串路径
|
|
||||||
obj_name = os.path.basename(src_path).replace('.c', '.o').replace('.S', '.o')
|
|
||||||
obj_path = os.path.join(CWD, BUILD_DIR, obj_name)
|
|
||||||
|
|
||||||
obj = env.Object(
|
|
||||||
target=obj_path,
|
|
||||||
source=src_path,
|
|
||||||
CPPPATH=cpppath,
|
|
||||||
)
|
|
||||||
objs.append(obj)
|
|
||||||
|
|
||||||
# 返回目标文件列表,给 SConstruct 链接用
|
|
||||||
Return('objs')
|
|
||||||
|
|
||||||
47
SConstruct
47
SConstruct
@@ -1,47 +0,0 @@
|
|||||||
import os
|
|
||||||
from SCons.Script import *
|
|
||||||
|
|
||||||
# 确保 build 目录存在
|
|
||||||
BUILD_DIR = 'build'
|
|
||||||
if not os.path.exists(BUILD_DIR):
|
|
||||||
os.makedirs(BUILD_DIR)
|
|
||||||
|
|
||||||
# 导入配置(修改为导入algo.py)
|
|
||||||
from algo import *
|
|
||||||
|
|
||||||
# 初始化构建环境
|
|
||||||
env = Environment(
|
|
||||||
tools=['default'],
|
|
||||||
CC=CC,
|
|
||||||
CXX=CXX,
|
|
||||||
AS=AS,
|
|
||||||
AR=AR,
|
|
||||||
LINK=LINK,
|
|
||||||
CCFLAGS=CFLAGS,
|
|
||||||
CXXFLAGS=CFLAGS,
|
|
||||||
ASFLAGS=AFLAGS,
|
|
||||||
LINKFLAGS=LFLAGS,
|
|
||||||
CPPPATH=['inc'], # 仅使用项目内的头文件目录
|
|
||||||
)
|
|
||||||
|
|
||||||
# 递归构建源码(SConscript 负责收集编译文件)
|
|
||||||
src_objs = env.SConscript('SConscript', exports='env')
|
|
||||||
|
|
||||||
# 链接生成 elf 文件(输出到 build 目录)
|
|
||||||
elf_target = os.path.join(BUILD_DIR, TARGET_NAME)
|
|
||||||
elf_file = env.Program(elf_target, src_objs)
|
|
||||||
|
|
||||||
# 后处理:生成 bin、asm 等文件
|
|
||||||
post_commands = env.Command(
|
|
||||||
os.path.join(BUILD_DIR, 'post_actions'), # 虚拟目标,确保命令执行
|
|
||||||
elf_file,
|
|
||||||
POST_ACTION
|
|
||||||
)
|
|
||||||
|
|
||||||
# 关联默认构建目标(执行 scons 时默认编译+后处理)
|
|
||||||
Default(elf_file)
|
|
||||||
Default(post_commands)
|
|
||||||
|
|
||||||
# 清理规则(删除 build 目录及内容)
|
|
||||||
Clean(elf_file, BUILD_DIR)
|
|
||||||
|
|
||||||
BIN
Tools/api_exp/JCDK222/java/io/javacard/io.exp
Normal file
BIN
Tools/api_exp/JCDK222/java/io/javacard/io.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/java/lang/javacard/lang.exp
Normal file
BIN
Tools/api_exp/JCDK222/java/lang/javacard/lang.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/java/rmi/javacard/rmi.exp
Normal file
BIN
Tools/api_exp/JCDK222/java/rmi/javacard/rmi.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacard/framework/javacard/framework.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacard/framework/javacard/framework.exp
Normal file
Binary file not shown.
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacard/security/javacard/security.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacard/security/javacard/security.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/apdu/javacard/apdu.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/apdu/javacard/apdu.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/biometry/javacard/biometry.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/biometry/javacard/biometry.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/crypto/javacard/crypto.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/crypto/javacard/crypto.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/external/javacard/external.exp
vendored
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/external/javacard/external.exp
vendored
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/framework/math/javacard/math.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/framework/math/javacard/math.exp
Normal file
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/framework/tlv/javacard/tlv.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/framework/tlv/javacard/tlv.exp
Normal file
Binary file not shown.
Binary file not shown.
BIN
Tools/api_exp/JCDK222/javacardx/framework/util/javacard/util.exp
Normal file
BIN
Tools/api_exp/JCDK222/javacardx/framework/util/javacard/util.exp
Normal file
Binary file not shown.
Binary file not shown.
BIN
Tools/ext_api/gp221.jar
Normal file
BIN
Tools/ext_api/gp221.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/api_export_files/java/io/javacard/io.exp
Normal file
BIN
Tools/jcdk222/api_export_files/java/io/javacard/io.exp
Normal file
Binary file not shown.
BIN
Tools/jcdk222/api_export_files/java/lang/javacard/lang.exp
Normal file
BIN
Tools/jcdk222/api_export_files/java/lang/javacard/lang.exp
Normal file
Binary file not shown.
BIN
Tools/jcdk222/api_export_files/java/rmi/javacard/rmi.exp
Normal file
BIN
Tools/jcdk222/api_export_files/java/rmi/javacard/rmi.exp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Tools/jcdk222/api_export_files/javacardx/apdu/javacard/apdu.exp
Normal file
BIN
Tools/jcdk222/api_export_files/javacardx/apdu/javacard/apdu.exp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Tools/jcdk222/api_export_files/javacardx/external/javacard/external.exp
vendored
Normal file
BIN
Tools/jcdk222/api_export_files/javacardx/external/javacard/external.exp
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
25
Tools/jcdk222/bin/apdutool.bat
Normal file
25
Tools/jcdk222/bin/apdutool.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.apdutool.Main %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/capdump.bat
Normal file
25
Tools/jcdk222/bin/capdump.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.capdump.CapDump %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/capgen.bat
Normal file
25
Tools/jcdk222/bin/capgen.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.jcasm.cap.Main %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/converter.bat
Normal file
25
Tools/jcdk222/bin/converter.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.converter.Converter %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
BIN
Tools/jcdk222/bin/cref.exe
Normal file
BIN
Tools/jcdk222/bin/cref.exe
Normal file
Binary file not shown.
25
Tools/jcdk222/bin/exp2text.bat
Normal file
25
Tools/jcdk222/bin/exp2text.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.converter.Exp2Text %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/jcwde.bat
Normal file
25
Tools/jcdk222/bin/jcwde.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.jcwde.Main %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
BIN
Tools/jcdk222/bin/jpcsclite.dll
Normal file
BIN
Tools/jcdk222/bin/jpcsclite.dll
Normal file
Binary file not shown.
25
Tools/jcdk222/bin/scriptgen.bat
Normal file
25
Tools/jcdk222/bin/scriptgen.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.scriptgen.Main %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/verifycap.bat
Normal file
25
Tools/jcdk222/bin/verifycap.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.offcardverifier.Verifier %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/verifyexp.bat
Normal file
25
Tools/jcdk222/bin/verifyexp.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.offcardverifier.VerifyExp %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
25
Tools/jcdk222/bin/verifyrev.bat
Normal file
25
Tools/jcdk222/bin/verifyrev.bat
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
REM
|
||||||
|
REM Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
REM Use is subject to license terms.
|
||||||
|
REM
|
||||||
|
|
||||||
|
if "%OS%" == "Windows_NT" setlocal
|
||||||
|
|
||||||
|
if not "%JAVA_HOME%" == "" goto check_tool
|
||||||
|
echo Please set the JAVA_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:check_tool
|
||||||
|
if not "%JC_HOME%" == "" goto doit
|
||||||
|
echo Please set the JC_HOME environment variable.
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:doit
|
||||||
|
set _CLASSES=%JC_HOME%\lib\apduio.jar;%JC_HOME%\lib\apdutool.jar;%JC_HOME%\lib\jcwde.jar;%JC_HOME%\lib\converter.jar;%JC_HOME%\lib\scriptgen.jar;%JC_HOME%\lib\offcardverifier.jar;%JC_HOME%\lib\api.jar;%JC_HOME%\lib\installer.jar;%JC_HOME%\lib\capdump.jar;%JC_HOME%\samples\classes;%CLASSPATH%;
|
||||||
|
|
||||||
|
%JAVA_HOME%\bin\java -classpath %_CLASSES% com.sun.javacard.offcardverifier.VerifyRev %*
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:end
|
||||||
|
if "%OS%" == "Windows_NT" endlocal
|
||||||
BIN
Tools/jcdk222/lib/apduio.jar
Normal file
BIN
Tools/jcdk222/lib/apduio.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/apdutool.jar
Normal file
BIN
Tools/jcdk222/lib/apdutool.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/api.jar
Normal file
BIN
Tools/jcdk222/lib/api.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/api_16.jar
Normal file
BIN
Tools/jcdk222/lib/api_16.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/capdump.jar
Normal file
BIN
Tools/jcdk222/lib/capdump.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/converter.jar
Normal file
BIN
Tools/jcdk222/lib/converter.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/installer.jar
Normal file
BIN
Tools/jcdk222/lib/installer.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/javacardframework.jar
Normal file
BIN
Tools/jcdk222/lib/javacardframework.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/jcclientsamples.jar
Normal file
BIN
Tools/jcdk222/lib/jcclientsamples.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/jcrmiclientframework.jar
Normal file
BIN
Tools/jcdk222/lib/jcrmiclientframework.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/jcwde.jar
Normal file
BIN
Tools/jcdk222/lib/jcwde.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/jcwde_16.jar
Normal file
BIN
Tools/jcdk222/lib/jcwde_16.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/offcardverifier.jar
Normal file
BIN
Tools/jcdk222/lib/offcardverifier.jar
Normal file
Binary file not shown.
BIN
Tools/jcdk222/lib/scriptgen.jar
Normal file
BIN
Tools/jcdk222/lib/scriptgen.jar
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/HtmlConverter.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/HtmlConverter.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/appletviewer.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/appletviewer.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/apt.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/apt.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/beanreg.dll
Normal file
BIN
Tools/jdk1.5.0_19/bin/beanreg.dll
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/extcheck.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/extcheck.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/idlj.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/idlj.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jar.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jar.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jarsigner.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jarsigner.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/java.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/java.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/javac.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/javac.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/javadoc.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/javadoc.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/javah.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/javah.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/javap.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/javap.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/javaw.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/javaw.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/javaws.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/javaws.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jconsole.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jconsole.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jdb.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jdb.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jps.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jps.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jstat.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jstat.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/jstatd.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/jstatd.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/keytool.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/keytool.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/kinit.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/kinit.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/klist.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/klist.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/ktab.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/ktab.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/native2ascii.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/native2ascii.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/orbd.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/orbd.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/pack200.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/pack200.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/packager.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/packager.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/policytool.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/policytool.exe
Normal file
Binary file not shown.
BIN
Tools/jdk1.5.0_19/bin/rmic.exe
Normal file
BIN
Tools/jdk1.5.0_19/bin/rmic.exe
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user