]> source.dussan.org Git - poi.git/commitdiff
- Updated to BC 1.51
authorAndreas Beeker <kiwiwings@apache.org>
Sat, 16 Aug 2014 19:21:31 +0000 (19:21 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Sat, 16 Aug 2014 19:21:31 +0000 (19:21 +0000)
- Download BC/test-libs in build.xml

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/xml_signature@1618403 13f79535-47bb-0310-9956-ffa450edef68

build.xml
src/ooxml/java/org/apache/poi/poifs/crypt/dsig/HorribleProxies.java
src/ooxml/java/org/apache/poi/poifs/crypt/dsig/HorribleProxy.java
src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
src/ooxml/testcases/org/apache/poi/poifs/crypt/PkiTestUtils.java
src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
test-data/xmldsign/bcprov-ext-jdk15on-1.49.jar [deleted file]

index 18e817232d0116510b70c555ffef2a59407dafa3..0e374e51fa528708c062fc1d759077146703c727 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -145,10 +145,16 @@ under the License.
     <property name="main.ant.url" value="${repository.m2}/maven2/org/apache/ant/ant/1.9.4/ant-1.9.4.jar"/>
     <property name="main.antlauncher.jar" location="${main.lib}/ant-launcher-1.9.4.jar"/>
     <property name="main.antlauncher.url" value="${repository.m2}/maven2/org/apache/ant/ant-launcher/1.9.4/ant-launcher-1.9.4.jar"/>
-       <property name="main.mockito.jar" location="${main.lib}/mockito-core-1.9.5.jar"/>
-       <property name="main.mockito.url" value="${repository.m2}/maven2/org/mockito/mockito-core/1.9.5/mockito-core-1.9.5.jar"/>
-       <property name="main.objenesis.jar" location="${main.lib}/com.springsource.org.objenesis-1.0.0.jar"/>
-       <property name="main.objenesis.url" value="http://repository.springsource.com/ivy/bundles/external/org.objenesis/com.springsource.org.objenesis/1.0.0/com.springsource.org.objenesis-1.0.0.jar"/>
+
+       <!-- test libs -->
+       <property name="test.bouncycastle-prov.jar" location="${main.lib}/bcprov-ext-jdk15on-1.51.jar"/>
+       <property name="test.bouncycastle-prov.url" value="${repository.m2}/maven2/org/bouncycastle/bcprov-ext-jdk15on/1.51/bcprov-ext-jdk15on-1.51.jar"/>
+       <property name="test.bouncycastle-pkix.jar" location="${main.lib}/bcpkix-jdk15on-151.jar"/>
+       <property name="test.bouncycastle-pkix.url" value="${repository.m2}/maven2/org/bouncycastle/bcpkix-jdk15on/1.51/bcpkix-jdk15on-151.jar"/>
+       <property name="test.mockito.jar" location="${main.lib}/mockito-core-1.9.5.jar"/>
+       <property name="test.mockito.url" value="${repository.m2}/maven2/org/mockito/mockito-core/1.9.5/mockito-core-1.9.5.jar"/>
+       <property name="test.objenesis.jar" location="${main.lib}/com.springsource.org.objenesis-1.0.0.jar"/>
+       <property name="test.objenesis.url" value="http://repository.springsource.com/ivy/bundles/external/org.objenesis/com.springsource.org.objenesis/1.0.0/com.springsource.org.objenesis-1.0.0.jar"/>
 
        <!-- jars in the lib-ooxml directory, see the fetch-ooxml-jars target-->
     <property name="ooxml.xmlbeans23.jar" location="${ooxml.lib}/xmlbeans-2.3.0.jar"/>
@@ -261,6 +267,8 @@ under the License.
         <pathelement location="${ooxml.output.dir}"/>
         <pathelement location="${ooxml.output.test.dir}"/>
         <pathelement location="${main.output.test.dir}"/>
+       <pathelement location="${test.mockito.jar}"/>
+       <pathelement location="${test.objenesis.jar}"/>
     </path>
 
     <path id="ooxml-lite.classpath">
@@ -436,12 +444,16 @@ under the License.
             <param name="destfile" value="${rat.jar}"/>
         </antcall>
         <antcall target="downloadfile">
-            <param name="sourcefile" value="${main.mockito.url}"/>
-            <param name="destfile" value="${main.mockito.jar}"/>
+            <param name="sourcefile" value="${test.mockito.url}"/>
+            <param name="destfile" value="${test.mockito.jar}"/>
+        </antcall>
+        <antcall target="downloadfile">
+            <param name="sourcefile" value="${test.objenesis.url}"/>
+            <param name="destfile" value="${test.objenesis.jar}"/>
         </antcall>
         <antcall target="downloadfile">
-            <param name="sourcefile" value="${main.objenesis.url}"/>
-            <param name="destfile" value="${main.objenesis.jar}"/>
+            <param name="sourcefile" value="${test.bouncycastle-prov.url}"/>
+            <param name="destfile" value="${test.bouncycastle-prov.jar}"/>
         </antcall>
     </target>
 
@@ -692,6 +704,7 @@ under the License.
                includeantruntime="false">
             <classpath>
                 <path refid="ooxml.classpath"/>
+               <path refid="test.ooxml.classpath"/>
                 <pathelement path="${ooxml.output.dir}"/>
                 <pathelement path="${main.output.test.dir}"/>
             </classpath>
index 9a6d6c3bf6e7a58fc441db541d58fc7de1fcd025..8a0ce9694ecb15f8975529604a5fc07b26319593 100644 (file)
@@ -30,13 +30,21 @@ public interface HorribleProxies {
         \r
         ASN1OctetStringIf readObject$ASNString() throws IOException;\r
         DEROctetStringIf readObject$DERString() throws IOException;\r
-        DERIntegerIf readObject$Integer() throws IOException;\r
+        ASN1IntegerIf readObject$Integer() throws IOException;\r
         ASN1SequenceIf readObject$Sequence() throws IOException;\r
         Object readObject$Object() throws IOException;\r
     }\r
 \r
+    public interface ASN1IntegerIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.asn1.ASN1Integer";\r
+        \r
+        BigInteger getPositiveValue();\r
+    }\r
+    \r
     public interface ASN1ObjectIdentifierIf extends ProxyIf {\r
         String delegateClass = "org.bouncycastle.asn1.ASN1ObjectIdentifier";\r
+        \r
+        String getId();\r
     }\r
     \r
     public interface ASN1OctetStringIf extends ProxyIf {\r
@@ -62,7 +70,7 @@ public interface HorribleProxies {
     }\r
     \r
     public interface BasicOCSPRespIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.BasicOCSPResp";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.BasicOCSPResp";\r
         Date getProducedAt();\r
         RespIDIf getResponderId();\r
     }\r
