Added option to store data for persistent rng.

Fixes #102.
This commit is contained in:
kkapsner 2017-02-10 17:37:35 +01:00
parent 3b14e56537
commit a8611230b1
7 changed files with 99 additions and 8 deletions

View File

@ -1,3 +1,21 @@
setting[pref-name="rng"] {
border-bottom: 0px transparent none;
padding-top: 0.5em;
}
setting[pref-name="storePersistentRnd"]{
border-top: 0px transparent none;
border-bottom: 0px transparent none;
}
setting[pref-name="persistentRndStorage"]{
border-top: 0px transparent none;
border-bottom: 0px transparent none;
display: none;
}
setting[pref-name="clearPersistentRnd"]{
border-top: 0px transparent none;
border-bottom: 0px transparent none;
}
setting[pref-name="showNotifications"] {
border-bottom: 0px transparent none;
padding-top: 0.5em;

View File

@ -39,18 +39,49 @@
});
// persistent rng
const persistentRnd = Object.create(null);
var persistentRnd = Object.create(null);
try {
let storedData = JSON.parse(prefs.persistentRndStorage);
for (var domain in storedData){
var value = storedData[domain];
if (
Array.isArray(value) &&
value.length === 128 &&
value.every(function(value){return typeof value === "number" && value >= 0 && value < 256;})
){
persistentRnd[domain] = value;
}
}
}
catch(e){}
processes.port.on("canvasBlocker-new-domain-rnd", function(process, data){
processes.port.emit("canvasBlocker-set-domain-rnd", data);
persistentRnd[data.domain] = data.rnd;
if (prefs.storePersistentRnd){
prefs.persistentRndStorage = JSON.stringify(persistentRnd);
}
});
processes.on("attach", function(process){
processes.forEvery(function(process){
if (process.isRemote){
for (var name in persistentRnd){
process.port.emit("canvasBlocker-set-domain-rnd", {domain: name, rnd: persistentRnd[name]});
for (var domain in persistentRnd){
process.port.emit("canvasBlocker-set-domain-rnd", {domain, rnd: persistentRnd[domain]});
}
}
});
preferences.on("storePersistentRnd", function(){
if (prefs.storePersistentRnd){
prefs.persistentRndStorage = JSON.stringify(persistentRnd);
}
else {
prefs.persistentRndStorage = "";
}
});
preferences.on("clearPersistentRnd", function(){
persistentRnd = Object.create(null);
prefs.persistentRndStorage = "";
processes.port.emit("canvasBlocker-clear-domain-rnd");
});
// show release notes
var data = require("sdk/self").data;

View File

@ -17,19 +17,23 @@
return window.location.host;
}
const getPersistentRnd = (function(){
var persistentRnd = Object.create(null);
const {process} = require("sdk/remote/child");
process.port.on("canvasBlocker-set-domain-rnd", function(process, {domain, rnd}){
persistentRnd[domain] = new Uint8Array(rnd);
});
process.port.on("canvasBlocker-clear-domain-rnd", function(){
persistentRnd = Object.create(null);
});
const persistentRnd = Object.create(null);
return function getPersistentRnd(window){
var domain = getDomain(window);
if (!persistentRnd[domain]){
// create the (sub-)domains random numbers if not existing
persistentRnd[domain] = new Uint8Array(128);
window.crypto.getRandomValues(persistentRnd[domain]);
process.port.emit("canvasBlocker-new-domain-rnd", {domain, rnd: persistentRnd[domain]});
process.port.emit("canvasBlocker-new-domain-rnd", {domain, rnd: Array.from(persistentRnd[domain])});
}
return persistentRnd[domain];
}

View File

@ -31,6 +31,16 @@
"rng_options.persistent": "persistent",
"rng_options.non persistent": "nicht persistent",
"rng_title": "Zufallszahlengenerator",
"persistentRndStorage_title": "Persistenter Speicher",
"persistentRndStorage_description": "Speichert die Informationen für den persistenten Zufallszahlengenerator über einen Neustart hinweg.",
"storePersistentRnd_title": "Persistente Daten speichern",
"storePersistentRnd_description": "Ob Daten für den persistenten Zufallszahlengenerator gespeichert werden sollen.",
"clearPersistentRnd_title": "Persistenten Speicher leeren",
"clearPersistentRnd_description": "Löscht alle Daten für den persistenten Zufallszahlengenerator.",
"clearPersistentRnd_label": "Leeren",
"disableNotifications": "Benachrichtigungen deaktivieren",
"displayCallingStack": "Aufrufestack anzeigen",

View File

@ -29,8 +29,18 @@
"rng_description": "",
"rng_options.persistent": "persistent",
"rng.non persistent": "non persistent",
"rng_options.non persistent": "non persistent",
"rng_title": "Random number generator",
"persistentRndStorage_title": "Persistent storage",
"persistentRndStorage_description": "Stores the data for the persistent random number generator for usage after restart.",
"storePersistentRnd_title": "Store persistent data",
"storePersistentRnd_description": "If data for the persistent random number generator should be stored.",
"clearPersistentRnd_title": "Clear persistent random storage",
"clearPersistentRnd_description": "Deletes all data for the persistent random number generator.",
"clearPersistentRnd_label": "Clear",
"disableNotifications": "disable notifications",
"displayCallingStack": "display calling stack",

View File

@ -94,6 +94,24 @@
}
]
},
{
"name": "persistentRndStorage",
"title": "Persistent storage",
"type": "string",
"value": ""
},
{
"name": "storePersistentRnd",
"title": "Store persistent data",
"type": "bool",
"value": false
},
{
"name": "clearPersistentRnd",
"title": "Clear persistent random storage",
"type": "control",
"label": "Clear"
},
{
"name": "askOnlyOnce",
"title": "Ask only once",

View File

@ -3,7 +3,7 @@ Version 0.3.7:
-
new features:
-
- data for persistent random number generator can be stored
fixes:
- fake at input was broken