ES256KSigner构造报错:私钥长度不匹配问题排查与解决
解决ES256KSigner构造失败:Invalid private key format问题
问题重现
在构建JWT格式可验证凭证签名器时,使用ES256KSigner构造签名器失败,报错:
Error: bad_key: Invalid private key format. Expecting 32 bytes, but got 43
错误出现在直接使用@decentralized-identity/ion-tools生成的JWK中的d字段作为参数传入ES256KSigner时。
示例代码
import { anchor, DID, generateKeyPair } from '@decentralized-identity/ion-tools'; import { ES256KSigner, hexToBytes } from 'did-jwt'; let authKeys = await generateKeyPair(); console.log("generate key: ", authKeys) // 直接使用privateJwk的d字段构造签名器 let signer = ES256KSigner(authKeys.privateJwk.d)
运行输出
generate key: { publicJwk: { kty: 'EC', crv: 'secp256k1', x: 'AgykbSMim_qMMlo0Lh2DucKZ3XwpvGh6qv4BXQo1lxE', y: 'X_7mp4aTLjYQuxdSgEpb-3RtCgLeevp6FG34HwC5XjQ' }, privateJwk: { kty: 'EC', crv: 'secp256k1', x: 'AgykbSMim_qMMlo0Lh2DucKZ3XwpvGh6qv4BXQo1lxE', y: 'X_7mp4aTLjYQuxdSgEpb-3RtCgLeevp6FG34HwC5XjQ', d: 'tcGhsoByPlNppNLQxr_hFNAR7lGhB1JW_SFo4rxTZpo' } } file:///work/did/did_demo/node_modules/did-jwt/lib/index.module.js:184 throw new Error(`bad_key: Invalid private key format. Expecting 32 bytes, but got ${privateKeyBytes.length}`); ^ Error: bad_key: Invalid private key format. Expecting 32 bytes, but got 43 at ES256KSigner (file:///work/did/did_demo/node_modules/did-jwt/lib/index.module.js:184:11) at file:///work/did/did_demo/issuer.js:13:16
使用版本
{ "@decentralized-identity/ion-tools": "^1.0.7", "did-jwt": "^7.2.2", "did-jwt-vc": "^3.2.3", "elliptic": "^6.5.4", "express": "^4.18.2" }
错误原因
JWK(JSON Web Key)中的d字段是Base64URL编码的32字节私钥,而ES256KSigner要求传入的是原始的二进制私钥(Uint8Array类型)。直接传入字符串的话,会被当作UTF-8编码的字节处理,导致字节长度不符合32字节的要求(例子中得到43字节),从而触发错误。
解决方法
使用Base64URL解码工具将d字段解码为二进制数据后,再传入ES256KSigner:
import { base64url } from 'multiformats/bases/base64'; import { anchor, DID, generateKeyPair } from '@decentralized-identity/ion-tools'; import { ES256KSigner } from 'did-jwt'; let authKeys = await generateKeyPair(); // 解码Base64URL格式的d字段得到二进制私钥 let privateKey = base64url.baseDecode(authKeys.privateJwk.d); let signer = ES256KSigner(privateKey);
内容的提问来源于stack exchange,提问作者shijie xu
相关产品推荐
相关产品推荐

