01: /*
02:
03: Derby - Class org.apache.derby.iapi.services.crypto.CipherProvider
04:
05: Licensed to the Apache Software Foundation (ASF) under one or more
06: contributor license agreements. See the NOTICE file distributed with
07: this work for additional information regarding copyright ownership.
08: The ASF licenses this file to you under the Apache License, Version 2.0
09: (the "License"); you may not use this file except in compliance with
10: the License. You may obtain a copy of the License at
11:
12: http://www.apache.org/licenses/LICENSE-2.0
13:
14: Unless required by applicable law or agreed to in writing, software
15: distributed under the License is distributed on an "AS IS" BASIS,
16: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: See the License for the specific language governing permissions and
18: limitations under the License.
19:
20: */
21:
22: package org.apache.derby.iapi.services.crypto;
23:
24: import java.security.Key;
25:
26: import org.apache.derby.iapi.error.StandardException;
27:
28: /**
29: A CipherProvider is a wrapper for a Cipher class in JCE.
30:
31: This service is only available when run on JDK1.2 or beyond.
32: To use this service, either the SunJCE or an alternative clean room
33: implementation of the JCE must be installed.
34:
35: To use a CipherProvider to encrypt or decrypt, it needs 3 things:
36: 1) A CipherProvider that is initialized to ENCRYPT or DECRYPT
37: 2) A secret Key for the encryption/decryption
38: 3) An Initialization Vector (IvParameterSpec) that is used to create some
39: randomness in the encryption
40:
41: See $WS/docs/funcspec/mulan/configurableEncryption.html
42:
43: See http://java.sun.com/products/JDK/1.1/docs/guide/security/CryptoSpec.html
44: See http://java.sun.com/products/JDK/1.2/docs/guide/security/CryptoSpec.html
45: See http://java.sun.com/products/jdk/1.2/jce/index.html
46: */
47:
48: public interface CipherProvider {
49:
50: /**
51: Encrypt data - use only with Cipher that has been initialized with
52: CipherFactory.ENCRYPT.
53:
54: @return The number of bytes stored in ciphertext.
55:
56: @param cleartext the byte array containing the cleartext
57: @param offset encrypt from this byte offset in the cleartext
58: @param length encrypt this many bytes starting from offset
59: @param ciphertext the byte array to store the ciphertext
60: @param outputOffset the offset into the ciphertext array the output
61: should go
62:
63: If cleartext and ciphertext are the same array, caller must be careful
64: to not overwrite the cleartext before it is scrambled.
65:
66: @exception StandardException Standard Cloudscape Error Policy
67: */
68: int encrypt(byte[] cleartext, int offset, int length,
69: byte[] ciphertext, int outputOffset)
70: throws StandardException;
71:
72: /**
73: Decrypt data - use only with Cipher that has been initialized with
74: CipherFactory.DECRYPT.
75:
76: @return The number of bytes stored in cleartext.
77:
78: @param ciphertext the byte array containing the ciphertext
79: @param offset decrypt from this byte offset in the ciphertext
80: @param length decrypt this many bytes starting from offset
81: @param cleartext the byte array to store the cleartext
82: @param outputOffset the offset into the cleartext array the output
83: should go
84:
85: If cleartext and ciphertext are the same array, caller must be careful
86: to not overwrite the ciphertext before it is un-scrambled.
87:
88: @exception StandardException Standard Cloudscape Error Policy
89: */
90: int decrypt(byte[] ciphertext, int offset, int length,
91: byte[] cleartext, int outputOffset)
92: throws StandardException;
93:
94: /**
95: Returns the encryption block size used during creation of the encrypted database
96: */
97: public int getEncryptionBlockSize();
98: }
|