Mercurial > cpython-lru_cache-weakref
annotate Modules/_sha3/sha3module.c @ 79691:05c8928362ee
Merge __next__ method link fixes with 3.3.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Fri, 12 Oct 2012 13:46:37 +0300 |
| parents | d82a978dbb46 |
| children | b397b0c08f69 |
| 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 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
98 #if SIZEOF_VOID_P == 8 && defined(PY_UINT64_T) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
99 /* 64bit 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
|
100 #define KeccakImplementation 64 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
101 #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
|
102 #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
|
103 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
|
104 #elif SIZEOF_VOID_P == 4 && defined(PY_UINT64_T) |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
105 /* 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
|
106 #define KeccakImplementation 32 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
107 #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
|
108 #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
|
109 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
|
110 #else |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
111 /* 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
|
112 #define KeccakImplementation 32 |
|
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 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
|
114 #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
|
115 #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
|
116 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
117 |
|
79584
aca29cde398b
re-add brg_endian.h to debug issue in big endian SPARC machine
Christian Heimes <christian@cheimes.de>
parents:
79521
diff
changeset
|
118 /* replacement for brg_endian.h |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
119 #define IS_BIG_ENDIAN BIG_ENDIAN |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
120 #define IS_LITTLE_ENDIAN LITTLE_ENDIAN |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
121 #define PLATFORM_BYTE_ORDER BYTE_ORDER |
|
79584
aca29cde398b
re-add brg_endian.h to debug issue in big endian SPARC machine
Christian Heimes <christian@cheimes.de>
parents:
79521
diff
changeset
|
122 */ |
|
79502
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
123 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
124 /* 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
|
125 #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
|
126 #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
|
127 #include "keccak/KeccakSponge.c" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
128 #if KeccakImplementation == 64 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
129 #include "keccak/KeccakF-1600-opt64.c" |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
130 #elif KeccakImplementation == 32 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
131 #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
|
132 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
133 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
134 #define SHA3_BLOCKSIZE 200 /* 1600 bits */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
135 #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
|
136 #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
|
137 #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
|
138 #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
|
139 #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
|
140 #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
|
141 #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
|
142 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
143 /* 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
|
144 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
145 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
|
146 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
|
147 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
|
148 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
|
149 #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
|
150 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
|
151 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
152 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
153 } SHA3object; |
|
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 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
|
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 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
158 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
|
159 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
|
160 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
161 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
|
162 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
163 /* 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
|
164 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
|
165 /* 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
|
166 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
|
167 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
168 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
|
169 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
170 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
|
171 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
172 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
|
173 break; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
174 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
|
175 /* 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
|
176 default: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
177 /* 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
|
178 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
|
179 "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
|
180 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
|
181 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
182 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
|
183 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
|
184 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
|
185 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
186 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
|
187 #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
|
188 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
|
189 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
190 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
|
191 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
192 |
|
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 /* 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
|
195 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
196 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
|
197 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
|
198 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
199 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
|
200 #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
|
201 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
|
202 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
|
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 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
205 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
|
206 } |
|
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 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
209 /* 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
|
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 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
|
212 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
213 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
|
214 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
|
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 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
|
217 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
218 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
|
219 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
|
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 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
|
222 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
|
223 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
|
224 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
|
225 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
226 |
|
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 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
|
229 "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
|
230 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
231 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
|
232 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
|
233 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
234 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
|
235 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
|
236 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
|
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 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
247 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
|
248 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
|
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 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
251 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
252 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
|
253 "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
|
254 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
255 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
|
256 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
|
257 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 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
|
264 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
265 /* 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
|
266 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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 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
|
272 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
|
273 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
|
274 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
275 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
276 /* 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
|
277 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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
283 /* 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 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
|
290 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
291 assert(_PyUnicode_CheckConsistency(retval, 1)); |
|
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 retval; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
293 } |
|
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 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
|
296 "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
|
297 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
298 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
|
299 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
|
300 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
301 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
|
302 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
|
303 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
|
304 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
305 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
|
306 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
|
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 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
|
309 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
310 /* add new data, the function takes the length in bits not bytes */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
311 #ifdef WITH_THREADS |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
312 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
|
313 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
|
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 /* 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
|
316 * 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
|
317 * 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
|
318 * 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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
326 else { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
327 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
|
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 #else |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
330 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
|
331 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
332 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
|
333 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
334 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
|
335 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
|
336 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
|
337 "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
|
338 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
|
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 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
341 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
|
342 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
|
343 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
|
344 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
345 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
346 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
|
347 {"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
|
348 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
|
349 {"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
|
350 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
|
351 {"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
|
352 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
|
353 {"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
|
354 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
|
355 {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
|
356 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
357 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
358 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
|
359 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
|
360 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
361 return PyLong_FromLong(SHA3_BLOCKSIZE); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
362 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
363 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
364 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
|
365 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
|
366 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
367 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
|
368 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
369 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
370 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
|
371 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
|
372 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
373 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
|
374 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
375 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
376 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
377 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
|
378 {"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
|
379 {"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
|
380 {"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
|
381 {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
|
382 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
383 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
384 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
|
385 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
|
386 "_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
|
387 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
|
388 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
|
389 /* methods */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
390 (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
|
391 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
|
392 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
|
393 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
|
394 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
|
395 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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 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
|
401 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
|
402 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 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
|
410 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
|
411 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
|
412 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
|
413 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
|
414 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
|
415 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
|
416 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
417 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
418 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
419 /* 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
|
420 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
|
421 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
|
422 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
|
423 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
430 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
|
431 &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
|
432 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
|
433 } |
|
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 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
|
436 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
|
437 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
438 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
|
439 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
|
440 } |
|
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 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
|
443 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
|
444 "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
|
445 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
|
446 } |
|
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 (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
|
449 #ifdef WITH_THREADS |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
450 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
|
451 /* 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
|
452 * 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
|
453 */ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
454 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
|
455 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
|
456 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
|
457 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
458 else { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
459 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
|
460 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
461 #else |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
462 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
|
463 #endif |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
464 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
|
465 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
|
466 "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
|
467 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
|
468 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
469 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
|
470 } |
|
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 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
|
473 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
474 error: |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
475 if (newobj) { |
|
79515
8b2546165960
fix possible memory leak, dealloc newobj
Christian Heimes <christian@cheimes.de>
parents:
79502
diff
changeset
|
476 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
|
477 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
478 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
|
479 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
|
480 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
481 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
|
482 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
483 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
484 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
485 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
|
486 "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
|
487 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
488 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
|
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 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
|
491 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
|
492 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
493 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
|
494 } |
|
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 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
497 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
|
498 "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
|
499 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
500 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
|
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 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
|
503 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
|
504 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
505 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
|
506 } |
|
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 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
|
509 "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
|
510 \n\ |
|
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 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
|
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 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
|
514 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
|
515 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
516 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
|
517 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
518 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
519 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
|
520 "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
|
521 \n\ |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
522 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
|
523 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
524 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
|
525 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
|
526 { |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
527 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
|
528 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
529 |
|
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 /* 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
|
532 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
|
533 {"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
|
534 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
|
535 {"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
|
536 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
|
537 {"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
|
538 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
|
539 {"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
|
540 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
|
541 {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
|
542 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
543 |
|
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 /* 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
|
546 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
|
547 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
|
548 "_sha3", |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
549 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
550 -1, |
|
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_functions, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
552 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
553 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
554 NULL, |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
555 NULL |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
556 }; |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
557 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
558 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
|
559 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
|
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 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
|
562 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
|
563 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
|
564 } |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
565 |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
566 return PyModule_Create(&_SHA3module); |
|
11c9a894680e
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
567 } |
