Example usage for org.bouncycastle.asn1 ASN1Sequence toArray

List of usage examples for org.bouncycastle.asn1 ASN1Sequence toArray

Introduction

In this page you can find the example usage for org.bouncycastle.asn1 ASN1Sequence toArray.

Prototype

public ASN1Encodable[] toArray() 

Source Link

Usage

From source file:ca.trustpoint.m2m.M2mCertificateFactory.java

License:Apache License

/**
 * Generates a {@link java.security.cert.CertPath CertPath} object and initializes it with the
 * data read from the {@link java.io.InputStream InputStream} inStream. The data is assumed to be
 * in the specified encoding.//w w  w .  ja  va2 s . co m
 *
 * <p>
 * The returned certificate path object can be typecast to the {@link M2mCertPath} class.
 *
 * @param inStream an {@link java.io.InputStream InputStream} containing the data
 * @param encoding the encoding used for the data
 * @return a {@link java.security.cert.CertPath CertPath} initialized with the data from the
 *         {@link java.io.InputStream InputStream}
 * @exception CertificateException if an exception occurs while decoding or the encoding requested
 *            is not supported
 */
@Override
public CertPath engineGenerateCertPath(InputStream inStream, String encoding) throws CertificateException {
    if (inStream == null) {
        throw new CertificateException("input stream is null");
    }

    try {
        ASN1InputStream aIn = new ASN1InputStream(inStream);
        ASN1Sequence seq = ASN1Sequence.getInstance(aIn.readObject());

        aIn.close();

        ASN1Encodable[] objs;
        List<M2mCertificate> certList;
        InputStream is;
        M2mCertificate cert;

        if (encoding.equals(SupportedEncodings.PKIPATH.getId())) {
            objs = seq.toArray();
            certList = new ArrayList<M2mCertificate>(objs.length);

            // certificates in PKIPATH encoding is from root to signer but M2MCerPath stores
            // certificates from signer to root so do it in reverse order.
            for (int i = objs.length - 1; i >= 0; i--) {
                is = new ByteArrayInputStream(objs[i].toASN1Primitive().getEncoded());
                cert = (M2mCertificate) engineGenerateCertificate(is);
                certList.add(cert);
            }
        } else if (encoding.equals(SupportedEncodings.PKCS7.getId())) {
            ContentInfo ci = ContentInfo.getInstance(seq);
            SignedData sd = SignedData.getInstance(ci.getContent());
            objs = sd.getCertificates().toArray();
            certList = new ArrayList<M2mCertificate>(objs.length);

            // certificates in PKCS7 encoding is from signer to root, the same order as in M2mCertPath
            for (int i = 0; i < objs.length; i++) {
                is = new ByteArrayInputStream(objs[i].toASN1Primitive().getEncoded());
                cert = (M2mCertificate) engineGenerateCertificate(is);
                certList.add(cert);
            }
        } else {
            throw new CertificateException("unknown encoding path: " + encoding);
        }

        return new M2mCertPath(certList);
    } catch (IOException e) {
        throw new CertificateException("IOException parsing PkiPath data: " + e, e);
    }
}

From source file:de.carne.certmgr.store.provider.bouncycastle.BouncyCastleASN1Decoder.java

License:Open Source License

@Override
public ASN1Decoder[] asn1DecodeSequence(int minSize, int maxSize) throws IOException {
    ASN1Decoder[] sequence;//from   www . j ava  2  s. co  m

    if (isType(ASN1Sequence.class)) {
        ASN1Sequence sequenceObject = ensureType(ASN1Sequence.class);
        ArrayList<ASN1Decoder> sequenceDecoders = new ArrayList<>(sequenceObject.size());

        for (ASN1Encodable encodable : sequenceObject.toArray()) {
            sequenceDecoders.add(new BouncyCastleASN1Decoder(encodable.toASN1Primitive()));
        }
        sequence = sequenceDecoders.toArray(new ASN1Decoder[sequenceDecoders.size()]);
    } else {
        sequence = new ASN1Decoder[] { this };
    }

    int sequenceSize = sequence.length;

    if (minSize >= 0 && sequenceSize < minSize) {
        throw new IOException(
                "Unexpected sequence size: " + sequenceSize + " expected minimum size: " + minSize);
    }
    if (maxSize >= 0 && sequenceSize > maxSize) {
        throw new IOException(
                "Unexpected sequence size: " + sequenceSize + " expected maximum size: " + maxSize);
    }
    return sequence;
}

