PluginProbe
Vigilant – 100% Free Security Suite: Firewall, 2FA, Login, Headers, Scanner… / 2.9.5
Vigilant – 100% Free Security Suite: Firewall, 2FA, Login, Headers, Scanner… v2.9.5
3.0.0 2.11.12 2.11.11 2.11.10 2.11.9 2.11.7 2.11.8 2.11.6 2.11.5 2.11.4 2.11.3 2.11.1 2.11.2 2.11.0 2.10.5 2.10.4 2.10.3 2.10.2 2.10.1 2.10.0 2.9.9 2.9.8 2.9.6 2.9.7 2.9.5 All 88 releases
vigilante / assets / js / under-attack-challenge.js

under-attack-challenge.js in Vigilant – 100% Free Security Suite: Firewall, 2FA, Login, Headers, Scanner… 2.9.5, at assets/js/under-attack-challenge.js

64 lines 1.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Under Attack mode - Proof of Work challenge solver
3 *
4 * Reads challenge parameters from the form data attributes
5 * and solves the SHA-256 proof-of-work before auto-submitting.
6 *
7 * @package Vigilante
8 */
9 (function() {
10 'use strict';
11
12 var form = document.getElementById( 'ua-form' );
13 if ( ! form ) {
14 return;
15 }
16
17 var nonce = form.getAttribute( 'data-nonce' );
18 var difficulty = parseInt( form.getAttribute( 'data-difficulty' ), 10 );
19
20 if ( ! nonce || ! difficulty ) {
21 return;
22 }
23
24 var prefix = '';
25 for ( var p = 0; p < difficulty; p++ ) {
26 prefix += '0';
27 }
28
29 /**
30 * Find a valid proof-of-work solution using SubtleCrypto SHA-256
31 */
32 async function findSolution() {
33 var encoder = new TextEncoder();
34 var c = 0;
35
36 while ( true ) {
37 var attempt = c.toString( 36 );
38 var data = encoder.encode( nonce + attempt );
39 var hashBuffer = await crypto.subtle.digest( 'SHA-256', data );
40 var hashArray = new Uint8Array( hashBuffer );
41 var hex = '';
42
43 for ( var j = 0; j < hashArray.length; j++ ) {
44 hex += ( '0' + hashArray[j].toString( 16 ) ).slice( -2 );
45 }
46
47 if ( hex.substring( 0, difficulty ) === prefix ) {
48 document.getElementById( 'ua-response' ).value = attempt;
49 form.submit();
50 return;
51 }
52
53 c++;
54
55 // Yield every 1000 iterations to keep UI responsive
56 if ( c % 1000 === 0 ) {
57 await new Promise( function( r ) { setTimeout( r, 0 ); } );
58 }
59 }
60 }
61
62 // Start after a small delay for visual feedback
63 setTimeout( findSolution, 500 );
64 })();