Transactions
ECDSA r, s 編碼為簽名
簽名給定消息時的 ECDSA 算法會產生一對輸出r 和 s。給定來自 Tx 的 sigStr,如何提取 r 和 s?它們只是連接特定長度的字節數組,還是還有更多?
如果您願意,您可以為標準ANSI X9.62支付 100 美元。或者,您可以作弊並查看RFC3278,第 8.2 節。它是 DER 格式,由兩個 INTEGER 的 SEQUENCE 組成。第一個 INTEGER 是
r
,第二個s
。如果您查看此交易,您會看到其中一個簽名是:
3045 0220
316eb3cad8b66fcf1494a6e6f9542c3555addbf337f04b62bf4758483fdc881d
022100
bf46d26cef45d998a2cb5d2d0b8342d70973fa7c3c3242ae7223146b56
如果我們將其解析為 DER,我們會得到:
0:d=0 hl=2 l= 69 cons: SEQUENCE 2:d=1 hl=2 l= 32 prim: INTEGER :316EB3CAD8B66FCF1494A6E6F9542C3555ADDBF337F04B62BF4758483FDC881D 36:d=1 hl=2 l= 33 prim: INTEGER :BF46D26CEF45D998A2CB5D2D0B8342D70973FA7C3C37AE72234696524B2BC812
您還可以查看 OpenSSL 原始碼,文件
ecdsa/ecs_asn1.c
:ASN1_SEQUENCE(ECDSA_SIG) = { ASN1_SIMPLE(ECDSA_SIG, r, CBIGNUM), ASN1_SIMPLE(ECDSA_SIG, s, CBIGNUM) } ASN1_SEQUENCE_END(ECDSA_SIG)