The Android KeyStore backed KeyPairGenerator can generate EC key
pairs, but it cannot be instantiated via the standard JCA approach of
KeyPairGenerator.getInstance("EC", "AndroidKeyStore"). Instead, the
user must invoke KeyPairGenerator.getInstance("RSA",
"AndroidKeyStore") and then tell it to generate an EC key pair.
This CL fixes this weirdness.
The fix requires the introduction of late resolution of key algorithm
and default key size. Prior to this CL, these parameters were resolved
prior to KeyPairGenerator initialization, inside KeyPairGeneratorSpec.
In this CL, these parameters are resolved during KeyPairGenerator
initialization. This is fine because KeyPairGeneratorSpec should be as
dumb as possible and all the logic should reside in KeyPairGenerator
and lower layers.
Bug: 19018089
Change-Id: I114502356e6c9691518cf05b6d9eb0920b4fe0b2
40 lines
1.3 KiB
Java
40 lines
1.3 KiB
Java
/*
|
|
* Copyright (C) 2012 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.security;
|
|
|
|
import java.security.Provider;
|
|
|
|
/**
|
|
* A provider focused on providing JCA interfaces for the Android KeyStore.
|
|
*
|
|
* @hide
|
|
*/
|
|
public class AndroidKeyStoreProvider extends Provider {
|
|
public static final String PROVIDER_NAME = "AndroidKeyStore";
|
|
|
|
public AndroidKeyStoreProvider() {
|
|
super(PROVIDER_NAME, 1.0, "Android KeyStore security provider");
|
|
|
|
// java.security.KeyStore
|
|
put("KeyStore." + AndroidKeyStore.NAME, AndroidKeyStore.class.getName());
|
|
|
|
// java.security.KeyPairGenerator
|
|
put("KeyPairGenerator.EC", AndroidKeyPairGenerator.EC.class.getName());
|
|
put("KeyPairGenerator.RSA", AndroidKeyPairGenerator.RSA.class.getName());
|
|
}
|
|
}
|