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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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')