@@ -570,19 +570,6 @@ function utilStringQs(str) {
570570}
571571
572572
573- /**
574- * supportsWebCryptoAPI
575- * https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API
576- * @returns {boolean } `true` if WebCryptoAPI is available
577- */
578- function supportsWebCryptoAPI ( ) {
579- return window && window . crypto
580- && window . crypto . getRandomValues
581- && window . crypto . subtle
582- && window . crypto . subtle . digest ;
583- }
584-
585-
586573/**
587574 * Generates a challenge/verifier pair for PKCE.
588575 * If the browser does not support the WebCryptoAPI, the "plain" method is
@@ -591,38 +578,24 @@ function supportsWebCryptoAPI() {
591578 */
592579function _generatePkceChallenge ( callback ) {
593580 var code_verifier ;
594- if ( supportsWebCryptoAPI ( ) ) {
595- // generate a random code_verifier
596- // https://datatracker.ietf.org/doc/html/rfc7636#section-7.1
597- var random = window . crypto . getRandomValues ( new Uint8Array ( 32 ) ) ;
598- code_verifier = base64 ( random . buffer ) ;
599- var verifier = Uint8Array . from ( Array . from ( code_verifier ) . map ( function ( char ) {
600- return char . charCodeAt ( 0 ) ;
601- } ) ) ;
602-
603- // generate challenge for code verifier
604- window . crypto . subtle . digest ( 'SHA-256' , verifier ) . then ( function ( hash ) {
605- var code_challenge = base64 ( hash ) ;
606-
607- callback ( {
608- code_challenge : code_challenge ,
609- code_verifier : code_verifier ,
610- code_challenge_method : 'S256'
611- } ) ;
612- } ) ;
613- } else {
614- // browser does not support Web Crypto API (e.g. IE11) -> fall back to "plain" method
615- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_' ;
616- code_verifier = '' ;
617- for ( var i = 0 ; i < 64 ; i ++ ) {
618- code_verifier += chars [ Math . floor ( Math . random ( ) * chars . length ) ] ;
619- }
581+ // generate a random code_verifier
582+ // https://datatracker.ietf.org/doc/html/rfc7636#section-7.1
583+ var random = globalThis . crypto . getRandomValues ( new Uint8Array ( 32 ) ) ;
584+ code_verifier = base64 ( random . buffer ) ;
585+ var verifier = Uint8Array . from ( Array . from ( code_verifier ) . map ( function ( char ) {
586+ return char . charCodeAt ( 0 ) ;
587+ } ) ) ;
588+
589+ // generate challenge for code verifier
590+ globalThis . crypto . subtle . digest ( 'SHA-256' , verifier ) . then ( function ( hash ) {
591+ var code_challenge = base64 ( hash ) ;
592+
620593 callback ( {
594+ code_challenge : code_challenge ,
621595 code_verifier : code_verifier ,
622- code_challenge : code_verifier ,
623- code_challenge_method : 'plain' ,
596+ code_challenge_method : 'S256'
624597 } ) ;
625- }
598+ } ) ;
626599}
627600
628601
@@ -632,17 +605,9 @@ function _generatePkceChallenge(callback) {
632605 */
633606function generateState ( ) {
634607 var state ;
635- if ( supportsWebCryptoAPI ( ) ) {
636- var random = window . crypto . getRandomValues ( new Uint8Array ( 32 ) ) ;
637- state = base64 ( random . buffer ) ;
638- } else {
639- // browser does not support Web Crypto API (e.g. IE11) -> fall back to "plain" method
640- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_' ;
641- state = '' ;
642- for ( var i = 0 ; i < 64 ; i ++ ) {
643- state += chars [ Math . floor ( Math . random ( ) * chars . length ) ] ;
644- }
645- }
608+ var random = globalThis . crypto . getRandomValues ( new Uint8Array ( 32 ) ) ;
609+ state = base64 ( random . buffer ) ;
610+
646611 return state ;
647612}
648613
0 commit comments