Source code for templates.random_sources.contextless_source
"""
Object for providing randomness from a source that does not need to be opened or closed.
"""
from typing import Iterable
from tno.mpc.encryption_schemes.templates._randomness_manager import (
RR,
RandomnessSource,
)
# Inherit from protocol for earlier detection of erroneous type annotations.
[docs]
class ContextlessSource(RandomnessSource[RR]):
"""
Object for providing randomness from a contextless source, e.g. a source that does not need to
be opened or closed.
Implements tno.mpc.encryption_schemes.templates._randomness_manager.RandomnessSource.
"""
[docs]
def __init__(
self,
values: Iterable[RR],
) -> None:
"""
Object that yields randomness from the provided iterable.
:param values: Iterable that yields random values one at a time.
"""
self._randomness = iter(values)
self._nr_yielded = 0
[docs]
def open(self) -> None:
"""
Dummy function as contextless sources do not need to be opened.
"""
[docs]
def get_one(self) -> RR:
"""
Get one random value.
:return: One random value.
"""
value = next(self._randomness)
self._nr_yielded += 1
return value
@property
def nr_yielded(self) -> int:
"""
Number of random elements yielded.
:return: Number of random elements yielded.
"""
return self._nr_yielded
[docs]
def close(self) -> None:
"""
Dummy function as contextless sources do not need to be opened.
"""
def __str__(self) -> str:
return f"{self.__class__.__name__}"