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 Projectpackage javax.crypto; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParameters; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The <i>Service Provider Interface</i> (<b>SPI</b>) definition for the {@code 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ExemptionMechanism} class. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class ExemptionMechanismSpi { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code ExemptionMechanismSpi} instance. 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ExemptionMechanismSpi() { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates the result key blob for this exemption mechanism. 40ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result key blob for this exemption mechanism. 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ExemptionMechanismException 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if error(s) occur during generation. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract byte[] engineGenExemptionBlob() 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws ExemptionMechanismException; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates the result key blob for this exemption mechanism and stores it 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * into the {@code output} buffer at offset {@code outputOffset}. 51ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param output 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the output buffer for the result key blob. 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param outputOffset 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset in the output buffer to start. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of bytes written to the {@code output} buffer. 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ShortBufferException 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the provided buffer is too small for the result key blob. 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ExemptionMechanismException 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if error(s) occur during generation. 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract int engineGenExemptionBlob(byte[] output, 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int outputOffset) throws ShortBufferException, 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the size in bytes for the output buffer needed to hold the output 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the next {@link #engineGenExemptionBlob} call, given the specified 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code inputLen} (in bytes). 70ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inputLen 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified input length (in bytes). 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the size in bytes for the output buffer. 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract int engineGetOutputSize(int inputLen); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code ExemptionMechanism} instance with the specified 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * key. 80ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to initialize this instance with. 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidKeyException 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the key cannot be used to initialize this mechanism. 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ExemptionMechanismException 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if error(s) occur during initialization. 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void engineInit(Key key) throws InvalidKeyException, 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException; 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code ExemptionMechanism} instance with the specified 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * key and algorithm parameters. 94ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to initialize this instance with. 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameters for this exemption mechanism algorithm. 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidKeyException 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the key cannot be used to initialize this mechanism. 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidAlgorithmParameterException 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the parameters cannot be used to initialize this 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * mechanism. 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ExemptionMechanismException 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if error(s) occur during initialization. 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void engineInit(Key key, AlgorithmParameters params) 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidKeyException, InvalidAlgorithmParameterException, 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code ExemptionMechanism} instance with the specified 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * key and algorithm parameters. 114ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to initialize this instance with. 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameters for this exemption mechanism algorithm. 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidKeyException 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the key cannot be used to initialize this mechanism. 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidAlgorithmParameterException 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the the parameters cannot be used to initialize this 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * mechanism. 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ExemptionMechanismException 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if error(s) occur during initialization. 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void engineInit(Key key, AlgorithmParameterSpec params) 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidKeyException, InvalidAlgorithmParameterException, 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ExemptionMechanismException; 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}