harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mloe...@apache.org
Subject svn commit: r428283 - in /incubator/harmony/enhanced/classlib/trunk/modules/crypto/src: main/java/javax/crypto/ test/api/java.injected/javax/crypto/ test/api/java/org/apache/harmony/crypto/tests/javax/crypto/ test/impl/java/org/apache/harmony/crypto/te...
Date Thu, 03 Aug 2006 08:36:11 GMT
Author: mloenko
Date: Thu Aug  3 01:36:10 2006
New Revision: 428283

URL: http://svn.apache.org/viewvc?rev=428283&view=rev
Log:
applied patch for HARMONY-1029
[classlib][crypto] ExemptionMechanism: isCryptoAllowed and genExemptionBlob issues

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java
    incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java.injected/javax/crypto/ExemptionMechanismSpiTest.java
    incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanismTest.java
    incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/impl/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanism_ImplTest.java
    incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/support/common/java/org/apache/harmony/crypto/tests/support/MyExemptionMechanismSpi.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java?rev=428283&r1=428282&r2=428283&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java
(original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java
Thu Aug  3 01:36:10 2006
@@ -14,11 +14,6 @@
  *  limitations under the License.
  */
 
-/**
-* @author Vera Y. Petrashkova
-* @version $Revision$
-*/
-
 package javax.crypto;
 
 import java.security.AlgorithmParameters;
@@ -30,14 +25,10 @@
 import java.security.Provider;
 import java.security.Security;
 import java.security.spec.AlgorithmParameterSpec;
+import java.util.Arrays;
 
 import org.apache.harmony.security.fortress.Engine;
 
-
-/**
- * @com.intel.drl.spec_ref
- * 
- */
 public class ExemptionMechanism {
 
     // Store spi implementation service name
@@ -64,10 +55,9 @@
     // Store initKey value
     private Key initKey;
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
+    // Indicates if blob generated successfully
+    private boolean generated;
+
     protected ExemptionMechanism(ExemptionMechanismSpi exmechSpi,
             Provider provider, String mechanism) {
         this.mechanism = mechanism;
@@ -76,18 +66,10 @@
         isInit = false;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final String getName() {
         return mechanism;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public static final ExemptionMechanism getInstance(String algorithm)
             throws NoSuchAlgorithmException {
         if (algorithm == null) {
@@ -100,10 +82,6 @@
         }
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public static final ExemptionMechanism getInstance(String algorithm,
             String provider) throws NoSuchAlgorithmException,
             NoSuchProviderException {
@@ -120,10 +98,6 @@
         return getInstance(algorithm, impProvider);
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public static final ExemptionMechanism getInstance(String algorithm,
             Provider provider) throws NoSuchAlgorithmException {
         if (algorithm == null) {
@@ -139,41 +113,21 @@
         }
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final Provider getProvider() {
         return provider;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     * 
-     * FIXME: check this method
-     */
     public final boolean isCryptoAllowed(Key key)
             throws ExemptionMechanismException {
-        Key initK = initKey;
-        try {
-            initKey = key;
-            spiImpl.engineInit(key);
-            spiImpl.engineGenExemptionBlob();
-            if (initK != null) {
-                spiImpl.engineInit(initK);
-            }
+
+        if (generated
+                && (initKey.equals(key) || Arrays.equals(initKey.getEncoded(),
+                        key.getEncoded()))) {
             return true;
-        } catch (InvalidKeyException e) {
-            return false;
-        } finally {
-            initKey = initK;
         }
+        return false;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final int getOutputSize(int inputLen) throws IllegalStateException {
         if (!isInit) {
             throw new IllegalStateException(NOTINITEMECH);
@@ -181,115 +135,62 @@
         return spiImpl.engineGetOutputSize(inputLen);
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final void init(Key key) throws InvalidKeyException,
             ExemptionMechanismException {
+        generated = false;
         spiImpl.engineInit(key);
         initKey = key;
         isInit = true;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final void init(Key key, AlgorithmParameters param)
             throws InvalidKeyException, InvalidAlgorithmParameterException,
             ExemptionMechanismException {
+        generated = false;
         spiImpl.engineInit(key, param);
         initKey = key;
         isInit = true;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final void init(Key key, AlgorithmParameterSpec param)
             throws InvalidKeyException, InvalidAlgorithmParameterException,
             ExemptionMechanismException {
+        generated = false;
         spiImpl.engineInit(key, param);
         initKey = key;
         isInit = true;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     *  
-     */
     public final byte[] genExemptionBlob() throws IllegalStateException,
             ExemptionMechanismException {
         if (!isInit) {
             throw new IllegalStateException(NOTINITEMECH);
         }
-        return spiImpl.engineGenExemptionBlob();
+        generated = false;
+        byte[] result = spiImpl.engineGenExemptionBlob();
+        generated = true;
+        return result;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     * 
-     * FIXME: about ShortBufferException (output: null, byte[0],...
-     */
     public final int genExemptionBlob(byte[] output)
             throws IllegalStateException, ShortBufferException,
             ExemptionMechanismException {
-        if (!isInit) {
-            throw new IllegalStateException(NOTINITEMECH);
-        }
-        byte[] result = spiImpl.engineGenExemptionBlob();
-        if (output.length == 0) {
-            throw new ShortBufferException(
-                    "Output buffer is too small to hold the result");
-        }
-        int len = (result.length < output.length ? result.length
-                : output.length);
-        for (int i = 0; i < len; i++) {
-            output[i] = result[i];
-        }
-        return len;
+        return genExemptionBlob(output, 0);
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     * 
-     * 
-     * FIXME: about ShortBufferException (output: null, byte[0],... and
-     * outputOffset
-     */
     public final int genExemptionBlob(byte[] output, int outputOffset)
             throws IllegalStateException, ShortBufferException,
             ExemptionMechanismException {
         if (!isInit) {
             throw new IllegalStateException(NOTINITEMECH);
         }
-        byte[] result = spiImpl.engineGenExemptionBlob();
-        if ((output.length == 0) || (outputOffset < 0)
-                || (outputOffset >= output.length)) {
-            throw new ShortBufferException(
-                    "Output buffer is too small to hold the result");
-        }
-        int len = (result.length < (output.length - outputOffset) ? result.length
-                : (output.length - outputOffset));
-        for (int i = 0; i < len; i++) {
-            output[i] = result[i];
-        }
+        generated = false;
+        int len = spiImpl.engineGenExemptionBlob(output, outputOffset);
+        generated = true;
         return len;
     }
 
-    /**
-     * @com.intel.drl.spec_ref
-     * 
-     * FIXME: check this method
-     */
     protected void finalize() {
-        try {
-            initKey = null;
-            super.finalize();
-        } catch (Throwable e) {
-            new RuntimeException(e);
-        }
+        initKey = null;
     }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java.injected/javax/crypto/ExemptionMechanismSpiTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java.injected/javax/crypto/ExemptionMechanismSpiTest.java?rev=428283&r1=428282&r2=428283&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java.injected/javax/crypto/ExemptionMechanismSpiTest.java
(original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java.injected/javax/crypto/ExemptionMechanismSpiTest.java
Thu Aug  3 01:36:10 2006
@@ -62,7 +62,7 @@
         assertEquals("Incorrect length", bbRes.length, len);
         assertEquals("Incorrect result", 
                 emSpi.engineGenExemptionBlob(new byte[1], len), len);
-        assertEquals("Incorrect output size", emSpi.engineGetOutputSize(100), 5);
+        assertEquals("Incorrect output size", 10, emSpi.engineGetOutputSize(100));
         Key key = null;
         AlgorithmParameters params = null;        
         AlgorithmParameterSpec parSpec = null;
@@ -102,6 +102,6 @@
         emSpi.engineInit(key, params);
         emSpi.engineInit(key, parSpec);
         
-        assertEquals("Incorrect result", emSpi.engineGetOutputSize(100),5);
+        assertEquals("Incorrect result", 10, emSpi.engineGetOutputSize(100));
     }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanismTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanismTest.java?rev=428283&r1=428282&r2=428283&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanismTest.java
(original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/api/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanismTest.java
Thu Aug  3 01:36:10 2006
@@ -14,25 +14,22 @@
  *  limitations under the License.
  */
 
-/**
-* @author Vera Y. Petrashkova
-* @version $Revision$
-*/
-
 package org.apache.harmony.crypto.tests.javax.crypto;
 
 import java.security.InvalidKeyException;
+import java.security.Key;
 import java.security.NoSuchProviderException;
 import java.security.Provider;
 
 import javax.crypto.ExemptionMechanism;
 import javax.crypto.ExemptionMechanismSpi;
 
-import junit.framework.TestCase;
-
 import org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi;
+import org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi.tmpKey;
 import org.apache.harmony.security.tests.support.SpiEngUtils;
 
+import junit.framework.TestCase;
+
 /**
  * Tests for <code>ExemptionMechanism</code> class constructors and methods
  * 
@@ -98,4 +95,64 @@
             //expected
         }
     }
+    
+    /**
+     * Test for <code>isCryptoAllowed(Key key)</code> method 
+     */
+    public void testIsCryptoAllowed() throws Exception {
+
+        //Regression for HARMONY-1029
+        Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider",
+                "Provider for ExemptionMechanism testing",
+                srvExemptionMechanism.concat(".").concat(defaultAlg),
+                ExemptionMechanismProviderClass);
+
+        ExemptionMechanism em = new ExemptionMechanism(
+                new MyExemptionMechanismSpi(), mProv, defaultAlg) {
+        };
+
+        Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]);
+
+        assertFalse(em.isCryptoAllowed(key));
+
+        em.init(key);
+        assertFalse(em.isCryptoAllowed(key));
+
+        em.genExemptionBlob();
+        assertTrue(em.isCryptoAllowed(key));
+
+        Key key1 = new MyExemptionMechanismSpi().new tmpKey("Proba",
+                new byte[] { 1 });
+        assertFalse(em.isCryptoAllowed(key1));
+
+        em.init(key1);
+        assertFalse(em.isCryptoAllowed(key));
+    }
+    
+    /**
+     * Test for <code>genExemptionBlob((byte[] output, int outputOffset)</code>
method
+     */
+    public void testGenExemptionBlob() throws Exception {
+
+        //Regression for HARMONY-1029
+        Provider mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider",
+                "Provider for ExemptionMechanism testing",
+                srvExemptionMechanism.concat(".").concat(defaultAlg),
+                ExemptionMechanismProviderClass);
+
+        ExemptionMechanism em = new ExemptionMechanism(
+                new MyExemptionMechanismSpi(), mProv, defaultAlg) {
+        };
+
+        Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]);
+
+        em.init(key);
+        // ExemptionMechanism doesn't check parameters
+        // it is a responsibility of ExemptionMechanismSpi
+        em.genExemptionBlob(null, 0);
+        em.genExemptionBlob(new byte[0], 0);
+        em.genExemptionBlob(new byte[10], -5);
+
+    }
+
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/impl/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanism_ImplTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/impl/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanism_ImplTest.java?rev=428283&r1=428282&r2=428283&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/impl/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanism_ImplTest.java
(original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/impl/java/org/apache/harmony/crypto/tests/javax/crypto/ExemptionMechanism_ImplTest.java
Thu Aug  3 01:36:10 2006
@@ -14,11 +14,6 @@
  *  limitations under the License.
  */
 
-/**
-* @author Vera Y. Petrashkova
-* @version $Revision$
-*/
-
 package org.apache.harmony.crypto.tests.javax.crypto;
 
 import java.security.AlgorithmParameters;
@@ -42,18 +37,17 @@
 
 import junit.framework.TestCase;
 
-
 /**
  * Tests for <code>ExemptionMechanism</code> class constructors and methods
  * 
  */
 
 public class ExemptionMechanism_ImplTest extends TestCase {
-    
+
     public static final String srvExemptionMechanism = "ExemptionMechanism";
-    
+
     private static final String defaultAlg = "EMech";
-    
+
     private static final String ExemptionMechanismProviderClass = "org.apache.harmony.crypto.tests.support.MyExemptionMechanismSpi";
 
     private static final String[] invalidValues = SpiEngUtils.invalidValues;
@@ -72,12 +66,13 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider", "Provider for ExemptionMechanism
testing", 
-                srvExemptionMechanism.concat(".").concat(defaultAlg), 
+        mProv = (new SpiEngUtils()).new MyProvider("MyExMechProvider",
+                "Provider for ExemptionMechanism testing",
+                srvExemptionMechanism.concat(".").concat(defaultAlg),
                 ExemptionMechanismProviderClass);
         Security.insertProviderAt(mProv, 1);
     }
-    
+
     /*
      * @see TestCase#tearDown()
      */
@@ -86,55 +81,40 @@
         Security.removeProvider(mProv.getName());
     }
 
-    private void checkResult(ExemptionMechanism exMech) 
+    private void checkResult(ExemptionMechanism exMech)
             throws ExemptionMechanismException, ShortBufferException,
-            InvalidKeyException, InvalidAlgorithmParameterException  {
+            InvalidKeyException, InvalidAlgorithmParameterException {
         Key key = new MyExemptionMechanismSpi().new tmpKey("Proba", new byte[0]);
-        byte [] emptyA = new byte[0];
+        byte[] emptyA = new byte[0];
         int len = MyExemptionMechanismSpi.getLength();
-        byte [] byteA = new byte[len];
+        byte[] byteA = new byte[len];
         try {
             exMech.genExemptionBlob();
             fail("IllegalStateException must be thrown");
-        } catch (IllegalStateException e) {            
+        } catch (IllegalStateException e) {
         }
         try {
             exMech.genExemptionBlob(byteA);
             fail("IllegalStateException must be thrown");
-        } catch (IllegalStateException e) {            
+        } catch (IllegalStateException e) {
         }
         try {
             exMech.genExemptionBlob(byteA, 1);
             fail("IllegalStateException must be thrown");
-        } catch (IllegalStateException e) {            
-        }        
+        } catch (IllegalStateException e) {
+        }
         try {
             exMech.getOutputSize(0);
             fail("IllegalStateException must be thrown");
-        } catch (IllegalStateException e) {            
-        }        
-        
+        } catch (IllegalStateException e) {
+        }
+
         exMech.init(key);
-        byte [] bbRes = exMech.genExemptionBlob();
+        byte[] bbRes = exMech.genExemptionBlob();
         assertEquals("Incorrect length", bbRes.length, len);
         assertEquals("Incorrect result", exMech.genExemptionBlob(new byte[5]), 5);
         assertEquals("Incorrect result", exMech.genExemptionBlob(bbRes), len);
-        try {
-            exMech.genExemptionBlob(new byte[1], len);
-            fail("ShortBufferException must be thrown");
-        } catch (ShortBufferException e) {            
-        }        
-        try {
-            exMech.genExemptionBlob(emptyA);
-            fail("ShortBufferException must be thrown");
-        } catch (ShortBufferException e) {            
-        }
-        
-        assertEquals("Incorrect result", exMech.genExemptionBlob(byteA, 1), 9);
-        assertEquals("Incorrect result", exMech.genExemptionBlob(new byte[20], (len - 2)),
len);
-                
-        assertEquals("Incorrect output size", exMech.getOutputSize(100), 5);
-        
+
         AlgorithmParameters params = null;
         exMech.init(key, params);
         AlgorithmParameterSpec parSpec = null;
@@ -159,7 +139,7 @@
             assertTrue("Empty message", (e.getMessage().length() > 0));
         }
     }
-    
+
     /**
      * Test for <code>getInstance(String algorithm)</code> method
      * Assertions:
@@ -207,7 +187,7 @@
     public void testGetInstance02() throws NoSuchAlgorithmException,
             NoSuchProviderException, IllegalArgumentException,
             ExemptionMechanismException, InvalidAlgorithmParameterException,
-            ShortBufferException, InvalidKeyException {        
+            ShortBufferException, InvalidKeyException {
         try {
             ExemptionMechanism.getInstance(null, mProv.getName());
             fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm
is null");

Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/support/common/java/org/apache/harmony/crypto/tests/support/MyExemptionMechanismSpi.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/support/common/java/org/apache/harmony/crypto/tests/support/MyExemptionMechanismSpi.java?rev=428283&r1=428282&r2=428283&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/support/common/java/org/apache/harmony/crypto/tests/support/MyExemptionMechanismSpi.java
(original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/support/common/java/org/apache/harmony/crypto/tests/support/MyExemptionMechanismSpi.java
Thu Aug  3 01:36:10 2006
@@ -39,7 +39,7 @@
 
 public class MyExemptionMechanismSpi  extends ExemptionMechanismSpi {
     
-    private static final int byteArrayLength = 10;
+    private static final int byteArrayLength = 5;
     
     public static final int getLength() {
         return byteArrayLength;
@@ -55,7 +55,7 @@
     }
 
     protected int engineGetOutputSize(int inputLen) {
-        return 5;
+        return 10;
     }
 
     protected void engineInit(Key key) throws InvalidKeyException,



Mime
View raw message