123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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,
- openpgp: openpgp
- }
|