/** * Returns a new instance of MessageDigest for a given digest algorithm * * @param digestAlgorithm * the digest algoritm * @return a new instance of MessageDigest */ public static MessageDigest getMessageDigest(final DigestAlgorithm digestAlgorithm) { try { final String digestAlgorithmOid = digestAlgorithm.getOid(); return MessageDigest.getInstance(digestAlgorithmOid, BouncyCastleProvider.PROVIDER_NAME); } catch (GeneralSecurityException e) { throw new DSSException("Digest algorithm '" + digestAlgorithm.getName() + "' error: " + e.getMessage(), e); } }
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) { if ("ds:SignedInfo".equals(qName)) { signedInfo = true; } if (signedInfo && "ds:Reference".equals(qName)) { reference = true; currentDatafile = new Datafile(); for (int i = 0; i < attributes.getLength(); i++) { if ("URI".equals(attributes.getQName(i))) { try { currentDatafile.setFilename(URLDecoder.decode(attributes.getValue(i), "UTF-8")); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("Invalid file name"); } } } } if (signedInfo && reference && "ds:DigestMethod".equals(qName)) { for (int i = 0; i < attributes.getLength(); i++) { if ("Algorithm".equals(attributes.getQName(i))) { currentDatafile.setHashAlgo(DigestAlgorithm.forXML(attributes.getValue(i)).getName()); } } } }
private void signContainerWithTst(AsicContainer asicContainer) { if (this.context.getCommandLine().hasOption("tst") && !(this.context.getCommandLine().hasOption("pkcs12") || this.context.getCommandLine().hasOption("pkcs11"))) { DigestAlgorithm digestAlgorithm = DigestAlgorithm.SHA256; if (this.context.getCommandLine().hasOption("datst")) { String digestAlgorithmStr = this.context.getCommandLine().getOptionValue("datst"); if (StringUtils.isNotBlank(digestAlgorithmStr)) { digestAlgorithm = DigestAlgorithm.forName(digestAlgorithmStr); } } LOGGER.info("Digest algorithm to calculate data file hash: " + digestAlgorithm.getName()); if (this.context.getCommandLine().hasOption("add")) { if (asicContainer.getDataFiles().size() > 1) { throw new DigiDoc4JException("Data file in container already exists. Should be only one data file in case of ASiCS container."); } String[] optionValues = this.context.getCommandLine().getOptionValues("add"); DataFile dataFile = new DataFile(optionValues[0], optionValues[1]); DataFile tst = TimestampToken.generateTimestampToken(digestAlgorithm, dataFile); asicContainer.setTimeStampToken(tst); this.fileHasChanged = true; } } }
try { if (LOG.isTraceEnabled()) { LOG.trace("Timestamp digest algorithm: {}", digestAlgorithm.getName()); LOG.trace("Timestamp digest value : {}", Utils.toHex(digest));