%global _empty_manifest_terminate_build 0 Name: python-hdwallets Version: 0.1.2 Release: 1 Summary: Python implementation of the BIP32 key derivation scheme License: BSD-3-Clause URL: https://github.com/hukkinj1/hdwallets Source0: https://mirrors.aliyun.com/pypi/web/packages/fd/29/3bc233a31c4ad135c83fc6a247e092571848b91eb052b31d04ecafdc85f3/hdwallets-0.1.2.tar.gz BuildArch: noarch Requires: python3-ecdsa %description [![PyPI version](https://img.shields.io/pypi/v/hdwallets)](https://pypi.org/project/hdwallets) [![Build Status](https://github.com/hukkinj1/hdwallets/workflows/Tests/badge.svg?branch=master)](https://github.com/hukkinj1/hdwallets/actions?query=workflow%3ATests+branch%3Amaster+event%3Apush) [![codecov.io](https://codecov.io/gh/hukkinj1/hdwallets/branch/master/graph/badge.svg)](https://codecov.io/gh/hukkinj1/hdwallets) # hdwallets A basic implementation of the [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) specification for hierarchical deterministic wallets. A fork of https://github.com/darosior/python-bip32 with some notable changes: - [`base58`](https://pypi.org/project/base58/) dependency removed. All interfaces input and output raw bytes instead of base58 strings. - Replaced [`coincurve`](https://pypi.org/project/coincurve/) dependency with [`ecdsa`](https://pypi.org/project/ecdsa/) - Distributes type information ([PEP 561](https://www.python.org/dev/peps/pep-0561/)) ## Usage ```python >>> import base58 >>> from hdwallets import BIP32, HARDENED_INDEX >>> bip32 = BIP32.from_seed(bytes.fromhex("01")) # Specify the derivation path as a list ... >>> bip32.get_xpriv_from_path([1, HARDENED_INDEX, 9998]) b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9" # ... Or in usual m/the/path/ >>> bip32.get_xpriv_from_path("m/1/0'/9998") b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9" >>> bip32.get_xpub_from_path([HARDENED_INDEX, 42]) b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4" # You can also use "h" or "H" to signal for hardened derivation >>> bip32.get_xpub_from_path("m/0h/42") b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4" # You can use pubkey-only derivation >>> bip32 = BIP32.from_xpub(base58.b58decode_check("xpub6AKC3u8URPxDojLnFtNdEPFkNsXxHfgRhySvVfEJy9SVvQAn14XQjAoFY48mpjgutJNfA54GbYYRpR26tFEJHTHhfiiZZ2wdBBzydVp12yU")) >>> bip32.get_xpub_from_path([42, 43]) b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x' >>> bip32.get_xpub_from_path("m/42/43") b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x' >>> bip32.get_pubkey_from_path("m/1/1/1/1/1/1/1/1/1/1/1") b'\x02\x0c\xac\n\xa8\x06\x96C\x8e\x9b\xcf\x83]\x0c\rCm\x06\x1c\xe9T\xealo\xa2\xdf\x195\xebZ\x9b\xb8\x9e' ``` ## Installation ```sh pip install hdwallets ``` ## Interface All public keys below are compressed. All `path` below are a list of integers representing the index of the key at each depth. #### BIP32 ##### from\_seed(seed) __*staticmethod*__ Instantiate from a raw seed (as `bytes`). See [bip-0032's master key generation](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#master-key-generation). ##### from\_xpriv(xpriv) __*staticmethod*__ Instantiate with an encoded serialized extended private key (as `str`) as master. ##### from\_xpub(xpub) __*staticmethod*__ Instantiate with an encoded serialized extended public key (as `str`) as master. You'll only be able to derive unhardened public keys. ##### get\_extended\_privkey\_from\_path(path) Returns `(chaincode (bytes), privkey (bytes))` of the private key pointed by the path. ##### get\_privkey\_from\_path(path) Returns `privkey (bytes)`, the private key pointed by the path. ##### get\_extended\_pubkey\_from\_path(path) Returns `(chaincode (bytes), pubkey (bytes))` of the public key pointed by the path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_pubkey\_from\_path(path) Returns `pubkey (bytes)`, the public key pointed by the path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_xpriv\_from\_path(path) Returns `xpriv (str)` the serialized and encoded extended private key pointed by the given path. ##### get\_xpub\_from\_path(path) Returns `xpub (str)` the serialized and encoded extended public key pointed by the given path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_master\_xpriv(path) Equivalent to `get_xpriv_from_path([])`. ##### get\_master\_xpub(path) Equivalent to `get_xpub_from_path([])`. %package -n python3-hdwallets Summary: Python implementation of the BIP32 key derivation scheme Provides: python-hdwallets BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-hdwallets [![PyPI version](https://img.shields.io/pypi/v/hdwallets)](https://pypi.org/project/hdwallets) [![Build Status](https://github.com/hukkinj1/hdwallets/workflows/Tests/badge.svg?branch=master)](https://github.com/hukkinj1/hdwallets/actions?query=workflow%3ATests+branch%3Amaster+event%3Apush) [![codecov.io](https://codecov.io/gh/hukkinj1/hdwallets/branch/master/graph/badge.svg)](https://codecov.io/gh/hukkinj1/hdwallets) # hdwallets A basic implementation of the [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) specification for hierarchical deterministic wallets. A fork of https://github.com/darosior/python-bip32 with some notable changes: - [`base58`](https://pypi.org/project/base58/) dependency removed. All interfaces input and output raw bytes instead of base58 strings. - Replaced [`coincurve`](https://pypi.org/project/coincurve/) dependency with [`ecdsa`](https://pypi.org/project/ecdsa/) - Distributes type information ([PEP 561](https://www.python.org/dev/peps/pep-0561/)) ## Usage ```python >>> import base58 >>> from hdwallets import BIP32, HARDENED_INDEX >>> bip32 = BIP32.from_seed(bytes.fromhex("01")) # Specify the derivation path as a list ... >>> bip32.get_xpriv_from_path([1, HARDENED_INDEX, 9998]) b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9" # ... Or in usual m/the/path/ >>> bip32.get_xpriv_from_path("m/1/0'/9998") b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9" >>> bip32.get_xpub_from_path([HARDENED_INDEX, 42]) b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4" # You can also use "h" or "H" to signal for hardened derivation >>> bip32.get_xpub_from_path("m/0h/42") b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4" # You can use pubkey-only derivation >>> bip32 = BIP32.from_xpub(base58.b58decode_check("xpub6AKC3u8URPxDojLnFtNdEPFkNsXxHfgRhySvVfEJy9SVvQAn14XQjAoFY48mpjgutJNfA54GbYYRpR26tFEJHTHhfiiZZ2wdBBzydVp12yU")) >>> bip32.get_xpub_from_path([42, 43]) b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x' >>> bip32.get_xpub_from_path("m/42/43") b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x' >>> bip32.get_pubkey_from_path("m/1/1/1/1/1/1/1/1/1/1/1") b'\x02\x0c\xac\n\xa8\x06\x96C\x8e\x9b\xcf\x83]\x0c\rCm\x06\x1c\xe9T\xealo\xa2\xdf\x195\xebZ\x9b\xb8\x9e' ``` ## Installation ```sh pip install hdwallets ``` ## Interface All public keys below are compressed. All `path` below are a list of integers representing the index of the key at each depth. #### BIP32 ##### from\_seed(seed) __*staticmethod*__ Instantiate from a raw seed (as `bytes`). See [bip-0032's master key generation](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#master-key-generation). ##### from\_xpriv(xpriv) __*staticmethod*__ Instantiate with an encoded serialized extended private key (as `str`) as master. ##### from\_xpub(xpub) __*staticmethod*__ Instantiate with an encoded serialized extended public key (as `str`) as master. You'll only be able to derive unhardened public keys. ##### get\_extended\_privkey\_from\_path(path) Returns `(chaincode (bytes), privkey (bytes))` of the private key pointed by the path. ##### get\_privkey\_from\_path(path) Returns `privkey (bytes)`, the private key pointed by the path. ##### get\_extended\_pubkey\_from\_path(path) Returns `(chaincode (bytes), pubkey (bytes))` of the public key pointed by the path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_pubkey\_from\_path(path) Returns `pubkey (bytes)`, the public key pointed by the path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_xpriv\_from\_path(path) Returns `xpriv (str)` the serialized and encoded extended private key pointed by the given path. ##### get\_xpub\_from\_path(path) Returns `xpub (str)` the serialized and encoded extended public key pointed by the given path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_master\_xpriv(path) Equivalent to `get_xpriv_from_path([])`. ##### get\_master\_xpub(path) Equivalent to `get_xpub_from_path([])`. %package help Summary: Development documents and examples for hdwallets Provides: python3-hdwallets-doc %description help [![PyPI version](https://img.shields.io/pypi/v/hdwallets)](https://pypi.org/project/hdwallets) [![Build Status](https://github.com/hukkinj1/hdwallets/workflows/Tests/badge.svg?branch=master)](https://github.com/hukkinj1/hdwallets/actions?query=workflow%3ATests+branch%3Amaster+event%3Apush) [![codecov.io](https://codecov.io/gh/hukkinj1/hdwallets/branch/master/graph/badge.svg)](https://codecov.io/gh/hukkinj1/hdwallets) # hdwallets A basic implementation of the [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) specification for hierarchical deterministic wallets. A fork of https://github.com/darosior/python-bip32 with some notable changes: - [`base58`](https://pypi.org/project/base58/) dependency removed. All interfaces input and output raw bytes instead of base58 strings. - Replaced [`coincurve`](https://pypi.org/project/coincurve/) dependency with [`ecdsa`](https://pypi.org/project/ecdsa/) - Distributes type information ([PEP 561](https://www.python.org/dev/peps/pep-0561/)) ## Usage ```python >>> import base58 >>> from hdwallets import BIP32, HARDENED_INDEX >>> bip32 = BIP32.from_seed(bytes.fromhex("01")) # Specify the derivation path as a list ... >>> bip32.get_xpriv_from_path([1, HARDENED_INDEX, 9998]) b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9" # ... Or in usual m/the/path/ >>> bip32.get_xpriv_from_path("m/1/0'/9998") b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9" >>> bip32.get_xpub_from_path([HARDENED_INDEX, 42]) b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4" # You can also use "h" or "H" to signal for hardened derivation >>> bip32.get_xpub_from_path("m/0h/42") b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4" # You can use pubkey-only derivation >>> bip32 = BIP32.from_xpub(base58.b58decode_check("xpub6AKC3u8URPxDojLnFtNdEPFkNsXxHfgRhySvVfEJy9SVvQAn14XQjAoFY48mpjgutJNfA54GbYYRpR26tFEJHTHhfiiZZ2wdBBzydVp12yU")) >>> bip32.get_xpub_from_path([42, 43]) b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x' >>> bip32.get_xpub_from_path("m/42/43") b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x' >>> bip32.get_pubkey_from_path("m/1/1/1/1/1/1/1/1/1/1/1") b'\x02\x0c\xac\n\xa8\x06\x96C\x8e\x9b\xcf\x83]\x0c\rCm\x06\x1c\xe9T\xealo\xa2\xdf\x195\xebZ\x9b\xb8\x9e' ``` ## Installation ```sh pip install hdwallets ``` ## Interface All public keys below are compressed. All `path` below are a list of integers representing the index of the key at each depth. #### BIP32 ##### from\_seed(seed) __*staticmethod*__ Instantiate from a raw seed (as `bytes`). See [bip-0032's master key generation](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#master-key-generation). ##### from\_xpriv(xpriv) __*staticmethod*__ Instantiate with an encoded serialized extended private key (as `str`) as master. ##### from\_xpub(xpub) __*staticmethod*__ Instantiate with an encoded serialized extended public key (as `str`) as master. You'll only be able to derive unhardened public keys. ##### get\_extended\_privkey\_from\_path(path) Returns `(chaincode (bytes), privkey (bytes))` of the private key pointed by the path. ##### get\_privkey\_from\_path(path) Returns `privkey (bytes)`, the private key pointed by the path. ##### get\_extended\_pubkey\_from\_path(path) Returns `(chaincode (bytes), pubkey (bytes))` of the public key pointed by the path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_pubkey\_from\_path(path) Returns `pubkey (bytes)`, the public key pointed by the path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_xpriv\_from\_path(path) Returns `xpriv (str)` the serialized and encoded extended private key pointed by the given path. ##### get\_xpub\_from\_path(path) Returns `xpub (str)` the serialized and encoded extended public key pointed by the given path. Note that you don't need to have provided the master private key if the path doesn't include an index `>= HARDENED_INDEX`. ##### get\_master\_xpriv(path) Equivalent to `get_xpriv_from_path([])`. ##### get\_master\_xpub(path) Equivalent to `get_xpub_from_path([])`. %prep %autosetup -n hdwallets-0.1.2 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-hdwallets -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Jun 20 2023 Python_Bot - 0.1.2-1 - Package Spec generated