jenkins-bot has submitted this change and it was merged. Change subject: mediawiki.user: Simplify mw.user.generateRandomSessionId ......................................................................
mediawiki.user: Simplify mw.user.generateRandomSessionId * Remove lookup table for hex strings. * Convert 32 bit instead of 8 bit to hex at once. Change-Id: I6e6ac9e0813c4ba540e0a53b8e6667162cb60bf7 --- M resources/src/mediawiki/mediawiki.user.js 1 file changed, 16 insertions(+), 28 deletions(-) Approvals: Krinkle: Looks good to me, approved Nuria: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/resources/src/mediawiki/mediawiki.user.js b/resources/src/mediawiki/mediawiki.user.js index 240d1bd..c4c91f9 100644 --- a/resources/src/mediawiki/mediawiki.user.js +++ b/resources/src/mediawiki/mediawiki.user.js @@ -2,11 +2,9 @@ * @class mw.user * @singleton */ -/* global Uint8Array */ +/* global Uint32Array */ ( function ( mw, $ ) { - var i, - userInfoPromise, - byteToHex = []; + var userInfoPromise; /** * Get the current user's groups or rights @@ -19,12 +17,6 @@ userInfoPromise = new mw.Api().getUserInfo(); } return userInfoPromise; - } - - // Map from numbers 0-255 to a hex string (with padding) - for ( i = 0; i < 256; i++ ) { - // Padding: Add a full byte (0x100, 256) and strip the extra character - byteToHex[ i ] = ( i + 256 ).toString( 16 ).slice( 1 ); } // mw.user with the properties options and tokens gets defined in mediawiki.js. @@ -51,36 +43,32 @@ * @return {string} 64 bit integer in hex format, padded */ generateRandomSessionId: function () { - /* eslint-disable no-bitwise */ - var rnds, i, r, - hexRnds = new Array( 8 ), + var rnds, i, + hexRnds = new Array( 2 ), // Support: IE 11 crypto = window.crypto || window.msCrypto; - // Based on https://github.com/broofa/node-uuid/blob/bfd9f96127/uuid.js if ( crypto && crypto.getRandomValues ) { - // Fill an array with 8 random values, each of which is 8 bits. - // Note that Uint8Array is array-like but does not implement Array. - rnds = new Uint8Array( 8 ); + // Fill an array with 2 random values, each of which is 32 bits. + // Note that Uint32Array is array-like but does not implement Array. + rnds = new Uint32Array( 2 ); crypto.getRandomValues( rnds ); } else { - rnds = new Array( 8 ); - for ( i = 0; i < 8; i++ ) { - if ( ( i & 3 ) === 0 ) { - r = Math.random() * 0x100000000; - } - rnds[ i ] = r >>> ( ( i & 3 ) << 3 ) & 255; - } + rnds = [ + Math.floor( Math.random() * 0x100000000 ), + Math.floor( Math.random() * 0x100000000 ) + ]; } - // Convert from number to hex - for ( i = 0; i < 8; i++ ) { - hexRnds[ i ] = byteToHex[ rnds[ i ] ]; + // Convert number to a string with 16 hex characters + for ( i = 0; i < 2; i++ ) { + // Add 0x100000000 before converting to hex and strip the extra character + // after converting to keep the leading zeros. + hexRnds[ i ] = ( rnds[ i ] + 0x100000000 ).toString( 16 ).slice( 1 ); } // Concatenation of two random integers with entropy n and m // returns a string with entropy n+m if those strings are independent return hexRnds.join( '' ); - /* eslint-enable no-bitwise */ }, /** -- To view, visit https://gerrit.wikimedia.org/r/190640 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I6e6ac9e0813c4ba540e0a53b8e6667162cb60bf7 Gerrit-PatchSet: 15 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Gerrit Patch Uploader <gerritpatchuploa...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Esanders <esand...@wikimedia.org> Gerrit-Reviewer: Fomafix <foma...@googlemail.com> Gerrit-Reviewer: Gerrit Patch Uploader <gerritpatchuploa...@gmail.com> Gerrit-Reviewer: Jack Phoenix <j...@countervandalism.net> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: Nuria <nu...@wikimedia.org> Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits