Search in sources :

Example 1 with PKCS7Exception

use of org.jruby.ext.openssl.impl.PKCS7Exception in project jruby-openssl by jruby.

the class PKCS7 method set_type.

@JRubyMethod(name = "type=")
public IRubyObject set_type(IRubyObject type) {
    // likely a Symbol
    final String typeStr = type.toString();
    int typeId = ASN1Registry.NID_undef;
    if ("signed".equals(typeStr)) {
        typeId = ASN1Registry.NID_pkcs7_signed;
    } else if ("data".equals(typeStr)) {
        typeId = ASN1Registry.NID_pkcs7_data;
    } else if ("signedAndEnveloped".equals(typeStr)) {
        typeId = ASN1Registry.NID_pkcs7_signedAndEnveloped;
    } else if ("enveloped".equals(typeStr)) {
        typeId = ASN1Registry.NID_pkcs7_enveloped;
    } else if ("encrypted".equals(typeStr)) {
        typeId = ASN1Registry.NID_pkcs7_encrypted;
    }
    try {
        p7.setType(typeId);
    } catch (PKCS7Exception pkcs7e) {
        throw newPKCS7Error(getRuntime(), pkcs7e);
    }
    return type;
}
Also used : RubyString(org.jruby.RubyString) PKCS7Exception(org.jruby.ext.openssl.impl.PKCS7Exception) NotVerifiedPKCS7Exception(org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception) JRubyMethod(org.jruby.anno.JRubyMethod)

Example 2 with PKCS7Exception

use of org.jruby.ext.openssl.impl.PKCS7Exception in project jruby-openssl by jruby.

the class PKCS7 method add_data.

@JRubyMethod(name = { "add_data", "data=" })
public IRubyObject add_data(IRubyObject obj) {
    if (p7.isSigned()) {
        try {
            p7.contentNew(ASN1Registry.NID_pkcs7_data);
        } catch (PKCS7Exception pkcs7e) {
            throw newPKCS7Error(getRuntime(), pkcs7e);
        }
    }
    BIO in = obj2bio(obj);
    BIO out = null;
    try {
        out = p7.dataInit(null);
    } catch (PKCS7Exception pkcs7e) {
        throw newPKCS7Error(getRuntime(), pkcs7e);
    }
    byte[] buf = new byte[4096];
    for (; ; ) {
        try {
            int i = in.read(buf, 0, buf.length);
            if (i <= 0) {
                break;
            }
            if (out != null) {
                out.write(buf, 0, i);
            }
        } catch (IOException e) {
            throw getRuntime().newIOErrorFromException(e);
        }
    }
    try {
        p7.dataFinal(out);
    } catch (PKCS7Exception pkcs7e) {
        throw newPKCS7Error(getRuntime(), pkcs7e);
    }
    setData(getRuntime().getNil());
    return obj;
}
Also used : MemBIO(org.jruby.ext.openssl.impl.MemBIO) BIO(org.jruby.ext.openssl.impl.BIO) IOException(java.io.IOException) PKCS7Exception(org.jruby.ext.openssl.impl.PKCS7Exception) NotVerifiedPKCS7Exception(org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception) JRubyMethod(org.jruby.anno.JRubyMethod)

Example 3 with PKCS7Exception

use of org.jruby.ext.openssl.impl.PKCS7Exception in project jruby-openssl by jruby.

the class PKCS7 method sign.

