1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- var nb = require("buffa");
- var openpgp = require("openpgp");
- function cleanpgpstring(astr) {
- var str = astr.trim();
- str = str.replace(/\r/g, "\n");
- str = str.replace(/\n\n/g, "\n");
- var a = str.split("\n");
- a = a.filter(function(aa) {
- return !(aa.indexOf("Version") > -1 || aa.indexOf("Comment") > -1)
- })
- str = a.join("\n");
- return str;
- }
- function makeloginstr(str) {
- return nb(cleanpgpstring(str)).toBase(54);
- }
- function create_identity(opt) {
- var options = Object.assign({
- "passphrase": "",
- "numBits": 1024,
- "userIds": {
- "name": "user",
- "email": ""
- }
- }, opt)
- var oper = openpgp.generateKey(options)
- .then(
- function(keya) {
- keya.publickey = makeloginstr(keya.publicKeyArmored)
- keya.sid = nb(keya.publickey).SHA1().toBase(36);
- var kkk = {
- "secured": false,
- "sid": keya.sid,
- "publickey": keya.publickey,
- privatekey: makeloginstr(keya.privateKeyArmored),
- "options": options
- }
- if (keya.key.primaryKey.encrypted) {
- kkk.secured = true;
- }
- kkk.key = keya.key;
- return kkk;
- })
- return oper;
- }
- function encrypt_object_to(keystr, obj, cb) {
- var keyen = openpgp.key.readArmored(nb(keystr, 54).toString());
- var key = keyen.keys[0];
- var options = {
- data: JSON.stringify(obj, true, 2), // input as String (or Uint8Array)
- publicKeys: key, // for encryption
- };
- openpgp.encrypt(options).then(function(ciphertext) {
- var encrypted = nb(cleanpgpstring(ciphertext.data)).toBase(59); // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
- cb(encrypted);
- });
- }
- function decrypt_object_to(keystr, objstr, cb, passphrase) {
- var keyen = openpgp.key.readArmored(nb(keystr, 54).toString());
- var key = keyen.keys[0];
- if (passphrase) {
- key.decrypt(passphrase)
- } else {
- key.decrypt(prompt("passphrase"))
- }
- var options = {
- message: openpgp.message.readArmored(nb(objstr, 59).toString()), // parse armored message
- privateKey: key // for decryption
- };
- openpgp.decrypt(options).then(function(plaintext) {
- var decrypted = JSON.parse(plaintext.data)
- cb(decrypted);
- })
- }
- module.exports = {
- decrypt_object_to: decrypt_object_to,
- encrypt_object_to: encrypt_object_to,
- create_identity: create_identity,
- makeloginstr: makeloginstr,
- cleanpgpstring: cleanpgpstring
- }
|