feat: v0.1.2, support DEFAULT certs, optimize error message

This commit is contained in:
2023-11-24 19:40:34 +08:00
parent d9c8becff0
commit 6c96bb33cd
2 changed files with 65 additions and 10 deletions

View File

@@ -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";
}

View File

@@ -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<X509Certificate> certs = X509CertUtil.parseX509CertificateList(
RFile.from(signPdfArgs.certs).string());
final List<X509Certificate> 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");
}
}