Title: [1054] trunk/jopenssl: Added support for adding recipient info and the needed data structures for this .

Diff

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Envelope.java (1053 => 1054)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Envelope.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Envelope.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -27,6 +27,9 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /** PKCS7_ENVELOPE
  *
  * @author <a href="" PROTECTED]">Ola Bini</a>
@@ -40,6 +43,11 @@
     private EncContent encData = new EncContent();
 
     /**
+     * Describe recipientInfo here.
+     */
+    private List<RecipInfo> recipientInfo = new ArrayList<RecipInfo>();
+
+    /**
      * Get the <code>Version</code> value.
      *
      * @return an <code>int</code> value
@@ -74,4 +82,22 @@
     public final void setEncData(final EncContent newEncData) {
         this.encData = newEncData;
     }
+
+    /**
+     * Get the <code>RecipientInfo</code> value.
+     *
+     * @return a <code>List<RecipInfo></code> value
+     */
+    public final List<RecipInfo> getRecipientInfo() {
+        return recipientInfo;
+    }
+
+    /**
+     * Set the <code>RecipientInfo</code> value.
+     *
+     * @param newRecipientInfo The new RecipientInfo value.
+     */
+    public final void setRecipientInfo(final List<RecipInfo> newRecipientInfo) {
+        this.recipientInfo = newRecipientInfo;
+    }
 }// Envelope

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -130,47 +130,25 @@
      */
     public void setCipher(Cipher cipher) {
         this.data.setCipher(cipher);
-
-
-// 	int i;
-// 	ASN1_OBJECT *objtmp;
-// 	PKCS7_ENC_CONTENT *ec;
-
-// 	i=OBJ_obj2nid(p7->type);
-// 	switch (i)
-// 		{
-//         case NID_pkcs7_signedAndEnveloped:
-//             ec=p7->d.signed_and_enveloped->enc_data;
-//             break;
-//         case NID_pkcs7_enveloped:
-//             ec=p7->d.enveloped->enc_data;
-//             break;
-//         default:
-//             PKCS7err(PKCS7_F_PKCS7_SET_CIPHER,PKCS7_R_WRONG_CONTENT_TYPE);
-//             return(0);
-// 		}
-
-// 	/* Check cipher OID exists and has data in it*/
-// 	i = EVP_CIPHER_type(cipher);
-// 	if(i == NID_undef) {
-// 		PKCS7err(PKCS7_F_PKCS7_SET_CIPHER,PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER);
-// 		return(0);
-// 	}
-// 	objtmp = OBJ_nid2obj(i);
-
-// 	ec->cipher = cipher;
-// 	return 1;
-
-        // TODO: implement
     }
 
     /** c: PKCS7_add_recipient
      *
      */
-    public void addRecipient(X509Certificate recip) {
-        // TODO: implement
+    public RecipInfo addRecipient(X509Certificate recip) {
+        RecipInfo ri = new RecipInfo();
+        ri.set(recip);
+        addRecipientInfo(ri);
+        return ri;
     }
 
+    /** c: PKCS7_add_recipient_info
+     *
+     */
+    public void addRecipientInfo(RecipInfo ri) {
+        this.data.addRecipientInfo(ri);
+    }
+
     /** c: PKCS7_dataInit
      *
      */

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -103,4 +103,8 @@
     public void setCipher(Cipher cipher) {
         throw new PKCS7Exception(PKCS7.F_PKCS7_SET_CIPHER,PKCS7.R_WRONG_CONTENT_TYPE);
     }
+
+    public void addRecipientInfo(RecipInfo ri) {
+        throw new PKCS7Exception(PKCS7.F_PKCS7_ADD_RECIPIENT_INFO,PKCS7.R_WRONG_CONTENT_TYPE);
+    }
 }// PKCS7Data

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEnveloped.java (1053 => 1054)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEnveloped.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataEnveloped.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -58,4 +58,8 @@
     public void setCipher(Cipher cipher) {
         this.enveloped.getEncData().setCipher(cipher);
     }
+
+    public void addRecipientInfo(RecipInfo ri) {
+        this.enveloped.getRecipientInfo().add(ri);
+    }
 }// PKCS7DataEnveloped

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java (1053 => 1054)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -58,4 +58,8 @@
     public void setCipher(Cipher cipher) {
         this.signedAndEnveloped.getEncData().setCipher(cipher);
     }
+
+    public void addRecipientInfo(RecipInfo ri) {
+        this.signedAndEnveloped.getRecipientInfo().add(ri);
+    }
 }// PKCS7DataSignedAndEnveloped

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/RecipInfo.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -27,9 +27,24 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import org.bouncycastle.asn1.ASN1OctetString;
+import java.security.cert.X509Certificate;
+
 /** PKCS7_RECIP_INFO
  *
  * @author <a href="" PROTECTED]">Ola Bini</a>
  */
 public class RecipInfo {
+    private int version;
+    private IssuerAndSerial issuerAndSerial;
+    private String keyEncAlgor;
+    private ASN1OctetString encKey;
+    private X509Certificate cert;
+
+    /** c: PKCS7_RECIP_INFO_set
+     *
+     */
+    public void set(X509Certificate cert) {
+        // TODO: implement
+    }
 }// RecipInfo

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java (1053 => 1054)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java	2008-07-21 18:41:08 UTC (rev 1054)
@@ -27,6 +27,9 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /** PKCS7_SIGN_ENVELOPE
  *
  * @author <a href="" PROTECTED]">Ola Bini</a>
@@ -40,6 +43,11 @@
     private EncContent encData = new EncContent();
 
     /**
+     * Describe recipientInfo here.
+     */
+    private List<RecipInfo> recipientInfo = new ArrayList<RecipInfo>();
+
+    /**
      * Get the <code>Version</code> value.
      *
      * @return an <code>int</code> value
@@ -74,4 +82,22 @@
     public final void setEncData(final EncContent newEncData) {
         this.encData = newEncData;
     }
+
+    /**
+     * Get the <code>RecipientInfo</code> value.
+     *
+     * @return a <code>List<RecipInfo></code> value
+     */
+    public final List<RecipInfo> getRecipientInfo() {
+        return recipientInfo;
+    }
+
+    /**
+     * Set the <code>RecipientInfo</code> value.
+     *
+     * @param newRecipientInfo The new RecipientInfo value.
+     */
+    public final void setRecipientInfo(final List<RecipInfo> newRecipientInfo) {
+        this.recipientInfo = newRecipientInfo;
+    }
 }// SignEnvelope

