Spaces:
Paused
Paused
| /** | |
| * Verifier process | |
| * Pokemon Showdown - http://pokemonshowdown.com/ | |
| * | |
| * This is just an asynchronous implementation of a verifier for a | |
| * signed key, because Node.js's crypto functions are synchronous, | |
| * strangely, considering how everything else is asynchronous. | |
| * | |
| * I wrote this one day hoping it would help with performance, but | |
| * I don't think it had any noticeable effect. | |
| * | |
| * @license MIT | |
| */ | |
| import * as crypto from 'crypto'; | |
| import { QueryProcessManager } from '../lib/process-manager'; | |
| export const PM = new QueryProcessManager<{ data: string, signature: string }, boolean>( | |
| module, ({ data, signature }) => { | |
| const verifier = crypto.createVerify(Config.loginserverkeyalgo); | |
| verifier.update(data); | |
| let success = false; | |
| try { | |
| success = verifier.verify(Config.loginserverpublickey, signature, 'hex'); | |
| } catch {} | |
| return success; | |
| } | |
| ); | |
| export function verify(data: string, signature: string): Promise<boolean> { | |
| return PM.query({ data, signature }); | |
| } | |
| if (!PM.isParentProcess) { | |
| // This is a child process! | |
| global.Config = require('./config-loader').Config; | |
| const Repl = require('../lib/repl').Repl; | |
| // eslint-disable-next-line no-eval | |
| Repl.start('verifier', (cmd: string) => eval(cmd)); | |
| } else { | |
| PM.spawn(global.Config ? Config.verifierprocesses : 1); | |
| } | |