| 1571 | " TypeError: If the argument is not string-like or incorrect number of arguments is provided."; |
| 1572 | |
| 1573 | static PyObject *Str_like_sha256(PyObject *self, PyObject *const *args, Py_ssize_t positional_args_count, |
| 1574 | PyObject *args_names_tuple) { |
| 1575 | // Check minimum arguments |
| 1576 | int is_member = self != NULL && PyObject_TypeCheck(self, &StrType); |
| 1577 | if (positional_args_count < !is_member || positional_args_count > !is_member + 1 || args_names_tuple) { |
| 1578 | PyErr_SetString(PyExc_TypeError, "sha256() expects exactly one positional argument"); |
| 1579 | return NULL; |
| 1580 | } |
| 1581 | |
| 1582 | PyObject *text_obj = is_member ? self : args[0]; |
| 1583 | sz_string_view_t text; |
| 1584 | |
| 1585 | // Validate and convert `text` |
| 1586 | if (!sz_py_export_string_like(text_obj, &text.start, &text.length)) { |
| 1587 | wrap_current_exception("The text argument must be string-like"); |
| 1588 | return NULL; |
| 1589 | } |
| 1590 | |
| 1591 | // Initialize SHA256 state |
| 1592 | sz_sha256_state_t state; |
| 1593 | sz_sha256_state_init(&state); |
| 1594 | |
| 1595 | // Update with data |
| 1596 | sz_sha256_state_update(&state, text.start, text.length); |
| 1597 | |
| 1598 | // Compute final digest |
| 1599 | sz_u8_t digest[32]; |
| 1600 | sz_sha256_state_digest(&state, digest); |
| 1601 | |
| 1602 | return PyBytes_FromStringAndSize((char const *)digest, 32); |
| 1603 | } |
| 1604 | |
| 1605 | static char const doc_hmac_sha256[] = // |
| 1606 | "Compute HMAC-SHA256 authentication code.\n" |
nothing calls this directly
no test coverage detected
searching dependent graphs…