1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Boris V. Kuznetsov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.internal; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParameters; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.BadPaddingException; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.CipherSpi; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.IllegalBlockSizeException; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.NoSuchPaddingException; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.ShortBufferException; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CipherSpi implementation for javax.crypto.NullCipher 41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class NullCipherSpi extends CipherSpi { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void engineSetMode(String arg0) throws NoSuchAlgorithmException { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do nothing 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void engineSetPadding(String arg0) throws NoSuchPaddingException { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do nothing 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineGetBlockSize() { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 1; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineGetOutputSize(int inputLen) { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return inputLen; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] engineGetIV() { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new byte[8]; // compatible with RI 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public AlgorithmParameters engineGetParameters() { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void engineInit(int opmode, Key key, SecureRandom random) 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidKeyException { 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do nothing 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void engineInit(int opmode, Key key, AlgorithmParameterSpec params, 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom random) throws InvalidKeyException, 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidAlgorithmParameterException { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do nothing 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void engineInit(int opmode, Key key, AlgorithmParameters params, 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom random) throws InvalidKeyException, 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidAlgorithmParameterException { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Do nothing 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] engineUpdate(byte[] input, int inputOffset, int inputLen) { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (input == null) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] result = new byte[inputLen]; 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(input, inputOffset, result, 0, inputLen); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineUpdate(byte[] input, int inputOffset, int inputLen, 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] output, int outputOffset) throws ShortBufferException { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (input == null) { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(input, inputOffset, output, outputOffset, inputLen); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return inputLen; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineUpdate(ByteBuffer input, ByteBuffer output) 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws ShortBufferException { 11886acc043d3334651ee26c65467d78d6cefedd397Kenny Root if (input == null) { 11986acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("input == null"); 12086acc043d3334651ee26c65467d78d6cefedd397Kenny Root } else if (output == null) { 12186acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("output == null"); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int result = input.limit() - input.position(); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project output.put(input); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (java.nio.BufferOverflowException e) { 12780a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes throw new ShortBufferException("output buffer too small"); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IllegalBlockSizeException, BadPaddingException { 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (input == null) { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return engineUpdate(input, inputOffset, inputLen); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineDoFinal(byte[] input, int inputOffset, int inputLen, 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] output, int outputOffset) throws ShortBufferException, 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalBlockSizeException, BadPaddingException { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int result = engineUpdate(input, inputOffset, inputLen, output, 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project outputOffset); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineDoFinal(ByteBuffer input, ByteBuffer output) 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws ShortBufferException, IllegalBlockSizeException, 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BadPaddingException { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return engineUpdate(input, output); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 15880a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes public byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException { 15980a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes throw new UnsupportedOperationException(); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int wrappedKeyType) throws InvalidKeyException, 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException { 16680a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes throw new UnsupportedOperationException(); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int engineGetKeySize(Key key) throws InvalidKeyException { 17180a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes throw new UnsupportedOperationException(); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 17380a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes} 174