send and verify login challenge

This commit is contained in:
2025-02-11 19:07:13 +01:00
parent e5ffbac3ea
commit 4deb25962e
9 changed files with 202 additions and 73 deletions

View File

@ -38,7 +38,28 @@ const accountController = {
console.error("Error during registration:", error);
return res.status(500).json({ error: "Server error during registration" });
}
}
},
loginGetChallenge: async (req, res) => {
let randomBuffer = crypto.randomBytes(16);
let randomNumber = randomBuffer.toString('hex');
req.session.randomNumber = randomNumber;
return res.status(200).json({
message: "Challenge generated successfully",
challenge: randomNumber
});
},
loginVerifyChallenge: async (req, res) => {
const { signature } = req.body;
const publicKeys = await database.getPublicKeys();
const msg = new TextEncoder().encode(req.session.randomNumber);
const sig = new TextEncoder().encode(signature);
let validKey = authentication.verifySignature(msg, sig, publicKeys);
if (validKey !== null) {
return res.status(200).json({ message: "Challenge solved successfully" });
} else {
return res.status(400).json({ error: "Challenge failed" });
}
}
};
module.exports = accountController;