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