From source file:eu.europa.ec.markt.dss.DSSUtils.java

License:Open Source License

private static HashMap<String, String> get(final X500Principal x500Principal) {

    HashMap<String, String> treeMap = new HashMap<String, String>();
    final byte[] encoded = x500Principal.getEncoded();
    final ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(encoded);
    final ASN1Encodable[] asn1Encodables = asn1Sequence.toArray();
    for (final ASN1Encodable asn1Encodable : asn1Encodables) {

        final DLSet dlSet = (DLSet) asn1Encodable;
        for (int ii = 0; ii < dlSet.size(); ii++) {

            final DLSequence dlSequence = (DLSequence) dlSet.getObjectAt(ii);
            if (dlSequence.size() != 2) {

                throw new DSSException("The DLSequence must contains exactly 2 elements.");
            }/*from   w  ww  .j ava 2 s.c  o m*/
            final ASN1Encodable asn1EncodableAttributeType = dlSequence.getObjectAt(0);
            final String stringAttributeType = getString(asn1EncodableAttributeType);
            final ASN1Encodable asn1EncodableAttributeValue = dlSequence.getObjectAt(1);
            final String stringAttributeValue = getString(asn1EncodableAttributeValue);
            treeMap.put(stringAttributeType, stringAttributeValue);
        }
    }
    return treeMap;
}

From source file:eu.europa.ec.markt.dss.DSSUtils.java

License:Open Source License

private static String getUtf8String(final X500Principal x500Principal) {

    final byte[] encoded = x500Principal.getEncoded();
    final ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(encoded);
    final ASN1Encodable[] asn1Encodables = asn1Sequence.toArray();
    final StringBuilder stringBuilder = new StringBuilder();
    /**/* w ww. j  ava2s . c  o m*/
     * RFC 4514 LDAP: Distinguished Names
     * 2.1.  Converting the RDNSequence
     *
     * If the RDNSequence is an empty sequence, the result is the empty or
     * zero-length string.
     *
     * Otherwise, the output consists of the string encodings of each
     * RelativeDistinguishedName in the RDNSequence (according to Section
     * 2.2), starting with the last element of the sequence and moving
     * backwards toward the first.
     * ...
     */
    for (int ii = asn1Encodables.length - 1; ii >= 0; ii--) {

        final ASN1Encodable asn1Encodable = asn1Encodables[ii];

        final DLSet dlSet = (DLSet) asn1Encodable;
        for (int jj = 0; jj < dlSet.size(); jj++) {

            final DLSequence dlSequence = (DLSequence) dlSet.getObjectAt(jj);
            if (dlSequence.size() != 2) {

                throw new DSSException("The DLSequence must contains exactly 2 elements.");
            }
            final ASN1Encodable attributeType = dlSequence.getObjectAt(0);
            final ASN1Encodable attributeValue = dlSequence.getObjectAt(1);
            String string = getString(attributeValue);

            /**
             * RFC 4514               LDAP: Distinguished Names
             * ...
             * Other characters may be escaped.
             *
             * Each octet of the character to be escaped is replaced by a backslash
             * and two hex digits, which form a single octet in the code of the
             * character.  Alternatively, if and only if the character to be escaped
             * is one of
             *
             * ' ', '"', '#', '+', ',', ';', '<', '=', '>', or '\'
             * (U+0020, U+0022, U+0023, U+002B, U+002C, U+003B,
             * U+003C, U+003D, U+003E, U+005C, respectively)
             *
             * it can be prefixed by a backslash ('\' U+005C).
             * ...
             */
            string = string.replace("\"", "\\\"");
            string = string.replace("#", "\\#");
            string = string.replace("+", "\\+");
            string = string.replace(",", "\\,");
            string = string.replace(";", "\\;");
            string = string.replace("<", "\\<");
            string = string.replace("=", "\\=");
            string = string.replace(">", "\\>");
            // System.out.println(">>> " + attributeType.toString() + "=" + attributeValue.getClass().getSimpleName() + "[" + string + "]");
            if (stringBuilder.length() != 0) {
                stringBuilder.append(',');
            }
            stringBuilder.append(attributeType).append('=').append(string);
        }
    }
    //final X500Name x500Name = X500Name.getInstance(encoded);
    return stringBuilder.toString();
}