@JRubyMethod(meta = true, rest = true)
public static IRubyObject sign(IRubyObject self, IRubyObject[] args) {
    final Ruby runtime = self.getRuntime();
    final X509Cert cert;
    final PKey key;
    final IRubyObject data;
    IRubyObject certs = runtime.getNil();
    IRubyObject flags = runtime.getNil();
    switch(Arity.checkArgumentCount(runtime, args, 3, 5)) {
        case 5:
            flags = args[4];
        case 4:
            certs = args[3];
        default:
            cert = (X509Cert) args[0];
            key = (PKey) args[1];
            data = args[2];
    }
    X509AuxCertificate auxCert = cert.getAuxCert();
    PrivateKey privKey = key.getPrivateKey();
    final int flg = flags.isNil() ? 0 : RubyNumeric.fix2int(flags);
    final BIO dataBIO = obj2bio(data);
    List<X509AuxCertificate> auxCerts = certs.isNil() ? null : getAuxCerts(certs);
    org.jruby.ext.openssl.impl.PKCS7 pkcs7Impl;
    try {
        pkcs7Impl = org.jruby.ext.openssl.impl.PKCS7.sign(auxCert, privKey, auxCerts, dataBIO, flg);
    } catch (PKCS7Exception e) {
        throw newPKCS7Error(runtime, e);
    }
    final PKCS7 pkcs7 = wrap(runtime, pkcs7Impl);
    pkcs7.setData(data);
    return pkcs7;
}
Also used : ThreadContext(org.jruby.runtime.ThreadContext) PrivateKey(java.security.PrivateKey) MemBIO(org.jruby.ext.openssl.impl.MemBIO) BIO(org.jruby.ext.openssl.impl.BIO) IRubyObject(org.jruby.runtime.builtin.IRubyObject) X509AuxCertificate(org.jruby.ext.openssl.x509store.X509AuxCertificate) PKCS7Exception(org.jruby.ext.openssl.impl.PKCS7Exception) NotVerifiedPKCS7Exception(org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception) Ruby(org.jruby.Ruby) JRubyMethod(org.jruby.anno.JRubyMethod)

Example 4 with PKCS7Exception

use of org.jruby.ext.openssl.impl.PKCS7Exception in project jruby-openssl by jruby.

the class PKCS7 method encrypt.

/**
 * ossl_pkcs7_s_encrypt
 */
@JRubyMethod(meta = true, rest = true)
public static IRubyObject encrypt(IRubyObject self, IRubyObject[] args) {
    final Ruby runtime = self.getRuntime();
    IRubyObject certs, data, cipher = runtime.getNil(), flags = runtime.getNil();
    switch(Arity.checkArgumentCount(self.getRuntime(), args, 2, 4)) {
        case 4:
            flags = args[3];
        case 3:
            cipher = args[2];
    }
    data = args[1];
    certs = args[0];
    CipherSpec cipherSpec = null;
    if (cipher.isNil()) {
        try {
            javax.crypto.Cipher c = SecurityHelper.getCipher("RC2/CBC/PKCS5Padding");
            cipherSpec = new CipherSpec(c, Cipher.Algorithm.javaToOssl("RC2/CBC/PKCS5Padding", 40), 40);
        } catch (GeneralSecurityException e) {
            throw newPKCS7Error(runtime, e);
        }
    } else {
        final Cipher c = (Cipher) cipher;
        cipherSpec = new CipherSpec(c.getCipherInstance(), c.getName(), c.getGenerateKeyLength() * 8);
    }
    final int flg = flags.isNil() ? 0 : RubyNumeric.fix2int(flags);
    final List<X509AuxCertificate> auxCerts = getAuxCerts(certs);
    final byte[] dataBytes = data.asString().getBytes();
    org.jruby.ext.openssl.impl.PKCS7 pkcs7Impl;
    try {
        pkcs7Impl = org.jruby.ext.openssl.impl.PKCS7.encrypt(auxCerts, dataBytes, cipherSpec, flg);
    } catch (PKCS7Exception pkcs7e) {
        throw newPKCS7Error(self.getRuntime(), pkcs7e);
    }
    final PKCS7 pkcs7 = wrap(runtime, pkcs7Impl);
    pkcs7.setData(data);
    return pkcs7;
}
Also used : ThreadContext(org.jruby.runtime.ThreadContext) GeneralSecurityException(java.security.GeneralSecurityException) IRubyObject(org.jruby.runtime.builtin.IRubyObject) CipherSpec(org.jruby.ext.openssl.impl.CipherSpec) X509AuxCertificate(org.jruby.ext.openssl.x509store.X509AuxCertificate) PKCS7Exception(org.jruby.ext.openssl.impl.PKCS7Exception) NotVerifiedPKCS7Exception(org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception) Ruby(org.jruby.Ruby) JRubyMethod(org.jruby.anno.JRubyMethod)

