1
0
mirror of https://github.com/Tygs/0bin.git synced 2023-08-10 21:13:00 +03:00

zerobinpaste: use 48b keys (only 6 chars) by default

This commit is contained in:
Mike Kazantsev 2013-04-29 23:55:30 +06:00 committed by fraggod@sacrilege
parent 415516ee0c
commit 118b0ce47d

View File

@ -5,7 +5,12 @@ program
.option('-u, --url [url]', 'URL of a 0bin site.')
.option('-e, --expire [period]',
'Expiration period - one of: 1_view, 1_day (default), 1_month, never.', '1_day')
.option('-c, --config [path]', 'Path to zerobin configuration file (default: ~/.zerobinpasterc).\n'\
.option('-k, --entropy [bits]',
'Encryption key entropy (and hence length) to use,'\
+ ' in bits, rounded up to multiple of 6 (default: 48).\n'\
+ ' That key will be processed by 1000 pbkdf2-sha256 iterations, not used as-is.', 48)
.option('-c, --config [path]',
'Path to zerobin configuration file (default: ~/.zerobinpasterc).\n'\
+ ' Should be json-file with the same keys as can be specified on the command line.\n'\
+ ' Example contents: {"url": "http://some-0bin.com"}', '~/.zerobinpasterc')
.parse(process.argv);
@ -40,6 +45,17 @@ if program.expire not in expire_opts
+ ' must be one of: ' + expire_opts.join(', ') + "." )
process.exit(1)
program.entropy = parseInt(program.entropy)
# Generated key will use base64 (6b per char) charset
# Key is not decoded for pbkdf2, so it's generated via base64 here just for convenience
generate_key = (entropy) ->
entropy = Math.ceil(entropy / 6) * 6 # non-6-multiple produces same-length base64
key = sjcl.bitArray.clamp(
sjcl.random.randomWords(Math.ceil(entropy / 32), 0), entropy )
return sjcl.codec.base64.fromBits(key, 0).replace(/\=+$/, '').replace(/\//, '-')
# Paste one dump and print URL, optionally prefixed with name
paste_file = (content, name) ->
@ -48,7 +64,7 @@ paste_file = (content, name) ->
content = sjcl.codec.base64.fromBits(content)
# content = lzw.compress(content)
key = sjcl.codec.base64.fromBits(sjcl.random.randomWords(8, 0), 0)
key = generate_key(program.entropy)
content = sjcl.encrypt(key, content)
content = qs.stringify
content: content