From source file:eu.europa.esig.dss.DSSASN1Utils.java

License:Open Source License

public static Map<String, String> get(final X500Principal x500Principal) {
    Map<String, String> treeMap = new HashMap<String, String>();
    final byte[] encoded = x500Principal.getEncoded();
    final ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(encoded);
    final ASN1Encodable[] asn1Encodables = asn1Sequence.toArray();
    for (final ASN1Encodable asn1Encodable : asn1Encodables) {

        final DLSet dlSet = (DLSet) asn1Encodable;
        for (int ii = 0; ii < dlSet.size(); ii++) {

            final DLSequence dlSequence = (DLSequence) dlSet.getObjectAt(ii);
            if (dlSequence.size() != 2) {

                throw new DSSException("The DLSequence must contains exactly 2 elements.");
            }/*from w ww .  jav  a2s.c o m*/
            final ASN1Encodable asn1EncodableAttributeType = dlSequence.getObjectAt(0);
            final String stringAttributeType = getString(asn1EncodableAttributeType);
            final ASN1Encodable asn1EncodableAttributeValue = dlSequence.getObjectAt(1);
            final String stringAttributeValue = getString(asn1EncodableAttributeValue);
            treeMap.put(stringAttributeType, stringAttributeValue);
        }
    }
    return treeMap;
}

From source file:eu.europa.esig.dss.DSSASN1Utils.java

License:Open Source License

public static String getUtf8String(final X500Principal x500Principal) {

    final byte[] encoded = x500Principal.getEncoded();
    final ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(encoded);
    final ASN1Encodable[] asn1Encodables = asn1Sequence.toArray();
    final StringBuilder stringBuilder = new StringBuilder();
    /**/*from   w  w w .  j av a  2 s  . c om*/
     * RFC 4514 LDAP: Distinguished Names
     * 2.1. Converting the RDNSequence
     *
     * If the RDNSequence is an empty sequence, the result is the empty or
     * zero-length string.
     *
     * Otherwise, the output consists of the string encodings of each
     * RelativeDistinguishedName in the RDNSequence (according to Section
     * 2.2), starting with the last element of the sequence and moving
     * backwards toward the first.
     * ...
     */
    for (int ii = asn1Encodables.length - 1; ii >= 0; ii--) {

        final ASN1Encodable asn1Encodable = asn1Encodables[ii];

        final DLSet dlSet = (DLSet) asn1Encodable;
        for (int jj = 0; jj < dlSet.size(); jj++) {

            final DLSequence dlSequence = (DLSequence) dlSet.getObjectAt(jj);
            if (dlSequence.size() != 2) {

                throw new DSSException("The DLSequence must contains exactly 2 elements.");
            }
            final ASN1Encodable attributeType = dlSequence.getObjectAt(0);
            final ASN1Encodable attributeValue = dlSequence.getObjectAt(1);
            String string = getString(attributeValue);

            /**
             * RFC 4514 LDAP: Distinguished Names
             * ...
             * Other characters may be escaped.
             *
             * Each octet of the character to be escaped is replaced by a backslash
             * and two hex digits, which form a single octet in the code of the
             * character. Alternatively, if and only if the character to be escaped
             * is one of
             *
             * ' ', '"', '#', '+', ',', ';', '<', '=', '>', or '\'
             * (U+0020, U+0022, U+0023, U+002B, U+002C, U+003B,
             * U+003C, U+003D, U+003E, U+005C, respectively)
             *
             * it can be prefixed by a backslash ('\' U+005C).
             * ...
             */
            string = string.replace("\"", "\\\"");
            string = string.replace("#", "\\#");
            string = string.replace("+", "\\+");
            string = string.replace(",", "\\,");
            string = string.replace(";", "\\;");
            string = string.replace("<", "\\<");
            string = string.replace("=", "\\=");
            string = string.replace(">", "\\>");
            // System.out.println(">>> " + attributeType.toString() + "=" +
            // attributeValue.getClass().getSimpleName() + "[" + string + "]");
            if (stringBuilder.length() != 0) {
                stringBuilder.append(',');
            }
            stringBuilder.append(attributeType).append('=').append(string);
        }
    }
    // final X500Name x500Name = X500Name.getInstance(encoded);
    return stringBuilder.toString();
}

