2019年4月15日月曜日

開発環境

Programming Bitcoin: Learn How to Program Bitcoin from Scratch (Jimmy Song(著)、O'Reilly Media)のChapter 4(Serialization)、DER Signatures、Exercises 3(81)の解答を求めてみる。

コード

Python 3

#!/usr/bin/env python3
class Signature:
    def __init__(self, r, s):
        self.r = r
        self.s = s

    def __repr__(self):
        return f'Signature({self.r:x},{self.s:x})'

    def der(self):
        result = b''
        for o in [self.r, self.s]:
            o = o.to_bytes(32, byteorder='big')
            o = o.lstrip(b'\x00')
            if o[0] & 0x80:
                o = b'\x00' + o
            result += bytes([2, len(o)]) + o
        return bytes([0x30, len(result)]) + result


r = 0x37206a0610995c58074999cb9767b87af4c4978db68c06e8e6e81d282047a7c6
s = 0x8ca63739c1157ebeaec0d03cecca119fc9a75bf86d0fab5c84ac8e2738cdaec
sign = Signature(r, s)
print(sign.der())
print(sign.der().hex())

入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))

C:\Users\...>py sample3.py
b'0D\x02 7 j\x06\x10\x99\\X\x07I\x99\xcb\x97g\xb8z\xf4\xc4\x97\x8d\xb6\x8c\x06\xe8\xe6\xe8\x1d( G\xa7\xc6\x02 \x08\xcacs\x9c\x11W\xeb\xea\xec\r\x03\xce\xcc\xa1\x19\xfc\x9au\xbf\x86\xd0\xfa\xb5\xc8J\xc8\xe2s\x8c\xda\xec'
3044022037206a0610995c58074999cb9767b87af4c4978db68c06e8e6e81d282047a7c6022008ca63739c1157ebeaec0d03cecca119fc9a75bf86d0fab5c84ac8e2738cdaec

C:\Users\...>

0 コメント:

コメントを投稿