constant time shared secret check
This commit is contained in:
parent
bf71a47dc6
commit
6f513db94b
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user