Example usage for org.bouncycastle.asn1 DEROctetString DEROctetString

List of usage examples for org.bouncycastle.asn1 DEROctetString DEROctetString

Introduction

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

Prototype

public DEROctetString(ASN1Encodable obj) throws IOException 

Source Link

Document

Constructor from the encoding of an ASN.1 object.

Usage

From source file:chapter6.PKCS10ExtensionExample.java

public static PKCS10CertificationRequest generateRequest(KeyPair pair) throws Exception {
    // Create a SubjectAlternativeName extension value
    GeneralNames subjectAltName = new GeneralNames(new GeneralName(GeneralName.rfc822Name, "test@test.test"));

    // Create the extensions object and add it as an attribute
    Vector oids = new Vector();
    Vector values = new Vector();

    oids.add(X509Extensions.SubjectAlternativeName);
    values.add(new X509Extension(false, new DEROctetString(subjectAltName)));

    X509Extensions extensions = new X509Extensions(oids, values);

    Attribute attribute = new Attribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest,
            new DERSet(extensions));

    return new PKCS10CertificationRequest("SHA256withRSA", new X500Principal("CN=Requested Test Certificate"),
            pair.getPublic(), new DERSet(attribute), pair.getPrivate());
}

From source file:chapter7.OCSPClientExample.java

/**
 *
 * @param issuerCert/*from   w  ww . java 2  s . co m*/
 * @param serialNumber
 * @return
 * @throws OCSPException
 */
public static OCSPReq generateOCSPRequest(X509Certificate issuerCert, BigInteger serialNumber)
        throws OCSPException {
    //1.- Generate the id for the certificate we are looking for
    CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber);

    //2.- Basic request generation with nonce
    OCSPReqGenerator gen = new OCSPReqGenerator();

    gen.addRequest(id);

    //3.- Create details for nonce extension
    BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis());
    Vector oids = new Vector();
    Vector values = new Vector();

    oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce);
    values.add(new X509Extension(false, new DEROctetString(nonce.toByteArray())));

    gen.setRequestExtensions(new X509Extensions(oids, values));

    return gen.generate();
}

From source file:cljpdf.text.pdf.PdfPublicKeySecurityHandler.java

License:Mozilla Public License

private DERObject createDERForRecipient(byte[] in, X509Certificate cert)
        throws IOException, GeneralSecurityException {

    String s = "1.2.840.113549.3.2";

    AlgorithmParameterGenerator algorithmparametergenerator = AlgorithmParameterGenerator.getInstance(s);
    AlgorithmParameters algorithmparameters = algorithmparametergenerator.generateParameters();
    ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(
            algorithmparameters.getEncoded("ASN.1"));
    ASN1InputStream asn1inputstream = new ASN1InputStream(bytearrayinputstream);
    DERObject derobject = asn1inputstream.readObject();
    KeyGenerator keygenerator = KeyGenerator.getInstance(s);
    keygenerator.init(128);/*  w  w  w .  j  av  a2 s. c o m*/
    SecretKey secretkey = keygenerator.generateKey();
    Cipher cipher = Cipher.getInstance(s);
    cipher.init(1, secretkey, algorithmparameters);
    byte[] abyte1 = cipher.doFinal(in);
    DEROctetString deroctetstring = new DEROctetString(abyte1);
    KeyTransRecipientInfo keytransrecipientinfo = computeRecipientInfo(cert, secretkey.getEncoded());
    DERSet derset = new DERSet(new RecipientInfo(keytransrecipientinfo));
    AlgorithmIdentifier algorithmidentifier = new AlgorithmIdentifier(new DERObjectIdentifier(s), derobject);
    EncryptedContentInfo encryptedcontentinfo = new EncryptedContentInfo(PKCSObjectIdentifiers.data,
            algorithmidentifier, deroctetstring);
    EnvelopedData env = new EnvelopedData(null, derset, encryptedcontentinfo, null);
    ContentInfo contentinfo = new ContentInfo(PKCSObjectIdentifiers.envelopedData, env);
    return contentinfo.getDERObject();
}

From source file:cljpdf.text.pdf.PdfPublicKeySecurityHandler.java

License:Mozilla Public License

