private SignatureData getFromCmsSignature( SignatureVerificationRequest signatureVerificationRequest, SignatureVerificationResponse response) throws CMSException { String signature = signatureVerificationRequest.getSignature(); byte[] decoded = Base64.decode(signature); CMSSignedData cmsSignedData = new CMSSignedData(decoded); String encodedSignedData = new String((byte[]) cmsSignedData.getSignedContent().getContent()); // Fetch information about the issuers List<String> certInfos = new ArrayList<String>(); Collection certificates = cmsSignedData.getCertificates().getMatches(null); for (Object certificate : certificates) { X509CertificateHolder holder = (X509CertificateHolder) certificate; certInfos.add(holder.getSubject().toString()); CertificateInfo ci = new CertificateInfo(); ci.setSubjectDn(holder.getSubject().toString()); ci.setValidTo(simpleDateFormat.format(holder.getNotAfter())); response.getCertificateInfos().getCertificateInfo().add(ci); } // Fetch timestamp Date signingDate = findTimestamp(cmsSignedData); String dateString = simpleDateFormat.format(signingDate); response.setSignatureDate(dateString); // Create the SignatureData to be verified SignatureData signData = new SignatureData(); signData.setEncodedTbs(encodedSignedData); signData.setSignature(signature); ELegType clientType = new ELegType("test", "test", PkiClient.NETMAKER_NETID_4); signData.setClientType(clientType); return signData; }
private SignatureData getFromXmlDigSigSignature( SignatureVerificationRequest signatureVerificationRequest, SignatureVerificationResponse response) throws ParserConfigurationException, SAXException, IOException, MarshalException, SignatureException { String signature = new String(Base64.decode(signatureVerificationRequest.getSignature())); InputStream is = new ByteArrayInputStream(signature.getBytes()); Document document = createDocument(is, true); XMLSignature xmlSignature = XMLSignatureFactory.getInstance().unmarshalXMLSignature(new DOMStructure(document)); List contentList = xmlSignature.getKeyInfo().getContent(); for (Object content : contentList) { if (content instanceof X509Data) { List certificateList = ((X509Data) content).getContent(); for (Object certificateObject : certificateList) { if (certificateObject instanceof X509Certificate) { X509Certificate cert = (X509Certificate) certificateObject; CertificateInfo ci = new CertificateInfo(); ci.setSubjectDn(cert.getSubjectDN().getName()); ci.setValidTo(simpleDateFormat.format(cert.getNotAfter())); response.getCertificateInfos().getCertificateInfo().add(ci); } } } } return createSignatureDataFromXmlDigSig(signature); }
/** * Returns all certificates of a member. * * @param memberId member if * @throws Exception if an error occurs */ @Command(description = "Returns all certificates of a member") public void getMemberCerts( @Param(name = "memberId", description = "Member identifier") ClientId memberId) throws Exception { GetMemberCertsResponse response = SignerClient.execute(new GetMemberCerts(memberId)); System.out.println("Certs of member " + memberId + ":"); for (CertificateInfo cert : response.getCerts()) { System.out.println("\tId:\t" + cert.getId()); System.out.println("\t\tStatus:\t" + cert.getStatus()); System.out.println("\t\tActive:\t" + cert.isActive()); } }
/** * Show certificate. * * @param certId certificate id * @throws Exception if an error occurs */ @Command(description = "Show certificate") public void showCertificate(@Param(name = "certId", description = "Certificate ID") String certId) throws Exception { List<TokenInfo> tokens = SignerClient.execute(new ListTokens()); for (TokenInfo token : tokens) { for (KeyInfo key : token.getKeyInfo()) { for (CertificateInfo cert : key.getCerts()) { if (certId.equals(cert.getId())) { X509Certificate x509 = readCertificate(cert.getCertificateBytes()); System.out.println(x509); return; } } } } System.out.println("Certificate " + certId + " not found"); }