paddr

package
v0.0.0-...-adb7d0b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2023 License: MIT Imports: 9 Imported by: 2

Documentation

Overview

Package paddr 账户公钥相关的一些操作。

Index

Constants

View Source
const (
	// 地址前缀分隔符。
	// 固定标识,可用于剥离前缀。
	Delimiter = ':'

	// 公钥哈希地址长度。
	HashSize = chash.Size160

	// 多重签名数量最大值。
	MulSigMaxN = 0xff
)

Variables

View Source
var (
	// 多重签名条目数错误。
	ErrMSigSize = errors.New(_T("多重签名条目数超出上限(255)"))

	// 多重签名公钥序位错误。
	ErrMSigIndex = errors.New(_T("多重签名公钥序位空缺错误"))

	// 前缀分隔符错误。
	ErrDelimMissing = errors.New(_T("账户地址无标识前缀分隔符"))

	// 校验错误。
	ErrChecksum = errors.New(_T("地址校验错误"))

	// 无效格式。
	ErrInvalidFormat = errors.New(_T("无效的格式:缺失校验码"))
)

Functions

func Decode

func Decode(addr string) ([]byte, string, error)

Decode 账户地址解码为公钥地址。 1. 提取识别前缀和文本地址。 2. 将文本地址解码为字节序列。末尾4字节为校验码,前段为公钥地址。 3. 公钥地址前置识别前缀(即“前缀+公钥地址”),执行两次哈希运算取末尾4字节为校验码。 4. 比较上面两个校验码,相同则地址合法。

func Encode

func Encode(pkh []byte, prefix string) string

Encode 公钥地址编码为账户地址。 采用 Base58 编码,标识前缀与后段地址之间以冒号分隔。 - pkh 为公钥地址。 - prefix 为标识前缀。 编码: 1. 公钥地址添加识别前缀,即“前缀+公钥地址”。 2. 对其执行两次哈希运算,取末尾4字节为校验码。 3. 在公钥地址之后附上校验码(此时无前缀),编码为文本地址。 4. 附上识别前缀,即“前缀:文本地址”即为账户地址。 注: 前缀分隔符(:)为系统设置。

Types

type PKAddr

type PKAddr []byte

公钥地址。 20 或 22 字节长。

func Hash

func Hash(pubKey, prefix []byte) PKAddr

Hash 构造公钥哈希地址。 并不检查字节序列长度是否规范,即:支持任意字节数据。 比如构造多重签名公钥地址时,有前置n/T配比字节(此时prefix就有用了)。 返回值:公钥地址。 注记: 嵌套不同的哈希算法以强化安全,如某个算法被攻破也问题不大。 有限数量人类个体使用20字节的地址空间已经足够, 即便亿亿万一发生碰撞,两个地址应当已相距百年千年,不太可能被盗用。

func MulHash

func MulHash(pks [][]byte, pkhs [][]byte) (PKAddr, error)

MulHash 构造多重签名公钥地址。 - pks 为签名公钥集。 - pkhs 为剩余未签名公钥地址集。 规则: 两个集合中字节序列成员内的首字节为位置序号。 n/T 配比各占1字节,参与哈希构造,放置在公钥地址清单前端。 返回的总公钥地址也前置 n/T 配比(明码)。 注: 详情参考系统设计文档中多重签名地址说明部分。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL