Example usage for org.bouncycastle.asn1 DERIA5String getInstance

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

Introduction

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

Prototype

public static DERIA5String getInstance(ASN1TaggedObject obj, boolean explicit) 

Source Link

Document

Return an IA5 String from a tagged object.

Usage

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./*  ww  w.j a v a  2s  .  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 an {@link EntityNameAttribute} object.
 *
 * @param obj ASN.1 tagged object for {@link EntityNameAttribute}.
 * @return An instance of {@link EntityNameAttribute} constructed from obj.
 * @throw IOException if parsing has error or unknown ID or no value.
 *//*from w w  w . j av  a2s  .co m*/
private EntityNameAttribute parseEntityNameAttribute(ASN1TaggedObject obj) throws IOException {
    EntityNameAttributeId aid = EntityNameAttributeId.getInstance(obj.getTagNo());
    String value = null;

    switch (aid) {
    case Country:
    case DistinguishedNameQualifier:
    case SerialNumber:
        value = DERPrintableString.getInstance(obj, false).getString();
        break;
    case Organization:
    case OrganizationalUnit:
    case StateOrProvince:
    case Locality:
    case CommonName:
        value = DERUTF8String.getInstance(obj, false).getString();
        break;
    case DomainComponent:
        value = DERIA5String.getInstance(obj, false).getString();
        break;
    case RegisteredId:
        value = ASN1ObjectIdentifier.getInstance(obj, false).getId();
        break;
    case OctetsName:
        byte[] octets = ASN1OctetString.getInstance(obj, false).getOctets();
        value = Hex.toHexString(octets);
        break;
    default:
        throw new IOException("unknown entity name attribute id: " + aid.getIndexId());
    }

    if (value == null) {
        throw new IOException("null entity name attribute value for id: " + aid.getIndexId());
    }

    EntityNameAttribute attribute = new EntityNameAttribute();
    attribute.setId(aid);
    attribute.setValue(value);

    if (!attribute.isValid()) {
        throw new IOException("invalid entity name attribute value for id: " + aid.getIndexId());
    }

    return attribute;
}

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./*from  w ww  . j av  a  2 s  . c  o  m*/
 * @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.itextpdf.signatures.CertificateUtil.java

License:Open Source License

/**
 * Gets the URL of the Certificate Revocation List for a Certificate
 * @param certificate   the Certificate/*w ww .java2 s.  c  om*/
 * @return   the String where you can check if the certificate was revoked
 * @throws CertificateParsingException
 * @throws IOException
 */
public static String getCRLURL(X509Certificate certificate) throws CertificateParsingException {
    ASN1Primitive obj;
    try {
        obj = getExtensionValue(certificate, Extension.cRLDistributionPoints.getId());
    } catch (IOException e) {
        obj = (ASN1Primitive) null;
    }
    if (obj == null) {
        return null;
    }
    CRLDistPoint dist = CRLDistPoint.getInstance(obj);
    DistributionPoint[] dists = dist.getDistributionPoints();
    for (DistributionPoint p : dists) {
        DistributionPointName distributionPointName = p.getDistributionPoint();
        if (DistributionPointName.FULL_NAME != distributionPointName.getType()) {
            continue;
        }
        GeneralNames generalNames = (GeneralNames) distributionPointName.getName();
        GeneralName[] names = generalNames.getNames();
        for (GeneralName name : names) {
            if (name.getTagNo() != GeneralName.uniformResourceIdentifier) {
                continue;
            }
            DERIA5String derStr = DERIA5String.getInstance((ASN1TaggedObject) name.toASN1Primitive(), false);
            return derStr.getString();
        }
    }
    return null;
}

From source file:com.itextpdf.text.pdf.security.CertificateUtil.java

License:Open Source License

/**
 * Gets the URL of the Certificate Revocation List for a Certificate
 * @param certificate   the Certificate/*w  ww.j a  va2  s .c o m*/
 * @return   the String where you can check if the certificate was revoked
 * @throws CertificateParsingException
 * @throws IOException 
 */