From source file:net.sf.keystore_explorer.crypto.x509.PolicyMappingsUtil.java

License:Open Source License

/**
 * Creates list of <code>PolicyMapping</code> objects from an <code>PolicyMappings</code> object.
 *
 * @param policyMappings// w  ww .ja  v  a 2  s  . c o m
 * @return List of PolicyMapping
 */
public static List<PolicyMapping> getListOfPolicyMappings(PolicyMappings policyMappings) {

    ASN1Sequence policyMappingsSeq = (ASN1Sequence) policyMappings.toASN1Primitive();
    ASN1Encodable[] policyMappingsArray = policyMappingsSeq.toArray();

    List<PolicyMapping> policyMappingsList = new ArrayList<PolicyMapping>();

    for (ASN1Encodable asn1Encodable : policyMappingsArray) {
        policyMappingsList.add(PolicyMapping.getInstance(asn1Encodable));
    }

    return policyMappingsList;
}

From source file:net.sf.keystore_explorer.crypto.x509.X509Ext.java

License:Open Source License

private String getCertificatePoliciesStringValue(byte[] value) throws IOException {
    // @formatter:off

    /*//from w  ww  .j a  v a 2  s.co m
     * CertificatePolicies ::= ASN1Sequence SIZE (1..MAX) OF PolicyInformation
     *
     * PolicyInformation ::= ASN1Sequence
     * {
     *      policyIdentifier CertPolicyId,
     *      policyQualifiers ASN1Sequence SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL
     * }
     *
     * CertPolicyId ::= OBJECT IDENTIFIER
     *
     * PolicyQualifierInfo ::= ASN1Sequence
     * {
     *      policyQualifierId PolicyQualifierId,
     *      qualifier ANY DEFINED BY policyQualifierId
     * }
     *
     * PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
     *
     * Qualifier ::= CHOICE
     * {
     *      cPSuri CPSuri,
     *      userNotice UserNotice
     * }
     *
     * CPSuri ::= DERIA5String
     *
     * UserNotice ::= ASN1Sequence
     * {
     *      noticeRef NoticeReference OPTIONAL,
     *      explicitText DisplayText OPTIONAL
     * }
     *
     * NoticeReference ::= ASN1Sequence
     * {
     *      organization DisplayText,
     *      noticeNumbers ASN1Sequence OF ASN1Integer
     * }
     *
     * DisplayText ::= CHOICE
     * {
     *      ia5String DERIA5String (SIZE (1..200)),
     *      visibleString VisibleString (SIZE (1..200)),
     *      bmpString BMPString (SIZE (1..200)),
     *      utf8String UTF8String (SIZE (1..200))
     * }
     */

    // @formatter:on

    StringBuilder sb = new StringBuilder();

    CertificatePolicies certificatePolicies = CertificatePolicies.getInstance(value);

    int certPolicy = 0;

    for (PolicyInformation policyInformation : certificatePolicies.getPolicyInformation()) {
        certPolicy++;

        sb.append(MessageFormat.format(res.getString("CertificatePolicy"), certPolicy));
        sb.append(NEWLINE);

        ASN1ObjectIdentifier policyIdentifier = policyInformation.getPolicyIdentifier();
        String policyIdentifierStr = ObjectIdUtil.toString(policyIdentifier);

        sb.append(INDENT);
        sb.append(MessageFormat.format(res.getString("PolicyIdentifier"), policyIdentifierStr));
        sb.append(NEWLINE);

        ASN1Sequence policyQualifiers = policyInformation.getPolicyQualifiers();

        if (policyQualifiers != null) { // Optional
            int policyQual = 0;

            for (ASN1Encodable policyQualifier : policyQualifiers.toArray()) {

                ASN1Sequence policyQualifierInfo = (ASN1Sequence) policyQualifier;

                sb.append(INDENT.toString(1));
                sb.append(MessageFormat.format(res.getString("PolicyQualifierInformation"), certPolicy,
                        ++policyQual));
                sb.append(NEWLINE);

                ASN1ObjectIdentifier policyQualifierId = (ASN1ObjectIdentifier) policyQualifierInfo
                        .getObjectAt(0);

                CertificatePolicyQualifierType certificatePolicyQualifierType = CertificatePolicyQualifierType
                        .resolveOid(policyQualifierId.getId());

                if (certificatePolicyQualifierType != null) {
                    sb.append(INDENT.toString(2));
                    sb.append(certificatePolicyQualifierType.friendly());
                    sb.append(NEWLINE);

                    if (certificatePolicyQualifierType == PKIX_CPS_POINTER_QUALIFIER) {
                        DERIA5String cpsPointer = (DERIA5String) policyQualifierInfo.getObjectAt(1);

                        sb.append(INDENT.toString(2));
                        sb.append(MessageFormat.format(res.getString("CpsPointer"),
                                "<a href=\"" + cpsPointer + "\">" + cpsPointer + "</a>"));
                        sb.append(NEWLINE);
                    } else if (certificatePolicyQualifierType == PKIX_USER_NOTICE_QUALIFIER) {
                        ASN1Encodable userNoticeObj = policyQualifierInfo.getObjectAt(1);

                        UserNotice userNotice = UserNotice.getInstance(userNoticeObj);

                        sb.append(INDENT.toString(2));
                        sb.append(res.getString("UserNotice"));
                        sb.append(NEWLINE);

                        NoticeReference noticeReference = userNotice.getNoticeRef();

                        DisplayText explicitText = userNotice.getExplicitText();

                        if (noticeReference != null) { // Optional
                            sb.append(INDENT.toString(3));
                            sb.append(res.getString("NoticeReference"));
                            sb.append(NEWLINE);

                            DisplayText organization = noticeReference.getOrganization();
                            String organizationString = organization.getString();

                            sb.append(INDENT.toString(4));
                            sb.append(MessageFormat.format(res.getString("Organization"), organizationString));
                            sb.append(NEWLINE);

                            ASN1Integer[] noticeNumbers = noticeReference.getNoticeNumbers();

                            StringBuilder sbNoticeNumbers = new StringBuilder();
                            for (ASN1Integer noticeNumber : noticeNumbers) {
                                sbNoticeNumbers.append(noticeNumber.getValue().intValue());
                                sbNoticeNumbers.append(", ");
                            }
                            sbNoticeNumbers.setLength(sbNoticeNumbers.length() - 2);

                            sb.append(INDENT.toString(4));
                            sb.append(MessageFormat.format(res.getString("NoticeNumbers"),
                                    sbNoticeNumbers.toString()));
                            sb.append(NEWLINE);
                        }

                        if (explicitText != null) { // Optional
                            String explicitTextString = explicitText.getString();

                            sb.append(INDENT.toString(3));
                            sb.append(MessageFormat.format(res.getString("ExplicitText"), explicitTextString));
                            sb.append(NEWLINE);
                        }
                    }
                }
            }
        }
    }

    return sb.toString();
}

