forked from alexziskind1/nativescript-oauth2
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpkce-util.android.ts
34 lines (31 loc) · 1.16 KB
/
pkce-util.android.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const DEFAULT_CODE_VERIFIER_ENTROPY = 64;
const PKCE_BASE64_ENCODE_SETTINGS = android.util.Base64.NO_WRAP | android.util.Base64.NO_PADDING | android.util.Base64.URL_SAFE;
declare const org;
export function getCodeVerifier(): string {
const randomBytes = Array.create("byte", DEFAULT_CODE_VERIFIER_ENTROPY);
new java.security.SecureRandom().nextBytes(randomBytes);
return android.util.Base64.encodeToString(randomBytes, PKCE_BASE64_ENCODE_SETTINGS);
}
export function sha256base64encoded(codeVerifier: string): string {
const sha256Digester = java.security.MessageDigest.getInstance("SHA-256");
sha256Digester.update(
new java.lang.String(codeVerifier).getBytes("ISO_8859_1")
);
let digestBytes;
if (
typeof sha256Digester.digest !== "function" &&
sha256Digester.digest instanceof
org.bouncycastle.crypto.digests.SHA256Digest
) {
const digest = sha256Digester.digest;
const size = digest.getDigestSize();
digestBytes = Array.create("byte", size);
digest.doFinal(digestBytes, 0);
} else {
digestBytes = sha256Digester.digest();
}
return android.util.Base64.encodeToString(
digestBytes,
PKCE_BASE64_ENCODE_SETTINGS
);
}