Source code for pyecsca.sca.trace_set.pickle
"""
Provides a traceset implementation based on Python's pickle format.
This implementation of the traceset is thus very generic.
"""
import pickle
from io import BufferedIOBase, RawIOBase
from pathlib import Path
from typing import Union, BinaryIO
from public import public
from .base import TraceSet
[docs]
@public
class PickleTraceSet(TraceSet):
"""Pickle-based traceset format."""
[docs]
@classmethod
def read(cls, input: Union[str, Path, bytes, BinaryIO]) -> "PickleTraceSet":
if isinstance(input, bytes):
return pickle.loads(input) # pickle is OK here, skipcq: BAN-B301
elif isinstance(input, (str, Path)):
with open(input, "rb") as f:
return pickle.load(f) # pickle is OK here, skipcq: BAN-B301
elif isinstance(input, (RawIOBase, BufferedIOBase, BinaryIO)):
return pickle.load(input) # pickle is OK here, skipcq: BAN-B301
raise TypeError
[docs]
@classmethod
def inplace(cls, input: Union[str, Path, bytes, BinaryIO]) -> "PickleTraceSet":
raise NotImplementedError
[docs]
def write(self, output: Union[str, Path, BinaryIO]):
if isinstance(output, (str, Path)):
with open(output, "wb") as f:
pickle.dump(self, f)
elif isinstance(output, (RawIOBase, BufferedIOBase, BinaryIO)):
pickle.dump(self, output)
else:
raise TypeError