From f061462c122990fbdda7b1b7fed575e5b3ca0bb4 Mon Sep 17 00:00:00 2001 From: Daniel Seifert Date: Fri, 4 Nov 2022 08:38:40 +0100 Subject: [PATCH] improve java script --- src/out/src/js/webauthn.js | 61 ++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/out/src/js/webauthn.js b/src/out/src/js/webauthn.js index de7e950..d5b0793 100644 --- a/src/out/src/js/webauthn.js +++ b/src/out/src/js/webauthn.js @@ -1,3 +1,6 @@ +/* jshint esversion: 9 */ +/* jslint bitwise: true */ + if (!window.PublicKeyCredential) { document.getElementById('webauthn').error.value = 'd3NoPublicKeyCredentialSupportedError: aborting'; document.getElementById('webauthn').submit(); @@ -74,55 +77,55 @@ const prepareOptions = (publicKey) => { /** https://gist.github.com/jonleighton/958841 **/ function base64ArrayBuffer(arrayBuffer) { "use strict"; - var base64 = '' - var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + let base64 = ''; + let encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - var bytes = new Uint8Array(arrayBuffer) - var byteLength = bytes.byteLength - var byteRemainder = byteLength % 3 - var mainLength = byteLength - byteRemainder + let bytes = new Uint8Array(arrayBuffer); + let byteLength = bytes.byteLength; + let byteRemainder = byteLength % 3; + let mainLength = byteLength - byteRemainder; - var a, b, c, d - var chunk + let a, b, c, d; + let chunk; // Main loop deals with bytes in chunks of 3 - for (var i = 0; i < mainLength; i = i + 3) { + for (let i = 0; i < mainLength; i = i + 3) { // Combine the three bytes into a single integer - chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2] + chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; // Use bitmasks to extract 6-bit segments from the triplet - a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18 - b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12 - c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6 - d = chunk & 63 // 63 = 2^6 - 1 + a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 + b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 + c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 + d = chunk & 63; // 63 = 2^6 - 1 // Convert the raw binary segments to the appropriate ASCII encoding - base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d] + base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; } // Deal with the remaining bytes and padding if (byteRemainder === 1) { - chunk = bytes[mainLength] + chunk = bytes[mainLength]; - a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2 + a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 // Set the 4 least significant bits to zero - b = (chunk & 3) << 4 // 3 = 2^2 - 1 + b = (chunk & 3) << 4; // 3 = 2^2 - 1 - base64 += encodings[a] + encodings[b] + '==' + base64 += encodings[a] + encodings[b] + '=='; } else if (byteRemainder === 2) { - chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1] + chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; - a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10 - b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4 + a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 + b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 // Set the 2 least significant bits to zero - c = (chunk & 15) << 2 // 15 = 2^4 - 1 + c = (chunk & 15) << 2; // 15 = 2^4 - 1 - base64 += encodings[a] + encodings[b] + encodings[c] + '=' + base64 += encodings[a] + encodings[b] + encodings[c] + '='; } - return base64 + return base64; } const createCredentials = (publicKey) => { @@ -133,7 +136,7 @@ const createCredentials = (publicKey) => { navigator.credentials.create({publicKey: publicKey}) .then(function (newCredentialInfo) { // Send new credential info to server for verification and registration. - var cred = { + let cred = { id: newCredentialInfo.id, rawId: base64ArrayBuffer(newCredentialInfo.rawId), response: { @@ -149,7 +152,7 @@ const createCredentials = (publicKey) => { document.getElementById('webauthn').error.value = err; document.getElementById('webauthn').submit(); }); -} +}; const requestCredentials = (publicKey) => { "use strict"; @@ -159,7 +162,7 @@ const requestCredentials = (publicKey) => { navigator.credentials.get({publicKey: publicKey}) .then(function (authenticateInfo) { // Send authenticate info to server for verification. - var cred = { + let cred = { id: authenticateInfo.id, rawId: base64ArrayBuffer(authenticateInfo.rawId), response: { @@ -176,5 +179,5 @@ const requestCredentials = (publicKey) => { document.getElementById('webauthn').error.value = err; document.getElementById('webauthn').submit(); }); -} +};