Title: [1055] trunk/jopenssl: Add support for adding Signers

Diff

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Envelope.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Envelope.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -29,6 +29,8 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
 
 /** PKCS7_ENVELOPE
  *

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -142,6 +142,13 @@
         return ri;
     }
 
+    /** c: PKCS7_add_signer
+     *
+     */
+    public void addSigner(SignerInfo psi) {
+        this.data.addSigner(psi);
+    }
+
     /** c: PKCS7_add_recipient_info
      *
      */

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7Data.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -107,4 +107,8 @@
     public void addRecipientInfo(RecipInfo ri) {
         throw new PKCS7Exception(PKCS7.F_PKCS7_ADD_RECIPIENT_INFO,PKCS7.R_WRONG_CONTENT_TYPE);
     }
+
+    public void addSigner(SignerInfo psi) {
+        throw new PKCS7Exception(PKCS7.F_PKCS7_ADD_SIGNER,PKCS7.R_WRONG_CONTENT_TYPE);
+    }
 }// PKCS7Data

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSigned.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -80,4 +80,9 @@
     public boolean isSigned() {
         return true;
     }
+
+    public void addSigner(SignerInfo psi) {
+        this.sign.getMdAlgs().add(psi.getDigestAlgorithm());
+        this.sign.getSignerInfo().add(psi);
+    }
 }// PKCS7DataSigned

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7DataSignedAndEnveloped.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -62,4 +62,9 @@
     public void addRecipientInfo(RecipInfo ri) {
         this.signedAndEnveloped.getRecipientInfo().add(ri);
     }
+
+    public void addSigner(SignerInfo psi) {
+        this.signedAndEnveloped.getMdAlgs().add(psi.getDigestAlgorithm());
+        this.signedAndEnveloped.getSignerInfo().add(psi);
+    }
 }// PKCS7DataSignedAndEnveloped

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignEnvelope.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -29,6 +29,8 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
 
 /** PKCS7_SIGN_ENVELOPE
  *
@@ -43,6 +45,16 @@
     private EncContent encData = new EncContent();
 
     /**
+     * Describe mdAlgs here.
+     */
+    private Set<String> mdAlgs = new HashSet<String>();
+
+    /**
+     * Describe signerInfo here.
+     */
+    private List<SignerInfo> signerInfo = new ArrayList<SignerInfo>();
+
+    /**
      * Describe recipientInfo here.
      */
     private List<RecipInfo> recipientInfo = new ArrayList<RecipInfo>();
@@ -100,4 +112,40 @@
     public final void setRecipientInfo(final List<RecipInfo> newRecipientInfo) {
         this.recipientInfo = newRecipientInfo;
     }
+
+    /**
+     * Get the <code>SignerInfo</code> value.
+     *
+     * @return a <code>List<SignerInfo></code> value
+     */
+    public final List<SignerInfo> getSignerInfo() {
+        return signerInfo;
+    }
+
+    /**
+     * Set the <code>SignerInfo</code> value.
+     *
+     * @param newSignerInfo The new SignerInfo value.
+     */
+    public final void setSignerInfo(final List<SignerInfo> newSignerInfo) {
+        this.signerInfo = newSignerInfo;
+    }
+
+    /**
+     * Get the <code>MdAlgs</code> value.
+     *
+     * @return a <code>Set<String></code> value
+     */
+    public final Set<String> getMdAlgs() {
+        return mdAlgs;
+    }
+
+    /**
+     * Set the <code>MdAlgs</code> value.
+     *
+     * @param newMdAlgs The new MdAlgs value.
+     */
+    public final void setMdAlgs(final Set<String> newMdAlgs) {
+        this.mdAlgs = newMdAlgs;
+    }
 }// SignEnvelope

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Signed.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/Signed.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -27,6 +27,11 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl.impl;
 
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+
 /** PKCS7_SIGNED
  *
  * @author <a href="" PROTECTED]">Ola Bini</a>
@@ -37,6 +42,16 @@
      */
     private int version;
 
