// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


// This file is autogenerated by
//     third_party/jni_zero/jni_generator.py
// For
//     android/net/connectivity/org/chromium/net/AndroidKeyStore

#ifndef android_net_connectivity_org_chromium_net_AndroidKeyStore_JNI
#define android_net_connectivity_org_chromium_net_AndroidKeyStore_JNI

#include <jni.h>

#include "third_party/jni_zero/jni_export.h"
#include "third_party/jni_zero/jni_zero_helper.h"


// Step 1: Forward declarations.

JNI_ZERO_COMPONENT_BUILD_EXPORT extern const char
    kClassPath_android_net_connectivity_org_chromium_net_AndroidKeyStore[];
const char kClassPath_android_net_connectivity_org_chromium_net_AndroidKeyStore[] =
    "android/net/connectivity/org/chromium/net/AndroidKeyStore";
// Leaking this jclass as we cannot use LazyInstance from some threads.
JNI_ZERO_COMPONENT_BUILD_EXPORT std::atomic<jclass>
    g_android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(nullptr);
#ifndef android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz_defined
#define android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz_defined
inline jclass android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(JNIEnv* env) {
  return base::android::LazyGetClass(env,
      kClassPath_android_net_connectivity_org_chromium_net_AndroidKeyStore,
      &g_android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz);
}
#endif


// Step 2: Constants (optional).


// Step 3: Method stubs.
namespace net {
namespace android {


static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_AndroidKeyStore_encryptWithPrivateKey3(nullptr);
static base::android::ScopedJavaLocalRef<jbyteArray>
    Java_AndroidKeyStore_encryptWithPrivateKey(JNIEnv* env, const base::android::JavaRef<jobject>&
    privateKey,
    const base::android::JavaRef<jstring>& algorithm,
    const base::android::JavaRef<jbyteArray>& message) {
  jclass clazz = android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env);
  CHECK_CLAZZ(env, clazz,
      android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env), nullptr);

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_STATIC>(
          env,
          clazz,
          "encryptWithPrivateKey",
          "(Ljava/security/PrivateKey;Ljava/lang/String;[B)[B",
          &g_android_net_connectivity_org_chromium_net_AndroidKeyStore_encryptWithPrivateKey3);

  jbyteArray ret =
      static_cast<jbyteArray>(env->CallStaticObjectMethod(clazz,
          call_context.base.method_id, privateKey.obj(), algorithm.obj(), message.obj()));
  return base::android::ScopedJavaLocalRef<jbyteArray>(env, ret);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_AndroidKeyStore_getPrivateKeyClassName1(nullptr);
static base::android::ScopedJavaLocalRef<jstring>
    Java_AndroidKeyStore_getPrivateKeyClassName(JNIEnv* env, const base::android::JavaRef<jobject>&
    privateKey) {
  jclass clazz = android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env);
  CHECK_CLAZZ(env, clazz,
      android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env), nullptr);

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_STATIC>(
          env,
          clazz,
          "getPrivateKeyClassName",
          "(Ljava/security/PrivateKey;)Ljava/lang/String;",
          &g_android_net_connectivity_org_chromium_net_AndroidKeyStore_getPrivateKeyClassName1);

  jstring ret =
      static_cast<jstring>(env->CallStaticObjectMethod(clazz,
          call_context.base.method_id, privateKey.obj()));
  return base::android::ScopedJavaLocalRef<jstring>(env, ret);
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_AndroidKeyStore_privateKeySupportsCipher2(nullptr);
static jboolean Java_AndroidKeyStore_privateKeySupportsCipher(JNIEnv* env, const
    base::android::JavaRef<jobject>& privateKey,
    const base::android::JavaRef<jstring>& algorithm) {
  jclass clazz = android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env);
  CHECK_CLAZZ(env, clazz,
      android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env), false);

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_STATIC>(
          env,
          clazz,
          "privateKeySupportsCipher",
          "(Ljava/security/PrivateKey;Ljava/lang/String;)Z",
          &g_android_net_connectivity_org_chromium_net_AndroidKeyStore_privateKeySupportsCipher2);

  jboolean ret =
      env->CallStaticBooleanMethod(clazz,
          call_context.base.method_id, privateKey.obj(), algorithm.obj());
  return ret;
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_AndroidKeyStore_privateKeySupportsSignature2(nullptr);
static jboolean Java_AndroidKeyStore_privateKeySupportsSignature(JNIEnv* env, const
    base::android::JavaRef<jobject>& privateKey,
    const base::android::JavaRef<jstring>& algorithm) {
  jclass clazz = android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env);
  CHECK_CLAZZ(env, clazz,
      android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env), false);

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_STATIC>(
          env,
          clazz,
          "privateKeySupportsSignature",
          "(Ljava/security/PrivateKey;Ljava/lang/String;)Z",
&g_android_net_connectivity_org_chromium_net_AndroidKeyStore_privateKeySupportsSignature2);

  jboolean ret =
      env->CallStaticBooleanMethod(clazz,
          call_context.base.method_id, privateKey.obj(), algorithm.obj());
  return ret;
}

static std::atomic<jmethodID>
    g_android_net_connectivity_org_chromium_net_AndroidKeyStore_signWithPrivateKey3(nullptr);
static base::android::ScopedJavaLocalRef<jbyteArray> Java_AndroidKeyStore_signWithPrivateKey(JNIEnv*
    env, const base::android::JavaRef<jobject>& privateKey,
    const base::android::JavaRef<jstring>& algorithm,
    const base::android::JavaRef<jbyteArray>& message) {
  jclass clazz = android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env);
  CHECK_CLAZZ(env, clazz,
      android_net_connectivity_org_chromium_net_AndroidKeyStore_clazz(env), nullptr);

  jni_generator::JniJavaCallContextChecked call_context;
  call_context.Init<
      base::android::MethodID::TYPE_STATIC>(
          env,
          clazz,
          "signWithPrivateKey",
          "(Ljava/security/PrivateKey;Ljava/lang/String;[B)[B",
          &g_android_net_connectivity_org_chromium_net_AndroidKeyStore_signWithPrivateKey3);

  jbyteArray ret =
      static_cast<jbyteArray>(env->CallStaticObjectMethod(clazz,
          call_context.base.method_id, privateKey.obj(), algorithm.obj(), message.obj()));
  return base::android::ScopedJavaLocalRef<jbyteArray>(env, ret);
}

}  // namespace android
}  // namespace net

#endif  // android_net_connectivity_org_chromium_net_AndroidKeyStore_JNI
