harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Ellison <t.p.elli...@gmail.com>
Subject More big commits (was: Re: svn commit: r392237 [1/4] - in /incubator/harmony/enhanced/classlib/trunk/modules: beans/src/test/java/org/apache/harmony/tests/java/beans/ crypto/src/main/java/javax/crypto/ crypto/src/test/java/javax/crypto/ regex-beans-math/doc/ security/src/test/ja...)
Date Fri, 07 Apr 2006 10:48:49 GMT
In case you are wondering what is going on:

This morning I've been applying Paulex's harmony-27 updates to NIO
channels, and some trivial spelling mistakes across a number of files as
reported by Mark in harmony-252.

I appreciate that you can't readily gather that from the diffs...

Regards,
Tim

tellison@apache.org wrote:
> Author: tellison
> Date: Fri Apr  7 03:17:21 2006
> New Revision: 392237
> 
> URL: http://svn.apache.org/viewcvs?rev=392237&view=rev
> Log:
> Further patch for HARMONY-252 (trivial typo fixes)
> 
> Modified:
>     incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/tests/java/beans/ExpressionTest.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/Cipher.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/KeyAgreement.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/KeyGenerator.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/Mac.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/SecretKeyFactory.java
>     incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/test/java/javax/crypto/EncryptedPrivateKeyInfoTest.java
>     incubator/harmony/enhanced/classlib/trunk/modules/regex-beans-math/doc/Regexp.htm
>     incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/IdentityTest.java
> 
> Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/tests/java/beans/ExpressionTest.java
> URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/tests/java/beans/ExpressionTest.java?rev=392237&r1=392236&r2=392237&view=diff
> ==============================================================================
> --- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/tests/java/beans/ExpressionTest.java (original)
> +++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/tests/java/beans/ExpressionTest.java Fri Apr  7 03:17:21 2006
> @@ -1,155 +1,155 @@
> -/*
> - *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> - *
> - *  Licensed under the Apache License, Version 2.0 (the "License");
> - *  you may not use this file except in compliance with the License.
> - *  You may obtain a copy of the License at
> - *
> - *     http://www.apache.org/licenses/LICENSE-2.0
> - *
> - *  Unless required by applicable law or agreed to in writing, software
> - *  distributed under the License is distributed on an "AS IS" BASIS,
> - *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - *  See the License for the specific language governing permissions and
> - *  limitations under the License.
> - */
> -
> -/**
> - * @author Maxim V. Berkultsev
> - * @version $Revision: 1.2.6.3 $
> - */
> -package org.apache.harmony.tests.java.beans;
> -
> -import java.beans.Expression;
> -
> -import junit.framework.Test;
> -import junit.framework.TestCase;
> -import junit.framework.TestSuite;
> -import junit.textui.TestRunner;
> -
> -import org.apache.harmony.tests.java.beans.auxiliary.SampleBean;
> -
> -/**
> - * The test checks the class java.beans.Expression
> - * @author Maxim V. Berkultsev
> - * @version $Revision: 1.2.6.3 $
> - */
> -
> -public class ExpressionTest extends TestCase {
> -    
> -    private static int testId = -1;
> -
> -    /**
> -     * 
> -     */
> -    public ExpressionTest() {
> -        super();
> -    }
> -    
> -    /**
> -     *
> -     */
> -    public ExpressionTest(String name) {
> -        super(name);
> -    }
> -    
> -    /**
> -     * The test checks the correct constructor is initialized
> -     */
> -    public void testConstructor() {
> -        Expression expr = new Expression(SampleBean.class, "new",
> -                new Object[] { "hello" });
> -        try {
> -            Object result = expr.getValue();
> -            if(result != null && result instanceof SampleBean) {
> -                SampleBean bean = (SampleBean) result;
> -                assertEquals("hello", bean.getText());
> -            } else {
> -                fail("Cannot instantialte an instance of Bean class.");
> -            }
> -        } catch (Exception e) {
> -            System.out.println(e.getClass() + ": " + e.getMessage());
> -            fail("Exception is thrown while trying to invoke new Bean(String)");
> -        }
> -    }
> -    
> -    /**
> -     * The test checks the correct static method is initialized
> -     */
> -    public void testStatic() {
> -        SampleBean theBean = new SampleBean();
> -        Expression expr = new Expression(SampleBean.class, "create",
> -                new Object[] { "hello", theBean });
> -        try {
> -            Object result = expr.getValue();
> -            if(result != null && result instanceof SampleBean) {
> -                SampleBean bean = (SampleBean) result;
> -                assertEquals("hello", bean.getText());
> -                assertEquals(theBean, bean.getObject());
> -            } else {
> -                fail("Cannot instantialte an instance of Bean class by "
> -                        + "static method.");
> -            }
> -        } catch (Exception e) {
> -            System.out.println(e.getClass() + ": " + e.getMessage());
> -            fail("Exception is thrown while trying to invoke "
> -                    + "SampleBean.create(String, SampleBean)");
> -        }
> -    }
> -    
> -    /**
> -     * The test checks the correct getter is initialized
> -     */
> -    public void testGetter() {
> -        Expression expr = new Expression(new SampleBean("hello"), "getText",
> -                new Object[] {});
> -        try {
> -            Object result = expr.getValue();
> -            if(result != null && result instanceof String) {
> -                assertEquals("hello", result);
> -            } else {
> -                fail("Result of SampleBean.getText() call is not "
> -                        + "of String type.");
> -            }
> -        } catch (Exception e) {
> -            System.out.println(e.getClass() + ": " + e.getMessage());
> -            fail("Exception is thrown while trying to invoke "
> -                    + "SampleBean.getText()");
> -        }
> -    }
> -    
> -    /**
> -     * The test checks the correct array getter is initialized
> -     */
> -    public void testArrayGetter() {
> -        int[] a = {1, 2, 3};
> -        Expression expr = new Expression(a, "get",
> -                new Object[] { new Integer(1) });
> -        try {
> -            Object result = expr.getValue();
> -            if(result != null && result instanceof Integer) {
> -                assertEquals(new Integer(2), result);
> -            } else {
> -                fail("Result of array getter is not of Integer type.");
> -            }
> -        } catch (Exception e) {
> -            System.out.println(e.getClass() + ": " + e.getMessage());
> -            fail("Exception is thrown while trying to invoke get element "
> -                    + "from array");
> -        }
> -    }
> -    
> -    /**
> -     * 
> -     */
> -    public static Test suite() {
> -        return new TestSuite(ExpressionTest.class);
> -    }
> -    
> -    /**
> -     * 
> -     */
> -    public static void main(String[] args) {
> -        TestRunner.run(suite());
> -    }
> -}
> +/*
> + *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> + *
> + *  Licensed under the Apache License, Version 2.0 (the "License");
> + *  you may not use this file except in compliance with the License.
> + *  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +
> +/**
> + * @author Maxim V. Berkultsev
> + * @version $Revision: 1.2.6.3 $
> + */
> +package org.apache.harmony.tests.java.beans;
> +
> +import java.beans.Expression;
> +
> +import junit.framework.Test;
> +import junit.framework.TestCase;
> +import junit.framework.TestSuite;
> +import junit.textui.TestRunner;
> +
> +import org.apache.harmony.tests.java.beans.auxiliary.SampleBean;
> +
> +/**
> + * The test checks the class java.beans.Expression
> + * @author Maxim V. Berkultsev
> + * @version $Revision: 1.2.6.3 $
> + */
> +
> +public class ExpressionTest extends TestCase {
> +    
> +    private static int testId = -1;
> +
> +    /**
> +     * 
> +     */
> +    public ExpressionTest() {
> +        super();
> +    }
> +    
> +    /**
> +     *
> +     */
> +    public ExpressionTest(String name) {
> +        super(name);
> +    }
> +    
> +    /**
> +     * The test checks the correct constructor is initialized
> +     */
> +    public void testConstructor() {
> +        Expression expr = new Expression(SampleBean.class, "new",
> +                new Object[] { "hello" });
> +        try {
> +            Object result = expr.getValue();
> +            if(result != null && result instanceof SampleBean) {
> +                SampleBean bean = (SampleBean) result;
> +                assertEquals("hello", bean.getText());
> +            } else {
> +                fail("Cannot instantiate an instance of Bean class.");
> +            }
> +        } catch (Exception e) {
> +            System.out.println(e.getClass() + ": " + e.getMessage());
> +            fail("Exception is thrown while trying to invoke new Bean(String)");
> +        }
> +    }
> +    
> +    /**
> +     * The test checks the correct static method is initialized
> +     */
> +    public void testStatic() {
> +        SampleBean theBean = new SampleBean();
> +        Expression expr = new Expression(SampleBean.class, "create",
> +                new Object[] { "hello", theBean });
> +        try {
> +            Object result = expr.getValue();
> +            if(result != null && result instanceof SampleBean) {
> +                SampleBean bean = (SampleBean) result;
> +                assertEquals("hello", bean.getText());
> +                assertEquals(theBean, bean.getObject());
> +            } else {
> +                fail("Cannot instantiate an instance of Bean class by "
> +                        + "static method.");
> +            }
> +        } catch (Exception e) {
> +            System.out.println(e.getClass() + ": " + e.getMessage());
> +            fail("Exception is thrown while trying to invoke "
> +                    + "SampleBean.create(String, SampleBean)");
> +        }
> +    }
> +    
> +    /**
> +     * The test checks the correct getter is initialized
> +     */
> +    public void testGetter() {
> +        Expression expr = new Expression(new SampleBean("hello"), "getText",
> +                new Object[] {});
> +        try {
> +            Object result = expr.getValue();
> +            if(result != null && result instanceof String) {
> +                assertEquals("hello", result);
> +            } else {
> +                fail("Result of SampleBean.getText() call is not "
> +                        + "of String type.");
> +            }
> +        } catch (Exception e) {
> +            System.out.println(e.getClass() + ": " + e.getMessage());
> +            fail("Exception is thrown while trying to invoke "
> +                    + "SampleBean.getText()");
> +        }
> +    }
> +    
> +    /**
> +     * The test checks the correct array getter is initialized
> +     */
> +    public void testArrayGetter() {
> +        int[] a = {1, 2, 3};
> +        Expression expr = new Expression(a, "get",
> +                new Object[] { new Integer(1) });
> +        try {
> +            Object result = expr.getValue();
> +            if(result != null && result instanceof Integer) {
> +                assertEquals(new Integer(2), result);
> +            } else {
> +                fail("Result of array getter is not of Integer type.");
> +            }
> +        } catch (Exception e) {
> +            System.out.println(e.getClass() + ": " + e.getMessage());
> +            fail("Exception is thrown while trying to invoke get element "
> +                    + "from array");
> +        }
> +    }
> +    
> +    /**
> +     * 
> +     */
> +    public static Test suite() {
> +        return new TestSuite(ExpressionTest.class);
> +    }
> +    
> +    /**
> +     * 
> +     */
> +    public static void main(String[] args) {
> +        TestRunner.run(suite());
> +    }
> +}
> 
> Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/Cipher.java
> URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/Cipher.java?rev=392237&r1=392236&r2=392237&view=diff
> ==============================================================================
> --- incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/Cipher.java (original)
> +++ incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/Cipher.java Fri Apr  7 03:17:21 2006
> @@ -1,769 +1,769 @@
> -/*
> - *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> - *
> - *  Licensed under the Apache License, Version 2.0 (the "License");
> - *  you may not use this file except in compliance with the License.
> - *  You may obtain a copy of the License at
> - *
> - *     http://www.apache.org/licenses/LICENSE-2.0
> - *
> - *  Unless required by applicable law or agreed to in writing, software
> - *  distributed under the License is distributed on an "AS IS" BASIS,
> - *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - *  See the License for the specific language governing permissions and
> - *  limitations under the License.
> - */
> -
> -/**
> -* @author Boris V. Kuznetsov
> -* @version $Revision$
> -*/
> -
> -package javax.crypto;
> -
> -import java.nio.ByteBuffer;
> -import java.security.AlgorithmParameters;
> -import java.security.InvalidAlgorithmParameterException;
> -import java.security.InvalidKeyException;
> -import java.security.InvalidParameterException;
> -import java.security.Key;
> -import java.security.NoSuchAlgorithmException;
> -import java.security.NoSuchProviderException;
> -import java.security.Provider;
> -import java.security.SecureRandom;
> -import java.security.Security;
> -import java.security.cert.Certificate;
> -import java.security.cert.X509Certificate;
> -import java.security.spec.AlgorithmParameterSpec;
> -import java.util.Iterator;
> -import java.util.Set;
> -import java.util.StringTokenizer;
> -
> -import org.apache.harmony.security.fortress.Engine;
> -
> -
> -/**
> - * @com.intel.drl.spec_ref
> - * 
> - */
> -public class Cipher {
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int DECRYPT_MODE = 2;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int ENCRYPT_MODE = 1;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int PRIVATE_KEY = 2;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int PUBLIC_KEY = 1;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int SECRET_KEY = 3;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int UNWRAP_MODE = 4;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int WRAP_MODE = 3;
> -
> -    private int mode;
> -
> -    /**
> -     * The service name.
> -     */
> -    private static final String SERVICE = "Cipher";
> -
> -    /**
> -     * Used to accesess common engine functionality
> -     */
> -    private static Engine engine = new Engine(SERVICE);
> -
> -    /**
> -     * The provider
> -     */
> -    private Provider provider;
> -
> -    /**
> -     * The SPI implementation.
> -     */
> -    private CipherSpi spiImpl;
> -
> -    /**
> -     * The transformation.
> -     */
> -    private String transformation;
> -
> -    private static SecureRandom sec_rand;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    protected Cipher(CipherSpi cipherSpi, Provider provider,
> -            String transformation) {
> -        this.provider = provider;
> -        this.transformation = transformation;
> -        this.spiImpl = cipherSpi;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final Cipher getInstance(String transformation)
> -            throws NoSuchAlgorithmException, NoSuchPaddingException {
> -        return getCipher(transformation, null);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final Cipher getInstance(String transformation,
> -            String provider) throws NoSuchAlgorithmException,
> -            NoSuchProviderException, NoSuchPaddingException {
> -        Provider p = Security.getProvider(provider);
> -        if (p == null) {
> -            throw new NoSuchProviderException("Provider " + provider
> -                    + " is not available");
> -        }
> -        return getInstance(transformation, p);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final Cipher getInstance(String transformation,
> -            Provider provider) throws NoSuchAlgorithmException,
> -            NoSuchPaddingException {
> -        if (provider == null) {
> -            throw new IllegalArgumentException("provider is null");
> -        }
> -        Cipher c = getCipher(transformation, provider);
> -        return c;
> -    }
> -
> -    /**
> -     * Find appropriate Cipher according the specification rules
> -     * 
> -     * @param transformation
> -     * @param provider
> -     * @return
> -     * @throws NoSuchAlgorithmException
> -     * @throws NoSuchPaddingException
> -     */
> -    private static synchronized Cipher getCipher(String transformation, Provider provider)
> -            throws NoSuchAlgorithmException, NoSuchPaddingException {
> -
> -        if (transformation == null || "".equals(transformation)) {
> -            throw new NoSuchAlgorithmException("Invalid transformation "
> -                    + transformation);
> -        }
> -
> -        String[] transf = checkTransformation(transformation);
> -
> -        boolean needSetPadding = false;
> -        boolean needSetMode = false;
> -        if (transf[1] == null && transf[2] == null) { // "algorithm"
> -            if (provider == null) {
> -                engine.getInstance(transf[0], null);
> -            } else {
> -                engine.getInstance(transf[0], provider, null);
> -            }
> -        } else {
> -            String[] searhOrder = {
> -                    transf[0] + "/" + transf[1] + "/" + transf[2], // "algorithm/mode/padding"
> -                    transf[0] + "/" + transf[1], // "algorithm/mode"
> -                    transf[0] + "//" + transf[2], // "algorithm//padding"
> -                    transf[0] // "algorithm"
> -            };
> -            int i;
> -            for (i = 0; i < searhOrder.length; i++) {
> -                try {
> -                    if (provider == null) {
> -                        engine.getInstance(searhOrder[i], null);
> -                    } else {
> -                        engine.getInstance(searhOrder[i], provider, null);
> -                    }
> -                    break;
> -                } catch (NoSuchAlgorithmException e) {
> -                	if ( i == searhOrder.length-1) {
> -                	    throw new NoSuchAlgorithmException(transformation);
> -                	}
> -                }
> -            }
> -            switch (i) {
> -            case 1: // "algorithm/mode"
> -                needSetPadding = true;
> -                break;
> -            case 2: // "algorithm//padding"
> -                needSetMode = true;
> -                break;
> -            case 3: // "algorithm"
> -                needSetPadding = true;
> -                needSetMode = true;
> -            }
> -        }
> -        CipherSpi cspi;
> -        try {
> -            cspi = (CipherSpi) engine.spi;
> -        } catch (ClassCastException e) {
> -            throw new NoSuchAlgorithmException(e);
> -        }
> -        Cipher c = new Cipher(cspi, engine.provider, transformation);
> -        if (needSetMode) {
> -            c.spiImpl.engineSetMode(transf[1]);
> -        }
> -        if (needSetPadding) {
> -            c.spiImpl.engineSetPadding(transf[2]);
> -        }
> -        return c;
> -    }
> -
> -    private static String[] checkTransformation(String transformation)
> -            throws NoSuchAlgorithmException {
> -        String[] transf = { null, null, null };
> -        StringTokenizer st;
> -        int i = 0;
> -        for (st = new StringTokenizer(transformation, "/"); st
> -                .hasMoreElements();) {
> -            if (i > 2) {
> -                throw new NoSuchAlgorithmException("Invalid transformation "
> -                        + transformation);
> -            }
> -            transf[i] = st.nextToken();
> -            if (transf[i] != null) {
> -                transf[i] = transf[i].trim();
> -                if ("".equals(transf[i])) {
> -                    transf[i] = null;
> -                }
> -                i++;
> -            }
> -        }
> -        if (transf[0] == null) {
> -            throw new NoSuchAlgorithmException("Invalid transformation "
> -                    + transformation);
> -        }
> -        if (!(transf[1] == null && transf[2] == null)
> -                && (transf[1] == null || transf[2] == null)) {
> -            throw new NoSuchAlgorithmException("Invalid transformation "
> -                    + transformation);
> -        }
> -        return transf;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final Provider getProvider() {
> -        return provider;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final String getAlgorithm() {
> -        return transformation;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int getBlockSize() {
> -        return spiImpl.engineGetBlockSize();
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int getOutputSize(int inputLen) {
> -        if (mode == 0) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized");
> -        }
> -        return spiImpl.engineGetOutputSize(inputLen);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] getIV() {
> -        return spiImpl.engineGetIV();
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final AlgorithmParameters getParameters() {
> -        return spiImpl.engineGetParameters();
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final ExemptionMechanism getExemptionMechanism() {
> -        //FIXME implement getExemptionMechanism
> -
> -        //        try {
> -        //            return ExemptionMechanism.getInstance(transformation, provider);
> -        //        } catch (NoSuchAlgorithmException e) {
> -        return null;
> -        //        }
> -
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Key key) throws InvalidKeyException {
> -        if (sec_rand == null) {
> -            sec_rand = new SecureRandom();
> -        }
> -        init(opmode, key, sec_rand);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Key key, SecureRandom random)
> -            throws InvalidKeyException {
> -        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> -                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> -            throw new InvalidParameterException("Invalid mode");
> -        }
> -        //        FIXME InvalidKeyException
> -        //        if keysize exceeds the maximum allowable keysize
> -        //        (jurisdiction policy files)
> -        spiImpl.engineInit(opmode, key, random);
> -        mode = opmode;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Key key, AlgorithmParameterSpec params)
> -            throws InvalidKeyException, InvalidAlgorithmParameterException {
> -        if (sec_rand == null) {
> -            sec_rand = new SecureRandom();
> -        }
> -        init(opmode, key, params, sec_rand);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Key key, AlgorithmParameterSpec params,
> -            SecureRandom random) throws InvalidKeyException,
> -            InvalidAlgorithmParameterException {
> -        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> -                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> -            throw new InvalidParameterException("Invalid mode");
> -        }
> -        //        FIXME InvalidKeyException
> -        //        if keysize exceeds the maximum allowable keysize
> -        //        (jurisdiction policy files)
> -        //        FIXME InvalidAlgorithmParameterException
> -        //        cryptographic strength exceed the legal limits
> -        //        (jurisdiction policy files)
> -        spiImpl.engineInit(opmode, key, params, random);
> -        mode = opmode;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Key key, AlgorithmParameters params)
> -            throws InvalidKeyException, InvalidAlgorithmParameterException {
> -        if (sec_rand == null) {
> -            sec_rand = new SecureRandom();
> -        }
> -        init(opmode, key, params, sec_rand);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Key key, AlgorithmParameters params,
> -            SecureRandom random) throws InvalidKeyException,
> -            InvalidAlgorithmParameterException {
> -        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> -                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> -            throw new InvalidParameterException("Invalid mode");
> -        }
> -        //        FIXME InvalidKeyException
> -        //        if keysize exceeds the maximum allowable keysize
> -        //        (jurisdiction policy files)
> -        //        FIXME InvalidAlgorithmParameterException
> -        //        cryptographic strength exceed the legal limits
> -        //        (jurisdiction policy files)
> -        spiImpl.engineInit(opmode, key, params, random);
> -        mode = opmode;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Certificate certificate)
> -            throws InvalidKeyException {
> -        if (sec_rand == null) {
> -            sec_rand = new SecureRandom();
> -        }
> -        init(opmode, certificate, sec_rand);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(int opmode, Certificate certificate,
> -            SecureRandom random) throws InvalidKeyException {
> -        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> -                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> -            throw new InvalidParameterException("Invalid mode");
> -        }
> -        if (certificate instanceof X509Certificate) {
> -            Set ce = ((X509Certificate) certificate).getCriticalExtensionOIDs();
> -            boolean critical = false;
> -            if (ce != null && !ce.isEmpty()) {
> -                for (Iterator i = ce.iterator(); i.hasNext();) {
> -                    String oid = (String) i.next();
> -                    if (oid.equals("2.5.29.15")) { //KeyUsage OID = 2.5.29.15
> -                        critical = true;
> -                        break;
> -                    }
> -                }
> -                if (critical) {
> -                    boolean[] keyUsage = ((X509Certificate) certificate)
> -                            .getKeyUsage();
> -                    // As specified in RFC 3280 -
> -                    // Internet X.509 Public Key Infrastructure
> -                    // Certificate and Certificate Revocation List (CRL) Profile.
> -                    // (http://www.ietf.org/rfc/rfc3280.txt)
> -                    //
> -                    // KeyUsage ::= BIT STRING {digitalSignature (0),
> -                    //                          ...
> -                    //                          encipherOnly (7),
> -                    //                          decipherOnly (8) }
> -                    if (keyUsage != null) {
> -                        if (opmode == ENCRYPT_MODE && (!keyUsage[7])) {
> -                            throw new InvalidKeyException(
> -                                    "The public key in the certificate cannot be used for ENCRYPT_MODE");
> -                        } else if (opmode == DECRYPT_MODE && (!keyUsage[8])) {
> -                            throw new InvalidKeyException(
> -                                    "The public key in the certificate cannot be used for DECRYPT_MODE");
> -                        }
> -                    }
> -                }
> -            }
> -        }
> -        //        FIXME InvalidKeyException
> -        //        if keysize exceeds the maximum allowable keysize
> -        //        (jurisdiction policy files)
> -        spiImpl.engineInit(opmode, certificate.getPublicKey(), random);
> -        mode = opmode;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] update(byte[] input) {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (input == null) {
> -            throw new IllegalArgumentException("input parameter is null");
> -        }
> -        if (input.length == 0) {
> -            return null;
> -        }
> -        return spiImpl.engineUpdate(input, 0, input.length);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] update(byte[] input, int inputOffset, int inputLen) {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (input == null) {
> -            throw new IllegalArgumentException("The input parameter is null");
> -        }
> -        if (inputOffset < 0 || inputLen < 0
> -                || inputOffset + inputLen > input.length) {
> -            throw new IllegalArgumentException(
> -                    "Incorrect inputOffset/inputLen parameters");
> -        }
> -        if (input.length == 0) {
> -            return null;
> -        }
> -        return spiImpl.engineUpdate(input, inputOffset, inputLen);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int update(byte[] input, int inputOffset, int inputLen,
> -            byte[] output) throws ShortBufferException {
> -        return update(input, inputOffset, inputLen, output, 0);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int update(byte[] input, int inputOffset, int inputLen,
> -            byte[] output, int outputOffset) throws ShortBufferException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (input == null) {
> -            throw new IllegalArgumentException("The input parameter is null");
> -        }
> -        if (output == null) {
> -            throw new IllegalArgumentException("The output parameter is null");
> -        }
> -        if (outputOffset < 0) {
> -            throw new IllegalArgumentException(
> -                    "Incorrect outputOffset parameter");
> -        }
> -        if (inputOffset < 0 || inputLen < 0
> -                || inputOffset + inputLen > input.length) {
> -            throw new IllegalArgumentException(
> -                    "Incorrect inputOffset/inputLen parameters");
> -        }
> -        if (input.length == 0) {
> -            return 0;
> -        }
> -        return spiImpl.engineUpdate(input, inputOffset, inputLen, output,
> -                outputOffset);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int update(ByteBuffer input, ByteBuffer output)
> -            throws ShortBufferException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (input == output) {
> -            throw new IllegalArgumentException(
> -                    "Input and output are the same object");
> -        }
> -        return spiImpl.engineUpdate(input, output);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] doFinal() throws IllegalBlockSizeException,
> -            BadPaddingException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        return spiImpl.engineDoFinal(null, 0, 0);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int doFinal(byte[] output, int outputOffset)
> -            throws IllegalBlockSizeException, ShortBufferException,
> -            BadPaddingException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (outputOffset < 0) {
> -            throw new IllegalArgumentException(
> -                    "Incorrect outputOffset parameter");
> -        }
> -        return spiImpl.engineDoFinal(null, 0, 0, output, outputOffset);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] doFinal(byte[] input) throws IllegalBlockSizeException,
> -            BadPaddingException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        return spiImpl.engineDoFinal(input, 0, input.length);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] doFinal(byte[] input, int inputOffset, int inputLen)
> -            throws IllegalBlockSizeException, BadPaddingException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (inputOffset < 0 || inputLen < 0
> -                || inputOffset + inputLen > input.length) {
> -            throw new IllegalArgumentException(
> -                    "Incorrect inputOffset/inputLen parameters");
> -        }
> -        return spiImpl.engineDoFinal(input, inputOffset, inputLen);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int doFinal(byte[] input, int inputOffset, int inputLen,
> -            byte[] output) throws ShortBufferException,
> -            IllegalBlockSizeException, BadPaddingException {
> -        return doFinal(input, inputOffset, inputLen, output, 0);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int doFinal(byte[] input, int inputOffset, int inputLen,
> -            byte[] output, int outputOffset) throws ShortBufferException,
> -            IllegalBlockSizeException, BadPaddingException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (inputOffset < 0 || inputLen < 0
> -                || inputOffset + inputLen > input.length) {
> -            throw new IllegalArgumentException(
> -                    "Incorrect inputOffset/inputLen parameters");
> -        }
> -        return spiImpl.engineDoFinal(input, inputOffset, inputLen, output,
> -                outputOffset);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int doFinal(ByteBuffer input, ByteBuffer output)
> -            throws ShortBufferException, IllegalBlockSizeException,
> -            BadPaddingException {
> -        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        if (input == output) {
> -            throw new IllegalArgumentException(
> -                    "Input and output are the same object");
> -        }
> -        return spiImpl.engineDoFinal(input, output);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final byte[] wrap(Key key) throws IllegalBlockSizeException,
> -            InvalidKeyException {
> -        if (mode != WRAP_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        return spiImpl.engineWrap(key);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm,
> -            int wrappedKeyType) throws InvalidKeyException,
> -            NoSuchAlgorithmException {
> -        if (mode != UNWRAP_MODE) {
> -            throw new IllegalStateException(
> -                    "Cipher has not yet been initialized properly");
> -        }
> -        return spiImpl.engineUnwrap(wrappedKey, wrappedKeyAlgorithm,
> -                wrappedKeyType);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final int getMaxAllowedKeyLength(String transformation)
> -            throws NoSuchAlgorithmException {
> -        if (transformation == null) {
> -            throw new NullPointerException();
> -        }
> -        checkTransformation(transformation);
> -        //FIXME jurisdiction policy files
> -        return Integer.MAX_VALUE;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(
> -            String transformation) throws NoSuchAlgorithmException {
> -        if (transformation == null) {
> -            throw new NullPointerException();
> -        }
> -        checkTransformation(transformation);
> -        //FIXME jurisdiction policy files
> -        return null;
> -    }
> +/*
> + *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> + *
> + *  Licensed under the Apache License, Version 2.0 (the "License");
> + *  you may not use this file except in compliance with the License.
> + *  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +
> +/**
> +* @author Boris V. Kuznetsov
> +* @version $Revision$
> +*/
> +
> +package javax.crypto;
> +
> +import java.nio.ByteBuffer;
> +import java.security.AlgorithmParameters;
> +import java.security.InvalidAlgorithmParameterException;
> +import java.security.InvalidKeyException;
> +import java.security.InvalidParameterException;
> +import java.security.Key;
> +import java.security.NoSuchAlgorithmException;
> +import java.security.NoSuchProviderException;
> +import java.security.Provider;
> +import java.security.SecureRandom;
> +import java.security.Security;
> +import java.security.cert.Certificate;
> +import java.security.cert.X509Certificate;
> +import java.security.spec.AlgorithmParameterSpec;
> +import java.util.Iterator;
> +import java.util.Set;
> +import java.util.StringTokenizer;
> +
> +import org.apache.harmony.security.fortress.Engine;
> +
> +
> +/**
> + * @com.intel.drl.spec_ref
> + * 
> + */
> +public class Cipher {
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int DECRYPT_MODE = 2;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int ENCRYPT_MODE = 1;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int PRIVATE_KEY = 2;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int PUBLIC_KEY = 1;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int SECRET_KEY = 3;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int UNWRAP_MODE = 4;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int WRAP_MODE = 3;
> +
> +    private int mode;
> +
> +    /**
> +     * The service name.
> +     */
> +    private static final String SERVICE = "Cipher";
> +
> +    /**
> +     * Used to access common engine functionality
> +     */
> +    private static Engine engine = new Engine(SERVICE);
> +
> +    /**
> +     * The provider
> +     */
> +    private Provider provider;
> +
> +    /**
> +     * The SPI implementation.
> +     */
> +    private CipherSpi spiImpl;
> +
> +    /**
> +     * The transformation.
> +     */
> +    private String transformation;
> +
> +    private static SecureRandom sec_rand;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    protected Cipher(CipherSpi cipherSpi, Provider provider,
> +            String transformation) {
> +        this.provider = provider;
> +        this.transformation = transformation;
> +        this.spiImpl = cipherSpi;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final Cipher getInstance(String transformation)
> +            throws NoSuchAlgorithmException, NoSuchPaddingException {
> +        return getCipher(transformation, null);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final Cipher getInstance(String transformation,
> +            String provider) throws NoSuchAlgorithmException,
> +            NoSuchProviderException, NoSuchPaddingException {
> +        Provider p = Security.getProvider(provider);
> +        if (p == null) {
> +            throw new NoSuchProviderException("Provider " + provider
> +                    + " is not available");
> +        }
> +        return getInstance(transformation, p);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final Cipher getInstance(String transformation,
> +            Provider provider) throws NoSuchAlgorithmException,
> +            NoSuchPaddingException {
> +        if (provider == null) {
> +            throw new IllegalArgumentException("provider is null");
> +        }
> +        Cipher c = getCipher(transformation, provider);
> +        return c;
> +    }
> +
> +    /**
> +     * Find appropriate Cipher according the specification rules
> +     * 
> +     * @param transformation
> +     * @param provider
> +     * @return
> +     * @throws NoSuchAlgorithmException
> +     * @throws NoSuchPaddingException
> +     */
> +    private static synchronized Cipher getCipher(String transformation, Provider provider)
> +            throws NoSuchAlgorithmException, NoSuchPaddingException {
> +
> +        if (transformation == null || "".equals(transformation)) {
> +            throw new NoSuchAlgorithmException("Invalid transformation "
> +                    + transformation);
> +        }
> +
> +        String[] transf = checkTransformation(transformation);
> +
> +        boolean needSetPadding = false;
> +        boolean needSetMode = false;
> +        if (transf[1] == null && transf[2] == null) { // "algorithm"
> +            if (provider == null) {
> +                engine.getInstance(transf[0], null);
> +            } else {
> +                engine.getInstance(transf[0], provider, null);
> +            }
> +        } else {
> +            String[] searhOrder = {
> +                    transf[0] + "/" + transf[1] + "/" + transf[2], // "algorithm/mode/padding"
> +                    transf[0] + "/" + transf[1], // "algorithm/mode"
> +                    transf[0] + "//" + transf[2], // "algorithm//padding"
> +                    transf[0] // "algorithm"
> +            };
> +            int i;
> +            for (i = 0; i < searhOrder.length; i++) {
> +                try {
> +                    if (provider == null) {
> +                        engine.getInstance(searhOrder[i], null);
> +                    } else {
> +                        engine.getInstance(searhOrder[i], provider, null);
> +                    }
> +                    break;
> +                } catch (NoSuchAlgorithmException e) {
> +                	if ( i == searhOrder.length-1) {
> +                	    throw new NoSuchAlgorithmException(transformation);
> +                	}
> +                }
> +            }
> +            switch (i) {
> +            case 1: // "algorithm/mode"
> +                needSetPadding = true;
> +                break;
> +            case 2: // "algorithm//padding"
> +                needSetMode = true;
> +                break;
> +            case 3: // "algorithm"
> +                needSetPadding = true;
> +                needSetMode = true;
> +            }
> +        }
> +        CipherSpi cspi;
> +        try {
> +            cspi = (CipherSpi) engine.spi;
> +        } catch (ClassCastException e) {
> +            throw new NoSuchAlgorithmException(e);
> +        }
> +        Cipher c = new Cipher(cspi, engine.provider, transformation);
> +        if (needSetMode) {
> +            c.spiImpl.engineSetMode(transf[1]);
> +        }
> +        if (needSetPadding) {
> +            c.spiImpl.engineSetPadding(transf[2]);
> +        }
> +        return c;
> +    }
> +
> +    private static String[] checkTransformation(String transformation)
> +            throws NoSuchAlgorithmException {
> +        String[] transf = { null, null, null };
> +        StringTokenizer st;
> +        int i = 0;
> +        for (st = new StringTokenizer(transformation, "/"); st
> +                .hasMoreElements();) {
> +            if (i > 2) {
> +                throw new NoSuchAlgorithmException("Invalid transformation "
> +                        + transformation);
> +            }
> +            transf[i] = st.nextToken();
> +            if (transf[i] != null) {
> +                transf[i] = transf[i].trim();
> +                if ("".equals(transf[i])) {
> +                    transf[i] = null;
> +                }
> +                i++;
> +            }
> +        }
> +        if (transf[0] == null) {
> +            throw new NoSuchAlgorithmException("Invalid transformation "
> +                    + transformation);
> +        }
> +        if (!(transf[1] == null && transf[2] == null)
> +                && (transf[1] == null || transf[2] == null)) {
> +            throw new NoSuchAlgorithmException("Invalid transformation "
> +                    + transformation);
> +        }
> +        return transf;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final Provider getProvider() {
> +        return provider;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final String getAlgorithm() {
> +        return transformation;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int getBlockSize() {
> +        return spiImpl.engineGetBlockSize();
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int getOutputSize(int inputLen) {
> +        if (mode == 0) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized");
> +        }
> +        return spiImpl.engineGetOutputSize(inputLen);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] getIV() {
> +        return spiImpl.engineGetIV();
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final AlgorithmParameters getParameters() {
> +        return spiImpl.engineGetParameters();
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final ExemptionMechanism getExemptionMechanism() {
> +        //FIXME implement getExemptionMechanism
> +
> +        //        try {
> +        //            return ExemptionMechanism.getInstance(transformation, provider);
> +        //        } catch (NoSuchAlgorithmException e) {
> +        return null;
> +        //        }
> +
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Key key) throws InvalidKeyException {
> +        if (sec_rand == null) {
> +            sec_rand = new SecureRandom();
> +        }
> +        init(opmode, key, sec_rand);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Key key, SecureRandom random)
> +            throws InvalidKeyException {
> +        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> +                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> +            throw new InvalidParameterException("Invalid mode");
> +        }
> +        //        FIXME InvalidKeyException
> +        //        if keysize exceeds the maximum allowable keysize
> +        //        (jurisdiction policy files)
> +        spiImpl.engineInit(opmode, key, random);
> +        mode = opmode;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Key key, AlgorithmParameterSpec params)
> +            throws InvalidKeyException, InvalidAlgorithmParameterException {
> +        if (sec_rand == null) {
> +            sec_rand = new SecureRandom();
> +        }
> +        init(opmode, key, params, sec_rand);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Key key, AlgorithmParameterSpec params,
> +            SecureRandom random) throws InvalidKeyException,
> +            InvalidAlgorithmParameterException {
> +        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> +                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> +            throw new InvalidParameterException("Invalid mode");
> +        }
> +        //        FIXME InvalidKeyException
> +        //        if keysize exceeds the maximum allowable keysize
> +        //        (jurisdiction policy files)
> +        //        FIXME InvalidAlgorithmParameterException
> +        //        cryptographic strength exceed the legal limits
> +        //        (jurisdiction policy files)
> +        spiImpl.engineInit(opmode, key, params, random);
> +        mode = opmode;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Key key, AlgorithmParameters params)
> +            throws InvalidKeyException, InvalidAlgorithmParameterException {
> +        if (sec_rand == null) {
> +            sec_rand = new SecureRandom();
> +        }
> +        init(opmode, key, params, sec_rand);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Key key, AlgorithmParameters params,
> +            SecureRandom random) throws InvalidKeyException,
> +            InvalidAlgorithmParameterException {
> +        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> +                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> +            throw new InvalidParameterException("Invalid mode");
> +        }
> +        //        FIXME InvalidKeyException
> +        //        if keysize exceeds the maximum allowable keysize
> +        //        (jurisdiction policy files)
> +        //        FIXME InvalidAlgorithmParameterException
> +        //        cryptographic strength exceed the legal limits
> +        //        (jurisdiction policy files)
> +        spiImpl.engineInit(opmode, key, params, random);
> +        mode = opmode;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Certificate certificate)
> +            throws InvalidKeyException {
> +        if (sec_rand == null) {
> +            sec_rand = new SecureRandom();
> +        }
> +        init(opmode, certificate, sec_rand);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(int opmode, Certificate certificate,
> +            SecureRandom random) throws InvalidKeyException {
> +        if (opmode != ENCRYPT_MODE && opmode != DECRYPT_MODE
> +                && opmode != UNWRAP_MODE && opmode != WRAP_MODE) {
> +            throw new InvalidParameterException("Invalid mode");
> +        }
> +        if (certificate instanceof X509Certificate) {
> +            Set ce = ((X509Certificate) certificate).getCriticalExtensionOIDs();
> +            boolean critical = false;
> +            if (ce != null && !ce.isEmpty()) {
> +                for (Iterator i = ce.iterator(); i.hasNext();) {
> +                    String oid = (String) i.next();
> +                    if (oid.equals("2.5.29.15")) { //KeyUsage OID = 2.5.29.15
> +                        critical = true;
> +                        break;
> +                    }
> +                }
> +                if (critical) {
> +                    boolean[] keyUsage = ((X509Certificate) certificate)
> +                            .getKeyUsage();
> +                    // As specified in RFC 3280 -
> +                    // Internet X.509 Public Key Infrastructure
> +                    // Certificate and Certificate Revocation List (CRL) Profile.
> +                    // (http://www.ietf.org/rfc/rfc3280.txt)
> +                    //
> +                    // KeyUsage ::= BIT STRING {digitalSignature (0),
> +                    //                          ...
> +                    //                          encipherOnly (7),
> +                    //                          decipherOnly (8) }
> +                    if (keyUsage != null) {
> +                        if (opmode == ENCRYPT_MODE && (!keyUsage[7])) {
> +                            throw new InvalidKeyException(
> +                                    "The public key in the certificate cannot be used for ENCRYPT_MODE");
> +                        } else if (opmode == DECRYPT_MODE && (!keyUsage[8])) {
> +                            throw new InvalidKeyException(
> +                                    "The public key in the certificate cannot be used for DECRYPT_MODE");
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +        //        FIXME InvalidKeyException
> +        //        if keysize exceeds the maximum allowable keysize
> +        //        (jurisdiction policy files)
> +        spiImpl.engineInit(opmode, certificate.getPublicKey(), random);
> +        mode = opmode;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] update(byte[] input) {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (input == null) {
> +            throw new IllegalArgumentException("input parameter is null");
> +        }
> +        if (input.length == 0) {
> +            return null;
> +        }
> +        return spiImpl.engineUpdate(input, 0, input.length);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] update(byte[] input, int inputOffset, int inputLen) {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (input == null) {
> +            throw new IllegalArgumentException("The input parameter is null");
> +        }
> +        if (inputOffset < 0 || inputLen < 0
> +                || inputOffset + inputLen > input.length) {
> +            throw new IllegalArgumentException(
> +                    "Incorrect inputOffset/inputLen parameters");
> +        }
> +        if (input.length == 0) {
> +            return null;
> +        }
> +        return spiImpl.engineUpdate(input, inputOffset, inputLen);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int update(byte[] input, int inputOffset, int inputLen,
> +            byte[] output) throws ShortBufferException {
> +        return update(input, inputOffset, inputLen, output, 0);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int update(byte[] input, int inputOffset, int inputLen,
> +            byte[] output, int outputOffset) throws ShortBufferException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (input == null) {
> +            throw new IllegalArgumentException("The input parameter is null");
> +        }
> +        if (output == null) {
> +            throw new IllegalArgumentException("The output parameter is null");
> +        }
> +        if (outputOffset < 0) {
> +            throw new IllegalArgumentException(
> +                    "Incorrect outputOffset parameter");
> +        }
> +        if (inputOffset < 0 || inputLen < 0
> +                || inputOffset + inputLen > input.length) {
> +            throw new IllegalArgumentException(
> +                    "Incorrect inputOffset/inputLen parameters");
> +        }
> +        if (input.length == 0) {
> +            return 0;
> +        }
> +        return spiImpl.engineUpdate(input, inputOffset, inputLen, output,
> +                outputOffset);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int update(ByteBuffer input, ByteBuffer output)
> +            throws ShortBufferException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (input == output) {
> +            throw new IllegalArgumentException(
> +                    "Input and output are the same object");
> +        }
> +        return spiImpl.engineUpdate(input, output);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] doFinal() throws IllegalBlockSizeException,
> +            BadPaddingException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        return spiImpl.engineDoFinal(null, 0, 0);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int doFinal(byte[] output, int outputOffset)
> +            throws IllegalBlockSizeException, ShortBufferException,
> +            BadPaddingException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (outputOffset < 0) {
> +            throw new IllegalArgumentException(
> +                    "Incorrect outputOffset parameter");
> +        }
> +        return spiImpl.engineDoFinal(null, 0, 0, output, outputOffset);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] doFinal(byte[] input) throws IllegalBlockSizeException,
> +            BadPaddingException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        return spiImpl.engineDoFinal(input, 0, input.length);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] doFinal(byte[] input, int inputOffset, int inputLen)
> +            throws IllegalBlockSizeException, BadPaddingException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (inputOffset < 0 || inputLen < 0
> +                || inputOffset + inputLen > input.length) {
> +            throw new IllegalArgumentException(
> +                    "Incorrect inputOffset/inputLen parameters");
> +        }
> +        return spiImpl.engineDoFinal(input, inputOffset, inputLen);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int doFinal(byte[] input, int inputOffset, int inputLen,
> +            byte[] output) throws ShortBufferException,
> +            IllegalBlockSizeException, BadPaddingException {
> +        return doFinal(input, inputOffset, inputLen, output, 0);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int doFinal(byte[] input, int inputOffset, int inputLen,
> +            byte[] output, int outputOffset) throws ShortBufferException,
> +            IllegalBlockSizeException, BadPaddingException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (inputOffset < 0 || inputLen < 0
> +                || inputOffset + inputLen > input.length) {
> +            throw new IllegalArgumentException(
> +                    "Incorrect inputOffset/inputLen parameters");
> +        }
> +        return spiImpl.engineDoFinal(input, inputOffset, inputLen, output,
> +                outputOffset);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int doFinal(ByteBuffer input, ByteBuffer output)
> +            throws ShortBufferException, IllegalBlockSizeException,
> +            BadPaddingException {
> +        if (mode != ENCRYPT_MODE && mode != DECRYPT_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        if (input == output) {
> +            throw new IllegalArgumentException(
> +                    "Input and output are the same object");
> +        }
> +        return spiImpl.engineDoFinal(input, output);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final byte[] wrap(Key key) throws IllegalBlockSizeException,
> +            InvalidKeyException {
> +        if (mode != WRAP_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        return spiImpl.engineWrap(key);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm,
> +            int wrappedKeyType) throws InvalidKeyException,
> +            NoSuchAlgorithmException {
> +        if (mode != UNWRAP_MODE) {
> +            throw new IllegalStateException(
> +                    "Cipher has not yet been initialized properly");
> +        }
> +        return spiImpl.engineUnwrap(wrappedKey, wrappedKeyAlgorithm,
> +                wrappedKeyType);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final int getMaxAllowedKeyLength(String transformation)
> +            throws NoSuchAlgorithmException {
> +        if (transformation == null) {
> +            throw new NullPointerException();
> +        }
> +        checkTransformation(transformation);
> +        //FIXME jurisdiction policy files
> +        return Integer.MAX_VALUE;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(
> +            String transformation) throws NoSuchAlgorithmException {
> +        if (transformation == null) {
> +            throw new NullPointerException();
> +        }
> +        checkTransformation(transformation);
> +        //FIXME jurisdiction policy files
> +        return null;
> +    }
>  }
> 
> Modified: incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java
> URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/crypto/src/main/java/javax/crypto/ExemptionMechanism.java?rev=392237&r1=392236&r2=392237&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 Fri Apr  7 03:17:21 2006
> @@ -1,295 +1,295 @@
> -/*
> - *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> - *
> - *  Licensed under the Apache License, Version 2.0 (the "License");
> - *  you may not use this file except in compliance with the License.
> - *  You may obtain a copy of the License at
> - *
> - *     http://www.apache.org/licenses/LICENSE-2.0
> - *
> - *  Unless required by applicable law or agreed to in writing, software
> - *  distributed under the License is distributed on an "AS IS" BASIS,
> - *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - *  See the License for the specific language governing permissions and
> - *  limitations under the License.
> - */
> -
> -/**
> -* @author Vera Y. Petrashkova
> -* @version $Revision$
> -*/
> -
> -package javax.crypto;
> -
> -import java.security.AlgorithmParameters;
> -import java.security.InvalidAlgorithmParameterException;
> -import java.security.InvalidKeyException;
> -import java.security.Key;
> -import java.security.NoSuchAlgorithmException;
> -import java.security.NoSuchProviderException;
> -import java.security.Provider;
> -import java.security.Security;
> -import java.security.spec.AlgorithmParameterSpec;
> -
> -import org.apache.harmony.security.fortress.Engine;
> -
> -
> -/**
> - * @com.intel.drl.spec_ref
> - * 
> - */
> -public class ExemptionMechanism {
> -
> -    // Store spi implementation service name
> -    private static final String SERVICE = "ExemptionMechanism";
> -
> -    // Used to accesess common engine functionality
> -    private static Engine engine = new Engine(SERVICE);
> -
> -    // Warning for reporting about not initializes ExemptionMechanism
> -    private static final String NOTINITEMECH = "ExemptionMechanism is not initialized";
> -
> -    // Store used provider
> -    private final Provider provider;
> -
> -    // Store used spi implementation
> -    private final ExemptionMechanismSpi spiImpl;
> -
> -    // Store mechanism name
> -    private final String mechanism;
> -
> -    // Store state (initialized or not)
> -    private boolean isInit;
> -
> -    // Store initKey value
> -    private Key initKey;
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    protected ExemptionMechanism(ExemptionMechanismSpi exmechSpi,
> -            Provider provider, String mechanism) {
> -        this.mechanism = mechanism;
> -        this.spiImpl = exmechSpi;
> -        this.provider = provider;
> -        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) {
> -            throw new NullPointerException("Algorithm is null");
> -        }
> -        synchronized (engine) {
> -            engine.getInstance(algorithm, null);
> -            return new ExemptionMechanism((ExemptionMechanismSpi) engine.spi,
> -                    engine.provider, algorithm);
> -        }
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final ExemptionMechanism getInstance(String algorithm,
> -            String provider) throws NoSuchAlgorithmException,
> -            NoSuchProviderException {
> -        if (algorithm == null) {
> -            throw new NullPointerException("Algorithm is null");
> -        }
> -        if (provider == null) {
> -            throw new IllegalArgumentException("Provider is null");
> -        }
> -        Provider impProvider = Security.getProvider(provider);
> -        if (impProvider == null) {
> -            throw new NoSuchProviderException(provider);
> -        }
> -        return getInstance(algorithm, impProvider);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public static final ExemptionMechanism getInstance(String algorithm,
> -            Provider provider) throws NoSuchAlgorithmException {
> -        if (algorithm == null) {
> -            throw new NullPointerException("Algorithm is null");
> -        }
> -        if (provider == null) {
> -            throw new IllegalArgumentException("Provider is null");
> -        }
> -        synchronized (engine) {
> -            engine.getInstance(algorithm, provider, null);
> -            return new ExemptionMechanism((ExemptionMechanismSpi) engine.spi,
> -                    provider, algorithm);
> -        }
> -    }
> -
> -    /**
> -     * @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);
> -            }
> -            return true;
> -        } catch (InvalidKeyException e) {
> -            return false;
> -        } finally {
> -            initKey = initK;
> -        }
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final int getOutputSize(int inputLen) throws IllegalStateException {
> -        if (!isInit) {
> -            throw new IllegalStateException(NOTINITEMECH);
> -        }
> -        return spiImpl.engineGetOutputSize(inputLen);
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(Key key) throws InvalidKeyException,
> -            ExemptionMechanismException {
> -        spiImpl.engineInit(key);
> -        initKey = key;
> -        isInit = true;
> -    }
> -
> -    /**
> -     * @com.intel.drl.spec_ref
> -     *  
> -     */
> -    public final void init(Key key, AlgorithmParameters param)
> -            throws InvalidKeyException, InvalidAlgorithmParameterException,
> -            ExemptionMechanismException {
> -        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 {
> -        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();
> -    }
> -
> -    /**
> -     * @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;
> -    }
> -
> -    /**
> -     * @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];
> -        }
> -        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);
> -        }
> -    }
> +/*
> + *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
> + *
> + *  Licensed under the Apache License, Version 2.0 (the "License");
> + *  you may not use this file except in compliance with the License.
> + *  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +
> +/**
> +* @author Vera Y. Petrashkova
> +* @version $Revision$
> +*/
> +
> +package javax.crypto;
> +
> +import java.security.AlgorithmParameters;
> +import java.security.InvalidAlgorithmParameterException;
> +import java.security.InvalidKeyException;
> +import java.security.Key;
> +import java.security.NoSuchAlgorithmException;
> +import java.security.NoSuchProviderException;
> +import java.security.Provider;
> +import java.security.Security;
> +import java.security.spec.AlgorithmParameterSpec;
> +
> +import org.apache.harmony.security.fortress.Engine;
> +
> +
> +/**
> + * @com.intel.drl.spec_ref
> + * 
> + */
> +public class ExemptionMechanism {
> +
> +    // Store spi implementation service name
> +    private static final String SERVICE = "ExemptionMechanism";
> +
> +    // Used to access common engine functionality
> +    private static Engine engine = new Engine(SERVICE);
> +
> +    // Warning for reporting about not initializes ExemptionMechanism
> +    private static final String NOTINITEMECH = "ExemptionMechanism is not initialized";
> +
> +    // Store used provider
> +    private final Provider provider;
> +
> +    // Store used spi implementation
> +    private final ExemptionMechanismSpi spiImpl;
> +
> +    // Store mechanism name
> +    private final String mechanism;
> +
> +    // Store state (initialized or not)
> +    private boolean isInit;
> +
> +    // Store initKey value
> +    private Key initKey;
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    protected ExemptionMechanism(ExemptionMechanismSpi exmechSpi,
> +            Provider provider, String mechanism) {
> +        this.mechanism = mechanism;
> +        this.spiImpl = exmechSpi;
> +        this.provider = provider;
> +        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) {
> +            throw new NullPointerException("Algorithm is null");
> +        }
> +        synchronized (engine) {
> +            engine.getInstance(algorithm, null);
> +            return new ExemptionMechanism((ExemptionMechanismSpi) engine.spi,
> +                    engine.provider, algorithm);
> +        }
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final ExemptionMechanism getInstance(String algorithm,
> +            String provider) throws NoSuchAlgorithmException,
> +            NoSuchProviderException {
> +        if (algorithm == null) {
> +            throw new NullPointerException("Algorithm is null");
> +        }
> +        if (provider == null) {
> +            throw new IllegalArgumentException("Provider is null");
> +        }
> +        Provider impProvider = Security.getProvider(provider);
> +        if (impProvider == null) {
> +            throw new NoSuchProviderException(provider);
> +        }
> +        return getInstance(algorithm, impProvider);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public static final ExemptionMechanism getInstance(String algorithm,
> +            Provider provider) throws NoSuchAlgorithmException {
> +        if (algorithm == null) {
> +            throw new NullPointerException("Algorithm is null");
> +        }
> +        if (provider == null) {
> +            throw new IllegalArgumentException("Provider is null");
> +        }
> +        synchronized (engine) {
> +            engine.getInstance(algorithm, provider, null);
> +            return new ExemptionMechanism((ExemptionMechanismSpi) engine.spi,
> +                    provider, algorithm);
> +        }
> +    }
> +
> +    /**
> +     * @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);
> +            }
> +            return true;
> +        } catch (InvalidKeyException e) {
> +            return false;
> +        } finally {
> +            initKey = initK;
> +        }
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final int getOutputSize(int inputLen) throws IllegalStateException {
> +        if (!isInit) {
> +            throw new IllegalStateException(NOTINITEMECH);
> +        }
> +        return spiImpl.engineGetOutputSize(inputLen);
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(Key key) throws InvalidKeyException,
> +            ExemptionMechanismException {
> +        spiImpl.engineInit(key);
> +        initKey = key;
> +        isInit = true;
> +    }
> +
> +    /**
> +     * @com.intel.drl.spec_ref
> +     *  
> +     */
> +    public final void init(Key key, AlgorithmParameters param)
> +            throws InvalidKeyException, InvalidAlgorithmParameterException,
> +            ExemptionMechanismException {
> +        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 {
> +        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();
> +    }
> +
> +    /**
> +     * @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;
> +    }
> +
> +    /**
> +     * @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];
> +        }
> +        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);
> +        }
> +    }
>  }
> 
> 
> 

-- 

Tim Ellison (t.p.ellison@gmail.com)
IBM Java technology centre, UK.

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message