@@ -101,11 +109,6 @@ public interface HorribleProxies {
         String delegateClass = "org.bouncycastle.asn1.DERIA5String";\r
     }\r
     \r
-    public interface DERIntegerIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.asn1.DERInteger";\r
-        BigInteger getPositiveValue();\r
-    }\r
-    \r
     public interface DEROctetStringIf extends ProxyIf {\r
         String delegateClass = "org.bouncycastle.asn1.DEROctetString";\r
         byte[] getOctets();\r
@@ -152,6 +155,15 @@ public interface HorribleProxies {
         void marshal(Node node, String prefix, DOMCryptoContext context) throws MarshalException;\r
     }\r
     \r
+    public interface ExtensionsIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.asn1.x509.Extensions";\r
+    }\r
+    \r
+    public interface ExtensionIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.asn1.x509.Extension";\r
+    }\r
+    \r
+\r
     public interface GeneralNameIf extends ProxyIf {\r
         String delegateClass = "org.bouncycastle.asn1.x509.GeneralName";\r
         \r
@@ -168,13 +180,48 @@ public interface HorribleProxies {
         void init();\r
     }\r
 \r
+    public interface JcaDigestCalculatorProviderBuilderIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder";\r
+        JcaDigestCalculatorProviderBuilderIf setProvider(String provider);\r
+        DigestCalculatorProviderIf build();\r
+    }\r
+\r
+    public interface JcaContentSignerBuilderIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.operator.jcajce.JcaContentSignerBuilder";\r
+        \r
+        JcaContentSignerBuilderIf setProvider(String provider);\r
+        ContentSignerIf build(PrivateKey paramPrivateKey);\r
+    }\r
+    \r
+    public interface ContentSignerIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.operator.ContentSigner";\r
+    }\r
+    \r
+    public interface DigestCalculatorProviderIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.operator.DigestCalculatorProvider";\r
+        DigestCalculatorIf get(AlgorithmIdentifierIf paramAlgorithmIdentifier);\r
+    }\r
+    \r
+    public interface DigestCalculatorIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.operator.DigestCalculator";\r
+    }\r
+    \r
+    public interface AlgorithmIdentifierIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.asn1.x509.AlgorithmIdentifier";\r
+    }\r
+    \r
     public interface KeyUsageIf extends ProxyIf {\r
         String delegateClass = "org.bouncycastle.asn1.x509.KeyUsage";\r
         int digitalSignature();\r
     }\r
     \r
+    public interface OCSPObjectIdentifiersIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers";\r
+        ASN1ObjectIdentifierIf id_pkix_ocsp_nonce();\r
+    }\r
+    \r
     public interface OCSPRespIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.OCSPResp";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.OCSPResp";\r
         BasicOCSPRespIf getResponseObject();\r
         byte[] getEncoded() throws IOException;\r
     }\r
@@ -185,7 +232,7 @@ public interface HorribleProxies {
     }\r
 \r
     public interface RespIDIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.RespID";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.RespID";\r
         ResponderIDIf toASN1Object();\r
     }\r
     \r
