@canton-network/core-signing-securosys (英语)
签署将Canton钱包网关与Secrososys TSB合并的驱动程序.
特征
createKey创建带有硬码空策略的 TSB SKA 密钥, 然后 重命名为来自公钥的标签 .getKeys列出 TSB 密钥并返回与钱包网关兼容的公众 键.signTransaction创建 TSB 签名请求并将 TSB 请求ID 返回为 提供者txId。见 关键标识符 怎么样 签名密钥解决.getTransaction将 TSB 请求状态/结果映射到钱包网关 交易状态/签名字段.getTransactions由提供者交易ID获取 。 仅公用钥匙 从此驱动程序内存储交易缓存支持过滤 .- 运行时配置可以通过检查和更改
getConfiguration编号 :setConfiguration。 。 。 .
使用量
import SecurosysSigningDriver from '@canton-network/core-signing-securosys'
const driver = new SecurosysSigningDriver({
baseUrl: 'http://localhost:8080',
keyManagementApiKey: process.env.TSB_KEY_MANAGEMENT_API_KEY,
keyOperationApiKey: process.env.TSB_KEY_OPERATION_API_KEY,
mtlsP12Path: process.env.TSB_MTLS_P12_PATH,
mtlsP12Password: process.env.TSB_MTLS_P12_PASSWORD,
})
驱动程序使用的TSB端点是:
GET /v1/keyPOST /v1/keyPOST /v1/key/attributesPATCH /v1/key/changeAttributesPOST /v1/signGET /v1/request/{id}POST /v1/filteredRequestsDELETE /v1/request/{id}
配置
| 财产 | 说明 |
|---|---|
baseUrl | TSB服务的基础 URL. |
keyManagementApiKey | X-API-KEY 价值 /v1/key 结束点. |
keyOperationApiKey | X-API-KEY 用于签名/请求-状态终点的值. |
bearerToken | 可选的无记名访问符 . |
mtlsP12Path | 当TSB需要mTLS时使用的PKCS#12/P12客户端证书的可选路径. |
mtlsP12Password | PKCS#12/P12客户端证书的可选密码. |
keyPassword | 用于密钥属性和签名的可选 TSB 密钥密码 . |
signatureAlgorithm | TSB 签名算法. 默认为 EDDSA; 目前的钱包网关/州签署预期Ed25519兼容签名. |
当通过钱包网关配置 RPC 更改这些值时,使用
现有的PascalCase公约: MtlsP12Path 财务报告和审定财务报表 MtlsP12Password。 。 。 .
MtlsP12Password 隐蔽在 getConfiguration。 。 。 .
钱包网关配置
| 网关配置字段 | 司机财产 |
|---|---|
signingProviders.securosys.baseUrl | baseUrl |
signingProviders.securosys.mtlsP12Path | mtlsP12Path |
signingProviders.securosys.signatureAlgorithm | signatureAlgorithm |
signingProviders.securosys.keyManagementApiKeyEnv | keyManagementApiKey |
signingProviders.securosys.keyOperationApiKeyEnv | keyOperationApiKey |
signingProviders.securosys.bearerTokenEnv | bearerToken |
signingProviders.securosys.mtlsP12PasswordEnv | mtlsP12Password |
signingProviders.securosys.keyPasswordEnv | keyPassword |
这个 *Env 字段只存储环境变量 名称中保留秘密值
环境。 默认匹配下面的可变名称 .
钱包网关环境变量
| 环境变量 | 司机财产 | 使用量 |
|---|---|---|
SECUROSYS_TSB_BASE_URL | baseUrl | 仅发现遗产; 当 signingProviders 已配置 |
SECUROSYS_TSB_KEY_MANAGEMENT_API_KEY | keyManagementApiKey | 密钥管理 API 密钥的默认名称; 覆盖到 keyManagementApiKeyEnv |
SECUROSYS_TSB_KEY_OPERATION_API_KEY | keyOperationApiKey | 密钥操作 API 密钥的默认名称; 覆盖到 keyOperationApiKeyEnv |
SECUROSYS_TSB_BEARER_TOKEN | bearerToken | 无记名符号的默认名称; 覆盖到 bearerTokenEnv |
SECUROSYS_TSB_MTLS_P12_PATH | mtlsP12Path | 仅发现遗产; 当 signingProviders 已配置 |
SECUROSYS_TSB_MTLS_P12_PASSWORD | mtlsP12Password | PKCS# 12/ P12 密码的默认名称; 覆盖到 mtlsP12PasswordEnv |
SECUROSYS_TSB_KEY_PASSWORD | keyPassword | TSB 密钥密码的默认名称; 覆盖到 keyPasswordEnv |
SECUROSYS_TSB_SIGNATURE_ALGORITHM | signatureAlgorithm | 仅发现遗产; 当 signingProviders 已配置 |
此驱动程序创建的每个密钥都会先被发送到 TSB 并附带一个临时
wallet-{uuid} 标签。 TSB 返回公钥后,驱动程序重命名为
键入 PATCH /v1/key/changeAttributes 改为决定性标签
从公用钥匙。 标签使用 Base64url 形式,所以安全
TSB 密钥名处理并避免重复使用的用户或网络相撞
同样的聚会暗示.
关键标识符
signTransaction 接受标准签名 keyIdentifier数字 :
- 何时
keyIdentifier.id提供,它作为TSB键使用不变 标签. - 仅当
keyIdentifier.publicKey提供,驱动程序获得标签 与keyLabelFromPublicKey在标签上查看钥匙 这是 组成钱包网关发送,并与创建的密钥的标签匹配 这个司机.
在这两种情况下,均提供 publicKey 保存, 如果 TSB 密钥签名失败
为标签找到的公钥不同 。 因此,一个直接的司机
只使用公用密钥的呼叫查看所生成的标签, 不扫描所有 TSB
键。 此驱动程序没有创建的密钥, 所以不要携带
衍生的标签,必须用明示的 id。 。 。 .
每个密钥都是用相同的空 SKA 策略创建的 :
{
"ruleUse": null,
"ruleBlock": null,
"ruleUnblock": null,
"ruleModify": null,
"keyStatus": {
"blocked": false
}
}
对于 EdDSA 签名, 驱动程序验证并返回钱包
网关兼容格式: Base64-encoded 生于64字节 Ed25519 签名字节.
TSB请求的有效载荷类型被硬编码为: UNSPECIFIED,签名类型
硬代码为 RAW,而 TSB Ed25519 DER/SPKI 公钥总是被转换
到钱包签名 API 所需的 32 字节原始密钥 。 简单 ASN.1 OCTET
装入/装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装入装 R,S 序列仍被转换为 a
返回签名前的相容性守护 .
本地钱包部署
从钱包寄存器根中运行钱包单列波命令 :
cd /path/to/wallet
见 docs/CONTRIBUTING.md 用于建立发展环境.
下载钱包浏览器测试所需的 Playwright 浏览器 :
pnpm playwright:install
下载本地 devnet 设置所用的 Canton 二进制 :
pnpm script:fetch:canton
在 devnet 配置上启动本地 Canton :
pnpm start:canton --network=devnet
等Canton的靴子完成再说 命令可以中断
与 Ctrl+C; Canton进程在PM2下持续运行.
配置 signingProviders.securosys 内 wallet-gateway/test/config.json,用于
示例:
{
"signingProviders": {
"securosys": {
"baseUrl": "https://integration-test.cloudshsm.com/",
"mtlsP12Path": "./etc/client_mtls_tsb.p12"
}
}
}
然后用剩下的 mTLS 密钥启动完整的钱包堆栈 :
SECUROSYS_TSB_MTLS_P12_PASSWORD=pass \
pnpm start:all
对于无记名证书, 设置 signingProviders.securosys.baseUrl 页:1
适当的终点,然后从符号开始:
SECUROSYS_TSB_BEARER_TOKEN="<JWT Token>" \
pnpm start:all
打开钱包网关 :
open http://localhost:3030
检查网关的健康和准备情况:
curl -i http://localhost:3030/healthz
curl -i http://localhost:3030/readyz
流程管理
列出所有 PM2 管理的钱包进程 :
pnpm pm2 list
查看远程钱包网关日志 :
pnpm pm2 logs remote
请检查date=中的日期值 (帮助)
pnpm pm2 logs canton
只重新启动远程钱包网关后端 :
pnpm pm2 restart remote
停止所有 PM2- 管理的钱包进程 :
pnpm stop:all
完全杀死 PM2 守护进程和所有管理的进程 :
pnpm pm2 kill
构建和测试
只构建此签名驱动程序 :
pnpm workspace @canton-network/core-signing-securosys build
只运行此签名驱动测试 :
pnpm nx test @canton-network/core-signing-securosys
运行此签名驱动测试 覆盖:
pnpm nx test @canton-network/core-signing-securosys -c coverage
构建远程钱包网关 :
pnpm workspace @canton-network/wallet-gateway-remote build
运行远程钱包网关交易签名测试 :
pnpm nx test @canton-network/wallet-gateway-remote -- src/ledger/transaction-service.test.ts
运行钱包分配测试 :
pnpm nx test @canton-network/wallet-gateway-remote -- src/ledger/wallet-allocation/wallet-allocation-service.test.ts
运行共享签名- 图书馆测试 :
pnpm nx test @canton-network/core-signing-lib
连续构建完整钱包 :
pnpm build:all:serial
运行完整的钱包单列波测试套件 :
pnpm test:all