package eu.tpmusielak.securephoto.timestamp; import eu.tpmusielak.bouncy.cms.SignerId; import eu.tpmusielak.bouncy.tsp.*; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.math.BigInteger; import java.net.HttpURLConnection; import java.net.URL; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; /** * Created by IntelliJ IDEA. * User: Tomasz P. Musielak * Date: 05.02.12 * Time: 22:09 */ public class TimestampClient { private static final String serverAddress = "http://www.cryptopro.ru/tsp/tsp.srf"; // private static final String serverAddress = "http://timestamping.edelweb.fr/service/tsp"; static void requestTSP() throws IOException, NoSuchAlgorithmException, TSPException { TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator(); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); BigInteger nonce = BigInteger.valueOf(secureRandom.nextLong()); TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA1, new byte[20], nonce); byte[] requestBytes = request.getEncoded(); URL netAddress = new URL(serverAddress); HttpURLConnection connection = (HttpURLConnection) netAddress.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("ContentType", "application/timestamp-query"); connection.setRequestProperty("ContentLength", String.valueOf(requestBytes.length)); connection.setDoOutput(true); connection.connect(); OutputStream stream = connection.getOutputStream(); stream.write(requestBytes, 0, requestBytes.length); stream.close(); InputStream responseStream = new BufferedInputStream(connection.getInputStream()); TimeStampResponse timeStampResponse = new TimeStampResponse(responseStream); responseStream.close(); byte[] response = timeStampResponse.getEncoded(); TimeStampRequest recoveredRequest = new TimeStampRequest(requestBytes); TimeStampResponse recoveredResponse = new TimeStampResponse(response); recoveredResponse.validate(recoveredRequest); TimeStampToken tsToken = recoveredResponse.getTimeStampToken(); TimeStampTokenInfo tsInfo= tsToken.getTimeStampInfo(); SignerId signer_id = tsToken.getSID(); BigInteger cert_serial_number = signer_id.getSerialNumber(); System.out.println ("Generation time " + tsInfo.getGenTime()); System.out.println ("Signer ID serial "+signer_id.getSerialNumber()); System.out.println ("Signer ID issuer "+signer_id.getIssuerAsString()); } public static void main(String[] args) throws Exception { requestTSP(); } }