1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_ANDROID_KEYSTORE_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_ANDROID_KEYSTORE_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <jni.h> 9*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include <string> 12*6777b538SAndroid Build Coastguard Worker #include <string_view> 13*6777b538SAndroid Build Coastguard Worker #include <vector> 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker #include "base/android/scoped_java_ref.h" 16*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // Misc functions to access the Android platform KeyStore. 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker namespace net::android { 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // Define a list of constants describing private key types. The 23*6777b538SAndroid Build Coastguard Worker // values are shared with Java through org.chromium.net.PrivateKeyType. 24*6777b538SAndroid Build Coastguard Worker // Example: PRIVATE_KEY_TYPE_RSA. 25*6777b538SAndroid Build Coastguard Worker // 26*6777b538SAndroid Build Coastguard Worker // A Java counterpart will be generated for this enum. 27*6777b538SAndroid Build Coastguard Worker // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net 28*6777b538SAndroid Build Coastguard Worker enum PrivateKeyType { 29*6777b538SAndroid Build Coastguard Worker PRIVATE_KEY_TYPE_RSA = 0, 30*6777b538SAndroid Build Coastguard Worker // Obsolete: PRIVATE_KEY_TYPE_DSA = 1, 31*6777b538SAndroid Build Coastguard Worker PRIVATE_KEY_TYPE_ECDSA = 2, 32*6777b538SAndroid Build Coastguard Worker PRIVATE_KEY_TYPE_INVALID = 255, 33*6777b538SAndroid Build Coastguard Worker }; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker // Returns the name of the class which implements the private key. 36*6777b538SAndroid Build Coastguard Worker std::string GetPrivateKeyClassName(const base::android::JavaRef<jobject>& key); 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // Returns whether |key| supports the signature algorithm |algorithm|. 39*6777b538SAndroid Build Coastguard Worker bool PrivateKeySupportsSignature(const base::android::JavaRef<jobject>& key, 40*6777b538SAndroid Build Coastguard Worker std::string_view algorithm); 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker // Returns whether |key| supports the encryption algorithm |algorithm|. 43*6777b538SAndroid Build Coastguard Worker bool PrivateKeySupportsCipher(const base::android::JavaRef<jobject>& key, 44*6777b538SAndroid Build Coastguard Worker std::string_view algorithm); 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // Compute the signature of a given input using a private key. For more 47*6777b538SAndroid Build Coastguard Worker // details, please read the comments for the signWithPrivateKey method in 48*6777b538SAndroid Build Coastguard Worker // AndroidKeyStore.java. 49*6777b538SAndroid Build Coastguard Worker // 50*6777b538SAndroid Build Coastguard Worker // |private_key| is a JNI reference for the private key. 51*6777b538SAndroid Build Coastguard Worker // |algorithm| is the name of the algorithm to sign. 52*6777b538SAndroid Build Coastguard Worker // |input| is the input to sign. 53*6777b538SAndroid Build Coastguard Worker // |signature| will receive the signature on success. 54*6777b538SAndroid Build Coastguard Worker // Returns true on success, false on failure. 55*6777b538SAndroid Build Coastguard Worker bool SignWithPrivateKey(const base::android::JavaRef<jobject>& private_key, 56*6777b538SAndroid Build Coastguard Worker std::string_view algorithm, 57*6777b538SAndroid Build Coastguard Worker base::span<const uint8_t> input, 58*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t>* signature); 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker // Encrypts a given input using a private key. For more details, please read the 61*6777b538SAndroid Build Coastguard Worker // comments for the encryptWithPrivateKey method in AndroidKeyStore.java. 62*6777b538SAndroid Build Coastguard Worker // 63*6777b538SAndroid Build Coastguard Worker // |private_key| is a JNI reference for the private key. 64*6777b538SAndroid Build Coastguard Worker // |algorithm| is the name of the algorithm to use. 65*6777b538SAndroid Build Coastguard Worker // |input| is the input to encrypt. 66*6777b538SAndroid Build Coastguard Worker // |ciphertext| will receive the ciphertext on success. 67*6777b538SAndroid Build Coastguard Worker // Returns true on success, false on failure. 68*6777b538SAndroid Build Coastguard Worker bool EncryptWithPrivateKey(const base::android::JavaRef<jobject>& private_key, 69*6777b538SAndroid Build Coastguard Worker std::string_view algorithm, 70*6777b538SAndroid Build Coastguard Worker base::span<const uint8_t> input, 71*6777b538SAndroid Build Coastguard Worker std::vector<uint8_t>* ciphertext); 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Worker } // namespace net::android 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker #endif // NET_ANDROID_KEYSTORE_H_ 76