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}