Python3 examples
One liner
from sha256bit import Sha256bit
print(Sha256bit("abc".encode()).hexdigest())
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Bit length capability
One liner
from sha256bit import Sha256bit
print(Sha256bit(b'\x00',bitlen=1).hexdigest())
bd4f9e98beb68c6ead3243b1b4c7fed75fa4feaab1f84795cbd8a98676a2a375
Update / digest
from sha256bit import Sha256bit
h = Sha256bit()
h.update(b'\x00',bitlen=1)
print(h.hexdigest())
bd4f9e98beb68c6ead3243b1b4c7fed75fa4feaab1f84795cbd8a98676a2a375
Import / export
from sha256bit import Sha256bit
h1 = Sha256bit("a".encode())
state = h1.export_state()
h2 = Sha256bit.import_state(state)
h2.update("bc".encode())
print(h2.hexdigest())
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Dumping intermediate values
This is useful to people working on their own implemention of SHA256. The verbosity is controlled by the logging level.
Use ‘INFO’ to dump block level information
Use ‘DEBUG’ to dump all intermediate values
import logging
from sha256bit import Sha256bit
logging.basicConfig(format='%(message)s', level='INFO')
print(Sha256bit("abc".encode()).hexdigest())
bitlen: 24
state: 6A 09 E6 67 BB 67 AE 85 3C 6E F3 72 A5 4F F5 3A 51 0E 52 7F 9B 05 68 8C 1F 83 D9 AB 5B E0 CD 19
block: 61 62 63 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18
digest: BA 78 16 BF 8F 01 CF EA 41 41 40 DE 5D AE 22 23 B0 03 61 A3 96 17 7A 9C B4 10 FF 61 F2 00 15 AD
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
import logging
from pysatl import Utils
from sha256bit import Sha256bit
logging.basicConfig(format='%(message)s', level='INFO')
message = Utils.ba('E3 B0 C4 42 98 FC 1C 14 9A FB F4 C8 99 6F B9 24 27 AE 41 E4 64 9B 93 4C A4 95 99 1B 78 52 B8 55 5D F6 E0 E2 76 13 59 D3 0A 82 75 05 8E 29 9F CC 03 81 53 45 45 F5 5C F4 3E 41 98 3F 5D 4C 94 56 5F E4 46 3C')
h1 = Sha256bit(message[0:64])
state = h1.export_state()
h2 = Sha256bit.import_state(state)
h2.update(message[64:])
print(h2.hexdigest())
state: 6A 09 E6 67 BB 67 AE 85 3C 6E F3 72 A5 4F F5 3A 51 0E 52 7F 9B 05 68 8C 1F 83 D9 AB 5B E0 CD 19
block: E3 B0 C4 42 98 FC 1C 14 9A FB F4 C8 99 6F B9 24 27 AE 41 E4 64 9B 93 4C A4 95 99 1B 78 52 B8 55 5D F6 E0 E2 76 13 59 D3 0A 82 75 05 8E 29 9F CC 03 81 53 45 45 F5 5C F4 3E 41 98 3F 5D 4C 94 56
exporting current state:
bitlen = 512
state: 9F BF AC E6 3F D1 4E 52 19 13 7C 71 F6 23 23 5F 63 2B 67 BB 02 7A 79 F3 90 E9 80 96 02 BE 40 E2
cache:
importing current state:
bitlen = 512
state: 9F BF AC E6 3F D1 4E 52 19 13 7C 71 F6 23 23 5F 63 2B 67 BB 02 7A 79 F3 90 E9 80 96 02 BE 40 E2
cache:
bitlen: 544
state: 9F BF AC E6 3F D1 4E 52 19 13 7C 71 F6 23 23 5F 63 2B 67 BB 02 7A 79 F3 90 E9 80 96 02 BE 40 E2
block: 5F E4 46 3C 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 20
digest: CC 87 D0 D0 0E E7 4D 5B 2F 47 17 77 70 FF 78 4F 5A 72 B1 89 33 14 65 33 FB C1 BC AC 6C 70 07 B9
cc87d0d00ee74d5b2f47177770ff784f5a72b18933146533fbc1bcac6c7007b9