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