@@ -398,6 +398,36 @@ public class SydApi4j implements SydApi {
}
}
public byte [ ] SYD_NakedSignAll ( int rFlag , byte [ ] orgData , String sCertDN ) {
try {
String cert = getCertByDn ( sCertDN ) ;
boolean sm2Cert = CertUtil . isSM2Cert ( cert ) ;
if ( ! sm2Cert ) { / / RSA
return SYD_NakedSign ( rFlag , orgData , sCertDN ) ;
} else {
return SYD_NakedSign ( orgData , sCertDN ) ;
}
} catch ( UnsupportedEncodingException e ) {
throw new RuntimeException ( e ) ;
}
}
public boolean SYD_NakedVerifyAll ( int rFlag , byte [ ] orgData , byte [ ] sign , String sCertDN ) {
try {
String cert = getCertByDn ( sCertDN ) ;
boolean sm2Cert = CertUtil . isSM2Cert ( cert ) ;
if ( ! sm2Cert ) { / / RSA
return SYD_NakedVerify ( rFlag , orgData , sign , sCertDN ) ;
} else {
return SYD_NakedVerify ( orgData , sign , sCertDN ) ;
}
} catch ( UnsupportedEncodingException e ) {
throw new RuntimeException ( e ) ;
}
}
public byte [ ] SYD_NakedSign ( byte [ ] orgData , String sCertDN ) {
if ( orgData = = null ) {
throw new IllegalArgumentException ( " 输入数据为 null " ) ;
@@ -427,6 +457,7 @@ public class SydApi4j implements SydApi {
data . put ( " signatureDataType$option " , 1 ) ;
data . put ( " DN " , dn ) ;
data . put ( " signData " , orgData ) ;
data . put ( " rFlag " , 'P' ) ;
data . put ( " hash " , hash ) ;
ByteBuffer bb = proto . rend ( packet ) ;
synchronized ( this ) {
@@ -464,8 +495,22 @@ public class SydApi4j implements SydApi {
return this . SYD_NakedSign ( sCertDN , ( byte [ ] ) null , hash ) ;
}
@Override
public byte [ ] SYD_NakedSign_OuterHash ( int rFlag , byte [ ] orgData , String sCertDN ) {
byte [ ] hash = this . itHash ( rFlag , orgData ) ; / / HASH类型 。 0 : SHA1 , 1 : SHA256 , 2 : MD5
return this . SYD_NakedSign ( rFlag , sCertDN , ( byte [ ] ) null , hash ) ;
}
public byte [ ] SYD_NakedSign ( int rFlag , byte [ ] orgData , String sCertDN ) {
if ( orgData = = null ) {
throw new IllegalArgumentException ( " 输入数据为 null " ) ;
} else {
return orgData . length < 4096 ? this . SYD_NakedSign ( rFlag , sCertDN , orgData , ( byte [ ] ) null ) : this . SYD_NakedSign_OuterHash ( rFlag , orgData , sCertDN ) ;
}
}
public byte [ ] SYD_NakedSign ( int rFlag , String sCertDN , byte [ ] orgData , byte [ ] hash ) {
Proto8003 proto = new Proto8003 ( ) ;
byte [ ] dn = new byte [ 256 ] ;
byte [ ] s = null ;
@@ -498,6 +543,7 @@ public class SydApi4j implements SydApi {
data . put ( " signatureDataType$option " , 1 ) ;
data . put ( " DN " , dn ) ;
data . put ( " signData " , orgData ) ;
data . put ( " hash " , hash ) ;
/ / 渲染发送
ByteBuffer bb = proto . rend ( packet ) ;
@@ -552,6 +598,7 @@ public class SydApi4j implements SydApi {
data . put ( " signatureDataType$option " , 1 ) ;
data . put ( " DN " , dn ) ;
data . put ( " odata " , orgData ) ;
data . put ( " rFlag " , 'P' ) ;
data . put ( " hash " , hash ) ;
data . put ( " signature " , sign ) ;
data . put ( " returnSign$option " , 0 ) ;
@@ -594,9 +641,18 @@ public class SydApi4j implements SydApi {
return this . SYD_NakedVerify ( sCertDN , sign , orgData , hash ) ;
}
public boolean SYD_NakedVerify_OuterHash ( int rFlag , byte [ ] orgData , byte [ ] sign , String sCertDN ) {
byte [ ] hash = this . itHash ( rFlag , orgData ) ;
return this . SYD_NakedVerify ( rFlag , sCertDN , sign , orgData , hash ) ;
}
@Override
public boolean SYD_NakedVerify ( int rFlag , byte [ ] orgData , byte [ ] sign , String sCertDN ) {
public boolean SYD_NakedVerify ( int rFlag , byte [ ] orgData , byte [ ] sign , String sCertDN ) {
return orgData . length < 4096 ? this . SYD_NakedVerify ( rFlag , sCertDN , sign , orgData , ( byte [ ] ) null ) : this . SYD_NakedVerify_OuterHash ( rFlag , orgData , sign , sCertDN ) ;
}
public boolean SYD_NakedVerify ( int rFlag , String sCertDN , byte [ ] sign , byte [ ] orgData , byte [ ] hashData ) {
Proto8004 proto = new Proto8004 ( ) ;
byte [ ] dn = new byte [ 256 ] ;
@@ -629,6 +685,7 @@ public class SydApi4j implements SydApi {
data . put ( " DN " , dn ) ;
data . put ( " odata " , orgData ) ;
data . put ( " signature " , sign ) ;
data . put ( " hash " , hashData ) ;
data . put ( " returnSign$option " , 0 ) ;
/ / 渲染发送
ByteBuffer bb = proto . rend ( packet ) ;
@@ -798,6 +855,7 @@ public class SydApi4j implements SydApi {
public boolean sm3WithoutPKDetachedVerify ( byte [ ] orgData , String sign ) {
byte [ ] hash = SM3Hash ( orgData ) ;
return detachedVerify ( DATA_HASH , hash , sign ) ;
}
/ / 测试通过
@@ -909,14 +967,41 @@ public class SydApi4j implements SydApi {
return true ;
}
public boolean detachedVerifyRSA ( int rFlag , int dataType , byte [ ] orgData , String sign ) {
public boolean detachedVerifyAll ( int rFlag , byte [ ] orgData , String sign ) {
try {
boolean sm2Cert = CertUtil . isSignedBySM2Cert ( sign ) ;
if ( ! sm2Cert ) { / / RSA
return detachedVerifyRSA ( rFlag , orgData , sign ) ;
} else {
if ( orgData . length < 4096 ) {
return detachedVerify ( DATA_ORIGIN , orgData , sign ) ;
} else {
RetWrap retWrap = ASN1Util . takeOutOriginDataFromPKCS7Sign ( sign ) ;
byte [ ] pk = ( byte [ ] ) retWrap . get ( " pk " ) ;
byte [ ] hash = this . SM3Hash ( Util . bytes2HexString ( pk ) , orgData ) ;
return detachedVerify ( DATA_HASH , hash , sign ) ;
}
}
} catch ( UnsupportedEncodingException e ) {
throw new RuntimeException ( e ) ;
} catch ( CertificateException e ) {
throw new RuntimeException ( e ) ;
} catch ( IOException e ) {
throw new RuntimeException ( e ) ;
} catch ( NoSuchProviderException e ) {
throw new RuntimeException ( e ) ;
}
}
public boolean detachedVerifyRSA ( int rFlag , byte [ ] orgData , String sign ) {
boolean deVerify = false ;
if ( orgData . length < 4096 ) {
deVerify = detachedVerify ( rFlag , dataType , orgData , sign ) ;
deVerify = detachedVerify ( rFlag , DATA_ORIGIN , orgData , sign ) ;
} else {
/ / RetWrap hashData = countHash ( 0 , 0 , orgData , null ) ;
byte [ ] hashData = itHash ( 0 , orgData ) ;
deVerify = this . detachedVerify ( 2 , 0 , hashData , sign ) ;
byte [ ] hashData = itHash ( rFlag , orgData ) ;
deVerify = this . detachedVerify ( rFlag , DATA_HASH , hashData , sign ) ;
}
return deVerify ;
}
@@ -1107,15 +1192,38 @@ public class SydApi4j implements SydApi {
}
public String detachedSignAll ( int rFlag , byte [ ] orgData , String sCertDN ) {
try {
String cert = getCertByDn ( sCertDN ) ;
boolean sm2Cert = CertUtil . isSM2Cert ( cert ) ;
if ( ! sm2Cert ) { / / RSA
return detachedSignRSA ( rFlag , orgData , sCertDN ) ;
} else {
if ( orgData . length < 4096 ) {
return detachedSign ( DATA_ORIGIN , orgData , sCertDN ) ;
} else {
String pk = null ;
pk = this . SYD_SM2_Get_Dn_PublicKey_HA ( sCertDN . getBytes ( " GBK " ) , 0 ) ;
byte [ ] hash = this . SM3Hash ( pk , orgData ) ;
return detachedSign ( DATA_HASH , hash , sCertDN ) ;
}
}
} catch ( UnsupportedEncodingException e ) {
throw new RuntimeException ( e ) ;
}
}
/ / 人行大数据不指定摘要算法
public String detachedSignRSA ( int rFlag , int dataType , byte [ ] orgData , String sCertDN ) {
public String detachedSignRSA ( int rFlag , byte [ ] orgData , String sCertDN ) {
String sign = null ;
if ( orgData . length < 4096 ) {
sign = detachedSign ( rFlag , dataType , orgData , sCertDN ) ;
sign = detachedSign ( rFlag , DATA_ORIGIN , orgData , sCertDN ) ;
} else {
/ / RetWrap hashData = countHash ( 0 , 0 , orgData , null ) ;
byte [ ] hash = itHash ( 0 , orgData ) ;
sign = detachedSign ( 2 , 0 , hash , sCertDN ) ;
byte [ ] hash = itHash ( rFlag , orgData ) ;
sign = detachedSign ( rFlag , DATA_HASH , hash , sCertDN ) ;
}
return sign ;
}
@@ -9174,7 +9282,19 @@ public class SydApi4j implements SydApi {
@param hashType HASH类型 。 0 : SHA1 , 1 : SHA256 , 2 : MD5
@param orgData 原始数据
* /
public byte [ ] itHash ( int hashType , byte [ ] orgData ) {
public byte [ ] itHash ( int digestAlg , byte [ ] orgData ) {
/ / 同步加密机与裸签摘要算法枚举值
if ( ! ( digestAlg = = 1 | | digestAlg = = 2 | | digestAlg = = 3 ) ) {
throw new IllegalArgumentException ( " 不支持的算法: " + digestAlg ) ;
}
int hashType = 0 ;
if ( digestAlg = = 1 ) {
hashType = 2 ;
}
if ( digestAlg = = 3 ) {
hashType = 1 ;
}
byte [ ] hashData = new byte [ 0 ] ;
final int packLen = 4064 ;
/ / 如果长度小于等于 4064 , 发送唯一包