Python3 examples
One liner
from sha3bit import sha3_256
print(sha3_256("abc".encode()).hexdigest())
3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532
Bit length capability
One liner
from sha3bit import sha3_256
print(sha3_256(b'\x00',bitlen=1).hexdigest())
1b2e61923578e35f3b4629e04a0ff3b73daa571ae01130d9c16ef7da7a4cfdc2
Update / digest
from sha3bit import sha3_256
h = sha3_256()
h.update(b'\x00',bitlen=1)
print(h.hexdigest())
1b2e61923578e35f3b4629e04a0ff3b73daa571ae01130d9c16ef7da7a4cfdc2
Import / export
from sha3bit import sha3_256
h1 = sha3_256("a".encode())
state = h1.export_state()
h2 = sha3_256.import_state(state)
h2.update("bc".encode())
print(h2.hexdigest())
3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532
Dumping intermediate values
This is useful to people working on their own implemention of SHA3. 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 sha3bit import sha3_256
logging.basicConfig(format='%(message)s', level='INFO')
print(sha3_256("abc".encode(), verbose=True).hexdigest())
process block:
0 1 2 3 4
0 61 62 63 06 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
1 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 80
2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f1600 input:
0 1 2 3 4
0 61 62 63 06 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
1 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 80 00 00 00 00 00 00 00 00
2 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
3 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
4 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
f1600 output:
0 1 2 3 4
0 3A 98 5D A7 4F E2 25 B2 27 3E 60 D6 AA C8 97 20 42 F7 4E A5 81 05 13 BF EF 21 46 A8 DC 39 12 63 C8 BE 38 B9 5C 3E C5 5F
1 04 5C 17 2D 6B D3 90 BD F7 B1 3F 62 61 C5 F2 31 BF F8 A9 CD CE FC 92 30 BD E1 5F 39 66 78 3F 4B C1 3C BC AC DC 22 FC 02
2 85 5F 08 6E 3E 9D 52 5B 9C DF 04 F2 F3 74 DF 8F 62 08 F0 4A 2A 8B 8B 1A 8A 7D C6 FF 1B F9 BE 30 C3 6C 4B 8C 92 94 80 66
3 46 BF E2 45 11 43 15 32 AC C4 86 B1 8D 83 5E 9F 05 A7 0C D9 90 CC C4 60 C9 06 DD D6 3D 51 72 D2 7D 1A 16 AE 29 51 C2 D5
4 D1 36 F6 22 FB 92 10 F8 A2 BA 11 BC 04 1C 0A A8 4E 1E 85 54 32 79 24 1F 85 B5 EC 0A 60 AF A3 25 41 10 E9 96 9E 9C D8 B5
-----------------------------------------------------------------------------------------------------------------------------------
digest: 3A 98 5D A7 4F E2 25 B2 04 5C 17 2D 6B D3 90 BD 85 5F 08 6E 3E 9D 52 5B 46 BF E2 45 11 43 15 32
3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532
import logging
from pysatl import Utils
from sha3bit import sha3_256
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 = sha3_256(message[0:64], verbose=True)
state = h1.export_state()
h2 = sha3_256.import_state(state)
h2.update(message[64:])
print(h2.hexdigest())
exporting current state:
capacity = 512
state: 0 1 2 3 4
0 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
1 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
2 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
3 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
4 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
cache: 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
bitlen = 512
importing state:
capacity = 512
state: 0 1 2 3 4
0 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
1 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
2 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
3 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
4 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
cache: 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
bitlen = 512
process block:
0 1 2 3 4
0 E3 B0 C4 42 98 FC 1C 14 0A 82 75 05 8E 29 9F CC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1 9A FB F4 C8 99 6F B9 24 03 81 53 45 45 F5 5C F4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80
2 27 AE 41 E4 64 9B 93 4C 3E 41 98 3F 5D 4C 94 56 00 00 00 00 00 00 00 00
3 A4 95 99 1B 78 52 B8 55 5F E4 46 3C 06 00 00 00 00 00 00 00 00 00 00 00
4 5D F6 E0 E2 76 13 59 D3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f1600 input:
0 1 2 3 4
0 E3 B0 C4 42 98 FC 1C 14 0A 82 75 05 8E 29 9F CC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1 9A FB F4 C8 99 6F B9 24 03 81 53 45 45 F5 5C F4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00
2 27 AE 41 E4 64 9B 93 4C 3E 41 98 3F 5D 4C 94 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3 A4 95 99 1B 78 52 B8 55 5F E4 46 3C 06 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
4 5D F6 E0 E2 76 13 59 D3 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
f1600 output:
0 1 2 3 4
0 E5 68 96 84 BB F3 76 82 EE 79 50 06 FB 4E 07 DB A5 8D 11 C3 12 32 DF 57 9B C8 91 AB 77 6B 62 71 61 D2 4A 2A 59 BB BE E2
1 8D DC FF C5 4D 27 46 90 21 6D DE AC B9 2F 45 3E B5 AF 4D 40 3D 59 E0 D2 00 EE 2F 85 9E AE 88 CB 37 76 B4 9D C8 E8 01 5B
2 07 CA 68 9F 69 27 C5 71 D5 22 67 93 71 FE 3C F2 54 4D D8 4C 9F 2D AC 1F 28 E0 89 94 43 03 A5 21 BA 2F 42 03 25 D7 28 BD
3 D4 80 A9 3F CC F1 63 2C 9B E5 4A FF B8 C7 BF 88 7B BC BA 8F 8B B6 CD 54 00 E5 45 0C AF 87 21 84 FD E0 8A 1C AD BF 8E EF
4 3D 70 59 E3 5A DE F9 D5 67 54 05 32 BB FA 57 6A 7B C2 19 49 E6 0E B6 D9 4F C6 2C 91 3F 38 F1 5A AC DD D6 59 4A FC 0A 37
-----------------------------------------------------------------------------------------------------------------------------------
digest: E5 68 96 84 BB F3 76 82 8D DC FF C5 4D 27 46 90 07 CA 68 9F 69 27 C5 71 D4 80 A9 3F CC F1 63 2C
e5689684bbf376828ddcffc54d27469007ca689f6927c571d480a93fccf1632c