From cc012f51adc82c9b08c3ea2cfda044369dc44bbd Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Oct 22 2018 18:30:37 +0000 Subject: Fix #22 - Mitigate genRandomKey exception risk --- diff --git a/CHANGELOG b/CHANGELOG index c3f40aa..1b0c0e8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,8 @@ Revision history for Lufi - Allow to block files by setting an abuse field in DB - Display file size when uploading - Add Content-Security-Policy header + - Update sjcl.js + - Mitigate genRandomKey exception risk 0.02.2 2017-09-18 - Fix cron tasks bug diff --git a/themes/default/lib/Lufi/I18N/ca.po b/themes/default/lib/Lufi/I18N/ca.po index c0f8e86..74437fd 100644 --- a/themes/default/lib/Lufi/I18N/ca.po +++ b/themes/default/lib/Lufi/I18N/ca.po @@ -20,7 +20,7 @@ msgstr "" #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 dies" @@ -28,7 +28,7 @@ msgstr "%1 dies" msgid "1 year" msgstr "1 any" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "24 hores" @@ -48,7 +48,7 @@ msgstr "Avorta" msgid "About" msgstr "Quant a" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "" @@ -73,7 +73,7 @@ msgstr "Mal testimoni CSRF!" msgid "Click here to refresh the page and restart the download." msgstr "Premeu aquí per tal de refrescar la pàgina i reiniciar la descàrrega" -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "Premeu per obrir la selecció de fitxer." @@ -109,7 +109,7 @@ msgstr "No trobo el fitxer. Esteu segurs de la URL?" msgid "Counter" msgstr "Comptador" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "Eliminar-lo a la primera descàrrega?" @@ -141,7 +141,7 @@ msgstr "Enllaç per a descàrrega" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "Arrossegueu i deixeu anar fitxers a l'àrea apropiada o useu el sistema tradicional per enviar fitxers, i seran trossejats, xifrats i enviats al servidor. Obtindreu dos enllaços per a cada fitxer: un enllaç per a la descàrrega, que doneu a la gent amb qui voleu compartir el fitxer, i un enllaç per a l'eliminació, que us permet eliminar el fitxer del servidor quan vulgueu. " -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "Deixeu anar aquí fitxers." @@ -193,7 +193,7 @@ msgstr "Fitxer eliminat" msgid "File name" msgstr "Nom de fitxer" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "" @@ -246,7 +246,7 @@ msgstr "Si envieu el correu des d'aquest servidor, els enllaços s'enviaran al s msgid "Import localStorage data" msgstr "Importar dades de l'emmagatzematge local" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "Importat: més informació sobre moratòries" @@ -295,7 +295,7 @@ msgstr "Sense moratòria d'expiració" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "Aquí només apareixen els fitxers enviats amb aquest navegador. La llista es desa en emmagatzematge local: si netegeu l'emmagatzematge local perdreu aquesta llista." -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "Contrasenya" @@ -349,7 +349,7 @@ msgstr "Compartiu fitxers amb total privacitat a %1" msgid "Signin" msgstr "Autenticació" -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "Disculpeu, les pujades estan actualment desactivades. Si us plau proveu-ho més tard." @@ -439,7 +439,7 @@ msgstr "Pujar fitxers" msgid "Uploaded at" msgstr "Pujat a les" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "Fitxers pujats" @@ -483,6 +483,10 @@ msgstr "Heu sortit correctament." msgid "You must give email addresses." msgstr "Heu de donar l'adreça de correu electrònic." +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -520,6 +524,6 @@ msgstr "a partir de %1, el fitxer es mantindrà per sempre al servidor." msgid "no time limit" msgstr "no hi ha límit de temps" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "o" diff --git a/themes/default/lib/Lufi/I18N/en.po b/themes/default/lib/Lufi/I18N/en.po index ee222a5..f5270b2 100644 --- a/themes/default/lib/Lufi/I18N/en.po +++ b/themes/default/lib/Lufi/I18N/en.po @@ -17,7 +17,7 @@ msgstr "" #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 days" @@ -25,7 +25,7 @@ msgstr "%1 days" msgid "1 year" msgstr "" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "" @@ -45,7 +45,7 @@ msgstr "" msgid "About" msgstr "" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "" @@ -70,7 +70,7 @@ msgstr "" msgid "Click here to refresh the page and restart the download." msgstr "" -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Counter" msgstr "" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "" @@ -138,7 +138,7 @@ msgstr "" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "" -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "" @@ -190,7 +190,7 @@ msgstr "" msgid "File name" msgstr "" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "" @@ -242,7 +242,7 @@ msgstr "" msgid "Import localStorage data" msgstr "" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "" @@ -291,7 +291,7 @@ msgstr "" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "" -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "" @@ -345,7 +345,7 @@ msgstr "" msgid "Signin" msgstr "" -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "" @@ -433,7 +433,7 @@ msgstr "" msgid "Uploaded at" msgstr "" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "" @@ -477,6 +477,10 @@ msgstr "" msgid "You must give email addresses." msgstr "" +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -514,6 +518,6 @@ msgstr "" msgid "no time limit" msgstr "" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "" diff --git a/themes/default/lib/Lufi/I18N/fr.po b/themes/default/lib/Lufi/I18N/fr.po index 97a5a6d..065b14b 100644 --- a/themes/default/lib/Lufi/I18N/fr.po +++ b/themes/default/lib/Lufi/I18N/fr.po @@ -19,7 +19,7 @@ msgstr "" #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 jours" @@ -27,7 +27,7 @@ msgstr "%1 jours" msgid "1 year" msgstr "1 an" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "24 heures" @@ -47,7 +47,7 @@ msgstr "Abandonner" msgid "About" msgstr "À propos" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "Ajouter un mot de passe au(x) fichier(s)" @@ -72,7 +72,7 @@ msgstr "Mauvais jeton CSRF !" msgid "Click here to refresh the page and restart the download." msgstr "Cliquez ici pour rafraîchir la page et redémarrer le téléchargement." -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "Cliquez pour ouvrir le navigateur de fichiers" @@ -108,7 +108,7 @@ msgstr "Impossible de retrouver le fichier. Êtes-vous sûr(e) que l’URL est l msgid "Counter" msgstr "Compteur" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "Supprimer après le premier téléchargement ?" @@ -140,7 +140,7 @@ msgstr "Lien de téléchargement" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "Faites glisser des fichiers dans la zone prévue à cet effet ou sélectionnez un fichier de façon classique et les fichiers seront découpés en morceaux, chiffrés et envoyés au serveur. Vous récupérerez deux liens par fichier : un lien de téléchargement et un lien pour supprimer le fichier quand vous le souhaitez." -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "Glissez vos fichiers ici" @@ -192,7 +192,7 @@ msgstr "Fichier supprimé" msgid "File name" msgstr "Nom du fichier" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "Fichiers supprimés au premier téléchargement" @@ -244,7 +244,7 @@ msgstr "Si vous envoyez le mail depuis ce serveur, les liens seront envoyés au msgid "Import localStorage data" msgstr "Importer des données localStorage" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "Important : plus d’informations sur les délais" @@ -293,7 +293,7 @@ msgstr "Pas de délai d’expiration" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "Seuls les fichiers envoyés avec ce navigateur web sont listés ici. Les informations sont stockées en localStorage : si vous supprimez vos données localStorage, vous perdrez ces informations." -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "Mot de passe" @@ -351,7 +351,7 @@ msgstr "Connexion" msgid "Sorry mate, you are not authorised to use that service. Contact your sysadmin if you think there's a glitch in the matrix." msgstr "Désolé, vous n’êtes pas autorisé à utiliser ce service. Contactez votre administrateur si vous pensez qu’il s’agit d’une erreur." -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "Désolé, l’envoi de fichier est actuellement désactivé. Veuillez réessayer plus tard." @@ -406,7 +406,7 @@ msgstr "Le serveur a été incapable de retrouver l’enregistrement du fichier #: lib/Lufi/Controller/Files.pm:243 msgid "This file has been deactivated by the admins. Contact them to know why." -msgstr "" +msgstr "The fichier a été désactivé par les administrateurs ou administratrices. Veuillez les contacter pour savoir pourquoi." #: themes/default/templates/delays.html.ep:10 msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" @@ -439,7 +439,7 @@ msgstr "Envoyer des fichiers" msgid "Uploaded at" msgstr "Envoyé le" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "Fichiers envoyés" @@ -483,6 +483,10 @@ msgstr "Vous avez été déconnecté·e avec succès." msgid "You must give email addresses." msgstr "Vous devez envoyer des adresses mail." +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "Votre navigateur n’a pas assez d’entropie pour générer une clé de chiffrement forte. Veuillez attendre (il est préférable que vous fassiez quelque chose sur votre ordinateur en attendant)." + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -520,6 +524,6 @@ msgstr "pour %1 et plus, le fichier sera conservé indéfiniment." msgid "no time limit" msgstr "Pas de délai d'expiration" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "ou" diff --git a/themes/default/lib/Lufi/I18N/it.po b/themes/default/lib/Lufi/I18N/it.po index 1208bf2..20e2527 100644 --- a/themes/default/lib/Lufi/I18N/it.po +++ b/themes/default/lib/Lufi/I18N/it.po @@ -19,7 +19,7 @@ msgstr "" #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 giorni" @@ -27,7 +27,7 @@ msgstr "%1 giorni" msgid "1 year" msgstr "1 anno" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "24 ore" @@ -47,7 +47,7 @@ msgstr "Annulla" msgid "About" msgstr "A proposito" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "" @@ -72,7 +72,7 @@ msgstr "Token CSRF errato!" msgid "Click here to refresh the page and restart the download." msgstr "Click qui per aggiornare la pagina e ricominciare il download." -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "Click per aprire il file browser" @@ -108,7 +108,7 @@ msgstr "Impossibile trovare il file. Sei sicuro che l'URL sia corretto?" msgid "Counter" msgstr "Contatore" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "Cancellare al primo download?" @@ -140,7 +140,7 @@ msgstr "Link per il download" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "Trascinare e lasciare il file nell'are prevista o selezionare i file nel modo classico ed i file saranno divisi,cifrati ed inviati al server. Otterrete 2 link per ogni file : uno per il download ed uno per eliminare il file quando vorrete." -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "Lasciare i file qui" @@ -192,7 +192,7 @@ msgstr "File cancellato" msgid "File name" msgstr "Nome del file" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "" @@ -244,7 +244,7 @@ msgstr "Se inviaste l'email da questo server, i link sarebbero inviati al server msgid "Import localStorage data" msgstr "Importare i dati del localStorage" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "Importante : più informazioni sulle scadenze" @@ -293,7 +293,7 @@ msgstr "Nessun ritardo per la scadenza" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "Solo i file inviati con questo browser web sono nella lista. Le informazioni sono memorizzate nel localStorage: se cancellaste i dati dal vostro localStorage, perdereste questa lista." -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "Password" @@ -351,7 +351,7 @@ msgstr "Condividi tutti i file in totale riservatezza su %1" msgid "Signin" msgstr "Autenticazione" -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "L'invio del file è attualemente disattivato. Riprovare più tardi." @@ -443,7 +443,7 @@ msgstr "Invio dei file" msgid "Uploaded at" msgstr "Invio il" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "File inviati" @@ -487,6 +487,10 @@ msgstr "Logout avvenuto con successo." msgid "You must give email addresses." msgstr "Devi fornire gli indirizzi email." +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -524,6 +528,6 @@ msgstr "per %1 e più, il file sarà conservato per sempre." msgid "no time limit" msgstr "nessuna limitazione temporale" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "o" diff --git a/themes/default/lib/Lufi/I18N/nl.po b/themes/default/lib/Lufi/I18N/nl.po index deac954..4c93c3a 100644 --- a/themes/default/lib/Lufi/I18N/nl.po +++ b/themes/default/lib/Lufi/I18N/nl.po @@ -6,7 +6,7 @@ #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 dagen" @@ -14,7 +14,7 @@ msgstr "%1 dagen" msgid "1 year" msgstr "1 jaar" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "24 uur" @@ -34,7 +34,7 @@ msgstr "Annuleren" msgid "About" msgstr "Over" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "" @@ -59,7 +59,7 @@ msgstr "Verkeerde CSRF token!" msgid "Click here to refresh the page and restart the download." msgstr "Klik hier om de pagina te verversen en opnieuw te downloaden." -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "Klik voor bestandbrowser" @@ -95,7 +95,7 @@ msgstr "Kan het bestand niet vinden. Klopt de URL?" msgid "Counter" msgstr "Teller" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "Verwijder na eerste download?" @@ -127,7 +127,7 @@ msgstr "Download link" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "Drag and drop bestanden in de daarvoor bestemde locatie of gebruik de traditionele weg om bestanden encrypted op te sturen naar server. Je zal 2 linkjes per bestand krijgen: een download link, die stuur je naar personen waarmee je het bestand wilt delen en een verwijderings link, waarmee je het bestand kan verwijderen wanneer je dat wilt." -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "Sleep bestand(en) naar dit venster" @@ -179,7 +179,7 @@ msgstr "Bestand verwijderd" msgid "File name" msgstr "Bestandsnaam" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "" @@ -231,7 +231,7 @@ msgstr "Als je een mail via de server verstuurt, zullen links naar de server ver msgid "Import localStorage data" msgstr "Importeer opgeslagen data" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "Belangrijk: meer informatie over uitstel" @@ -280,7 +280,7 @@ msgstr "Geen verloop uitstel" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "Alleen bestanden die via deze browser zijn verstuurd zijn hier zichtbaar. Deze lijst is opgeslagen: als je opgeslagen data verwijderd, zal je deze lijst verlizen." -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "Wachtwoord" @@ -338,7 +338,7 @@ msgstr "Deel je bestanden met volledige privacy op %1" msgid "Signin" msgstr "Inloggen" -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "Sorry, uploaden is momenteel uitgeschakeld. Probeer het later nogmaals." @@ -426,7 +426,7 @@ msgstr "Upload bestanden" msgid "Uploaded at" msgstr "Geupload op" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "Geuploade bestanden" @@ -470,6 +470,10 @@ msgstr "Je bent succesvol uitgelogd." msgid "You must give email addresses." msgstr "Je moet een mail adres opgeven." +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -539,6 +543,6 @@ msgstr "voor %1 en meer, bestand zal voor altijd bewaard worden." msgid "no time limit" msgstr "geen tijdslimiet" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "of" diff --git a/themes/default/lib/Lufi/I18N/oc.po b/themes/default/lib/Lufi/I18N/oc.po index 31854c7..2902d4a 100644 --- a/themes/default/lib/Lufi/I18N/oc.po +++ b/themes/default/lib/Lufi/I18N/oc.po @@ -19,7 +19,7 @@ msgstr "" #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 jorns" @@ -27,7 +27,7 @@ msgstr "%1 jorns" msgid "1 year" msgstr "1 an" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "24 oras" @@ -47,7 +47,7 @@ msgstr "Anullar" msgid "About" msgstr "A prepaus" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "Apondre un senhal al(s) fichièr(s)" @@ -72,7 +72,7 @@ msgstr "Marrit geton CSRF !" msgid "Click here to refresh the page and restart the download." msgstr "Clicatz aquí per actualizar la pagina e tornar començar lo telecargament." -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "Clicatz per dobrir lo navigator de fichièr" @@ -108,7 +108,7 @@ msgstr "Impossible de trobar lo fichièr. Sètz segur-a que l’URL es bona ?" msgid "Counter" msgstr "Comptador" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "Suprimir aprèp lo primièr telecargament ?" @@ -140,7 +140,7 @@ msgstr "Ligam de telecargament" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "Fasètz lisar de fichièrs dins la zòna prevista per aquò far o seleccionatz un fichièr de faiçon classica e los fichièrs seràn descopats a tròces, chifrats e mandats al servidor. Recuperaretz dos ligams per fichièr : un ligam de telecargament e un ligam per suprimir lo fichièr quand o volètz." -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "Lisatz vòstres fichièrs aquí" @@ -192,7 +192,7 @@ msgstr "Fichièr suprimit" msgid "File name" msgstr "Nom del fichièr" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "" @@ -244,7 +244,7 @@ msgstr "Se mandatz lo corrièl d’aqueste servidor, los ligams seràn mandat al msgid "Import localStorage data" msgstr "Importar las donadas localStorage" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "Important : mai d’informacions suls relambis" @@ -293,7 +293,7 @@ msgstr "Pas cap de relambi d’expiracion" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "Sols los fichièrs mandats amb aqueste navigador web son listats aicí. Las informacions son gardadas en localStorage : se suprimissètz vòstras donadas localStorage, perdretz aquelas informacions." -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "Senhal" @@ -355,7 +355,7 @@ msgstr "Connexion" msgid "Sorry mate, you are not authorised to use that service. Contact your sysadmin if you think there's a glitch in the matrix." msgstr "O planhèm collèga, sètz pas autorizat a utilizar aqueste servici. Contactatz vòstre administrator sistèma se pensatz que i a un problèma." -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "O planhèm, la foncion per mandar de fichièr es desactivada pel moment. Mercés de tornar ensajar mai tard." @@ -443,7 +443,7 @@ msgstr "Mandar de fichièrs" msgid "Uploaded at" msgstr "Mandat lo" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "Fichièrs mandats" @@ -487,6 +487,10 @@ msgstr "Sètz ben estat desconnectat." msgid "You must give email addresses." msgstr "Vos cal donar d’adreças." +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -524,6 +528,6 @@ msgstr "per %1 e mai, lo fichièr serà gardat per totjorn." msgid "no time limit" msgstr "Pas cap de relambi d’expiracion" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "o" diff --git a/themes/default/lib/Lufi/I18N/pt.po b/themes/default/lib/Lufi/I18N/pt.po index 993e9dd..e501562 100644 --- a/themes/default/lib/Lufi/I18N/pt.po +++ b/themes/default/lib/Lufi/I18N/pt.po @@ -20,7 +20,7 @@ msgstr "" #. ($delay) #. (max_delay) -#: themes/default/templates/index.html.ep:40 themes/default/templates/index.html.ep:49 themes/default/templates/index.html.ep:50 +#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 msgid "%1 days" msgstr "%1 dias" @@ -28,7 +28,7 @@ msgstr "%1 dias" msgid "1 year" msgstr "1 ano" -#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:49 +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 msgid "24 hours" msgstr "24 horas" @@ -48,7 +48,7 @@ msgstr "Interromper" msgid "About" msgstr "Sobre" -#: themes/default/templates/index.html.ep:81 +#: themes/default/templates/index.html.ep:88 msgid "Add a password to file(s)" msgstr "" @@ -73,7 +73,7 @@ msgstr "Símbolo errado CSRF !" msgid "Click here to refresh the page and restart the download." msgstr "Clique aqui para atualizar a página e começar o download." -#: themes/default/templates/index.html.ep:90 +#: themes/default/templates/index.html.ep:97 msgid "Click to open the file browser" msgstr "Clique para abrir o navegador de ficheiros" @@ -109,7 +109,7 @@ msgstr "Impossível encontar o ficheiro. Tem a certeza de que o URL está corret msgid "Counter" msgstr "Contador" -#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:74 +#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 msgid "Delete at first download?" msgstr "Apagar após o primeiro download?" @@ -141,7 +141,7 @@ msgstr "Link para o download" msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "Deslize os ficheiros na zona própria e esse efeito ou selecione um ficheiro de forma tradicional, e os ficheiros serão fragmentados, codificados e enviados ao servidor. Vai receber dois links por ficheiro: um é de download e o outro para poder apagar o ficheiro quando quiser." -#: themes/default/templates/index.html.ep:87 +#: themes/default/templates/index.html.ep:94 msgid "Drop files here" msgstr "" @@ -197,7 +197,7 @@ msgstr "Ficheiro apagado" msgid "File name" msgstr "Nome do ficheiro" -#: themes/default/templates/index.html.ep:64 +#: themes/default/templates/index.html.ep:71 msgid "Files deleted at first download" msgstr "" @@ -253,7 +253,7 @@ msgstr "Se enviar um e-mail a partir deste servidor, os links serão enviados ao msgid "Import localStorage data" msgstr "Importar os dados localStorage" -#: themes/default/templates/index.html.ep:37 +#: themes/default/templates/index.html.ep:44 msgid "Important: more information on delays" msgstr "Importante: mais informações sobre os prazos" @@ -302,7 +302,7 @@ msgstr "Não tem prazo de expiração" msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgstr "Apenas os ficheiros enviados com este navegador web estão listados aqui. As informações são armazenadas no localStorage : se apagar os seus dados no LocalStorage, poedrá perder essa informação." -#: themes/default/templates/index.html.ep:80 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" msgstr "Palavra-passe" @@ -356,7 +356,7 @@ msgstr "Partilhe os seus ficheiros com toda a privacidade em %1" msgid "Signin" msgstr "Conexão" -#: themes/default/templates/index.html.ep:30 +#: themes/default/templates/index.html.ep:37 msgid "Sorry, the uploading is currently disabled. Please try again later." msgstr "Desculpe, o envio do ficheiro está atualmente desativado. Tente mais tarde." @@ -444,7 +444,7 @@ msgstr "Enviar os ficheiros" msgid "Uploaded at" msgstr "Enviar a" -#: themes/default/templates/index.html.ep:95 +#: themes/default/templates/index.html.ep:102 msgid "Uploaded files" msgstr "Ficheiros enviados" @@ -492,6 +492,10 @@ msgstr "Foi desconectado com sucesso." msgid "You must give email addresses." msgstr "Deve escrever os e-mails." +#: themes/default/templates/index.html.ep:29 +msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" + #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:66 msgid "Your file is too big: %1 (maximum size allowed: %2)" @@ -529,6 +533,6 @@ msgstr "para %1 e mais, o ficheiro será conservado por um tempo indeterminado." msgid "no time limit" msgstr "Não tem limite de expiração" -#: themes/default/templates/index.html.ep:88 +#: themes/default/templates/index.html.ep:95 msgid "or" msgstr "ou" diff --git a/themes/default/public/js/lufi-up.js b/themes/default/public/js/lufi-up.js index d78b41f..587a669 100644 --- a/themes/default/public/js/lufi-up.js +++ b/themes/default/public/js/lufi-up.js @@ -162,7 +162,7 @@ function uploadFile(i, delay, del_at_first_view) { '', '', '
'].join('')); - r.append(w); + r.prepend(w); $('#destroy-'+window.fc).on('click', function(event) { event.preventDefault(); destroyBlock(this) @@ -425,12 +425,34 @@ function spawnWebsocket(i, callback) { return ws; } -// When it's ready -$(document).ready(function(){ - // Dropzone events binding +// Dropzone events binding +function bindDropZone() { var dropZone = document.getElementById('files'); dropZone.addEventListener('dragover', handleDragOver, false); dropZone.addEventListener('drop', handleDrop, false); + $('#file-browser-span').removeClass('disabled'); + $('#file-browser-span').addClass('cyan'); + $('#file-browser-button').attr('disabled', null); + $('#file-browser-button').on('change', function(e) { + handleFiles(this.files); + }); +} + +// When it's ready +$(document).ready(function(){ + if (!sjcl.random.isReady(10)) { + var loop = setInterval(function() { + if (!sjcl.random.isReady(10)) { + $('#not-enough-entropy').removeClass('hiddendiv'); + } else { + $('#not-enough-entropy').addClass('hiddendiv'); + bindDropZone(); + clearInterval(loop); + } + }, 1000); + } else { + bindDropZone(); + } $('label[for="first-view"]').on('click', function(){ if ($('#first-view').attr('data-checked') && $('#first-view').attr('data-checked') === 'data-checked') { $('#first-view').attr('data-checked', null); diff --git a/themes/default/public/js/sjcl.js b/themes/default/public/js/sjcl.js index e22ab03..c3c3ea9 100644 --- a/themes/default/public/js/sjcl.js +++ b/themes/default/public/js/sjcl.js @@ -1,58 +1,60 @@ -"use strict";function q(a){throw a;}var s=void 0,u=!1;var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}}; -"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl}); -sjcl.cipher.aes=function(a){this.l[0][0][0]||this.G();var b,c,d,e,g=this.l[0][4],f=this.l[1];b=a.length;var h=1;4!==b&&(6!==b&&8!==b)&&q(new sjcl.exception.invalid("invalid aes key size"));this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=g[c>>>24]<<24^g[c>>16&255]<<16^g[c>>8&255]<<8^g[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:f[0][g[c>>>24]]^f[1][g[c>>16&255]]^f[2][g[c>>8&255]]^f[3][g[c& +"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}}; +sjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c& 255]]}; -sjcl.cipher.aes.prototype={encrypt:function(a){return w(this,a,0)},decrypt:function(a){return w(this,a,1)},l:[[[],[],[],[],[]],[[],[],[],[],[]]],G:function(){var a=this.l[0],b=this.l[1],c=a[4],d=b[4],e,g,f,h=[],l=[],k,m,n,p;for(e=0;0x100>e;e++)l[(h[e]=e<<1^283*(e>>7))^e]=e;for(g=f=0;!c[g];g^=k||1,f=l[f]||1){n=f^f<<1^f<<2^f<<3^f<<4;n=n>>8^n&255^99;c[g]=n;d[n]=g;m=h[e=h[k=h[g]]];p=0x1010101*m^0x10001*e^0x101*k^0x1010100*g;m=0x101*h[n]^0x1010100*n;for(e=0;4>e;e++)a[e][g]=m=m<<24^m>>>8,b[e][n]=p=p<<24^p>>>8}for(e= +sjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},s:[[[],[],[],[],[]],[[],[],[],[],[]]],O:function(){var a=this.s[0],b=this.s[1],c=a[4],d=b[4],e,f,g,h=[],k=[],l,n,m,p;for(e=0;0x100>e;e++)k[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=l||1,g=k[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^m&255^99,c[f]=m,d[m]=f,n=h[e=h[l=h[f]]],p=0x1010101*n^0x10001*e^0x101*l^0x1010100*f,n=0x101*h[m]^0x1010100*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=p=p<<24^p>>>8;for(e= 0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}}; -function w(a,b,c){4!==b.length&&q(new sjcl.exception.invalid("invalid aes block size"));var d=a.b[c],e=b[0]^d[0],g=b[c?3:1]^d[1],f=b[2]^d[2];b=b[c?1:3]^d[3];var h,l,k,m=d.length/4-2,n,p=4,t=[0,0,0,0];h=a.l[c];a=h[0];var r=h[1],v=h[2],y=h[3],z=h[4];for(n=0;n>>24]^r[g>>16&255]^v[f>>8&255]^y[b&255]^d[p],l=a[g>>>24]^r[f>>16&255]^v[b>>8&255]^y[e&255]^d[p+1],k=a[f>>>24]^r[b>>16&255]^v[e>>8&255]^y[g&255]^d[p+2],b=a[b>>>24]^r[e>>16&255]^v[g>>8&255]^y[f&255]^d[p+3],p+=4,e=h,g=l,f=k;for(n=0;4> -n;n++)t[c?3&-n:n]=z[e>>>24]<<24^z[g>>16&255]<<16^z[f>>8&255]<<8^z[b&255]^d[p++],h=e,e=g,g=f,f=b,b=h;return t} -sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.R(a.slice(b/32),32-(b&31)).slice(1);return c===s?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return u;var c=0,d;for(d=0;d>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}}; -sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d>>24),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c>>f)>>>e),fm){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}q(new sjcl.exception.invalid("this isn't "+n+"!"))}h>e?(h-=e,g.push(k^m>>>h),k=m<>>24]^q[f>>16&255]^v[g>>8&255]^w[b&255]^d[p],k=a[f>>>24]^q[g>>16&255]^v[b>>8&255]^w[e&255]^d[p+1],l=a[g>>>24]^q[b>>16&255]^v[e>>8&255]^w[f&255]^d[p+2],b=a[b>>>24]^q[e>>16&255]^v[f>>8&255]^w[g&255]^d[p+3],p+=4,e=h,f=k,g=l;for(m= +0;4>m;m++)r[c?3&-m:m]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[p++],h=e,e=f,f=g,g=b,b=h;return r} +sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.$(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}}; +sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d>>8>>>8>>>8),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c>>g)>>>e),gn){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}throw new sjcl.exception.invalid("this isn't "+m+"!");}h>e?(h-=e,f.push(l^n>>>h),l=n<>>e)>>>26),6>e?(f=a[c]<<6-e,e+=26,c++):(f<<=6,e-=6);for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d,e=0,g=sjcl.codec.base64.p,f=0,h;b&&(g=g.substr(0,62)+"-_");for(d=0;dh&&q(new sjcl.exception.invalid("this isn't base64!")),26>>e),f=h<<32-e):(e+=6,f^=h<<32-e);e&56&&c.push(sjcl.bitArray.partial(e&56,f,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.G();a?(this.s=a.s.slice(0),this.o=a.o.slice(0),this.i=a.i):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()}; -sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.s=this.P.slice(0);this.o=[];this.i=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.o=sjcl.bitArray.concat(this.o,a);b=this.i;a=this.i=b+sjcl.bitArray.bitLength(a);for(b=512+b&-512;b<=a;b+=512)x(this,c.splice(0,16));return this},finalize:function(){var a,b=this.o,c=this.s,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.i/ -4294967296));for(b.push(this.i|0);b.length;)x(this,b.splice(0,16));this.reset();return c},P:[],b:[],G:function(){function a(a){return 0x100000000*(a-Math.floor(a))|0}var b=0,c=2,d;a:for(;64>b;c++){for(d=2;d*d<=c;d++)if(0===c%d)continue a;8>b&&(this.P[b]=a(Math.pow(c,0.5)));this.b[b]=a(Math.pow(c,1/3));b++}}}; -function x(a,b){var c,d,e,g=b.slice(0),f=a.s,h=a.b,l=f[0],k=f[1],m=f[2],n=f[3],p=f[4],t=f[5],r=f[6],v=f[7];for(c=0;64>c;c++)16>c?d=g[c]:(d=g[c+1&15],e=g[c+14&15],d=g[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+g[c&15]+g[c+9&15]|0),d=d+v+(p>>>6^p>>>11^p>>>25^p<<26^p<<21^p<<7)+(r^p&(t^r))+h[c],v=r,r=t,t=p,p=n+d|0,n=m,m=k,k=l,l=d+(k&m^n&(k^m))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+l|0;f[1]=f[1]+k|0;f[2]=f[2]+m|0;f[3]=f[3]+n|0;f[4]=f[4]+p|0;f[5]=f[5]+t|0;f[6]= -f[6]+r|0;f[7]=f[7]+v|0} -sjcl.mode.ccm={name:"ccm",t:[],listenProgress:function(a){sjcl.mode.ccm.t.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.t.indexOf(a);-1l&&q(new sjcl.exception.invalid("ccm: iv must be at least 7 bytes"));for(g=2;4>g&&k>>>8*g;g++);g<15-l&&(g=15-l);c=h.clamp(c,8*(15- -g));b=sjcl.mode.ccm.M(a,b,c,d,e,g);f=sjcl.mode.ccm.q(a,f,c,b,e,g);return h.concat(f.data,f.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var g=sjcl.bitArray,f=g.bitLength(c)/8,h=g.bitLength(b),l=g.clamp(b,h-e),k=g.bitSlice(b,h-e),h=(h-e)/8;7>f&&q(new sjcl.exception.invalid("ccm: iv must be at least 7 bytes"));for(b=2;4>b&&h>>>8*b;b++);b<15-f&&(b=15-f);c=g.clamp(c,8*(15-b));l=sjcl.mode.ccm.q(a,l,c,k,e,b);a=sjcl.mode.ccm.M(a,l.data,c,d,e,b);g.equal(l.tag,a)||q(new sjcl.exception.corrupt("ccm: tag doesn't match")); -return l.data},ea:function(a,b,c,d,e,g){var f=[],h=sjcl.bitArray,l=h.g;d=[h.partial(8,(b.length?64:0)|d-2<<2|g-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length){c=h.bitLength(b)/8;65279>=c?f=[h.partial(16,c)]:0xffffffff>=c&&(f=h.concat([h.partial(16,65534)],[c]));f=h.concat(f,b);for(b=0;be||16m&&(sjcl.mode.ccm.X(f/ -l),m+=n),c[3]++,e=a.encrypt(c),b[f]^=e[0],b[f+1]^=e[1],b[f+2]^=e[2],b[f+3]^=e[3];return{tag:d,data:h.clamp(b,k)}}}; -sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,g){128!==sjcl.bitArray.bitLength(c)&&q(new sjcl.exception.invalid("ocb iv must be 128 bits"));var f,h=sjcl.mode.ocb2.J,l=sjcl.bitArray,k=l.g,m=[0,0,0,0];c=h(a.encrypt(c));var n,p=[];d=d||[];e=e||64;for(f=0;f+4e.bitLength(c)&&(h=g(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));f=g(f,c);return a.encrypt(g(d(g(h, -d(h))),f))},J:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}}; -sjcl.mode.gcm={name:"gcm",encrypt:function(a,b,c,d,e){var g=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.q(!0,a,g,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var g=b.slice(0),f=sjcl.bitArray,h=f.bitLength(g);e=e||128;d=d||[];e<=h?(b=f.bitSlice(g,h-e),g=f.bitSlice(g,0,h-e)):(b=g,g=[]);a=sjcl.mode.gcm.q(u,a,g,d,c,e);f.equal(a.tag,b)||q(new sjcl.exception.corrupt("gcm: tag doesn't match"));return a.data},ba:function(a,b){var c,d,e,g,f,h=sjcl.bitArray.g;e=[0,0,0,0];g= -b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,g));f=0!==(g[3]&1);for(d=3;0>>1|(g[d-1]&1)<<31;g[0]>>>=1;f&&(g[0]^=-0x1f000000)}return e},h:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;de&&(a=b.hash(a));for(d=0;dd||0>c)&&q(sjcl.exception.invalid("invalid params to pbkdf2"));"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var g,f,h,l,k=[],m=sjcl.bitArray;for(l=1;32*k.length<(d||1);l++){e=g=a.encrypt(m.concat(b,[l]));for(f=1;ff;f++)e.push(0x100000000*Math.random()|0);for(f=0;f=1<this.k&&(this.k=g);this.H++; -this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.C=new sjcl.cipher.aes(this.b);for(d=0;4>d&&!(this.f[d]=this.f[d]+1|0,this.f[d]);d++);}for(d=0;d>>=1;this.c[f].update([d,this.F++,2,b,g,a.length].concat(a))}break;case "string":b===s&&(b=a.length);this.c[f].update([d,this.F++,3,b,g,a.length]);this.c[f].update(a);break;default:l=1}l&&q(new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string"));this.j[f]+=b;this.d+=b;h===this.m&&(this.isReady()!==this.m&&C("seeded",Math.max(this.k,this.d)),C("progress",this.getProgress()))},isReady:function(a){a=this.K[a!==s?a:this.D];return this.k&&this.k>=a?this.j[0]>this.T&& -(new Date).valueOf()>this.Q?this.A|this.w:this.w:this.d>=a?this.A|this.m:this.m},getProgress:function(a){a=this.K[a?a:this.D];return this.k>=a?1:this.d>a?1:this.d/a},startCollectors:function(){this.r||(this.a={loadTimeCollector:D(this,this.da),mouseCollector:D(this,this.fa),keyboardCollector:D(this,this.ca),accelerometerCollector:D(this,this.W),touchCollector:D(this,this.ha)},window.addEventListener?(window.addEventListener("load",this.a.loadTimeCollector,u),window.addEventListener("mousemove",this.a.mouseCollector, -u),window.addEventListener("keypress",this.a.keyboardCollector,u),window.addEventListener("devicemotion",this.a.accelerometerCollector,u),window.addEventListener("touchmove",this.a.touchCollector,u)):document.attachEvent?(document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector)):q(new sjcl.exception.bug("can't attach event")),this.r=!0)},stopCollectors:function(){this.r&&(window.removeEventListener? -(window.removeEventListener("load",this.a.loadTimeCollector,u),window.removeEventListener("mousemove",this.a.mouseCollector,u),window.removeEventListener("keypress",this.a.keyboardCollector,u),window.removeEventListener("devicemotion",this.a.accelerometerCollector,u),window.removeEventListener("touchmove",this.a.touchCollector,u)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress", -this.a.keyboardCollector)),this.r=u)},addEventListener:function(a,b){this.B[a][this.Y++]=b},removeEventListener:function(a,b){var c,d,e=this.B[a],g=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&g.push(d);for(c=0;cb&&!(a.f[b]=a.f[b]+1|0,a.f[b]);b++);return a.C.encrypt(a.f)}function D(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6); -a:try{var F,G,H,I;if(I="undefined"!==typeof module){var J;if(J=module.exports){var K;try{K=require("crypto")}catch(L){K=null}J=(G=K)&&G.randomBytes}I=J}if(I)F=G.randomBytes(128),F=new Uint32Array((new Uint8Array(F)).buffer),sjcl.random.addEntropy(F,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){H=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(H);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(H); -else break a;sjcl.random.addEntropy(H,1024,"crypto['getRandomValues']")}}catch(M){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(M))} -sjcl.json={defaults:{v:1,iter:1E3,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},aa:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,g=e.e({iv:sjcl.random.randomWords(4,0)},e.defaults),f;e.e(g,c);c=g.adata;"string"===typeof g.salt&&(g.salt=sjcl.codec.base64.toBits(g.salt));"string"===typeof g.iv&&(g.iv=sjcl.codec.base64.toBits(g.iv));(!sjcl.mode[g.mode]||!sjcl.cipher[g.cipher]||"string"===typeof a&&100>=g.iter||64!==g.ts&&96!==g.ts&&128!==g.ts||128!==g.ks&&192!==g.ks&&0x100!==g.ks||2>g.iv.length|| -4=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4>>e)>>>26),6>e?(g=a[c]<<6-e,e+=26,c++):(g<<=6,e-=6);for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d,e=0,f=sjcl.codec.base64.B,g=0,h;b&&(f=f.substr(0,62)+"-_");for(d=0;dh)throw new sjcl.exception.invalid("this isn't base64!");26>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}e&56&&c.push(sjcl.bitArray.partial(e&56,g,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.O();a?(this.F=a.F.slice(0),this.A=a.A.slice(0),this.l=a.l):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()}; +sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.F=this.Y.slice(0);this.A=[];this.l=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.A=sjcl.bitArray.concat(this.A,a);b=this.l;a=this.l=b+sjcl.bitArray.bitLength(a);if(0x1fffffffffffffb;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e= +!1;break}e&&(8>b&&(this.Y[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}}; +function u(a,b){var c,d,e,f=a.F,g=a.b,h=f[0],k=f[1],l=f[2],n=f[3],m=f[4],p=f[5],r=f[6],q=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+q+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(r^m&(p^r))+g[c],q=r,r=p,p=m,m=n+d|0,n=l,l=k,k=h,h=d+(k&l^n&(k^l))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+h|0;f[1]=f[1]+k|0;f[2]=f[2]+l|0;f[3]=f[3]+n|0;f[4]=f[4]+m|0;f[5]=f[5]+p|0;f[6]=f[6]+r|0;f[7]= +f[7]+q|0} +sjcl.mode.ccm={name:"ccm",G:[],listenProgress:function(a){sjcl.mode.ccm.G.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.G.indexOf(a);-1k)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(f=2;4>f&&l>>>8*f;f++);f<15-k&&(f=15-k);c=h.clamp(c, +8*(15-f));b=sjcl.mode.ccm.V(a,b,c,d,e,f);g=sjcl.mode.ccm.C(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),k=f.clamp(b,h-e),l=f.bitSlice(b,h-e),h=(h-e)/8;if(7>g)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(b=2;4>b&&h>>>8*b;b++);b<15-g&&(b=15-g);c=f.clamp(c,8*(15-b));k=sjcl.mode.ccm.C(a,k,c,l,e,b);a=sjcl.mode.ccm.V(a,k.data,c,d,e,b);if(!f.equal(k.tag,a))throw new sjcl.exception.corrupt("ccm: tag doesn't match"); +return k.data},na:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,k=h.i;d=[h.partial(8,(b.length?64:0)|d-2<<2|f-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length)for(c=h.bitLength(b)/8,65279>=c?g=[h.partial(16,c)]:0xffffffff>=c&&(g=h.concat([h.partial(16,65534)],[c])),g=h.concat(g,b),b=0;be||16n&&(sjcl.mode.ccm.fa(g/ +k),n+=m),c[3]++,e=a.encrypt(c),b[g]^=e[0],b[g+1]^=e[1],b[g+2]^=e[2],b[g+3]^=e[3];return{tag:d,data:h.clamp(b,l)}}}; +sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");var g,h=sjcl.mode.ocb2.S,k=sjcl.bitArray,l=k.i,n=[0,0,0,0];c=h(a.encrypt(c));var m,p=[];d=d||[];e=e||64;for(g=0;g+4e.bitLength(c)&&(h=f(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));g=f(g,c); +return a.encrypt(f(d(f(h,d(h))),g))},S:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}}; +sjcl.mode.gcm={name:"gcm",encrypt:function(a,b,c,d,e){var f=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.C(!0,a,f,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var f=b.slice(0),g=sjcl.bitArray,h=g.bitLength(f);e=e||128;d=d||[];e<=h?(b=g.bitSlice(f,h-e),f=g.bitSlice(f,0,h-e)):(b=f,f=[]);a=sjcl.mode.gcm.C(!1,a,f,d,c,e);if(!g.equal(a.tag,b))throw new sjcl.exception.corrupt("gcm: tag doesn't match");return a.data},ka:function(a,b){var c,d,e,f,g,h=sjcl.bitArray.i;e=[0,0, +0,0];f=b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,f));g=0!==(f[3]&1);for(d=3;0>>1|(f[d-1]&1)<<31;f[0]>>>=1;g&&(f[0]^=-0x1f000000)}return e},j:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;de&&(a=b.hash(a));for(d=0;dd||0>c)throw new sjcl.exception.invalid("invalid params to pbkdf2");"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,k,l=[],n=sjcl.bitArray;for(k=1;32*l.length<(d||1);k++){e=f=a.encrypt(n.concat(b,[k]));for(g=1;gg;g++)e.push(0x100000000*Math.random()|0);for(g=0;g=1<this.o&&(this.o= +f);this.P++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.L=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.h[d]=this.h[d]+1|0,!this.h[d]);d++);}for(d=0;d>>1;this.c[g].update([d,this.N++,2,b,f,a.length].concat(a))}break;case "string":void 0===b&&(b=a.length);this.c[g].update([d,this.N++,3,b,f,a.length]);this.c[g].update(a);break;default:k=1}if(k)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.m[g]+=b;this.f+=b;h===this.u&&(this.isReady()!==this.u&&A("seeded",Math.max(this.o,this.f)),A("progress",this.getProgress()))}, +isReady:function(a){a=this.T[void 0!==a?a:this.M];return this.o&&this.o>=a?this.m[0]>this.ba&&(new Date).valueOf()>this.Z?this.J|this.I:this.I:this.f>=a?this.J|this.u:this.u},getProgress:function(a){a=this.T[a?a:this.M];return this.o>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.D){this.a={loadTimeCollector:B(this,this.ma),mouseCollector:B(this,this.oa),keyboardCollector:B(this,this.la),accelerometerCollector:B(this,this.ea),touchCollector:B(this,this.qa)};if(window.addEventListener)window.addEventListener("load", +this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new sjcl.exception.bug("can't attach event"); +this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove", +this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(a,b){this.K[a][this.ga++]=b},removeEventListener:function(a,b){var c,d,e=this.K[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;cb&&(a.h[b]=a.h[b]+1|0,!a.h[b]);b++);return a.L.encrypt(a.h)} +function B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6); +a:try{var D,E,F,G;if(G="undefined"!==typeof module&&module.exports){var H;try{H=require("crypto")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F); +else break a;sjcl.random.addEntropy(F,1024,"crypto['getRandomValues']")}}catch(a){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(a))} +sjcl.json={defaults:{v:1,iter:1E4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ja:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.g({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.g(f,c);c=f.adata;"string"===typeof f.salt&&(f.salt=sjcl.codec.base64.toBits(f.salt));"string"===typeof f.iv&&(f.iv=sjcl.codec.base64.toBits(f.iv));if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||"string"===typeof a&&100>=f.iter||64!==f.ts&&96!==f.ts&&128!==f.ts||128!==f.ks&&192!==f.ks&&0x100!==f.ks||2>f.iv.length|| +4=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4
% } +
+
+
+ <%= l('Your browser has not enough entropy to generate a strong encryption key. Please wait (it\'s better if you do things on your computer while waiting).') %> +
+
+
% if (stop_upload) {
@@ -87,8 +94,8 @@

<%= l('Drop files here') %>

<%= l('or') %>