private KeyTransRecipientInfo computeRecipientInfo(X509Certificate x509certificate, byte[] abyte0)
        throws GeneralSecurityException, IOException {
    ASN1InputStream asn1inputstream = new ASN1InputStream(
            new ByteArrayInputStream(x509certificate.getTBSCertificate()));
    TBSCertificateStructure tbscertificatestructure = TBSCertificateStructure
            .getInstance(asn1inputstream.readObject());
    AlgorithmIdentifier algorithmidentifier = tbscertificatestructure.getSubjectPublicKeyInfo()
            .getAlgorithmId();//  w w w  . ja  va 2  s .co  m
    IssuerAndSerialNumber issuerandserialnumber = new IssuerAndSerialNumber(tbscertificatestructure.getIssuer(),
            tbscertificatestructure.getSerialNumber().getValue());
    Cipher cipher = Cipher.getInstance(algorithmidentifier.getObjectId().getId());
    cipher.init(1, x509certificate);
    DEROctetString deroctetstring = new DEROctetString(cipher.doFinal(abyte0));
    RecipientIdentifier recipId = new RecipientIdentifier(issuerandserialnumber);
    return new KeyTransRecipientInfo(recipId, algorithmidentifier, deroctetstring);
}

From source file:com.aaasec.sigserv.csspsupport.pdfbox.PdfBoxSigUtil.java

License:EUPL

/**
 * A method that updates the PDF PKCS7 object from the model object with a signature,
 * certificates and SignedAttributes obtains from an external source. The model contains
 * /*from   w ww. ja v a 2s  .com*/
 * <p>
 * The PKCS7 Signed data found in the model can be created using a different
 * private key and certificate chain. This method effectively replace the signature
 * value and certificate with the replacement data obtained from the model.
 * 
 * @param model A model for this signature replacement operation containing
 * necessary data for the process.
 * @return The bytes of an updated ODF signature PKCS7.
 */
