diff --git a/DProto/8003.xml b/DProto/8003.xml index e751e17..c478d06 100644 --- a/DProto/8003.xml +++ b/DProto/8003.xml @@ -24,6 +24,13 @@ 若上面的标志为1,则此域为证书DN,若为0,则此域为两个字节的证书索引; + + P + + + + + 待签名数据长度 diff --git a/src/1.txt b/src/1.txt deleted file mode 100644 index 5133b62..0000000 --- a/src/1.txt +++ /dev/null @@ -1,6 +0,0 @@ -06CE000000000000000080110000 -06C0 = 1728 3456 -2D2D2D2D2D424547494E2043455254494649434154452D2D2D2D2D0A4D4949453044434341376967417749424167494649414E4843544D774451594A4B6F5A496876634E41514546425141775754454C4D416B474131554542684D430A513034784D44417542674E5642416F544A304E6F6157356849455A70626D467559326C68624342445A584A3061575A70593246306157397549454631644768760A636D6C30655445594D4259474131554541784D5051305A445153425552564E5549453944515445784D423458445445314D444D784D7A41324D7A4D784D566F580A445449774D444D784D7A41324D7A4D784D566F77647A454C4D416B474131554542684D43593234784654415442674E5642416F5444454E4751304567564556540A564342445154454E4D4173474131554543784D45546B4E544D6A45554D4249474131554543784D4C525735305A584A77636D6C7A5A584D784C44417142674E560A42414D55497A41304D5542614E4441794E4455784D4441774D44457751464E6F595735456232356E514441774D4441774D4441784D494942496A414E42676B710A686B6947397730424151454641414F43415138414D49494243674B4341514541356A556E487733425870517064416D64766B4B4B766A6A34334166615670664B0A6C77704345532B475233386B4D4D5279594563323538305A4F36394E52525970515561635951316A585A5177567276324B787476556E54746E77756F324571450A7A77414D5963566163646345426D462F716F6A727745314844712F334E6352442F44753231676339634450474B62374B384862712F717138364B7042716754380A326466305331344E645770796135746B51544B417A34496B3346443733456C72537137336766614A2B623764526C634E4649306D77725A4A36684F7945764E660A537975553165475273775A455965586357576C3832472F6D464C6B3064746D34734E5930344E4A38724F51586B6569386D65494C6D687538537330654961346C0A794A556C4865487732316F566A75326835754B667848665670547669337258636E4E796851374550755A6272635364697845427256774944415141426F3449420A667A434341587377487759445652306A42426777466F41552F417538524A6F4F4D614744715947484A7834465173612F567667775341594456523067424545770A507A4139426768676752794737796F42416A41784D43384743437347415155464277494246694E6F644852774F693876643364334C6D4E6D59324575593239740A4C6D4E754C33567A4C33567A4C5445314C6D6830625443427A41594456523066424948454D4948424D49474F6F49474C6F494749686F47466247526863446F760A4C7A49784D4334334E4334304D5334784F4441364D7A67354C324E7550574E79624449774E6A677362335539556C4E424C45395650554E535443785050554E470A5130456756455654564342445153784450554E4F50324E6C636E52705A6D6C6A5958526C556D563262324E6864476C76626B78706333512F596D467A5A5439760A596D706C5933526A6247467A637A316A556B784561584E30636D6C69645852706232355162326C75644441756F4379674B6F596F6148523063446F764C7A49780A4D4334334E4334304D69347A4C303944515445784C314A545153396A636D77794D4459344C6D4E796244414C42674E564851384542414D43412B6777485159440A5652304F424259454642784838423835612B337A71464F416C48677054574F2B666646734D424D47413155644A51514D4D416F47434373474151554642774D430A4D413047435371475349623344514542425155414134494241514358457A464655352F447936724C50707A495361536934772B352B747351304C496156314E540A376277372F2F7A4D304A694974575A5A53354F54767859705951325466534A544D354F506B3045696F366856456B454651354F697457704D656E54674D3244320A572B4F4534494A44737652635551717565394B674E4A4171722F4B732F2B325A484D6C4C496B374669494C504F4B30354B585176574D413938396E3552744A770A7357743378443276504C2B46484976784C65627455584850595676462B49774B514E2F644F41684F625437386D6B327162534C47345473694F314A6A627250750A4A5774633564624A704933643876506E327A5A486258577055494D3457634F595133457858657341633258566842654F7A754E3373567A774C684550577235430A306A5964443777346E64657854543845754147644F43324B4F5655633551312B614B516A2B5351356A666D474F4235470A2D2D2D2D2D454E442043455254494649434154452D2D2D2D2D0A - -HEX: 00200000000000000000374530303FD9071FE57D552F8E4564F991C7FCEF25B4DD5C -HEX: 002C00000000000000003745303047381495D90480EEFAA38B04811AF6EA0BC41617F4F6023C1860DB6DE2870F23 \ No newline at end of file diff --git a/src/main/java/com/sunyard/SydApiException.java b/src/main/java/com/sunyard/SydApiException.java index f7ee1b9..c70b770 100644 --- a/src/main/java/com/sunyard/SydApiException.java +++ b/src/main/java/com/sunyard/SydApiException.java @@ -91,6 +91,9 @@ public class SydApiException extends RuntimeException{ msg = "证书删除错误"; break; + case 0xC101 : + msg = "证书识别异常"; + break; default: msg = "未定义的错误"; } diff --git a/src/main/java/com/sunyard/util/CertUtil.java b/src/main/java/com/sunyard/util/CertUtil.java index 3d3ede4..ec4013f 100644 --- a/src/main/java/com/sunyard/util/CertUtil.java +++ b/src/main/java/com/sunyard/util/CertUtil.java @@ -2,6 +2,7 @@ package com.sunyard.util; import cn.hutool.core.codec.Base64; import com.sunyard.RetWrap; +import com.sunyard.SydApiException; import com.sunyard.constant.CertUsage; import org.bouncycastle.jce.provider.BouncyCastleProvider; import sun.misc.BASE64Encoder; @@ -78,7 +79,7 @@ public class CertUtil { * @param cert 证书 base64 字符 * @return true 国密, false 非国密 */ - public static boolean isSM2Cert(String cert) throws CertificateException, NoSuchProviderException { + public static boolean isSM2Cert(String cert) { String pemCert; if(cert.contains("-----BEGIN CERTIFICATE-----")){ pemCert =cert; @@ -87,7 +88,12 @@ public class CertUtil { String end_cert = "\n-----END CERTIFICATE-----"; pemCert = cert_begin + cert + end_cert; } - X509Certificate certificate = convertToX509Cert(pemCert); + X509Certificate certificate = null; + try { + certificate = convertToX509Cert(pemCert); + } catch (Exception e) { + throw new SydApiException( 0xC101, e ); + } String signAlg = certificate.getSigAlgName(); return signAlg.toUpperCase().indexOf("SM2") >= 0; } diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index 7c34548..19ad568 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -470,12 +470,15 @@ public class SydApi4j implements SydApi { PacketSN sn = PacketSN.gen(); packet.put("header", sn.getSn().array()); if (rFlag == 1) { + // MD5 data.put("rFlag", 'M'); } if (rFlag == 2) { + // SHA-1 data.put("rFlag", 'S'); } if (rFlag == 3) { + // SHA-256 data.put("rFlag", 'R'); } data.put("signatureDataType$option", 1);