|
Padding |
|
1 /* $RCSfile: Padding.java,v $ 2 * $Revision: 1.6 $ 3 * $Date: 2002/11/23 11:09:57 $ 4 * $Author: uwe_guenther $ 5 * $State: Exp $ 6 * 7 * Created on August 19, 2001 4:20 PM 8 * 9 * Copyright (C) 2001 Uwe Guenther <uwe@cscc.de> 10 * 11 * This file is part of the jhbci JCE-ServiceProvider. The jhbci JCE- 12 * ServiceProvider is a library, written in JavaTM, that should be 13 * used in HBCI banking applications (clients and may be servers), 14 * to do cryptographic operations. 15 * 16 * The jhbci library is free software; you can redistribute it and/or 17 * modify it under the terms of the GNU Lesser General Public 18 * License as published by the Free Software Foundation; either 19 * version 2.1 of the License, or (at your option) any later version. 20 * 21 * The jhbci library is distributed in the hope that it will be useful, 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24 * Lesser General Public License for more details. 25 * 26 * You should have received a copy of the GNU Lesser General Public 27 * License along with this library; if not, write to the Free Software 28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 29 * 30 */ 31 32 package de.cscc.crypto.provider; 33 34 import javax.crypto.BadPaddingException; 35 import javax.crypto.IllegalBlockSizeException; 36 import javax.crypto.ShortBufferException; 37 38 39 /** 40 * BlockCipherPadding Class. 41 * 42 * @author <a href=mailto:uwe@cscc.de>Uwe Günther</a> 43 * @version $Revision: 1.6 $ 44 */ 45 abstract class Padding { 46 47 /** 48 * Get the block size of the underlying mode object. 49 * 50 * @return the block size of the underlying mode object. 51 */ 52 public abstract int getBlockSize(); 53 54 /** 55 * Calculates the output size for to returned byte array, or 56 * the size for the output array that will 57 * be passed through updateEncryption(.....). 58 * 59 * @param inputLength the input length, that will be base for the 60 * calculation. 61 * @return the size for to returned byte array, or 62 * the size for the output array that will 63 * be passed through updateEncryption(.....). 64 */ 65 public abstract int getUpdateEncryptionOutputSize(int inputLength); 66 67 /** 68 * Continues a multipart encryption operation, processing 69 * another data part. 70 * 71 * @param input plainText that should be encrypted. 72 * @param inputOffset the offset in input where the input starts. 73 * @param inputLength the input length. 74 * @return the encrypted data, if there enough (at least one block size), 75 * or new byte[0] otherwise. 76 */ 77 public abstract byte[] updateEncryption(byte[] input, 78 int inputOffset, 79 int inputLength); 80 81 /** 82 * Continues a multipart encryption operation, processing 83 * another data part. 84 * 85 * @param input plainText that should be encrypted. 86 * @param inputOffset the offset in input where the input starts. 87 * @param inputLength the input length. 88 * @param output the buffer for the encrypted result. 89 * @param outputOffset the offset in output where the result is stored. 90 * @throws ShortBufferException if the usable range in the output buffer is 91 * to less. This means that the usable range must at least 92 * getUpdateEncryptionOutputSize(inputLength) bytes large. 93 * @return the number of bytes stored in output. 94 */ 95 public abstract int updateEncryption(byte[] input, int inputOffset, 96 int inputLength, byte[] output, int outputOffset) 97 throws ShortBufferException; 98 99 /** 100 * Calculates the output size for to returned byte array, or 101 * the size for the output array that will 102 * be passed through doFinalEncryption(.....). 103 * 104 * @param inputLength the input length, that will be base for the 105 * calculation. 106 * @return the size for to returned byte array, or 107 * the size for the output array that will 108 * be passed through doFinalEncryption(.....). 109 */ 110 public abstract int getDoFinalEncryptionOutputSize(int inputLength); 111 112 /** 113 * Encrypts data in a single part operation, or finishes 114 * a multipart encryption. 115 * 116 * @return the padded and encrypted data. 117 * @param input plainText that should be encrypted. 118 * @param inputOffset the offset in input where the input starts. 119 * @param inputLength the input length. 120 * @throws IllegalBlockSizeException if the concret padding subclass implemented as 121 * NoPadding and the final number of bytes are not 122 * a multiple of block size of the underlying operation mode. 123 */ 124 public abstract byte[] doFinalEncryption(byte[] input, int inputOffset, 125 int inputLength) throws IllegalBlockSizeException; 126 127 /** 128 * Encrypts data in a single part operation, or finishes 129 * a multipart encryption. 130 * 131 * @return the number of bytes stored in output. 132 * @param input plainText that should be encrypted. 133 * @param inputOffset the offset in input where the input starts. 134 * @param inputLength the input length. 135 * @param output the buffer for the padded and encrypted result. 136 * @param outputOffset the offset in output where the result is stored. 137 * @throws IllegalBlockSizeException if the concret padding subclass implemented as 138 * NoPadding and the final number of bytes are not 139 * a multiple of block size of the underlying operation mode. 140 * @throws ShortBufferException if the usable range in the output buffer is 141 * to less. 142 * This means that the usable range must at least 143 * getDoFinalEncryptionOutputSize(inputLength) bytes large. 144 */ 145 public abstract int doFinalEncryption(byte[] input, int inputOffset, 146 int inputLength, byte[] output, int outputOffset) 147 throws IllegalBlockSizeException, ShortBufferException; 148 149 /** 150 * Calculates the output size for to returned byte array, or 151 * the size for the output array that will 152 * be passed through updateDecryption(.....). 153 * 154 * @param inputLength the input length, that will be base for the 155 * calculation. 156 * @return the size for to returned byte array, or 157 * the size for the output array that will 158 * be passed through updateDecryption(.....). 159 */ 160 public abstract int getUpdateDecryptionOutputSize(int inputLength); 161 162 /** 163 * Continues a multipart decryption operation, processing 164 * another data part. 165 * @param input padded cipherText that should be decrypted. 166 * @param inputOffset the offset in input where the input starts. 167 * @param inputLength the input length. 168 * @return the decrypted data, if there enough (at least one block size + 169 * one byte), or byte[0] otherwise. 170 */ 171 public abstract byte[] updateDecryption(byte[] input, int inputOffset, 172 int inputLength); 173 174 /** 175 * Continues a multipart decryption operation, processing 176 * another data part. 177 * 178 * @param input padded cipherText that should be decrypted. 179 * @param inputOffset the offset in input where the input starts. 180 * @param inputLength the input length. 181 * @param output the buffer for the decrypted result. 182 * @param outputOffset the offset in output where the result is stored. 183 * @throws ShortBufferException if the usable range in the output buffer is 184 * to less. 185 * This means that the usable range must at least 186 * getUpdateDecryptionOutputSize(inputLength) bytes large. 187 * @return the number of bytes stored in output. 188 */ 189 public abstract int updateDecryption(byte[] input, int inputOffset, 190 int inputLength, byte[] output, int outputOffset) 191 throws ShortBufferException; 192 193 /** 194 * Calculates the output size for to returned byte array, or 195 * the size for the output array that will 196 * be passed through doFinalDecryption(.....). 197 * 198 * @param inputLength the input length, that will be base for the 199 * calculation. 200 * @return the size for to returned byte array, or 201 * the size for the output array that will 202 * be passed through doFinalDecryption(.....). 203 */ 204 public abstract int getDoFinalDecryptionOutputSize(int inputLength); 205 206 207 /** 208 * Decrypts data in a single part operation, or finishes 209 * a multipart decryption. 210 * 211 * @param input padded cipherText that should be decrypted. 212 * @param inputOffset the offset in input where the input starts. 213 * @param inputLength the input length. 214 * @throws IllegalBlockSizeException if the final size of processed bytes 215 * not a multiple of block size. 216 * @throws BadPaddingException if the decrypted padCount not in the range 217 * between 1 and block size. 218 * @return the unpadded and decrypted data. 219 */ 220 public abstract byte[] doFinalDecryption(byte[] input, int inputOffset, 221 int inputLength) 222 throws IllegalBlockSizeException, BadPaddingException; 223 224 /** 225 * Decrypts data in a single part operation, or finishes 226 * a multipart decryption. 227 * 228 * @param input padded cipherText that should be decrypted. 229 * @param inputOffset the offset in input where the input starts. 230 * @param inputLength the input length. 231 * @param output the buffer for the unpadded and decrypted result. 232 * @param outputOffset the offset in output where the result is stored. 233 * @throws IllegalBlockSizeException if the final size of processed bytes 234 * not a multiple of block size. 235 * @throws BadPaddingException if the decrypted padCount not in the range 236 * between 1 and block size. 237 * @throws ShortBufferException if the usable range in the output buffer is 238 * to less. 239 * This means that the usable range must at least 240 * getDoFinalDecryptionOutputSize(inputLength) bytes large. 241 * @return the number of bytes stored in output. 242 */ 243 public abstract int doFinalDecryption(byte[] input, int inputOffset, 244 int inputLength, byte[] output, int outputOffset) 245 throws IllegalBlockSizeException, BadPaddingException, 246 ShortBufferException; 247 248 } 249
|
Padding |
|