Mercurial > public > bitcaviar-plus
annotate src/puppy/helpers.py @ 6:5f6d1a28051a
add python package config files
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sun, 24 Oct 2021 15:18:54 +0200 |
parents | src/helpers.py@1a8d94b500d8 |
children |
rev | line source |
---|---|
5
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 import hashlib |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 def __get_hash(buffer, bytes_order='backward'): |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 """ |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 Compute hash from bytes |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 More info about bytes order: https://en.wikipedia.org/wiki/Endianness |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 :param buffer: bytes, required |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 :param bytes_order: string, 'backward' or 'forward', optional |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 :return: string |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 """ |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
12 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
13 h = hashlib.sha256(buffer).digest() |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 h = hashlib.sha256(h).digest() |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 if bytes_order == 'backward': |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
17 h = h[::-1] |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 return h.hex() |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 def __get_variable_int(f): |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 """ |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 Get variable int from transaction data |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 More info: https://learnmeabitcoin.com/technical/varint |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
26 :param f: buffer, required |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
27 :return: int |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 """ |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
29 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
30 first_byte = f.read(1) |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
31 |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
32 if first_byte == b'\xfd': |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
33 variable_int_bytes = f.read(2)[::-1] |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
34 elif first_byte == b'\xfe': |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
35 variable_int_bytes = f.read(4)[::-1] |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
36 elif first_byte == b'\xff': |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
37 variable_int_bytes = f.read(8)[::-1] |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
38 else: |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 variable_int_bytes = first_byte |
1a8d94b500d8
finish basic parser
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
40 |
6
5f6d1a28051a
add python package config files
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
5
diff
changeset
|
41 return int.from_bytes(variable_int_bytes, 'little') |