2020
2121# pylint: disable=no-member,no-name-in-module
2222
23+ from __future__ import annotations
24+
25+ from _cffi_backend import FFI
26+
2327from wolfcrypt ._ffi import ffi as _ffi
2428from wolfcrypt ._ffi import lib as _lib
2529
@@ -31,8 +35,8 @@ class Random(object):
3135 A Cryptographically Secure Pseudo Random Number Generator - CSPRNG
3236 """
3337
34- def __init__ (self , nonce = _ffi .NULL , device_id = _lib .INVALID_DEVID ):
35- self .native_object = _ffi .new ("WC_RNG *" )
38+ def __init__ (self , nonce = _ffi .NULL , device_id = _lib .INVALID_DEVID ) -> None :
39+ self .native_object : FFI . CData | None = _ffi .new ("WC_RNG *" )
3640
3741 if nonce == _ffi .NULL :
3842 nonce_size = 0
@@ -46,32 +50,34 @@ def __init__(self, nonce=_ffi.NULL, device_id=_lib.INVALID_DEVID):
4650 # making sure _lib.wc_FreeRng outlives WC_RNG instances
4751 _delete = _lib .wc_FreeRng
4852
49- def __del__ (self ):
53+ def __del__ (self ) -> None :
5054 if self .native_object :
5155 try :
52- self ._delete (self .native_object )
56+ Random ._delete (self .native_object )
5357 except AttributeError :
5458 # Can occur during interpreter shutdown
5559 pass
5660
57- def byte (self ):
61+ def byte (self ) -> bytes :
5862 """
5963 Generate and return a random byte.
6064 """
6165 result = _ffi .new ('byte[1]' )
6266
67+ assert self .native_object is not None
6368 ret = _lib .wc_RNG_GenerateByte (self .native_object , result )
6469 if ret < 0 : # pragma: no cover
6570 raise WolfCryptError ("RNG generate byte error (%d)" % ret )
6671
6772 return _ffi .buffer (result , 1 )[:]
6873
69- def bytes (self , length ):
74+ def randbytes (self , length ) -> bytes :
7075 """
7176 Generate and return a random sequence of length bytes.
7277 """
7378 result = _ffi .new ('byte[%d]' % length )
7479
80+ assert self .native_object is not None
7581 ret = _lib .wc_RNG_GenerateBlock (self .native_object , result , length )
7682 if ret < 0 : # pragma: no cover
7783 raise WolfCryptError ("RNG generate block error (%d)" % ret )
0 commit comments