mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-24 09:27:31 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
93
services/sync/tests/unit/test_extension_storage_crypto.js
Normal file
93
services/sync/tests/unit/test_extension_storage_crypto.js
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
Cu.import("resource://services-crypto/utils.js");
|
||||
Cu.import("resource://services-sync/engines/extension-storage.js");
|
||||
Cu.import("resource://services-sync/util.js");
|
||||
|
||||
/**
|
||||
* Like Assert.throws, but for generators.
|
||||
*
|
||||
* @param {string | Object | function} constraint
|
||||
* What to use to check the exception.
|
||||
* @param {function} f
|
||||
* The function to call.
|
||||
*/
|
||||
function* throwsGen(constraint, f) {
|
||||
let threw = false;
|
||||
let exception;
|
||||
try {
|
||||
yield* f();
|
||||
}
|
||||
catch (e) {
|
||||
threw = true;
|
||||
exception = e;
|
||||
}
|
||||
|
||||
ok(threw, "did not throw an exception");
|
||||
|
||||
const debuggingMessage = `got ${exception}, expected ${constraint}`;
|
||||
let message = exception;
|
||||
if (typeof exception === "object") {
|
||||
message = exception.message;
|
||||
}
|
||||
|
||||
if (typeof constraint === "function") {
|
||||
ok(constraint(message), debuggingMessage);
|
||||
} else {
|
||||
ok(constraint === message, debuggingMessage);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* An EncryptionRemoteTransformer that uses a fixed key bundle,
|
||||
* suitable for testing.
|
||||
*/
|
||||
class StaticKeyEncryptionRemoteTransformer extends EncryptionRemoteTransformer {
|
||||
constructor(keyBundle) {
|
||||
super();
|
||||
this.keyBundle = keyBundle;
|
||||
}
|
||||
|
||||
getKeys() {
|
||||
return Promise.resolve(this.keyBundle);
|
||||
}
|
||||
}
|
||||
const BORING_KB = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
|
||||
const STRETCHED_KEY = CryptoUtils.hkdf(BORING_KB, undefined, `testing storage.sync encryption`, 2*32);
|
||||
const KEY_BUNDLE = {
|
||||
sha256HMACHasher: Utils.makeHMACHasher(Ci.nsICryptoHMAC.SHA256, Utils.makeHMACKey(STRETCHED_KEY.slice(0, 32))),
|
||||
encryptionKeyB64: btoa(STRETCHED_KEY.slice(32, 64)),
|
||||
};
|
||||
const transformer = new StaticKeyEncryptionRemoteTransformer(KEY_BUNDLE);
|
||||
|
||||
add_task(function* test_encryption_transformer_roundtrip() {
|
||||
const POSSIBLE_DATAS = [
|
||||
"string",
|
||||
2, // number
|
||||
[1, 2, 3], // array
|
||||
{key: "value"}, // object
|
||||
];
|
||||
|
||||
for (let data of POSSIBLE_DATAS) {
|
||||
const record = {data: data, id: "key-some_2D_key", key: "some-key"};
|
||||
|
||||
deepEqual(record, yield transformer.decode(yield transformer.encode(record)));
|
||||
}
|
||||
});
|
||||
|
||||
add_task(function* test_refuses_to_decrypt_tampered() {
|
||||
const encryptedRecord = yield transformer.encode({data: [1, 2, 3], id: "key-some_2D_key", key: "some-key"});
|
||||
const tamperedHMAC = Object.assign({}, encryptedRecord, {hmac: "0000000000000000000000000000000000000000000000000000000000000001"});
|
||||
yield* throwsGen(Utils.isHMACMismatch, function*() {
|
||||
yield transformer.decode(tamperedHMAC);
|
||||
});
|
||||
|
||||
const tamperedIV = Object.assign({}, encryptedRecord, {IV: "aaaaaaaaaaaaaaaaaaaaaa=="});
|
||||
yield* throwsGen(Utils.isHMACMismatch, function*() {
|
||||
yield transformer.decode(tamperedIV);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue