Title: [1068] trunk/jopenssl: More parts of smime reading implemented
Revision
1068
Author
olabini
Date
2008-07-21 14:43:02 -0400 (Mon, 21 Jul 2008)

Log Message

More parts of smime reading implemented

Modified Paths


Diff

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Mime.java (1067 => 1068)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Mime.java	2008-07-21 18:42:59 UTC (rev 1067)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Mime.java	2008-07-21 18:43:02 UTC (rev 1068)
@@ -43,4 +43,9 @@
      *
      */
     MimeHeader findHeader(List<MimeHeader> headers, String key); 
+
+    /* c: mime_param_find
+     *
+     */
+    MimeParam findParam(MimeHeader header, String key); 
 }// Mime

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/MimeHeader.java (1067 => 1068)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/MimeHeader.java	2008-07-21 18:42:59 UTC (rev 1067)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/MimeHeader.java	2008-07-21 18:43:02 UTC (rev 1068)
@@ -27,6 +27,9 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /** MIME_HEADER
  *
  * @author <a href="" PROTECTED]">Ola Bini</a>
@@ -35,6 +38,11 @@
     private String name;
     private String value;
 
+    /**
+     * Describe params here.
+     */
+    private List<MimeParam> params = new ArrayList<MimeParam>();
+
     public MimeHeader(String name, String value) {
         this.name = name;
         this.value = value;
@@ -43,4 +51,22 @@
     public String getValue() {
         return this.value;
     }
+
+    /**
+     * Get the <code>Params</code> value.
+     *
+     * @return a <code>List<MimeParam></code> value
+     */
+    public final List<MimeParam> getParams() {
+        return params;
+    }
+
+    /**
+     * Set the <code>Params</code> value.
+     *
+     * @param newParams The new Params value.
+     */
+    public final void setParams(final List<MimeParam> newParams) {
+        this.params = newParams;
+    }
 }// MimeHeader

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SMIME.java (1067 => 1068)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SMIME.java	2008-07-21 18:42:59 UTC (rev 1067)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SMIME.java	2008-07-21 18:43:02 UTC (rev 1068)
@@ -27,6 +27,7 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import java.util.Arrays;
 import java.util.List;
 
 /** SMIME methods for PKCS7
@@ -43,10 +44,17 @@
     /* c: B64_read_PKCS7
      *
      */
-    public PKCS7 readBase64PKCS7(BIO bio) {
+    public PKCS7 readPKCS7Base64(BIO bio) {
         return null;
     }
 
+    /* c: static multi_split
+     *
+     */
+    public List<BIO> multiSplit(BIO bio, String boundary) {
+        return Arrays.<BIO>asList(null, null);
+    }
+
     /* c: SMIME_read_PKCS7
      *
      */
@@ -65,32 +73,30 @@
             throw new PKCS7Exception(PKCS7.F_SMIME_READ_PKCS7, PKCS7.R_NO_CONTENT_TYPE);
         }
 
+        if("multipart/signed".equals(hdr.getValue())) {
+            MimeParam prm = mime.findParam(hdr, "boundary");
+            if(prm == null || prm.getParamValue() == null) {
+                throw new PKCS7Exception(PKCS7.F_SMIME_READ_PKCS7, PKCS7.R_NO_MULTIPART_BOUNDARY);
+            }
 
+            List<BIO> parts = multiSplit(bio, prm.getParamValue());
+            if(parts == null || parts.size() != 2) {
+                throw new PKCS7Exception(PKCS7.F_SMIME_READ_PKCS7, PKCS7.R_NO_MULTIPART_BODY_FAILURE);
+            }
+
+
+            return null;
+        }
         
         if(!"application/x-pkcs7-mime".equals(hdr.getValue()) &&
            !"application/pkcs7-mime".equals(hdr.getValue())) {
             throw new PKCS7Exception(PKCS7.F_SMIME_READ_PKCS7, PKCS7.R_INVALID_MIME_TYPE, "type: " + hdr.getValue());
         }
 
-        return readBase64PKCS7(bio);
+        return readPKCS7Base64(bio);
 
 // 	/* Handle multipart/signed */
 
