Неожиданный идентификатор при работе на узле с использованием библиотеки openpgp - PullRequest
0 голосов
/ 20 сентября 2018

Я работаю над шифрованием OpenPGP с использованием узла. Это - моя библиотека ссылок.Когда я запускаю демо, я получаю следующую ошибку:

openpgpTest.js: 32 сообщение: await openpgp.message.readArmored (зашифровано), // анализируем защищенное сообщение ^^^^^^^

SyntaxError: Неожиданный идентификатор в createScript (vm.js: 80: 10) в Object.runInThisContext (vm.js: 139: 10) в Module._compile (module.js: 599: 28) в Object.Module._extensions..js (module.js: 646: 10) в Module.load (module.js: 554: 32) в tryModuleLoad (module.js: 497: 12) в Function.Module._load (module.js: 489:3) в Function.Module.runMain (module.js: 676: 10) при запуске (bootstrap_node.js: 187: 16) в bootstrap_node.js: 608: 3

Ниже приведен мой код

 var openpgp = require('openpgp'); // use as CommonJS, AMD, ES6 module or via window.openpgp

openpgp.initWorker({ path:'openpgp.worker.js' })


// put keys in backtick (``) to avoid errors caused by spaces or tabs
const pubkey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----`
const privkey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
...
-----END PGP PRIVATE KEY BLOCK-----` //encrypted private key
const passphrase = `yourPassphrase` //what the privKey is encrypted with

const encryptDecryptFunction = async() => {
    console.log("init",openpgp)
    const privKeyObj = (await openpgp.key.readArmored(privkey)).keys[0]
    await privKeyObj.decrypt(passphrase)

    const options = {
        message: openpgp.message.fromText('Hello, World!'),       // input as Message object
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for encryption
        privateKeys: [privKeyObj]                                 // for signing (optional)
    }
    console.log("init",options)
    openpgp.encrypt(options).then(ciphertext => {
        encrypted = ciphertext.data // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
        return encrypted
    })
    .then(encrypted => {
        const options = {
            message: await openpgp.message.readArmored(encrypted),    // parse armored message
            publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for verification (optional)
            privateKeys: [privKeyObj]                                 // for decryption
        }

        openpgp.decrypt(options).then(plaintext => {
            console.log(plaintext.data)
            return plaintext.data // 'Hello, World!'
        })

    })
}

encryptDecryptFunction()

Кто-нибудь знает, почему я получаю эту ошибку?Я запускаю этот код в cmd в системе Windows.

1 Ответ

0 голосов
/ 15 марта 2019

await нельзя использовать вне функции async .Вы можете добавить асинхронность в ваш .then , чтобы вы могли использовать await внутри.

.then(async(encrypted) => {
    const options = {
        message: await openpgp.message.readArmored(encrypted),    // parse armored message
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for verification (optional)
        privateKeys: [privKeyObj]                                 // for decryption
    }

    openpgp.decrypt(options).then(plaintext => {
        console.log(plaintext.data)
        return plaintext.data // 'Hello, World!'
    })

})

Но я бы предпочел рефакторинг вашего кода следующим образом, чтобы получитьизбавиться от избыточного .then .Они вам не нужны, поскольку вы используете async / await .

const encryptDecryptFunction = async () => {
    console.log("init", openpgp)
    const privKeyObj = (await openpgp.key.readArmored(privkey)).keys[0]
    await privKeyObj.decrypt(passphrase)

    const options = {
        message: openpgp.message.fromText('Hello, World!'),       // input as Message object
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for encryption
        privateKeys: [privKeyObj]                                 // for signing (optional)
    }
    console.log("init", options)
    const { data: encripted } = await openpgp.encrypt(options)

    const options = {
        message: await openpgp.message.readArmored(encrypted),    // parse armored message
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for verification (optional)
        privateKeys: [privKeyObj]                                 // for decryption
    }

    const plaintext = await openpgp.decrypt(options);
    console.log(plaintext.data)
    return plaintext.data // 'Hello, World!'
}
...