package signatures.chapter3; import java.io.FileInputStream; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.PrivateKey; import java.security.Security; import java.security.cert.Certificate; import java.util.Properties; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.tsp.TimeStampTokenInfo; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.security.DigestAlgorithms; import com.itextpdf.text.pdf.security.OcspClient; import com.itextpdf.text.pdf.security.OcspClientBouncyCastle; import com.itextpdf.text.pdf.security.TSAClientBouncyCastle; import com.itextpdf.text.pdf.security.MakeSignature.CryptoStandard; import com.itextpdf.text.pdf.security.TSAInfoBouncyCastle; public class C3_10_SignWithTSAEvent extends C3_01_SignWithCAcert { public static final String SRC = "src/main/resources/hello.pdf"; public static final String DEST = "results/chapter3/hello_cacert_ocsp_ts.pdf"; public static void main(String[] args) throws IOException, GeneralSecurityException, DocumentException { Properties properties = new Properties(); properties.load(new FileInputStream("c:/home/blowagie/key.properties")); String path = properties.getProperty("PRIVATE"); char[] pass = properties.getProperty("PASSWORD").toCharArray(); String tsaUrl = properties.getProperty("TSAURL"); String tsaUser = properties.getProperty("TSAUSERNAME"); String tsaPass = properties.getProperty("TSAPASSWORD"); BouncyCastleProvider provider = new BouncyCastleProvider(); Security.addProvider(provider); KeyStore ks = KeyStore.getInstance("pkcs12", provider.getName()); ks.load(new FileInputStream(path), pass); String alias = (String)ks.aliases().nextElement(); PrivateKey pk = (PrivateKey) ks.getKey(alias, pass); Certificate[] chain = ks.getCertificateChain(alias); OcspClient ocspClient = new OcspClientBouncyCastle(); TSAClientBouncyCastle tsaClient = new TSAClientBouncyCastle(tsaUrl, tsaUser, tsaPass); tsaClient.setTSAInfo(new TSAInfoBouncyCastle() { public void inspectTimeStampTokenInfo(TimeStampTokenInfo info) { System.out.println(info.getGenTime()); }}); C3_09_SignWithTSA app = new C3_09_SignWithTSA(); app.sign(SRC, DEST, chain, pk, DigestAlgorithms.SHA256, provider.getName(), CryptoStandard.CMS, "Test", "Ghent", null, ocspClient, tsaClient, 0); } }