constant time shared secret check
This commit is contained in:
		| @@ -1,11 +1,22 @@ | |||||||
| const { subtle } = require('node:crypto').webcrypto; | const { subtle } = require('node:crypto').webcrypto; | ||||||
| const stringutils = require("./stringutils"); | const stringutils = require("./stringutils"); | ||||||
|  | const crypto = require('crypto'); | ||||||
|  |  | ||||||
| const sharedSecret = process.env.SHARED_SECRET; | const sharedSecret = process.env.SHARED_SECRET; | ||||||
|  |  | ||||||
| const authentication = { | const authentication = { | ||||||
|     checkSharedSecret: (providedSecret) => { |     checkSharedSecret: (providedSecret) => { | ||||||
|         return sharedSecret === providedSecret; |         const sharedSecretBuffer = Buffer.from(sharedSecret); | ||||||
|  |         const providedSecretBuffer = Buffer.from(providedSecret); | ||||||
|  |  | ||||||
|  |         const length = Math.max(sharedSecretBuffer.length, providedSecretBuffer.length); | ||||||
|  |         const paddedSharedSecret = Buffer.alloc(length, 0); | ||||||
|  |         const paddedProvidedSecret = Buffer.alloc(length, 0); | ||||||
|  |  | ||||||
|  |         sharedSecretBuffer.copy(paddedSharedSecret); | ||||||
|  |         providedSecretBuffer.copy(paddedProvidedSecret); | ||||||
|  |  | ||||||
|  |         return crypto.timingSafeEqual(paddedSharedSecret, paddedProvidedSecret); | ||||||
|     }, |     }, | ||||||
|     verifySignature : async (msg, sig, publicKeys) => { |     verifySignature : async (msg, sig, publicKeys) => { | ||||||
|         try { |         try { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user