整合其他分支的接口,并给没有注释的接口添加注释

This commit is contained in:
zhoubin 2021-08-10 16:01:09 +08:00
parent 1db7955ca7
commit 881e3f6445
24 changed files with 922 additions and 236 deletions

View File

@ -19,8 +19,6 @@
<key cn="密钥LMK">
LMK 加密的密钥。
27 位的索引号16 位机构号+3 位密钥类型+8 位密钥
索引号
</key>
<keySolution len="1" cn="密钥方案ZMK" >

View File

@ -84,10 +84,12 @@ public interface SydApi extends SydRawApi, SydCertApi, SydCryptionApi, SydGenApi
// 单例可以不实现
void error();
/**
* 获取加密机状态
* @return CPU/MEM/DISK
* 获取加密机cpu内存磁盘使用状况
* @return
* CPU: cpu 使用率,百分比状态
* MEM: 内存使用率, 百分比状态
* DISK: 磁盘使用率,单位 MB
*/
RetWrap getStatus();

View File

@ -32,6 +32,12 @@ public interface SydCertApi {
byte[] dn
);
/**
* 通过索引获取公钥
* @param userId 16位机构号
* @param nKeyTypes 密钥类型
* @return 公钥
*/
String RSAGetPublicKeyC(
String userId,
int nKeyTypes
@ -91,6 +97,12 @@ public interface SydCertApi {
* 查询所有证书
* @param dataFlag 数据包标志 0起始包 1中间包 2结束包
* @return
* dataFlag: 数据包标志 0起始包 1中间包 2结束包
* certAllNum: 证书总数
* realCertNum: 实际证书个数
* dataAttrFlag: 数据包属性标志
* certLenMax: 证书最大长度
* certDNs: 证书DN
*/
RetWrap getAllCert(int dataFlag) throws UnsupportedEncodingException;

View File

@ -19,32 +19,32 @@ interface SydHashApi {
/**
* 输入对指定的原始数据和公钥通过 SM3 算法计算数据的散列值
*
* @param publicKey 公钥(可以为空)
* @param data 原始数据
* @param mac 上一轮 mac
* @param publicKey 公钥的 DER 编码(可以为空)
* @param msg 原始数据二进制的消息块
* @param block 消息块标志
* @param mac 上一轮 mac , mac 不是 null长度不为 0则直接从第二包开始
* @return HASH 32 Bytes.
*/
byte[] SM3Hash(String publicKey, byte[] data, int i, byte[] mac);
byte[] SM3Hash(String publicKey, byte[] msg, int block, byte[] mac);
/**
* 输入对指定的原始数据和公钥通过 SM3 算法计算数据的散列值
*
* @param publicKey 公钥(可以为空)
* @param data 原始数据
* @param msg 原始数据
* @return HASH 32 Bytes.
*/
byte[] SM3Hash(String publicKey, byte[] data);
byte[] SM3Hash(String publicKey, byte[] msg);
/**
* 输入对指定的原始数据 (无公钥)通过 SM3 算法计算数据的散列值
*
* @param data 原始数据
* @param msg 原始数据
* @return HASH 32 Bytes.
*/
byte[] SM3Hash(byte[] data);
byte[] SM3Hash(byte[] msg);
public byte[] MACCalc(int alg, int keyType, int fullmode, int maclen, String key, byte[] infoData);
@ -91,16 +91,13 @@ interface SydASYMApi {
* @param pEnData 加密的数据base64 编码
* @return 明文数据
*/
byte[] SM2DecryptC(
String userId,
String pEnData
);
byte[] SM2DecryptC(String userId, String pEnData);
/**
* 使用外部私钥解密
* @param sk
* @param enData
* @return
* @param sk LMK下加密的私钥
* @param enData 密文数据(DER 编码)
* @return 公钥加密的密文的 DER 编码(对于 RSA 算法数据类型为 BIT)
*/
byte[] SM2Decrypt(byte[] sk, String enData);
@ -140,32 +137,31 @@ interface SydASYMApi {
/**
* 非对称公钥加密
* @param alg
* @param pk
* @param data
* @return
* @param alg 算法标识,0 = RSA 1 = SM2
* @param pk 公钥的 DER 编码
* @param data 数据
* @return 公钥加密的密文的 DER 编码(对于 RSA 算法数据类型为 BIT).
*/
public byte[] encryptByPk(int alg, String pk, byte[] data);
/**
* 非对称私钥解密
* @param alg
* @param sk 私钥值
* @param data
* @return
* @param alg 算法标识:0 = RSA 1 = SM2
* @param sk 私钥值,LMK下加密的私钥
* @param data 密文数据(DER 编码)
* @return 公钥加密的密文的 DER 编码(对于 RSA 算法数据类型为 BIT)
*/
public byte[] decryptBySk(int alg, String sk, byte[] data);
/**
* 非对称私钥解密
* @param alg
* @param user
* @param data
* @return
* @param alg 算法标识:0 = RSA 1 = SM2
* @param userId 16位机构号
* @param data 密文数据(DER 编码)
* @return 公钥加密的密文的 DER 编码(对于 RSA 算法数据类型为 BIT).
*/
public byte[] decryptBySkC(int alg, String user, byte[] data);
public byte[] decryptBySkC(int alg, String userId, byte[] data);
}
@ -174,26 +170,57 @@ interface SydASYMApi {
*/
interface SydSYMApi {
public RetWrap SYMEnDeData(Boolean isEn, int nAlg, String seesionKey, int roundmod, int fullMode, byte[] pInData, byte[] iv, int block);
/**
* E0 指令复合接口
* @param isEn 指定加解密true为加密false为解密
* @param nAlg 密钥模式当isEn为true时默认为SM4加密0为DES加密1为AES256 加密当isEn为false时默认为SM4解密0为DES解密1为AES256解密
* @param seesionKey 密钥
* @param roundmod 轮模式密钥加密模式1=ECB,2=CBC,3=CFB,4=OFB
* @param fullMode 填充模式0为饥饿模式1为贪婪模式
* @param pInData 消息数据
* @param iv IV
* @return
* iv: IV 数据域
* msg_all: 消息数据
*/
RetWrap SYMEnDeData(Boolean isEn, int nAlg, String seesionKey, int roundmod, int fullMode, byte[] pInData, byte[] iv, int block);
/**
* 用输入的会话密钥对指定报文数据进行加密处理填充模式为1
*
* @param nAlg 算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param pINdata 要加密的报文明文必须是 8 或16 的倍数
* @return 输出的报文密文, 长度为报文明文 + 16
*/
byte[] SYMEncryptData(int nAlg, String seesionKey, byte[] pINdata);
/**
* 用输入的会话密钥对指定报文数据进行加密处理
*
* @param nAlg  算法标识.,0x00:3DES0x01:SM4
* @param seesionKey  本地LMK 加密的会话密钥HEX 格式
* @param pINdata  要加密的报文明文必须是 8 或16 的倍数
* @param nAlg 算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param fullmode 填充模式0为饥饿模式1为贪婪模式
* @param pINdata 要加密的报文明文必须是 8 或16 的倍数
* @return 输出的报文密文, 长度为报文明文 + 16
*/
byte[] SYMEncryptData(int nAlg, String seesionKey, byte[] pINdata);
byte[] SYMEncryptData(int nAlg, String seesionKey, int fullmode, byte[] pINdata);
/**
* 用输入的会话密钥对指定报文数据进行加密处理
*
* @param nAlg 算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param pInData 要加密的报文明文必须是 8 或16 的倍数
* @return 输出的报文密文, 长度为报文明文 + 16
*/
byte[] SYMEncryptData_nofill(int nAlg, String seesionKey, byte[] pInData);
/**
* 用输入的会话密钥对指定报文数据进行解密处理
* 用输入的会话密钥对指定报文数据进行解密处理填充模式为1
*
* @param nAlg  算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
@ -201,10 +228,36 @@ interface SydSYMApi {
* @return 输出的报文明文
*/
byte[] SYMDecryptData(int nAlg, String seesionKey, byte[] pINdata);
/**
* 用输入的会话密钥对指定报文数据进行解密处理
*
* @param nAlg  算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param fullmode 填充模式0为饥饿模式1为贪婪模式
* @param pINdata 要解密的报文密文长度必须是8 或16 的倍数
* @return 输出的报文明文
*/
byte[] SYMDecryptData(int nAlg, String seesionKey, int fullmode, byte[] pINdata);
/**
* 用输入的会话密钥对指定报文数据进行解密处理
*
* @param nAlg  算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param pInData 要解密的报文密文长度必须是8 或16 的倍数
* @return 输出的报文明文
*/
byte[] SYMDecryptData_nofill(int nAlg, String seesionKey, byte[] pInData);
/**
* 加解密数据E1
* @param nAlg 密钥模式,默认为SM4解密0DES加密1AES256 解密
* @param seesionKey 密钥
* @param inputPath 输入消息数据的文件路径
* @param outputPath 输出消息数据的文件路径
* @return
*/
boolean SYMDecryptDataWithFile(int nAlg, String seesionKey, String inputPath, String outputPath) throws Exception;
/**
@ -216,7 +269,17 @@ interface SydSYMApi {
* @return 输出的报文密文, 长度为报文明文 + 16
*/
byte[] SYMEncryptDataCBC(int nAlg, String seesionKey, byte[] pINdata);
public byte[] SYMEncryptDataCBC(int nAlg, String seesionKey, int fullmode, byte[] pInData);
/**
* 用输入的会话密钥对指定报文数据进行加密处理
*
* @param nAlg  算法标识.,0x00:3DES0x01:SM4
* @param seesionKey  本地LMK 加密的会话密钥HEX 格式
* @param fullmode  填充模式0为饥饿模式1为贪婪模式
* @param pInData  要加密的报文明文必须是 8 或16 的倍数
* @return 输出的报文密文, 长度为报文明文 + 16
*/
byte[] SYMEncryptDataCBC(int nAlg, String seesionKey, int fullmode, byte[] pInData);
/**
* 用输入的会话密钥对指定报文数据进行解密处理
@ -227,7 +290,16 @@ interface SydSYMApi {
* @return 输出的报文明文
*/
byte[] SYMDecryptDataCBC(int nAlg, String seesionKey, byte[] pINdata);
public byte[] SYMDecryptDataCBC(int nAlg, String seesionKey, int fullmode, byte[] pInData);
/**
* 用输入的会话密钥对指定报文数据进行解密处理
*
* @param nAlg  算法标识.,0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param fullmode 填充模式0为饥饿模式1为贪婪模式
* @param pInData 要解密的报文密文长度必须是8 或16 的倍数
* @return 输出的报文明文
*/
byte[] SYMDecryptDataCBC(int nAlg, String seesionKey, int fullmode, byte[] pInData);
/**
* 用输入的会话密钥对指定报文数据进行解密处理

View File

@ -39,10 +39,53 @@ public interface SydGenApi {
*
*/
RetWrap genSymmetricKey(String keyType,char solution);
/**
* 生成一个对称密钥(*) -> pass (对比之前添加了可产生ZMK加密下的密钥)
* @param mode 是否产生ZMK加密下的密钥
* @param keyType 密钥类型
* @param solution 密钥方案LMK 密钥长度/LMK下加密密钥的方案
* @param zmk zmk
* @return RetWrap 包含
* lmkKey LMK LMK加密密钥
* zmkKey ZMK加密密钥
* keyCheck 密钥校验值
*/
RetWrap genSymKey(int mode, String keyType, char solution, String zmk);
/**
* 生成一个密钥并以分开的成份形式打印(=)
* @param keyType 密钥类型
* @param solution 密钥长度/LMK 下加密密钥的方案
* @return RetWrap
* lmkKey LMK 加密下的密钥
* keyCheck 密钥校验值
*/
RetWrap genAndPrintSplit(String keyType,char solution);
/**
* 输出一个ZMK下加密的密钥
* @param keyType 密钥类型
* @param solution 密钥方案ZMK 加密输出密钥的密钥方案
* @param zmk 27 位的索引号 16 位机构号+3 位密钥类型+8 位密钥索引号
* @param key LMK 加密的密钥
* @return
* key lmk + LMK 加密下的密钥
* keyCheck 密钥校验值
*/
public RetWrap outputKey(String keyType, char solution, String zmk, String key);
/**
* 输入一个ZMK下加密的密钥转换为LMK下加密
* @param keyType 密钥类型
* @param solution 加密输出密钥的密钥方案
* @param zmk zmk 27 位的索引号 16 位机构号+3 位密钥类型+8 位密钥索引号
* @param key ZMK 加密下的密钥
* @return RetWrap
* key lmk + LMK 加密下的密钥
* keyCheck 密钥校验值
*/
public RetWrap inputKey(String keyType, char solution, String zmk, String key);
/**
@ -56,6 +99,13 @@ public interface SydGenApi {
*
*/
RetWrap genComposeKey(String keyType,char keySolution,String keyClearPattern);
/**
* 由2到9个加密的成份组成一个密钥同时返回一个LMK对04-05下加密的ZMK以及校验值
* @param keys 已加密的多个ZMK成份
* @return
*
*/
RetWrap genComposeKey(String[] keys);
/**
* SM2 非对称密钥产生和存储
@ -68,7 +118,7 @@ public interface SydGenApi {
/**
* 此函数用于会话密钥的产生发起端
* 此函数用于会话密钥的产生发起端
* 加密机产生随机会话密钥输出两类密文
* 1 公钥加密的密文用于密钥的传递
* 2 本地 LMK 加密用于本地应用数据的加解密
@ -104,7 +154,7 @@ public interface SydGenApi {
* @param certSerial * X509 证书的序列号
* @param nAlg 算法标识,0:AES1SM4
* @return RetWrap 包含 CipherKey SessionKey KCV
* @return RetWrap 包含 CipherKey, SessionKey, KCV
* CipherKey 公钥加密的会话密钥 ,BASE64 编码
* SessionKey 本地LMK 加密的会话密钥HEX 格式, 本地 LMK 加密的会话密钥长度HEX 格式(不包括第 1 个字符)一般为 33 Bytes默认输入值为缓冲区的大小
* KCV 会话密钥的检验值HEX 格式长度为 32H

View File

@ -8,7 +8,7 @@ public interface SydPledge {
* @param Alg SydApi.NALG_3DES/SydApi.NALG_SM4
* @param Version 版本号
* @param Data 原始数据
* @return MAC 长度为 8 HEX字符串
* @return 所计算出的MACMAC 长度为 8 HEX字符串
*/
String GenerateMIYA(String AreaCode, int Version, int Alg, byte[] Data);
@ -16,11 +16,11 @@ public interface SydPledge {
*
* @param AreaCode 地区代码 6
* @param Version 版本号
* @param Alg SydApi.NALG_3DES/SydApi.NALG_SM4
* @param Alg MAC 算法03DES1SM4
* @param Data 原始数据
* @param fullFlag 填充类型
* @param macLenFlag MAC 长度标识
* @return
* @return 所计算出的MACMAC 长度为 8 HEX字符串
*/
String GenerateMIYA(String AreaCode, int Version, int Alg, byte[] Data, byte fullFlag, byte macLenFlag);

View File

@ -211,7 +211,7 @@ interface SydDetachedSVApi {
* 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名遵循PKCS#7
* 数据模式可选 DATA_HASH DATA_ORIGIN
*
* @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 输入的数据为原始数据库 DATA_ORIGIN = 1
* @param dataType 数据模式,输入的数据为 HASH 后的数据 DATA_HASH = 0 输入的数据为原始数据库 DATA_ORIGIN = 1
* @param orgData 输入的数据
* @param sCertDN 签名者证书 DN
* @return 签名数据
@ -221,13 +221,27 @@ interface SydDetachedSVApi {
byte[] orgData,
String sCertDN
);
//8024
/**
* 带公钥证书与签名属性的数字签名遵循 PKCS#7
* @param dataType 数据类型0hash 模式1为非hash模式
* @param orgData 当为hash模式时值为hash值当为非hash模式时值为数据
* @param keyTag 密钥对应的索引号
* @return 签名的 DER 编码
*/
public byte[] detachedSign(
int dataType,
byte[] orgData,
int sCertDN
int keyTag
);
/**
* 带公钥证书的PKCS#7数字签名序列号
* @param dataType 数据类型0hash 模式1为非hash模式
* @param orgData 当为hash模式时值为hash值当为非hash模式时值为要签名的信息
* @param certificateNo X509证书序号
* @return 符合PKCS7标准的签名结果
*/
public String detachedSignbysn(
int dataType,
byte[] orgData,
@ -247,12 +261,30 @@ interface SydDetachedSVApi {
int dataType,
byte[] orgData,
String sign);
//8025
/**
* 带公钥证书与签名属性的数字签名验签遵循 PKCS#7
* @param dataType 数据类型0hash 模式1为非hash模式
* @param orgData 当为hash模式时值为hash值当为非hash模式时值为数据
* @param sign 已签名数据
* @return 是否正确
*/
boolean detachedVerify(
int dataType,
byte[] orgData,
byte[] sign);
/**
* 计算SM3散列值
* @param packSn 消息块号,0=仅一块,1=第一块,2=中间块,3=最后块
* @param userId 用户 ID,只对消息块号 01 时有效
* @param publicKey 公钥的 DER 编码
* @param msg 二进制的消息块
* @param filterData 过渡消息数据,只对消息块号 23 时有效
* @return
* filterData: 过渡消息数据,只对消息块号 21 时有效
* hash: hash
*/
RetWrap SM3Hash(int packSn, String userId, byte[] publicKey, byte[] msg, byte[] filterData);
}

View File

@ -99,15 +99,27 @@ public interface SydHAApi {
);
// 外部私钥
/**
* 用私钥签名(外部私钥)
* @param nOrgDataType 签名数据类型0 : hash 1 : 原数据
* @param privateKey LMK34-35 下加密的私钥
* @param orgData 签名数据类型 0 HASH 签名数据类型 1 要签名的信息
* @return 签名的 base64 编码
*/
public String SM2Sign(
int nOrgDataType,
byte[] privateKey,
byte[] orgData
);
// SYD_SM2_Verify_HA
/**
* 用指定的公钥对指定的原始数据进行数字签名验证PKCS#1
* @param nOrgDataType 签名数据类型SydApi.DATA_ORIGIN(1) 原始数据 SydApi.DATA_HASH(0) hash 后的类型
* @param publicKey 公钥串DER编码HEX格式
* @param orgData 待签名的原始数据,签名数据类型 0 HASH 签名数据类型 1 要签名的信息
* @param base64Sign 签名数据 DER 编码 + Base64 编码
* @return 验签是否通过
*/
public boolean SM2Verify(
int nOrgDataType,
byte[] publicKey,

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ import java.util.Arrays;
public class ASYMEnDeTest {
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("非对称密钥加解密");
byte[] testData = new byte[100];

View File

@ -16,7 +16,7 @@ import java.util.Arrays;
public class InputOutputKeyTest
{
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("密钥导入导出功能测试");

View File

@ -5,7 +5,7 @@ import racal.sunyard.main.SydApiBuilder;
public class MACTest {
public static void main(String[] args) {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
SydApi api = new SydApiBuilder()
.setIp("172.16.17.162")

View File

@ -41,7 +41,7 @@ public class RSAP1SignVerify {
}
public static void main(String[] args) {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
SydApi4j api = (SydApi4j) new SydApiBuilder()
.setIp("192.168.1.226")
.useDebugMode()

View File

@ -13,7 +13,7 @@ import java.util.Arrays;
public class Test
{
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("工银亚洲测试功能测试");
byte[] testData = new byte[17000];

View File

@ -73,7 +73,7 @@ import java.util.Arrays;
*/
public class Test2 {
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("工银亚洲测试功能测试");
byte[] testData = new byte[17000];

View File

@ -11,7 +11,7 @@ import java.util.Arrays;
public class TestKeyPair
{
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("非对称密钥生成");
byte[] testData = new byte[17000];

View File

@ -8,7 +8,7 @@ import racal.sunyard.main.SydApiBuilder;
import java.util.Arrays;
public class MACTest {
public static void main(String[] args) {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("MAC 测试");

View File

@ -5,7 +5,7 @@ import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder;
public class PBOCTest {
public static void main(String[] args) {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("PBOC MAC 测试");

View File

@ -9,7 +9,7 @@ public class PledgeTest {
public static void main(String[] args) {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
byte[] testData = "1234567812345678".getBytes();
//testData = new byte[8];

View File

@ -9,7 +9,7 @@ public class PledgeTest2 {
public static void main(String[] args) {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
byte[] testData = "1234567812345678".getBytes();
//testData = new byte[8];

View File

@ -10,7 +10,7 @@ import java.io.UnsupportedEncodingException;
public class PrintTest {
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
// 连接加密机
SydApi4j api = (SydApi4j) new SydApiBuilder()
.setIp("172.16.17.161")

View File

@ -13,7 +13,7 @@ import java.io.UnsupportedEncodingException;
public class TestCB
{
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("SydApi 测试程序启动");

View File

@ -13,7 +13,7 @@ import java.util.Arrays;
public class TestGongYin
{
public static void main(String[] args) throws UnsupportedEncodingException {
public static void main(String[] args) throws UnsupportedEncodingException, IllegalAccessException, InstantiationException, ClassNotFoundException {
System.out.println("工银亚洲测试功能测试");
byte[] testData = new byte[17000];

View File

@ -1,8 +1,14 @@
package com.sunyard.sydapi.test;
import com.sunyard.trans.PacketSN;
import org.junit.Test;
import racal.sunyard.main.SydApi4j;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
@ -42,4 +48,66 @@ public class TestUtil {
}
/**
* 获取所有方法
*/
@Test
public void getMethod() {
Class<SydApi4j> jClass = SydApi4j.class;
Method[] dm = jClass.getDeclaredMethods();
System.out.println(dm.length);
for (int i = 0; i < dm.length; i++) {
Type[] types = dm[i].getGenericParameterTypes();
System.out.print(dm[i].getName() + "(");
for (int j = 0; j < types.length; j++) {
Type type = types[j];
System.out.print(getRealTypeName(type));
if (j != types.length - 1) {
System.out.print(", ");
}
}
System.out.println(")");
}
}
public String getRealTypeName(Type type) {
String resultName = "";
if (type instanceof ParameterizedType) {
resultName = getRealName(type.getTypeName()) + "<";
Type[] actualTypes = ((ParameterizedType) type).getActualTypeArguments();
for (int z = 0; z < actualTypes.length; z++) {
resultName += getRealName(actualTypes[z].getTypeName());
if (z != actualTypes.length - 1) {
resultName += ", ";
}
}
resultName += ">";
} else {
resultName = getRealName(type.getTypeName());
}
return resultName.replace("$", ".");
}
public String getRealName(String typeName) {
if (typeName.contains(".") && typeName.contains("<")) {
typeName = typeName.substring(0, typeName.indexOf("<"));
return typeName.substring(typeName.lastIndexOf(".") + 1);
}
if (typeName.contains(".")) {
return typeName.substring(typeName.lastIndexOf(".") + 1);
}
return typeName;
}
}