Example usage for org.bouncycastle.asn1.esf SigPolicyQualifierInfo getSigQualifier

List of usage examples for org.bouncycastle.asn1.esf SigPolicyQualifierInfo getSigQualifier

Introduction

In this page you can find the example usage for org.bouncycastle.asn1.esf SigPolicyQualifierInfo getSigQualifier.

Prototype

public ASN1Encodable getSigQualifier() 

Source Link

Usage

From source file:eu.europa.ec.markt.dss.validation102853.cades.CAdESSignature.java

License:Open Source License

/**
 * 31 ETSI TS 101 733 V2.2.1 (2013-04)/*from w w w  .jav a 2s .  c  om*/
 * <p/>
 * 5.8.1 signature-policy-identifier
 * The present document mandates that for CAdES-EPES, a reference to the signature policy is included in the
 * signedData. This reference is explicitly identified. A signature policy defines the rules for creation and validation of
 * an electronic signature, and is included as a signed attribute with every Explicit Policy-based Electronic Signature. The
 * signature-policy-identifier shall be a signed attribute.
 * <p/>
 * The following object identifier identifies the signature-policy-identifier attribute:
 * ... id-aa-ets-sigPolicyId OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) id-aa(2) 15 }
 * signature-policy-identifier attribute values have ASN.1 type SignaturePolicyIdentifier:
 * ... SignaturePolicyIdentifier ::=CHOICE{
 * ...... signaturePolicyId ......... SignaturePolicyId,
 * ...... signaturePolicyImplied .... SignaturePolicyImplied -- not used in this version}
 * <p/>
 * ... SignaturePolicyId ::= SEQUENCE {
 * ...... sigPolicyId ......... SigPolicyId,
 * ...... sigPolicyHash ....... SigPolicyHash,
 * ...... sigPolicyQualifiers . SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL}
 * <p/>
 * ... SignaturePolicyImplied ::= NULL
 * <p/>
 * NOTE: {@code SignaturePolicyImplied} -- not used in this version
 *
 * @return
 */
@Override
public SignaturePolicy getPolicyId() {

    final AttributeTable attributes = signerInformation.getSignedAttributes();
    if (attributes == null) {
        return null;
    }

    final Attribute attribute = attributes.get(PKCSObjectIdentifiers.id_aa_ets_sigPolicyId);
    if (attribute == null) {
        return null;
    }

    final ASN1Encodable attrValue = attribute.getAttrValues().getObjectAt(0);
    if (attrValue instanceof DERNull) {
        return null;
    }

    final SignaturePolicyId sigPolicy = SignaturePolicyId.getInstance(attrValue);
    if (sigPolicy == null) {
        return null;
    }

    final String policyId = sigPolicy.getSigPolicyId().getId();
    final SignaturePolicy signaturePolicy = new SignaturePolicy(policyId);

    final OtherHashAlgAndValue hashAlgAndValue = sigPolicy.getSigPolicyHash();

    final AlgorithmIdentifier digestAlgorithmIdentifier = hashAlgAndValue.getHashAlgorithm();
    final String digestAlgorithmOID = digestAlgorithmIdentifier.getAlgorithm().getId();
    final DigestAlgorithm digestAlgorithm = DigestAlgorithm.forOID(digestAlgorithmOID);
    signaturePolicy.setDigestAlgorithm(digestAlgorithm);

    final ASN1OctetString digestValue = hashAlgAndValue.getHashValue();
    final byte[] digestValueBytes = digestValue.getOctets();
    final String policyDigestHexValue = DSSUtils.toHex(digestValueBytes);
    signaturePolicy.setDigestValue(policyDigestHexValue);

    final SigPolicyQualifiers sigPolicyQualifiers = sigPolicy.getSigPolicyQualifiers();
    if (sigPolicyQualifiers == null) {

        return signaturePolicy;
    }
    for (int ii = 0; ii < sigPolicyQualifiers.size(); ii++) {

        final SigPolicyQualifierInfo policyQualifierInfo = sigPolicyQualifiers.getInfoAt(ii);
        final ASN1ObjectIdentifier policyQualifierInfoId = policyQualifierInfo.getSigPolicyQualifierId();
        final String policyQualifierInfoValue = policyQualifierInfo.getSigQualifier().toString();

        if (PKCSObjectIdentifiers.id_spq_ets_unotice.equals(policyQualifierInfoId)) {

            signaturePolicy.setNotice(policyQualifierInfoValue);
        } else if (PKCSObjectIdentifiers.id_spq_ets_uri.equals(policyQualifierInfoId)) {

            signaturePolicy.setUrl(policyQualifierInfoValue);
        } else {
            LOG.error("Unknown signature policy qualifier id: " + policyQualifierInfoId + " with value: "
                    + policyQualifierInfoValue);
        }
    }
    return signaturePolicy;
}

