微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:concatUint8Array:数据必须采用 Uint8Array 的形式

如何解决错误:concatUint8Array:数据必须采用 Uint8Array 的形式

我正在使用 Jest 来测试我的一个使用 OpenPGP.js https://openpgpjs.org/(最新版本,4.10.9)的小函数

我看到了一些使用库 text-encoding-utf-8解决方法,并且我在测试中这样做了,但不幸的是,错误仍然存​​在。

即使有:

const textEncoding = await import("text-encoding-utf-8")
global.TextEncoder = textEncoding.TextEncoder
global.TextDecoder = textEncoding.TextDecoder

我的功能

import * as openpgp from "openpgp"

export async function decryptMessage(privateKeyArmored,passphrase,message) {
  const {
    keys: [privateKey],} = await openpgp.key.readArmored(privateKeyArmored)

  await privateKey.decrypt(passphrase)

  const { data } = await openpgp.decrypt({
    message: await openpgp.message.readArmored(message),privateKeys: [privateKey],})

  return data
}

这是我的测试

import * as openpgp from "openpgp"

import { decryptMessage } from "../src/crypto"

let privateKey
let publicKey

const passphrase = "password"

const oldTextEncoder = global.TextEncoder
const oldTextDecoder = global.TextDecoder

describe("crypto test suite",() => {
  beforeAll(async () => {
    // workaround to openpgp works with jest
    const textEncoding = await import("text-encoding-utf-8")
    global.TextEncoder = textEncoding.TextEncoder
    global.TextDecoder = textEncoding.TextDecoder

    const { privateKeyArmored,publicKeyArmored } = await openpgp.generateKey({
      userIds: [{ name: "username" }],curve: "ed25519",})

    privateKey = privateKeyArmored
    publicKey = publicKeyArmored
  })

  afterall(() => {
    global.TextEncoder = oldTextEncoder
    global.TextDecoder = oldTextDecoder
  })

  test("decrypt message",async () => {
    const text = "test"

    const { data } = await openpgp.encrypt({
      message: openpgp.message.fromText(text),publicKeys: (await openpgp.key.readArmored(publicKey)).keys,})

    const result = decryptMessage(privateKey,data)

    expect(result).toBe(text)
  })
})

当我跑步时,我得到:

(node:10804) UnhandledPromiseRejectionWarning: Error: concatUint8Array: Data must be in the form of a Uint8Array
(node:10804) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block,or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection,use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 25)

有什么线索吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?