1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.security;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.InvalidParameterSpecException;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code AlgorithmParametersSpi} is the Service Provider Interface (SPI)
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * definition for {@code AlgorithmParameters}.
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see AlgorithmParameters
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class AlgorithmParametersSpi {
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Initializes this {@code AlgorithmParametersSpi} with the specified
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code AlgorithmParameterSpec}.
35e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param paramSpec
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the parameter specification.
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidParameterSpecException
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if this {@code AlgorithmParametersSpi} has already been
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             initialized or the given {@code paramSpec} is not appropriate
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             for initializing this {@code AlgorithmParametersSpi}.
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract void engineInit(AlgorithmParameterSpec paramSpec)
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws InvalidParameterSpecException;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Initializes this {@code AlgorithmParametersSpi} with the specified
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code byte[]} using the default decoding format for parameters. The
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * default encoding format is ASN.1.
50e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param params
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the encoded parameters.
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if this {@code AlgorithmParametersSpi} has already been
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             initialized, or the parameter could not be encoded.
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract void engineInit(byte[] params) throws IOException;
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Initializes this {@code AlgorithmParametersSpi} with the specified
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code byte[]} using the specified decoding format.
62e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param params
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the encoded parameters.
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the decoding format.
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if this {@code AlgorithmParametersSpi} has already been
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             initialized, or the parameter could not be encoded.
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract void engineInit(byte[] params, String format)
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the {@code AlgorithmParameterSpec} for this {@code
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * AlgorithmParametersSpi}.
77e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param paramSpec
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the type of the parameter specification in which this
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            parameters should be converted.
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the {@code AlgorithmParameterSpec} for this {@code
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         AlgorithmParametersSpi}.
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidParameterSpecException
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if this {@code AlgorithmParametersSpi} has already been
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             initialized, or if this parameters could not be converted to
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             the specified class.
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract <T extends AlgorithmParameterSpec> T engineGetParameterSpec(
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Class<T> paramSpec) throws InvalidParameterSpecException;
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the parameters in their default encoding format. The default
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encoding format is ASN.1.
94e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the encoded parameters.
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if this {@code AlgorithmParametersSpi} has already been
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             initialized, or if this parameters could not be encoded.
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract byte[] engineGetEncoded() throws IOException;
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the parameters in the specified encoding format.
104e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the encoding format.
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the encoded parameters.
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IOException
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if this {@code AlgorithmParametersSpi} has already been
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             initialized, or if this parameters could not be encoded.
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract byte[] engineGetEncoded(String format)
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException;
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a string containing a concise, human-readable description of this
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code AlgorithmParametersSpi}.
118e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes     *
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a printable representation for this {@code
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         AlgorithmParametersSpi}.
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected abstract String engineToString();
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
124e7637fe9734c4e3bece51db6773505c04e49fabaElliott Hughes}
125