prototype of password based key derivation
parent
848f16e8f5
commit
dcebb9597f
@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<script data-main="main" src="/bower_components/requirejs/require.js"></script>
|
||||
<style>
|
||||
html, body{
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<button id="login">login</button>
|
||||
|
||||
|
@ -0,0 +1,122 @@
|
||||
define([
|
||||
'/api/config?cb=' + Math.random().toString(16).substring(2),
|
||||
'/bower_components/chainpad-listmap/chainpad-listmap.js',
|
||||
'/bower_components/chainpad-crypto/crypto.js',
|
||||
'/common/cryptpad-common.js',
|
||||
'/bower_components/scrypt-async/scrypt-async.min.js',
|
||||
'/bower_components/jquery/dist/jquery.min.js',
|
||||
], function (Config, Listmap, Crypto, Cryptpad) {
|
||||
var $ = window.jQuery;
|
||||
var Scrypt = window.scrypt;
|
||||
|
||||
Cryptpad.styleAlerts();
|
||||
|
||||
var secret = {};
|
||||
|
||||
var module = window.APP = {
|
||||
Cryptpad: Cryptpad,
|
||||
};
|
||||
|
||||
var print = function (S, t) {
|
||||
$('body').append($('<' + (t || 'p') + '>').text(S));
|
||||
};
|
||||
|
||||
var getInputs = function (cb) {
|
||||
Cryptpad.prompt("What is your username?", "", function (name) {
|
||||
if (!name || typeof(name) !== 'string') { return cb('no name'); }
|
||||
setTimeout(function () {
|
||||
Cryptpad.prompt("What is your password?", "", function (pw) {
|
||||
if (!pw || typeof(pw) !== 'string') { return cb('no password'); }
|
||||
cb(void 0, {
|
||||
password: pw,
|
||||
salt: name,
|
||||
});
|
||||
}, {
|
||||
sensitive: true,
|
||||
});
|
||||
}, 1000);
|
||||
});
|
||||
};
|
||||
|
||||
var login = function (cb) {
|
||||
getInputs(function (err, input) {
|
||||
if (err) {
|
||||
Cryptpad.alert(err);
|
||||
return;
|
||||
}
|
||||
|
||||
var time = +new Date();
|
||||
Scrypt(input.password,
|
||||
input.salt,
|
||||
8, // memoryCost (n)
|
||||
1024, // block size parameter (r)
|
||||
48, // dkLen
|
||||
undefined && 200, // interruptStep
|
||||
function (S) {
|
||||
print("Login took " + ((+new Date()) -time )+ "ms");
|
||||
cb(S);
|
||||
},
|
||||
'base64');
|
||||
});
|
||||
};
|
||||
|
||||
var read = function (proxy) {
|
||||
console.log("Proxy ready!");
|
||||
var atime = proxy.atime = ('' + new Date());
|
||||
proxy.ctime = proxy.ctime || atime;
|
||||
proxy.schema = proxy.schema || 'login_data';
|
||||
print(JSON.stringify(proxy, null, 2), 'pre');
|
||||
};
|
||||
|
||||
var change = function (o, n, p) {
|
||||
console.log("change at [%s] %s => %s", p.join(","), o, n);
|
||||
};
|
||||
|
||||
var remove = function (o, p, root) {
|
||||
console.log("removal at [%s]", p.join(','));
|
||||
};
|
||||
|
||||
var ready = function (proxy, next) {
|
||||
//console.log("umm");
|
||||
proxy.on('ready', function (info) {
|
||||
read(proxy);
|
||||
|
||||
proxy.on('change', [], change)
|
||||
.on('remove', [], remove);
|
||||
next();
|
||||
})
|
||||
.on('disconnect', function (info) {
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
var authenticated = function (password, next) {
|
||||
console.log("Authenticated!");
|
||||
var secret = {};
|
||||
secret.channel = password.slice(0, 32);
|
||||
secret.key = password.slice(32);
|
||||
|
||||
var config = {
|
||||
websocketURL: Config.websocketURL,
|
||||
channel: secret.channel,
|
||||
data: {},
|
||||
crypto: Crypto.createEncryptor(secret.key),
|
||||
loglevel: 0,
|
||||
};
|
||||
|
||||
console.log("creating proxy!");
|
||||
var rt = module.rt = Listmap.create(config);
|
||||
|
||||
next(rt.proxy, function () {
|
||||
Cryptpad.log("Ready!");
|
||||
});
|
||||
};
|
||||
|
||||
$('#login').click(function () {
|
||||
login(function (hash) {
|
||||
print('Your Key', 'h1');
|
||||
print(hash, 'pre');
|
||||
authenticated(hash, ready);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue