测试接口
This commit is contained in:
@@ -54,7 +54,9 @@ public class SydApiException extends RuntimeException{
|
||||
case 2:
|
||||
this.msg = "签名验证错误 ";
|
||||
break;
|
||||
|
||||
case 129:
|
||||
this.msg = "没有该指令";
|
||||
break;
|
||||
case 32770:
|
||||
this.msg = "签名验证错误(P7) ";
|
||||
break;
|
||||
|
||||
@@ -207,13 +207,13 @@ public interface SydGenApi {
|
||||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||||
|
||||
* @param dn 对*方 X509 证书DN。
|
||||
* @param nAlg 算法标识,0:AES,1:SM4
|
||||
* @param alg 算法标识,0:AES,1:SM4
|
||||
* @return RetWrap 包含 CipherKey SessionKey KCV
|
||||
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
|
||||
* SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
|
||||
* KCV 会话密钥的检验值,HEX 格式,长度为 32H。
|
||||
*/
|
||||
RetWrap generateDEByDn(byte[] dn, byte nAlg) throws Exception;
|
||||
RetWrap generateDEByDn(byte[] dn, int alg) throws Exception;
|
||||
|
||||
/**
|
||||
* 产生对称密钥,通过公钥加密生成网联格式的数字信封。
|
||||
|
||||
@@ -88,7 +88,7 @@ interface SydAttachedSVApi {
|
||||
|
||||
/**
|
||||
* 采用 RSA 算法,用指定的公钥对指定的原始数据进行数字签名验证。
|
||||
* @param HashMark 证书号
|
||||
* @param HashMark 哈希标识
|
||||
* @param nOrgDataType 签名方式
|
||||
* @param publicKey 公钥
|
||||
* @param orgData 原始数据
|
||||
|
||||
@@ -80,7 +80,7 @@ public class SydApi4j implements SydApi {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap SYD_SM2GenKeyPair() {
|
||||
ProtoQN proto = new ProtoQN();
|
||||
@@ -379,7 +379,7 @@ public class SydApi4j implements SydApi {
|
||||
packet.put("header", sn.getSn().array());
|
||||
data.put("signatureDataType$option", 1);
|
||||
data.put("DN", dn);
|
||||
data.put("data", orgData);
|
||||
data.put("signData", orgData);
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
|
||||
@@ -592,6 +592,7 @@ public class SydApi4j implements SydApi {
|
||||
return detachedVerify(DATA_HASH, hash, sign);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String detachedSign(int dataType, byte[] orgData, String sCertDN) {
|
||||
Proto8005 proto = new Proto8005(); //pset.getProtocolReqRender("75");
|
||||
@@ -649,6 +650,7 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public boolean detachedVerify(int dataType, byte[] orgData, String sign) {
|
||||
Proto8006 proto = new Proto8006(); //pset.getProtocolReqRender("75");
|
||||
@@ -805,7 +807,7 @@ public class SydApi4j implements SydApi {
|
||||
return detachedSign(DATA_ORIGIN, orgData, sCertDN);
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public boolean SYD_SM2_DetachedVerify_HA(
|
||||
byte[] orgData,
|
||||
@@ -814,7 +816,7 @@ public class SydApi4j implements SydApi {
|
||||
return detachedVerify(DATA_ORIGIN, orgData, sign);
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public boolean SYD_DetachedVerify(byte[] orgData, String sign) {
|
||||
return SYD_SM2_DetachedVerify_HA(orgData, sign);
|
||||
@@ -885,6 +887,7 @@ public class SydApi4j implements SydApi {
|
||||
return GetX509CertInfo(new String(pCertInfo));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap getAllCert(int dataFlag) throws UnsupportedEncodingException {
|
||||
Proto8008 proto = new Proto8008();
|
||||
@@ -950,6 +953,7 @@ public class SydApi4j implements SydApi {
|
||||
return r;
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap importCert(byte[] certData, byte[] organizationId) {
|
||||
|
||||
@@ -1814,6 +1818,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap SYMEnDeData(Boolean isEn, int nAlg, String seesionKey, int roundmod, int fullMode, byte[] pInData, byte[] iv, int block) {
|
||||
|
||||
@@ -2043,8 +2048,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
public RetWrap generateDEByDn(byte[] dn, byte nAlg) {
|
||||
Integer alg = new Integer(nAlg);
|
||||
public RetWrap generateDEByDn(byte[] dn, int alg) {
|
||||
Proto6A proto = new Proto6A();
|
||||
// 填充数据
|
||||
PacketSN sn = PacketSN.gen();
|
||||
@@ -2485,6 +2489,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public boolean RSAVerify(int HashMark, int nOrgDataType, byte[] publicKey, byte[] orgData, byte[] base64Sign) {
|
||||
|
||||
@@ -2499,6 +2504,7 @@ public class SydApi4j implements SydApi {
|
||||
data.put("hashMark$option", HashMark);
|
||||
data.put("signature", sign);
|
||||
data.put("hashData", orgData);
|
||||
data.put("infoData", orgData);
|
||||
data.put("publicKey", publicKey);
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -2524,6 +2530,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public byte[] RSASignC(String privateKeyIndex, int HashMark, int nOrgDataType, byte[] orgData) {
|
||||
Proto7B proto = new Proto7B();
|
||||
@@ -2668,6 +2675,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String RSAGetPublicKeyC(String userId, int nKeyTypes) {
|
||||
|
||||
@@ -2865,6 +2873,7 @@ public class SydApi4j implements SydApi {
|
||||
return cinfo;
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String GetX509CertFileC(String userId, int nCertType) {
|
||||
|
||||
@@ -2913,6 +2922,7 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String SM2SignC(String pUserID, String certNo, int nOrgDataType, byte[] publicKey, byte[] orgData) {
|
||||
|
||||
@@ -3162,6 +3172,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public boolean SM2Verify(String certNo, int nOrgDataType, byte[] publicKey, byte[] orgData, String base64Sign) {
|
||||
|
||||
@@ -3348,6 +3359,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public byte[] decryptBySkC(int alg, String userId, byte[] data) {
|
||||
byte[] algBin = 0 == alg ? DTO78.Req.Data.AlgorithmKeyOptions.OPVRSA.getBin() : DTO78.Req.Data.AlgorithmKeyOptions.OPVSM2.getBin();
|
||||
@@ -4099,6 +4111,7 @@ public class SydApi4j implements SydApi {
|
||||
return repackEncrypt(packet);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String GetDNPublicKey(int dnType, byte[] dn) {
|
||||
|
||||
@@ -4679,6 +4692,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param macLen MAC数据长度,1=4Byte 2=8Byte 3=16Byte(仅在SM4/AES 下有效)
|
||||
* @return mac 值 hex 格式
|
||||
*/
|
||||
// 测试通过
|
||||
@Override
|
||||
public String MACCalc(int alg, int keyType, String AK, int fullMode, byte[] infoData, int macLen) {
|
||||
ProtoMA proto = new ProtoMA();
|
||||
@@ -4696,7 +4710,7 @@ public class SydApi4j implements SydApi {
|
||||
data.put("fullMode$option", fullMode);
|
||||
data.put("MACLen$option", macLen - 1);
|
||||
data.put("key", AK.getBytes());
|
||||
data.put("MACData", Util.bytes2HexString(infoData));
|
||||
data.put("MACData", infoData);
|
||||
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -4765,8 +4779,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("fullMode$option", fullMode);
|
||||
data.put("MACLen$option", macLen - 1);
|
||||
data.put("key", AK);
|
||||
data.put("MAC", mac.getBytes());
|
||||
data.put("MACData", Util.bytes2HexString(infoData));
|
||||
data.put("MAC", mac);
|
||||
data.put("MACData", infoData);
|
||||
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -4931,7 +4945,7 @@ public class SydApi4j implements SydApi {
|
||||
return GenerateMIYA(AreaCode, Version, Alg, Data, MIYA_FULL_WEAK, MIYA_MAC_LEN_4);
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String GenerateMIYA(String AreaCode, int Version, int Alg, byte[] Data, byte fullFlag, byte macLenFlag) {
|
||||
if (Version < 0 || Version > 999) {
|
||||
@@ -5009,6 +5023,7 @@ public class SydApi4j implements SydApi {
|
||||
return VerifyMIYA(AreaCode, Version, Alg, mac, Data, MIYA_FULL_WEAK, MIYA_MAC_LEN_4);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public boolean VerifyMIYA(String AreaCode, int Version, int Alg, String mac, byte[] Data, byte fullFlag, byte macLenFlag) {
|
||||
|
||||
@@ -5196,6 +5211,7 @@ public class SydApi4j implements SydApi {
|
||||
*
|
||||
* @param format 打印格式
|
||||
*/
|
||||
// 测试通过
|
||||
public void setPrintFormat(String format) {
|
||||
ProtoPA proto = new ProtoPA();
|
||||
|
||||
@@ -5751,10 +5767,10 @@ public class SydApi4j implements SydApi {
|
||||
data.put("alg$option", alg);
|
||||
data.put("fillKey$option", 1);
|
||||
data.put("publicKey", publicKey);
|
||||
/* data.put("AlgorithmKey1", "P");
|
||||
data.put("AlgorithmKey1", "P");
|
||||
data.put("EncryAlgorithm1$option", 1);
|
||||
data.put("AlgorithmKey2", "Q");
|
||||
data.put("EncryAlgorithm2$option", 0);*/
|
||||
data.put("EncryAlgorithm2$option", 0);
|
||||
|
||||
packet.put("data", data);
|
||||
// 渲染发送 耗时长
|
||||
@@ -6110,6 +6126,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param infoData 密文PIN
|
||||
* @return 密文PIN
|
||||
*/
|
||||
// 测试通过
|
||||
public byte[] switchEncry4PIN(String srcKey, String aimKey, byte[] infoData) {
|
||||
// 获取协议
|
||||
Proto67 proto = new Proto67();
|
||||
@@ -8703,6 +8720,108 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] _SYMEncryt(int storageType, String key, int algFlag, byte[] iv, int divNum, List<byte[]> divData, int[] divAlgFlag, List<byte[]> divIv, byte[] inputData) {
|
||||
// 填充数据
|
||||
PacketSN sn = PacketSN.gen();
|
||||
|
||||
ByteBuffer bb = ByteBuffer.allocate(10240);
|
||||
|
||||
byte[] ret = new byte[2];
|
||||
bb.put(ret);
|
||||
bb.put(sn.getSn().array());
|
||||
bb.put("S0".getBytes());
|
||||
|
||||
//存储类型
|
||||
bb.put(String.valueOf(storageType).getBytes());
|
||||
if (1 == storageType) {
|
||||
byte[] keyBytes = Util.hexString2Bytes(key);
|
||||
// 外部密钥长度
|
||||
bb.put(String.format("%04d", keyBytes.length).getBytes());
|
||||
// 外部密钥
|
||||
bb.put(keyBytes);
|
||||
}
|
||||
if (0 == storageType) {
|
||||
String gId = "00000000" + key;
|
||||
gId = gId.substring(gId.length() - 8, gId.length());
|
||||
// 密钥索引
|
||||
bb.put(("0000000000000000000" + gId).getBytes());
|
||||
}
|
||||
|
||||
//算法类型支持算法:3DES、AES、SM1、SM4
|
||||
bb.put(String.format("%02d", MyUtil.transAlg(algFlag)).getBytes());
|
||||
bb.put(iv);
|
||||
//密钥分散级数
|
||||
bb.put(String.valueOf(divNum).getBytes());
|
||||
|
||||
// 分散因子
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(divData.get(i));
|
||||
}
|
||||
|
||||
// 分散算法标识
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(String.format("%02d", MyUtil.transAlg(divAlgFlag[i])).getBytes());
|
||||
}
|
||||
|
||||
// 分散算法的初始向量
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(divIv.get(i));
|
||||
}
|
||||
|
||||
// 输入数据长度
|
||||
bb.put(String.format("%04d", inputData.length).getBytes());
|
||||
|
||||
//输入数据
|
||||
bb.put(inputData);
|
||||
|
||||
int len = bb.position() - 2;
|
||||
|
||||
bb.put(0, (byte) (0xFF & (len / 256)));
|
||||
bb.put(1, (byte) (0xFF & (len % 256)));
|
||||
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
|
||||
bb.flip();
|
||||
|
||||
// 解析头部
|
||||
bb.get(new byte[2], 0, 2);
|
||||
|
||||
// 解析header
|
||||
byte[] header = new byte[8];
|
||||
bb.get(header, 0, 8);
|
||||
|
||||
// 解析协议
|
||||
bb.get(new byte[2], 0, 2);
|
||||
|
||||
if (!Arrays.equals(sn.getSn().array(), header)) {
|
||||
throw new SydApiException("包序号不匹配", -4);
|
||||
}
|
||||
|
||||
// 检测错误
|
||||
byte[] error = new byte[2];
|
||||
|
||||
bb.get(error, 0, 2);
|
||||
|
||||
int e = Util.a2i(error, 16);
|
||||
|
||||
if (0 != e) {
|
||||
throw new SydApiException(RetWrap.transMsg(e), e);
|
||||
}
|
||||
|
||||
// 数据长度
|
||||
byte[] infoLen = new byte[4];
|
||||
bb.get(infoLen, 0, 4);
|
||||
|
||||
// 数据
|
||||
byte[] info = new byte[Util.a2i(infoLen, 10)];
|
||||
bb.get(info);
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param storageType 存储类型 0-使用内部密钥,1-使用外部密钥
|
||||
* @param key 使用内部密钥时,该值传后八位密钥索引;使用外部密钥时,该值为外部密钥(hex格式)
|
||||
@@ -8897,6 +9016,107 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] _genMAC(int storageType, String key, int algFlag, byte[] iv, int divNum, List<byte[]> divData, int[] divAlgFlag, List<byte[]> divIv, byte[] inputData, int macDataLen) {
|
||||
// 填充数据
|
||||
PacketSN sn = PacketSN.gen();
|
||||
|
||||
ByteBuffer bb = ByteBuffer.allocate(10240);
|
||||
|
||||
byte[] ret = new byte[2];
|
||||
bb.put(ret);
|
||||
bb.put(sn.getSn().array());
|
||||
bb.put("S2".getBytes());
|
||||
|
||||
//存储类型
|
||||
bb.put(String.valueOf(storageType).getBytes());
|
||||
if (1 == storageType) {
|
||||
byte[] keyBytes = Util.hexString2Bytes(key);
|
||||
// 外部密钥长度
|
||||
bb.put(String.format("%04d", keyBytes.length).getBytes());
|
||||
// 外部密钥
|
||||
bb.put(keyBytes);
|
||||
}
|
||||
if (0 == storageType) {
|
||||
String gId = "00000000" + key;
|
||||
gId = gId.substring(gId.length() - 8, gId.length());
|
||||
// 密钥索引
|
||||
bb.put(("0000000000000000000" + gId).getBytes());
|
||||
}
|
||||
|
||||
//算法类型支持算法:3DES、AES、SM1、SM4
|
||||
bb.put(String.format("%02d", MyUtil.transAlg(algFlag)).getBytes());
|
||||
bb.put(iv);
|
||||
//密钥分散级数
|
||||
bb.put(String.valueOf(divNum).getBytes());
|
||||
|
||||
// 分散因子
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(divData.get(i));
|
||||
}
|
||||
|
||||
// 分散算法标识
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(String.format("%02d", MyUtil.transAlg(divAlgFlag[i])).getBytes());
|
||||
}
|
||||
|
||||
// 分散算法的初始向量
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(divIv.get(i));
|
||||
}
|
||||
|
||||
// 输入数据长度
|
||||
bb.put(String.format("%04d", inputData.length).getBytes());
|
||||
|
||||
//输入数据
|
||||
bb.put(inputData);
|
||||
|
||||
// 需要的MAC长度
|
||||
bb.put(String.format("%02d", macDataLen).getBytes());
|
||||
|
||||
int len = bb.position() - 2;
|
||||
|
||||
bb.put(0, (byte) (0xFF & (len / 256)));
|
||||
bb.put(1, (byte) (0xFF & (len % 256)));
|
||||
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
|
||||
bb.flip();
|
||||
|
||||
// 解析头部
|
||||
bb.get(new byte[2], 0, 2);
|
||||
|
||||
// 解析header
|
||||
byte[] header = new byte[8];
|
||||
bb.get(header, 0, 8);
|
||||
|
||||
// 解析协议
|
||||
bb.get(new byte[2], 0, 2);
|
||||
|
||||
if (!Arrays.equals(sn.getSn().array(), header)) {
|
||||
throw new SydApiException("包序号不匹配", -4);
|
||||
}
|
||||
|
||||
// 检测错误
|
||||
byte[] error = new byte[2];
|
||||
|
||||
bb.get(error, 0, 2);
|
||||
|
||||
int e = Util.a2i(error, 16);
|
||||
|
||||
if (0 != e) {
|
||||
throw new SydApiException(RetWrap.transMsg(e), e);
|
||||
}
|
||||
|
||||
// 数据
|
||||
byte[] info = new byte[macDataLen];
|
||||
bb.get(info);
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param keyIndex 密钥索引
|
||||
* @param iv 仅当算法为3DES-CBC模式下有此域
|
||||
@@ -8984,6 +9204,95 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] _genMacAndNextIv(String keyIndex, byte[] iv, int divNum, List<byte[]> divData, int[] divAlgFlag, List<byte[]> divIv, byte[] inputData) {
|
||||
// 填充数据
|
||||
PacketSN sn = PacketSN.gen();
|
||||
|
||||
ByteBuffer bb = ByteBuffer.allocate(10240);
|
||||
|
||||
byte[] ret = new byte[2];
|
||||
bb.put(ret);
|
||||
bb.put(sn.getSn().array());
|
||||
bb.put("S3".getBytes());
|
||||
|
||||
|
||||
String gId = "00000000" + keyIndex;
|
||||
gId = gId.substring(gId.length() - 8);
|
||||
// 密钥索引
|
||||
bb.put(("0000000000000000000" + gId).getBytes());
|
||||
|
||||
|
||||
// 算法类型支持算法:仅支持3DES-CBC
|
||||
bb.put(String.format("%02d", 8).getBytes());
|
||||
bb.put(iv);
|
||||
//密钥分散级数
|
||||
bb.put(String.valueOf(divNum).getBytes());
|
||||
|
||||
// 分散因子
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(divData.get(i));
|
||||
}
|
||||
|
||||
// 分散算法标识
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(String.format("%02d", MyUtil.transAlg(divAlgFlag[i])).getBytes());
|
||||
}
|
||||
|
||||
// 分散算法的初始向量
|
||||
for (int i = 0; i < divNum; i++) {
|
||||
bb.put(divIv.get(i));
|
||||
}
|
||||
|
||||
// 输入数据长度
|
||||
bb.put(String.format("%04d", inputData.length).getBytes());
|
||||
|
||||
//输入数据
|
||||
bb.put(inputData);
|
||||
|
||||
int len = bb.position() - 2;
|
||||
|
||||
bb.put(0, (byte) (0xFF & (len / 256)));
|
||||
bb.put(1, (byte) (0xFF & (len % 256)));
|
||||
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
|
||||
bb.flip();
|
||||
|
||||
// 解析头部
|
||||
bb.get(new byte[2], 0, 2);
|
||||
|
||||
// 解析header
|
||||
byte[] header = new byte[8];
|
||||
bb.get(header, 0, 8);
|
||||
|
||||
// 解析协议
|
||||
bb.get(new byte[2], 0, 2);
|
||||
|
||||
if (!Arrays.equals(sn.getSn().array(), header)) {
|
||||
throw new SydApiException("包序号不匹配", -4);
|
||||
}
|
||||
|
||||
// 检测错误
|
||||
byte[] error = new byte[2];
|
||||
|
||||
bb.get(error, 0, 2);
|
||||
|
||||
int e = Util.a2i(error, 16);
|
||||
|
||||
if (0 != e) {
|
||||
throw new SydApiException(RetWrap.transMsg(e), e);
|
||||
}
|
||||
|
||||
// 数据
|
||||
byte[] info = new byte[16];
|
||||
bb.get(info);
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param storageType 存储类型,0-存储在内部 1-存储在外部
|
||||
* @param algFlag 算法类型:仅支持RSA、SM2
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
package com.sunyard.sydapi.test;
|
||||
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.SydApi;
|
||||
import com.sunyard.cert.X509;
|
||||
import com.sunyard.proto.Util;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.io.*;
|
||||
|
||||
public class TestAllMethods {
|
||||
|
||||
@@ -20,7 +21,8 @@ public class TestAllMethods {
|
||||
public void before() {
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
// api = (SydApi4j) new SydApi4j().connect("172.16.17.163", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("192.168.1.7", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -58,6 +60,37 @@ public class TestAllMethods {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取证书
|
||||
public String getCertStr(String path) {
|
||||
|
||||
BufferedInputStream bis = null;
|
||||
try {
|
||||
bis = new BufferedInputStream(new FileInputStream(path));
|
||||
|
||||
StringBuilder str = new StringBuilder();
|
||||
|
||||
int len = 0;
|
||||
|
||||
while ((len = bis.read()) != -1) {
|
||||
str.append((char) len);
|
||||
}
|
||||
|
||||
return str.toString();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (bis != null) {
|
||||
try {
|
||||
bis.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将hex类型的数组转为byte型
|
||||
* {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"}
|
||||
@@ -87,8 +120,55 @@ public class TestAllMethods {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 读取文件中的信息,返回byte数组
|
||||
* @param filePath 文件路径
|
||||
* @return
|
||||
*/
|
||||
public byte[] inputStream2ByteArray(String filePath) {
|
||||
|
||||
InputStream in = null;
|
||||
ByteArrayOutputStream out = null;
|
||||
byte[] data = null;
|
||||
try {
|
||||
in = new FileInputStream(filePath);
|
||||
|
||||
out = new ByteArrayOutputStream();
|
||||
byte[] buffer = new byte[1024 * 4];
|
||||
int n = 0;
|
||||
while ((n = in.read(buffer)) != -1) {
|
||||
out.write(buffer, 0, n);
|
||||
}
|
||||
|
||||
data = out.toByteArray();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
|
||||
if (in != null) {
|
||||
try {
|
||||
in.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (out != null) {
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
// A0 1.1.1 对称密钥产生,
|
||||
// 测试通过
|
||||
// A0
|
||||
@Test
|
||||
public void testGenSymmetricKey() {
|
||||
RetWrap retWrap = api.genSymmetricKey("000", 'X');
|
||||
@@ -106,6 +186,7 @@ public class TestAllMethods {
|
||||
|
||||
// A0 1.1.2 对称密钥产生, 对比之前添加了可产生ZMK加密下的密钥,
|
||||
// 测试通过
|
||||
// A0
|
||||
@Test
|
||||
public void testGenSymKey() {
|
||||
// 此密钥方案为: 1A+K+27位的索引号
|
||||
@@ -416,6 +497,7 @@ public class TestAllMethods {
|
||||
|
||||
// 006E00000000000000004342303030303030584B303030303030303030303030303030313030303030303030303031584B30303030303030303030303030303032303030303030303030303250313131313239384430324231433742433945303130313135373231323733373831314E
|
||||
|
||||
// 没有该指令
|
||||
// CB
|
||||
@Test
|
||||
public void testTransPinFrOneKeyToAno() {
|
||||
@@ -442,17 +524,65 @@ public class TestAllMethods {
|
||||
System.out.println(new String(bytes));
|
||||
}
|
||||
|
||||
// 00000000
|
||||
// MA
|
||||
// P
|
||||
// 1
|
||||
// 0
|
||||
// 0
|
||||
// 1
|
||||
// XK122222222222222200312222222
|
||||
// 11110000
|
||||
|
||||
// 00300000000000000000
|
||||
// 4D41
|
||||
// 50
|
||||
// 31
|
||||
// 30
|
||||
// 30
|
||||
// 31
|
||||
// 584B313232323232323232323232323232323030333132323232323232
|
||||
// 31313131
|
||||
|
||||
// 测试通过
|
||||
// MA
|
||||
@Test
|
||||
public void testMACCalc() {
|
||||
|
||||
String s = api.MACCalc(1, 0, "XK122222222222222200312222222", 0, "1111".getBytes(), 1);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 003C0000000000000000
|
||||
// 4D43
|
||||
// 50
|
||||
// 31
|
||||
// 30
|
||||
// 30
|
||||
// 32
|
||||
// 584B313232323232323232323232323232323030333132323232323232
|
||||
// 3131313131313131
|
||||
// 3131313131313131
|
||||
|
||||
// 00383030303030303030
|
||||
// 4D43
|
||||
// 50
|
||||
// 31
|
||||
// 30
|
||||
// 30
|
||||
// 31
|
||||
// 584B313232323232323232323232323232323030333132323232323232
|
||||
// 31313131
|
||||
// 3131313131313131
|
||||
|
||||
// MC
|
||||
@Test
|
||||
public void testMACCheck() {
|
||||
String AK = "XK122222222222222200312222222";
|
||||
|
||||
String s = api.MACCalc(1, 0, AK, 0, "1111".getBytes(), 1);
|
||||
|
||||
api.MACCheck(1, 0, AK, 0, "1111".getBytes(), s);
|
||||
}
|
||||
|
||||
String key = "X40B6169F6349506040B6169F63495060";
|
||||
@@ -474,25 +604,16 @@ public class TestAllMethods {
|
||||
System.out.println(new String(bytes));
|
||||
}
|
||||
|
||||
// 00643030303030303030
|
||||
// 4530
|
||||
// 31
|
||||
// 30
|
||||
// 32
|
||||
// 30
|
||||
// 583430423631363946363334393530363034304236313639463633343935303630
|
||||
// 31
|
||||
// 31
|
||||
// 30303030303030303030303030303030
|
||||
// 303130
|
||||
// 4141414141414141414141414141414142424242424242424242424242424242
|
||||
|
||||
// 测试通过
|
||||
// E0
|
||||
@Test
|
||||
public void testSYMEnDeData() {
|
||||
String iv = "0000000000000000";
|
||||
RetWrap retWrap = api.SYMEnDeData(true, 0, key, 2, 1, msg.getBytes(), iv.getBytes(), 1);
|
||||
printRetWrap(retWrap);
|
||||
String seesionKey = "XFD92E1D7C45FA56EAD2F4FC1E7898465";
|
||||
String pInData = "1111111111111111";
|
||||
String IV = "1111111111111111";
|
||||
|
||||
RetWrap retWrap = api.SYMEnDeData(true, 0, seesionKey, 2, 0, pInData.getBytes(), IV.getBytes(), 0);
|
||||
printRetWrap(retWrap, true);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@@ -536,31 +657,76 @@ public class TestAllMethods {
|
||||
System.out.println(aBoolean);
|
||||
}
|
||||
|
||||
// 00A30000000000000000
|
||||
// 3737
|
||||
// 31
|
||||
// 30313238
|
||||
// 5E1A8F50696C737AFCA0D2F7093E90D3913204013C4A85072AA8D3CDBE1782860000000000000000000000000000000000000000000000000000000000000000C729A69AA23CA0736E5C223487DF211D51BAFFDCF06914CE2E855EF6DE0F42AB0000000000000000000000000000000000000000000000000000000000000000
|
||||
// 30303136
|
||||
// 46464646464646464646464646464646
|
||||
|
||||
// 测试通过
|
||||
// 77
|
||||
@Test
|
||||
public void testEncryptByPk() {
|
||||
String pk = "034200041CD47354867E12B9D138F098413C47D42EDEB2AD402EAB431C0C7AC2FE2D6DE9C67273C643C709F2A749188941B7FA7F9FF14F8E7D19316936DB4D4954FF3819";
|
||||
String pk = "034200042E2980FEDC9DAB03EEE490D9382CA04F018D905EF7319152ADF6A47EF2E3675204B015B7D16AB015AC8C2F24D2E63F69B867E16BA47B0138A86D4461DAE568A6";
|
||||
String data = "FFFFFFFFFFFFFFFF";
|
||||
|
||||
byte[] bytes = api.encryptByPk(1, pk, data.getBytes());
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 78
|
||||
@Test
|
||||
public void testDecryptBySkC() {
|
||||
String userId = "0000000000000001";
|
||||
String data = "30 78 02 20 78 E2 C1 C9 72 1F 77 00 55 76 A3 1F 3F 99 18 E0 3D AC A8 7F 5B 48 27 52 51 D8 54 49 BD 70 A6 EC 02 20 46 B4 24 14 27 EB 96 81 D4 93 A1 7E 03 E0 37 24 94 C6 A0 5D 12 F2 06 BA 15 0A FD 67 2C 82 9A 90 04 20 4D 3E 6D 0F 4C 5D CC 2A 18 5F 01 B8 51 F7 F7 A2 EF 13 C7 D8 66 46 C8 34 5D A8 38 F6 04 D1 D3 61 04 10 7E 21 C5 BF 01 91 62 D3 FC 67 8C 85 55 12 3B B5";
|
||||
// userId
|
||||
String userId = "7777777777777779";
|
||||
String pk = "034200042E2980FEDC9DAB03EEE490D9382CA04F018D905EF7319152ADF6A47EF2E3675204B015B7D16AB015AC8C2F24D2E63F69B867E16BA47B0138A86D4461DAE568A6";
|
||||
String data = "FFFFFFFFFFFFFFFF";
|
||||
|
||||
byte[] bytes = api.decryptBySkC(1, userId, Util.hexString2Bytes(changeStr(data)));
|
||||
byte[] bytes = api.encryptByPk(1, pk, data.getBytes());
|
||||
String encryptData = Util.bytes2HexString(bytes);
|
||||
System.out.println("加密后的数据: " + encryptData);
|
||||
|
||||
byte[] originalData = api.decryptBySkC(1, userId, Util.hexString2Bytes(encryptData));
|
||||
System.out.println("解密后的数据: " + Util.bytes2HexString(originalData));
|
||||
}
|
||||
|
||||
// 79
|
||||
@Test
|
||||
public void testEncryptBySk() {
|
||||
String rsaKey = "000400001661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019415964EDC1D617DCEA0E332EC9AF01165091AE6599AD06F6E24CD73CEA2FDA0D6A2CCF6805EBF5C9523D2C2D4670F920B166489B2B752903BA739219FE9FD7A4ABA0AFA3D19C4E0C2957DA3999B1772C562C5CFDDB2DD545A786E3FF7F7376DA978234CA5A51A1C5EE8CFA1B3460356E8F8808799E5DC39646FEEEF2AC2CE38D281661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E0194157BA816DB8823AAF1661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941971D31BFA90FCBF88452F15691C90A6EF4BC3B39496C7B1BF6C0BFEFFFCACEE3E8D5E177AB8C77A7BB04430E6540650887251CCC5B5B94D0509161F46A13B8E2D5D3971BBA180007441CB72FCB0F12317ADFD52BE098931AAB5ECA412D7DCFCE707D51A95B6E5F5826A9637D947CB4E9A5544C4622099D427CC2F1C81C9166B61661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019415AFF74E24873502CBBE817497587F920D6DBB6AFAA3617ABC1003EF00C86BF4758C5997FD61408ED619FF7ADAA281D4AAEA98848D074F820CAD0CE68A86597231661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941724AD53411CB6FD50BF14981C35E8FFB53EB2D3993060C67D720924F5FA2DAFFE2222D94E8BD98FC5FC0BCD3D7F58E8268C3E1E88C7EFEE66E490C9BC744B3C91661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941B33F7E511B17707CC89F17D463C4B24E7344BD742C137E6FFBAC1080C28C6656F07DC88DECDAE7C984587E82E668BC54921BC78264BB06CF54E4D5BE75C019271661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941456204A062F7A9B68ECC8ACCB5234FD5DE4BCA71D1531251BAA67B1DAB49A0F7FDD0ED8DB217A3C5A753AD14868D912600C44DDE8879A22D6B7408C9E190169E1661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E0194123DD650FD6D8E766A5CDEE9D67715906A9591ACAA8FEFCA401494F18F79EAA439FB54C628493FEF624D71624C0CB17AA5E92B0EB97B1A26EF34C6809EC58D64A";
|
||||
String sm2Key = "0001000039003BABAA8C984A527E804591119F982BCDAB1F88BBA922D3B158BC23102DF10000000000000000000000000000000000000000000000000000000000000000";
|
||||
String data = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
|
||||
|
||||
api.encryptBySk(0, rsaKey, data.getBytes());
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 7B
|
||||
@Test
|
||||
public void testRSASignC() {
|
||||
String userId = "1111111111111114";
|
||||
String data = "11111111";
|
||||
byte[] bytes = api.RSASignC(userId, 0, 1, data.getBytes());
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 7C
|
||||
@Test
|
||||
public void testRSAVerify() {
|
||||
String thisPublicKey = "308189028181009666F70AA6B013099E68A0EF5EE3504A2210287459D8DD5C3851D2E5FAB821DE379C743F9EA2747A5BD441AB6FEB297ABD0DC66AD116FA918493D85E0BB05CCD2C5089BD1D5963F0FBB85EE869D18BE32EEFF5776350127B64A9C58119F6A52A9718CD3E6E6F97454826B7A7707DEBF9B2E5AD8A6FC1965F2747682FF2FA24A10203010001";
|
||||
String data = "11111111";
|
||||
String userId = "1111111111111114";
|
||||
|
||||
byte[] bytes = api.RSASignC(userId, 0, 1, data.getBytes());
|
||||
String sign = Util.bytes2HexString(bytes);
|
||||
System.out.println(sign);
|
||||
|
||||
boolean b = api.RSAVerify(0, 1, Util.hexString2Bytes(thisPublicKey), data.getBytes(), Util.hexString2Bytes(sign));
|
||||
System.out.println(b);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@@ -576,6 +742,23 @@ public class TestAllMethods {
|
||||
System.out.println("hash:" + Util.bytes2HexString((byte[]) retWrap.get("hash")));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 7E
|
||||
@Test
|
||||
public void testGetDNPublicKey() {
|
||||
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
String s = api.GetDNPublicKey(0, dn.getBytes());
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 80
|
||||
@Test
|
||||
public void testSM2SignCustomized() {
|
||||
String sn = "3C93000000000025";
|
||||
String s = api.SM2SignCustomized(sn, "111".getBytes());
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// E2
|
||||
@Test
|
||||
@@ -588,7 +771,7 @@ public class TestAllMethods {
|
||||
// E2
|
||||
@Test
|
||||
public void testSM2OrRSAGenKeyPair() {
|
||||
String index = "0000000000000001";
|
||||
String index = "1111111111111115";
|
||||
|
||||
// SM2
|
||||
// RetWrap retWrap = api.SM2OrRSAGenKeyPair(1, index, 0);
|
||||
@@ -598,6 +781,13 @@ public class TestAllMethods {
|
||||
printRetWrap(retWrap, true);
|
||||
}
|
||||
|
||||
// E4
|
||||
@Test
|
||||
public void testGenKeyPair() {
|
||||
RetWrap retWrap = api.genKeyPair(415, 0002);
|
||||
printRetWrap(retWrap);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 72
|
||||
@Test
|
||||
@@ -665,6 +855,7 @@ public class TestAllMethods {
|
||||
printRetWrap(retWrap, true);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 60
|
||||
@Test
|
||||
public void testGetTransmissionKey() {
|
||||
@@ -672,6 +863,34 @@ public class TestAllMethods {
|
||||
printRetWrap(retWrap);
|
||||
}
|
||||
|
||||
// 61
|
||||
@Test
|
||||
public void testRoleVerify() {
|
||||
// api.roleVerify()
|
||||
}
|
||||
|
||||
// 68
|
||||
@Test
|
||||
public void testDecryptAndEncryptByP() {
|
||||
|
||||
String data = "FFFFFFFFFFFFFFFF";
|
||||
|
||||
String publicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
|
||||
|
||||
byte[] bytes = api.SYMEncryptData(3,"XF356BCBA3204F6E6F356BCBA3204F6E6", 1, data.getBytes());
|
||||
String enData = Util.bytes2HexString(bytes);
|
||||
System.out.println("加密:" + enData);
|
||||
|
||||
RetWrap retWrap = api.decryptAndEncryptByP("XF356BCBA3204F6E6F356BCBA3204F6E6", bytes, 1, Util.hexString2Bytes(publicKey));
|
||||
printRetWrap(retWrap);
|
||||
}
|
||||
|
||||
// 69
|
||||
@Test
|
||||
public void testDecryptAndEncryptByS() {
|
||||
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// Y8
|
||||
@Test
|
||||
@@ -752,23 +971,43 @@ public class TestAllMethods {
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 67
|
||||
@Test
|
||||
public void testswitchEncry4PIN() {
|
||||
String srcKey = "U51B737CE0EE1A14A6411B64EDE56020B";
|
||||
String aimKey = "X94D35D86EF1F3213D55C47822F87D385";
|
||||
String infoData = "6157212";
|
||||
String srcKey = "XK111111111111111200100000001";
|
||||
String aimKey = "XK111111111111111300100000001";
|
||||
String infoData = "61572122";
|
||||
|
||||
byte[] bytes = api.switchEncry4PIN(srcKey, aimKey, infoData.getBytes());
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
// 6A
|
||||
@Test
|
||||
public void testGenerateDEByDn() {
|
||||
String dn = "C=CN,ST=ZJ,L=HZ,O=SUNYARD,OU=123456,CN=111";
|
||||
|
||||
RetWrap retWrap = api.generateDEByDn(dn.getBytes(), 1);
|
||||
printRetWrap(retWrap);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 6E
|
||||
@Test
|
||||
public void testGetX509SN() {
|
||||
String dn = "C=CN,ST=ZJ,L=HZ,O=SUNYARD,OU=123456,CN=111";
|
||||
String s = api.getX509SN(0, dn.getBytes());
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// QQ
|
||||
@Test
|
||||
public void testRSAGetPublicKeyC() {
|
||||
String userId = "0000000000000001";
|
||||
String userId = "1111111111111114";
|
||||
|
||||
String s = api.RSAGetPublicKeyC(userId, 1);
|
||||
String s = api.RSAGetPublicKeyC(userId, 0);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
@@ -786,4 +1025,390 @@ public class TestAllMethods {
|
||||
RetWrap version = api.getVersion(null);
|
||||
printRetWrap(version);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8008
|
||||
@Test
|
||||
public void testGetAllCert() throws UnsupportedEncodingException {
|
||||
RetWrap allCert = api.getAllCert(2);
|
||||
printRetWrap(allCert);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8009
|
||||
@Test
|
||||
public void testImportCert() throws IOException {
|
||||
|
||||
String path = "E:\\work\\sunyard\\证书\\sm2.q\\sm2.q.enc.crt.pem";
|
||||
System.out.println(api.importCert(inputStream2ByteArray(path), "1234".getBytes()));
|
||||
|
||||
try {
|
||||
this.api.disconnect();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testImportCert2() throws IOException {
|
||||
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIICBTCCAamgAwIBAgIGAXn07c3CMAwGCCqBHM9VAYN1BQAwSzELMAkGA1UEBhMC\n" +
|
||||
"Q04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRowGAYDVQQDExFN\n" +
|
||||
"aWRkbGVDQSBmb3IgVGVzdDAiGA8yMDIxMDYwOTE2MDAwMFoYDzIwMjIwNjA5MTYw\n" +
|
||||
"MDAwWjBbMQswCQYDVQQGEwJDTjEKMAgGA1UECBMBMTEKMAgGA1UEBxMBMTEKMAgG\n" +
|
||||
"A1UEChMBMTEKMAgGA1UECxMBMTEKMAgGA1UEAxMBMTEQMA4GCSqGSIb3DQEJARYB\n" +
|
||||
"NDBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABCnSUhgDDtjJZfOJoWoPxe/BTnox\n" +
|
||||
"PtDLBgGJyVpj0eNde7u4LnZ+H8vqN+0QvgfLcVg84cyl76j9+RuWsmLw7USjYzBh\n" +
|
||||
"MBsGA1UdIwQUMBKAEPl/VbQnlDNiplbKb8xdGv8wGQYDVR0OBBIEEJ6MbyKdO6IX\n" +
|
||||
"d3VkNLCf/aAwDAYDVR0RBAUwA4IBMTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIA\n" +
|
||||
"ODAMBggqgRzPVQGDdQUAA0gAMEUCIG0PqR+bbdNOb5Q4kfHq8cQZJ1wa/P+bqFfv\n" +
|
||||
"6bbL9RZCAiEAiH1LKCjq9p7MS7qOK+su5I0kenCQ505ZuuAWDMph0xk=\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
System.out.println(api.importCert(getSafeBytes(cert), null));
|
||||
}
|
||||
|
||||
|
||||
public static byte[] getSafeBytes(String s) {
|
||||
if (null != s) {
|
||||
byte[] b1 = s.getBytes();
|
||||
byte[] b2 = new byte[b1.length + 1];
|
||||
b2[b1.length] = 0;
|
||||
System.arraycopy(b1, 0, b2, 0, b1.length);
|
||||
return b2;
|
||||
} else {
|
||||
return new byte[]{0};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
String pUserId = "1572127378000000";
|
||||
String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A749B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
|
||||
String orgData = "FFFFFFFFFFFFFFFF";
|
||||
String certId = "0000000011111112";
|
||||
|
||||
// 测试通过
|
||||
// 74
|
||||
@Test
|
||||
public void testSM2SignC() {
|
||||
String userId = "1111111111111113";
|
||||
String certNo = "1234567812345678";
|
||||
String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
|
||||
String thisOrgData = "FFFFFFFFFFFFFFFF";
|
||||
|
||||
String s = api.SM2SignC(userId, certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 75
|
||||
@Test
|
||||
public void testSM2Verify() {
|
||||
|
||||
String userId = "1111111111111113";
|
||||
String certNo = "1234567812345678";
|
||||
String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
|
||||
String thisOrgData = "FFFFFFFFFFFFFFFF";
|
||||
|
||||
String s = api.SM2SignC(userId, certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
|
||||
|
||||
System.out.println(s);
|
||||
boolean b = api.SM2Verify(certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
|
||||
System.out.println(b);
|
||||
}
|
||||
|
||||
// 77
|
||||
@Test
|
||||
public void testSM2Encrypt() {
|
||||
api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
|
||||
}
|
||||
|
||||
// 78
|
||||
@Test
|
||||
public void testSM2DecryptC() {
|
||||
String enData = "307802206F1A39E3FE630E5F34C38A8B1AA1896D49DF9852A8D36F8A895900204D0BED6802200C7FF860A3FA429928C0320E05CC32602D7003477D66BCF58D54DAB202C8966104205E91FAA2671172D919346A154A9DBAE8048F2F0C20CA56C0A7ADA16A3076D2F904102A176D2250E36B7209BA78746A484622";
|
||||
api.SM2DecryptC(certId, enData);
|
||||
}
|
||||
|
||||
// QQ
|
||||
@Test
|
||||
public void testSM2GetPublicKeyC() {
|
||||
String s = api.SM2GetPublicKeyC("0000000011111111", 0);
|
||||
}
|
||||
|
||||
|
||||
// E0
|
||||
@Test
|
||||
public void testSYMEncryptData() {
|
||||
|
||||
byte[] bytes = api.SYMEncryptData(3,"XF356BCBA3204F6E6F356BCBA3204F6E6", "1111111111111111".getBytes());
|
||||
byte[] bytes1 = api.SYMDecryptData(3, "XF356BCBA3204F6E6F356BCBA3204F6E6", bytes);
|
||||
System.out.println(new String(bytes1));
|
||||
}
|
||||
|
||||
// 01100000000000000000800331433D434E2C4F3D53756E796172642C4F553D383030312C434E3D38303031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003313131
|
||||
|
||||
// 测试通过
|
||||
// 8003
|
||||
@Test
|
||||
public void testSYD_NakedSign() {
|
||||
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
byte[] bytes = api.SYD_NakedSign("111".getBytes(), dn);
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
// 015C0000000000000001
|
||||
// 8004
|
||||
// 31
|
||||
// 433D434E2C4F3D53756E796172642C4F553D383030312C434E3D3830303100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
// 0004
|
||||
// 32323232
|
||||
// 0047
|
||||
// 30450220686C96208702D3DB5D71FEFFDFA211DBF19F3576196D78E97E238A2D4AA1ECDF022100D19DE3120085A6EB524F4BBB69BD3C21CC5BE3008968446CBEA7EFDD3E0A147A
|
||||
// 0000
|
||||
|
||||
// 8004
|
||||
@Test
|
||||
public void testSYD_NakedVerify() {
|
||||
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
byte[] bytes = api.SYD_NakedSign("111".getBytes(), dn);
|
||||
String sign = Util.bytes2HexString(bytes);
|
||||
System.out.println(sign);
|
||||
|
||||
boolean b = api.SYD_NakedVerify("2222".getBytes(), bytes, dn);
|
||||
System.out.println(b);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8005
|
||||
@Test
|
||||
public void testSYD_DetachedSign() {
|
||||
|
||||
String orgData = "3214312341243214";
|
||||
String DN = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
String s = api.SYD_DetachedSign(orgData.getBytes(), DN);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8006
|
||||
@Test
|
||||
public void testSYD_DetachedVerify() {
|
||||
String orgData = "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101";
|
||||
String sign = "MIICnwYKKoEcz1UGAQQCAqCCAo8wggKLAgEBMQwwCgYIKoEcz1UBgxEwDAYKKoEcz1UGAQQCAaCCAckwggHFMIIBaKADAgECAgg8kwAAAAAAJTAMBggqgRzPVQGDdQUAMCYxCzAJBgNVBAYTAkNOMRcwFQYDVQQDDA5TdW55YXJkU00yUm9vdDAeFw0xNzA1MTcwMjUyNDRaFw0yMjA3MjUwMjUyNDRaMD0xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdTdW55YXJkMQ0wCwYDVQQLDAQ4MDAxMQ0wCwYDVQQDDAQ4MDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEPto6EHt8w1zABcf78LtOa0OgfuFONgYD0i7KKmALLQ+gMFXUANEkAwD1Rki4SdE/ULMw/xQ1G1ZFsTaGggplu6NnMGUwDgYDVR0PAQH/BAQDAgDAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFPd/2q7/IcbZOnqtoPus/gKlTtXBMB0GA1UdDgQWBBQDFmWmNgMGkEzYhS6bGtHcgswWejAMBggqgRzPVQGDdQUAA0kAMEYCIQCJdmRxn5Z+YXnXKLrAEc2dsnlI1G8UhTJoTJq+bekOpwIhAL6mF/yqSHL5z8gf2IopfqKugxXVTOj97w8QYVP/LWlxMYGcMIGZAgEBMDIwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290Agg8kwAAAAAAJTAKBggqgRzPVQGDETALBgkqgRzPVQGCLQEERzBFAiAb/hUmQ7yvOtGqL1mkE1zU3H0LblyTHunPicdwK8DGKgIhANU6nux7gkB/pOBtLscJFruQ8JgPQamL6Qi1NhlvGxlz";
|
||||
api.SYD_DetachedVerify(Util.hexString2Bytes(orgData), sign);
|
||||
}
|
||||
|
||||
// 8012
|
||||
@Test
|
||||
public void testSYD_Get_X509_CertInfo_HA() {
|
||||
|
||||
String orgData = "3214312341243214";
|
||||
String DN = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
String s = api.SYD_DetachedSign(orgData.getBytes(), DN);
|
||||
System.out.println(s);
|
||||
|
||||
X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), s);
|
||||
System.out.println(x509);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8016
|
||||
@Test
|
||||
public void testGetX509CertInfo() {
|
||||
|
||||
// String pCert = "-----BEGIN CERTIFICATE-----\u0007MIIC1jCCAnqgAwIBAgIFQAKAAXQwDAYIKoEcz1UBg3UFADBhMQswCQYDVQQGEwJD\u0007TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\u0007aXR5MSAwHgYDVQQDDBdDRkNBIEFDUyBURVNUIFNNMiBPQ0EzMTAeFw0xNzExMTYw\u0007NjU0NDVaFw0yMjExMTYwNjU0NDVaMIGDMQswCQYDVQQGEwJDTjEcMBoGA1UECgwT\u0007Q0ZDQSBURVNUIFNNMiBPQ0EzMTEOMAwGA1UECwwFU0hDUEUxGTAXBgNVBAsMEE9y\u0007Z2FuaXphdGlvbmFsLTExKzApBgNVBAMMIjA1MUDkuIrmtbfnpajmja7kuqTmmJPm\u0007iYBAQUFBQUFBQDgwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAARg8D1RBEv9lpOE\u0007Q3SdzdLCQ4fDiE8Ncb2Fl4qIGc12GA/LUS1fgzLZuk0WlgyZDSe+QlQziqkmsXsx\u0007KoTCzqsto4H5MIH2MD8GCCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAYYjaHR0cDov\u0007L29jc3B0ZXN0LmNmY2EuY29tLmNuOjgwL29jc3AwHwYDVR0jBBgwFoAUBMe8+VkB\u0007aT6MNDYgYhg83ry1uwwwDAYDVR0TAQH/BAIwADA2BgNVHR8ELzAtMCugKaAnhiVo\u0007dHRwOi8vMjEwLjc0LjQyLjMvT0NBMzEvU00yL2NybDEuY3JsMA4GA1UdDwEB/wQE\u0007AwIGwDAdBgNVHQ4EFgQUomdLtdhENYb16pe1LNRlcr4N7b8wHQYDVR0lBBYwFAYI\u0007KwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgZpJGhpRKmgfi\u0007Vbdq3UAGW6I3AUMfbWMd6webLQXmCOoCIQDSxTKRb0TfoXepD3VgO9qxCDwSc4yn\u0007WJ2GC3qmr81QBg==\u0007-----END CERTIFICATE-----\u0007";
|
||||
// X509 x509 = api.GetX509CertInfo(pCert);
|
||||
|
||||
String path = "E:\\work\\sunyard\\证书\\sm2.q\\sm2.q.enc.crt.pem";
|
||||
X509 x509 = api.GetX509CertInfo(getCertStr(path));
|
||||
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8017
|
||||
@Test
|
||||
public void testGetX509CertFileC() {
|
||||
String userId = "8001";
|
||||
|
||||
String s = api.GetX509CertFileC(userId, 0);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 8024
|
||||
@Test
|
||||
public void testDetachedSign() {
|
||||
api.detachedSign(1, "111".getBytes(), 3);
|
||||
}
|
||||
|
||||
// 8026
|
||||
@Test
|
||||
public void testDetachedSignbysn() {
|
||||
//X509 证书的序列号
|
||||
String pCertSerial = "1004282452";
|
||||
//数据明文
|
||||
byte[] data2 = "asfkahfkahfkafadfhdaghfashadfaflsaldfasf".substring(0,32).getBytes();
|
||||
|
||||
//签名
|
||||
String bs = api.detachedSignbysn(0,data2,pCertSerial);
|
||||
System.out.println(bs);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 4D41
|
||||
@Test
|
||||
public void testGenerateMIYA() {
|
||||
byte[] testData = "1234567812345678".getBytes();
|
||||
String mac = api.GenerateMIYA("123456", 1, SydApi.NALG_3DES, testData);
|
||||
System.out.println("MAC = " + mac);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 4D43
|
||||
@Test
|
||||
public void testVerifyMIYA() {
|
||||
|
||||
// 000000000012345600300000001
|
||||
byte[] testData = "1234567812345678".getBytes();
|
||||
String mac = api.GenerateMIYA("123456", 1, SydApi.NALG_3DES, testData);
|
||||
System.out.println("MAC = " + mac);
|
||||
Boolean ret = api.VerifyMIYA( "123456", 1, SydApi.NALG_3DES, mac, testData);
|
||||
if ( ret ){
|
||||
System.out.println("核押通过");
|
||||
} else {
|
||||
System.out.println("核押不通过");
|
||||
}
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// QN
|
||||
@Test
|
||||
public void testSYD_SM2GenKeyPair() {
|
||||
RetWrap retWrap = api.SYD_SM2GenKeyPair();
|
||||
printRetWrap(retWrap);
|
||||
}
|
||||
|
||||
// Q1
|
||||
@Test
|
||||
public void testEncrypt_Data() {
|
||||
byte[] bytes = api.Encrypt_Data(2, 1, 0, "XK333333333333333300A33333333", "11111111".getBytes(), "122345678".getBytes());
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
|
||||
// YA
|
||||
@Test
|
||||
public void testSYD_Disperse() throws UnsupportedEncodingException {
|
||||
//加解密密钥
|
||||
String key1 = "123123555555555500000000001";
|
||||
//原始数据
|
||||
byte[] data = "cdb1af4bb0ab6de6".getBytes("UTF-8");
|
||||
|
||||
//分散因子
|
||||
String data3 = "0000000000002456aece4be200050001";
|
||||
|
||||
String s = api.SYD_Disperse(key1, 0, 1, data3.getBytes(), 2, 0);
|
||||
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// PA
|
||||
@Test
|
||||
public void testSetPrintFormat() throws UnsupportedEncodingException {
|
||||
api.setPrintFormat(new String(">L>003^0>033^4>L>003^1>023^P>033^5>053^Q>L>003^2>033^6>003^3>033^7>L>003THANK YOU>033>THANK YOU 中文>L>F".getBytes("UTF-8") , "GB2312"));
|
||||
|
||||
}
|
||||
|
||||
// QX
|
||||
@Test
|
||||
public void testSM2GetPublicKeyC_QX() {
|
||||
String s = api.SM2GetPublicKeyC_QX(3, 0);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
// 92
|
||||
@Test
|
||||
public void testGetDeviceCertiInfo() {
|
||||
RetWrap deviceCertiInfo = api.getDeviceCertiInfo();
|
||||
printRetWrap(deviceCertiInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接发送数据
|
||||
*/
|
||||
@Test
|
||||
public void testDirect() {
|
||||
String s = "000A00000000000000004849";
|
||||
api.directBytes(Util.hexString2Bytes(s));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void test() throws IOException {
|
||||
String path = "E:\\work\\sunyard\\hsm\\projects\\sydapi\\src\\test\\java\\com\\sunyard\\sydapi\\test\\TestAllMethods.java";
|
||||
BufferedReader reader = new BufferedReader(new FileReader(path));
|
||||
|
||||
String line = null;
|
||||
String[] list = new String[3];
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
int z = 0;
|
||||
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if ("@Test".equals(line.trim())) {
|
||||
j++;
|
||||
int index = 0;
|
||||
if ((index = getIndex(list, "// 测试通过")) != -1) {
|
||||
System.out.println(list[(index + 1) % 3].substring(3));
|
||||
z++;
|
||||
}
|
||||
} else {
|
||||
list[i % 3] = line.trim();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
System.out.println(j);
|
||||
System.out.println(z);
|
||||
}
|
||||
|
||||
public int getIndex(String[] list, String str) {
|
||||
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
if (str.equals(list[i])) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test01() throws IOException {
|
||||
String path = "C:\\Users\\edgar\\Desktop\\新建文本文档 (2).txt";
|
||||
BufferedReader reader = new BufferedReader(new FileReader(path));
|
||||
|
||||
String line = null;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (line.startsWith("指令")) {
|
||||
System.out.println(line.substring(3));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test02() throws IOException {
|
||||
String path = "E:\\work\\sunyard\\hsm\\projects\\sydapi\\src\\main\\java\\racal\\sunyard\\main\\SydApi4j.java";
|
||||
|
||||
BufferedReader br = new BufferedReader(new FileReader(path));
|
||||
|
||||
String line = null;
|
||||
|
||||
while ((line = br.readLine()) != null) {
|
||||
String trimLine = line.trim();
|
||||
if (trimLine.startsWith("Proto")) {
|
||||
System.out.println(trimLine.substring(5, trimLine.indexOf(" ")));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user