14ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon/*
24ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  Licensed to the Apache Software Foundation (ASF) under one or more
34ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  contributor license agreements.  See the NOTICE file distributed with
44ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  this work for additional information regarding copyright ownership.
54ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  The ASF licenses this file to You under the Apache License, Version 2.0
64ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  (the "License"); you may not use this file except in compliance with
74ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  the License.  You may obtain a copy of the License at
84ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *
94ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *     http://www.apache.org/licenses/LICENSE-2.0
104ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *
114ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  Unless required by applicable law or agreed to in writing, software
124ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  distributed under the License is distributed on an "AS IS" BASIS,
134ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  See the License for the specific language governing permissions and
154ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *  limitations under the License.
164ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon */
174ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
184ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon/**
194ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon* @author Boris V. Kuznetsov
204ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon* @version $Revision$
214ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon*/
224ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
234ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonpackage org.apache.harmony.crypto.internal;
244ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
254ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.nio.ByteBuffer;
264ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.AlgorithmParameters;
274ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.InvalidAlgorithmParameterException;
284ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.InvalidKeyException;
294ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.Key;
304ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.NoSuchAlgorithmException;
314ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.SecureRandom;
324ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport java.security.spec.AlgorithmParameterSpec;
334ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport javax.crypto.BadPaddingException;
344ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport javax.crypto.CipherSpi;
354ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport javax.crypto.IllegalBlockSizeException;
364ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport javax.crypto.NoSuchPaddingException;
374ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonimport javax.crypto.ShortBufferException;
384ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
394ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon/**
404ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon * CipherSpi implementation for javax.crypto.NullCipher
414ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon *
424ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon */
434ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdonpublic class NullCipherSpi extends CipherSpi {
444ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
454ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
464ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public void engineSetMode(String arg0) throws NoSuchAlgorithmException {
474ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        // Do nothing
484ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
494ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
504ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
514ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public void engineSetPadding(String arg0) throws NoSuchPaddingException {
524ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        // Do nothing
534ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
544ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
554ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
564ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineGetBlockSize() {
574ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return 1;
584ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
594ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
604ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
614ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineGetOutputSize(int inputLen) {
624ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return inputLen;
634ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
644ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
654ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
664ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public byte[] engineGetIV() {
674ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return new byte[8]; // compatible with RI
684ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
694ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
704ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
714ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public AlgorithmParameters engineGetParameters() {
724ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return null;
734ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
744ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
754ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
764ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public void engineInit(int opmode, Key key, SecureRandom random)
774ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throws InvalidKeyException {
784ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        // Do nothing
794ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
804ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
814ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
824ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public void engineInit(int opmode, Key key, AlgorithmParameterSpec params,
834ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            SecureRandom random) throws InvalidKeyException,
844ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            InvalidAlgorithmParameterException {
854ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        // Do nothing
864ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
874ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
884ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
894ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public void engineInit(int opmode, Key key, AlgorithmParameters params,
904ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            SecureRandom random) throws InvalidKeyException,
914ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            InvalidAlgorithmParameterException {
924ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        // Do nothing
934ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
944ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
954ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
964ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public byte[] engineUpdate(byte[] input, int inputOffset, int inputLen) {
974ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        if (input == null) {
984ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            return null;
994ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        }
1004ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        byte[] result = new byte[inputLen];
1014ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        System.arraycopy(input, inputOffset, result, 0, inputLen);
1024ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return result;
1034ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1044ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1054ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1064ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineUpdate(byte[] input, int inputOffset, int inputLen,
1074ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            byte[] output, int outputOffset) throws ShortBufferException {
1084ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        if (input == null) {
1094ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            return 0;
1104ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        }
1114ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        System.arraycopy(input, inputOffset, output, outputOffset, inputLen);
1124ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return inputLen;
1134ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1144ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1154ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1164ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineUpdate(ByteBuffer input, ByteBuffer output)
1174ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throws ShortBufferException {
1184ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        if (input == null) {
1194ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throw new NullPointerException("input == null");
1204ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        } else if (output == null) {
1214ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throw new NullPointerException("output == null");
1224ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        }
1234ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        int result = input.limit() - input.position();
1244ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        try {
1254ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            output.put(input);
1264ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        } catch (java.nio.BufferOverflowException e) {
1274ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throw new ShortBufferException("output buffer too small");
1284ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        }
1294ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return result;
1304ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1314ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1324ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1334ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen)
1344ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throws IllegalBlockSizeException, BadPaddingException {
1354ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        if (input == null) {
1364ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            return null;
1374ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        }
1384ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return engineUpdate(input, inputOffset, inputLen);
1394ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1404ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1414ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1424ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineDoFinal(byte[] input, int inputOffset, int inputLen,
1434ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            byte[] output, int outputOffset) throws ShortBufferException,
1444ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            IllegalBlockSizeException, BadPaddingException {
1454ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        int result = engineUpdate(input, inputOffset, inputLen, output,
1464ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon                outputOffset);
1474ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return result;
1484ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1494ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1504ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1514ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineDoFinal(ByteBuffer input, ByteBuffer output)
1524ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            throws ShortBufferException, IllegalBlockSizeException,
1534ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            BadPaddingException {
1544ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        return engineUpdate(input, output);
1554ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1564ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1574ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1584ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException {
1594ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        throw new UnsupportedOperationException();
1604ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1614ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1624ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1634ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm,
1644ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            int wrappedKeyType) throws InvalidKeyException,
1654ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon            NoSuchAlgorithmException {
1664ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        throw new UnsupportedOperationException();
1674ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1684ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon
1694ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    @Override
1704ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    public int engineGetKeySize(Key key) throws InvalidKeyException {
1714ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon        throw new UnsupportedOperationException();
1724ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon    }
1734ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon}
1744ecd51a794c5a2af1a5a838f22997b4e361acb8bMartin Hibdon