@@ -291,30 +338,39 @@ public interface HorribleProxies {
     }\r
 \r
     public interface OCSPReqIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.OCSPReq";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.OCSPReq";\r
 \r
         ReqIf[] getRequestList();\r
     }\r
     \r
-    public interface OCSPReqGeneratorIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.OCSPReqGenerator";\r
-        \r
-        void addRequest(CertificateIDIf certId);\r
-        OCSPReqIf generate();\r
+    public interface OCSPReqBuilderIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.OCSPReqBuilder";\r
+\r
+        OCSPReqBuilderIf addRequest(CertificateIDIf certId);\r
+        OCSPReqBuilderIf setRequestExtensions(ExtensionsIf paramExtensions);\r
+        OCSPReqIf build();\r
     }\r
 \r
-    public interface BasicOCSPRespGeneratorIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.BasicOCSPRespGenerator";\r
+    public interface OCSPRespBuilderIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.OCSPRespBuilder";\r
+     \r
+        OCSPRespIf build(int status, BasicOCSPRespIf basicOcspResp);\r
+        int SUCCESSFUL();\r
+    }\r
+    \r
+    \r
+    public interface BasicOCSPRespBuilderIf extends ProxyIf {\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.BasicOCSPRespBuilder";\r
 \r
-        void addResponse(CertificateIDIf certificateID, CertificateStatusIf certificateStatus);\r
-        BasicOCSPRespIf generate(String signatureAlgorithm, PrivateKey ocspResponderPrivateKey,\r
-                X509Certificate chain[], Date date, String provider);\r
+        BasicOCSPRespBuilderIf addResponse(CertificateIDIf certificateID, CertificateStatusIf certificateStatus);\r
+        BasicOCSPRespBuilderIf setResponseExtensions(ExtensionsIf paramExtensions);\r
+        BasicOCSPRespIf build(ContentSignerIf paramContentSigner, X509CertificateHolderIf[] paramArrayOfX509CertificateHolder, Date paramDate);\r
     }\r
     \r
     public interface CertificateIDIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.CertificateID";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.CertificateID";\r
         \r
-        String HASH_SHA1();\r
+        AlgorithmIdentifierIf HASH_SHA1();\r
     }\r
     \r
     public interface X509ExtensionsIf extends ProxyIf {\r
@@ -348,13 +404,13 @@ public interface HorribleProxies {
     }\r
     \r
     public interface ReqIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.Req";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.Req";\r
         \r
         CertificateIDIf getCertID();\r
     }\r
     \r
     public interface CertificateStatusIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.CertificateStatus";\r
+        String delegateClass = "org.bouncycastle.cert.ocsp.CertificateStatus";\r
         \r
         CertificateStatusIf GOOD();\r
     }\r
@@ -366,11 +422,6 @@ public interface HorribleProxies {
     public interface CRLReasonIf extends ProxyIf {\r
         String delegateClass = "org.bouncycastle.asn1.x509.CRLReason";\r
         int unspecified();\r
-    }\r
-\r
-    public interface OCSPRespGeneratorIf extends ProxyIf {\r
-        String delegateClass = "org.bouncycastle.ocsp.OCSPRespGenerator";\r
-        int SUCCESSFUL();\r
-        OCSPRespIf generate(int status, BasicOCSPRespIf basicOCSPResp);\r
+        int privilegeWithdrawn();\r
     }\r
 }\r
