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:
parent
a06b9ad020
commit
0ce8cc0b24
@ -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"));
|
||||||
|
Loading…
Reference in New Issue
Block a user