diff --git a/src/main/java/com/sunyard/inf/SydAttachedSVApi.java b/src/main/java/com/sunyard/inf/SydAttachedSVApi.java new file mode 100644 index 0000000..d0f96e7 --- /dev/null +++ b/src/main/java/com/sunyard/inf/SydAttachedSVApi.java @@ -0,0 +1,212 @@ +package com.sunyard.inf; + +import com.sunyard.RetWrap; +import com.sunyard.cert.X509; + +import java.io.UnsupportedEncodingException; + +/** + * 带原文的签名验签 + */ +interface SydAttachedSVApi { + + /** + * sm2私钥签名 + * 用户id默认为1234567812345678 + * 签名结果R/S序列串先进行der编码,再进行base64编码 + * + * @param flag 私钥标志位,当为1时第二个参数传入存储私钥的索引,当为0时第二个参数传入私钥 + * @param privateKey 当私钥标志位为1时传入存储私钥的索引,当为0时传入私钥 + * @param publicKey 公钥 + * @param orgData 要签名的信息 + * @return 签名结果 + */ + byte[] SM2SignC(int flag, String privateKey, byte[] publicKey, byte[] orgData); + byte[] SM2SignC(int flag, String pUserID, String privateKey, byte[] publicKey, byte[] orgData); + /** + * SM2 私钥签名 + * @param pUserID 使用者的 ID,最大长度为 16 位数字,右对齐。 + * @param certNo 证书号 + * @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据 + * @param publicKey 公钥的 DER 编码 + * @param orgData 原始数据 + * @return 签名的 base64 编码 + */ + String SM2SignC( + String pUserID, + String certNo, + int nOrgDataType, + byte[] publicKey, + byte[] orgData + ); + + /** + * RSA 私钥签名 + * @param HashMark 哈希标识 指示用于哈希证书数据的哈希算法的标识。0: SHA1 1: SHA256 2: MD5。 + * @param privateKeyTag 私钥标记 指示私钥位置的标记。数字为存储私钥的索引,除了全9表示使用由命令中提供的密钥。 + * 27位的索引号:16位机构号+3位密钥类型+8位密钥索引号 + * @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据 + * @param orgData 原始数据 + * @return 签名的 base64 编码 + */ + byte[] RSASignC( + String privateKeyTag, + int HashMark, + int nOrgDataType, + byte[] orgData); + + + byte[] RSASign( + String privateKey, + int HashMark, + int nOrgDataType, + byte[] orgData); + + /** + * 采用 RSA 算法,用指定的公钥对指定的原始数据进行数字签名验证。 + * @param HashMark 哈希标识 + * @param nOrgDataType 签名方式 + * @param publicKey 公钥 + * @param orgData 原始数据 + * @param sign base64 格式的签名 + * @return true 验签通过 false 验签失败 + */ + boolean RSAVerify( + int HashMark, + int nOrgDataType, + byte[] publicKey, + byte[] orgData, + byte[] sign); + + /** + * sm2验签 + * 用户id默认为1234567812345678 + * + * @param publicKey 公钥的 DER 编码 + * @param orgData 要签名的信息 + * @param base64Sign 计算的签名,签名结果R/S序列串先进行der编码,再进行base64编码后的结果 + * @return true 验签成功,false 验签失败 + */ + boolean SM2Verify(byte[] publicKey, byte[] orgData, String base64Sign); + + /** + * 采用 SM2 算法,用指定的公钥对指定的原始数据进行数字签名验证。 + * @param certNo id 用于计算SM3-HASH + * @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据,用1.2.3章节限定符亦可 + * @param publicKey 公钥 + * @param orgData 原始数据 + * @param sign base64 格式的签名 + * @return true 验签通过 false 验签失败 + */ + boolean SM2Verify( + String certNo, + int nOrgDataType, + byte[] publicKey, + byte[] orgData, + byte[] sign + ); + + + /** + * SM2 私钥签名 + * @param certNo 证书号 + * @param orgData 原始数据 + * @return 签名的 base64 编码 + */ + String SM2SignCustomized( + String certNo, + byte[] orgData + ); + + /** + * 采用 SM2 算法,用指定的公钥对指定的原始数据进行数字签名验证。 + * @param certNo 证书号 + * @param orgData 原始数据 + * @param sign base64 格式的签名 + * @return true 验签通过 false 验签失败 + */ + boolean SM2VerifyCustomized( + String certNo, + byte[] orgData, + String sign + ); + + /** + * 带公钥证书与原始数据的数字签名(遵循 PKCS#7) + * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制带公钥证书的数字签名(遵循 PKCS#7)。 + * + * @param orgData 待签名数据 + * @param sCertDN 证书DN + * @return + * 符合PKCS7标准的签名结果 + */ + String attachedSign(byte[] orgData, String sCertDN) throws UnsupportedEncodingException; + byte[] attachedSignC(byte[] orgData, String sCertDN); + + + /** + * 人行项目需要需要支持RSA + * 带公钥证书与原始数据的数字签名(遵循 PKCS#7) + * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制带公钥证书的数字签名(遵循 PKCS#7)。 + * + * @param orgData 待签名数据 + * @param sCertDN 证书DN + * @return + * 符合PKCS7标准的签名结果 + */ + String attachedSign(int rFlag,byte[] orgData, String sCertDN) throws UnsupportedEncodingException; + + /** + * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) + * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 + * + * @param sign 已签名数据 + * @return true 验签通过 false 验签失败 + */ + boolean attachedVerify(String sign); + + /** + * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) + * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 + * + * @param sign 已签名数据 + * @return true 验签通过 false 验签失败 + */ + boolean attachedVerify(int rFlag,String sign); + + + boolean attachedVerify(byte[] sign); + + /** + * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) + * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 + * + * @param sign 已签名数据 + * @return 成功返回签名的原数据,失败则报错 + */ + byte[] attachedVerifyRD(byte[] sign); + byte[] attachedVerifyRD(String sign); + + /** + * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) + * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 + * + * @param sign 已签名数据 + * @return + * 若发送报文返回证书信息标志位为0,则返回已签名数据, + * 若发送报文返回证书信息标志位为1,则返回CERT_INFO结构的证书数据 + */ + X509 attachedVerifyAndGetX509(byte[] sign); + X509 attachedVerifyAndGetX509(String sign); + + /** + * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) + * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 + * + * @param sign 已签名数据 + * @return + * 若发送报文返回证书信息标志位为0,则返回已签名数据, + * 若发送报文返回证书信息标志位为1,则返回CERT_INFO结构的证书数据 + */ + RetWrap attachedVerifyAndGetAll(byte[] sign); +} diff --git a/src/main/java/com/sunyard/inf/SydCertApi.java b/src/main/java/com/sunyard/inf/SydCertApi.java index 5aa14af..08a67d1 100644 --- a/src/main/java/com/sunyard/inf/SydCertApi.java +++ b/src/main/java/com/sunyard/inf/SydCertApi.java @@ -144,4 +144,7 @@ public interface SydCertApi { RetWrap importCertAddHT(String certData, byte[] organizationId, CertUsage... us); RetWrap importCertAddHT(String certData, byte[] organizationId); + + String getCertByDn(String dn) throws UnsupportedEncodingException; + public String getCertByDn(byte[] dnBytes); } diff --git a/src/main/java/com/sunyard/inf/SydDetachedSVApi.java b/src/main/java/com/sunyard/inf/SydDetachedSVApi.java new file mode 100644 index 0000000..4864ec2 --- /dev/null +++ b/src/main/java/com/sunyard/inf/SydDetachedSVApi.java @@ -0,0 +1,209 @@ +package com.sunyard.inf; + +import com.sunyard.RetWrap; +import com.sunyard.cert.X509; + +/** + * 不带原文的签名验签 + */ +public interface SydDetachedSVApi { + + /** + * 对指定的原始数据核验其带公钥证书签名(PKCS#7) + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @return 验签是否通过 + */ + public boolean SYD_DetachedVerify( + byte[] orgData, + String sign); + + + /** + * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) + * @param orgData 待签名的原始数据 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + public String SYD_DetachedSign( + byte[] orgData, + String sCertDN + ); + + /** + * 人行项目需要RSA支持 + * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) + * @param orgData 待签名的原始数据 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + public String SYD_DetachedSign( + int rFlag, + byte[] orgData, + String sCertDN + ); + + + + /** + * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) + * 待签名的原始数据将在接口内部进行 sm3 ,然后做 Detach 签名 + * @param orgData 待签名的原始数据 + * @param publicKey sm3 hash 所用的公钥 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + public String sm3AndDetachedSign( + byte[] orgData, + String publicKey, + String sCertDN + ); + + + + /** + * 对指定的原始数据核验其带公钥证书签名(PKCS#7) + * 原始数据将在接口内部进行 sm3 ,然后做 Detach 验签 + * @param orgData 待签名的原始数据 + * @param publicKey sm3 hash 所用的公钥 + * @param sign 签名数据 + * @return 验签是否通过 + */ + public boolean sm3AndDetachedVerify( + byte[] orgData, + String publicKey, + String sign); + + /** + * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) + * 待签名的原始数据将在接口内部进行不带公钥的 sm3 ,然后做 Detach 签名 + * @param orgData 待签名的原始数据 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + String sm3WithoutPKDetachedSign(byte[] orgData, String sCertDN); + + /** + * 对指定的原始数据核验其带公钥证书签名(PKCS#7) + * 原始数据将在接口内部进行无公钥的 sm3 ,然后做 Detach 验签 + * + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @return 验签是否通过 + */ + boolean sm3WithoutPKDetachedVerify(byte[] orgData, String sign); + + + /** + * + * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) + * 数据模式可选 DATA_HASH 或 DATA_ORIGIN + * + * @param dataType 数据模式,输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 + * @param orgData 输入的数据 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + public String detachedSign( + int dataType, + byte[] orgData, + String sCertDN + ); + + /** + * 带公钥证书与签名属性的数字签名(遵循 PKCS#7) + * @param dataType 数据类型:0,hash 模式,1为非hash模式 + * @param orgData 当为hash模式时,值为hash值,当为非hash模式时,值为数据 + * @param keyTag 密钥对应的索引号 + * @return 签名的 DER 编码 + */ + public byte[] detachedSign( + int dataType, + byte[] orgData, + int keyTag + ); + public String detachedSign(int rFlag,int dataType, byte[] orgData, String sCertDN); + + /** + * 带公钥证书的PKCS#7数字签名(序列号) + * @param dataType 数据类型:0,hash 模式,1为非hash模式 + * @param orgData 当为hash模式时,值为hash值,当为非hash模式时,值为要签名的信息 + * @param certificateNo X509证书序号 + * @return 符合PKCS7标准的签名结果 + */ + public String detachedSignbysn( + int dataType, + byte[] orgData, + String certificateNo); + + + /** + * 对指定的原始数据核验其带公钥证书签名(PKCS#7) + * 数据模式可选 DATA_HASH 或 DATA_ORIGIN + * + * @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @return 验签是否通过 + */ + boolean detachedVerify( + int dataType, + byte[] orgData, + String sign); + + /** + * 对指定的原始数据核验其带公钥证书签名(PKCS#7) + * 数据模式可选 DATA_HASH 或 DATA_ORIGIN + * + * + * @param rFlag RSA标识 + * @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @return 验签是否通过 + */ + boolean detachedVerify( + int rFlag, + int dataType, + byte[] orgData, + String sign); + + /** + * 带公钥证书与签名属性的数字签名验签(遵循 PKCS#7) + * @param dataType 数据类型:0,hash 模式,1为非hash模式 + * @param orgData 当为hash模式时,值为hash值,当为非hash模式时,值为数据 + * @param sign 已签名数据 + * @return 是否正确 + */ + boolean detachedVerify( + int dataType, + byte[] orgData, + byte[] sign); + + /** + * 对指定的原始数据核验其带公钥证书签名(PKCS#7)返回证书信息 + * 数据模式可选 DATA_HASH 或 DATA_ORIGIN + * + * @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @return 证书 + */ + X509 detachedVerifyAndGetX509(int dataType, + byte[] orgData, + String sign); + + /** + * 计算SM3散列值 + * @param packSn 消息块号,0=仅一块,1=第一块,2=中间块,3=最后块 + * @param userId 用户 ID,只对“消息块号”为 0、1 时有效 + * @param publicKey 公钥的 DER 编码 + * @param msg 二进制的消息块 + * @param filterData 过渡消息数据,只对“消息块号”为 2、3 时有效 + * @return + * filterData: 过渡消息数据,只对“消息块号”为 2、1 时有效 + * hash: hash + */ + RetWrap SM3Hash(int packSn, String userId, byte[] publicKey, byte[] msg, byte[] filterData); + +} diff --git a/src/main/java/com/sunyard/inf/SydGenApi.java b/src/main/java/com/sunyard/inf/SydGenApi.java index e745fb7..d69c9c8 100644 --- a/src/main/java/com/sunyard/inf/SydGenApi.java +++ b/src/main/java/com/sunyard/inf/SydGenApi.java @@ -323,7 +323,7 @@ public interface SydGenApi { * orgCode 如果有机构码的话会返回机构码 */ RetWrap decryptDEByDN(String certSerial, byte[] pCipherKey); - + RetWrap decryptDEByDN(int alg,String certSerial, byte[] pCipherKey); /** * 接收用私钥解密数字信封,还原对称密钥。 * diff --git a/src/main/java/com/sunyard/inf/SydNakedSVApi.java b/src/main/java/com/sunyard/inf/SydNakedSVApi.java new file mode 100644 index 0000000..3f528fd --- /dev/null +++ b/src/main/java/com/sunyard/inf/SydNakedSVApi.java @@ -0,0 +1,63 @@ +package com.sunyard.inf; + +/** + * 不经过 CA 授信 + * 直接使用公私钥对签名验签 + */ +interface SydNakedSVApi { + /** + * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制裸签名(遵循 PKCS#1) + * @param orgData 待签名的原始数据 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + public byte[] SYD_NakedSign( + byte[] orgData, + String sCertDN + ); + /** + * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制裸签名(遵循 PKCS#1) + * 人行项目增加RSA + * @param orgData 待签名的原始数据 + * @param sCertDN 签名者证书 DN + * @return 签名数据 + */ + public byte[] SYD_NakedSign( + int rFlag, + byte[] orgData, + String sCertDN + ); + + + /** + * 使用指定的证书 DN,对指定的原始数据编制裸验签(遵循PKCS#1) + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @param sCertDN 签名者证书 DN + * @return 验签是否通过 + */ + public boolean SYD_NakedVerify( + byte[] orgData, + byte[] sign, + String sCertDN + ); + + + /** + * 使用指定的证书 DN,对指定的原始数据编制裸验签(遵循PKCS#1) + * @param orgData 待签名的原始数据 + * @param sign 签名数据 + * @param sCertDN 签名者证书 DN + * @return 验签是否通过 + */ + public boolean SYD_NakedVerify( + int rFlag, + byte[] orgData, + byte[] sign, + String sCertDN + ); +} + + + + diff --git a/src/main/java/com/sunyard/inf/SydSVApi.java b/src/main/java/com/sunyard/inf/SydSVApi.java index e2dd9b5..b1c11a7 100644 --- a/src/main/java/com/sunyard/inf/SydSVApi.java +++ b/src/main/java/com/sunyard/inf/SydSVApi.java @@ -13,473 +13,5 @@ public interface SydSVApi extends SydNakedSVApi, SydAttachedSVApi, SydDetachedSV } -/** - * 不经过 CA 授信 - * 直接使用公私钥对签名验签 - */ -interface SydNakedSVApi { - /** - * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制裸签名(遵循 PKCS#1) - * @param orgData 待签名的原始数据 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - public byte[] SYD_NakedSign( - byte[] orgData, - String sCertDN - ); - /** - * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制裸签名(遵循 PKCS#1) - * 人行项目增加RSA - * @param orgData 待签名的原始数据 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - public byte[] SYD_NakedSign( - int rFlag, - byte[] orgData, - String sCertDN - ); - - - /** - * 使用指定的证书 DN,对指定的原始数据编制裸验签(遵循PKCS#1) - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @param sCertDN 签名者证书 DN - * @return 验签是否通过 - */ - public boolean SYD_NakedVerify( - byte[] orgData, - byte[] sign, - String sCertDN - ); - - - /** - * 使用指定的证书 DN,对指定的原始数据编制裸验签(遵循PKCS#1) - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @param sCertDN 签名者证书 DN - * @return 验签是否通过 - */ - public boolean SYD_NakedVerify( - int rFlag, - byte[] orgData, - byte[] sign, - String sCertDN - ); -} -/** - * 带原文的签名验签 - */ -interface SydAttachedSVApi { - - /** - * sm2私钥签名 - * 用户id默认为1234567812345678 - * 签名结果R/S序列串先进行der编码,再进行base64编码 - * - * @param flag 私钥标志位,当为1时第二个参数传入存储私钥的索引,当为0时第二个参数传入私钥 - * @param privateKey 当私钥标志位为1时传入存储私钥的索引,当为0时传入私钥 - * @param publicKey 公钥 - * @param orgData 要签名的信息 - * @return 签名结果 - */ - byte[] SM2SignC(int flag, String privateKey, byte[] publicKey, byte[] orgData); - byte[] SM2SignC(int flag, String pUserID, String privateKey, byte[] publicKey, byte[] orgData); - /** - * SM2 私钥签名 - * @param pUserID 使用者的 ID,最大长度为 16 位数字,右对齐。 - * @param certNo 证书号 - * @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据 - * @param publicKey 公钥的 DER 编码 - * @param orgData 原始数据 - * @return 签名的 base64 编码 - */ - String SM2SignC( - String pUserID, - String certNo, - int nOrgDataType, - byte[] publicKey, - byte[] orgData - ); - - /** - * RSA 私钥签名 - * @param HashMark 哈希标识 指示用于哈希证书数据的哈希算法的标识。0: SHA1 1: SHA256 2: MD5。 - * @param privateKeyTag 私钥标记 指示私钥位置的标记。数字为存储私钥的索引,除了全9表示使用由命令中提供的密钥。 - * 27位的索引号:16位机构号+3位密钥类型+8位密钥索引号 - * @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据 - * @param orgData 原始数据 - * @return 签名的 base64 编码 - */ - byte[] RSASignC( - String privateKeyTag, - int HashMark, - int nOrgDataType, - byte[] orgData); - - - byte[] RSASign( - String privateKey, - int HashMark, - int nOrgDataType, - byte[] orgData); - - /** - * 采用 RSA 算法,用指定的公钥对指定的原始数据进行数字签名验证。 - * @param HashMark 哈希标识 - * @param nOrgDataType 签名方式 - * @param publicKey 公钥 - * @param orgData 原始数据 - * @param sign base64 格式的签名 - * @return true 验签通过 false 验签失败 - */ - boolean RSAVerify( - int HashMark, - int nOrgDataType, - byte[] publicKey, - byte[] orgData, - byte[] sign); - - /** - * sm2验签 - * 用户id默认为1234567812345678 - * - * @param publicKey 公钥的 DER 编码 - * @param orgData 要签名的信息 - * @param base64Sign 计算的签名,签名结果R/S序列串先进行der编码,再进行base64编码后的结果 - * @return true 验签成功,false 验签失败 - */ - boolean SM2Verify(byte[] publicKey, byte[] orgData, String base64Sign); - - /** - * 采用 SM2 算法,用指定的公钥对指定的原始数据进行数字签名验证。 - * @param certNo id 用于计算SM3-HASH - * @param nOrgDataType 原始数据类型 0 : hash 1 : 原数据,用1.2.3章节限定符亦可 - * @param publicKey 公钥 - * @param orgData 原始数据 - * @param sign base64 格式的签名 - * @return true 验签通过 false 验签失败 - */ - boolean SM2Verify( - String certNo, - int nOrgDataType, - byte[] publicKey, - byte[] orgData, - byte[] sign - ); - - - /** - * SM2 私钥签名 - * @param certNo 证书号 - * @param orgData 原始数据 - * @return 签名的 base64 编码 - */ - String SM2SignCustomized( - String certNo, - byte[] orgData - ); - - /** - * 采用 SM2 算法,用指定的公钥对指定的原始数据进行数字签名验证。 - * @param certNo 证书号 - * @param orgData 原始数据 - * @param sign base64 格式的签名 - * @return true 验签通过 false 验签失败 - */ - boolean SM2VerifyCustomized( - String certNo, - byte[] orgData, - String sign - ); - - /** - * 带公钥证书与原始数据的数字签名(遵循 PKCS#7) - * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制带公钥证书的数字签名(遵循 PKCS#7)。 - * - * @param orgData 待签名数据 - * @param sCertDN 证书DN - * @return - * 符合PKCS7标准的签名结果 - */ - String attachedSign(byte[] orgData, String sCertDN) throws UnsupportedEncodingException; - byte[] attachedSignC(byte[] orgData, String sCertDN); - - - /** - * 人行项目需要需要支持RSA - * 带公钥证书与原始数据的数字签名(遵循 PKCS#7) - * 使用指定的证书 DN,从加密设备获取对应的私钥证书,对指定的原始数据编制带公钥证书的数字签名(遵循 PKCS#7)。 - * - * @param orgData 待签名数据 - * @param sCertDN 证书DN - * @return - * 符合PKCS7标准的签名结果 - */ - String attachedSign(int rFlag,byte[] orgData, String sCertDN) throws UnsupportedEncodingException; - - /** - * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) - * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 - * - * @param sign 已签名数据 - * @return true 验签通过 false 验签失败 - */ - boolean attachedVerify(String sign); - - /** - * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) - * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 - * - * @param sign 已签名数据 - * @return true 验签通过 false 验签失败 - */ - boolean attachedVerify(int rFlag,String sign); - - - boolean attachedVerify(byte[] sign); - - /** - * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) - * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 - * - * @param sign 已签名数据 - * @return 成功返回签名的原数据,失败则报错 - */ - byte[] attachedVerifyRD(byte[] sign); - byte[] attachedVerifyRD(String sign); - - /** - * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) - * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 - * - * @param sign 已签名数据 - * @return - * 若发送报文返回证书信息标志位为0,则返回已签名数据, - * 若发送报文返回证书信息标志位为1,则返回CERT_INFO结构的证书数据 - */ - X509 attachedVerifyAndGetX509(byte[] sign); - X509 attachedVerifyAndGetX509(String sign); - - /** - * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) - * 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。 - * - * @param sign 已签名数据 - * @return - * 若发送报文返回证书信息标志位为0,则返回已签名数据, - * 若发送报文返回证书信息标志位为1,则返回CERT_INFO结构的证书数据 - */ - RetWrap attachedVerifyAndGetAll(byte[] sign); -} - - -/** - * 不带原文的签名验签 - */ -interface SydDetachedSVApi { - - /** - * 对指定的原始数据核验其带公钥证书签名(PKCS#7) - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @return 验签是否通过 - */ - public boolean SYD_DetachedVerify( - byte[] orgData, - String sign); - - - /** - * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) - * @param orgData 待签名的原始数据 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - public String SYD_DetachedSign( - byte[] orgData, - String sCertDN - ); - - /** - * 人行项目需要RSA支持 - * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) - * @param orgData 待签名的原始数据 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - public String SYD_DetachedSign( - int rFlag, - byte[] orgData, - String sCertDN - ); - - - - /** - * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) - * 待签名的原始数据将在接口内部进行 sm3 ,然后做 Detach 签名 - * @param orgData 待签名的原始数据 - * @param publicKey sm3 hash 所用的公钥 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - public String sm3AndDetachedSign( - byte[] orgData, - String publicKey, - String sCertDN - ); - - - - /** - * 对指定的原始数据核验其带公钥证书签名(PKCS#7) - * 原始数据将在接口内部进行 sm3 ,然后做 Detach 验签 - * @param orgData 待签名的原始数据 - * @param publicKey sm3 hash 所用的公钥 - * @param sign 签名数据 - * @return 验签是否通过 - */ - public boolean sm3AndDetachedVerify( - byte[] orgData, - String publicKey, - String sign); - - /** - * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) - * 待签名的原始数据将在接口内部进行不带公钥的 sm3 ,然后做 Detach 签名 - * @param orgData 待签名的原始数据 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - String sm3WithoutPKDetachedSign(byte[] orgData, String sCertDN); - - /** - * 对指定的原始数据核验其带公钥证书签名(PKCS#7) - * 原始数据将在接口内部进行无公钥的 sm3 ,然后做 Detach 验签 - * - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @return 验签是否通过 - */ - boolean sm3WithoutPKDetachedVerify(byte[] orgData, String sign); - - - /** - * - * 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7) - * 数据模式可选 DATA_HASH 或 DATA_ORIGIN - * - * @param dataType 数据模式,输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 - * @param orgData 输入的数据 - * @param sCertDN 签名者证书 DN - * @return 签名数据 - */ - public String detachedSign( - int dataType, - byte[] orgData, - String sCertDN - ); - - /** - * 带公钥证书与签名属性的数字签名(遵循 PKCS#7) - * @param dataType 数据类型:0,hash 模式,1为非hash模式 - * @param orgData 当为hash模式时,值为hash值,当为非hash模式时,值为数据 - * @param keyTag 密钥对应的索引号 - * @return 签名的 DER 编码 - */ - public byte[] detachedSign( - int dataType, - byte[] orgData, - int keyTag - ); - - /** - * 带公钥证书的PKCS#7数字签名(序列号) - * @param dataType 数据类型:0,hash 模式,1为非hash模式 - * @param orgData 当为hash模式时,值为hash值,当为非hash模式时,值为要签名的信息 - * @param certificateNo X509证书序号 - * @return 符合PKCS7标准的签名结果 - */ - public String detachedSignbysn( - int dataType, - byte[] orgData, - String certificateNo); - - - /** - * 对指定的原始数据核验其带公钥证书签名(PKCS#7) - * 数据模式可选 DATA_HASH 或 DATA_ORIGIN - * - * @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @return 验签是否通过 - */ - boolean detachedVerify( - int dataType, - byte[] orgData, - String sign); - - /** - * 对指定的原始数据核验其带公钥证书签名(PKCS#7) - * 数据模式可选 DATA_HASH 或 DATA_ORIGIN - * - * - * @param rFlag RSA标识 - * @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @return 验签是否通过 - */ - boolean detachedVerify( - int rFlag, - int dataType, - byte[] orgData, - String sign); - - /** - * 带公钥证书与签名属性的数字签名验签(遵循 PKCS#7) - * @param dataType 数据类型:0,hash 模式,1为非hash模式 - * @param orgData 当为hash模式时,值为hash值,当为非hash模式时,值为数据 - * @param sign 已签名数据 - * @return 是否正确 - */ - boolean detachedVerify( - int dataType, - byte[] orgData, - byte[] sign); - - /** - * 对指定的原始数据核验其带公钥证书签名(PKCS#7)返回证书信息 - * 数据模式可选 DATA_HASH 或 DATA_ORIGIN - * - * @param dataType 输入的数据为 HASH 后的数据 DATA_HASH = 0 ,输入的数据为原始数据库 DATA_ORIGIN = 1 - * @param orgData 待签名的原始数据 - * @param sign 签名数据 - * @return 证书 - */ - X509 detachedVerifyAndGetX509(int dataType, - byte[] orgData, - String sign); - - /** - * 计算SM3散列值 - * @param packSn 消息块号,0=仅一块,1=第一块,2=中间块,3=最后块 - * @param userId 用户 ID,只对“消息块号”为 0、1 时有效 - * @param publicKey 公钥的 DER 编码 - * @param msg 二进制的消息块 - * @param filterData 过渡消息数据,只对“消息块号”为 2、3 时有效 - * @return - * filterData: 过渡消息数据,只对“消息块号”为 2、1 时有效 - * hash: hash - */ - RetWrap SM3Hash(int packSn, String userId, byte[] publicKey, byte[] msg, byte[] filterData); - -} - diff --git a/src/main/java/com/sunyard/inf/cryption/SydHashApi.java b/src/main/java/com/sunyard/inf/cryption/SydHashApi.java index 5418403..6837a63 100644 --- a/src/main/java/com/sunyard/inf/cryption/SydHashApi.java +++ b/src/main/java/com/sunyard/inf/cryption/SydHashApi.java @@ -1,5 +1,7 @@ package com.sunyard.inf.cryption; +import com.sunyard.RetWrap; + /** * Hash 算法接口 */ @@ -68,4 +70,6 @@ public interface SydHashApi { public void MACCheck(int alg, int keyType, String AK, int fullMode, byte[] infoData, String mac); public String calcPBOCMAC(int mode, int keyType, String key, byte[] data, int block, byte[] iv); + + public RetWrap countHash(int hashType, int packSn, byte[] msg, byte[] filterData); }