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