index 7dd05db7cf51b389c80d252c3778dacdf0c21a09..d64b4ebc786e1632bbe55a7620154cf8968a39cb 100644 (file)
@@ -30,6 +30,7 @@ public class HorribleProxy implements InvocationHandler {
         this.delegateClass = delegateClass;\r
            // delegateRef can be null, then we have to deal with deferred initialisation\r
            this.delegateRef = delegateRef;\r
+           initDeferred = (delegateRef == null);\r
        }\r
        \r
        /**\r
@@ -211,7 +212,20 @@ public class HorribleProxy implements InvocationHandler {
                 types[i] = args[i].getClass();\r
             }\r
             \r
-            if (ProxyIf.class.isAssignableFrom(types[i])) {\r
+            if (types[i].isArray()) {\r
+                // TODO: check for null arguments ...\r
+                if (ProxyIf.class.isAssignableFrom(types[i].getComponentType())) {\r
+                    ProxyIf pifs[] = (ProxyIf[])args[i];\r
+                    Class<?> dc = getDelegateClass((Class<? extends ProxyIf>)types[i].getComponentType());\r
+                    int dcArrSize = (pifs==null ? 0 : pifs.length);\r
+                    Object[] dcArr = (Object[])Array.newInstance(dc, dcArrSize);\r
+                    for (int j=0;j<dcArrSize;j++) {\r
+                        dcArr[j] = pifs[j].getDelegate(); \r
+                    }\r
+                    args[i] = dcArr;\r
+                    types[i] = dcArr.getClass();\r
+                }\r
+            } else if (ProxyIf.class.isAssignableFrom(types[i])) {\r
                 types[i] = getDelegateClass((Class<? extends ProxyIf>)types[i]);\r
                 if (args[i] != null) {\r
                     args[i] = ((ProxyIf)args[i]).getDelegate();\r
index 44a0e24532b8285d70aeaf8db31dffc8386f3dd0..2d7946e777d1603a962c174b79c66be13fa798a4 100644 (file)
@@ -24,6 +24,8 @@
 \r
 package org.apache.poi.poifs.crypt.dsig.facets;\r
 \r
+import static org.apache.poi.poifs.crypt.dsig.HorribleProxy.newProxy;\r
+\r
 import java.io.ByteArrayInputStream;\r
 import java.io.ByteArrayOutputStream;\r
 import java.math.BigInteger;\r
@@ -49,15 +51,16 @@ import javax.xml.crypto.dsig.XMLSignatureFactory;
 \r
 import org.apache.poi.poifs.crypt.HashAlgorithm;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ASN1InputStreamIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ASN1IntegerIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ASN1OctetStringIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.BasicOCSPRespIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.CanonicalizerIf;\r
-import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DERIntegerIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DERTaggedObjectIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.InitIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPRespIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.RespIDIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ResponderIDIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509ExtensionsIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509NameIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxy;\r
 import org.apache.poi.poifs.crypt.dsig.SignatureInfo;\r
@@ -392,16 +395,18 @@ public class XAdESXLSignatureFacet implements SignatureFacet {
     }\r
 \r
     private BigInteger getCrlNumber(X509CRL crl) {\r
-        byte[] crlNumberExtensionValue = crl.getExtensionValue("2.5.29.20" /*CRLNumber*/);\r
-        if (null == crlNumberExtensionValue) {\r
-            return null;\r
-        }\r
         try {\r
+            X509ExtensionsIf x509ext = newProxy(X509ExtensionsIf.class);\r
+            byte[] crlNumberExtensionValue = crl.getExtensionValue(x509ext.CRLNumber().getId());\r
+            if (null == crlNumberExtensionValue) {\r
+                return null;\r
+            }\r
+\r
             ASN1InputStreamIf asn1InputStream = HorribleProxy.newProxy(ASN1InputStreamIf.class, crlNumberExtensionValue);\r
             ASN1OctetStringIf octetString = asn1InputStream.readObject$ASNString();\r
             byte[] octets = octetString.getOctets();\r
             asn1InputStream = HorribleProxy.newProxy(ASN1InputStreamIf.class, octets);\r
-            DERIntegerIf integer =  asn1InputStream.readObject$Integer();\r
+            ASN1IntegerIf integer =  asn1InputStream.readObject$Integer();\r
             BigInteger crlNumber = integer.getPositiveValue();\r
             return crlNumber;\r
         } catch (Exception e) {\r
index 5f205612e512f63e6b3fa75036f44dcf4ebca12b..f2b9ba800a8b6033274490767101ab772af1541b 100644 (file)
@@ -16,6 +16,8 @@
 ==================================================================== */\r
 package org.apache.poi.poifs.crypt;\r
 \r
+import static org.apache.poi.poifs.crypt.dsig.HorribleProxy.newProxy;\r
+\r
 import java.io.ByteArrayInputStream;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
@@ -54,33 +56,41 @@ import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ASN1InputStreamIf;
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.AuthorityInformationAccessIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.AuthorityKeyIdentifierIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.BasicConstraintsIf;\r
-import org.apache.poi.poifs.crypt.dsig.HorribleProxies.BasicOCSPRespGeneratorIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.BasicOCSPRespBuilderIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.BasicOCSPRespIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.CRLNumberIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.CRLReasonIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.CertificateIDIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.CertificateStatusIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ContentSignerIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DERIA5StringIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DEROctetStringIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DERSequenceIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DigestCalculatorIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DistributionPointIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.DistributionPointNameIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ExtensionIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ExtensionsIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.GeneralNameIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.GeneralNamesIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.JcaContentSignerBuilderIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.JcaDigestCalculatorProviderBuilderIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.KeyUsageIf;\r
-import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPReqGeneratorIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPObjectIdentifiersIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPReqBuilderIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPReqIf;\r
-import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPRespGeneratorIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPRespBuilderIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.OCSPRespIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.ReqIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.RevokedStatusIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.SubjectKeyIdentifierIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.SubjectPublicKeyInfoIf;\r
+import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509CertificateHolderIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509ExtensionsIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509ObjectIdentifiersIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509PrincipalIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509V2CRLGeneratorIf;\r
 import org.apache.poi.poifs.crypt.dsig.HorribleProxies.X509V3CertificateGeneratorIf;\r
-import org.apache.poi.poifs.crypt.dsig.HorribleProxy;\r
 import org.w3c.dom.Document;\r
 import org.w3c.dom.Node;\r
 import org.xml.sax.InputSource;\r
@@ -105,10 +115,10 @@ public class PkiTestUtils {
     throws IOException, ClassNotFoundException, NoSuchMethodException, InstantiationException\r
         , IllegalAccessException, InvocationTargetException, NoSuchFieldException {\r
         ByteArrayInputStream bais = new ByteArrayInputStream(publicKey.getEncoded());\r
-        ASN1InputStreamIf asnObj = HorribleProxy.newProxy(ASN1InputStreamIf.class, bais);\r
+        ASN1InputStreamIf asnObj = newProxy(ASN1InputStreamIf.class, bais);\r
         SubjectPublicKeyInfoIf info =\r
-            HorribleProxy.newProxy(SubjectPublicKeyInfoIf.class, asnObj.readObject$Sequence());\r
-        SubjectKeyIdentifierIf keyId =  HorribleProxy.newProxy(SubjectKeyIdentifierIf.class, info);\r
+            newProxy(SubjectPublicKeyInfoIf.class, asnObj.readObject$Sequence());\r
+        SubjectKeyIdentifierIf keyId =  newProxy(SubjectKeyIdentifierIf.class, info);\r
         return keyId;\r
     }\r
 \r
@@ -117,10 +127,10 @@ public class PkiTestUtils {
         , IllegalAccessException, InvocationTargetException, NoSuchFieldException {\r
 \r
         ByteArrayInputStream bais = new ByteArrayInputStream(publicKey.getEncoded());\r
-        ASN1InputStreamIf asnObj = HorribleProxy.newProxy(ASN1InputStreamIf.class, bais);\r
+        ASN1InputStreamIf asnObj = newProxy(ASN1InputStreamIf.class, bais);\r
         SubjectPublicKeyInfoIf info =\r
-            HorribleProxy.newProxy(SubjectPublicKeyInfoIf.class, asnObj.readObject$Sequence());\r
-        AuthorityKeyIdentifierIf keyId = HorribleProxy.newProxy(AuthorityKeyIdentifierIf.class, info);\r
+            newProxy(SubjectPublicKeyInfoIf.class, asnObj.readObject$Sequence());\r
+        AuthorityKeyIdentifierIf keyId = newProxy(AuthorityKeyIdentifierIf.class, info);\r
 \r
         return keyId;\r
     }\r
@@ -135,16 +145,16 @@ public class PkiTestUtils {
         , InstantiationException, NoSuchMethodException, ClassNotFoundException, NoSuchFieldException\r
     {\r
         String signatureAlgorithm = "SHA1withRSA";\r
-        X509V3CertificateGeneratorIf certificateGenerator = HorribleProxy.newProxy(X509V3CertificateGeneratorIf.class);\r
+        X509V3CertificateGeneratorIf certificateGenerator = newProxy(X509V3CertificateGeneratorIf.class);\r
         certificateGenerator.reset();\r
         certificateGenerator.setPublicKey(subjectPublicKey);\r
         certificateGenerator.setSignatureAlgorithm(signatureAlgorithm);\r
         certificateGenerator.setNotBefore(notBefore);\r
         certificateGenerator.setNotAfter(notAfter);\r
-        X509PrincipalIf subjectDN = HorribleProxy.newProxy(X509PrincipalIf.class, subjectDn);\r
+        X509PrincipalIf subjectDN = newProxy(X509PrincipalIf.class, subjectDn);\r
         X509PrincipalIf issuerDN;\r
         if (null != issuerCertificate) {\r
-            issuerDN = HorribleProxy.newProxy(X509PrincipalIf.class, issuerCertificate\r
+            issuerDN = newProxy(X509PrincipalIf.class, issuerCertificate\r
                     .getSubjectX500Principal().toString());\r
         } else {\r
             issuerDN = subjectDN;\r
@@ -154,7 +164,7 @@ public class PkiTestUtils {
         certificateGenerator.setSerialNumber(new BigInteger(128,\r
                 new SecureRandom()));\r
 \r
-        X509ExtensionsIf X509Extensions = HorribleProxy.newProxy(X509ExtensionsIf.class);\r
+        X509ExtensionsIf X509Extensions = newProxy(X509ExtensionsIf.class);\r
         \r
         certificateGenerator.addExtension(X509Extensions.SubjectKeyIdentifier(),\r
                 false, createSubjectKeyId(subjectPublicKey));\r
@@ -168,36 +178,36 @@ public class PkiTestUtils {
             BasicConstraintsIf bc;\r
             \r
             if (-1 == pathLength) {\r
-                bc = HorribleProxy.newProxy(BasicConstraintsIf.class, true);\r
+                bc = newProxy(BasicConstraintsIf.class, true);\r
             } else {\r
-                bc = HorribleProxy.newProxy(BasicConstraintsIf.class, pathLength);\r
+                bc = newProxy(BasicConstraintsIf.class, pathLength);\r
             }\r
             certificateGenerator.addExtension(X509Extensions.BasicConstraints(), false, bc);\r
         }\r
 \r
         if (null != crlUri) {\r
-            GeneralNameIf gn = HorribleProxy.newProxy(GeneralNameIf.class);\r
+            GeneralNameIf gn = newProxy(GeneralNameIf.class);\r
             int uri = gn.uniformResourceIdentifier();\r
-            DERIA5StringIf crlUriDer = HorribleProxy.newProxy(DERIA5StringIf.class, crlUri);\r
-            gn = HorribleProxy.newProxy(GeneralNameIf.class, uri, crlUriDer);\r
+            DERIA5StringIf crlUriDer = newProxy(DERIA5StringIf.class, crlUri);\r
+            gn = newProxy(GeneralNameIf.class, uri, crlUriDer);\r
 \r
-            DERSequenceIf gnDer = HorribleProxy.newProxy(DERSequenceIf.class, gn);\r
-            GeneralNamesIf gns = HorribleProxy.newProxy(GeneralNamesIf.class, gnDer);\r
+            DERSequenceIf gnDer = newProxy(DERSequenceIf.class, gn);\r
+            GeneralNamesIf gns = newProxy(GeneralNamesIf.class, gnDer);\r
             \r
-            DistributionPointNameIf dpn = HorribleProxy.newProxy(DistributionPointNameIf.class, 0, gns);\r
-            DistributionPointIf distp = HorribleProxy.newProxy(DistributionPointIf.class, dpn, null, null);\r
-            DERSequenceIf distpDer = HorribleProxy.newProxy(DERSequenceIf.class, distp);\r
+            DistributionPointNameIf dpn = newProxy(DistributionPointNameIf.class, 0, gns);\r
+            DistributionPointIf distp = newProxy(DistributionPointIf.class, dpn, null, null);\r
+            DERSequenceIf distpDer = newProxy(DERSequenceIf.class, distp);\r
             certificateGenerator.addExtension(X509Extensions.CRLDistributionPoints(), false, distpDer);\r
         }\r
 \r
         if (null != ocspUri) {\r
-            GeneralNameIf ocspName = HorribleProxy.newProxy(GeneralNameIf.class);\r
+            GeneralNameIf ocspName = newProxy(GeneralNameIf.class);\r
             int uri = ocspName.uniformResourceIdentifier();\r
-            ocspName = HorribleProxy.newProxy(GeneralNameIf.class, uri, ocspUri);\r
+            ocspName = newProxy(GeneralNameIf.class, uri, ocspUri);\r
             \r
-            X509ObjectIdentifiersIf X509ObjectIdentifiers = HorribleProxy.newProxy(X509ObjectIdentifiersIf.class);\r
+            X509ObjectIdentifiersIf X509ObjectIdentifiers = newProxy(X509ObjectIdentifiersIf.class);\r
             AuthorityInformationAccessIf authorityInformationAccess =\r
-                HorribleProxy.newProxy(AuthorityInformationAccessIf.class\r
+                newProxy(AuthorityInformationAccessIf.class\r
                     , X509ObjectIdentifiers.ocspAccessMethod(), ocspName);\r
             \r
             certificateGenerator.addExtension(\r
@@ -259,15 +269,15 @@ public class PkiTestUtils {
             CRLException, IllegalStateException, NoSuchAlgorithmException,\r
             SignatureException, InvocationTargetException, IllegalAccessException,\r
             InstantiationException, NoSuchMethodException, ClassNotFoundException, NoSuchFieldException {\r
-        X509V2CRLGeneratorIf crlGenerator = HorribleProxy.newProxy(X509V2CRLGeneratorIf.class);\r
+        X509V2CRLGeneratorIf crlGenerator = newProxy(X509V2CRLGeneratorIf.class);\r
         crlGenerator.setIssuerDN(issuer.getSubjectX500Principal());\r
         Date now = new Date();\r
         crlGenerator.setThisUpdate(now);\r
         crlGenerator.setNextUpdate(new Date(now.getTime() + 100000));\r
         crlGenerator.setSignatureAlgorithm("SHA1withRSA");\r
 \r
-        X509ExtensionsIf X509Extensions = HorribleProxy.newProxy(X509ExtensionsIf.class);\r
-        CRLNumberIf crlNumber = HorribleProxy.newProxy(CRLNumberIf.class, new BigInteger("1234"));\r
+        X509ExtensionsIf X509Extensions = newProxy(X509ExtensionsIf.class);\r
+        CRLNumberIf crlNumber = newProxy(CRLNumberIf.class, new BigInteger("1234"));\r
         \r
         crlGenerator.addExtension(X509Extensions.CRLNumber(), false, crlNumber);\r
         X509CRL x509Crl = crlGenerator.generate(issuerPrivateKey);\r
@@ -277,19 +287,36 @@ public class PkiTestUtils {
     public static OCSPRespIf createOcspResp(X509Certificate certificate,\r
             boolean revoked, X509Certificate issuerCertificate,\r
             X509Certificate ocspResponderCertificate,\r
-            PrivateKey ocspResponderPrivateKey, String signatureAlgorithm)\r
+            PrivateKey ocspResponderPrivateKey, String signatureAlgorithm,\r
+            long nonceTimeinMillis)\r
             throws Exception {\r
+        CertificateIDIf certId = newProxy(CertificateIDIf.class);\r
+        DigestCalculatorIf digestCalc =\r
+            newProxy(JcaDigestCalculatorProviderBuilderIf.class)\r
+            .setProvider("BC").build().get(certId.HASH_SHA1());\r
+        X509CertificateHolderIf issuerHolder = newProxy(X509CertificateHolderIf.class, issuerCertificate.getEncoded());\r
+        certId = newProxy(CertificateIDIf.class, digestCalc, issuerHolder, certificate.getSerialNumber());\r
+        \r
         // request\r
-        OCSPReqGeneratorIf ocspReqGenerator = HorribleProxy.newProxy(OCSPReqGeneratorIf.class);\r
-        CertificateIDIf certId = HorribleProxy.newProxy(CertificateIDIf.class);\r
-        String hashSha1 = certId.HASH_SHA1();\r
-        certId = HorribleProxy.newProxy(CertificateIDIf.class, hashSha1,\r
-                issuerCertificate, certificate.getSerialNumber());\r
-        ocspReqGenerator.addRequest(certId);\r
-        OCSPReqIf ocspReq = ocspReqGenerator.generate();\r
+        //create a nonce to avoid replay attack\r
+        BigInteger nonce = BigInteger.valueOf(nonceTimeinMillis);\r
+        OCSPObjectIdentifiersIf oidIf = newProxy(OCSPObjectIdentifiersIf.class);\r
+        DEROctetStringIf nonceDer = newProxy(DEROctetStringIf.class, nonce.toByteArray());\r
+        ExtensionIf ext = newProxy(ExtensionIf.class, oidIf.id_pkix_ocsp_nonce(), true, nonceDer);\r
+        ExtensionsIf exts = newProxy(ExtensionsIf.class, ext);\r
+        \r
+        OCSPReqBuilderIf ocspReqBuilder = newProxy(OCSPReqBuilderIf.class);\r
+        ocspReqBuilder.addRequest(certId);\r
+        ocspReqBuilder.setRequestExtensions(exts);\r
+        OCSPReqIf ocspReq = ocspReqBuilder.build();\r
 \r
-        BasicOCSPRespGeneratorIf basicOCSPRespGenerator = \r
-            HorribleProxy.newProxy(BasicOCSPRespGeneratorIf.class, ocspResponderCertificate.getPublicKey());\r
+        \r
+        SubjectPublicKeyInfoIf keyInfo = newProxy(SubjectPublicKeyInfoIf.class\r
+            , certId.HASH_SHA1(), ocspResponderCertificate.getPublicKey().getEncoded());\r
+        \r
+        BasicOCSPRespBuilderIf basicOCSPRespBuilder = \r
+            newProxy(BasicOCSPRespBuilderIf.class, keyInfo, digestCalc);\r
+        basicOCSPRespBuilder.setResponseExtensions(exts);\r
 \r
         // request processing\r
         ReqIf[] requestList = ocspReq.getRequestList();\r
@@ -297,32 +324,33 @@ public class PkiTestUtils {
             CertificateIDIf certificateID = ocspRequest.getCertID();\r
             CertificateStatusIf certificateStatus;\r
             if (revoked) {\r
-                CRLReasonIf crlr = HorribleProxy.newProxy(CRLReasonIf.class);\r
-                RevokedStatusIf rs = HorribleProxy.newProxy(RevokedStatusIf.class, new Date(), crlr.unspecified());\r
-                certificateStatus = HorribleProxy.newProxy(CertificateStatusIf.class, rs.getDelegate());\r
+                CRLReasonIf crlr = newProxy(CRLReasonIf.class);\r
+                RevokedStatusIf rs = newProxy(RevokedStatusIf.class, new Date(), crlr.privilegeWithdrawn());\r
+                certificateStatus = newProxy(CertificateStatusIf.class, rs.getDelegate());\r
             } else {\r
-                CertificateStatusIf cs = HorribleProxy.newProxy(CertificateStatusIf.class);\r
+                CertificateStatusIf cs = newProxy(CertificateStatusIf.class);\r
                 certificateStatus = cs.GOOD();\r
             }\r
-            basicOCSPRespGenerator\r
-                    .addResponse(certificateID, certificateStatus);\r
+            basicOCSPRespBuilder.addResponse(certificateID, certificateStatus);\r
         }\r
 \r
         // basic response generation\r
-        X509Certificate[] chain = null;\r
+        X509CertificateHolderIf[] chain = null;\r
         if (!ocspResponderCertificate.equals(issuerCertificate)) {\r
-            chain = new X509Certificate[] { ocspResponderCertificate,\r
-                    issuerCertificate };\r
+            // TODO: HorribleProxy can't convert array input params yet\r
+            chain = new X509CertificateHolderIf[] {\r
+                newProxy(X509CertificateHolderIf.class, ocspResponderCertificate),\r
+                issuerHolder\r
+            };\r
         }\r
+        \r
+        ContentSignerIf contentSigner = newProxy(JcaContentSignerBuilderIf.class, "SHA1withRSA")\r
+            .setProvider("BC").build(ocspResponderPrivateKey);\r
+        BasicOCSPRespIf basicOCSPResp = basicOCSPRespBuilder.build(contentSigner, chain, new Date(nonceTimeinMillis));\r
 \r
-        BasicOCSPRespIf basicOCSPResp = basicOCSPRespGenerator.generate(\r
-                signatureAlgorithm, ocspResponderPrivateKey, chain, new Date(),\r
-                "BC");\r
-\r
-        // response generation\r
-        OCSPRespGeneratorIf ocspRespGenerator = HorribleProxy.newProxy(OCSPRespGeneratorIf.class);\r
-        OCSPRespIf ocspResp = ocspRespGenerator.generate(\r
-                ocspRespGenerator.SUCCESSFUL(), basicOCSPResp);\r
+        \r
+        OCSPRespBuilderIf ocspRespBuilder = newProxy(OCSPRespBuilderIf.class);\r
+        OCSPRespIf ocspResp = ocspRespBuilder.build(ocspRespBuilder.SUCCESSFUL(), basicOCSPResp);\r
 \r
         return ocspResp;\r
     }\r
index 6ce0e4fae4794305174372b22b26951caa1f642b..05dad0b1efa81ca2dfd1e285d94c8d3c2534a5b7 100644 (file)
@@ -92,6 +92,7 @@ public class TestSignatureInfo {
     private static final POILogger LOG = POILogFactory.getLogger(TestSignatureInfo.class);\r
     private static final POIDataSamples testdata = POIDataSamples.getXmlDSignInstance();\r
 \r
+    private static Calendar cal;\r
     private KeyPair keyPair = null;\r
     private X509Certificate x509 = null;\r
     \r
@@ -99,11 +100,18 @@ public class TestSignatureInfo {
     \r
     @BeforeClass\r
     public static void initBouncy() throws MalformedURLException {\r
-        File bcJar = testdata.getFile("bcprov-ext-jdk15on-1.49.jar");\r
+        File bcProvJar = new File("lib/bcprov-ext-jdk15on-1.51.jar");\r
+        File bcPkixJar = new File("lib/bcpkix-jdk15on-151.jar");\r
         ClassLoader cl = Thread.currentThread().getContextClassLoader();\r
-        URLClassLoader ucl = new URLClassLoader(new URL[]{bcJar.toURI().toURL()}, cl);\r
+        URLClassLoader ucl = new URLClassLoader(new URL[]{bcProvJar.toURI().toURL(),bcPkixJar.toURI().toURL()}, cl);\r
         Thread.currentThread().setContextClassLoader(ucl);\r
         CryptoFunctions.registerBouncyCastle();\r
+\r
+        /*** TODO : set cal to now ... only set to fixed date for debugging ... */ \r
+        cal = Calendar.getInstance();\r
+        cal.clear();\r
+        cal.setTimeZone(TimeZone.getTimeZone("UTC"));\r
+        cal.set(2014, 7, 6, 21, 42, 12);\r
     }\r
     \r
     @Test\r
@@ -231,7 +239,7 @@ public class TestSignatureInfo {
         final X509CRL crl = PkiTestUtils.generateCrl(x509, keyPair.getPrivate());\r
         revocationData.addCRL(crl);\r
         OCSPRespIf ocspResp = PkiTestUtils.createOcspResp(x509, false,\r
-                x509, x509, keyPair.getPrivate(), "SHA1withRSA");\r
+                x509, x509, keyPair.getPrivate(), "SHA1withRSA", cal.getTimeInMillis());\r
         revocationData.addOCSP(ocspResp.getEncoded());\r
         \r
         when(mockTimeStampService.timeStamp(any(byte[].class), any(RevocationData.class)))\r
@@ -303,12 +311,6 @@ public class TestSignatureInfo {
     }\r
     \r
     private OPCPackage sign(OPCPackage pkgCopy, String alias, String signerDn, int signerCount) throws Exception {\r
-        /*** TODO : set cal to now ... only set to fixed date for debugging ... */ \r
-        Calendar cal = Calendar.getInstance();\r
-        cal.clear();\r
-        cal.setTimeZone(TimeZone.getTimeZone("UTC"));\r
-        cal.set(2014, 7, 6, 21, 42, 12);\r
-        \r
         XmlSignatureService signatureService = new XmlSignatureService(HashAlgorithm.sha1, pkgCopy);\r
         signatureService.initFacets(cal.getTime());\r
         initKeyPair(alias, signerDn);\r
diff --git a/test-data/xmldsign/bcprov-ext-jdk15on-1.49.jar b/test-data/xmldsign/bcprov-ext-jdk15on-1.49.jar
deleted file mode 100644 (file)
index cb0e0be..0000000
Binary files a/test-data/xmldsign/bcprov-ext-jdk15on-1.49.jar and /dev/null differ