From source file:eu.europa.esig.dss.cades.validation.CAdESSignature.java

License:Open Source License

/**
 * 31 ETSI TS 101 733 V2.2.1 (2013-04)/*w  w  w .  j  a v  a  2  s. c o  m*/
 * 5.8.1 signature-policy-identifier The present document mandates that for
 * CAdES-EPES, a reference to the signature policy is included in the
 * signedData. This reference is explicitly identified. A signature policy
 * defines the rules for creation and validation of an electronic signature,
 * and is included as a signed attribute with every Explicit Policy-based
 * Electronic Signature. The signature-policy-identifier shall be a signed
 * attribute.
 * The following object identifier identifies the
 * signature-policy-identifier attribute: ... id-aa-ets-sigPolicyId OBJECT
 * IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
 * pkcs9(9) smime(16) id-aa(2) 15 } signature-policy-identifier attribute
 * values have ASN.1 type SignaturePolicyIdentifier: ...
 * SignaturePolicyIdentifier ::=CHOICE{ ...... signaturePolicyId .........
 * SignaturePolicyId, ...... signaturePolicyImplied ....
 * SignaturePolicyImplied -- not used in this version}
 * ... SignaturePolicyId ::= SEQUENCE { ...... sigPolicyId .........
 * SigPolicyId, ...... sigPolicyHash ....... SigPolicyHash, ......
 * sigPolicyQualifiers . SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo
 * OPTIONAL}
 * ... SignaturePolicyImplied ::= NULL
 * NOTE: {@code SignaturePolicyImplied} -- not used in this version
 *
 * @return
 */
@Override
public SignaturePolicy getPolicyId() {

    final AttributeTable attributes = signerInformation.getSignedAttributes();
    if (attributes == null) {
        return null;
    }

    final Attribute attribute = attributes.get(PKCSObjectIdentifiers.id_aa_ets_sigPolicyId);
    if (attribute == null) {
        return null;
    }

    final ASN1Encodable attrValue = attribute.getAttrValues().getObjectAt(0);
    if (attrValue instanceof DERNull) {
        return null;
    }

    final SignaturePolicyId sigPolicy = SignaturePolicyId.getInstance(attrValue);
    if (sigPolicy == null) {
        return null;
    }

    final String policyId = sigPolicy.getSigPolicyId().getId();
    final SignaturePolicy signaturePolicy = new SignaturePolicy(policyId);

    final OtherHashAlgAndValue hashAlgAndValue = sigPolicy.getSigPolicyHash();

    final AlgorithmIdentifier digestAlgorithmIdentifier = hashAlgAndValue.getHashAlgorithm();
    final String digestAlgorithmOID = digestAlgorithmIdentifier.getAlgorithm().getId();
    final DigestAlgorithm digestAlgorithm = DigestAlgorithm.forOID(digestAlgorithmOID);
    signaturePolicy.setDigestAlgorithm(digestAlgorithm);

    final ASN1OctetString digestValue = hashAlgAndValue.getHashValue();
    final byte[] digestValueBytes = digestValue.getOctets();
    signaturePolicy.setDigestValue(digestValueBytes);

    final SigPolicyQualifiers sigPolicyQualifiers = sigPolicy.getSigPolicyQualifiers();
    if (sigPolicyQualifiers == null) {
        return signaturePolicy;
    }
    for (int ii = 0; ii < sigPolicyQualifiers.size(); ii++) {

        final SigPolicyQualifierInfo policyQualifierInfo = sigPolicyQualifiers.getInfoAt(ii);
        final ASN1ObjectIdentifier policyQualifierInfoId = policyQualifierInfo.getSigPolicyQualifierId();
        final String policyQualifierInfoValue = policyQualifierInfo.getSigQualifier().toString();

        if (PKCSObjectIdentifiers.id_spq_ets_unotice.equals(policyQualifierInfoId)) {

            signaturePolicy.setNotice(policyQualifierInfoValue);
        } else if (PKCSObjectIdentifiers.id_spq_ets_uri.equals(policyQualifierInfoId)) {

            signaturePolicy.setUrl(policyQualifierInfoValue);
        } else {
            LOG.error("Unknown signature policy qualifier id: " + policyQualifierInfoId + " with value: "
                    + policyQualifierInfoValue);
        }
    }
    return signaturePolicy;
}