Modified: trunk/jopenssl/test/test_java_pkcs7.rb (1053 => 1054)


--- trunk/jopenssl/test/test_java_pkcs7.rb	2008-07-21 18:41:05 UTC (rev 1053)
+++ trunk/jopenssl/test/test_java_pkcs7.rb	2008-07-21 18:41:08 UTC (rev 1054)
@@ -21,6 +21,27 @@
     Signed = org.jruby.ext.openssl.impl.Signed unless defined?(Signed)
     SignerInfo = org.jruby.ext.openssl.impl.SignerInfo unless defined?(SignerInfo)
     
+    X509CertString = <<CERT
+-----BEGIN CERTIFICATE-----
+MIICijCCAXKgAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MRMwEQYKCZImiZPyLGQB
+GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMQswCQYDVQQDDAJDQTAe
+Fw0wODA3MDgxOTE1NDZaFw0wODA3MDgxOTQ1NDZaMEQxEzARBgoJkiaJk/IsZAEZ
+FgNvcmcxGTAXBgoJkiaJk/IsZAEZFglydWJ5LWxhbmcxEjAQBgNVBAMMCWxvY2Fs
+aG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAy8LEsNRApz7U/j5DoB4X
+BgO9Z8Atv5y/OVQRp0ag8Tqo1YewsWijxEWB7JOATwpBN267U4T1nPZIxxEEO7n/
+WNa2ws9JWsjah8ssEBFSxZqdXKSLf0N4Hi7/GQ/aYoaMCiQ8jA4jegK2FJmXM71u
+Pe+jFN/peeBOpRfyXxRFOYcCAwEAAaMSMBAwDgYDVR0PAQH/BAQDAgWgMA0GCSqG
+SIb3DQEBBQUAA4IBAQCU879BALJIM9avHiuZ3WTjDy0UYP3ZG5wtuSqBSnD1k8pr
+hXfRaga7mDj6EQaGUovImb+KrRi6mZc+zsx4rTxwBNJT9U8yiW2eYxmgcT9/qKrD
+/1nz+e8NeUCCDY5UTUHGszZw5zLEDgDX2n3E/CDIZsoRSyq5vXq1jpfih/tSWanj
+Y9uP/o8Dc7ZcRJOAX7NPu1bbZcbxEbZ8sMe5wZ5HNiAR6gnOrjz2Yyazb//PSskE
+4flt/2h4pzGA0/ZHcnDjcoLdiLtInsqPOlVDLgqd/XqRYWtj84N4gw1iS9cHyrIZ
+dqbS54IKvzElD+R0QVS2z6TIGJSpuSBnZ4yfuNuq
+-----END CERTIFICATE-----
+CERT
+    
+    X509Cert = java.security.cert.CertificateFactory.getInstance("X.509").generateCertificate(java.io.ByteArrayInputStream.new(X509CertString.to_java_bytes))
+    
     def test_is_signed
       p7 = PKCS7.new
       p7.type = PKCS7::NID_pkcs7_signed
@@ -306,5 +327,52 @@
       
       assert_equal cipher, p7.get_signed_and_enveloped.enc_data.cipher
     end
+    
+    def test_add_recipient_info_to_something_that_cant_have_recipients
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_signed
+      assert_raises NativeException do 
+        p7.add_recipient(X509Cert)
+      end
+
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_data
+      assert_raises NativeException do 
+        p7.add_recipient(X509Cert)
+      end
+      
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_encrypted
+      assert_raises NativeException do 
+        p7.add_recipient(X509Cert)
+      end
+      
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_digest
+      assert_raises NativeException do 
+        p7.add_recipient(X509Cert)
+      end
+    end
+
+    def test_add_recipient_info_to_enveloped_should_add_that_to_stack
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_enveloped
+      
+      ri = p7.add_recipient(X509Cert)
+      
+      assert_equal 1, p7.get_enveloped.recipient_info.size
+      assert_equal ri, p7.get_enveloped.recipient_info.get(0)
+    end
+
+
+    def test_add_recipient_info_to_signedAndEnveloped_should_add_that_to_stack
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_signedAndEnveloped
+      
+      ri = p7.add_recipient(X509Cert)
+      
+      assert_equal 1, p7.get_signed_and_enveloped.recipient_info.size
+      assert_equal ri, p7.get_signed_and_enveloped.recipient_info.get(0)
+    end
   end
 end
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to