1 /* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
2  * This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #ifndef WebAuthnTokenManager_h
7 #define WebAuthnTokenManager_h
8 
9 #include "mozilla/dom/AndroidWebAuthnTokenManager.h"
10 
11 #include "mozilla/java/WebAuthnTokenManagerNatives.h"
12 
13 namespace mozilla {
14 class WebAuthnTokenManager final
15     : public java::WebAuthnTokenManager::Natives<WebAuthnTokenManager> {
16  public:
WebAuthnMakeCredentialFinish(jni::ByteArray::Param aClientDataJson,jni::ByteArray::Param aKeyHandle,jni::ByteArray::Param aAttestationObject)17   static void WebAuthnMakeCredentialFinish(
18       jni::ByteArray::Param aClientDataJson, jni::ByteArray::Param aKeyHandle,
19       jni::ByteArray::Param aAttestationObject) {
20     mozilla::dom::AndroidWebAuthnResult result;
21 
22     result.mClientDataJSON.Assign(
23         reinterpret_cast<const char*>(
24             aClientDataJson->GetElements().Elements()),
25         aClientDataJson->Length());
26     result.mKeyHandle.Assign(
27         reinterpret_cast<uint8_t*>(aKeyHandle->GetElements().Elements()),
28         aKeyHandle->Length());
29     result.mAttObj.Assign(reinterpret_cast<uint8_t*>(
30                               aAttestationObject->GetElements().Elements()),
31                           aAttestationObject->Length());
32 
33     mozilla::dom::AndroidWebAuthnTokenManager::GetInstance()
34         ->HandleRegisterResult(std::move(result));
35   }
36 
WebAuthnMakeCredentialReturnError(jni::String::Param aErrorCode)37   static void WebAuthnMakeCredentialReturnError(jni::String::Param aErrorCode) {
38     mozilla::dom::AndroidWebAuthnResult result(aErrorCode->ToString());
39     mozilla::dom::AndroidWebAuthnTokenManager::GetInstance()
40         ->HandleRegisterResult(std::move(result));
41   }
42 
WebAuthnGetAssertionFinish(jni::ByteArray::Param aClientDataJson,jni::ByteArray::Param aKeyHandle,jni::ByteArray::Param aAuthData,jni::ByteArray::Param aSignature,jni::ByteArray::Param aUserHandle)43   static void WebAuthnGetAssertionFinish(jni::ByteArray::Param aClientDataJson,
44                                          jni::ByteArray::Param aKeyHandle,
45                                          jni::ByteArray::Param aAuthData,
46                                          jni::ByteArray::Param aSignature,
47                                          jni::ByteArray::Param aUserHandle) {
48     mozilla::dom::AndroidWebAuthnResult result;
49 
50     result.mClientDataJSON.Assign(
51         reinterpret_cast<const char*>(
52             aClientDataJson->GetElements().Elements()),
53         aClientDataJson->Length());
54     result.mKeyHandle.Assign(
55         reinterpret_cast<uint8_t*>(aKeyHandle->GetElements().Elements()),
56         aKeyHandle->Length());
57     result.mAuthData.Assign(
58         reinterpret_cast<uint8_t*>(aAuthData->GetElements().Elements()),
59         aAuthData->Length());
60     result.mSignature.Assign(
61         reinterpret_cast<uint8_t*>(aSignature->GetElements().Elements()),
62         aSignature->Length());
63     result.mUserHandle.Assign(
64         reinterpret_cast<uint8_t*>(aUserHandle->GetElements().Elements()),
65         aUserHandle->Length());
66 
67     mozilla::dom::AndroidWebAuthnTokenManager::GetInstance()->HandleSignResult(
68         std::move(result));
69   }
70 
WebAuthnGetAssertionReturnError(jni::String::Param aErrorCode)71   static void WebAuthnGetAssertionReturnError(jni::String::Param aErrorCode) {
72     mozilla::dom::AndroidWebAuthnResult result(aErrorCode->ToString());
73     mozilla::dom::AndroidWebAuthnTokenManager::GetInstance()->HandleSignResult(
74         std::move(result));
75   }
76 };
77 }  // namespace mozilla
78 
79 #endif
80