From b7be4f6e2794aa76482c592fc401ff530fb5d7ba Mon Sep 17 00:00:00 2001 From: meherett Date: Tue, 13 Aug 2024 20:22:03 +0300 Subject: [PATCH] Bump: Python-BIP38 into v1.0.1 package --- CONTRIBUTING.md | 4 +- README.md | 196 ++++++++++++++++++++++++++---------------------- bip38/info.py | 6 +- 3 files changed, 110 insertions(+), 96 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9dcae67..157a330 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ with the owners of this repository before making a change. To get started, just fork this repo, clone it locally, and run: ``` -pip install -e .[tests,docs] -r requirements.txt +pip install -e .[tests,docs] ``` ## Pull Request @@ -52,4 +52,4 @@ tests against a specific version of Python. ## License -Distributed under the [ISC](https://github.com/meherett/python-bip38/blob/master/LICENSE) license. See ``LICENSE`` for more information. +Distributed under the [MIT](https://github.com/meherett/python-bip38/blob/master/LICENSE) license. See ``LICENSE`` for more information. diff --git a/README.md b/README.md index 3cd0025..bbca156 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,9 @@ [![PyPI Python Version](https://img.shields.io/pypi/pyversions/bip38.svg)](https://pypi.org/project/bip38) [![Coverage Status](https://coveralls.io/repos/github/meherett/python-bip38/badge.svg?branch=master)](https://coveralls.io/github/meherett/python-bip38) -Python library for implementation of Bitcoin Improvement Proposal - 0038 / BIP38 protocol. It supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes. - -BIP38 is a cryptographic standard that defines a method for encrypting and securing private keys associated with Bitcoin addresses. It provides a way to create encrypted versions of private keys, which can then be decrypted using a passphrase. This adds an additional layer of security to the process of storing and transmitting private keys. - -By encrypting a private key with BIP38, users can protect their funds even if the encrypted private key is exposed. This is because an attacker would need to know the passphrase in order to decrypt the private key and gain access to the associated funds. BIP38 encryption is often used to create "paper wallets" or physical copies of Bitcoin private keys that can be stored offline for enhanced security. +A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / (BIP38) protocol. +This library supports both [No EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-flag-is-not-used) and [EC-multiply](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki#encryption-when-ec-multiply-mode-is-used) modes and is compatible with over 150+ cryptocurrencies. +It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types. For more info see the [Passphrase-protected private key - BIP38](https://en.bitcoin.it/wiki/BIP_0038) spec. @@ -36,40 +34,47 @@ pip install git+git://github.com/meherett/python-bip38.git ```python #!/usr/bin/env python3 -from bip38 import ( - private_key_to_wif, bip38_encrypt, bip38_decrypt -) -from typing import ( - List, Literal -) +from typing import List import json +from bip38 import BIP38 +from bip38.cryptocurrencies import Bitcoin as Cryptocurrency +from bip38.wif import private_key_to_wif + # Private key PRIVATE_KEY: str = "cbf4b9f70470856bb4f40f80b87edb90865997ffee6df315ab166d713af433a5" # Passphrase / password PASSPHRASE: str = "meherett" # u"\u03D2\u0301\u0000\U00010400\U0001F4A9" # Network type -NETWORK: Literal["mainnet", "testnet"] = "mainnet" +NETWORK:str = "mainnet" # To show detail DETAIL: bool = True +# Initialize BIP38 instance +bip38: BIP38 = BIP38( + cryptocurrency=Cryptocurrency, network=NETWORK +) # Wallet Important Format's WIFs: List[str] = [ - private_key_to_wif(private_key=PRIVATE_KEY, wif_type="wif", network=NETWORK), # No compression - private_key_to_wif(private_key=PRIVATE_KEY, wif_type="wif-compressed", network=NETWORK) # Compression + private_key_to_wif( + private_key=PRIVATE_KEY, cryptocurrency=Cryptocurrency, network=NETWORK, wif_type="wif" + ), # No compression + private_key_to_wif( + private_key=PRIVATE_KEY, cryptocurrency=Cryptocurrency, network=NETWORK, wif_type="wif-compressed" + ) # Compression ] for WIF in WIFs: print("WIF:", WIF) - encrypted_wif: str = bip38_encrypt( - wif=WIF, passphrase=PASSPHRASE, network=NETWORK + encrypted_wif: str = bip38.encrypt( + wif=WIF, passphrase=PASSPHRASE ) print("BIP38 Encrypted WIF:", encrypted_wif) - print("BIP38 Decrypted:", json.dumps(bip38_decrypt( - encrypted_wif=encrypted_wif, passphrase=PASSPHRASE, network=NETWORK, detail=DETAIL + print("BIP38 Decrypted:", json.dumps(bip38.decrypt( + encrypted_wif=encrypted_wif, passphrase=PASSPHRASE, detail=DETAIL ), indent=4)) print("-" * 125) @@ -115,24 +120,26 @@ BIP38 Decrypted: { ```python #!/usr/bin/env python3 -from bip38 import ( - intermediate_code, create_new_encrypted_wif, confirm_code, bip38_decrypt -) -from typing import ( - List, Literal -) +from typing import List import json import os +from bip38 import BIP38 +from bip38.cryptocurrencies import Bitcoin as Cryptocurrency + # Passphrase / password PASSPHRASE: str = "meherett" # u"\u03D2\u0301\u0000\U00010400\U0001F4A9" # Network type -NETWORK: Literal["mainnet", "testnet"] = "mainnet" +NETWORK: str = "mainnet" # To show detail DETAIL: bool = True -# List of samples with owner salt, seed, public key type, lot, and sequence -SAMPLES: List[dict] = [ +# Initialize BIP38 instance +bip38: BIP38 = BIP38( + cryptocurrency=Cryptocurrency, network=NETWORK +) +# List of owner salt, seed, public key type, lot, and sequence kwargs +KWARGS: List[dict] = [ # Random owner salt & seed, No compression, No lot & sequence {"owner_salt": os.urandom(8), "seed": os.urandom(24), "public_key_type": "uncompressed", "lot": None, "sequence": None}, # Random owner salt & seed, No compression, With lot & sequence @@ -151,24 +158,24 @@ SAMPLES: List[dict] = [ {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "public_key_type": "compressed", "lot": 369861, "sequence": 1}, ] -for SAMPLE in SAMPLES: +for kwarg in KWARGS: - intermediate_passphrase: str = intermediate_code( - passphrase=PASSPHRASE, owner_salt=SAMPLE["owner_salt"], lot=SAMPLE["lot"], sequence=SAMPLE["sequence"] + intermediate_passphrase: str = bip38.intermediate_code( + passphrase=PASSPHRASE, owner_salt=kwarg["owner_salt"], lot=kwarg["lot"], sequence=kwarg["sequence"] ) print("Intermediate Passphrase:", intermediate_passphrase) - encrypted_wif: dict = create_new_encrypted_wif( - intermediate_passphrase=intermediate_passphrase, public_key_type=SAMPLE["public_key_type"], seed=SAMPLE["seed"], network=NETWORK + encrypted_wif: dict = bip38.create_new_encrypted_wif( + intermediate_passphrase=intermediate_passphrase, public_key_type=kwarg["public_key_type"], seed=kwarg["seed"], ) print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4)) - print("Confirm Code:", json.dumps(confirm_code( - passphrase=PASSPHRASE, confirmation_code=encrypted_wif["confirmation_code"], network=NETWORK, detail=DETAIL + print("Confirm Code:", json.dumps(bip38.confirm_code( + passphrase=PASSPHRASE, confirmation_code=encrypted_wif["confirmation_code"], detail=DETAIL ), indent=4)) - print("BIP38 Decrypted:", json.dumps(bip38_decrypt( - encrypted_wif=encrypted_wif["encrypted_wif"], passphrase=PASSPHRASE, network=NETWORK, detail=DETAIL + print("BIP38 Decrypted:", json.dumps(bip38.decrypt( + encrypted_wif=encrypted_wif["encrypted_wif"], passphrase=PASSPHRASE, detail=DETAIL ), indent=4)) print("-" * 125) @@ -178,114 +185,114 @@ for SAMPLE in SAMPLES: Output
```shell -Intermediate Passphrase: passphraseqtFiMLZSKYBJo6ZdivCqkPyMX3bnPFnedQRtEHWHmADXqEfSyJHE1CLuTbF6Wf +Intermediate Passphrase: passphrasemPCQA1bnn4UUz4fKQyGxxmRh3aXjTQnFcqzHreFSkcpCRatZwwpphgbscdDCZu Encrypted WIF: { - "encrypted_wif": "6PfPd3hFPNjBMqirrvSSgEtDnErh9BzqK1NUdk6fiQCaN7LwdGFus4PhQV", - "confirmation_code": "cfrm38V5QE7EN2eF9SfWsesQCjJZSoSjc5YiqLDCgEJoqEDoV2D9f7NRXSqQHsWb3MKogaN8zAs", - "public_key": "0412bb1ec0a2fa1e7c90f4061578d8deeaa6984c9ec5c37717546fb0d127573a03f3050a9f7cb24f62e107c43470388531193fcd8b878618cf74e1d71698069e07", - "seed": "d010fe7f60a25982f3ee7e056e1bcd027f1c15bd26ddd221", + "encrypted_wif": "6PfWfN5oVWW7L4FwCfWNzwyjqRjV4N8VfYKmhW3FBKQ3Ye622bb5UuAHPS", + "confirmation_code": "cfrm38V5oAdNKq1FqxhoKmAdf1gNYxS2HKBwqS2W1D4zmgfpv8AZeLXJXbvTEkZoDaJ9TKKaMne", + "public_key": "0461b5e4a6fbfb6fda76a56cda81a8212c40a5dd7ae7a6ad4f949eb6754c78cc3586a8ccff2b3804d6c8b30cdf66a943466f61470f3e16421eeabea77af60c323c", + "seed": "ebda4e39aecc735594ebcdc09884eba498df3c029a18fc87", "public_key_type": "uncompressed", - "address": "1CHsGDzDbZJPVKiC9hUKe1hnAevwu5RTKi" + "address": "1Pyq2x2rAHLcwBohNRePsEDkF7W3S2n4Y8" } Confirm Code: { - "public_key": "0412bb1ec0a2fa1e7c90f4061578d8deeaa6984c9ec5c37717546fb0d127573a03f3050a9f7cb24f62e107c43470388531193fcd8b878618cf74e1d71698069e07", + "public_key": "0461b5e4a6fbfb6fda76a56cda81a8212c40a5dd7ae7a6ad4f949eb6754c78cc3586a8ccff2b3804d6c8b30cdf66a943466f61470f3e16421eeabea77af60c323c", "public_key_type": "uncompressed", - "address": "1CHsGDzDbZJPVKiC9hUKe1hnAevwu5RTKi", + "address": "1Pyq2x2rAHLcwBohNRePsEDkF7W3S2n4Y8", "lot": null, "sequence": null } BIP38 Decrypted: { - "wif": "5Jp53JGVEkX2dxXXJyb2UdJw3259yk3YjJCdhcHA3eXpJsr6PBB", - "private_key": "83348354ac6638ad7ea78505bd85ff96485e17edcffe85572df9a66f997e1324", + "wif": "5K4EF2MxNbvSc6Yhgv3oFDRRdjQjvMWE4x28BzeaW3RvxN6FkyU", + "private_key": "a35aa5ea84d0896c62bc3c4456a224800970d37f6f89ecc0bc27e52a114977e6", "wif_type": "wif", - "public_key": "0412bb1ec0a2fa1e7c90f4061578d8deeaa6984c9ec5c37717546fb0d127573a03f3050a9f7cb24f62e107c43470388531193fcd8b878618cf74e1d71698069e07", + "public_key": "0461b5e4a6fbfb6fda76a56cda81a8212c40a5dd7ae7a6ad4f949eb6754c78cc3586a8ccff2b3804d6c8b30cdf66a943466f61470f3e16421eeabea77af60c323c", "public_key_type": "uncompressed", - "seed": "d010fe7f60a25982f3ee7e056e1bcd027f1c15bd26ddd221", - "address": "1CHsGDzDbZJPVKiC9hUKe1hnAevwu5RTKi", + "seed": "ebda4e39aecc735594ebcdc09884eba498df3c029a18fc87", + "address": "1Pyq2x2rAHLcwBohNRePsEDkF7W3S2n4Y8", "lot": null, "sequence": null } ----------------------------------------------------------------------------------------------------------------------------- -Intermediate Passphrase: passphrasedcXyya37d7imwPshCWV77N6SdDCXCGkbUDQ8dgg39Xutzej2UoNTRXCWjcVSk3 +Intermediate Passphrase: passphraseYhgPNmgeMKW83mQbXW54e4mkkUnd2VRHmNdEq5p3RqRxycziF4f6SLdo4vhZGo Encrypted WIF: { - "encrypted_wif": "6PgHqxpPU2tA4rqjL5gMMkqeahFRRDDe3g1jJy5mhQdNasT1WtwEkzGcdk", - "confirmation_code": "cfrm38V8LPy6dJTRpd7Qs74zLAdE26F3ZGqJ1Dmr5HheKY2miBwbJMdk1qY6VhZDjNJkitu5Di5", - "public_key": "049b3dcf56a38df3a2437055f2ad3aec950a54f7205bbcc9949d5299ee4e0215d0924a756dce3baf3356da8465341ebf1c580c4ee13e2602508df57ec49a15e981", - "seed": "8195ac15d84c139531faec482a9d312f86f79242acb728a7", + "encrypted_wif": "6PgLWy958ySQGGGiK3SWPBfmhMdWndzuSiDMfBQiskmfzQjjJ7EA3LR1tQ", + "confirmation_code": "cfrm38V8V74UD2Ef4EmEqgAyiHFny8W8h99PjjHwabUcuFA24A56BFmHAB8T46H1XBsWidaBdQL", + "public_key": "04266c15371b6f3331d0f5f6487153a0ec3e50efeb112470fc43aa6ff2915b9f48b6676629fa1eba9fbb26d6d601e7041f8ef6cc3a6a0cbcfb668074a203aa7036", + "seed": "bfd386d285386b43f7e7cf467bb06cd4926f0b3d322fd578", "public_key_type": "uncompressed", - "address": "17YeFTwCoxVhz5P8KiGHv4d8JwUEwPUbhj" + "address": "1Q1MUMMEbGczofkLiXZZbGcZNGnFBb3zM8" } Confirm Code: { - "public_key": "049b3dcf56a38df3a2437055f2ad3aec950a54f7205bbcc9949d5299ee4e0215d0924a756dce3baf3356da8465341ebf1c580c4ee13e2602508df57ec49a15e981", + "public_key": "04266c15371b6f3331d0f5f6487153a0ec3e50efeb112470fc43aa6ff2915b9f48b6676629fa1eba9fbb26d6d601e7041f8ef6cc3a6a0cbcfb668074a203aa7036", "public_key_type": "uncompressed", - "address": "17YeFTwCoxVhz5P8KiGHv4d8JwUEwPUbhj", + "address": "1Q1MUMMEbGczofkLiXZZbGcZNGnFBb3zM8", "lot": 863741, "sequence": 1 } BIP38 Decrypted: { - "wif": "5KGpex1ZJaPoG2L6cHtzAU1nM9un8nw3uD8d6v8xGJs6M6q9qQj", - "private_key": "bff2e24adfd0323ecd0b969cb3768adba578a0ea503306fd647e6b11e8739d70", + "wif": "5K1X75CJR4vEBh3dGek94c4wta9f4PcGnXzSusP6fcBBrSivS2K", + "private_key": "9d33cfac10985552c46f4bef6e0a1b3be6934f89505f2c72fb369b9a707d002b", "wif_type": "wif", - "public_key": "049b3dcf56a38df3a2437055f2ad3aec950a54f7205bbcc9949d5299ee4e0215d0924a756dce3baf3356da8465341ebf1c580c4ee13e2602508df57ec49a15e981", + "public_key": "04266c15371b6f3331d0f5f6487153a0ec3e50efeb112470fc43aa6ff2915b9f48b6676629fa1eba9fbb26d6d601e7041f8ef6cc3a6a0cbcfb668074a203aa7036", "public_key_type": "uncompressed", - "seed": "8195ac15d84c139531faec482a9d312f86f79242acb728a7", - "address": "17YeFTwCoxVhz5P8KiGHv4d8JwUEwPUbhj", + "seed": "bfd386d285386b43f7e7cf467bb06cd4926f0b3d322fd578", + "address": "1Q1MUMMEbGczofkLiXZZbGcZNGnFBb3zM8", "lot": 863741, "sequence": 1 } ----------------------------------------------------------------------------------------------------------------------------- -Intermediate Passphrase: passphraseoH4GEqnBR53ipb9gwLfbJM8nKMx4LnZPCzYbvgPyR2zYkF5DqKrW2gf8DZ8s7y +Intermediate Passphrase: passphrasemJ3X3pNLKLC8crc2obQGDP8SbNSdRdLJq2gDAX5u7Lz4boYRRePo1poeHki7Fz Encrypted WIF: { - "encrypted_wif": "6PnYW3V9jp8sKA4aMEWJjBvNTRtVYBCSRWb6Yja6xZqBhVVrDXWSnYz2at", - "confirmation_code": "cfrm38VUi8UMcgVUDQRSjjn1VxVLfHYQxphSRvAQYSU244oNwHoxt24UByEnUeqSbN6QatRVtaR", - "public_key": "022604144840ed73bc5055916e2e114efe2a706ee71033b48644e3e322a2c58dab", - "seed": "e0051112f4903c0bbe52dc698c031467bf4646040b6b12a3", + "encrypted_wif": "6PnQA3hpiizx1AtX1gfx4CfmyxWNm8pnDN31efWntycsVhfLU6v6LYzCtQ", + "confirmation_code": "cfrm38VUEwMBdVAiTWS6VbAgHcLa7HMofzDcL4RsAfLpgPabqa5HcAApGV2YDJnmuFbcFjQ97ZC", + "public_key": "036dc1541e29df17ee74b483dd8fe5cadd88da1b3f1b24c1bbfcb7595aca3e1b67", + "seed": "975730a1a70bcc1681f28a53daa90164a67d1cba800b086f", "public_key_type": "compressed", - "address": "1EVSAfcUHG8Ce2CF74QwW58wSr7WY4QBaH" + "address": "14fLQxFW9PdvvrueWJKBcoCSKSEcUBFsVG" } Confirm Code: { - "public_key": "022604144840ed73bc5055916e2e114efe2a706ee71033b48644e3e322a2c58dab", + "public_key": "036dc1541e29df17ee74b483dd8fe5cadd88da1b3f1b24c1bbfcb7595aca3e1b67", "public_key_type": "compressed", - "address": "1EVSAfcUHG8Ce2CF74QwW58wSr7WY4QBaH", + "address": "14fLQxFW9PdvvrueWJKBcoCSKSEcUBFsVG", "lot": null, "sequence": null } BIP38 Decrypted: { - "wif": "Kz2v4F99WaPamvCC2LwGTwdr25TnUXUB991wKpVhHGxtJE6iAveq", - "private_key": "53f56bb7fc1a9e9682aa55be6e501776fc9ac2369654c6c85b00b87d41ab8229", + "wif": "L4TUrZr1NYbhrrkky6FQ7dsQSaGJv9GQQ4adPHysftByGWGwbCnR", + "private_key": "d7f21834c5deea162b6bd6fdb22c7155aea4d7467d8c3caa3f38e1873da3557c", "wif_type": "wif-compressed", - "public_key": "022604144840ed73bc5055916e2e114efe2a706ee71033b48644e3e322a2c58dab", + "public_key": "036dc1541e29df17ee74b483dd8fe5cadd88da1b3f1b24c1bbfcb7595aca3e1b67", "public_key_type": "compressed", - "seed": "e0051112f4903c0bbe52dc698c031467bf4646040b6b12a3", - "address": "1EVSAfcUHG8Ce2CF74QwW58wSr7WY4QBaH", + "seed": "975730a1a70bcc1681f28a53daa90164a67d1cba800b086f", + "address": "14fLQxFW9PdvvrueWJKBcoCSKSEcUBFsVG", "lot": null, "sequence": null } ----------------------------------------------------------------------------------------------------------------------------- -Intermediate Passphrase: passphraseaWdkWraG6G7W9TCAhCtmoLXbFWdDYjrG8gtv2VPCY7mCvJgbFCoktRKm4ePsQU +Intermediate Passphrase: passphraseazADit3HysrPUxPQ5AT6uVku3baWtNnNvEhSLu8j7HsAfi1yXc2i8grdQ6c69m Encrypted WIF: { - "encrypted_wif": "6PoHWWXXJTibxUGKcVmyts86N8rcTHXJpAoj5VeRf2FhJqj2oQgCsHheKg", - "confirmation_code": "cfrm38VX8GoZrei4jxLQKA6Mx2zSWkrQZPhxQW1FcCRjtizmQDoWoomm5SW63ESEAUuLkA8MFmc", - "public_key": "025f4476d9d8c093a04499fe9d7fbd34533dae14a498a2506a90d6cfdda66e99b3", - "seed": "1ac2513b9149124a0a0d697ae76cbb4583e85d4a652330a6", + "encrypted_wif": "6PoJKygGkurVG7M5irdCZRw6uQ5g41SuJBsdxGnz7c3345cW8e5FRLU6oj", + "confirmation_code": "cfrm38VXAwUqLBKTncF2N3KQ8P7moHbEG8161X2XuNEi3H5hYQLZGeBUQKDFH36R9bTNAb1Nvt8", + "public_key": "0236efe6b2424ae586285c54fa85975253def57a346171f8099d05f1141d44c8b4", + "seed": "ca1799e4c398ec6c2e76d070977a38a7831db1c48bf3299a", "public_key_type": "compressed", - "address": "1ESHxrqxMLrdzwfif9nQbq4PTGhDGi1uq2" + "address": "15CBXmKhqjZsozC34qwogKAcTVzAfx7ExZ" } Confirm Code: { - "public_key": "025f4476d9d8c093a04499fe9d7fbd34533dae14a498a2506a90d6cfdda66e99b3", + "public_key": "0236efe6b2424ae586285c54fa85975253def57a346171f8099d05f1141d44c8b4", "public_key_type": "compressed", - "address": "1ESHxrqxMLrdzwfif9nQbq4PTGhDGi1uq2", + "address": "15CBXmKhqjZsozC34qwogKAcTVzAfx7ExZ", "lot": 863741, "sequence": 1 } BIP38 Decrypted: { - "wif": "L2otjF2N8EpKvh541jw1n3MrXZLpnCfQ2GB4eiGZLFwoSj1UHprw", - "private_key": "a6c57a43bf2a8ecc153b6b1e8807ec2409033616d4fc98a4edae277c02312eb7", + "wif": "L22EnKuUvu2dSdbS2gV3VzMVYPzCsfo8z7VyMwKDhsTpjcSCYhB3", + "private_key": "8f48fd8acbe206d77fafa605fdc7356296074b543e43048123873dd9db7d1174", "wif_type": "wif-compressed", - "public_key": "025f4476d9d8c093a04499fe9d7fbd34533dae14a498a2506a90d6cfdda66e99b3", + "public_key": "0236efe6b2424ae586285c54fa85975253def57a346171f8099d05f1141d44c8b4", "public_key_type": "compressed", - "seed": "1ac2513b9149124a0a0d697ae76cbb4583e85d4a652330a6", - "address": "1ESHxrqxMLrdzwfif9nQbq4PTGhDGi1uq2", + "seed": "ca1799e4c398ec6c2e76d070977a38a7831db1c48bf3299a", + "address": "15CBXmKhqjZsozC34qwogKAcTVzAfx7ExZ", "lot": 863741, "sequence": 1 } @@ -410,7 +417,7 @@ BIP38 Decrypted: { To get started, just fork this repo, clone it locally, and run: ``` -pip install -e .[tests,docs] -r requirements.txt +pip install -e .[tests,docs] ``` ## Testing @@ -433,12 +440,19 @@ There are tasks for contributors of all experience levels. For more information, see the [CONTRIBUTING.md](https://github.com/meherett/python-bip38/blob/master/CONTRIBUTING.md) file. +## Supported Cryptocurrencies + +This module supports more than 150+ cryptocurrencies, including the following: + +
Name
Network
WIF Prefix
Address Prefix
Adcoinmainnet0xb00x17
Anonmainnet0x800x582
Argoneummainnet0xbf0x32
Artaxmainnet0x970x17
Aryacoinmainnet0x970x17
Asiacoinmainnet0x970x17
Auroracoinmainnet0x970x17
Avianmainnet0x800x3c
Axemainnet0xcc0x37
Batamainnet0xa40x19
BeetleCoinmainnet0x990x1a
BelaCoinmainnet0x990x19
BitCloudmainnet0x990x19
BitSendmainnet0xcc0x66
Bitcoinmainnet0x800x00
testnet0xef0x6f
regtest0xef0x6f
BitcoinAtommainnet0x800x17
BitcoinGoldmainnet0x800x26
BitcoinGreenmainnet0x2e0x26
BitcoinPlusmainnet0x990x19
BitcoinPrivatemainnet0x800x1325
testnet0xef0x1957
BitcoinSVmainnet0x800x00
BitcoinZmainnet0x800x1cb8
Bitcoremainnet0x800x03
Blackcoinmainnet0x990x19
BlockStampmainnet0x800x00
Blocknodemainnet0x4b0x19
testnet0x890x55
Bolivarcoinmainnet0xd50x55
BritCoinmainnet0x990x19
CPUChainmainnet0x800x1c
CanadaeCoinmainnet0x9c0x1c
Cannacoinmainnet0x9c0x1c
Clamsmainnet0x850x89
ClubCoinmainnet0x990x1c
Compcoinmainnet0x9c0x1c
CranePaymainnet0x7b0x1c
Cravemainnet0x990x46
Dashmainnet0xcc0x4c
testnet0xef0x8c
DeepOnionmainnet0x9f0x1f
Defcoinmainnet0x9e0x1e
Denariusmainnet0x9e0x1e
Diamondmainnet0xda0x5a
DigiBytemainnet0x800x1e
Digitalcoinmainnet0x9e0x1e
Divimainnet0xd40x1e
testnet0xd40x1e
Dogecoinmainnet0xf10x1e
testnet0xf10x71
EDRCoinmainnet0xdd0x5d
Ecoinmainnet0xdc0x5c
Einsteiniummainnet0xa10x21
Elastosmainnet0x800x21
Energimainnet0x6a0x21
EuropeCoinmainnet0xa80x21
Evrmoremainnet0x800x21
testnet0xef0x6f
ExclusiveCoinmainnet0xa10x21
FIXmainnet0x3c0x23
testnet0xed0x4c
Feathercoinmainnet0x8e0x0e
Firomainnet0xd20x52
Firstcoinmainnet0xa30x23
Flashcoinmainnet0xc40x44
Fluxmainnet0x800x1cb8
Foxdcoinmainnet0x800x23
testnet0xef0x5f
FujiCoinmainnet0xa40x24
GCRCoinmainnet0x9a0x26
GameCreditsmainnet0xa60x26
GoBytemainnet0xc60x26
Gridcoinmainnet0xbe0x3e
GroestlCoinmainnet0x800x24
testnet0xef0x6f
Guldenmainnet0x620x26
Helleniccoinmainnet0xb00x30
Hempcoinmainnet0xa80x28
Horizenmainnet0x800x2089
Hushmainnet0x800x1cb8
IXCoinmainnet0x800x8a
InsaneCoinmainnet0x370x66
InternetOfPeoplemainnet0x310x75
Jumbucksmainnet0xab0x2b
Kobocoinmainnet0xa30x23
Komodomainnet0xbc0x3c
LBRYCreditsmainnet0x1c0x55
Landcoinmainnet0xb00x30
Linxmainnet0xcb0x4b
Litecoinmainnet0xb00x30
testnet0xef0x6f
LitecoinCashmainnet0xb00x1c
LitecoinZmainnet0x800xab3
Lkrcoinmainnet0xb00x30
Lynxmainnet0xad0x2d
Mazacoinmainnet0xe00x32
Megacoinmainnet0xb20x32
Minexcoinmainnet0x800x4b
Monacoinmainnet0xb00x32
Monkmainnet0x370x33
Myriadcoinmainnet0xb20x32
NIXmainnet0x800x26
Namecoinmainnet0x800x34
Navcoinmainnet0x960x35
Nebliomainnet0xb50x35
Neoscoinmainnet0xb10x35
Neurocoinmainnet0xb50x35
NewYorkCoinmainnet0xbc0x3c
Novacoinmainnet0x880x08
NuBitsmainnet0x960x19
NuSharesmainnet0x950x3f
OKCashmainnet0x030x37
Omnimainnet0x800x00
testnet0xef0x6f
Onixmainnet0xcb0x4b
Particlmainnet0x6c0x38
Peercoinmainnet0xb70x37
Pesobitmainnet0xb70x37
Phoremainnet0xd40x37
Pinkcoinmainnet0x830x03
Pivxmainnet0xd40x1e
testnet0xef0x8b
PoSWCoinmainnet0xb70x37
Potcoinmainnet0xb70x37
ProjectCoinmainnet0x750x37
Putincoinmainnet0xb70x37
Qtummainnet0x800x3a
testnet0xef0x78
RSKmainnet0x800x00
testnet0xef0x6f
Rapidsmainnet0x2e0x3d
Ravencoinmainnet0x800x3c
testnet0x800x6f
Reddcoinmainnet0xbd0x3d
Ripplemainnet0x800x00
Ritocoinmainnet0x8b0x19
Rubycoinmainnet0xbc0x3c
Safecoinmainnet0xbd0x3d
Saluscoinmainnet0xbf0x3f
Scribemainnet0x6e0x3c
ShadowCashmainnet0xbf0x3f
testnet0xff0x7f
Slimcoinmainnet0x460x3f
testnet0x570x6f
Smileycoinmainnet0x050x19
Solarcoinmainnet0x920x12
Stashmainnet0xcc0x4c
testnet0xef0x8c
Stratismainnet0xbf0x3f
testnet0xbf0x41
Sugarchainmainnet0x800x3f
testnet0xef0x42
Syscoinmainnet0x800x3f
TOACoinmainnet0xc10x41
TWINSmainnet0x420x49
testnet0xed0x4c
ThoughtAImainnet0x7b0x07
UltimateSecureCashmainnet0xbf0x44
Unobtaniummainnet0xe00x82
Vcashmainnet0xc70x47
Vergemainnet0x9e0x1e
Vertcoinmainnet0x800x47
Viacoinmainnet0xc70x47
testnet0xff0x7f
VirtualCashmainnet0xc70x47
Vivomainnet0xc60x46
Voxelsmainnet0xc60x46
Wagerrmainnet0xc70x49
Whitecoinmainnet0xc90x49
Wincoinmainnet0xc90x49
XUEZmainnet0xd40x4b
Ycashmainnet0x800x1c28
ZClassicmainnet0x800x1cb8
Zcashmainnet0x800x1cb8
testnet0xef0x1d25
Zetacoinmainnet0xe00x50
ZooBCmainnet0x800x00
eGuldenmainnet0xb00x30
+ ## Donations Buy me a coffee if You found this tool helpful: -- **BTC** - 12uaGVdX1t86FXLQ4yYPrRQDCK7xGGu82r -- **BTC / ETH / USDT** - [hd.wallet](https://ud.me/hd.wallet) +- **Bitcoin** - 12uaGVdX1t86FXLQ4yYPrRQDCK7xGGu82r +- **Ethereum / Tether** - 0xCCAad7A87fd81553d0F93F743Fb4Fc6B213b228B +- **Bitcoin / Ethereum / Tether** - With Unstoppable [hd.wallet](https://ud.me/hd.wallet) Thank you very much for your support. diff --git a/bip38/info.py b/bip38/info.py index b78710c..afa2c06 100644 --- a/bip38/info.py +++ b/bip38/info.py @@ -7,14 +7,14 @@ from typing import List __name__: str = "bip38" -__version__: str = "v1.0.0" +__version__: str = "v1.0.1" __license__: str = "MIT" __author__: str = "Meheret Tesfaye Batu" __email__: str = "meherett.batu@gmail.com" __documentation__: str = "https://bip38.readthedocs.com" -__description__: str = "Python library for implementation of Bitcoin Improvement Proposal - 0038 / BIP38 protocol." +__description__: str = "A Python library for implementation of Bitcoin Improvement Proposal - 0038 / BIP38 protocol." __url__: str = "https://github.com/meherett/python-bip38" __tracker__: str = f"{__url__}/issues" __keywords__: List[str] = [ - "bip38", "bitcoin", "private-key", "pure-python", "encrypt", "decrypt", "passphrase", "wif", "bip-0038" + "bip38", "bitcoin", "private-key", "hdwallet", "encrypt", "decrypt", "passphrase", "wif", "bip-0038" ]