/** * @param digestAlgorithm * @return * @throws NoSuchAlgorithmException */ public static MessageDigest getMessageDigest(final DigestAlgorithm digestAlgorithm) throws NoSuchAlgorithmException { // TODO-Bob (13/07/2014): To be checked if the default implementation copes with RIPEMD160 // if (digestAlgorithm.equals(DigestAlgorithm.RIPEMD160)) { // // final RIPEMD160Digest digest = new RIPEMD160Digest(); // final byte[] message = certificateToken.getEncoded(); // digest.update(message, 0, message.length); // final byte[] digestValue = new byte[digest.getDigestSize()]; // digest.doFinal(digestValue, 0); // recalculatedBase64DigestValue = DSSUtils.base64BinaryEncode(digestValue); // } else { final String digestAlgorithmOid = digestAlgorithm.getOid().getId(); // System.out.println(">>> " + digestAlgorithmOid); final MessageDigest messageDigest = MessageDigest.getInstance(digestAlgorithmOid); // System.out.println(">>> " + messageDigest.getProvider() + "/" + messageDigest.getClass().getName()); return messageDigest; }
/** * Setup the time stamp request * * @param digestAlgorithm {@code DigestAlgorithm} used to generate the message imprint * @param digest digest value as byte array * @return array of bytes representing the {@code TimeStampRequest} * @throws DSSException */ private byte[] generateTimestampRequest(final DigestAlgorithm digestAlgorithm, final byte[] digest) throws DSSException { final TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator(); tsqGenerator.setCertReq(certReq); if (reqPolicyOid != null) { tsqGenerator.setReqPolicy(reqPolicyOid); } final ASN1ObjectIdentifier asn1ObjectIdentifier = digestAlgorithm.getOid(); final BigInteger nonce = getNonce(); final TimeStampRequest request = tsqGenerator.generate(asn1ObjectIdentifier, digest, nonce); return DSSUtils.getEncoded(request); }
private void addSignaturePolicyId(final SignatureParameters parameters, final ASN1EncodableVector signedAttributes) { Policy policy = parameters.bLevel().getSignaturePolicy(); if (policy != null && policy.getId() != null) { final String policyId = policy.getId(); SignaturePolicyIdentifier sigPolicy = null; if (!"".equals(policyId)) { // explicit final ASN1ObjectIdentifier derOIPolicyId = new ASN1ObjectIdentifier(policyId); final ASN1ObjectIdentifier oid = policy.getDigestAlgorithm().getOid(); final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(oid); OtherHashAlgAndValue otherHashAlgAndValue = new OtherHashAlgAndValue(algorithmIdentifier, new DEROctetString(policy.getDigestValue())); sigPolicy = new SignaturePolicyIdentifier(new SignaturePolicyId(derOIPolicyId, otherHashAlgAndValue)); } else {// implicit sigPolicy = new SignaturePolicyIdentifier(); } final DERSet attrValues = new DERSet(sigPolicy); final Attribute attribute = new Attribute(id_aa_ets_sigPolicyId, attrValues); signedAttributes.add(attribute); } }