Example usage for org.bouncycastle.asn1 BERTags OCTET_STRING

List of usage examples for org.bouncycastle.asn1 BERTags OCTET_STRING

Introduction

In this page you can find the example usage for org.bouncycastle.asn1 BERTags OCTET_STRING.

Prototype

int OCTET_STRING

To view the source code for org.bouncycastle.asn1 BERTags OCTET_STRING.

Click Source Link

Usage

From source file:de.tsenger.animamea.asn1.CertificateHolderAuthorizationTemplate.java

License:Open Source License

/** Constructor for Decoding CHAT from SEQUENCE
 * @param chatSeq/*from  w w  w.  jav a  2  s  .  c  om*/
 * @throws IOException
 */
public CertificateHolderAuthorizationTemplate(ASN1Sequence chatSeq) throws IOException {
    this.terminalType = (ASN1ObjectIdentifier) chatSeq.getObjectAt(0);

    DEROctetString oct = (DEROctetString) ((DERApplicationSpecific) chatSeq.getObjectAt(1))
            .getObject(BERTags.OCTET_STRING);
    this.auth = new DiscretionaryData(oct.getOctets());

}

From source file:de.tsenger.animamea.asn1.CVCertBody.java

License:Open Source License

public CVCertBody(DERApplicationSpecific derApp) throws IllegalArgumentException, IOException {
    if (derApp.getApplicationTag() != 0x4E)
        throw new IllegalArgumentException("contains no Certifcate Body with tag 0x7F4E");
    else/* ww w.  j a v  a 2s .c  o m*/
        cvcbody = derApp;

    ASN1Sequence bodySeq = (ASN1Sequence) cvcbody.getObject(BERTags.SEQUENCE);
    profileIdentifier = (ASN1Integer) ((DERApplicationSpecific) bodySeq.getObjectAt(0))
            .getObject(BERTags.INTEGER);
    authorityReference = (DERIA5String) ((DERApplicationSpecific) bodySeq.getObjectAt(1))
            .getObject(BERTags.IA5_STRING);

    ASN1Sequence pkSeq = (ASN1Sequence) ((DERApplicationSpecific) bodySeq.getObjectAt(2))
            .getObject(BERTags.SEQUENCE);
    ASN1ObjectIdentifier pkOid = (ASN1ObjectIdentifier) pkSeq.getObjectAt(0);
    if (pkOid.toString().startsWith("0.4.0.127.0.7.2.2.2.2")) {
        publicKey = new AmECPublicKey(pkSeq);
    } else if (pkOid.toString().startsWith("0.4.0.127.0.7.2.2.2.1")) {
        publicKey = new AmRSAPublicKey(pkSeq);
    }

    chr = (DERIA5String) ((DERApplicationSpecific) bodySeq.getObjectAt(3)).getObject(BERTags.IA5_STRING);

    ASN1Sequence chatSeq = (ASN1Sequence) ((DERApplicationSpecific) bodySeq.getObjectAt(4))
            .getObject(BERTags.SEQUENCE);
    chat = new CertificateHolderAuthorizationTemplate(chatSeq);

    effectiveDate = (DEROctetString) ((DERApplicationSpecific) bodySeq.getObjectAt(5))
            .getObject(BERTags.OCTET_STRING);

    expirationDate = (DEROctetString) ((DERApplicationSpecific) bodySeq.getObjectAt(6))
            .getObject(BERTags.OCTET_STRING);

    if (bodySeq.size() > 7) {
        extensions = (ASN1Sequence) ((DERApplicationSpecific) bodySeq.getObjectAt(7))
                .getObject(BERTags.SEQUENCE);
    }
}

From source file:de.tsenger.animamea.asn1.DynamicAuthenticationData.java

License:Open Source License

/**
 * Liefert den Inhalt des Tagged Objects mit dem Tag (0x80 & tagno) zurck.
 * @param tagno/* ww  w.  ja  v a2  s. c  om*/
 * @return
 */
public byte[] getDataObject(int tagno) {
    for (DERTaggedObject item : objects) {
        if (item.getTagNo() == tagno) {
            DEROctetString ostr = (DEROctetString) item.getObjectParser(BERTags.OCTET_STRING, false);
            return ostr.getOctets();
        }
    }
    return null;
}

From source file:org.jruby.ext.openssl.X509Extension.java

License:LGPL

