diff --git a/src/main/java/me/hatter/tool/signpdf/main/SignPdfConstant.java b/src/main/java/me/hatter/tool/signpdf/main/SignPdfConstant.java index 4ddb0fe..7a113c8 100644 --- a/src/main/java/me/hatter/tool/signpdf/main/SignPdfConstant.java +++ b/src/main/java/me/hatter/tool/signpdf/main/SignPdfConstant.java @@ -2,5 +2,44 @@ package me.hatter.tool.signpdf.main; public interface SignPdfConstant { String NAME = "sign-pdf"; - String VERSION = "0.1.1"; + String VERSION = "0.1.2"; + + String DEFAULT_CERTS = "-----BEGIN CERTIFICATE-----\n" + +"MIIB+DCCAX6gAwIBAgIVALe/Gyof7wdOqA5Hw+BfxLKsKctUMAoGCCqGSM49BAMC\n" + +"MCQxIjAgBgNVBAMMGUhhdHRlciBFQyBJbnRlcm1lZGlhdGUgQ0EwHhcNMjMxMDMw\n" + +"MDAwMDAwWhcNMzMxMDMwMDAwMDAwWjAcMRowGAYDVQQDDBFIYXR0ZXIgU2lnbmlu\n" + +"ZyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABNA3bQZm7Fz93A7wjR4TZnfZ/yZD\n" + +"JDA/bMOyU0R1Xj2nyp164jWut7Y7k+wEUQObOqb6mtml3YK24kDSc75+vTBAzSsz\n" + +"JWVpS4XgYGZ1u41L7Ns7un56uZocnuP2liFcSqN4MHYwDgYDVR0PAQH/BAQDAgWg\n" + +"MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYE\n" + +"FP9cz42+U6fP5YZXpJLM/TschPmkMB8GA1UdIwQYMBaAFKWHFKtlvWFHtpitgmmc\n" + +"MK8CJAY8MAoGCCqGSM49BAMCA2gAMGUCMQCjs/EbpNpOa6LoKRqEu6AdKaKA4mlN\n" + +"2xIVU6cIViwv4Lj0K/nmPHnAnPOu4yiLr1UCMFKcIfdZBn5mQ9DoT6Rbefy4SH6P\n" + +"drQlvOTIBRQh9kiQoA2clTG1d8DFc0PpRF9pXA==\n" + +"-----END CERTIFICATE-----\n" + +"-----BEGIN CERTIFICATE-----\n" + +"MIIB5DCCAWugAwIBAgIUPQMQohzxKUPB5kNVqucFbULevIMwCgYIKoZIzj0EAwIw\n" + +"HDEaMBgGA1UEAwwRSGF0dGVyIEVDIFJvb3QgQ0EwHhcNMjMxMDI5MDAwMDAwWhcN\n" + +"MzMxMDI5MDAwMDAwWjAkMSIwIAYDVQQDDBlIYXR0ZXIgRUMgSW50ZXJtZWRpYXRl\n" + +"IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEImblRzI8dv8ea7y8kR2X0ZM56BF3\n" + +"tjjzjIJ7zmXaMO3DU9JbCdXZJoogLytTuKA5hmSPD0aXbnzQ89mZ7KWVA2qI2cjH\n" + +"wN5u+KtQM2oPvhH0nhMVFifcM7IeP6quihqko2YwZDAOBgNVHQ8BAf8EBAMCAQYw\n" + +"EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUpYcUq2W9YUe2mK2CaZwwrwIk\n" + +"BjwwHwYDVR0jBBgwFoAUeYIe16r9vuTceUDXG0CAbI9Pp+owCgYIKoZIzj0EAwID\n" + +"ZwAwZAIwd9dqszZM7lKcf+LtDc0VkbNlBZVIS0jjZfUn6nUXOizfjNM3UzLcMKVO\n" + +"TQP1pb2XAjAeISWnbTaxxQPCG/6mzfMw9CfqPS6ECuHfrXyfAw45AI7CpUArDhZW\n" + +"ZKV6vlnkzHc=\n" + +"-----END CERTIFICATE-----\n" + +"-----BEGIN CERTIFICATE-----\n" + +"MIIB3DCCAWKgAwIBAgIUBmlMvQ8s4PNWa2dFxhZH6gpVEpUwCgYIKoZIzj0EAwIw\n" + +"HDEaMBgGA1UEAwwRSGF0dGVyIEVDIFJvb3QgQ0EwIBcNMjMxMDI5MDAwMDAwWhgP\n" + +"MjA2MzEwMjkwMDAwMDBaMBwxGjAYBgNVBAMMEUhhdHRlciBFQyBSb290IENBMHYw\n" + +"EAYHKoZIzj0CAQYFK4EEACIDYgAE3hLba+pjLyUPUiXO6DcSM0326f4yuziZiKNU\n" + +"rBKfgJ7GZ6Yydlh2Ke33vyhoBcvTQlHP4ocWGwm0RdJ0Wz+99tkxegv8VskEqIEo\n" + +"CU/U78w6DbcWvzQAAKfXUfGjjNpBo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T\n" + +"AQH/BAUwAwEB/zAdBgNVHQ4EFgQUeYIe16r9vuTceUDXG0CAbI9Pp+owHwYDVR0j\n" + +"BBgwFoAUeYIe16r9vuTceUDXG0CAbI9Pp+owCgYIKoZIzj0EAwIDaAAwZQIxANym\n" + +"CiIqwtBXwcvn887Z9dnrdWXDEpJanID2nvwqa57ACIhTTu3d/UzFdOM6GWDR8AIw\n" + +"bC9qIy+izBeFPfbggsz6U9nF5++LbtRHBFQ2InWoI4GZd074SGPcYRalMV3AUZ5m\n" + +"-----END CERTIFICATE-----\n"; } diff --git a/src/main/java/me/hatter/tool/signpdf/main/SignPdfMain.java b/src/main/java/me/hatter/tool/signpdf/main/SignPdfMain.java index f1fbe4d..bcdb208 100644 --- a/src/main/java/me/hatter/tool/signpdf/main/SignPdfMain.java +++ b/src/main/java/me/hatter/tool/signpdf/main/SignPdfMain.java @@ -7,7 +7,10 @@ import me.hatter.tool.signpdf.options.SignOptions; import me.hatter.tool.signpdf.sign.CreateSignature; import me.hatter.tool.signpdf.sign.SigUtils; import me.hatter.tool.signpdf.time.TSAClient; +import me.hatter.tools.commons.exception.JumpOutException; import me.hatter.tools.commons.io.RFile; +import me.hatter.tools.commons.log.LogTool; +import me.hatter.tools.commons.log.LogTools; import me.hatter.tools.commons.security.cert.X509CertUtil; import me.hatter.tools.commons.security.key.KeyUtil; import me.hatter.tools.commons.string.StringUtil; @@ -21,8 +24,17 @@ import java.security.cert.X509Certificate; import java.util.List; public class SignPdfMain { + private static final LogTool log = LogTools.getLogTool(SignPdfMain.class); public static void main(String[] args) throws Exception { + try { + inner_main(args); + } catch (JumpOutException jumpOutException) { + log.error("Sign PDF failed, message: " + jumpOutException.getMessage()); + } + } + + public static void inner_main(String[] args) throws Exception { final SignPdfArgs signPdfArgs = SignPdfArgsUtil.parseArgs(args); if (signPdfArgs == null) { return; @@ -36,8 +48,12 @@ public class SignPdfMain { checkFiles(inFile, outFile); - final List certs = X509CertUtil.parseX509CertificateList( - RFile.from(signPdfArgs.certs).string()); + final List certs; + if (StringUtil.equals("DEFAULT", signPdfArgs.certs)) { + certs = X509CertUtil.parseX509CertificateList(SignPdfConstant.DEFAULT_CERTS); + } else { + certs = X509CertUtil.parseX509CertificateList(RFile.from(signPdfArgs.certs).string()); + } final X509Certificate[] certificateChain = certs.toArray(new X509Certificate[0]); final ContentSigner contentSigner = buildContentSigner(signPdfArgs, certificateChain); @@ -50,28 +66,28 @@ public class SignPdfMain { private static void checkFiles(File inFile, File outFile) { if (!inFile.exists()) { - throw new RuntimeException("PDF file in not exists."); + throw new JumpOutException("PDF file in not exists."); } if (outFile.exists()) { - throw new RuntimeException("PDF file out exists."); + throw new JumpOutException("PDF file out exists."); } } private static void checkSginPdfArgs(SignPdfArgs signPdfArgs) { if (StringUtil.isEmpty(signPdfArgs.in) || StringUtil.isEmpty(signPdfArgs.out)) { - throw new RuntimeException("PDF file in/out cannot be empty."); + throw new JumpOutException("PDF file in/out cannot be empty."); } if (StringUtil.isEmpty(signPdfArgs.certs)) { - throw new RuntimeException("Certificate chain file cannot be empty."); + throw new JumpOutException("Certificate chain file cannot be empty, or you can use 'DEFAULT'"); } if (StringUtil.isEmpty(signPdfArgs.slot) && StringUtil.isEmpty(signPdfArgs.key)) { - throw new RuntimeException("Sign key file or slot cannot be empty."); + throw new JumpOutException("Sign key file or slot cannot be empty."); } if (StringUtil.isNotEmpty(signPdfArgs.slot) && StringUtil.isNotEmpty(signPdfArgs.key)) { - throw new RuntimeException("Sign key file and slot cannot both provided."); + throw new JumpOutException("Sign key file and slot cannot both provided."); } if (StringUtil.isNotEmpty(signPdfArgs.slot) && StringUtil.isEmpty(signPdfArgs.pin)) { - throw new RuntimeException("PIN cannot be empty"); + throw new JumpOutException("PIN cannot be empty"); } }