更新中移S9接口
This commit is contained in:
parent
f1ba00d880
commit
d55a195656
Binary file not shown.
@ -44,7 +44,7 @@ public interface SydGenApi {
|
||||
|
||||
/**
|
||||
* 生成一个对称密钥(*) -> pass (对比之前添加了可产生ZMK加密下的密钥)
|
||||
* @param mode 是否产生ZMK加密下的密钥
|
||||
* @param mode 是否产生ZMK加密下的密钥,0-产生密钥。1-产生密钥并在ZMK下加密
|
||||
* @param keyType 密钥类型
|
||||
* @param solution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
|
||||
* @param zmk zmk
|
||||
|
||||
@ -9258,6 +9258,119 @@ public class SydApi4j implements SydApi {
|
||||
*/
|
||||
@Override
|
||||
public RetWrap exportKeyAndCalc(String protectedKeyIndex, int algFlag, byte[] iv, int protectedKeyDivNum, List<byte[]> protectedKeyDivData, int[] protectedKeyDivAlgFlag, List<byte[]> protectedKeyDivIv, int exportKeyNum, List<? extends Struct> structList) {
|
||||
// 填充数据
|
||||
PacketSN sn = PacketSN.gen();
|
||||
|
||||
ByteBuffer bb = ByteBuffer.allocate(2048);
|
||||
|
||||
byte[] ret = new byte[2];
|
||||
bb.put(ret);
|
||||
bb.put(sn.getSn().array());
|
||||
bb.put("S9".getBytes());
|
||||
|
||||
// 保护密钥索引
|
||||
String gId = "00000000" + protectedKeyIndex;
|
||||
gId = gId.substring(gId.length() - 8);
|
||||
bb.put(("0000000000000000000" + gId).getBytes());
|
||||
|
||||
// 保护密钥算法
|
||||
int algorithmKey = MyUtil.transAlg(algFlag);
|
||||
bb.put(String.format("%02d", algorithmKey).getBytes());
|
||||
|
||||
if (6==algorithmKey || 8==algorithmKey || 2==algorithmKey || 4==algorithmKey || 10==algorithmKey) {
|
||||
// IV 数据域
|
||||
bb.put(iv);
|
||||
}
|
||||
|
||||
// 保护密钥分散级数
|
||||
bb.put(( String.valueOf( protectedKeyDivNum ) ).getBytes());
|
||||
|
||||
if (protectedKeyDivNum != 0) {
|
||||
// 分散因子
|
||||
for (int i = 0; i < protectedKeyDivData.size(); i++) {
|
||||
bb.put(protectedKeyDivData.get(i));
|
||||
}
|
||||
|
||||
// 分散算法标识
|
||||
for (int i = 0; i < protectedKeyDivAlgFlag.length; i++) {
|
||||
bb.put(String.format("%02d", MyUtil.transAlg(protectedKeyDivAlgFlag[i])).getBytes());
|
||||
}
|
||||
|
||||
// 分散算法的初始向量
|
||||
for (int i = 0; i < protectedKeyDivIv.size(); i++) {
|
||||
bb.put(protectedKeyDivIv.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
// 导出的密钥索引个数
|
||||
bb.put(String.format("%02d", exportKeyNum).getBytes());
|
||||
|
||||
//导出的密钥结构体
|
||||
byte[] b = new byte[ 144 * exportKeyNum ];
|
||||
int destPos=0;
|
||||
for(Struct struct:structList){
|
||||
System.arraycopy(struct.getByte(),0,b,destPos,struct.getByte().length);
|
||||
destPos+=struct.getByte().length;
|
||||
}
|
||||
bb.put(b);
|
||||
|
||||
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();
|
||||
|
||||
// 00240000000000000000533A
|
||||
// 3030
|
||||
// 5D0D63E2C673934E5677E902C155F54F3FBE8E53D709F32E
|
||||
|
||||
// 解析头部
|
||||
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(0x80 == e ? "数据长度错" : "输入长度错", e);
|
||||
}
|
||||
|
||||
// 依次连接所有密钥密文输出
|
||||
byte[] linkKeyOut = new byte[exportKeyNum * 16];
|
||||
bb.get(linkKeyOut, 0, exportKeyNum * 16);
|
||||
|
||||
// 依次连接所有密钥校验值输出
|
||||
byte[] linkKeyCheckOut = new byte[exportKeyNum * 8];
|
||||
bb.get(linkKeyCheckOut, 0, exportKeyNum * 8);
|
||||
|
||||
RetWrap retWrap = new RetWrap();
|
||||
retWrap.put("linkKeyOut", linkKeyOut);
|
||||
retWrap.put("linkKeyCheckOut", linkKeyCheckOut);
|
||||
|
||||
return retWrap;
|
||||
}
|
||||
|
||||
private RetWrap _exportKeyAndCalc(String protectedKeyIndex, int algFlag, byte[] iv, int protectedKeyDivNum, List<byte[]> protectedKeyDivData, int[] protectedKeyDivAlgFlag, List<byte[]> protectedKeyDivIv, int exportKeyNum, List<? extends Struct> structList) {
|
||||
|
||||
ProtoS9 proto = new ProtoS9();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
HashMap<String, Object> data = new HashMap();
|
||||
|
||||
@ -14,7 +14,8 @@ public class TestAllMethods {
|
||||
@Before
|
||||
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("172.16.17.163", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
|
||||
}
|
||||
|
||||
@After
|
||||
@ -26,7 +27,14 @@ public class TestAllMethods {
|
||||
}
|
||||
}
|
||||
|
||||
// 1.1.1 对称密钥产生
|
||||
public void printRetWrap(RetWrap rw) {
|
||||
for (String s : rw.keySet()) {
|
||||
System.out.println(s + ":" + rw.get(s));
|
||||
}
|
||||
}
|
||||
|
||||
// A0 1.1.1 对称密钥产生,
|
||||
// 验证成功
|
||||
@Test
|
||||
public void testGenSymmetricKey() {
|
||||
RetWrap retWrap = api.genSymmetricKey("000", 'X');
|
||||
@ -36,19 +44,58 @@ public class TestAllMethods {
|
||||
System.out.println("keyCheck:" + keyCheck);
|
||||
}
|
||||
|
||||
// 1.1.2 对称密钥产生, 对比之前添加了可产生ZMK加密下的密钥
|
||||
// 002D3030303030303030
|
||||
// 4130
|
||||
// 31
|
||||
// 303030
|
||||
// 58
|
||||
// 534B393939393939393939393939303030303030303030303030303030
|
||||
// 58
|
||||
|
||||
// A0 1.1.2 对称密钥产生, 对比之前添加了可产生ZMK加密下的密钥,
|
||||
// 验证成功
|
||||
@Test
|
||||
public void testGenSymKey() {
|
||||
// RetWrap retWrap = api.genSymKey(0, "000", 'X', null);
|
||||
// String lmkKey = new String(Util.hexString2Bytes(Util.bytes2HexString((byte[]) retWrap.get("lmkKey"))));
|
||||
// String keyCheck = new String(Util.hexString2Bytes(Util.bytes2HexString((byte[]) retWrap.get("keyCheck"))));
|
||||
// System.out.println("lmkKey:" + lmkKey);
|
||||
// System.out.println("keyCheck:" + keyCheck);
|
||||
|
||||
RetWrap retWrap = api.genSymKey(1, "000", 'X', "1");
|
||||
// 此密钥方案为: 1A+K+27位的索引号
|
||||
RetWrap retWrap = api.genSymKey(1, "000", 'X', "SK999999999999000000000000000");
|
||||
String lmkKey = new String(Util.hexString2Bytes(Util.bytes2HexString((byte[]) retWrap.get("lmkKey"))));
|
||||
String zmkKey = new String(Util.hexString2Bytes(Util.bytes2HexString((byte[]) retWrap.get("zmkKey"))));
|
||||
String keyCheck = new String(Util.hexString2Bytes(Util.bytes2HexString((byte[]) retWrap.get("keyCheck"))));
|
||||
System.out.println("lmkKey:" + lmkKey);
|
||||
System.out.println("zmkKey:" + zmkKey);
|
||||
System.out.println("keyCheck:" + keyCheck);
|
||||
}
|
||||
|
||||
// 00000000
|
||||
// A4
|
||||
// 2
|
||||
// 000
|
||||
// X
|
||||
// 密钥成份1:X0404894E7B8DE129B4FF4EF9889E56A2
|
||||
// 密钥成份2:X94D35D86EF1F3213D55C47822F87D385
|
||||
|
||||
// A4
|
||||
@Test
|
||||
public void testComposeKey() {
|
||||
String[] strs = {"583034303438393445374238444531323942344646344546393838394535364132", "583934443335443836454631463332313344353543343738323246383744333835"};
|
||||
RetWrap rw = api.composeKey("000", strs);
|
||||
|
||||
printRetWrap(rw);
|
||||
}
|
||||
|
||||
// 00000000
|
||||
// A6
|
||||
// 000
|
||||
// ZMK:XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB
|
||||
// ZMK下加密的密钥:X94D35D86EF1F3213D55C47822F87D385
|
||||
// X
|
||||
@Test
|
||||
public void testInputKey() {
|
||||
RetWrap retWrap = api.inputKey("000", '0', "XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB", "X94D35D86EF1F3213D55C47822F87D385");
|
||||
|
||||
printRetWrap(retWrap);
|
||||
}
|
||||
|
||||
// 00000000A8000XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBX0404894E7B8DE129B4FF4EF9889E56A2X
|
||||
// public void test
|
||||
}
|
||||
|
||||
@ -3,11 +3,15 @@ package com.sunyard.sydapi.test;
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.entity.Struct;
|
||||
import com.sunyard.proto.Util;
|
||||
import com.sunyard.proto.value.Str;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@ -22,6 +26,8 @@ public class TestZY {
|
||||
String key4 = "X87654321876543218765432187654321";
|
||||
String key5 = "1234567812345678";
|
||||
String key7 = "12345678123456781234567812345678";
|
||||
private static final Logger log= LoggerFactory.getLogger(TestZY.class);
|
||||
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
@ -29,7 +35,8 @@ public class TestZY {
|
||||
// api = (SydApi4j) new SydApi4j().connect("172.16.17.162", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("47.118.63.165", 46889, null, 15000);
|
||||
api = (SydApi4j) new SydApi4j().connect("192.168.0.99", 8889, null, 3000);
|
||||
|
||||
// 电脑ip设置192.168.17.17
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.17.18", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("47.111.95.168", 43889, null,100000);
|
||||
}
|
||||
|
||||
@ -238,12 +245,12 @@ public class TestZY {
|
||||
//pass
|
||||
@Test
|
||||
public void testS6_1(){
|
||||
String s="0100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414E3A9A7A96D9AF6433A1D1E97CDF590B13BED0668";
|
||||
byte[] data=Util.hexString2Bytes(s);
|
||||
String pk="000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7C7FFA2613093243052A11E5EF33A9B52AD9601D2E9FD6DFEA2FFF957C3A3FFCE1CECDFAD44F0EBB6C253EEC4785AFFFB73CE7501D5DE183F1A74330AECA3A76DC9B78CD10ED1EB9C781DF483368F03A5813AB4C5C96B6E2C8D876A677094E6F2ECD695C173458907291A5AB59878089512A8EB9023F9E64E045D7C14F755A300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001";
|
||||
String sk="00040000EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C3957DCE9A0F8AB800C0445F6F5F8BD97D9D761B9DBD5569BC68011D48C1138E9EE59D9A847428A44857BB02130D4610C4279B686B4D84878FDE8A1BE6DCA4D10975F8C172ADAFD5ED9A2E7854A458645DE3788872504A18FD0C1B0B307DAA112F4169EFA9C7110E59F22501397088144DF3796A4D326D626D83332AE6462E262EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CD044C8CFF017DB7DEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CED2FC7E8C43401FAE99976774A2CA64DB4626F2AC33D6B721A0B78B4A46B516537BAD6A40C7EFF9593939CA536DF1DB8F7A0FAFA5943E189E5A9D565A1912D66CC2421287A6AA448191946BA6FB6D2143BBFFA19A4D8A4C82B2BC24D0A4F84EADEFD8CDF3377C99D9766698FE8ADF2C2DFFF1A13E8551C7C07CFB0339FB6EEC5EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C53B4DAF62632459A22CFBD829DD3E430ADEA1F2D958257805FFABCF70FE3807B76D48CA7923E361BE9CA56CA75F4C2A3F5C408AA6EA533DC90DFB4A92ABF44E8EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C2F246AEA61195F77713FE63245192CCD1AAB1A1F58CF212D1FB205F51E8F71EC89CBEE6470931674EF07881D924F16FC5EF6331A647C4509A1064656432F7FB6EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CB3053D92AE7BA11A0DD5E2FA6D41743BDA331EB51E8624828F92E0A1FC3C9736A8A1718962080A8180EB88A9934E36B9EA392AAB16B7CD199A9F1DB88A0EBAA5EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C5136AE91766346BC8D0747C22A91DA29FB892C0733E7B9B578F5BCC2233013FDDAE60AAF2601322171ABCDAA2C146D61876913E24B9A44E82AE4DD280BA0F5EFEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CAD1D91712D1D1FD54A40191428DE88E779FA673199397A8EE934B7A9114949E91221E929B8C8E41E1BC22795FE484DF74FD043518763D354062CDEDAB1B00C18";
|
||||
String s="0100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414E3A9A7A96D9AF6433A1D1E97CDF590B13BED0668";
|
||||
byte[] data=Util.hexString2Bytes(s);
|
||||
String pk="000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7C7FFA2613093243052A11E5EF33A9B52AD9601D2E9FD6DFEA2FFF957C3A3FFCE1CECDFAD44F0EBB6C253EEC4785AFFFB73CE7501D5DE183F1A74330AECA3A76DC9B78CD10ED1EB9C781DF483368F03A5813AB4C5C96B6E2C8D876A677094E6F2ECD695C173458907291A5AB59878089512A8EB9023F9E64E045D7C14F755A300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001";
|
||||
String sk="00040000EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C3957DCE9A0F8AB800C0445F6F5F8BD97D9D761B9DBD5569BC68011D48C1138E9EE59D9A847428A44857BB02130D4610C4279B686B4D84878FDE8A1BE6DCA4D10975F8C172ADAFD5ED9A2E7854A458645DE3788872504A18FD0C1B0B307DAA112F4169EFA9C7110E59F22501397088144DF3796A4D326D626D83332AE6462E262EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CD044C8CFF017DB7DEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CED2FC7E8C43401FAE99976774A2CA64DB4626F2AC33D6B721A0B78B4A46B516537BAD6A40C7EFF9593939CA536DF1DB8F7A0FAFA5943E189E5A9D565A1912D66CC2421287A6AA448191946BA6FB6D2143BBFFA19A4D8A4C82B2BC24D0A4F84EADEFD8CDF3377C99D9766698FE8ADF2C2DFFF1A13E8551C7C07CFB0339FB6EEC5EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C53B4DAF62632459A22CFBD829DD3E430ADEA1F2D958257805FFABCF70FE3807B76D48CA7923E361BE9CA56CA75F4C2A3F5C408AA6EA533DC90DFB4A92ABF44E8EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C2F246AEA61195F77713FE63245192CCD1AAB1A1F58CF212D1FB205F51E8F71EC89CBEE6470931674EF07881D924F16FC5EF6331A647C4509A1064656432F7FB6EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CB3053D92AE7BA11A0DD5E2FA6D41743BDA331EB51E8624828F92E0A1FC3C9736A8A1718962080A8180EB88A9934E36B9EA392AAB16B7CD199A9F1DB88A0EBAA5EA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736C5136AE91766346BC8D0747C22A91DA29FB892C0733E7B9B578F5BCC2233013FDDAE60AAF2601322171ABCDAA2C146D61876913E24B9A44E82AE4DD280BA0F5EFEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CEA0171B8EF06736CAD1D91712D1D1FD54A40191428DE88E779FA673199397A8EE934B7A9114949E91221E929B8C8E41E1BC22795FE484DF74FD043518763D354062CDEDAB1B00C18";
|
||||
|
||||
String outKey="000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2C32395A7D4BE741EDDB411A59DCF1CFCC2B991F60C75D4DD7853A05F73408D4364819099036B033C7148A86C07B66A562A1E0D6D2506D227F443A7165E12754B638F5E9146F742834FEE4E3F6013FC2E41B9B35980EE1A12F1CADCEF22D2B6E3F9DFFE44ABBD2747D4C4F354D926C0E7612E8CD9CD125EC48336964B41F38B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001";
|
||||
String outKey="000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2C32395A7D4BE741EDDB411A59DCF1CFCC2B991F60C75D4DD7853A05F73408D4364819099036B033C7148A86C07B66A562A1E0D6D2506D227F443A7165E12754B638F5E9146F742834FEE4E3F6013FC2E41B9B35980EE1A12F1CADCEF22D2B6E3F9DFFE44ABBD2747D4C4F354D926C0E7612E8CD9CD125EC48336964B41F38B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001";
|
||||
// String signData="000400008000000059734D77FB5555CB3436BE9EE011A60E1E268DF619D96210E8AB91D1B30F3749A3F15B6E8F931DC27683CF6B46C8169177F0D51104E39BA0B892C59807A4CB29991C382A57D27612BDD19204A13EA6E39BE2F93EB2B02650547D6AD3C868AC3DBF4E51D4A1B8524BAA389BE8538D30EA74A3538B344A7464EC533B3770DF1E7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
||||
|
||||
byte[] bytes = api.signData(1, 101, sk, data);
|
||||
@ -295,11 +302,148 @@ public class TestZY {
|
||||
byte[] data=Util.hexString2Bytes("8765432187654321876543218765432187654321876543218765432187654321");
|
||||
String key="000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2C32395A7D4BE741EDDB411A59DCF1CFCC2B991F60C75D4DD7853A05F73408D4364819099036B033C7148A86C07B66A562A1E0D6D2506D227F443A7165E12754B638F5E9146F742834FEE4E3F6013FC2E41B9B35980EE1A12F1CADCEF22D2B6E3F9DFFE44ABBD2747D4C4F354D926C0E7612E8CD9CD125EC48336964B41F38B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001";
|
||||
byte[] bytes = api.ASYMEnData(1, 101,key, data);
|
||||
// byte[] bytes1 = api.ASYMDeData(0, 102, "12", bytes);
|
||||
// byte[] bytes1 = api.ASYMDeData(0, 102, "12", bytes);
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
// System.out.println(Arrays.equals(bytes1, data));
|
||||
}
|
||||
|
||||
//
|
||||
// 011030303030303030305339
|
||||
// 303030303030303030303030303030303030303737373737373737
|
||||
// 3038
|
||||
// 0000000000000000
|
||||
// 33
|
||||
// 31313131313131313131313131313131
|
||||
// 32323232323232323232323232323232
|
||||
// 33333333333333333333333333333333
|
||||
// 3038
|
||||
// 3038
|
||||
// 3038
|
||||
// 0000000000000000
|
||||
// 0000000000000000
|
||||
// 0000000000000000
|
||||
// 3031
|
||||
// 303030303030303030303030303030303030303030303030303031
|
||||
// 0003000000
|
||||
// 31313131313131313131313131313131
|
||||
// 32323232323232323232323232323232
|
||||
// 33333333333333333333333333333333
|
||||
// 07000000
|
||||
// 07000000
|
||||
// 07000000
|
||||
// 00000000000000000000000000000000
|
||||
// 00000000000000000000000000000000
|
||||
// 00000000000000000000000000000000
|
||||
// 01000000
|
||||
|
||||
@Test
|
||||
public void testS9_fensan(){
|
||||
log.error("-----start------------");
|
||||
List<byte[]> protectedKeyDivData=new ArrayList<>();
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("31313131313131313131313131313131"));
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("32323232323232323232323232323232"));
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("33333333333333333333333333333333"));
|
||||
|
||||
List<Struct> structList=new ArrayList<>();
|
||||
byte[] bytes = Util.hexString2Bytes("313131313131313131313131313131313232323232323232323232323232323233333333333333333333333333333333");
|
||||
int[] i={41,41,41};
|
||||
|
||||
|
||||
List<byte[]> protectedKeyDivIv1=new ArrayList<>();
|
||||
protectedKeyDivIv1.add(Util.hexString2Bytes("0000000000000000"));
|
||||
protectedKeyDivIv1.add(Util.hexString2Bytes("0000000000000000"));
|
||||
protectedKeyDivIv1.add(Util.hexString2Bytes("0000000000000000"));
|
||||
|
||||
List<byte[]> protectedKeyDivIv2=new ArrayList<>();
|
||||
protectedKeyDivIv2.add(Util.hexString2Bytes("00000000000000000000000000000000"));
|
||||
protectedKeyDivIv2.add(Util.hexString2Bytes("00000000000000000000000000000000"));
|
||||
protectedKeyDivIv2.add(Util.hexString2Bytes("00000000000000000000000000000000"));
|
||||
|
||||
|
||||
Struct struct1=new Struct("1",3,protectedKeyDivData,i,protectedKeyDivIv2,1);
|
||||
|
||||
structList.add(struct1);
|
||||
|
||||
RetWrap retWrap = api.exportKeyAndCalc("77777777",42, Util.hexString2Bytes("0000000000000000"), 3,protectedKeyDivData, new int[]{42,42,42},protectedKeyDivIv1, 1, structList);
|
||||
|
||||
printRetWrap(retWrap);
|
||||
|
||||
log.error("-----end------------");
|
||||
}
|
||||
|
||||
public void printRetWrap(RetWrap retWrap) {
|
||||
|
||||
for (String s : retWrap.keySet()) {
|
||||
System.out.println(s + ": " + Util.bytes2HexString((byte[]) retWrap.get(s)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* S9直接发送数据
|
||||
*/
|
||||
@Test
|
||||
public void testDirect() {
|
||||
String s = "00D4000000000013A7C653393030303030303030303030303030303030303030303030303237343037312021081080000000DFDEF7EF7FFFFFFF3037000000000000000030313030303030303030303030303030303030303030303030303032310002000000D15600010100000100000001B0002A01210000080931524100080931524132380000000000000000000000000000000007000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000";
|
||||
api.directBytes(Util.hexString2Bytes(s));
|
||||
}
|
||||
|
||||
//00C2
|
||||
//3030303030303030
|
||||
//5339
|
||||
//303030303030303030303030303030303030303737373737373737
|
||||
//3038
|
||||
//0000000000000000
|
||||
//30
|
||||
//3031
|
||||
//303030303030303030303030303030303030303030303030303031
|
||||
//0000000000
|
||||
//31313131313131313131313131313131
|
||||
//32323232323232323232323232323232
|
||||
//33333333333333333333333333333333
|
||||
//07000000
|
||||
//07000000
|
||||
//07000000
|
||||
//00000000000000000000000000000000
|
||||
//00000000000000000000000000000000
|
||||
//00000000000000000000000000000000
|
||||
//01000000
|
||||
|
||||
@Test
|
||||
public void testS9_fensan1(){
|
||||
long start = System.currentTimeMillis();
|
||||
List<byte[]> protectedKeyDivData=new ArrayList<>();
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("31313131313131313131313131313131"));
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("32323232323232323232323232323232"));
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("33333333333333333333333333333333"));
|
||||
|
||||
List<Struct> structList=new ArrayList<>();
|
||||
byte[] bytes = Util.hexString2Bytes("313131313131313131313131313131313232323232323232323232323232323233333333333333333333333333333333");
|
||||
int[] i={41,41,41};
|
||||
|
||||
|
||||
List<byte[]> protectedKeyDivIv1=new ArrayList<>();
|
||||
protectedKeyDivIv1.add(Util.hexString2Bytes("0000000000000000"));
|
||||
protectedKeyDivIv1.add(Util.hexString2Bytes("0000000000000000"));
|
||||
protectedKeyDivIv1.add(Util.hexString2Bytes("0000000000000000"));
|
||||
|
||||
List<byte[]> protectedKeyDivIv2=new ArrayList<>();
|
||||
protectedKeyDivIv2.add(Util.hexString2Bytes("00000000000000000000000000000000"));
|
||||
protectedKeyDivIv2.add(Util.hexString2Bytes("00000000000000000000000000000000"));
|
||||
protectedKeyDivIv2.add(Util.hexString2Bytes("00000000000000000000000000000000"));
|
||||
|
||||
|
||||
Struct struct1=new Struct("1",3,protectedKeyDivData,i,protectedKeyDivIv2,1);
|
||||
|
||||
structList.add(struct1);
|
||||
|
||||
|
||||
RetWrap retWrap = api.exportKeyAndCalc("77777777",42, Util.hexString2Bytes("0000000000000000"), 0,null, null,protectedKeyDivIv1, 1, structList);
|
||||
printRetWrap(retWrap);
|
||||
|
||||
System.out.println("时间:" + (System.currentTimeMillis() - start));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testS9(){
|
||||
@ -325,13 +469,13 @@ public class TestZY {
|
||||
structList.add(struct2);
|
||||
|
||||
RetWrap retWrap = api.exportKeyAndCalc("77777777",41, null, 0,protectedKeyDivData, new int[]{41,41,41},protectedKeyDivIv, 2, structList);
|
||||
System.out.println(retWrap);
|
||||
printRetWrap(retWrap);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testS9_1(){
|
||||
log.error("----------------start-----------------");
|
||||
List<byte[]> protectedKeyDivData=new ArrayList<>();
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("31313131313131313131313131313131"));
|
||||
protectedKeyDivData.add(Util.hexString2Bytes("32323232323232323232323232323232"));
|
||||
@ -364,8 +508,9 @@ public class TestZY {
|
||||
structList.add(struct5);
|
||||
|
||||
RetWrap retWrap = api.exportKeyAndCalc("77777777",52, Util.hexString2Bytes("00000000000000000000000000000000"), 3,protectedKeyDivData, i,protectedKeyDivIv, 5, structList);
|
||||
System.out.println(retWrap);
|
||||
printRetWrap(retWrap);
|
||||
|
||||
log.error("----------------end-----------------");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -495,8 +640,6 @@ public class TestZY {
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//pass
|
||||
@Test
|
||||
public void testSD_1(){
|
||||
@ -506,6 +649,7 @@ public class TestZY {
|
||||
System.out.println(bytes.length);
|
||||
System.out.println(Util.bytes2HexString(bytes));
|
||||
}
|
||||
|
||||
//00E80000000000000000534431313230303638000100000F46A8BF6B282E2EA4E01C620F741E256F45AB17150E9B08871176515042B65200000000000000000000000000000000000000000000000000000000000000003031343330818C0221008EE7EDEBF4AEC4BABAAF80438BF08C597F2A7E7C071A4C279AEA0D839FE4BA3902202B4F6C9E3E387AA4F990C363B910002CD7A228CBFEE88A9075C9800CF0C4678004207515F4B1FB3716675137FD3DC49B70B7B09FC57D837E2B21F9C9B2C271A64D630423A298EC40AA9A7BD7420A9EA6083F78242D044A8241439F325F6FFF487EC7EE1CFCFB16
|
||||
//00E80000000000000000534431313230303638000100000F46A8BF6B282E2EA4E01C620F741E256F45AB17150E9B08871176515042B65200000000000000000000000000000000000000000000000000000000000000003031343330818C0221008EE7EDEBF4AEC4BABAAF80438BF08C597F2A7E7C071A4C279AEA0D839FE4BA3902202B4F6C9E3E387AA4F990C363B910002CD7A228CBFEE88A9075C9800CF0C4678004207515F4B1FB3716675137FD3DC49B70B7B09FC57D837E2B21F9C9B2C271A64D630423A298EC40AA9A7BD7420A9EA6083F78242D044A8241439F325F6FFF487EC7EE1CFCFB16
|
||||
//pass
|
||||
|
||||
Loading…
Reference in New Issue
Block a user