Skip to content

Commit

Permalink
Merge branch 'peerchemist-b58'
Browse files Browse the repository at this point in the history
  • Loading branch information
SimoneBronzini committed Feb 20, 2018
2 parents fb7414f + b6a8c68 commit 265f22c
Show file tree
Hide file tree
Showing 9 changed files with 317 additions and 5 deletions.
74 changes: 74 additions & 0 deletions btcpy/lib/base58.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
'''Base58 encoding
Implementations of Base58 and Base58Check endcodings that are compatible
with the bitcoin network.
'''

from hashlib import sha256

# 58 character alphabet used
alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'

iseq = lambda s: s
bseq = bytes
buffer = lambda s: s.buffer


def b58encode(v: bytes) -> str:
'''Encode a string using Base58'''

origlen = len(v)
v = v.lstrip(b'\0')
newlen = len(v)

p, acc = 1, 0
for c in iseq(v[::-1]):
acc += p * c
p = p << 8

result = ''
while acc > 0:
acc, mod = divmod(acc, 58)
result += alphabet[mod]

return (result + alphabet[0] * (origlen - newlen))[::-1]


def b58decode(v: str) -> bytes:
'''Decode a Base58 encoded string'''

origlen = len(v)
v = v.lstrip(alphabet[0])
newlen = len(v)

p, acc = 1, 0
for c in v[::-1]:
acc += p * alphabet.index(c)
p *= 58

result = []
while acc > 0:
acc, mod = divmod(acc, 256)
result.append(mod)

return (bseq(result) + b'\0' * (origlen - newlen))[::-1]


def b58encode_check(v: bytes) -> str:
'''Encode a string using Base58 with a 4 character checksum'''

digest = sha256(sha256(v).digest()).digest()
return b58encode(v + digest[:4])


def b58decode_check(v: str) -> bytes:
'''Decode and verify the checksum of a Base58 encoded string'''

result = b58decode(v)
result, check = result[:-4], result[-4:]
digest = sha256(sha256(result).digest()).digest()

if check != digest[:4]:
raise ValueError("Invalid checksum")

return result
2 changes: 1 addition & 1 deletion btcpy/lib/codecs.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
# LICENSE.md file.

from abc import ABCMeta, abstractmethod
from base58 import b58encode_check, b58decode_check
from .base58 import b58encode_check, b58decode_check

from .bech32 import decode, encode
from ..setup import is_mainnet, net_name
Expand Down
2 changes: 1 addition & 1 deletion btcpy/structs/crypto.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
# LICENSE.md file.

from binascii import hexlify, unhexlify
from base58 import b58decode_check, b58encode_check
from ..lib.base58 import b58decode_check, b58encode_check
from hashlib import sha256
from ecdsa import SigningKey, SECP256k1
from ecdsa.util import sigencode_der
Expand Down
2 changes: 1 addition & 1 deletion btcpy/structs/hd.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

