Title: [1092] trunk/jopenssl/src/java/org/jruby/ext/openssl/impl: More parts of dataFinal.
Revision
1092
Author
olabini
Date
2008-08-08 06:54:18 -0400 (Fri, 08 Aug 2008)

Log Message

More parts of dataFinal. Gah, this method really sucks.

Modified Paths


Diff

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


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-08-08 10:54:15 UTC (rev 1091)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/PKCS7.java	2008-08-08 10:54:18 UTC (rev 1092)
@@ -31,6 +31,7 @@
 import java.security.MessageDigest;
 import java.security.PublicKey;
 import java.security.SecureRandom;
+import java.security.Signature;
 import java.security.cert.X509CRL;
 import java.security.cert.X509Certificate;
 import java.util.Calendar;
@@ -459,9 +460,6 @@
         }
 
         if(siSk != null) {
-            bufLen = 0;
-            buf = new byte[0];
-
             for(SignerInfoWithPkey si : siSk) {
                 if(si.getPkey() == null) {
                     continue;
@@ -481,56 +479,37 @@
                     throw new RuntimeException(e);
                 }
                 
-                byte[] newBuf = new byte[bufLen + si.getPkey().getEncoded().length];
-                System.arraycopy(buf, 0, bufLen, 0, bufLen);
-                buf = newBuf;
-
                 sk = si.getAuthenticatedAttributes();
 
-                if(sk != null && sk.size() > 0) {
-                    /* Add signing time if not already present */
-                    if(null == si.getSignedAttribute(ASN1Registry.NID_pkcs9_signingTime)) {
-                        DERUTCTime signTime = new DERUTCTime(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime());
-                        si.addSignedAttribute(ASN1Registry.NID_pkcs9_signingTime, signTime);
-                    }
+                Signature sign = null;
 
-                    byte[] md_data = ctx_tmp.digest();
-                    ASN1OctetString digest = new DEROctetString(md_data);
-                    si.addSignedAttribute(ASN1Registry.NID_pkcs9_messageDigest, digest);
+                try {
+                    if(sk != null && sk.size() > 0) {
+                        /* Add signing time if not already present */
+                        if(null == si.getSignedAttribute(ASN1Registry.NID_pkcs9_signingTime)) {
+                            DERUTCTime signTime = new DERUTCTime(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime());
+                            si.addSignedAttribute(ASN1Registry.NID_pkcs9_signingTime, signTime);
+                        }
 
+                        byte[] md_data = ctx_tmp.digest();
+                        ASN1OctetString digest = new DEROctetString(md_data);
+                        si.addSignedAttribute(ASN1Registry.NID_pkcs9_messageDigest, digest);
 
+                        sk = si.getAuthenticatedAttributes();
+                        sign = Signature.getInstance(ctx_tmp.getAlgorithm());
+                        sign.initSign(si.getPkey());
 
-//                             /* Now sign the attributes */
-//                             EVP_SignInit_ex(&ctx_tmp,md_tmp,NULL);
-//                             alen = ASN1_item_i2d((ASN1_VALUE *)sk,&abuf,
-//                                                  ASN1_ITEM_rptr(PKCS7_ATTR_SIGN));
-//                             if(!abuf) goto err;
-//                             EVP_SignUpdate(&ctx_tmp,abuf,alen);
-//                             OPENSSL_free(abuf);
-                }
+                        byte[] abuf = sk.getEncoded();
+                        sign.update(abuf);
+                    }
 
-
-// #ifndef OPENSSL_NO_DSA
-//                     if (si->pkey->type == EVP_PKEY_DSA)
-//                         ctx_tmp.digest=EVP_dss1();
-// #endif
-// #ifndef OPENSSL_NO_ECDSA
-//                     if (si->pkey->type == EVP_PKEY_EC)
-//                         ctx_tmp.digest=EVP_ecdsa();
-// #endif
-
-//                     if (!EVP_SignFinal(&ctx_tmp,(unsigned char *)buf->data,
-//                                        (unsigned int *)&buf->length,si->pkey))
-//                         {
-//                             PKCS7err(PKCS7_F_PKCS7_DATAFINAL,ERR_R_EVP_LIB);
-//                             goto err;
-//                         }
-//                     if (!ASN1_STRING_set(si->enc_digest,
-//                                          (unsigned char *)buf->data,buf->length))
-//                         {
-//                             PKCS7err(PKCS7_F_PKCS7_DATAFINAL,ERR_R_ASN1_LIB);
-//                             goto err;
-//                         }
+                    if(sign != null) {
+                        byte[] out = sign.sign();
+                        si.setEncryptedDigest(new DEROctetString(out));
+                    }
+                } catch(Exception e) {
+                    throw new PKCS7Exception(F_PKCS7_DATAFINAL,-1,e.toString());
+                }
             }
         }
 // 	else if (i == NID_pkcs7_digest)

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignerInfoWithPkey.java (1091 => 1092)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignerInfoWithPkey.java	2008-08-08 10:54:15 UTC (rev 1091)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/impl/SignerInfoWithPkey.java	2008-08-08 10:54:18 UTC (rev 1092)
@@ -216,6 +216,10 @@
         this.unauthenticatedAttributes = unauthAttr;
     }
 
+    public void setEncryptedDigest(ASN1OctetString encryptedDigest) {
+        this.encryptedDigest = encryptedDigest;
+    }
+
     /** c: PKCS7_get_signed_attribute
      *
      */
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to