Example usage for org.bouncycastle.asn1 ASN1Sequence getInstance

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

Introduction

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

Prototype

public static ASN1Sequence getInstance(ASN1TaggedObject taggedObject, boolean explicit) 

Source Link

Document

Return an ASN1 SEQUENCE from a tagged object.

Usage

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

License:Apache License

/**
 * Generates a certificate object and initializes it with the data read from the
 * {@link java.io.InputStream InputStream} {@code inStream}.
 *
 * <p>//from w  w w .j  a va2s.  co m
 * The returned certificate object can be casted to the {@link M2mCertificate M2MCertificate}
 * class.
 *
 * <p>
 * The certificate provided in {@code inStream} must be DER-encoded and may be supplied in binary
 * or printable (Base64) encoding. If the certificate is provided in Base64 encoding, it must be
 * bounded at the beginning by -----BEGIN CERTIFICATE-----, and must be bounded at the end by
 * -----END CERTIFICATE-----.
 *
 * <p>
 * Note that if the given input stream does not support {@link java.io.InputStream#mark(int) mark}
 * and {@link java.io.InputStream#reset() reset}, this method will consume the entire input
 * stream. Otherwise, each call to this method consumes one certificate and the read position of
 * the input stream is positioned to the next available byte after the inherent end-of-certificate
 * marker. If the data in the input stream does not contain an inherent end-of-certificate marker
 * (other than EOF) and there is trailing data after the certificate is parsed, a
 * {@link java.security.cert.CertificateException CertificateException} is thrown.
 *
 * @param inStream an input stream with the certificate data.
 *
 * @return a certificate object initialized with the data from the input stream.
 *
 * @exception CertificateException on parsing errors.
 */
@Override
public Certificate engineGenerateCertificate(InputStream inStream) throws CertificateException {
    if (inStream == null) {
        throw new IllegalArgumentException("input stream is null");
    }

    try {
        ASN1InputStream aIn = new ASN1InputStream(inStream);
        ASN1ApplicationSpecific app = ASN1ApplicationSpecific.getInstance(aIn.readObject());

        aIn.close();

        int appTag = app.getApplicationTag();

        if (appTag != M2mCertificate.APPLICATION_TAG_NUMBER) {
            throw new IOException("not M2M certificate application tag: " + appTag);
        }

        ASN1Sequence seq = (ASN1Sequence) app.getObject(BERTags.SEQUENCE);
        if (seq.size() != 2) {
            throw new IOException("sequence wrong size for a M2M certificate");
        }

        // Construct M2M certificate
        M2mCertificate cert = new M2mCertificate();
        for (int i = 0; i < seq.size(); i++) {
            ASN1TaggedObject obj = (ASN1TaggedObject) seq.getObjectAt(i);
            CertificateFields tag = CertificateFields.getInstance(obj.getTagNo());

            switch (tag) {
            case TBS_CERTIFICATE:
                ASN1Sequence tbsCertificate = ASN1Sequence.getInstance(obj, false);
                parseTbsCertificate(tbsCertificate, cert);
                break;
            case CA_CALC_VALUE:
                ASN1OctetString cACalcValue = ASN1OctetString.getInstance(obj, false);
                cert.setCaCalcValue(cACalcValue.getOctets());
                break;
            default:
                throw new IOException("unknown M2M data field number: " + tag.getTagNumber());
            }
        }

        return cert;
    } catch (Exception e) {
        // Catch all exceptions and convert it to a CertificateException
        throw new CertificateException("exception on parsing certificate data", e);
    }
}

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

License:Apache License

/**
 * Parses the given ASN.1 sequence and return the corresponding {@link M2mCertificate
 * M2MCertificate} object.//from   w  w w  . j a va2 s. c o  m
 *
 * @param seq ASN.1 sequence containing TBS data.
 * @param cert A M2MCertificate object.
 * @throw InvalidKeyException if public key is invalid.
 * @throw IOException if parsing error.
 * @throw URISyntaxException if URI field is invalid.
 */
