xref: /aosp_15_r20/external/cronet/net/android/keystore.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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