Title: [1094] trunk/jopenssl: Implement RecipInfo.set, add exceptions for stuff that needs to be done, and so on.

Diff

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/ASN1Registry.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/ASN1Registry.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/ASN1Registry.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -50,7 +50,7 @@
     }
 
     public static String ln2oid(String ln) {
-        return SYM_TO_OID.get(ln).getId();
+        return SYM_TO_OID.get(ln.toLowerCase()).getId();
     }
 
     public static Integer obj2nid(DERObjectIdentifier oid) {
@@ -67,11 +67,11 @@
     }
 
     public static DERObjectIdentifier sym2oid(String name) {
-        return SYM_TO_OID.get(name);
+        return SYM_TO_OID.get(name.toLowerCase());
     }
 
     public static int sym2nid(String name) {
-        return OID_TO_NID.get(SYM_TO_OID.get(name));
+        return OID_TO_NID.get(SYM_TO_OID.get(name.toLowerCase()));
     }
 
     public static String nid2ln(int nid) {

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/BIO.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/BIO.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/BIO.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -189,7 +189,7 @@
      *
      */
     public void crlfCopy(byte[] in, int flags) throws IOException {
-        //        throw new UnsupportedOperationException();
+        throw new RuntimeException("TODO: implement");
     }
 
     /** c: BIO_gets
@@ -255,6 +255,20 @@
      *
      */
     public BIO findType(int type) {
+        int mask = type & 0xFF;
+        BIO bio = this;
+        do {
+            int mt = bio.getType();
+            if(mask == 0) {
+                if((mt & type) != 0) {
+                    return bio;
+                }
+            } else if(mt == type) {
+                return bio;
+            }
+            bio = bio.nextBio;
+        } while(bio != null);
+
         return null;
     }
 

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -155,12 +155,8 @@
 
             return p7;
         } catch(IOException e) {
-            // TODO: Handle correctly
-        } catch(PKCS7Exception e) {
-            // Equiv of err:
-            // TODO: Handle different exceptions correctly here
+            throw new PKCS7Exception(F_PKCS7_ENCRYPT, R_PKCS7_DATAFINAL_ERROR, e.toString());
         }
-        return null;
     }
 
     /** c: PKCS7_set_type

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -44,8 +44,14 @@
     public abstract int getType();
 
     public Object ctrl(int cmd, Object v, Object ignored) {
-        // TODO: Error
-        return Integer.valueOf(0);
+        switch(cmd) {
+        case PKCS7.OP_SET_DETACHED_SIGNATURE:
+            throw new PKCS7Exception(PKCS7.F_PKCS7_CTRL,PKCS7.R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE);
+        case PKCS7.OP_GET_DETACHED_SIGNATURE:
+            throw new PKCS7Exception(PKCS7.F_PKCS7_CTRL,PKCS7.R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE);
+        default:
+            throw new PKCS7Exception(PKCS7.F_PKCS7_CTRL,PKCS7.R_UNKNOWN_OPERATION);
+        }
     }
 
     public Envelope getEnveloped() {

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -76,8 +76,7 @@
             }
             break;
         default:
-            // TODO: ERR
-            ret = 0;
+            throw new RuntimeException("TODO: implement error handling");
         }
         return Integer.valueOf(ret);
     }

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Exception.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Exception.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Exception.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -41,7 +41,7 @@
     }
 
     public PKCS7Exception(int method, int reason, String errorData) {
-        super();
+        super("PKCS7[Method: " + method + ", Reason: " + reason + ", Data: " + errorData + "]");
         this.method = method;
         this.reason = reason;
         this.errorData = errorData;

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -27,13 +27,18 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.math.BigInteger;
 import java.security.cert.X509Certificate;
+import org.bouncycastle.asn1.ASN1InputStream;
 import org.bouncycastle.asn1.ASN1OctetString;
 import org.bouncycastle.asn1.DEREncodable;
 import org.bouncycastle.asn1.DERInteger;
 import org.bouncycastle.asn1.DERSequence;
 import org.bouncycastle.asn1.pkcs.IssuerAndSerialNumber;
 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
+import org.bouncycastle.asn1.x509.X509Name;
 
 /** PKCS7_RECIP_INFO
  *
@@ -53,9 +58,17 @@
     /** c: PKCS7_RECIP_INFO_set
      *
      */
-    public void set(X509Certificate cert) {
-        // TODO: implement
-        setCert(cert);
+    public void set(X509Certificate cert) { 
+        version = 0;
+        try {
+            X509Name issuer = X509Name.getInstance(new ASN1InputStream(new ByteArrayInputStream(cert.getIssuerX500Principal().getEncoded())).readObject());
+            BigInteger serial = cert.getSerialNumber();
+            issuerAndSerial = new IssuerAndSerialNumber(issuer, serial);
+            keyEncAlgor = new AlgorithmIdentifier(ASN1Registry.sym2oid(cert.getPublicKey().getAlgorithm()));
+            this.cert = cert;
+        } catch(IOException e) {
+            throw new PKCS7Exception(-1, -1);
+        }
     }
 
     @Override

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Signed.java (1093 => 1094)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Signed.java	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Signed.java	2008-08-08 10:54:26 UTC (rev 1094)
@@ -238,7 +238,7 @@
             signed.setCert(certificatesFromASN1Set(certificates));
         }
         if(crls != null) {
-            throw new RuntimeException("TODO implement CRL part");
+            throw new RuntimeException("TODO: implement CRL part");
         }
         signed.setSignerInfo(signerInfosFromASN1Set(signerInfos));
 
@@ -248,7 +248,6 @@
     private static Set<X509Certificate> certificatesFromASN1Set(DEREncodable content) {
         Set<X509Certificate> result = new HashSet<X509Certificate>();
         X509CertificateStructure struct = X509CertificateStructure.getInstance(content);
-        // TODO: This needs to check for the possibility of PKCS#6 ExtendedCertificate too
         try {
             result.add(new X509CertificateObject(struct));
         } catch(CertificateParsingException ex) {

Modified: trunk/jopenssl/test/test_java_pkcs7.rb (1093 => 1094)


--- trunk/jopenssl/test/test_java_pkcs7.rb	2008-08-08 10:54:21 UTC (rev 1093)
+++ trunk/jopenssl/test/test_java_pkcs7.rb	2008-08-08 10:54:26 UTC (rev 1094)
@@ -122,7 +122,6 @@
       p7 = PKCS7.new
       p7.type = ASN1Registry::NID_pkcs7_data
       
-      p7.detached = 1
       assert !p7.detached?
     end
     
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to