private void parseTbsCertificate(ASN1Sequence seq, M2mCertificate cert)
        throws InvalidKeyException, IOException, URISyntaxException {
    if (seq.size() < 2) {
        throw new IOException("no enough data for TBS certificate in sequence");
    }

    // Set tbsCertificate
    for (int i = 0; i < seq.size(); i++) {
        ASN1TaggedObject obj = (ASN1TaggedObject) seq.getObjectAt(i);
        TbsCertificateFields tag = TbsCertificateFields.getInstance(obj.getTagNo());

        switch (tag) {
        case SERIAL_NUMBER:
            ASN1OctetString serialNumber = ASN1OctetString.getInstance(obj, false);
            cert.setSerialNumber(serialNumber.getOctets());
            break;
        case CA_ALGORITHM:
            ASN1ObjectIdentifier cAAlgorithm = ASN1ObjectIdentifier.getInstance(obj, false);

            if (cert.getCaKeyDefinition() == null) {
                cert.setCaKeyDefinition(new KeyAlgorithmDefinition());
            }

            cert.getCaKeyDefinition().setAlgorithm(parseKeyAlgorithmDefinitionAlgorithm(cAAlgorithm));
            break;
        case CA_ALGORITHM_PARAMETERS:
            ASN1OctetString cAAlgParams = ASN1OctetString.getInstance(obj, false);

            if (cert.getCaKeyDefinition() == null) {
                cert.setCaKeyDefinition(new KeyAlgorithmDefinition());
            }

            cert.getCaKeyDefinition().setParameters(cAAlgParams.getOctets());
            break;
        case ISSUER:
            ASN1Sequence issuerSeq = ASN1Sequence.getInstance(obj, false);
            cert.setIssuer(parseEntityName(issuerSeq));
            break;
        case VALID_FROM:
            ASN1OctetString validFrom = ASN1OctetString.getInstance(obj, false);
            BigInteger dateTimeBInt = new BigInteger(validFrom.getOctets());

            // date in sequence is second, converts to millisecond for constructing Date
            long dateTime = dateTimeBInt.longValue() * 1000;

            cert.setValidFrom(new Date(dateTime));
            break;
        case VALID_DURATION:
            ASN1OctetString validDuration = ASN1OctetString.getInstance(obj, false);
            BigInteger duration = new BigInteger(validDuration.getOctets());

            cert.setValidDuration(new Integer(duration.intValue()));
            break;
        case SUBJECT:
            ASN1Sequence subjectSeq = ASN1Sequence.getInstance(obj, false);
            cert.setSubject(parseEntityName(subjectSeq));
            break;
        case PUBLIC_KEY_ALGORITHM:
            ASN1ObjectIdentifier pKAlgorithm = ASN1ObjectIdentifier.getInstance(obj, false);

            if (cert.getPublicKeyDefinition() == null) {
                cert.setPublicKeyDefinition(new KeyAlgorithmDefinition());
            }

            cert.getPublicKeyDefinition().setAlgorithm(parseKeyAlgorithmDefinitionAlgorithm(pKAlgorithm));
            break;
        case PUBLIC_KEY_ALGORITHM_PARAMETERS:
            ASN1OctetString pKAlgParams = ASN1OctetString.getInstance(obj, false);

            if (cert.getPublicKeyDefinition() == null) {
                cert.setPublicKeyDefinition(new KeyAlgorithmDefinition());
            }

            cert.getPublicKeyDefinition().setParameters(pKAlgParams.getOctets());
            break;
        case PUBLIC_KEY:
            ASN1OctetString pubKey = ASN1OctetString.getInstance(obj, false);
            byte[] rawPublicKey = pubKey.getOctets();

            cert.setIsPublicKeyCompressed(KeyConversionUtils.isCompressedEcPoint(rawPublicKey));

            PublicKey publicKey = KeyConversionUtils.convertRawBytestoEcPublicKey(rawPublicKey);
            cert.setPublicKey(publicKey);
            break;
        case AUTHORITY_KEY_ID:
            ASN1Sequence authKeyIdSeq = ASN1Sequence.getInstance(obj, false);
            cert.setAuthorityKeyIdentifier(parseAuthorityKeyIdentifier(authKeyIdSeq));
            break;
        case SUBJECT_KEY_ID:
            ASN1OctetString subjKeyId = ASN1OctetString.getInstance(obj, false);
            cert.setSubjectKeyIdentifier(subjKeyId.getOctets());
            break;
        case KEY_USAGE:
            ASN1OctetString keyUsageObj = ASN1OctetString.getInstance(obj, false);
            KeyUsage keyUsage = new KeyUsage(keyUsageObj.getEncoded());
            cert.setKeyUsage(keyUsage);
            break;
        case BASIC_CONSTRAINTS:
            ASN1Integer basicConstraints = ASN1Integer.getInstance(obj, false);
            cert.setBasicConstraints(basicConstraints.getValue().intValue());
            break;
        case CERTIFICATE_POLICY:
            ASN1ObjectIdentifier certPolicy = ASN1ObjectIdentifier.getInstance(obj, false);
            cert.setCertificatePolicy(certPolicy.getId());
            break;
        case SUBJECT_ALTERNATE_NAME:
            ASN1TaggedObject subjectAltNameObj = ASN1TaggedObject.getInstance(obj, true);
            cert.setSubjectAlternativeName(parseGeneralName(subjectAltNameObj));
            break;
        case ISSUER_ALTERNATE_NAME:
            ASN1TaggedObject issuerAltNameObj = ASN1TaggedObject.getInstance(obj, true);
            cert.setIssuerAlternativeName(parseGeneralName(issuerAltNameObj));
            break;
        case EXTENDED_KEY_USAGE:
            ASN1ObjectIdentifier extendedKeyUsage = ASN1ObjectIdentifier.getInstance(obj, false);
            cert.setExtendedKeyUsage(extendedKeyUsage.getId());
            break;
        case AUTHENTICATION_INFO_ACCESS_OCSP:
            DERIA5String authInfoAccessOCSPObj = DERIA5String.getInstance(obj, false);
            URI authInfoAccessOCSP = new URI(authInfoAccessOCSPObj.getString());
            cert.setAuthenticationInfoAccessOcsp(authInfoAccessOCSP);
            break;
        case CRL_DISTRIBUTION_POINT_URI:
            DERIA5String cRLDistribPointURIObj = DERIA5String.getInstance(obj, false);
            URI cRLDistribPointURI = new URI(cRLDistribPointURIObj.getString());
            cert.setCrlDistributionPointUri(cRLDistribPointURI);
            break;
        case EXTENSIONS:
            ASN1Sequence x509extensionsSeq = ASN1Sequence.getInstance(obj, false);
            parseX509extensions(x509extensionsSeq, cert);
            break;
        default:
            throw new IOException("unknow TBS certificate field number: " + tag.getTagNumber());
        }
    }
}

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

