kbpgp.js
Small files & buffers
In most of the examples, we've been dealing with string plaintexts and ciphertexts. Of course, sometimes you want to read and write files and convert to interesting strings such as hex or base64.
Recall when we were encrypting, we expected a string for the message:
# using a string
params =
msg: "Chuck chucky, bo-bucky!"
encrypt_for: chuck # a KeyManager instance
In Node.js we can pass a Node.js Buffer instead. This could come from a file. Keep in mind this file's buffer and output need to fit easily in memory. (For arbitrarily large files, streams will come soon in kbpgp's future.)
fs.readFile 'foo.png', (err, buff) ->
params =
msg: buff
encrypt_for: chuck
In the browser, we have a similar Buffer available, kbpgp.Buffer
. It behaves exactly the same as a Node.js buffer, thanks to native-buffer-browserify.
# using a string as a Buffer, in the browser
params =
msg: kbpgp.Buffer.from "Chuck chucky, bo-bucky!"
encrypt_for: chuck
Outputting buffers
kbpgp's burn function calls back with both a result_string (armored, when encrypting or signing), and a result_buffer (just raw binary data). The latter is either a Node.js Buffer, as discussed above, or, in the browser, a kbpgp.Buffer
.
kbpgp.burn params, (err, result_string, result_buffer) ->
console.log result_buffer.toString('hex')
console.log result_buffer.toString('base64')
# etc...
# ...these work in both the browser and Node.js
In the browser, with HTML5
If you want to support file processing in the browser, you can use an HTML5 FileReader
and convert a file's contents
to a Buffer, right in the client side. Depending on the browser, you'll have memory constraints.
f = some_html_5_file_object
r = new FileReader() # modern browsers have this
r.readAsBinaryString f
r.onloadend = (file) ->
buffer = kbpgp.Buffer.from r.result
# ... now process it using kbpgp
We're just getting started with this tutorial and examples. Hit us up on github if anything is missing.