-// 	if(!strcmp(hdr->value, "multipart/signed")) {
-// 		/* Split into two parts */
-// 		prm = mime_param_find(hdr, "boundary");
-// 		if(!prm || !prm->param_value) {
-// 			sk_MIME_HEADER_pop_free(headers, mime_hdr_free);
-// 			PKCS7err(PKCS7_F_SMIME_READ_PKCS7, PKCS7_R_NO_MULTIPART_BOUNDARY);
-// 			return NULL;
-// 		}
-// 		ret = multi_split(bio, prm->param_value, &parts);
-// 		sk_MIME_HEADER_pop_free(headers, mime_hdr_free);
-// 		if(!ret || (sk_BIO_num(parts) != 2) ) {
-// 			PKCS7err(PKCS7_F_SMIME_READ_PKCS7, PKCS7_R_NO_MULTIPART_BODY_FAILURE);
-// 			sk_BIO_pop_free(parts, BIO_vfree);
-// 			return NULL;
-// 		}
 
 // 		/* Parse the signature piece */
 // 		p7in = sk_BIO_value(parts, 1);

Modified: trunk/jopenssl/test/test_java_pkcs7.rb (1067 => 1068)


--- trunk/jopenssl/test/test_java_pkcs7.rb	2008-07-21 18:42:59 UTC (rev 1067)
+++ trunk/jopenssl/test/test_java_pkcs7.rb	2008-07-21 18:43:02 UTC (rev 1068)
@@ -27,6 +27,7 @@
     SMIME = org.jruby.ext.openssl.impl.SMIME unless defined?(SMIME)
     Mime = org.jruby.ext.openssl.impl.Mime unless defined?(Mime)
     MimeHeader = org.jruby.ext.openssl.impl.MimeHeader unless defined?(MimeHeader)
+    MimeParam = org.jruby.ext.openssl.impl.MimeParam unless defined?(MimeParam)
     BIO = org.jruby.ext.openssl.impl.BIO unless defined?(BIO)
     PKCS7Exception = org.jruby.ext.openssl.impl.PKCS7Exception unless defined?(PKCS7Exception)
     
@@ -172,6 +173,46 @@
         end
       end
       
+      def test_read_pkcs7_with_multipart_should_fail_if_no_boundary_found
+        bio = BIO.new
+        mime = Mime.new
+
+        headers = ArrayList.new
+        hdr = MimeHeader.new("content-type", "multipart/signed")
+        mime.expects(:parseHeaders).with(bio).returns(headers)
+        mime.expects(:findHeader).with(headers, "content-type").returns(hdr)
+
+        mime.expects(:findParam).with(hdr, "boundary").returns(nil)
+         
+        begin
+          SMIME.new(mime).readPKCS7(bio, nil)
+          assert false
+        rescue PKCS7Exception => e
+          assert_equal PKCS7::F_SMIME_READ_PKCS7, e.cause.get_method
+          assert_equal PKCS7::R_NO_MULTIPART_BOUNDARY, e.cause.get_reason
+        end
+      end
+      
+      def test_read_pkcs7_with_multipart_should_fail_if_null_boundary_value
+        bio = BIO.new
+        mime = Mime.new
+
+        headers = ArrayList.new
+        hdr = MimeHeader.new("content-type", "multipart/signed")
+        mime.expects(:parseHeaders).with(bio).returns(headers)
+        mime.expects(:findHeader).with(headers, "content-type").returns(hdr)
+
+        mime.expects(:findParam).with(hdr, "boundary").returns(MimeParam.new("boundary", nil))
+         
+        begin
+          SMIME.new(mime).readPKCS7(bio, nil)
+          assert false
+        rescue PKCS7Exception => e
+          assert_equal PKCS7::F_SMIME_READ_PKCS7, e.cause.get_method
+          assert_equal PKCS7::R_NO_MULTIPART_BOUNDARY, e.cause.get_reason
+        end
+      end
+
       def test_read_pkcs7_happy_path_without_multipart
         bio = BIO.new
         mime = Mime.new
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to