123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * @author tlwr [toby@toby.codes]
- * @copyright Crown Copyright 2017
- * @license Apache-2.0
- */
- import Operation from "../Operation";
- import kbpgp from "kbpgp";
- import { ASP, importPrivateKey, importPublicKey } from "../lib/PGP";
- import OperationError from "../errors/OperationError";
- import promisifyDefault from "es6-promisify";
- const promisify = promisifyDefault.promisify;
- /**
- * PGP Encrypt and Sign operation
- */
- class PGPEncryptAndSign extends Operation {
- /**
- * PGPEncryptAndSign constructor
- */
- constructor() {
- super();
- this.name = "PGP Encrypt and Sign";
- this.module = "PGP";
- this.description = "Input: the cleartext you want to sign.\n<br><br>\nArguments: the ASCII-armoured private key of the signer (plus the private key password if necessary)\nand the ASCII-armoured PGP public key of the recipient.\n<br><br>\nThis operation uses PGP to produce an encrypted digital signature.\n<br><br>\nPretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.\n<br><br>\nThis function uses the Keybase implementation of PGP.";
- this.inputType = "string";
- this.outputType = "string";
- this.args = [
- {
- "name": "Private key of signer",
- "type": "text",
- "value": ""
- },
- {
- "name": "Private key passphrase",
- "type": "string",
- "value": ""
- },
- {
- "name": "Public key of recipient",
- "type": "text",
- "value": ""
- }
- ];
- }
- /**
- * @param {string} input
- * @param {Object[]} args
- * @returns {string}
- *
- * @throws {OperationError} if failure to sign message
- */
- async run(input, args) {
- const message = input,
- privateKey = args[0],
- passphrase = args[1],
- publicKey = args[2];
- let signedMessage;
- if (!privateKey) throw new OperationError("Enter the private key of the signer.");
- if (!publicKey) throw new OperationError("Enter the public key of the recipient.");
- const privKey = await importPrivateKey(privateKey, passphrase);
- const pubKey = await importPublicKey(publicKey);
- try {
- signedMessage = await promisify(kbpgp.box)({
- "msg": message,
- "encrypt_for": pubKey,
- "sign_with": privKey,
- "asp": ASP
- });
- } catch (err) {
- throw new OperationError(`Couldn't sign message: ${err}`);
- }
- return signedMessage;
- }
- }
- export default PGPEncryptAndSign;
|