mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Add _blake2 consts (#8053)
* Add `_blake2` consts * Update `test_hashlib.py` to 3.14.5
This commit is contained in:
1 parent
28addda34f
commit
c864885900
2 files changed
+44
-2
No files matched your search
Vendored
+17
-2
@@ -127,8 +127,11 @@ class HashLibTestCase(unittest.TestCase):
|
||||
algorithms.add(algorithm.lower())
|
||||
|
||||
_blake2 = self._conditional_import_module('_blake2')
|
||||
blake2_hashes = {'blake2b', 'blake2s'}
|
||||
if _blake2:
|
||||
algorithms.update({'blake2b', 'blake2s'})
|
||||
algorithms.update(blake2_hashes)
|
||||
else:
|
||||
algorithms.difference_update(blake2_hashes)
|
||||
|
||||
self.constructors_to_test = {}
|
||||
for algorithm in algorithms:
|
||||
@@ -220,7 +223,12 @@ class HashLibTestCase(unittest.TestCase):
|
||||
# all available algorithms must be loadable, bpo-47101
|
||||
self.assertNotIn("undefined", hashlib.algorithms_available)
|
||||
for name in hashlib.algorithms_available:
|
||||
digest = hashlib.new(name, usedforsecurity=False)
|
||||
with self.subTest(name):
|
||||
try:
|
||||
_ = hashlib.new(name, usedforsecurity=False)
|
||||
except ValueError as exc:
|
||||
self.skip_if_blake2_not_builtin(name, exc)
|
||||
raise
|
||||
|
||||
def test_usedforsecurity_true(self):
|
||||
hashlib.new("sha256", usedforsecurity=True)
|
||||
@@ -444,6 +452,7 @@ class HashLibTestCase(unittest.TestCase):
|
||||
self.assertEqual(h.hexdigest(), "e2d4535e3b613135c14f2fe4e026d7ad8d569db44901740beffa30d430acb038")
|
||||
|
||||
@requires_resource('cpu')
|
||||
@requires_blake2
|
||||
def test_blake2_update_over_4gb(self):
|
||||
# blake2s or blake2b doesn't matter based on how our C code is structured, this tests the
|
||||
# common loop macro logic.
|
||||
@@ -734,6 +743,12 @@ class HashLibTestCase(unittest.TestCase):
|
||||
"e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"+
|
||||
"de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b")
|
||||
|
||||
def skip_if_blake2_not_builtin(self, name, skip_reason):
|
||||
# blake2 builtins may be absent if python built with
|
||||
# a subset of --with-builtin-hashlib-hashes or none.
|
||||
if "blake2" in name and "blake2" not in builtin_hashes:
|
||||
self.skipTest(skip_reason)
|
||||
|
||||
def check_blake2(self, constructor, salt_size, person_size, key_size,
|
||||
digest_size, max_offset):
|
||||
self.assertEqual(constructor.SALT_SIZE, salt_size)
|
||||
|
||||
@@ -7,6 +7,33 @@ mod _blake2 {
|
||||
use crate::hashlib::_hashlib::{BlakeHashArgs, local_blake2b, local_blake2s};
|
||||
use crate::vm::{PyPayload, PyResult, VirtualMachine};
|
||||
|
||||
#[pyattr(name = "_GIL_MINSIZE")]
|
||||
const GIL_MINSIZE: u16 = 2048;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2B_SALT_SIZE: u8 = 16;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2B_PERSON_SIZE: u8 = 16;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2B_MAX_KEY_SIZE: u8 = 64;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2B_MAX_DIGEST_SIZE: u8 = 64;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2S_SALT_SIZE: u8 = 8;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2S_PERSON_SIZE: u8 = 8;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2S_MAX_KEY_SIZE: u8 = 32;
|
||||
|
||||
#[pyattr]
|
||||
const BLAKE2S_MAX_DIGEST_SIZE: u8 = 32;
|
||||
|
||||
#[pyfunction]
|
||||
fn blake2b(args: BlakeHashArgs, vm: &VirtualMachine) -> PyResult {
|
||||
Ok(local_blake2b(args, vm)?.into_pyobject(vm))
|
||||
|
||||
Reference in new issue
Block a user