Fix ruff errors and add type info.

pull/114/head
Robert de Vries 2026-07-06 23:00:40 +02:00
parent 67794e4f76
commit c7306ed9ef
3 changed files with 67 additions and 10 deletions

View File

@ -18,6 +18,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
import os
import sys
from typing import TYPE_CHECKING
from wolfcrypt._version import __version__, __wolfssl_version__
__title__ = "wolfcrypt"
@ -36,9 +40,6 @@ __all__ = [
"ciphers", "hashes", "random", "pwdbased", "cryptocb"
]
import os
import sys
top_level_py = os.path.basename(sys.argv[0])
# The code below is intended to only be used after the CFFI is built, so we
@ -46,8 +47,10 @@ top_level_py = os.path.basename(sys.argv[0])
if top_level_py not in ["setup.py", "build_ffi.py"]:
from wolfcrypt._ffi import ffi as _ffi
from wolfcrypt._ffi import lib as _lib
if _lib.CRYPTO_CB_ENABLED:
from wolfcrypt.cryptocb import CryptoCallback
if TYPE_CHECKING:
if _lib.CRYPTO_CB_ENABLED:
from wolfcrypt.cryptocb import CryptoCallback
from wolfcrypt.exceptions import WolfCryptApiError
ret = _lib.wolfCrypt_Init()

View File

@ -18,9 +18,12 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
from _cffi_backend import FFI
from collections.abc import Callable
from dataclasses import dataclass
from typing import TypeAlias
from _cffi_backend import FFI
INVALID_DEVID: int
AES_ENABLED: int
@ -30,6 +33,7 @@ ASN_ENABLED: int
CHACHA_ENABLED: int
CHACHA_STREAM_ENABLED: int
CHACHA20_POLY1305_ENABLED: int
CRYPTO_CB_ENABLED: int
DES3_ENABLED: int
ECC_ENABLED: int
ED25519_ENABLED: int
@ -282,6 +286,20 @@ WC_MGF1SHA256: int
WC_MGF1SHA384: int
WC_MGF1SHA512: int
WC_ALGO_TYPE_NONE: int
WC_ALGO_TYPE_HASH: int
WC_ALGO_TYPE_CIPHER: int
WC_ALGO_TYPE_PK: int
WC_ALGO_TYPE_RNG: int
WC_ALGO_TYPE_SEED: int
WC_ALGO_TYPE_HMAC: int
WC_ALGO_TYPE_CMAC: int
WC_ALGO_TYPE_CERT: int
WC_ALGO_TYPE_KDF: int
WC_ALGO_TYPE_COPY: int
WC_ALGO_TYPE_FREE: int
WC_ALGO_TYPE_MAX: int
WC_HASH_TYPE_NONE: int
WC_HASH_TYPE_MD2: int
WC_HASH_TYPE_MD4: int
@ -328,6 +346,7 @@ RNG: TypeAlias = FFI.CData
def wc_SetSeed_Cb(cb: FFI.CData) -> int: ...
def wolfCrypt_SetPrivateKeyReadEnable_fips(enable: int, key_type: int) -> int: ...
def wc_GetErrorString(error: int) -> FFI.CData: ...
def wolfCrypt_Init() -> int: ...
def wc_InitRngNonce_ex(rng: RNG, nonce: bytes, nonce_size: int, heap: FFI.CData, device_id: int) -> int: ...
def wc_RNG_GenerateByte(rng: RNG, buffer: FFI.CData) -> int: ...
@ -569,3 +588,36 @@ def wc_dilithium_sign_msg_with_seed(msg: bytes, msg_len: int, sig: BytePtr, sig_
def wc_MlDsaKey_GetPrivLen(key: DilithiumKey, len: IntPtr) -> int: ...
def wc_MlDsaKey_GetPubLen(key: DilithiumKey, len: IntPtr) -> int: ...
def wc_MlDsaKey_GetSigLen(key: DilithiumKey, len: IntPtr) -> int: ...
@dataclass
class wc_HashInfo:
type: int
data: FFI.CData
data_size: int
digest: FFI.CData
sha: FFI.CData
sha256: FFI.CData
sha384: FFI.CData
sha512: FFI.CData
sha3: FFI.CData
ctx: FFI.CData
@dataclass
class wc_RngInfo:
rng: RNG
out: FFI.CData
sz: int
@dataclass
class wc_CryptoInfo:
algo_type: int
hash: wc_HashInfo
rng: wc_RngInfo
def wc_CryptoCb_RegisterDevice(dev_id: int, cb: Callable[[int, wc_CryptoInfo, FFI.CData], int], ctx: FFI.CData) -> int: ...
def wc_CryptoCb_UnRegisterDevice(dev_id: int) -> None: ...
def wc_CryptoCb_DefaultDevID() -> int: ...
def py_wc_crypto_callback(dev_id: int, info: wc_CryptoInfo, ctx: FFI.CData) -> int: ...

View File

@ -24,8 +24,7 @@ from __future__ import annotations
import logging
from collections import defaultdict
from types import TracebackType
from typing import Final
from typing import TYPE_CHECKING, Final
from typing_extensions import Self
@ -33,6 +32,9 @@ from wolfcrypt._ffi import ffi as _ffi
from wolfcrypt._ffi import lib as _lib
from wolfcrypt.exceptions import WolfCryptError
if TYPE_CHECKING:
from types import TracebackType
log = logging.getLogger(__name__)
if _lib.CRYPTO_CB_ENABLED:
@ -100,7 +102,7 @@ if _lib.CRYPTO_CB_ENABLED:
def __del__(self) -> None:
self._unregister()
def callback(self, device_id: int, info: _ffi.CData) -> int:
def callback(self, device_id: int, info: _lib.wc_CryptoInfo) -> int:
log.debug("device_id=%d algo_type = %s", device_id, ALGO_TYPE_NAME[info.algo_type])
try:
if info.algo_type == _lib.WC_ALGO_TYPE_HASH:
@ -137,7 +139,7 @@ if _lib.CRYPTO_CB_ENABLED:
except NotImplementedError:
return _lib.CRYPTOCB_UNAVAILABLE
def rng_callback(self, device_id: int, rng, size: int) -> bytes:
def rng_callback(self, device_id: int, rng: _lib.RNG, size: int) -> bytes:
raise NotImplementedError
def hash_update_callback(self, device_id: int, hash_type: int, data: bytes) -> None: