Chromium Code Reviews| Index: net/android/keystore.h |
| diff --git a/net/android/keystore.h b/net/android/keystore.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e3032aabe77d9941d89218bfcd05c019d825f414 |
| --- /dev/null |
| +++ b/net/android/keystore.h |
| @@ -0,0 +1,79 @@ |
| +// Copyright (c) 2013 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. |
| + |
| +#ifndef NET_ANDROID_KEYSTORE_H |
| +#define NET_ANDROID_KEYSTORE_H |
| + |
| +#include <jni.h> |
| + |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/string_piece.h" |
| +#include "net/base/net_export.h" |
| +#include "net/base/ssl_client_cert_type.h" |
| + |
| +// Avoid including OpenSSL headers here. |
| +typedef struct evp_pkey_st EVP_PKEY; |
| + |
| +// Misc classes to access the Android platform KeyStore. |
| + |
| +namespace net { |
| +namespace android { |
| + |
| +// Define a list of constants describing private key types. The |
| +// values are shared with Java through org.chromium.net.PrivateKeyType. |
| +// Example: PRIVATE_KEY_TYPE_RSA. |
| +enum PrivateKeyType { |
| +#define DEFINE_PRIVATE_KEY_TYPE(name,value) PRIVATE_KEY_TYPE_ ## name = value, |
| +#include "net/android/private_key_type_list.h" |
| +#undef DEFINE_PRIVATE_KEY_TYPE |
| +}; |
| + |
| +// Compute the signature of a given message, using a private key. |
| +// This is used to implement OpenSSL's client certificate signing |
| +// callback, so must end up implementing the same thing than |
|
agl
2013/01/30 14:28:53
s/than/as/
digit1
2013/01/31 17:44:30
Done.
|
| +// RSA_sign() / DSA_sign() / ECDSA_sign(), depending on the key |
| +// type. |
| +// |
| +// |private_key| is a JNI reference for the private key. |
| +// |message| is the input message. |
|
agl
2013/01/30 14:28:53
ditto with the comment around |message| - prehashe
digit1
2013/01/31 17:44:30
I've clarified the comment. Thanks.
|
| +// |signature| will receive the signature on success. |
| +// Returns true on success, false on failure. |
| +// |
| +bool SignWithPrivateKey( |
| + jobject private_key, |
| + const base::StringPiece& message, |
| + std::vector<uint8>* signature); |
| + |
| + |
| +// Return the PrivateKeyType of a given private key. |
| +// |private_key| is a JNI reference for the private key. |
| +// Returns a PrivateKeyType, while will be CLIENT_CERT_INVALID_TYPE |
| +// on error. |
| +PrivateKeyType GetPrivateKeyType(jobject private_key); |
| + |
| +// Returns a handle to the system EVP_PKEY object used to back a given |
| +// private_key object. This must *only* be used for RSA private keys |
| +// on Android < 4.2. Technically, this is only guaranteed to work if |
| +// the system image contains a vanilla implementation of the Java |
| +// API frameworks based on Harmony + OpenSSL. |
| +// |
| +// |private_key| is a JNI reference for the private key. |
| +// Returns an EVP_PKEY* handle, or NULL in case of error. |
| +// |
| +// Note: Despite its name and return type, this function doesn't know |
| +// anything about OpenSSL, it just type-casts a system pointer that |
| +// is passed as an int through JNI. As such, it never increments |
| +// the returned key's reference count. |
| +EVP_PKEY* GetOpenSSLSystemHandleForPrivateKey(jobject private_key); |
| + |
| +// Register JNI methods |
| +NET_EXPORT bool RegisterKeyStore(JNIEnv* env); |
| + |
| +} // namespace android |
| +} // namespace net |
| + |
| +#endif // NET_ANDROID_KEYSTORE_H |