Example 5 with PKCS7Exception

use of org.jruby.ext.openssl.impl.PKCS7Exception in project jruby-openssl by jruby.

the class PKCS7 method verify.

@JRubyMethod(rest = true)
public IRubyObject verify(IRubyObject[] args) {
    final Ruby runtime = getRuntime();
    IRubyObject certs;
    X509Store store;
    IRubyObject indata = runtime.getNil();
    IRubyObject vflags = runtime.getNil();
    switch(Arity.checkArgumentCount(runtime, args, 2, 4)) {
        case 4:
            vflags = args[3];
        case 3:
            indata = args[2];
        default:
            store = (X509Store) args[1];
            certs = args[0];
    }
    final int flg = vflags.isNil() ? 0 : RubyNumeric.fix2int(vflags);
    if (indata.isNil())
        indata = getData();
    final BIO in = indata.isNil() ? null : obj2bio(indata);
    List<X509AuxCertificate> x509s = certs.isNil() ? null : getAuxCerts(certs);
    final Store storeStr = store.getStore();
    final BIO out = BIO.mem();
    boolean result = false;
    try {
        p7.verify(x509s, storeStr, in, out, flg);
        result = true;
    } catch (NotVerifiedPKCS7Exception e) {
    // result = false;
    } catch (PKCS7Exception pkcs7e) {
        if (isDebug(runtime)) {
            // runtime.getOut().println(pkcs7e);
            pkcs7e.printStackTrace(runtime.getOut());
        }
    // result = false;
    }
    IRubyObject data = membio2str(getRuntime(), out);
    setData(data);
    return result ? runtime.getTrue() : runtime.getFalse();
}
Also used : MemBIO(org.jruby.ext.openssl.impl.MemBIO) BIO(org.jruby.ext.openssl.impl.BIO) Store(org.jruby.ext.openssl.x509store.Store) NotVerifiedPKCS7Exception(org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception) IRubyObject(org.jruby.runtime.builtin.IRubyObject) X509AuxCertificate(org.jruby.ext.openssl.x509store.X509AuxCertificate) PKCS7Exception(org.jruby.ext.openssl.impl.PKCS7Exception) NotVerifiedPKCS7Exception(org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception) Ruby(org.jruby.Ruby) JRubyMethod(org.jruby.anno.JRubyMethod)

Aggregations

JRubyMethod (org.jruby.anno.JRubyMethod)10 NotVerifiedPKCS7Exception (org.jruby.ext.openssl.impl.NotVerifiedPKCS7Exception)10 PKCS7Exception (org.jruby.ext.openssl.impl.PKCS7Exception)10 IRubyObject (org.jruby.runtime.builtin.IRubyObject)7 BIO (org.jruby.ext.openssl.impl.BIO)6 MemBIO (org.jruby.ext.openssl.impl.MemBIO)6 Ruby (org.jruby.Ruby)5 IOException (java.io.IOException)4 X509AuxCertificate (org.jruby.ext.openssl.x509store.X509AuxCertificate)4 ThreadContext (org.jruby.runtime.ThreadContext)4 PrivateKey (java.security.PrivateKey)2 RubyString (org.jruby.RubyString)2 SMIME (org.jruby.ext.openssl.impl.SMIME)2 GeneralSecurityException (java.security.GeneralSecurityException)1 ASN1Encodable (org.bouncycastle.asn1.ASN1Encodable)1 CipherSpec (org.jruby.ext.openssl.impl.CipherSpec)1 SignerInfoWithPkey (org.jruby.ext.openssl.impl.SignerInfoWithPkey)1 Store (org.jruby.ext.openssl.x509store.Store)1