1ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin/* 2ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * Copyright (C) 2015 The Android Open Source Project 3ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * 4ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * Licensed under the Apache License, Version 2.0 (the "License"); 5ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * you may not use this file except in compliance with the License. 6ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * You may obtain a copy of the License at 7ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * 8ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * http://www.apache.org/licenses/LICENSE-2.0 9ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * 10ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * Unless required by applicable law or agreed to in writing, software 11ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * distributed under the License is distributed on an "AS IS" BASIS, 12ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * See the License for the specific language governing permissions and 14ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * limitations under the License. 15ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin */ 16ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 17ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubinpackage android.security.keystore; 18ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 19ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubinimport java.security.interfaces.ECPublicKey; 20ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubinimport java.security.spec.ECParameterSpec; 21ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubinimport java.security.spec.ECPoint; 22ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 23ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin/** 24ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * {@link ECPublicKey} backed by keystore. 25ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * 26ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin * @hide 27ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin */ 28ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubinpublic class AndroidKeyStoreECPublicKey extends AndroidKeyStorePublicKey implements ECPublicKey { 29ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 30ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin private final ECParameterSpec mParams; 31ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin private final ECPoint mW; 32ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 333876b1be27e3aefde9a72eb2e4f856e94fc5f946Alex Klyubin public AndroidKeyStoreECPublicKey(String alias, int uid, byte[] x509EncodedForm, ECParameterSpec params, 34ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin ECPoint w) { 353876b1be27e3aefde9a72eb2e4f856e94fc5f946Alex Klyubin super(alias, uid, KeyProperties.KEY_ALGORITHM_EC, x509EncodedForm); 36ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin mParams = params; 37ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin mW = w; 38ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin } 39ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 403876b1be27e3aefde9a72eb2e4f856e94fc5f946Alex Klyubin public AndroidKeyStoreECPublicKey(String alias, int uid, ECPublicKey info) { 413876b1be27e3aefde9a72eb2e4f856e94fc5f946Alex Klyubin this(alias, uid, info.getEncoded(), info.getParams(), info.getW()); 42ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin if (!"X.509".equalsIgnoreCase(info.getFormat())) { 43ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin throw new IllegalArgumentException( 44ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin "Unsupported key export format: " + info.getFormat()); 45ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin } 46ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin } 47ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 48ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin @Override 49ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin public ECParameterSpec getParams() { 50ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin return mParams; 51ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin } 52ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin 53ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin @Override 54ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin public ECPoint getW() { 55ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin return mW; 56ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin } 57ccbe88a505848896e59ef8eb4e8405037ba94e88Alex Klyubin}