+    /**
+     * Describe mdAlgs here.
+     */
+    private Set<String> mdAlgs = new HashSet<String>();
+
+    /**
+     * Describe signerInfo here.
+     */
+    private List<SignerInfo> signerInfo = new ArrayList<SignerInfo>();
+
     PKCS7 contents;
 
     public void setContents(PKCS7 contents) {
@@ -60,4 +75,40 @@
     public final void setVersion(final int newVersion) {
         this.version = newVersion;
     }
+
+    /**
+     * Get the <code>SignerInfo</code> value.
+     *
+     * @return a <code>List<SignerInfo></code> value
+     */
+    public final List<SignerInfo> getSignerInfo() {
+        return signerInfo;
+    }
+
+    /**
+     * Set the <code>SignerInfo</code> value.
+     *
+     * @param newSignerInfo The new SignerInfo value.
+     */
+    public final void setSignerInfo(final List<SignerInfo> newSignerInfo) {
+        this.signerInfo = newSignerInfo;
+    }
+
+    /**
+     * Get the <code>MdAlgs</code> value.
+     *
+     * @return a <code>Set<String></code> value
+     */
+    public final Set<String> getMdAlgs() {
+        return mdAlgs;
+    }
+
+    /**
+     * Set the <code>MdAlgs</code> value.
+     *
+     * @param newMdAlgs The new MdAlgs value.
+     */
+    public final void setMdAlgs(final Set<String> newMdAlgs) {
+        this.mdAlgs = newMdAlgs;
+    }
 }// Signed

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignerInfo.java	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignerInfo.java	2008-07-21 18:41:10 UTC (rev 1055)
@@ -32,4 +32,27 @@
  * @author <a href="" PROTECTED]">Ola Bini</a>
  */
 public class SignerInfo {
+
+    /**
+     * Describe digestAlgorithm here.
+     */
+    private String digestAlgorithm;
+
+    /**
+     * Get the <code>DigestAlgorithm</code> value.
+     *
+     * @return a <code>String</code> value
+     */
+    public final String getDigestAlgorithm() {
+        return digestAlgorithm;
+    }
+
+    /**
+     * Set the <code>DigestAlgorithm</code> value.
+     *
+     * @param newDigestAlgorithm The new DigestAlgorithm value.
+     */
+    public final void setDigestAlgorithm(final String newDigestAlgorithm) {
+        this.digestAlgorithm = newDigestAlgorithm;
+    }
 }// SignerInfo

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


--- trunk/jopenssl/test/test_java_pkcs7.rb	2008-07-21 18:41:08 UTC (rev 1054)
+++ trunk/jopenssl/test/test_java_pkcs7.rb	2008-07-21 18:41:10 UTC (rev 1055)
@@ -374,5 +374,110 @@
       assert_equal 1, p7.get_signed_and_enveloped.recipient_info.size
       assert_equal ri, p7.get_signed_and_enveloped.recipient_info.get(0)
     end
+    
+    def test_add_signer_to_something_that_cant_have_signers
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_enveloped
+      assert_raises NativeException do 
+        p7.add_signer(SignerInfo.new)
+      end
+
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_data
+      assert_raises NativeException do 
+        p7.add_signer(SignerInfo.new)
+      end
+      
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_encrypted
+      assert_raises NativeException do 
+        p7.add_signer(SignerInfo.new)
+      end
+      
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_digest
+      assert_raises NativeException do 
+        p7.add_signer(SignerInfo.new)
+      end
+    end
+
+    def test_add_signer_to_signed_should_add_that_to_stack
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_signed
+      
+      si = SignerInfo.new
+      p7.add_signer(si)
+      
+      assert_equal 1, p7.get_sign.signer_info.size
+      assert_equal si, p7.get_sign.signer_info.get(0)
+    end
+
+
+    def test_add_signer_to_signedAndEnveloped_should_add_that_to_stack
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_signedAndEnveloped
+      
+      si = SignerInfo.new
+      p7.add_signer(si)
+      
+      assert_equal 1, p7.get_signed_and_enveloped.signer_info.size
+      assert_equal si, p7.get_signed_and_enveloped.signer_info.get(0)
+    end
+
+  
+    def test_add_signer_to_signed_with_new_algo_should_add_that_algo_to_the_algo_list
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_signed
+      
+      si = SignerInfo.new
+      si.digest_algorithm = "MD5"
+      p7.add_signer(si)
+
+      assert_equal "MD5", p7.get_sign.md_algs.iterator.next
+      assert_equal 1, p7.get_sign.md_algs.size
+
+      si = SignerInfo.new
+      si.digest_algorithm = "MD5"
+      p7.add_signer(si)
+
+      assert_equal "MD5", p7.get_sign.md_algs.iterator.next
+      assert_equal 1, p7.get_sign.md_algs.size
+
+      si = SignerInfo.new
+      si.digest_algorithm = "MD4"
+      p7.add_signer(si)
+
+      assert_equal 2, p7.get_sign.md_algs.size
+      assert p7.get_sign.md_algs.contains("MD4")
+      assert p7.get_sign.md_algs.contains("MD5")
+    end
+
+
+    def test_add_signer_to_signedAndEnveloped_with_new_algo_should_add_that_algo_to_the_algo_list
+      p7 = PKCS7.new
+      p7.type = PKCS7::NID_pkcs7_signedAndEnveloped
+      
+      si = SignerInfo.new
+      si.digest_algorithm = "MD5"
+      p7.add_signer(si)
+
+      assert_equal "MD5", p7.get_signed_and_enveloped.md_algs.iterator.next
+      assert_equal 1, p7.get_signed_and_enveloped.md_algs.size
+
+      si = SignerInfo.new
+      si.digest_algorithm = "MD5"
+      p7.add_signer(si)
+
+      assert_equal "MD5", p7.get_signed_and_enveloped.md_algs.iterator.next
+      assert_equal 1, p7.get_signed_and_enveloped.md_algs.size
+
+      si = SignerInfo.new
+      si.digest_algorithm = "MD4"
+      p7.add_signer(si)
+
+      assert_equal 2, p7.get_signed_and_enveloped.md_algs.size
+      assert p7.get_signed_and_enveloped.md_algs.contains("MD4")
+      assert p7.get_signed_and_enveloped.md_algs.contains("MD5")
+    end
   end
 end
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to