From source file:net.sf.keystore_explorer.crypto.x509.X509Ext.java

License:Open Source License

private String getPolicyMappingsStringValue(byte[] value) throws IOException {
    // @formatter:off

    /*// w  w w  .  ja v a2  s. c om
     * PolicyMappings ::= ASN1Sequence SIZE (1..MAX) OF PolicyMappings
     *
     * PolicyMappings ::= ASN1Sequence { issuerDomainPolicy CertPolicyId,
     * subjectDomainPolicy CertPolicyId }
     *
     * CertPolicyId ::= OBJECT IDENTIFIER
     */

    // @formatter:on

    StringBuilder sb = new StringBuilder();

    PolicyMappings policyMappings = PolicyMappings.getInstance(value);
    ASN1Sequence policyMappingsSeq = (ASN1Sequence) policyMappings.toASN1Primitive();

    int polMap = 0;

    for (ASN1Encodable policyMapping : policyMappingsSeq.toArray()) {

        ASN1Sequence policyMappingSeq = ASN1Sequence.getInstance(policyMapping.toASN1Primitive());
        polMap++;

        sb.append(MessageFormat.format(res.getString("PolicyMapping"), polMap));
        sb.append(NEWLINE);

        ASN1ObjectIdentifier issuerDomainPolicy = (ASN1ObjectIdentifier) policyMappingSeq.getObjectAt(0);
        ASN1ObjectIdentifier subjectDomainPolicy = (ASN1ObjectIdentifier) policyMappingSeq.getObjectAt(1);

        sb.append(INDENT);
        sb.append(MessageFormat.format(res.getString("IssuerDomainPolicy"),
                ObjectIdUtil.toString(issuerDomainPolicy)));
        sb.append(NEWLINE);

        sb.append(INDENT);
        sb.append(MessageFormat.format(res.getString("SubjectDomainPolicy"),
                ObjectIdUtil.toString(subjectDomainPolicy)));
        sb.append(NEWLINE);
    }

    return sb.toString();
}