import hmac
from hashlib import sha512
from base58 import b58decode_check, b58encode_check
from ..lib.base58 import b58decode_check, b58encode_check
from ecdsa import VerifyingKey
from ecdsa.ellipticcurve import INFINITY
from ecdsa.curves import SECP256k1
Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
ecdsa==0.13 --hash=sha256:40d002cf360d0e035cf2cb985e1308d41aaa087cbfc135b2dc2d844296ea546c
base58==0.2.5 --hash=sha256:b1c481f2b8cfbc31f77dafc0e9690d92f7c03dc01481a4512eb1914e91744856
python-bitcoinlib==0.7.0 --hash=sha256:a083f61b30c7d748f8c785591fbdc26dbad98b64946cd1fbbf25c860b8ff7c3c
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
setup(name='chainside-btcpy',
version='0.3.0',
packages=find_packages(),
install_requires=['ecdsa==0.13', 'base58==0.2.5'],
install_requires=['ecdsa==0.13'],
extras_require={'develop': ['python-bitcoinlib==0.7.0']},
description='A Python3 SegWit-compliant library which provides tools to handle Bitcoin data structures in a simple fashion.',
author='chainside srl',
Expand Down
114 changes: 114 additions & 0 deletions tests/data/base58.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
[
["", ""],
["61", "2g"],
["626262", "a3gV"],
["636363", "aPEr"],
["73696d706c792061206c6f6e6720737472696e67", "2cFupjhnEsSn59qHXstmK2ffpLv2"],
["00eb15231dfceb60925886b67d065299925915aeb172c06647", "1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L"],
["516b6fcd0f", "ABnLTmg"],
["bf4f89001e670274dd", "3SEo3LWLoPntC"],
["572e4794", "3EFU7m"],
["ecac89cad93923c02321", "EJDM8drfXA6uyA"],
["10c8511e", "Rt5zm"],
["00000000000000000000", "1111111111"],
["304ffda1f73e96ccfc96a00dec8424026c73ee", "9qzGgs8TcMDGSynXLpPixJidDF"],
["e2369ff4ca7851f802a7492e8db2a79d0c928f7ff9", "EunxRoC3JCKzMCfpuqGvxHnAz1iHe"],
["237405d75ca870cea1e3e77e", "fodJhcFw797MzHwT"],
["8f50fc35480f90", "6S13VsH7vP"],
["0b08b8fefe33972f3b200e58", "D5Thbyu4FXgV7EJT"],
["28f4b1f0d213", "MPu9buNr"],
["1f", "Y"],
["3c3f6da6fa02f47d", "B5UmiGvyWyA"],
["a43c84656f5077dd6f73a7292e5d11", "5bVzeMJXFWyoTyaYrG6wS"],
["0548f9416877d32bce9c06c683820f24aa8ce27b6fc058", "7LDHyizZAxy5kUiQ8wHkG2ugCmBdq83"],
["11c470a1404d3087928f29fe9b", "2UqK9GynYu24Msrr1p"],
["613b4042", "3V9he1"],
["8cfa", "BjF"],
["b91f4bb6e3e2bf6e3bd0d9d73f8b11756d", "2ju5bZjhEEqBGAkXAnUUhJZz"],
["a1e985789ada4ba79c2540c6a0fa6973", "LzdVpBMAnxHXZ1MSksRSc2"],
["63aa3104165bfa04dece6b", "RiS9ebNSQCckQ66"],
["da048bd3a2f1", "2sZrdJuqz"],
["c5996b9699116bd5bf9f47505c209f", "6XdvNYHkwX6nnXMhrFXve"],
["12", "K"],
["122bfe56131ddbdc6f", "ER7AXeVMwRot"],
["bdc8ae0613870b75320731cc86", "GoqR6vtRybzfrDNUTo"],
["c3e6", "Fuf"],
["14358e62b04df7dc84249642", "P7uuRu62HjYBNBqs"],
["a26ee5169d17c5f7108a73d8f74201307d6028e8f7", "AzKYC9zJDJ9C2me83sgJFuRo4a7PC"],
["4e2c", "6x3"],
["5d8dfb6f", "3PhYF8"],
["25e02679ba609aa491ee93789879", "EvcXSxV9xLvQedYZFL4"],
["53c652523f11", "iicAinU8"],
["c594ca6c6dfa971ff616568887b04bb1ada658", "dAwZ3GWH6CNezHbax8dseWmoxT"],
["c9a1cd34d9d6be48", "aj5qMDHdCoq"],
["66445b5441e93db7028a20e351ecf002158ffb", "KitEBHVwDzeRWVurxHhuEmQ1sp"],
["45bb531c10de9b433838702cb589", "SdsgqaVdCndWY3ZF8kY"],
["76f7dde8178ea929eb8d53f56948427a19d4b00d6ca2", "ZHnAQEk6pPRaXfyo9jEPEJKmQYmf5s"],
["09e7acd61468", "5w5Ziwnw"],
["930bd166cdc15658c1eff3dbe209", "w4S3ZEzegEYekzBsi9e"],
["3543d396e6b4a3d66e24", "3zZqr8tAPLgkdh"],
["569f30cc51d9be1a7031e4d8", "2dotg4aigFb53HPvX"],
["40a92ea8719f06", "3T815P93U1"],
["597f87afa28ec2aae97c", "62dmBbPiz8CBzb"],
["b87abe1a4d6048fab11ac33d13c753", "6AMA47wZVgz5fzpqMmrqp"],
["a6771c5e193706a3b88c23394087aa1fe312243e45", "BEhcCqTUk2b4tM6FjrkZfKhmwubRE"],
["7d06ba02bfe9a6", "5joR5CgLCu"],
["2f", "p"],
["b14c259842ff66", "7igyM8WvcD"],
["e517650f3b92ec9b85a40b887c68b80f", "VHmogV2XkdDTfiE9DxRPkA"],
["1ff2d207becacc28b5de797fd2f9fae6e93089af", "SpJgGMfV1jejF3qe7mHQtfjZC7g"],
["356a7f2e339aaed947e4c21dbca210b994b6", "3DW4oVLcWYNSN1Ve95h4exRem"],
["6bb4fef2074f", "vdpxwBrE"],
["e167e0e0a50572e308c3929198448a07e64036a8b0", "Eruu1rQHgz37jjxzPmw94GTHVY6iT"],
["d35823", "2DzKU"],
["e6e63e64d1720be2985f8307db82842954e1b19804389790df", "2buj9dJ6eHWxpx58YGFJTz6nuxP93RLrdBt"],
["59a78791cfc0", "meRiehVq"],
["370bc93c4b42a6f9f411740578dbdfc673", "X17bttDnxRwe3xo5vtVE1xN"],
["ffe15c1acfdfc2", "AhQkr8kE4y"],
["f41f11e48eb72906880ef5381509238e6b8ab3b2", "4QG311W7iQNRXXz6bKCh8z3NEBE1"],
["6cdd2b", "dZqk"],
["41b6128d0713d9b6ca4efd91", "2EvTDGmmiuq9Pubrp"],
["59701ff1775ca96b2b82", "62SPYM939x2jGV"],
["bbe4a567e65a9c5bcd41d0389ac951333198f23f0b66", "sznT2mrmbNVeUHQMev7YwVCqmdG61T"],
["34d8", "52F"],
["cb", "4W"],
["d539cabdfdab", "2qBTBNPqC"],
["d35e760fe78d3811", "cMYYu3T8WaC"],
["fb2aed258524dceeed356cf89bfb", "2bLbHbXfD3cQ4PeXY2TU"],
["a11b15a3e728c1", "776rPYFtE4"],
["32f3d5b2ddc8590eb7b8d3039dc7f5a577606b4e87d7", "Eq5yJcFhLizN1aciwzHHbG4ADYTHne"],
["4accf963acc3d1a87e64ab7dfc5877d98349af60", "23Sd4SVfHmuyREYvF4g8gxedAXhH"],
["12f42af9fc28aedc325d2e12a7376e12fdbf68", "4UFhgaM7RiyF6bk8xUdcq93fa7"],
["cac1d529", "6Bbc6C"],
["a30c0b97cc8b7d4ee720d6a9f5060dbb", "M8kvGc4NWUhUDZ9VgyDcmQ"],
["4ae4089ba32a04f31118d0b7138dd91d7059e840dfbb7a51", "7pzBFUDXqmb6De1S9wXVejxuQXj3iqx4Q"],
["deb48e4d383f6375d93dc0ee4fce", "2QshGK3jD5PLYoSoHMzM"],
["1567bef40dc706d5ed9b287184dc29", "bjYNYXr2hEUDgzYMJ2EC"],
["a7afa3d3cf0e02a1f8", "38oCt6EzVDvoR"],
["1e3a9081218f770017d2280b66e6d6b9d13882", "6XyQrKpMNcdkkw1Fo8Br1g2YFb"],
["1d", "W"],
["6d9d900f", "3oWaHc"],
["14dbb6e822fb8a7f28adcbaec4c2b7aec8bcc878", "HrYiYDNovvXud6WGDtJYcLsYdQT"],
["8d4063c72bc5b40ffe0ced19838abd07", "JSf2sw5DRG87vREaviLBUS"],
["2e0282dd277c4c95a7", "ay7K9X3Yw9Bc"],
["3e8e0af9a8e93cdb08", "oBZH11JQR8Yw"],
["45d0ef40a8773a", "3eTCZq1iWd"],
["cdad528d06b719f02d83451966", "J8caxWWoKzXtL4fLNy"],
["48895175f0f2dbe99c5442c923c93d05f8d7f4a28bb4", "LgrfXZJPNMWw8bVeUudUmvPPHFjiuy"],
["ba5d42907133bc27ee5c8e0ee7", "GXKG5LtSJq9nviMKBC"],
["fccaff45447af6abad1719560200", "2bwFJN7vu3FgGeDCr5g3"],
["2085bbf383d29c01501d2a037a37336249", "Jj6dpSpcAqEU3XPTeX8GZXv"],
["2838ad9429164e0c721fa9852ea585ff2d", "NvUhzLcdbgrc15SJaNUNBTA"],
["84efa8fa8ffb319141d6bf50abfbf3804376b6e6adf7365a", "D7uJCLSUhZa6uFzFcBj97mJGSTZ3cZ5wX"],
["6b4da2adf7", "D79yWDk"],
["16f8e1788346785be7716ab369", "2uygawrJ4kzS8SJRS8"],
["4a76c6602cc0995241643f9d2fefe5e0e23bd28b9b54", "MDCao29Skio2UBbdL8q3y6rEQGtmzs"],
["155267c7a59213796e", "GjzNSsihtmAV"],
["27ea8aab5131bc3db1c152", "Au6ahtAnCpJ6Nbs"],
["be8e35f915bce4450ee5c8fc45f8d1caddae71f0d49fbcd514", "2KgBYgysKnpHmEbqN2KCbYSdbNzquRuBzKm"],
["527dffe16919e82d50f145", "MTSxbHDUDGeNP48"],
["fc57b4e425f80807950b5a95", "5mC7BGyBxfp2NyQJG"],
["5b4845a68f67c43ad3685e670f66f73af637", "4nbW9bGaWF3bciiDVnh8m2JJr"],
["59db683b72626131138d1b6148f065b37e3c5bffcaf9ed", "2reNvMBzUFvF2FwFmJ7WEQyvirkwhPRe"],
["21b9", "3Zr"]
]
102 changes: 102 additions & 0 deletions tests/data/base58_check.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
[
["e4d6ca132c7680bd645ee7caab8b32", "itqhWyXsrpQvfhkGCvF5pH8qNg"],
["48ff61fffd0d9f41ca0f64", "33T7oKwqTF4gf5xGEjqZx"],
["797396a977e8fa", "X7nMJvVM5ueQyyZ"],
["70d064759a63925e2000e17057", "24VGtfiwtnc36ugbQD88Q5SG"],
["bcc76a0258eba90fb1", "GiyqUKLbjyWp4u9ikp"],
["49e7669f85dbfe415c4975bb60e814de470ac083d9c8a28f", "m63j5Vsumkxi6jXGoyv4DZ9zZuQuLa88JwJ3tD"],
["d5fb89157ff2", "D2Gma9BJ59Srs2"],
["9b1d012a", "Swo1g4Xda3a"],
["0350f80496805ba7118e92ed84f9cf3cd9ef8ff1", "JY2PVLEq8KwzCmRMosbMqUuE7yayhD8Q"],
["c0e47f48210a", "BqYrQuPFv63Xrm"],
["1f0755a5664080", "8hGiWJvucykvmSW"],
["3b9737387a8fc53355c2728e0b817e3c8977474247", "Qyj9HAoXRX8WNo6VtoNCvKbsGTD9ip2Ncc"],
["8de269b35c9ba1fa97d43a48a1d774d8a8664b", "3vyJZHn68otyCeSmUGq9tunS2KEXVGZw"],
["6ee07db5f20b86fd2efbc9db0a1aff86601f36ec05", "mceMGT36qgyimcVp2uphqaDiJpWUtoBMCM"],
["f567083fca0bfba4d933d4ac74752de9907f497b5567", "8Wqg3QHUfhZu6afYG61yi7tpNDeD9mzWe9eL"],
["57f983dd978cf001641f6b0e3c0658", "H78GkgDz3M6r6rUF68jiuhi4DQ"],
["f4e20395de17f5da50", "MQ1qy3sEueE1e3SsDP"],
["04f770924f0bc498353d7d9e71", "3i1AR3RdwNsgKJFSnkQ6cgL"],
["015a", "g97xL3m"],
["8a13ed498c9a365cadaa4563748fb4bd127c00d123", "xZTbye9yhgbhQHeYu4cj8j8HxFkPaqzF1u"],
["fc44a099d11572b728c6b582e1e49404a62e5e", "6DCtoeGDGRDVZgjyVc9k4XRXBy7RVywT"],
["986b369e9780a29e454e9fac4246b0a7032786", "49bF9w77qqrcqicnkg5FpdeXHA7kC9t3"],
["7863214b2e1b19710c2280", "4NMAH2gDMREha3e6jpD1z"],
["0c10", "71RwcpVB"],
["ca907d29a13dfba0cecf8db799", "2uQThYR9MYZUpeV1Ztst1zaq"],
["513c5d4d694f34bb491a1c44", "B2pSM5mbCadkZy3HfSmcjm"],
["f3851b3da0cc1bcddd812b", "7p9iBg2icLezzGdWV7oUM"],
["508ce7bb2253031d62f2770d53e982", "FkJ3858pzYrkiu3SMnVsUcKxsN"],
["a74587876b37", "AQ4brnGTiRSo1f"],
["439ba8bf979f2f", "HmNnvPjFUGRwhr8"],
["7950", "23Qu4F5BF"],
["eb359c0e9f33827f7b197d6ce7ee3e70394102", "5rmdv8zKiKKhLLzYfCLLxAbmZ8eijgeS"],
["ab505c12dc932e1f9387240be7010f21fe2d5b86d175ab2e58", "8n5JG7B6PUNQQ3fmCQKBykK8ucmTTsxxU9DoSzFc"],
["86435050526ad8b22fab1b466e075867dda9ca7be64f39", "K9V55MFVexYwryUKJPLyAZD67bR72AEUERizh"],
["6470f4ec095e797706d2e3f8d16ec6a9328328d5359cd5", "EaMg2EhoifMSWMfjAXdDXgSdpp6wEFFhNfDn4"],
["06fd459813e00640bcf2", "3a2sDcUgrsJQFp7Y15Q"],
["c706927a65009e", "rMVkQPu1LZcMhzL"],
["e14a617385f3c5e95e2e4c61", "UpYw8yGrJRTe9MqxMSW41d"],
["bf94b2f06142c635291af4d0323a1364db419f57a887fef7", "2yHdD5Ce2MfGVAxV6xrS6drB8HFx2DNkUSWJDPV"],
["020ec629d995b4f8acce54629e347fa3daf8df6e02cb49", "H8ZVZxmNUmivBUGXPhFcpmhv1WdnpP8gXRZ5"],
["868716b8ee514c7b97b480719cdc5b9f3d37", "dWiN7hbKmSA6ZHWzFz5Tng1wt8JzMn"],
["338204afbca0fa1b98", "5HqEEu8frfmSr25FqG"],
["dfc9722c58e9", "DaDkEnKVNjLcCw"],
["fd205e43a0fb7e2c6d8b3e1fec4542ed0b82", "2BhgBQJKHzwY89nzrZMzn9xTzgtAqLV"],
["7539088ce999e27b", "3DJVGaZSeGEvvhxoQ"],
["d402404b4a5e58053243186c", "TBRgKRB3jaS3Cu9PZqH1yC"],
["4bf5b3499d0381", "KqVhMZuW9esbVJS"],
["48903f5623879e923ee4a7f442cee939bd2d9a7f", "7cgTJFVmhBTNHU7dbT5dQyvcFkBuRQp8b"],
["2490ae3a9e", "TzhKz54qgx8v"],
["d1169c1fbdb8911361b055", "6rHCgn1dyAFwNuidCjKEK"],
["b8c5", "2b1amL9tZ"],
["404698ba159073", "GwT3peQtK23egjs"],
["49611391a961ba65bd8b58fa58675db70d59882fe16a2095", "kmtm421Ms5jqckhUJyU9WX9rRiTtxnbgQy6noM"],
["e8b861c048edaae169492fe4cc5cfe95", "4F3i2aay8bLPWfDg5PGJrQqpSWjT"],
["9303a88b10b5fcd76811a7eea092fa99f68c6eab0d211800", "2Whe1sPj2b3DpuPDgQh6okaVE247LTtU4chhKPZ"],
["fff5bff811", "4Fy2raGBoBbFQ"],
["6f98f3bc72212bea8b6a4052d268c4ce822da735b608a735", "29aEKniWEztKxHX1TjkHfrExfbLN65BJzMmEMoy"],
["2e3032f7a44b7c1241ca8672f18884e4a2", "3qjPyUG2mUiq1kV2h4612tmcYAkP5"],
["7825f345ba98ebe15baa558d243fd3ac364102da", "BxHYrPWz8yboV2FtY2HsmMZDpDnsUVQp3"],
["f9d29721c48b2dc7", "5iS8mJSXjgacQ5bqV"],
["dceb2b2b9748d4d1530335f456574fd9", "45WcRx6uGkcdtGdV7xNojJLjhZdi"],
["7f5684abc39b1e5ab50fef99e75c40dd2cdab72f722297e6a6", "6nHVFqaWXH3ycTyeZvKHXwa5WphU9Umox6aSCR9G"],
["e3ae20872500bf604bba20437c65494d8b91f82ebb", "2acbd47BP7X1wF1p3RN8G1WTZburHJ68HR5"],
["07", "sUnHff"],
["e23941a498d55b", "y6fyHaNhYZ5bYs7"],
["65225c45f60d5021f949b068815a2938d5a201", "369vsaipjhvJ1A83by9nnBLZkaZbXREL"],
["75ecc5bd9e6b75ca2a5c", "kMVASTTy2NBYbgWjbV7"],
["8f71", "2ES2o53j7"],
["78c64f5e68263bebea66ee4926188d4470dc", "ZnDUHvUYGMwQCNuhPg85cfoBqTQ66t"],
["144393e0", "4Paz7Vtd7LY"],
["f4e60319e9e21a", "23jGHDL1UNiRZsp8"],
["c2ad2175a57ec876d34511720730f8371aa0e8", "52DM4Zk5xCAVSiVQvBrtk4KEWizQV7Gh"],
["bb05ffbbd409468a79377c", "6EUaePwYfQnyzY2PM8GJW"],
["41ece9489aef08bcf535", "REiMXBPoit3QivC7Ejb"],
["70ef5e28ca4645b1af75", "iX66dZzd2EaZ5AoKDCf"],
["ac0436dfbcf346334627a6bb9b5a1a7b3f09fc", "4Z4uyT7xiCeT4QNrEQkf52nbkM7ffLmc"],
["dc56ee8e3a5145d2fd", "KMSx16g9msH2DceTyG"],
["f647452ae17ae91eee222cab8da214b8c8a9f87bb38352fd", "3Xv92ShRG4fCuXth3WEuzP1tRz3KsdPCZwwqwo8"],
["6b2273ec", "JvLhZ9L5ogz"],
["8ce0f7e52d", "2o1LNSjm3UzGF"],
["b4f7e043b00b54c86f1511e045bd62ff190f4a", "4jntwbYoAWLUdEqMUPcv4uYURTvfWzm7"],
["ecdd305ac0efe2ec5d581996cbfc6e6c1a9b", "27HgA8fE2jBexE2xbUeqGgQe1SRxEwa"],
["300f1e1d98432db97bad08280f", "TCF18NR8SbG2LaT5L9SgZnL"],
["96c6ea234d3ba1145284edabd892431d", "36qLpBxKHb4vU1ZGxy1Bnkzq4AQJ"],
["bd772a8c3076", "BeP9hExkwrCV6A"],
["97bc50f6539bed9c4a92ab9cfb09fb49921cb555ee", "244CohpDMcP9R7bzfwVktMYE6X2gfsRcA6g"],
["283964ab5786c1578584a222c2ff", "2fmRuE69Edim35CfZr29ZTmcH"],
["bd64ec12b6ba0c40c87b5712e10a25b4", "3e3Bc3fJiGLy9Ea8zDVAqAMUoVHS"],
["8576", "29Tk4g7Br"],
["90a3", "2F2VTRy8p"],
["423b28e1", "C5XRdL8iH7T"],
["54", "Aa4BM18"],
["1a74e084", "5RfNuYEFAzG"],
["1e266d905b9906be00f69f5db619055c30", "2rXnC1zEd5cqFwCPgKNnWzaPtK8pu"],
["5ed09395eb10b6e838cc7f86cc", "tgHK3g7bfe9BdxU9efFq8mB"],
["10651909ee2fec9e997f", "72avvW3Ynw7Qv8x23gm"],
["8876b76c0ee0a41826a82ddee9d01b9b6a766c08fce0", "5BMzvTCWSaivVFyWhQyTZb6qdZjoveviKVQg"],
["d5b8a41b4be551a0d6e7d994939090df9b42c8ec", "LV47wmoWcZreu7sZ6ZznQxAyV1VSJGsiu"],
["e1d902c4d7992f2d21763959d72d402efc781eaa55", "2ZsqAVSvWxgABkxV9gYT66jZPT2rkVJtGrk"],
["cf6982acbc209803671169", "6oZT6dFb5i6Zd78zVHz11"]
]
23 changes: 23 additions & 0 deletions tests/unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
from btcpy.lib.codecs import CouldNotDecode
from btcpy.setup import setup
from btcpy.structs.hd import *
from btcpy.lib.base58 import b58decode, b58encode
from btcpy.lib.base58 import b58decode_check, b58encode_check
from btcpy.lib.parsing import IncompleteParsingException

setup('regtest')
Expand Down Expand Up @@ -50,6 +52,27 @@ def get_data(filename):
segsig = get_data('segwitsig')
p2sh = get_data('p2sh')
priv_pub_hash_addr_p2pkh_segwit = get_data('priv_pub_hash_addr_p2pkh_segwit')
b58 = get_data('base58')
b58chk = get_data('base58_check')


class B58Test(unittest.TestCase):

def test_b58encode(self):
for hexa, encoded in b58:
self.assertEqual(b58encode(unhexlify(hexa)), encoded)

def test_b58encode_check(self):
for hexa, encoded in b58chk:
self.assertEqual(b58encode_check(unhexlify(hexa)), encoded)

def test_b58decode(self):
for hexa, encoded in b58:
self.assertEqual(hexlify(b58decode(encoded)).decode(), hexa)

def test_b58decode_check(self):
for hexa, encoded in b58chk:
self.assertEqual(hexlify(b58decode_check(encoded)).decode(), hexa)


class TestUnknownScript(unittest.TestCase):
Expand Down

0 comments on commit 265f22c

Please sign in to comment.