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