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;
}
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;
}
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;
}
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;
}
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();
}
Aggregations