package
0.0.0-20231224052254-3c905e5ef12b
Repository: https://github.com/assetcloud/chain.git
Documentation: pkg.go.dev
# README
crypto
功能
- 支持 ed25519, secp256k1, sm2
- 统一的 PrivKey,Pubkey, Signature 接口, 详见
crypto.go
依赖
- sm2 编译依赖 gmssl 2.0 版本
- 安装:
bash ./deps/install_gmssl.sh
配置
支持加密插件使能开启, 分叉高度等配置
EnableTypes
指定开启若干加密插件(插件名称),不配置默认启用所有
[crypto] #示例
enableTypes=["secp256k1", "sm2"]
EnableHeight
分叉高度配置, 即区块高度达到配置高度后启用插件, 不配置采用内置的启用高度, 负数表示不启用
[crypto] #示例
[crypto.enableHeight]
"secp256k1" = 0
"sm2"= 100
cryptoID
加密插件 ID 值, int32 类型
手动指定
注册插件时, 支持手动指定插件 ID(crypto.WithRegOptionTypeID(manualID))
- 手动指定 ID 范围, (0, 4096), 低位 12 位
- 建议单元测试调用 CryptoGetCryptoList 接口查看已注册 ID 情况.
自动生成
注册时未指定手动 ID, 将根据插件名称随机生成, 存在冲突时需要手动指定解决
相关说明
cryptoID 主要用于交易签名算法类型判定, cryptoID 不等同于交易 SignatureID
- 接口 chain/types/ExtractCryptoID, 基于 signID 解析 cryptoID
- 底层设计, 参考 chain/types/sign.md
# Functions
BasicValidation 公私钥数据签名验证基础实现.
CRandBytes This uses the OS and the Seed(s).
CRandHex RandHex(24) gives 96 bits of randomness, strong enough for most purposes.
CReader Returns a crand.Reader mixed with user-supplied entropy.
GenDriverTypeID 根据名称生成driver type id.
GetCryptoList 获取加密插件列表,名称和对应的类型值.
GetName 获取name.
GetType 获取type.
Init init crypto.
Load 加载加密插件, 内部会检测在指定区块高度是否使能
不考虑使能情况, 只做插件加载, blockHeight传负值, 如-1.
MixEntropy Mix additional bytes of randomness, e.g.
Register 注册加密算法,支持选项,设置typeID相关参数.
Ripemd160 加密算法.
Sha256 加密算法.
Sm3Hash 加密算法.
ToAggregate 判断签名是否可以支持聚合签名,并且返回聚合签名的接口.
WithLoadOptionEnableCheck 在New阶段根据当前区块高度进行插件使能检测.
WithRegOptionCGO 设置为CGO版本.
WithRegOptionDefaultDisable 设置默认不启用.
WithRegOptionInitFunc 设置插件初始化接口.
WithRegOptionTypeID 手动指定typeID, 不指定情况,系统将根据name自动生成typeID.
# Constants
MaxManualTypeID 手动指定ID最大值 4095.
# Variables
ErrDriverNotEnable 加密插件未开启.
ErrNotSupportAggr 不支持聚合签名.
ErrSign 签名错误.
ErrUnknownDriver 未注册加密插件.
# Interfaces
AggregateCrypto 聚合签名.
Crypto 加密.
PrivKey 私钥.
PubKey 公钥.
Signature 签名.
# Type aliases
DriverInitFunc 插件初始化接口,参数是序列化的json数据,需要unmarshal为自定义的结构.
LoadOption load crypto可选参数.
RegOption Register Driver可选参数,设置相关参数默认值.