if (length == 0) {
return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
-
CHECK_HACL_UINT32_T_LENGTH(length);
- PyObject *digest = PyBytes_FromStringAndSize(NULL, length);
- uint8_t *buffer = (uint8_t *)PyBytes_AS_STRING(digest);
+
+ PyBytesWriter *writer = PyBytesWriter_Create(length);
+ if (writer == NULL) {
+ return NULL;
+ }
+ uint8_t *buffer = (uint8_t *)PyBytesWriter_GetData(writer);
+
HASHLIB_ACQUIRE_LOCK(self);
(void)Hacl_Hash_SHA3_squeeze(self->hash_state, buffer, (uint32_t)length);
HASHLIB_RELEASE_LOCK(self);
- return digest;
+
+ return PyBytesWriter_Finish(writer);
}
if (length == 0) {
return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
}
-
CHECK_HACL_UINT32_T_LENGTH(length);
+
uint8_t *buffer = PyMem_Malloc(length);
if (buffer == NULL) {
return PyErr_NoMemory();
HASHLIB_ACQUIRE_LOCK(self);
(void)Hacl_Hash_SHA3_squeeze(self->hash_state, buffer, (uint32_t)length);
HASHLIB_RELEASE_LOCK(self);
+
PyObject *digest = _Py_strhex((const char *)buffer, length);
PyMem_Free(buffer);
return digest;