import hashlib
-from p2pool.util import bases, math, pack
+from p2pool.util import math, pack
def hash256(data):
return pack.IntType(256).unpack(hashlib.sha256(hashlib.sha256(data).digest()).digest())
@classmethod
def from_target_upper_bound(cls, target):
- n = bases.natural_to_string(target)
+ n = math.natural_to_string(target)
if n and ord(n[0]) >= 128:
n = '\x00' + n
bits2 = (chr(len(n)) + (n + 3*chr(0))[:3])[::-1]
def base58_encode(bindata):
bindata2 = bindata.lstrip(chr(0))
- return base58_alphabet[0]*(len(bindata) - len(bindata2)) + bases.natural_to_string(bases.string_to_natural(bindata2), base58_alphabet)
+ return base58_alphabet[0]*(len(bindata) - len(bindata2)) + math.natural_to_string(math.string_to_natural(bindata2), base58_alphabet)
def base58_decode(b58data):
b58data2 = b58data.lstrip(base58_alphabet[0])
- return chr(0)*(len(b58data) - len(b58data2)) + bases.natural_to_string(bases.string_to_natural(b58data2, base58_alphabet))
+ return chr(0)*(len(b58data) - len(b58data2)) + math.natural_to_string(math.string_to_natural(b58data2, base58_alphabet))
human_address_type = ChecksummedType(pack.ComposedType([
('version', pack.IntType(8)),
-from p2pool.util import bases, pack
+from p2pool.util import math, pack
def reads_nothing(f):
return '', f
def protoPUSHDATA(size_len):
def _(f):
length_str, f = pack.read(f, size_len)
- length = bases.string_to_natural(length_str[::-1].lstrip(chr(0)))
+ length = math.string_to_natural(length_str[::-1].lstrip(chr(0)))
data, f = pack.read(f, length)
return data, f
return _
+++ /dev/null
-import random
-import unittest
-
-from p2pool.util import bases
-
-def generate_alphabet():
- if random.randrange(2):
- return None
- else:
- a = map(chr, xrange(256))
- random.shuffle(a)
- return a[:random.randrange(2, len(a))]
-
-class Test(unittest.TestCase):
- def test_all(self):
- for i in xrange(10):
- alphabet = generate_alphabet()
- for i in xrange(100):
- n = random.randrange(100000000000000000000000000000)
- s = bases.natural_to_string(n, alphabet)
- n2 = bases.string_to_natural(s, alphabet)
- #print n, s.encode('hex'), n2
- self.assertEquals(n, n2)
+import random
import unittest
from p2pool.util import math
+def generate_alphabet():
+ if random.randrange(2):
+ return None
+ else:
+ a = map(chr, xrange(256))
+ random.shuffle(a)
+ return a[:random.randrange(2, len(a))]
+
class Test(unittest.TestCase):
def test_add_tuples(self):
assert math.add_tuples((1, 2, 3), (4, 5, 6)) == (5, 7, 9)
+
+ def test_bases(self):
+ for i in xrange(10):
+ alphabet = generate_alphabet()
+ for i in xrange(100):
+ n = random.randrange(100000000000000000000000000000)
+ s = math.natural_to_string(n, alphabet)
+ n2 = math.string_to_natural(s, alphabet)
+ #print n, s.encode('hex'), n2
+ self.assertEquals(n, n2)
+++ /dev/null
-def natural_to_string(n, alphabet=None):
- if n < 0:
- raise TypeError('n must be a natural')
- if alphabet is None:
- s = '%x' % (n,)
- if len(s) % 2:
- s = '0' + s
- return s.decode('hex')
- else:
- assert len(set(alphabet)) == len(alphabet)
- res = []
- while n:
- n, x = divmod(n, len(alphabet))
- res.append(alphabet[x])
- res.reverse()
- return ''.join(res)
-
-def string_to_natural(s, alphabet=None):
- if alphabet is None:
- assert not s.startswith('\x00')
- return int(s.encode('hex'), 16) if s else 0
- else:
- assert len(set(alphabet)) == len(alphabet)
- assert not s.startswith(alphabet[0])
- return sum(alphabet.index(char) * len(alphabet)**i for i, char in enumerate(reversed(s)))
target -= weight
raise AssertionError()
+def natural_to_string(n, alphabet=None):
+ if n < 0:
+ raise TypeError('n must be a natural')
+ if alphabet is None:
+ s = '%x' % (n,)
+ if len(s) % 2:
+ s = '0' + s
+ return s.decode('hex')
+ else:
+ assert len(set(alphabet)) == len(alphabet)
+ res = []
+ while n:
+ n, x = divmod(n, len(alphabet))
+ res.append(alphabet[x])
+ res.reverse()
+ return ''.join(res)
+
+def string_to_natural(s, alphabet=None):
+ if alphabet is None:
+ assert not s.startswith('\x00')
+ return int(s.encode('hex'), 16) if s else 0
+ else:
+ assert len(set(alphabet)) == len(alphabet)
+ assert not s.startswith(alphabet[0])
+ return sum(alphabet.index(char) * len(alphabet)**i for i, char in enumerate(reversed(s)))
+
if __name__ == '__main__':
import random
a = 1