Mercurial > cpython-lru_cache-weakref
annotate Modules/_sha3/sha3module.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 27da6e790c41 |
| children |
| rev | line source |
|---|---|
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1 /* SHA3 module |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
3 * This module provides an interface to the SHA3 algorithm |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
4 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
5 * See below for information about the original code this module was |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
6 * based upon. Additional work performed by: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
7 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
8 * Andrew Kuchling (amk@amk.ca) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
9 * Greg Stein (gstein@lyra.org) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
10 * Trevor Perrin (trevp@trevp.net) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
11 * Gregory P. Smith (greg@krypto.org) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
12 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
13 * Copyright (C) 2012 Christian Heimes (christian@python.org) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
14 * Licensed to PSF under a Contributor Agreement. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
15 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
16 */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
17 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
18 #include "Python.h" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
19 #include "../hashlib.h" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
20 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
21 /* ************************************************************************** |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
22 * SHA-3 (Keccak) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
23 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
24 * The code is based on KeccakReferenceAndOptimized-3.2.zip from 29 May 2012. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
25 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
26 * The reference implementation is altered in this points: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
27 * - C++ comments are converted to ANSI C comments. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
28 * - All functions and globals are declared static. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
29 * - The typedef for UINT64 is commented out. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
30 * - KeccakF-1600-opt[32|64]-settings.h are commented out |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
31 * - Some unused functions are commented out to silence compiler warnings. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
32 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
33 * In order to avoid name clashes with other software I have to declare all |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
34 * Keccak functions and global data as static. The C code is directly |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
35 * included into this file in order to access the static functions. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
36 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
37 * Keccak can be tuned with several paramenters. I try to explain all options |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
38 * as far as I understand them. The reference implementation also contains |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
39 * assembler code for ARM platforms (NEON instructions). |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
40 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
41 * Common |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
42 * ====== |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
43 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
44 * Options: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
45 * UseBebigokimisa, Unrolling |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
46 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
47 * - Unrolling: loop unrolling (24, 12, 8, 6, 4, 3, 2, 1) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
48 * - UseBebigokimisa: lane complementing |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
49 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
50 * 64bit platforms |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
51 * =============== |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
52 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
53 * Additional options: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
54 * UseSSE, UseOnlySIMD64, UseMMX, UseXOP, UseSHLD |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
55 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
56 * Optimized instructions (disabled by default): |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
57 * - UseSSE: use Stream SIMD extensions |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
58 * o UseOnlySIMD64: limit to 64bit instructions, otherwise 128bit |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
59 * o w/o UseOnlySIMD64: requires compiler agument -mssse3 or -mtune |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
60 * - UseMMX: use 64bit MMX instructions |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
61 * - UseXOP: use AMD's eXtended Operations (128bit SSE extension) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
62 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
63 * Other: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
64 * - Unrolling: default 24 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
65 * - UseBebigokimisa: default 1 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
66 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
67 * When neither UseSSE, UseMMX nor UseXOP is configured, ROL64 (rotate left |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
68 * 64) is implemented as: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
69 * - Windows: _rotl64() |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
70 * - UseSHLD: use shld (shift left) asm optimization |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
71 * - otherwise: shift and xor |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
72 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
73 * UseBebigokimisa can't be used in combination with UseSSE, UseMMX or |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
74 * UseXOP. UseOnlySIMD64 has no effect unless UseSSE is specified. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
75 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
76 * Tests have shown that UseSSE + UseOnlySIMD64 is about three to four |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
77 * times SLOWER than UseBebigokimisa. UseSSE and UseMMX are about two times |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
78 * slower. (tested by CH and AP) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
79 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
80 * 32bit platforms |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
81 * =============== |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
82 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
83 * Additional options: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
84 * UseInterleaveTables, UseSchedule |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
85 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
86 * - Unrolling: default 2 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
87 * - UseBebigokimisa: default n/a |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
88 * - UseSchedule: ???, (1, 2, 3; default 3) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
89 * - UseInterleaveTables: use two 64k lookup tables for (de)interleaving |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
90 * default: n/a |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
91 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
92 * schedules: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
93 * - 3: no UseBebigokimisa, Unrolling must be 2 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
94 * - 2 + 1: ??? |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
95 * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
96 * *************************************************************************/ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
97 |
|
79717
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
98 #ifdef __sparc |
|
79720
3cfe50908fbd
Update comment: SPARC requires proper alignment
Christian Heimes <christian@cheimes.de>
parents:
79719
diff
changeset
|
99 /* opt64 uses un-aligned memory access that causes a BUS error with msg |
|
3cfe50908fbd
Update comment: SPARC requires proper alignment
Christian Heimes <christian@cheimes.de>
parents:
79719
diff
changeset
|
100 * 'invalid address alignment' on SPARC. */ |
|
79717
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
101 #define KeccakOpt 32 |
|
79719
568312ea04fa
get 64bit platforms without uint64 right again
Christian Heimes <christian@cheimes.de>
parents:
79717
diff
changeset
|
102 #elif SIZEOF_VOID_P == 8 && defined(PY_UINT64_T) |
|
568312ea04fa
get 64bit platforms without uint64 right again
Christian Heimes <christian@cheimes.de>
parents:
79717
diff
changeset
|
103 /* opt64 works only for 64bit platforms with unsigned int64 */ |
|
79717
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
104 #define KeccakOpt 64 |
|
79719
568312ea04fa
get 64bit platforms without uint64 right again
Christian Heimes <christian@cheimes.de>
parents:
79717
diff
changeset
|
105 #else |
|
568312ea04fa
get 64bit platforms without uint64 right again
Christian Heimes <christian@cheimes.de>
parents:
79717
diff
changeset
|
106 /* opt32 is used for the remaining 32 and 64bit platforms */ |
|
79717
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
107 #define KeccakOpt 32 |
|
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
108 #endif |
|
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
109 |
|
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
110 #if KeccakOpt == 64 && defined(PY_UINT64_T) |
|
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
111 /* 64bit platforms with unsigned int64 */ |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
112 #define Unrolling 24 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
113 #define UseBebigokimisa |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
114 typedef PY_UINT64_T UINT64; |
|
79719
568312ea04fa
get 64bit platforms without uint64 right again
Christian Heimes <christian@cheimes.de>
parents:
79717
diff
changeset
|
115 #elif KeccakOpt == 32 && defined(PY_UINT64_T) |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
116 /* 32bit platforms with unsigned int64 */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
117 #define Unrolling 2 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
118 #define UseSchedule 3 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
119 typedef PY_UINT64_T UINT64; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
120 #else |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
121 /* 32 or 64bit platforms without unsigned int64 */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
122 #define Unrolling 2 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
123 #define UseSchedule 3 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
124 #define UseInterleaveTables |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
125 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
126 |
|
79803
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
127 /* replacement for brg_endian.h */ |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
128 #define IS_BIG_ENDIAN 4321 |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
129 #define IS_LITTLE_ENDIAN 1234 |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
130 #if PY_BIG_ENDIAN |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
131 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
132 #else |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
133 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN |
|
d2127cdec10e
Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified
Christian Heimes <christian@cheimes.de>
parents:
79722
diff
changeset
|
134 #endif |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
135 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
136 /* inline all Keccak dependencies */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
137 #include "keccak/KeccakNISTInterface.h" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
138 #include "keccak/KeccakNISTInterface.c" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
139 #include "keccak/KeccakSponge.c" |
|
79717
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
140 #if KeccakOpt == 64 |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
141 #include "keccak/KeccakF-1600-opt64.c" |
|
79717
b397b0c08f69
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Christian Heimes <christian@cheimes.de>
parents:
79586
diff
changeset
|
142 #elif KeccakOpt == 32 |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
143 #include "keccak/KeccakF-1600-opt32.c" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
144 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
145 |
|
79722
40a1652349e9
Issue #16234: Modify sha3's block_size method to return NotImplemented.
Christian Heimes <christian@cheimes.de>
parents:
79720
diff
changeset
|
146 /* #define SHA3_BLOCKSIZE 200 // 1600 bits */ |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
147 #define SHA3_MAX_DIGESTSIZE 64 /* 512 bits */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
148 #define SHA3_state hashState |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
149 #define SHA3_init Init |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
150 #define SHA3_process Update |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
151 #define SHA3_done Final |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
152 #define SHA3_copystate(dest, src) memcpy(&(dest), &(src), sizeof(SHA3_state)) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
153 #define SHA3_clearstate(state) memset(&(state), 0, sizeof(SHA3_state)) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
154 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
155 /* The structure for storing SHA3 info */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
156 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
157 typedef struct { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
158 PyObject_HEAD |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
159 int hashbitlen; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
160 SHA3_state hash_state; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
161 #ifdef WITH_THREAD |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
162 PyThread_type_lock lock; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
163 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
164 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
165 } SHA3object; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
166 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
167 static PyTypeObject SHA3type; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
168 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
169 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
170 static SHA3object * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
171 newSHA3object(int hashbitlen) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
172 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
173 SHA3object *newobj; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
174 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
175 /* check hashbitlen */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
176 switch(hashbitlen) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
177 /* supported hash length */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
178 case 224: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
179 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
180 case 256: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
181 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
182 case 384: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
183 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
184 case 512: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
185 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
186 case 0: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
187 /* arbitrarily-long output isn't supported by this module */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
188 default: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
189 /* everything else is an error */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
190 PyErr_SetString(PyExc_ValueError, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
191 "hashbitlen must be one of 224, 256, 384 or 512."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
192 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
193 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
194 newobj = (SHA3object *)PyObject_New(SHA3object, &SHA3type); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
195 if (newobj == NULL) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
196 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
197 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
198 newobj->hashbitlen = hashbitlen; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
199 #ifdef WITH_THREAD |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
200 newobj->lock = NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
201 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
202 return newobj; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
203 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
204 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
205 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
206 /* Internal methods for a hash object */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
207 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
208 static void |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
209 SHA3_dealloc(SHA3object *self) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
210 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
211 SHA3_clearstate(self->hash_state); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
212 #ifdef WITH_THREAD |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
213 if (self->lock) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
214 PyThread_free_lock(self->lock); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
215 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
216 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
217 PyObject_Del(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
218 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
219 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
220 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
221 /* External methods for a hash object */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
222 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
223 PyDoc_STRVAR(SHA3_copy__doc__, "Return a copy of the hash object."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
224 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
225 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
226 SHA3_copy(SHA3object *self, PyObject *unused) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
227 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
228 SHA3object *newobj; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
229 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
230 if ((newobj = newSHA3object(self->hashbitlen)) == NULL) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
231 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
232 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
233 ENTER_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
234 SHA3_copystate(newobj->hash_state, self->hash_state); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
235 LEAVE_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
236 return (PyObject *)newobj; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
237 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
238 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
239 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
240 PyDoc_STRVAR(SHA3_digest__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
241 "Return the digest value as a string of binary data."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
242 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
243 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
244 SHA3_digest(SHA3object *self, PyObject *unused) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
245 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
246 unsigned char digest[SHA3_MAX_DIGESTSIZE]; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
247 SHA3_state temp; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
248 HashReturn res; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
249 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
250 ENTER_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
251 SHA3_copystate(temp, self->hash_state); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
252 LEAVE_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
253 res = SHA3_done(&temp, digest); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
254 SHA3_clearstate(temp); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
255 if (res != SUCCESS) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
256 PyErr_SetString(PyExc_RuntimeError, "internal error in SHA3 Final()"); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
257 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
258 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
259 return PyBytes_FromStringAndSize((const char *)digest, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
260 self->hashbitlen / 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
261 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
262 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
263 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
264 PyDoc_STRVAR(SHA3_hexdigest__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
265 "Return the digest value as a string of hexadecimal digits."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
266 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
267 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
268 SHA3_hexdigest(SHA3object *self, PyObject *unused) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
269 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
270 unsigned char digest[SHA3_MAX_DIGESTSIZE]; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
271 SHA3_state temp; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
272 HashReturn res; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
273 PyObject *retval; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
274 Py_UCS1 *hex_digest; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
275 int digestlen, i, j; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
276 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
277 /* Get the raw (binary) digest value */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
278 ENTER_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
279 SHA3_copystate(temp, self->hash_state); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
280 LEAVE_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
281 res = SHA3_done(&temp, digest); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
282 SHA3_clearstate(temp); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
283 if (res != SUCCESS) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
284 PyErr_SetString(PyExc_RuntimeError, "internal error in SHA3 Final()"); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
285 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
286 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
287 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
288 /* Create a new string */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
289 digestlen = self->hashbitlen / 8; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
290 retval = PyUnicode_New(digestlen * 2, 127); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
291 if (!retval) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
292 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
293 hex_digest = PyUnicode_1BYTE_DATA(retval); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
294 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
295 /* Make hex version of the digest */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
296 for(i=j=0; i < digestlen; i++) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
297 unsigned char c; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
298 c = (digest[i] >> 4) & 0xf; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
299 hex_digest[j++] = Py_hexdigits[c]; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
300 c = (digest[i] & 0xf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
301 hex_digest[j++] = Py_hexdigits[c]; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
302 } |
|
81272
4b42d7f288c5
Issue #16847: Fixed improper use of _PyUnicode_CheckConsistency() in
Christian Heimes <christian@cheimes.de>
parents:
79803
diff
changeset
|
303 #ifdef Py_DEBUG |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
304 assert(_PyUnicode_CheckConsistency(retval, 1)); |
|
81272
4b42d7f288c5
Issue #16847: Fixed improper use of _PyUnicode_CheckConsistency() in
Christian Heimes <christian@cheimes.de>
parents:
79803
diff
changeset
|
305 #endif |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
306 return retval; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
307 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
308 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
309 PyDoc_STRVAR(SHA3_update__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
310 "Update this hash object's state with the provided string."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
311 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
312 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
313 SHA3_update(SHA3object *self, PyObject *args) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
314 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
315 PyObject *obj; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
316 Py_buffer buf; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
317 HashReturn res; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
318 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
319 if (!PyArg_ParseTuple(args, "O:update", &obj)) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
320 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
321 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
322 GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
323 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
324 /* add new data, the function takes the length in bits not bytes */ |
|
84929
6f2ba9a33bdf
Fix _sha3 module to actually release the GIL around its update function.
Christian Heimes <christian@cheimes.de>
parents:
81272
diff
changeset
|
325 #ifdef WITH_THREAD |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
326 if (self->lock == NULL && buf.len >= HASHLIB_GIL_MINSIZE) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
327 self->lock = PyThread_allocate_lock(); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
328 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
329 /* Once a lock exists all code paths must be synchronized. We have to |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
330 * release the GIL even for small buffers as acquiring the lock may take |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
331 * an unlimited amount of time when another thread updates this object |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
332 * with lots of data. */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
333 if (self->lock) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
334 Py_BEGIN_ALLOW_THREADS |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
335 PyThread_acquire_lock(self->lock, 1); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
336 res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
337 PyThread_release_lock(self->lock); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
338 Py_END_ALLOW_THREADS |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
339 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
340 else { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
341 res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
342 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
343 #else |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
344 res = SHA3_process(&self->hash_state, buf.buf, buf.len * 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
345 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
346 LEAVE_HASHLIB(self); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
347 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
348 if (res != SUCCESS) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
349 PyBuffer_Release(&buf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
350 PyErr_SetString(PyExc_RuntimeError, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
351 "internal error in SHA3 Update()"); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
352 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
353 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
354 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
355 PyBuffer_Release(&buf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
356 Py_INCREF(Py_None); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
357 return Py_None; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
358 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
359 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
360 static PyMethodDef SHA3_methods[] = { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
361 {"copy", (PyCFunction)SHA3_copy, METH_NOARGS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
362 SHA3_copy__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
363 {"digest", (PyCFunction)SHA3_digest, METH_NOARGS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
364 SHA3_digest__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
365 {"hexdigest", (PyCFunction)SHA3_hexdigest, METH_NOARGS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
366 SHA3_hexdigest__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
367 {"update", (PyCFunction)SHA3_update, METH_VARARGS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
368 SHA3_update__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
369 {NULL, NULL} /* sentinel */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
370 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
371 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
372 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
373 SHA3_get_block_size(SHA3object *self, void *closure) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
374 { |
|
79722
40a1652349e9
Issue #16234: Modify sha3's block_size method to return NotImplemented.
Christian Heimes <christian@cheimes.de>
parents:
79720
diff
changeset
|
375 /* HMAC-SHA3 hasn't been specified yet and no official test vectors are |
|
40a1652349e9
Issue #16234: Modify sha3's block_size method to return NotImplemented.
Christian Heimes <christian@cheimes.de>
parents:
79720
diff
changeset
|
376 * available. Thus block_size returns NotImplemented to prevent people |
|
40a1652349e9
Issue #16234: Modify sha3's block_size method to return NotImplemented.
Christian Heimes <christian@cheimes.de>
parents:
79720
diff
changeset
|
377 * from using SHA3 with the hmac module. |
|
40a1652349e9
Issue #16234: Modify sha3's block_size method to return NotImplemented.
Christian Heimes <christian@cheimes.de>
parents:
79720
diff
changeset
|
378 */ |
|
40a1652349e9
Issue #16234: Modify sha3's block_size method to return NotImplemented.
Christian Heimes <christian@cheimes.de>
parents:
79720
diff
changeset
|
379 Py_RETURN_NOTIMPLEMENTED; |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
380 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
381 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
382 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
383 SHA3_get_name(SHA3object *self, void *closure) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
384 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
385 return PyUnicode_FromFormat("sha3_%i", self->hashbitlen); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
386 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
387 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
388 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
389 SHA3_get_digest_size(SHA3object *self, void *closure) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
390 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
391 return PyLong_FromLong(self->hashbitlen / 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
392 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
393 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
394 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
395 static PyGetSetDef SHA3_getseters[] = { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
396 {"block_size", (getter)SHA3_get_block_size, NULL, NULL, NULL}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
397 {"name", (getter)SHA3_get_name, NULL, NULL, NULL}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
398 {"digest_size", (getter)SHA3_get_digest_size, NULL, NULL, NULL}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
399 {NULL} /* Sentinel */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
400 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
401 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
402 static PyTypeObject SHA3type = { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
403 PyVarObject_HEAD_INIT(NULL, 0) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
404 "_sha3.SHA3", /* tp_name */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
405 sizeof(SHA3object), /* tp_size */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
406 0, /* tp_itemsize */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
407 /* methods */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
408 (destructor)SHA3_dealloc, /* tp_dealloc */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
409 0, /* tp_print */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
410 0, /* tp_getattr */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
411 0, /* tp_setattr */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
412 0, /* tp_reserved */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
413 0, /* tp_repr */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
414 0, /* tp_as_number */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
415 0, /* tp_as_sequence */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
416 0, /* tp_as_mapping */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
417 0, /* tp_hash */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
418 0, /* tp_call */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
419 0, /* tp_str */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
420 0, /* tp_getattro */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
421 0, /* tp_setattro */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
422 0, /* tp_as_buffer */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
423 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
424 0, /* tp_doc */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
425 0, /* tp_traverse */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
426 0, /* tp_clear */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
427 0, /* tp_richcompare */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
428 0, /* tp_weaklistoffset */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
429 0, /* tp_iter */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
430 0, /* tp_iternext */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
431 SHA3_methods, /* tp_methods */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
432 NULL, /* tp_members */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
433 SHA3_getseters, /* tp_getset */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
434 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
435 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
436 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
437 /* constructor helper */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
438 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
439 SHA3_factory(PyObject *args, PyObject *kwdict, const char *fmt, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
440 int hashbitlen) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
441 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
442 SHA3object *newobj = NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
443 static char *kwlist[] = {"string", NULL}; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
444 PyObject *data_obj = NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
445 Py_buffer buf; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
446 HashReturn res; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
447 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
448 if (!PyArg_ParseTupleAndKeywords(args, kwdict, fmt, kwlist, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
449 &data_obj)) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
450 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
451 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
452 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
453 if (data_obj) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
454 GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
455 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
456 if ((newobj = newSHA3object(hashbitlen)) == NULL) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
457 goto error; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
458 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
459 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
460 if (SHA3_init(&newobj->hash_state, hashbitlen) != SUCCESS) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
461 PyErr_SetString(PyExc_RuntimeError, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
462 "internal error in SHA3 Update()"); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
463 goto error; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
464 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
465 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
466 if (data_obj) { |
|
84931
c3d90db88151
yet another WITH_THREADS typo
Christian Heimes <christian@cheimes.de>
parents:
84929
diff
changeset
|
467 #ifdef WITH_THREAD |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
468 if (buf.len >= HASHLIB_GIL_MINSIZE) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
469 /* invariant: New objects can't be accessed by other code yet, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
470 * thus it's safe to release the GIL without locking the object. |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
471 */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
472 Py_BEGIN_ALLOW_THREADS |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
473 res = SHA3_process(&newobj->hash_state, buf.buf, buf.len * 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
474 Py_END_ALLOW_THREADS |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
475 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
476 else { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
477 res = SHA3_process(&newobj->hash_state, buf.buf, buf.len * 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
478 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
479 #else |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
480 res = SHA3_process(&newobj->hash_state, buf.buf, buf.len * 8); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
481 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
482 if (res != SUCCESS) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
483 PyErr_SetString(PyExc_RuntimeError, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
484 "internal error in SHA3 Update()"); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
485 goto error; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
486 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
487 PyBuffer_Release(&buf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
488 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
489 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
490 return (PyObject *)newobj; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
491 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
492 error: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
493 if (newobj) { |
|
79515
8b2546165960
fix possible memory leak, dealloc newobj
Christian Heimes <christian@cheimes.de>
parents:
79502
diff
changeset
|
494 SHA3_dealloc(newobj); |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
495 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
496 if (data_obj) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
497 PyBuffer_Release(&buf); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
498 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
499 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
500 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
501 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
502 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
503 PyDoc_STRVAR(sha3_224__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
504 "sha3_224([string]) -> SHA3 object\n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
505 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
506 Return a new SHA3 hash object with a hashbit length of 28 bytes."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
507 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
508 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
509 sha3_224(PyObject *self, PyObject *args, PyObject *kwdict) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
510 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
511 return SHA3_factory(args, kwdict, "|O:sha3_224", 224); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
512 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
513 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
514 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
515 PyDoc_STRVAR(sha3_256__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
516 "sha3_256([string]) -> SHA3 object\n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
517 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
518 Return a new SHA3 hash object with a hashbit length of 32 bytes."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
519 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
520 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
521 sha3_256(PyObject *self, PyObject *args, PyObject *kwdict) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
522 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
523 return SHA3_factory(args, kwdict, "|O:sha3_256", 256); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
524 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
525 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
526 PyDoc_STRVAR(sha3_384__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
527 "sha3_384([string]) -> SHA3 object\n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
528 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
529 Return a new SHA3 hash object with a hashbit length of 48 bytes."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
530 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
531 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
532 sha3_384(PyObject *self, PyObject *args, PyObject *kwdict) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
533 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
534 return SHA3_factory(args, kwdict, "|O:sha3_384", 384); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
535 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
536 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
537 PyDoc_STRVAR(sha3_512__doc__, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
538 "sha3_512([string]) -> SHA3 object\n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
539 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
540 Return a new SHA3 hash object with a hashbit length of 64 bytes."); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
541 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
542 static PyObject * |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
543 sha3_512(PyObject *self, PyObject *args, PyObject *kwdict) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
544 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
545 return SHA3_factory(args, kwdict, "|O:sha3_512", 512); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
546 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
547 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
548 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
549 /* List of functions exported by this module */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
550 static struct PyMethodDef SHA3_functions[] = { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
551 {"sha3_224", (PyCFunction)sha3_224, METH_VARARGS|METH_KEYWORDS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
552 sha3_224__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
553 {"sha3_256", (PyCFunction)sha3_256, METH_VARARGS|METH_KEYWORDS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
554 sha3_256__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
555 {"sha3_384", (PyCFunction)sha3_384, METH_VARARGS|METH_KEYWORDS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
556 sha3_384__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
557 {"sha3_512", (PyCFunction)sha3_512, METH_VARARGS|METH_KEYWORDS, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
558 sha3_512__doc__}, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
559 {NULL, NULL} /* Sentinel */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
560 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
561 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
562 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
563 /* Initialize this module. */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
564 static struct PyModuleDef _SHA3module = { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
565 PyModuleDef_HEAD_INIT, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
566 "_sha3", |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
567 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
568 -1, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
569 SHA3_functions, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
570 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
571 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
572 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
573 NULL |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
574 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
575 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
576 PyMODINIT_FUNC |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
577 PyInit__sha3(void) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
578 { |
|
86570
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
579 PyObject *m; |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
580 |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
581 Py_TYPE(&SHA3type) = &PyType_Type; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
582 if (PyType_Ready(&SHA3type) < 0) { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
583 return NULL; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
584 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
585 |
|
86570
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
586 m = PyModule_Create(&_SHA3module); |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
587 if (m == NULL) |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
588 return NULL; |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
589 |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
590 Py_INCREF((PyObject *)&SHA3type); |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
591 PyModule_AddObject(m, "SHA3Type", (PyObject *)&SHA3type); |
|
27da6e790c41
Issue #18742: Expose the internal hash type object for ABCs.
Christian Heimes <christian@cheimes.de>
parents:
84931
diff
changeset
|
592 return m; |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
593 } |