From source file:net.sf.keystore_explorer.crypto.x509.X509Ext.java

License:Open Source License

private String getBiometricInfoStringValue(byte[] octets) {

    // @formatter:off

    /*/*from  w  w  w  .  ja v  a  2s.c  o m*/
       BiometricSyntax ::= SEQUENCE OF BiometricData
       BiometricData ::= SEQUENCE
       {
    typeOfBiometricData TypeOfBiometricData,
    hashAlgorithm AlgorithmIdentifier,
    biometricDataHash OCTET STRING,
    sourceDataUri IA5String OPTIONAL
       }
       TypeOfBiometricData ::= CHOICE
       {
    predefinedBiometricType PredefinedBiometricType,
    biometricDataId OBJECT IDENTIIFER
       }
       PredefinedBiometricType ::= INTEGER
       {
    picture(0),
    handwritten-signature(1)
       }
     */

    // @formatter:on

    StringBuilder sb = new StringBuilder();
    int biometricDataNr = 0;

    ASN1Sequence asn1Sequence = ASN1Sequence.getInstance(octets);

    for (ASN1Encodable asn1Encodable : asn1Sequence.toArray()) {
        BiometricData biometricData = BiometricData.getInstance(asn1Encodable);
        TypeOfBiometricData typeOfBiometricData = biometricData.getTypeOfBiometricData();
        AlgorithmIdentifier hashAlgorithm = biometricData.getHashAlgorithm();
        ASN1OctetString biometricDataHash = biometricData.getBiometricDataHash();
        DERIA5String sourceDataUri = biometricData.getSourceDataUri();

        sb.append(MessageFormat.format(res.getString("BiometricInfo.BiometricData"), biometricDataNr));
        sb.append(NEWLINE);

        sb.append(INDENT);
        if (typeOfBiometricData.isPredefined()) {
            int type = typeOfBiometricData.getPredefinedBiometricType();
            sb.append(MessageFormat.format(res.getString("BiometricInfo.TypeOfBiometricData"), type));
        } else {
            String biometricDataOid = typeOfBiometricData.getBiometricDataOid().getId();
            sb.append(
                    MessageFormat.format(res.getString("BiometricInfo.TypeOfBiometricData"), biometricDataOid));
        }
        sb.append(NEWLINE);

        sb.append(INDENT);
        sb.append(MessageFormat.format(res.getString("BiometricInfo.HashAlgorithm"),
                hashAlgorithm.getAlgorithm().getId()));
        sb.append(NEWLINE);

        sb.append(INDENT);
        sb.append(MessageFormat.format(res.getString("BiometricInfo.BiometricDataHash"),
                HexUtil.getHexString(biometricDataHash.getOctets())));
        sb.append(NEWLINE);

        if (sourceDataUri != null) { // optional
            sb.append(INDENT);
            sb.append(MessageFormat.format(res.getString("BiometricInfo.SourceDataUri"),
                    sourceDataUri.toString()));
            sb.append(NEWLINE);
        }
    }

    return sb.toString();
}