140 lines
4.2 KiB
Java
Executable File
140 lines
4.2 KiB
Java
Executable File
// Copyright 2014 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
package org.chromium.net;
|
|
|
|
import android.os.RemoteException;
|
|
import android.util.Log;
|
|
|
|
/**
|
|
* Provides a remoted implementation of AndroidKeyStore where all calls are forwarded via
|
|
* binder to an external process.
|
|
*/
|
|
public class RemoteAndroidKeyStore implements AndroidKeyStore {
|
|
|
|
private static final String TAG = "AndroidKeyStoreRemoteImpl";
|
|
|
|
private static class RemotePrivateKey implements AndroidPrivateKey {
|
|
// Reference to the key on a remote store.
|
|
final int mHandle;
|
|
// Key store handling this key.
|
|
final RemoteAndroidKeyStore mStore;
|
|
|
|
RemotePrivateKey(int handle, RemoteAndroidKeyStore store) {
|
|
mHandle = handle;
|
|
mStore = store;
|
|
}
|
|
|
|
public int getHandle() {
|
|
return mHandle;
|
|
}
|
|
|
|
@Override
|
|
public AndroidKeyStore getKeyStore() {
|
|
return mStore;
|
|
}
|
|
}
|
|
|
|
private final IRemoteAndroidKeyStore mRemoteManager;
|
|
|
|
public RemoteAndroidKeyStore(IRemoteAndroidKeyStore manager) {
|
|
mRemoteManager = manager;
|
|
}
|
|
|
|
@Override
|
|
public byte[] getRSAKeyModulus(AndroidPrivateKey key) {
|
|
RemotePrivateKey remoteKey = (RemotePrivateKey) key;
|
|
try {
|
|
Log.d(TAG, "getRSAKeyModulus");
|
|
return mRemoteManager.getRSAKeyModulus(remoteKey.getHandle());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public byte[] getDSAKeyParamQ(AndroidPrivateKey key) {
|
|
RemotePrivateKey remoteKey = (RemotePrivateKey) key;
|
|
try {
|
|
Log.d(TAG, "getDSAKeyParamQ");
|
|
return mRemoteManager.getDSAKeyParamQ(remoteKey.getHandle());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public byte[] getECKeyOrder(AndroidPrivateKey key) {
|
|
RemotePrivateKey remoteKey = (RemotePrivateKey) key;
|
|
try {
|
|
Log.d(TAG, "getECKeyOrder");
|
|
return mRemoteManager.getECKeyOrder(remoteKey.getHandle());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public byte[] rawSignDigestWithPrivateKey(AndroidPrivateKey key, byte[] message) {
|
|
RemotePrivateKey remoteKey = (RemotePrivateKey) key;
|
|
try {
|
|
Log.d(TAG, "rawSignDigestWithPrivateKey");
|
|
return mRemoteManager.rawSignDigestWithPrivateKey(remoteKey.getHandle(), message);
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getPrivateKeyType(AndroidPrivateKey key) {
|
|
RemotePrivateKey remoteKey = (RemotePrivateKey) key;
|
|
try {
|
|
Log.d(TAG, "getPrivateKeyType");
|
|
return mRemoteManager.getPrivateKeyType(remoteKey.getHandle());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public byte[] getPrivateKeyEncodedBytes(AndroidPrivateKey key) {
|
|
// This should not be called as it's only for older versions of Android.
|
|
assert false;
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public int getOpenSSLHandleForPrivateKey(AndroidPrivateKey privateKey) {
|
|
// This should not be called as it's only for older versions of Android.
|
|
assert false;
|
|
return 0;
|
|
}
|
|
|
|
public AndroidPrivateKey createKey(String alias) {
|
|
try {
|
|
int handle = mRemoteManager.getPrivateKeyHandle(alias);
|
|
return new RemotePrivateKey(handle, this);
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void releaseKey(AndroidPrivateKey key) {
|
|
RemotePrivateKey remoteKey = (RemotePrivateKey) key;
|
|
try {
|
|
Log.d(TAG, "releaseKey");
|
|
mRemoteManager.releaseKey(remoteKey.getHandle());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|