License:Apache License

/**
 * Parses ASN.1 tagged object to construct a {@link GeneralName} object.
 *
 * @param obj An ASN.1 tagged object.//ww w.  java  2  s.  c om
 * @return An instance of {@link GeneralName} constructed from obj.
 * @throw IOException if parsing error or data invalid.
 */
private GeneralName parseGeneralName(ASN1TaggedObject obj) throws IOException {
    GeneralName name = new GeneralName();
    GeneralNameAttributeId id = GeneralNameAttributeId.getInstance(obj.getTagNo());

    switch (id) {
    case Rfc822Name:
        DERIA5String rfc822NameObj = DERIA5String.getInstance(obj, false);
        name.setAttributeId(GeneralNameAttributeId.Rfc822Name);
        name.setValue(rfc822NameObj.getString());
        break;
    case DnsName:
        DERIA5String dNSNameObj = DERIA5String.getInstance(obj, false);
        name.setAttributeId(GeneralNameAttributeId.DnsName);
        name.setValue(dNSNameObj.getString());
        break;
    case DirectoryName:
        ASN1Sequence directoryNameSeq = ASN1Sequence.getInstance(obj, false);
        name.setEntity(parseEntityName(directoryNameSeq));
        break;
    case Uri:
        DERIA5String uriObj = DERIA5String.getInstance(obj, false);
        name.setAttributeId(GeneralNameAttributeId.Uri);
        name.setValue(uriObj.getString());
        break;
    case IpAddress:
        ASN1OctetString iPAddressObj = ASN1OctetString.getInstance(obj, false);
        String iPAddress = InetAddress.getByAddress(iPAddressObj.getOctets()).getHostAddress();
        name.setAttributeId(GeneralNameAttributeId.IpAddress);
        name.setValue(iPAddress);
        break;
    case RegisteredId:
        ASN1ObjectIdentifier registeredIDObj = ASN1ObjectIdentifier.getInstance(obj, false);
        name.setAttributeId(GeneralNameAttributeId.RegisteredId);
        name.setValue(registeredIDObj.getId());
        break;
    default:
        throw new IOException("unknown GeneralName ID: " + id.getIndexId());
    }

    if (!name.isValid()) {
        throw new IOException("invalid GeneralName instance parsed from ASN.1 tagged object");
    }

    return name;
}

From source file:com.aaasec.sigserv.cscommon.xmldsig.EcdsaSigValue.java

License:Open Source License

public static EcdsaSigValue getInstance(ASN1TaggedObject obj, boolean explicit) {
    return getInstance(ASN1Sequence.getInstance(obj, explicit));
}

From source file:com.guardtime.asn1.CertToken.java

License:Apache License

public static Asn1CertToken getInstance(ASN1TaggedObject obj, boolean explicit) {
    return new Asn1CertToken(ASN1Sequence.getInstance(obj, explicit));
}

From source file:com.guardtime.asn1.SignatureInfo.java

License:Apache License

public static Asn1SignatureInfo getInstance(ASN1TaggedObject obj, boolean explicit) {
    return new Asn1SignatureInfo(ASN1Sequence.getInstance(obj, explicit));
}

From source file:com.novosec.pkix.asn1.cmp.CAKeyUpdAnnContent.java

License:Open Source License

public static CAKeyUpdAnnContent getInstance(ASN1TaggedObject obj, boolean explicit) {
    return getInstance(ASN1Sequence.getInstance(obj, explicit));
}

From source file:com.novosec.pkix.asn1.cmp.CertConfirmContent.java

License:Open Source License

public static CertConfirmContent getInstance(ASN1TaggedObject obj, boolean explicit) {
    return getInstance(ASN1Sequence.getInstance(obj, explicit));
}

From source file:com.novosec.pkix.asn1.cmp.CertifiedKeyPair.java

License:Open Source License

public static CertifiedKeyPair getInstance(ASN1TaggedObject obj, boolean explicit) {
    return getInstance(ASN1Sequence.getInstance(obj, explicit));
}

From source file:com.novosec.pkix.asn1.cmp.CertRepMessage.java

License:Open Source License

public static CertRepMessage getInstance(ASN1TaggedObject obj, boolean explicit) {
    return getInstance(ASN1Sequence.getInstance(obj, explicit));
}