@JRubyMethod
public RubyString value(final ThreadContext context) {
    if (this.value instanceof RubyString) { // return the same as set
        return (RubyString) this.value;
    }/* ww  w  .j  ava  2  s  . c  om*/

    final Ruby runtime = context.runtime;
    final String oid = getRealObjectID().getId();
    try {
        if (oid.equals("2.5.29.19")) { // basicConstraints
            ASN1Sequence seq2 = (ASN1Sequence) ASN1.readObject(getRealValueEncoded());
            final ByteList val = new ByteList(32);
            if (seq2.size() > 0) {
                val.append(CA_);
                ASN1Encodable obj0 = seq2.getObjectAt(0);
                final boolean bool;
                if (obj0 instanceof ASN1Boolean) {
                    bool = ((ASN1Boolean) obj0).isTrue();
                } else { // NOTE: keep it due BC <= 1.50
                    bool = ((DERBoolean) obj0).isTrue();
                }
                val.append(bool ? TRUE : FALSE);
            }
            if (seq2.size() > 1) {
                val.append(", pathlen:".getBytes());
                val.append(seq2.getObjectAt(1).toString().getBytes());
            }
            return runtime.newString(val);
        }
        if (oid.equals("2.5.29.15")) { // keyUsage
            final byte[] enc = getRealValueEncoded();
            byte b3 = 0;
            byte b2 = enc[2];
            if (enc.length > 3)
                b3 = enc[3];
            final ByteList val = new ByteList(64);
            byte[] sep = _;
            if ((b2 & (byte) 128) != 0) {
                val.append(sep);
                val.append(Decipher_Only);
                sep = SEP;
            }
            if ((b3 & (byte) 128) != 0) {
                val.append(sep);
                val.append(Digital_Signature);
                sep = SEP;
            }
            if ((b3 & (byte) 64) != 0) {
                val.append(sep);
                val.append(Non_Repudiation);
                sep = SEP;
            }
            if ((b3 & (byte) 32) != 0) {
                val.append(sep);
                val.append(Key_Encipherment);
                sep = SEP;
            }
            if ((b3 & (byte) 16) != 0) {
                val.append(sep);
                val.append(Data_Encipherment);
                sep = SEP;
            }
            if ((b3 & (byte) 8) != 0) {
                val.append(sep);
                val.append(Key_Agreement);
                sep = SEP;
            }
            if ((b3 & (byte) 4) != 0) {
                val.append(sep);
                val.append(Certificate_Sign);
                sep = SEP;
            }
            if ((b3 & (byte) 2) != 0) {
                val.append(sep);
                val.append(CRL_Sign);
                sep = SEP;
            }
            if ((b3 & (byte) 1) != 0) {
                val.append(sep);
                val.append(Encipher_Only); // sep = SEP;
            }
            return runtime.newString(val);
        }
        if (oid.equals("2.16.840.1.113730.1.1")) { // nsCertType
            final byte b0 = getRealValueEncoded()[0];
            final ByteList val = new ByteList(64);
            byte[] sep = _;
            if ((b0 & (byte) 128) != 0) {
                val.append(sep);
                val.append(SSL_Client);
                sep = SEP;
            }
            if ((b0 & (byte) 64) != 0) {
                val.append(sep);
                val.append(SSL_Server);
                sep = SEP;
            }
            if ((b0 & (byte) 32) != 0) {
                val.append(sep);
                val.append(SMIME);
                sep = SEP;
            }
            if ((b0 & (byte) 16) != 0) {
                val.append(sep);
                val.append(Object_Signing);
                sep = SEP;
            }
            if ((b0 & (byte) 8) != 0) {
                val.append(sep);
                val.append(Unused);
                sep = SEP;
            }
            if ((b0 & (byte) 4) != 0) {
                val.append(sep);
                val.append(SSL_CA);
                sep = SEP;
            }
            if ((b0 & (byte) 2) != 0) {
                val.append(sep);
                val.append(SMIME_CA);
                sep = SEP;
            }
            if ((b0 & (byte) 1) != 0) {
                val.append(sep);
                val.append(Object_Signing_CA);
            }
            return runtime.newString(val);
        }

        if (oid.equals("2.5.29.14")) { // subjectKeyIdentifier
            ASN1Encodable value = getRealValue();
            if (value instanceof ASN1OctetString) {
                byte[] octets = ((ASN1OctetString) value).getOctets();
                if (octets.length > 0 && octets[0] == BERTags.OCTET_STRING) {
                    value = ASN1.readObject(octets); // read nested octets
                }
            }
            return runtime.newString(hexBytes(keyidBytes(value.toASN1Primitive()), 0));
        }

        if (oid.equals("2.5.29.35")) { // authorityKeyIdentifier
            ASN1Encodable value = getRealValue();

            if (value instanceof ASN1OctetString) {
                value = ASN1.readObject(((ASN1OctetString) value).getOctets());
            }

            final ByteList val = new ByteList(72);
            val.append(keyid_);

            if (value instanceof ASN1Sequence) {
                final ASN1Sequence seq = (ASN1Sequence) value;
                final int size = seq.size();
                if (size == 0)
                    return RubyString.newEmptyString(runtime);

                ASN1Primitive keyid = seq.getObjectAt(0).toASN1Primitive();
                hexBytes(keyidBytes(keyid), val).append('\n');

                for (int i = 1; i < size; i++) {
                    final ASN1Encodable issuer = seq.getObjectAt(i);
                    // NOTE: blindly got OpenSSL tests passing (likely in-complete) :
                    if (issuer instanceof ASN1TaggedObject) {
                        ASN1Primitive obj = ((ASN1TaggedObject) issuer).getObject();
                        switch (((ASN1TaggedObject) issuer).getTagNo()) {
                        case 1:
                            if (obj instanceof ASN1TaggedObject) {
                                formatGeneralName(GeneralName.getInstance(obj), val, true);
                            }
                            break;
                        case 2: // serial
                            val.append(new byte[] { 's', 'e', 'r', 'i', 'a', 'l', ':' });
                            hexBytes(((ASN1OctetString) obj).getOctets(), val);
                            break;
                        }
                    }
                    val.append('\n');
                }
                return runtime.newString(val);
            }

            hexBytes(keyidBytes(value.toASN1Primitive()), val).append('\n');
            return runtime.newString(val);
        }

        if (oid.equals("2.5.29.21")) { // CRLReason
            final IRubyObject value = getValue(runtime);
            switch (RubyNumeric.fix2int(value)) {
            case 0:
                return runtime.newString(new ByteList(Unspecified));
            case 1:
                return RubyString.newString(runtime, "Key Compromise");
            case 2:
                return RubyString.newString(runtime, "CA Compromise");
            case 3:
                return RubyString.newString(runtime, "Affiliation Changed");
            case 4:
                return RubyString.newString(runtime, "Superseded");
            case 5:
                return RubyString.newString(runtime, "Cessation Of Operation");
            case 6:
                return RubyString.newString(runtime, "Certificate Hold");
            case 8:
                return RubyString.newString(runtime, "Remove From CRL");
            case 9:
                return RubyString.newString(runtime, "Privilege Withdrawn");
            default:
                return runtime.newString(new ByteList(Unspecified));
            }
        }

        if (oid.equals("2.5.29.17") || oid.equals("2.5.29.18")) { // subjectAltName || issuerAltName
            try {
                ASN1Encodable value = getRealValue();
                final ByteList val = new ByteList(64);
                if (value instanceof ASN1TaggedObject) {
                    formatGeneralName(GeneralName.getInstance(value), val, false);
                    return runtime.newString(val);
                }
                if (value instanceof GeneralName) {
                    formatGeneralName((GeneralName) value, val, false);
                    return runtime.newString(val);
                }
                if (value instanceof ASN1OctetString) {
                    // decoded octets will end up as an ASN1Sequence instance :
                    value = ASN1.readObject(((ASN1OctetString) value).getOctets());
                }
                if (value instanceof ASN1TaggedObject) { // DERTaggedObject (issuerAltName wrapping)
                    formatGeneralName(GeneralName.getInstance(value), val, false);
                    return runtime.newString(val);
                }

                final GeneralName[] names = GeneralNames.getInstance(value).getNames();
                for (int i = 0; i < names.length; i++) {
                    boolean other = formatGeneralName(names[i], val, false);
                    if (i < names.length - 1) {
                        if (other)
                            val.append(';');
                        else
                            val.append(',');
                    }
                }
                return runtime.newString(val);
            } catch (IllegalArgumentException e) {
                debugStackTrace(runtime, e);
                return rawValueAsString(context);
            }
        }

        if (oid.equals("2.5.29.37")) { // extendedKeyUsage
            final ByteList val = new ByteList(64);

            if (this.value instanceof ASN1Sequence) { // opt "short" path
                final ASN1Sequence seq = (ASN1Sequence) this.value;
                final int size = seq.size();
                for (int i = 0; i < size; i++) {
                    ASN1Encodable o = seq.getObjectAt(i);
                    String name = o.toString();
                    Integer nid = ASN1.oid2nid(runtime, new ASN1ObjectIdentifier(name));
                    if (nid != null)
                        name = ASN1.nid2ln(runtime, nid);
                    if (name == null)
                        name = o.toString();
                    val.append(ByteList.plain(name));
                    if (i < size - 1)
                        val.append(',').append(' ');
                }
                return runtime.newString(val);
            }

            final IRubyObject value = getValue(runtime);
            if (value instanceof RubyArray) {
                final RubyArray arr = (RubyArray) value;
                final int size = arr.size();
                for (int i = 0; i < size; i++) {
                    IRubyObject entry = arr.eltInternal(i);
                    if ("ObjectId".equals(entry.getMetaClass().getBaseName())) {
                        entry = entry.callMethod(context, "ln");
                    } else if (entry.respondsTo("value")) {
                        entry = entry.callMethod(context, "value");
                    }
                    val.append(entry.asString().getByteList());
                    if (i < size - 1)
                        val.append(',').append(' ');
                }
            }
            return runtime.newString(val);
        }

        return rawValueAsString(context);
    } catch (IOException e) {
        debugStackTrace(runtime, e);
        throw newExtensionError(runtime, e);
    }
}