ClientCertRequest.java revision b6aa97e0a0cd13846c148716fc0c7947422cea04
1b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun/*
2b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Copyright (C) 2014 The Android Open Source Project
3b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *
4b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Licensed under the Apache License, Version 2.0 (the "License");
5b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * you may not use this file except in compliance with the License.
6b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * You may obtain a copy of the License at
7b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *
8b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *      http://www.apache.org/licenses/LICENSE-2.0
9b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *
10b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Unless required by applicable law or agreed to in writing, software
11b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * distributed under the License is distributed on an "AS IS" BASIS,
12b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * See the License for the specific language governing permissions and
14b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * limitations under the License.
15b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */
16b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
17b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunpackage android.webkit;
18b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
19b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.Principal;
20b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.PrivateKey;
21b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.cert.X509Certificate;
22b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
23b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun/**
24b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * ClientCertRequest: The user receives an instance of this class as
25b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * a parameter of {@link WebViewClient#onReceivedClientCertRequest}.
26b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * The request includes the parameters to choose the client certificate,
27b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * such as the host name and the port number requesting the cert, the acceptable
28b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * key types and the principals.
29b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *
30b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * The user should call one of the interface methods to indicate how to deal
31b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * with the client certificate request. All methods should be called on
32b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * UI thread.
33b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *
34b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * WebView caches the {@link #proceed} and {@link #cancel} responses in memory
35b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * and uses them to handle future client certificate requests for the same
36b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * host/port pair. The user can clear the cached data using
37b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * {@link WebView#clearClientCertPreferences}.
38b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun *
39b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * TODO(sgurun) unhide
40b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * @hide
41b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */
42b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunpublic interface ClientCertRequest {
43b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
44b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Returns the acceptable types of asymmetric keys (can be null).
45b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
46b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public String[] getKeyTypes();
47b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
48b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
49b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Returns the acceptable certificate issuers for the certificate
50b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     *            matching the private key (can be null).
51b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
52b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public Principal[] getPrincipals();
53b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
54b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
55b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Returns the host name of the server requesting the certificate.
56b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
57b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public String getHost();
58b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
59b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
60b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Returns the port number of the server requesting the certificate.
61b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
62b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public int getPort();
63b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
64b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
65b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Proceed with the specified private key and client certificate chain.
66b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Remember the user's positive choice and use it for future requests.
67b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
68b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public void proceed(PrivateKey privateKey, X509Certificate[] chain);
69b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
70b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
71b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Ignore the request for now. Do not remember user's choice.
72b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
73b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public void ignore();
74b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun
75b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    /**
76b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * Cancel this request. Remember the user's choice and use it for
77b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     * future requests.
78b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun     */
79b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun    public void cancel();
80b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun}
81