public static byte[] updatePdfPKCS7(PdfSignModel model) {

    //New variables
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    DEROutputStream dout = new DEROutputStream(bout);
    ASN1EncodableVector npkcs7 = new ASN1EncodableVector();
    ASN1EncodableVector nsd = new ASN1EncodableVector();
    ASN1EncodableVector nsi = new ASN1EncodableVector();

    try {
        ASN1InputStream din = new ASN1InputStream(new ByteArrayInputStream(model.getSignedData().getEncoded()));

        //
        // Basic checks to make sure it's a PKCS#7 SignedData Object
        //
        ASN1Primitive pkcs7;

        try {
            pkcs7 = din.readObject();
        } catch (IOException e) {
            throw new IllegalArgumentException("Illegal PKCS7");
        }
        if (!(pkcs7 instanceof ASN1Sequence)) {
            throw new IllegalArgumentException("Illegal PKCS7");
        }
        ASN1Sequence signedData = (ASN1Sequence) pkcs7;
        ASN1ObjectIdentifier objId = (ASN1ObjectIdentifier) signedData.getObjectAt(0);
        if (!objId.getId().equals(PdfObjectIds.ID_PKCS7_SIGNED_DATA)) {
            throw new IllegalArgumentException("No SignedData");
        }

        //Add Signed data content type to new PKCS7
        npkcs7.add(objId);

        /**
         * SignedData ::= SEQUENCE { version CMSVersion, digestAlgorithms
         * DigestAlgorithmIdentifiers, encapContentInfo
         * EncapsulatedContentInfo, certificates [0] IMPLICIT CertificateSet
         * OPTIONAL, crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
         * signerInfos SignerInfos }
         */
        //Get the SignedData sequence
        ASN1Sequence signedDataSeq = (ASN1Sequence) ((ASN1TaggedObject) signedData.getObjectAt(1)).getObject();
        int sdObjCount = 0;

        // the version
        nsd.add(signedDataSeq.getObjectAt(sdObjCount++));

        // the digestAlgorithms
        nsd.add(signedDataSeq.getObjectAt(sdObjCount++));

        // the possible ecapsulated content info
        nsd.add(signedDataSeq.getObjectAt(sdObjCount++));
        // the certificates. The certs are taken from the input parameters to the method            
        //ASN1EncodableVector newCerts = new ASN1EncodableVector();
        Certificate[] chain = model.getChain();
        ASN1Encodable[] newCerts = new ASN1Encodable[chain.length];
        //for (Certificate nCert : model.getCertChain()) {
        for (int i = 0; i < chain.length; i++) {
            ASN1InputStream cin = new ASN1InputStream(new ByteArrayInputStream(chain[i].getEncoded()));
            newCerts[i] = cin.readObject();

        }
        nsd.add(new DERTaggedObject(false, 0, new DERSet(newCerts)));

        //Step counter past tagged objects
        while (signedDataSeq.getObjectAt(sdObjCount) instanceof ASN1TaggedObject) {
            ++sdObjCount;
        }

        //SignerInfos is the next object in the sequence of Signed Data (first untagged after certs)
        ASN1Set signerInfos = (ASN1Set) signedDataSeq.getObjectAt(sdObjCount);
        if (signerInfos.size() != 1) {
            throw new IllegalArgumentException("Unsupported multiple signer infos");
        }
        ASN1Sequence signerInfo = (ASN1Sequence) signerInfos.getObjectAt(0);
        int siCounter = 0;

        // SignerInfo sequence
        //
        // 0 - CMSVersion 
        // 1 - SignerIdentifier (CHOICE IssuerAndSerialNumber SEQUENCE) 
        // 2 - DigestAglorithmIdentifier
        // 3 - [0] IMPLICIT SignedAttributes SET 
        // 3 - Signature AlgorithmIdentifier 
        // 4 - Signature Value OCTET STRING 
        // 5 - [1] IMPLICIT UnsignedAttributes
        //
        //version
        nsi.add(signerInfo.getObjectAt(siCounter++));

        // signing certificate issuer and serial number
        Certificate sigCert = chain[0];
        ASN1EncodableVector issuerAndSerial = getIssuerAndSerial(sigCert);
        nsi.add(new DERSequence(issuerAndSerial));
        siCounter++;

        //Digest AlgorithmIdentifier
        nsi.add(signerInfo.getObjectAt(siCounter++));

        //Add signed attributes from signature service
        ASN1InputStream sigAttrIs = new ASN1InputStream(model.getCmsSigAttrBytes());
        nsi.add(new DERTaggedObject(false, 0, sigAttrIs.readObject()));

        //Step counter past tagged objects (because signedAttrs i optional in the input data)
        while (signerInfo.getObjectAt(siCounter) instanceof ASN1TaggedObject) {
            siCounter++;
        }

        //Signature Alg identifier
        nsi.add(signerInfo.getObjectAt(siCounter++));

        //Add new signature value from signing service
        nsi.add(new DEROctetString(model.getSignatureBytes()));
        siCounter++;

        //Add unsigned Attributes if present
        if (signerInfo.size() > siCounter && signerInfo.getObjectAt(siCounter) instanceof ASN1TaggedObject) {
            nsi.add(signerInfo.getObjectAt(siCounter));
        }

        /*
         * Final Assembly
         */
        // Add the SignerInfo sequence to the SignerInfos set and add this to the SignedData sequence
        nsd.add(new DERSet(new DERSequence(nsi)));
        // Add the SignedData sequence as a eplicitly tagged object to the pkcs7 object
        npkcs7.add(new DERTaggedObject(true, 0, new DERSequence(nsd)));

        dout.writeObject((new DERSequence(npkcs7)));
        byte[] pkcs7Bytes = bout.toByteArray();
        dout.close();
        bout.close();

        return pkcs7Bytes;

    } catch (Exception e) {
        throw new IllegalArgumentException(e.toString());
    }
}

From source file:com.android.verity.BootSignature.java

License:Apache License

public void setSignature(byte[] sig) {
    signature = new DEROctetString(sig);
}

From source file:com.aqnote.shared.cryptology.cert.gen.CertGenerator.java

License:Open Source License

