1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-02-08 00:01:28 +01:00

[EC-598] feat: test unique signatures

This commit is contained in:
Andreas Coroiu 2023-04-12 10:55:40 +02:00
parent a06b9ad020
commit 0ce8cc0b24
No known key found for this signature in database
GPG Key ID: E70B5FFC81DFEC1A

View File

@ -663,7 +663,7 @@ describe("FidoAuthenticatorService", () => {
let fido2Keys: Fido2KeyView[]; let fido2Keys: Fido2KeyView[];
let params: Fido2AuthenticatorGetAssertionParams; let params: Fido2AuthenticatorGetAssertionParams;
beforeEach(async () => { const init = async () => {
keyPair = await createKeyPair(); keyPair = await createKeyPair();
credentialIds = [Utils.newGuid(), Utils.newGuid()]; credentialIds = [Utils.newGuid(), Utils.newGuid()];
const keyValue = Fido2Utils.bufferToString( const keyValue = Fido2Utils.bufferToString(
@ -701,7 +701,8 @@ describe("FidoAuthenticatorService", () => {
} }
cipherService.getAllDecrypted.mockResolvedValue(ciphers); cipherService.getAllDecrypted.mockResolvedValue(ciphers);
userInterfaceSession.pickCredential.mockResolvedValue(ciphers[0].id); userInterfaceSession.pickCredential.mockResolvedValue(ciphers[0].id);
}); };
beforeEach(init);
/** Spec: Increment the credential associated signature counter */ /** Spec: Increment the credential associated signature counter */
it("should increment counter", async () => { it("should increment counter", async () => {
@ -771,6 +772,24 @@ describe("FidoAuthenticatorService", () => {
// expect(isValidSignature).toBe(true); // expect(isValidSignature).toBe(true);
}); });
it("should always generate unique signatures even if the input is the same", async () => {
const signatures = new Set();
for (let i = 0; i < 100; ++i) {
await init(); // Reset inputs
const result = await authenticator.getAssertion(params);
const counter = result.authenticatorData.slice(33, 37);
expect(counter).toEqual(new Uint8Array([0, 0, 0x23, 0x29])); // double check that the counter doesn't change
const signature = Fido2Utils.bufferToString(result.signature);
if (signatures.has(signature)) {
throw new Error("Found duplicate signature");
}
signatures.add(signature);
}
});
/** Spec: If any error occurred while generating the assertion signature, return an error code equivalent to "UnknownError" and terminate the operation. */ /** Spec: If any error occurred while generating the assertion signature, return an error code equivalent to "UnknownError" and terminate the operation. */
it("should throw unkown error if creation fails", async () => { it("should throw unkown error if creation fails", async () => {
cipherService.updateWithServer.mockRejectedValue(new Error("Internal error")); cipherService.updateWithServer.mockRejectedValue(new Error("Internal error"));