2022-08-23 09:40:01 +00:00
|
|
|
from ctypes import *
|
|
|
|
|
|
|
|
from .ecc import ECCrefPublicKey, ECCrefPrivateKey, ECCKeyPair
|
|
|
|
from .exception import PiicoError
|
|
|
|
from .session_mixin import SM3Mixin, SM4Mixin, SM2Mixin
|
|
|
|
|
|
|
|
|
|
|
|
class Session(SM2Mixin, SM3Mixin, SM4Mixin):
|
|
|
|
def __init__(self, driver, session):
|
|
|
|
super().__init__()
|
|
|
|
self._session = session
|
|
|
|
self._driver = driver
|
|
|
|
|
|
|
|
def get_device_info(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def generate_random(self, length=64):
|
|
|
|
random_data = (c_ubyte * length)()
|
|
|
|
ret = self._driver.SDF_GenerateRandom(self._session, c_int(length), random_data)
|
2022-08-23 12:19:53 +00:00
|
|
|
if ret != 0:
|
2022-08-23 09:40:01 +00:00
|
|
|
raise PiicoError("generate random error", ret)
|
|
|
|
return bytes(random_data)
|
|
|
|
|
|
|
|
def generate_ecc_key_pair(self, alg_id):
|
|
|
|
public_key = ECCrefPublicKey()
|
|
|
|
private_key = ECCrefPrivateKey()
|
|
|
|
ret = self._driver.SDF_GenerateKeyPair_ECC(self._session, c_int(alg_id), c_int(256), pointer(public_key),
|
|
|
|
pointer(private_key))
|
2022-08-23 12:19:53 +00:00
|
|
|
if ret != 0:
|
2022-08-23 09:40:01 +00:00
|
|
|
raise PiicoError("generate ecc key pair failed", ret)
|
|
|
|
return ECCKeyPair(public_key.encode(), private_key.encode())
|
|
|
|
|
|
|
|
def close(self):
|
|
|
|
ret = self._driver.SDF_CloseSession(self._session)
|
2022-08-23 12:19:53 +00:00
|
|
|
if ret != 0:
|
2022-08-23 09:40:01 +00:00
|
|
|
raise PiicoError("close session failed", ret)
|