public X509Certificate createClass3EndCert(long sno, X500Name sdn, Map<String, String> exts, PublicKey pubKey,
        KeyPair pKeyPair) throws Exception {
    PublicKey pPubKey = pKeyPair.getPublic();
    PrivateKey pPrivKey = pKeyPair.getPrivate();

    X500Name idn = X500NameUtil.createClass3CaPrincipal();
    BigInteger _sno = BigInteger.valueOf(sno <= 0 ? System.currentTimeMillis() : sno);
    Date nb = new Date(System.currentTimeMillis() - HALF_DAY);
    Date na = new Date(nb.getTime() + FIVE_YEAR);

    X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(idn, _sno, nb, na, sdn, pubKey);

    addSubjectKID(certBuilder, pubKey);/*from   ww w . j  a  va2  s  . c  o m*/
    addAuthorityKID(certBuilder, pPubKey);
    certBuilder.addExtension(Extension.extendedKeyUsage, false, new ExtendedKeyUsage(MOST_EKU));
    certBuilder.addExtension(Extension.keyUsage, false, new KeyUsage(END_KEY_USAGE));
    if (exts != null) {
        Set<String> key = exts.keySet();
        for (Iterator<String> it = key.iterator(); it.hasNext();) {
            String oid = it.next();
            String value = exts.get(oid);
            if (!StringUtils.isBlank(value)) {
                certBuilder.addExtension(new ASN1ObjectIdentifier(oid), false,
                        new DEROctetString(value.getBytes()));
            }
        }
    }

    X509Certificate certificate = signCert(certBuilder, pPrivKey);
    certificate.checkValidity(new Date());
    certificate.verify(pPubKey);

    setPKCS9Info(certificate);

    return certificate;
}

From source file:com.aqnote.shared.encrypt.cert.gen.BCCertGenerator.java

License:Open Source License

public X509Certificate createClass3EndCert(long sno, X500Name sdn, Map<String, String> exts, KeyPair keyPair,
        KeyPair pKeyPair) throws Exception {
    PublicKey pPubKey = pKeyPair.getPublic();
    PrivateKey pPrivKey = pKeyPair.getPrivate();

    X500Name idn = X500NameUtil.createClass3RootPrincipal();
    BigInteger _sno = BigInteger.valueOf(sno <= 0 ? System.currentTimeMillis() : sno);
    Date nb = new Date(System.currentTimeMillis() - HALF_DAY);
    Date na = new Date(nb.getTime() + FIVE_YEAR);
    PublicKey pubKey = keyPair.getPublic();

    X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(idn, _sno, nb, na, sdn, pubKey);

    addSubjectKID(certBuilder, pubKey);/*from  ww  w. jav  a 2s  .  co  m*/
    addAuthorityKID(certBuilder, pPubKey);
    certBuilder.addExtension(Extension.extendedKeyUsage, false, new ExtendedKeyUsage(MOST_EKU));
    certBuilder.addExtension(Extension.keyUsage, false, new KeyUsage(END_KEY_USAGE));
    if (exts != null) {
        Set<String> key = exts.keySet();
        for (Iterator<String> it = key.iterator(); it.hasNext();) {
            String oid = it.next();
            String value = exts.get(oid);
            if (!StringUtils.isBlank(value)) {
                certBuilder.addExtension(new ASN1ObjectIdentifier(oid), false,
                        new DEROctetString(value.getBytes()));
            }
        }
    }

    X509Certificate certificate = signCert(certBuilder, pPrivKey);
    certificate.checkValidity(new Date());
    certificate.verify(pPubKey);

    setPKCS9Info(certificate);

    return certificate;
}

From source file:com.github.horrorho.inflatabledonkey.data.der.BackupEscrow.java

License:Open Source License

@Override
public ASN1Primitive toASN1Primitive() {
    ASN1EncodableVector vector = DER.vector(new DEROctetString(wrappedKey()), new DEROctetString(data()),
            new DEROctetString(x()), new ASN1Integer(y), new DEROctetString(masterKeyPublic()));

    DERSequence sequence = new DERSequence(vector);
    return DER.toApplicationSpecific(APPLICATION_TAG, sequence);
}

From source file:com.github.horrorho.inflatabledonkey.data.der.EncryptedKey.java

License:Open Source License

@Override
public ASN1Primitive toASN1Primitive() {
    ASN1Integer asn1IntegerFlags = flags.map(ASN1Integer::new).orElse(null);

    ASN1EncodableVector vector = DER.vector(masterKey, new DEROctetString(wrappedKey()), asn1IntegerFlags);

    return new DERSequence(vector);
}