Bitcoin-Core
緊湊格式的比特幣 ECDSA 簽名
我想了解如何以緊湊格式獲取比特幣 ECDSA 簽名,當它正好是 65 個字節時。
在比特幣核心儲存庫中,secp256k1_ecdsa_recoverable_signature_load負責此操作。據我了解,其中r和s使用secp256k1_scalar_set_b32分別減少為 32 字節表示,但我不明白它的工作原理。什麼是 EXHAUSTIVE_TEST_ORDER?為什麼 32b 標量的結果表示在它之後仍然有效?如果有人可以向我解釋,我將不勝感激。
您正在查看的只是一個您真正不需要擔心的實現細節。它只是從內部格式(可能使用不同的座標系和位長度,特別是對於測試)轉換為標準輸出格式。在庫本身內,簽名中的數據在其他格式或座標系統中可能更容易和更有效地處理。因此,表示該數據的結構以不同的方式儲存數據。然而,當輸出結果時,它必須都是標準格式,所以這就是這些轉換所做的:從內部表示變為標準輸出格式。
這是針對 libsecp256k1 所做的任何簽名序列化輸出完成的。緊湊格式只是 R 和 s 的兩個 256 位值相互連接。前 32 個字節是 R,第二個是 s。對於標準緊湊簽名,就是這樣。對於緊湊的可恢復簽名(這是您正在查看的),恢復 id 有一個額外的最後一個字節。