golden hour
/opt/imunify360/venv/lib/python3.11/site-packages/Crypto/Hash
⬆️ Go Up
Upload
File/Folder
Size
Actions
BLAKE2b.py
9.2 KB
Del
OK
BLAKE2b.pyi
906 B
Del
OK
BLAKE2s.py
9.21 KB
Del
OK
BLAKE2s.pyi
739 B
Del
OK
CMAC.py
10.11 KB
Del
OK
CMAC.pyi
822 B
Del
OK
HMAC.py
6.86 KB
Del
OK
HMAC.pyi
624 B
Del
OK
KMAC128.py
5.81 KB
Del
OK
KMAC128.pyi
903 B
Del
OK
KMAC256.py
2.84 KB
Del
OK
KMAC256.pyi
226 B
Del
OK
KangarooTwelve.py
8.82 KB
Del
OK
KangarooTwelve.pyi
572 B
Del
OK
MD2.py
5.97 KB
Del
OK
MD2.pyi
492 B
Del
OK
MD4.py
6.43 KB
Del
OK
MD4.pyi
532 B
Del
OK
MD5.py
6.46 KB
Del
OK
MD5.pyi
492 B
Del
OK
Poly1305.py
7.88 KB
Del
OK
Poly1305.pyi
665 B
Del
OK
RIPEMD.py
1.17 KB
Del
OK
RIPEMD.pyi
94 B
Del
OK
RIPEMD160.py
6.25 KB
Del
OK
RIPEMD160.pyi
516 B
Del
OK
SHA.py
1.12 KB
Del
OK
SHA.pyi
161 B
Del
OK
SHA1.py
6.53 KB
Del
OK
SHA1.pyi
536 B
Del
OK
SHA224.py
6.74 KB
Del
OK
SHA224.pyi
544 B
Del
OK
SHA256.py
6.74 KB
Del
OK
SHA256.pyi
612 B
Del
OK
SHA384.py
6.74 KB
Del
OK
SHA384.pyi
544 B
Del
OK
SHA3_224.py
6.03 KB
Del
OK
SHA3_224.pyi
605 B
Del
OK
SHA3_256.py
6.03 KB
Del
OK
SHA3_256.pyi
605 B
Del
OK
SHA3_384.py
6.13 KB
Del
OK
SHA3_384.pyi
605 B
Del
OK
SHA3_512.py
5.99 KB
Del
OK
SHA3_512.pyi
605 B
Del
OK
SHA512.py
7.54 KB
Del
OK
SHA512.pyi
622 B
Del
OK
SHAKE128.py
4.65 KB
Del
OK
SHAKE128.pyi
437 B
Del
OK
SHAKE256.py
4.65 KB
Del
OK
SHAKE256.pyi
437 B
Del
OK
TupleHash128.py
4.61 KB
Del
OK
TupleHash128.pyi
652 B
Del
OK
TupleHash256.py
2.84 KB
Del
OK
TupleHash256.pyi
144 B
Del
OK
_BLAKE2b.abi3.so
26.78 KB
Del
OK
_BLAKE2s.abi3.so
26.32 KB
Del
OK
_MD2.abi3.so
22.59 KB
Del
OK
_MD4.abi3.so
26.55 KB
Del
OK
_MD5.abi3.so
31.26 KB
Del
OK
_RIPEMD160.abi3.so
59.3 KB
Del
OK
_SHA1.abi3.so
70.38 KB
Del
OK
_SHA224.abi3.so
44.7 KB
Del
OK
_SHA256.abi3.so
44.76 KB
Del
OK
_SHA384.abi3.so
52.89 KB
Del
OK
_SHA512.abi3.so
52.93 KB
Del
OK
__init__.py
1.21 KB
Del
OK
__init__.pyi
0 B
Del
OK
__pycache__
-
Del
OK
_ghash_clmul.abi3.so
57.01 KB
Del
OK
_ghash_portable.abi3.so
24.44 KB
Del
OK
_keccak.abi3.so
40.66 KB
Del
OK
_poly1305.abi3.so
32.64 KB
Del
OK
cSHAKE128.py
6.17 KB
Del
OK
cSHAKE128.pyi
499 B
Del
OK
cSHAKE256.py
2.15 KB
Del
OK
cSHAKE256.pyi
231 B
Del
OK
keccak.py
7.37 KB
Del
OK
keccak.pyi
741 B
Del
OK
Edit: Poly1305.py
# -*- coding: utf-8 -*- # # Hash/Poly1305.py - Implements the Poly1305 MAC # # =================================================================== # The contents of this file are dedicated to the public domain. To # the extent that dedication to the public domain is not available, # everyone is granted a worldwide, perpetual, royalty-free, # non-exclusive license to exercise all rights associated with the # contents of this file for any purpose whatsoever. # No rights are reserved. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # =================================================================== from binascii import unhexlify from Crypto.Util.py3compat import bord, tobytes, _copy_bytes from Crypto.Hash import BLAKE2s from Crypto.Random import get_random_bytes from Crypto.Util._raw_api import (load_pycryptodome_raw_lib, VoidPointer, SmartPointer, create_string_buffer, get_raw_buffer, c_size_t, c_uint8_ptr) _raw_poly1305 = load_pycryptodome_raw_lib("Crypto.Hash._poly1305", """ int poly1305_init(void **state, const uint8_t *r, size_t r_len, const uint8_t *s, size_t s_len); int poly1305_destroy(void *state); int poly1305_update(void *state, const uint8_t *in, size_t len); int poly1305_digest(const void *state, uint8_t *digest, size_t len); """) class Poly1305_MAC(object): """An Poly1305 MAC object. Do not instantiate directly. Use the :func:`new` function. :ivar digest_size: the size in bytes of the resulting MAC tag :vartype digest_size: integer """ digest_size = 16 def __init__(self, r, s, data): if len(r) != 16: raise ValueError("Parameter r is not 16 bytes long") if len(s) != 16: raise ValueError("Parameter s is not 16 bytes long") self._mac_tag = None state = VoidPointer() result = _raw_poly1305.poly1305_init(state.address_of(), c_uint8_ptr(r), c_size_t(len(r)), c_uint8_ptr(s), c_size_t(len(s)) ) if result: raise ValueError("Error %d while instantiating Poly1305" % result) self._state = SmartPointer(state.get(), _raw_poly1305.poly1305_destroy) if data: self.update(data) def update(self, data): """Authenticate the next chunk of message. Args: data (byte string/byte array/memoryview): The next chunk of data """ if self._mac_tag: raise TypeError("You can only call 'digest' or 'hexdigest' on this object") result = _raw_poly1305.poly1305_update(self._state.get(), c_uint8_ptr(data), c_size_t(len(data))) if result: raise ValueError("Error %d while hashing Poly1305 data" % result) return self def copy(self): raise NotImplementedError() def digest(self): """Return the **binary** (non-printable) MAC tag of the message authenticated so far. :return: The MAC tag digest, computed over the data processed so far. Binary form. :rtype: byte string """ if self._mac_tag: return self._mac_tag bfr = create_string_buffer(16) result = _raw_poly1305.poly1305_digest(self._state.get(), bfr, c_size_t(len(bfr))) if result: raise ValueError("Error %d while creating Poly1305 digest" % result) self._mac_tag = get_raw_buffer(bfr) return self._mac_tag def hexdigest(self): """Return the **printable** MAC tag of the message authenticated so far. :return: The MAC tag, computed over the data processed so far. Hexadecimal encoded. :rtype: string """ return "".join(["%02x" % bord(x) for x in tuple(self.digest())]) def verify(self, mac_tag): """Verify that a given **binary** MAC (computed by another party) is valid. Args: mac_tag (byte string/byte string/memoryview): the expected MAC of the message. Raises: ValueError: if the MAC does not match. It means that the message has been tampered with or that the MAC key is incorrect. """ secret = get_random_bytes(16) mac1 = BLAKE2s.new(digest_bits=160, key=secret, data=mac_tag) mac2 = BLAKE2s.new(digest_bits=160, key=secret, data=self.digest()) if mac1.digest() != mac2.digest(): raise ValueError("MAC check failed") def hexverify(self, hex_mac_tag): """Verify that a given **printable** MAC (computed by another party) is valid. Args: hex_mac_tag (string): the expected MAC of the message, as a hexadecimal string. Raises: ValueError: if the MAC does not match. It means that the message has been tampered with or that the MAC key is incorrect. """ self.verify(unhexlify(tobytes(hex_mac_tag))) def new(**kwargs): """Create a new Poly1305 MAC object. Args: key (bytes/bytearray/memoryview): The 32-byte key for the Poly1305 object. cipher (module from ``Crypto.Cipher``): The cipher algorithm to use for deriving the Poly1305 key pair *(r, s)*. It can only be ``Crypto.Cipher.AES`` or ``Crypto.Cipher.ChaCha20``. nonce (bytes/bytearray/memoryview): Optional. The non-repeatable value to use for the MAC of this message. It must be 16 bytes long for ``AES`` and 8 or 12 bytes for ``ChaCha20``. If not passed, a random nonce is created; you will find it in the ``nonce`` attribute of the new object. data (bytes/bytearray/memoryview): Optional. The very first chunk of the message to authenticate. It is equivalent to an early call to ``update()``. Returns: A :class:`Poly1305_MAC` object """ cipher = kwargs.pop("cipher", None) if not hasattr(cipher, '_derive_Poly1305_key_pair'): raise ValueError("Parameter 'cipher' must be AES or ChaCha20") cipher_key = kwargs.pop("key", None) if cipher_key is None: raise TypeError("You must pass a parameter 'key'") nonce = kwargs.pop("nonce", None) data = kwargs.pop("data", None) if kwargs: raise TypeError("Unknown parameters: " + str(kwargs)) r, s, nonce = cipher._derive_Poly1305_key_pair(cipher_key, nonce) new_mac = Poly1305_MAC(r, s, data) new_mac.nonce = _copy_bytes(None, None, nonce) # nonce may still be just a memoryview return new_mac
Save