public static String getCRLURL(X509Certificate certificate) throws CertificateParsingException {
    ASN1Primitive obj;
    try {
        obj = getExtensionValue(certificate, Extension.cRLDistributionPoints.getId());
    } catch (IOException e) {
        obj = null;
    }
    if (obj == null) {
        return null;
    }
    CRLDistPoint dist = CRLDistPoint.getInstance(obj);
    DistributionPoint[] dists = dist.getDistributionPoints();
    for (DistributionPoint p : dists) {
        DistributionPointName distributionPointName = p.getDistributionPoint();
        if (DistributionPointName.FULL_NAME != distributionPointName.getType()) {
            continue;
        }
        GeneralNames generalNames = (GeneralNames) distributionPointName.getName();
        GeneralName[] names = generalNames.getNames();
        for (GeneralName name : names) {
            if (name.getTagNo() != GeneralName.uniformResourceIdentifier) {
                continue;
            }
            DERIA5String derStr = DERIA5String.getInstance((ASN1TaggedObject) name.toASN1Primitive(), false);
            return derStr.getString();
        }
    }
    return null;
}

From source file:net.sabamiso.android.revocationtest.crl.RevocationTestUsingCRL.java

License:MIT License

private static String getCRLUrl(X509Certificate cert) {
    byte[] asn1_bytes = cert.getExtensionValue("2.5.29.31"); // CRL Distribution Points OID:"2.5.29.31"
    if (asn1_bytes == null) {
        Log.e(TAG, "cannot find 2.5.29.31...");
        return null;
    }/*  www .  j  a  v a2 s  . c  o  m*/

    CRLDistPoint crldp = getCRLDistPoint(asn1_bytes);
    if (crldp == null) {
        Log.e(TAG, "cannot find CRLDistPoint...");
        return null;
    }

    String url = null;

    for (DistributionPoint dp : crldp.getDistributionPoints()) {
        DistributionPointName dpn = dp.getDistributionPoint();
        if (DistributionPointName.FULL_NAME != dpn.getType())
            continue;
        GeneralNames gns = (GeneralNames) dpn.getName();
        for (GeneralName gn : gns.getNames()) {
            if (gn.getTagNo() != GeneralName.uniformResourceIdentifier) {
                continue;
            }
            DERIA5String der_str = DERIA5String.getInstance((ASN1TaggedObject) gn.toASN1Primitive(), false);
            url = der_str.getString();
            Log.d(TAG, "url=" + url);
        }
    }

    return url;
}

From source file:org.deviceconnect.android.ssl.CertificateAuthority.java

License:MIT License

/**
 * ???? Subject Alternative Names (SANs) ??.
 *
 * @param request ???/*from   ww w  . ja  v  a 2 s  .  c o m*/
 * @return SubjectAlternativeNames? {@link GeneralNames} 
 * @throws IOException ?????
 */
