You are viewing a single comment's thread from:

RE: 求大神给讲讲签名部分

in #cn-programming7 years ago

lenR和lenS 都等于32就是规范签名?

这与 DER encoding 有关。

r, s 都是 unsigned 256-bit-integer,一般来说会以 32-byte 表示。而根据 DER 的要求,数字的首 bit 是用于表示正负号。因此若签名的 r, s 大于 2^255,则必须前缀一个 byte 0x00,否则会被当负数处理。

steem 的签名采用的是 Secp256k1,其 n 值取 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141。

因此,若 s 小于 n 的一半,则经 DER 编码后 s 的长度只会是 32 或更小。

Sort:  

顺便一提:
严格来说,32 byte 的 s,数值还是有可能会大于 n/2。
但几率极小(约 1/2^127),现实中不可能发生。

至于为什么规定 r 只能取 32 byte (以及 s 不能小于 32),则不得而知。
但 steem 所采用的标准是直接承续于 Bitshares,也许 @abit 会清楚其由来。

1024个 赞也不能表达我的谢意和敬意
您回答的这部分内容正是我想学习和了解的
万分感激:)

Coin Marketplace

STEEM 0.17
TRX 0.14
JST 0.028
BTC 58304.13
ETH 2575.50
USDT 1.00
SBD 2.43