private GeneralNames parseSANs(final PKCS10CertificationRequest request) throws IOException {
    List<ASN1Encodable> generalNames = new ArrayList<>();

    CertificationRequestInfo info = request.getCertificationRequestInfo();
    ASN1Set attributes = info.getAttributes();
    for (int i = 0; i < attributes.size(); i++) {
        DEREncodable extensionRequestObj = attributes.getObjectAt(i);
        if (!(extensionRequestObj instanceof DERSequence)) {
            continue;
        }
        DERSequence extensionRequest = (DERSequence) extensionRequestObj;
        if (extensionRequest.size() != 2) {
            continue;
        }
        DEREncodable idObj = extensionRequest.getObjectAt(0);
        DEREncodable contentObj = extensionRequest.getObjectAt(1);
        if (!(idObj instanceof ASN1ObjectIdentifier && contentObj instanceof DERSet)) {
            continue;
        }
        ASN1ObjectIdentifier id = (ASN1ObjectIdentifier) idObj;
        DERSet content = (DERSet) contentObj;
        if (!id.getId().equals("1.2.840.113549.1.9.14")) {
            continue;
        }
        if (content.size() < 1) {
            continue;
        }
        DEREncodable extensionsObj = content.getObjectAt(0);
        if (!(extensionsObj instanceof DERSequence)) {
            continue;
        }
        DERSequence extensions = (DERSequence) extensionsObj;

        for (int k = 0; k < extensions.size(); k++) {
            DEREncodable extensionObj = extensions.getObjectAt(k);
            if (!(extensionObj instanceof DERSequence)) {
                continue;
            }
            DERSequence extension = (DERSequence) extensionObj;
            if (extension.size() != 2) {
                continue;
            }
            DEREncodable extensionIdObj = extension.getObjectAt(0);
            DEREncodable extensionContentObj = extension.getObjectAt(1);
            if (!(extensionIdObj instanceof ASN1ObjectIdentifier)) {
                continue;
            }
            ASN1ObjectIdentifier extensionId = (ASN1ObjectIdentifier) extensionIdObj;
            if (extensionId.getId().equals("2.5.29.17")) {
                DEROctetString san = (DEROctetString) extensionContentObj;

                ASN1StreamParser sanParser = new ASN1StreamParser(san.parser().getOctetStream());
                DEREncodable namesObj = sanParser.readObject().getDERObject();
                if (namesObj instanceof DERSequence) {
                    DERSequence names = (DERSequence) namesObj;
                    for (int m = 0; m < names.size(); m++) {
                        DEREncodable nameObj = names.getObjectAt(m);
                        if (nameObj instanceof DERTaggedObject) {
                            DERTaggedObject name = (DERTaggedObject) nameObj;
                            switch (name.getTagNo()) {
                            case GeneralName.dNSName:
                                generalNames.add(new GeneralName(GeneralName.dNSName,
                                        DERIA5String.getInstance(name, false)));
                                break;
                            case GeneralName.iPAddress:
                                generalNames.add(new GeneralName(GeneralName.iPAddress,
                                        DEROctetString.getInstance(name, true)));
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
    if (generalNames.size() > 0) {
        return new GeneralNames(new DERSequence(generalNames.toArray(new ASN1Encodable[generalNames.size()])));
    }
    return null;
}

From source file:org.xdi.oxauth.cert.validation.CRLCertificateVerifier.java

License:MIT License

public String getCrlUri(X509Certificate certificate) throws IOException {
    ASN1Primitive obj;//from w ww  . j  a va2s.  c  o  m
    try {
        obj = getExtensionValue(certificate, Extension.cRLDistributionPoints.getId());
    } catch (IOException ex) {
        log.error("Failed to get CRL URL", ex);
        return null;
    }

    if (obj == null) {
        return null;
    }

    CRLDistPoint distPoint = CRLDistPoint.getInstance(obj);

    DistributionPoint[] distributionPoints = distPoint.getDistributionPoints();
    for (DistributionPoint distributionPoint : distributionPoints) {
        DistributionPointName distributionPointName = distributionPoint.getDistributionPoint();
        if (DistributionPointName.FULL_NAME != distributionPointName.getType()) {
            continue;
        }

        GeneralNames generalNames = (GeneralNames) distributionPointName.getName();
        GeneralName[] names = generalNames.getNames();
        for (GeneralName name : names) {
            if (name.getTagNo() != GeneralName.uniformResourceIdentifier) {
                continue;
            }

            DERIA5String derStr = DERIA5String.getInstance((ASN1TaggedObject) name.toASN1Primitive(), false);
            return derStr.getString();
        }
    }

    return null;
}

From source file:org.xdi.oxauth.cert.validation.OCSPCertificateVerifier.java

License:MIT License

@SuppressWarnings({ "deprecation", "resource" })
private String getOCSPUrl(X509Certificate certificate) throws IOException {
    ASN1Primitive obj;//from ww w  .  j a v a  2  s  .  c  om
    try {
        obj = getExtensionValue(certificate, Extension.authorityInfoAccess.getId());
    } catch (IOException ex) {
        log.error("Failed to get OCSP URL", ex);
        return null;
    }

    if (obj == null) {
        return null;
    }

    AuthorityInformationAccess authorityInformationAccess = AuthorityInformationAccess.getInstance(obj);

    AccessDescription[] accessDescriptions = authorityInformationAccess.getAccessDescriptions();
    for (AccessDescription accessDescription : accessDescriptions) {
        boolean correctAccessMethod = accessDescription.getAccessMethod()
                .equals(X509ObjectIdentifiers.ocspAccessMethod);
        if (!correctAccessMethod) {
            continue;
        }

        GeneralName name = accessDescription.getAccessLocation();
        if (name.getTagNo() != GeneralName.uniformResourceIdentifier) {
            continue;
        }

        DERIA5String derStr = DERIA5String.getInstance((ASN1TaggedObject) name.toASN1Primitive(), false);
        return derStr.getString();
    }

    return null;

}