From f846c0e8aed2cd230b57e8e7d2c66f87d1d13a82 Mon Sep 17 00:00:00 2001 From: randogoth Date: Fri, 2 Jun 2023 00:58:58 +0300 Subject: [PATCH] merged temporal functionality --- .vscode/settings.json | 6 ++++ README.md | 40 ++++++++++++++---------- randonautentropy/__init__.py | 11 ++----- randonautentropy/cmd.py | 60 ++++++++---------------------------- randonautentropy/install.py | 24 +++++++++++++++ randonautentropy/rndo.py | 28 ++--------------- randonautentropy/temporal.py | 14 +++++++++ 7 files changed, 84 insertions(+), 99 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 randonautentropy/install.py create mode 100644 randonautentropy/temporal.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..78ae215 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "entropy.h": "c", + "err.h": "c" + } +} \ No newline at end of file diff --git a/README.md b/README.md index f4a8783..556f463 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![PyPI version](https://badge.fury.io/py/randonautentropy.svg)](https://pypi.org/project/randonautentropy/) [![PyPI - License](https://img.shields.io/pypi/l/randonautentropy)](https://pypi.org/project/randonautentropy/) -This project provides tools for interacting with The Randonautica Quantum Random Number Generator. It communicates with the JSON API and provides a Python API, and a `rndo` command-line tool. +This project provides tools for interacting with the Randonautica Quantum and Temporal entropy generators. It provides a Python API, and a `rndo` command-line tool. ## Installation @@ -11,14 +11,15 @@ $ pip install randonautentropy ``` ## Python API -The randonautentropy Python module contains a low-level `get` function. +The randonautentropy Python module contains low-level `get` functions. ```Python ->>> import randonautentropy as rndo +>>> from randonautentropy import rndo +>>> from randonautentropy import temporal ->>> rndo.get(type='hex16', length=10) +>>> rndo.get(length=10, type='hex16') -5b779d67eda68636cb90 +e5b779d67eda68636cb9 >>> rndo.get(type='int32') @@ -35,6 +36,15 @@ The randonautentropy Python module contains a low-level `get` function. >>> rndo.get(type='base64') JA== + +>>> temporal.get(length=10, channel=0) + +d0c7ca53cb57ede1be14 + +>>> temporal.get(channel=1) + +b83a7fd79bee5b3b1ad7 + ``` ## Command Line Interface @@ -42,29 +52,25 @@ JA== The package also comes with a `rndo` CLI: ``` -usage: rndo [-h] [--hex] [--int] [--uniform] [--gauss] [--base64] [bytes] +usage: rndo [-h] [--rndo] [--temporal] [bytes] A tool for printing random data from the Randonautica Quantum Random Number Generators positional arguments: - bytes amount of hexadecimal bytes + bytes amount of hexadecimal bytes options: - -h, --help show this help message and exit - --hex Hexadecimal entropy - --int, -i Random 32 bit integer - --uniform, -u Random uniform float - --gauss, --normal, -g, -n - Random normal distributed float - --base64, -b64, -b Random uniform float + -h, --help show this help message and exit + --rndo, -r Hexadecimal QRNG entropy + --temporal, -t Hexadecimal Temporal entropy ``` ### Example: ``` - $ rndo 100 + $ rndo -r 100 d204ab96505929325292d84a1217ded8de5781a449be0371cdcc97e6f6b1fe69a6b530cdf7112250172e573fe7b42b9e89fe42eef198cce0ec7a427b74f59b7b7a3d8ecabfc0f0051fe06104b1dd7f2a7d1626d7f66aac5afe002bdb255ec136d52405c2 - $ rndo -u - 0.12742354174572768 + $ rndo -t 100 + 93378573b635dc2b01ffd426068e6ccecbc2046fbc9598c1c41a4cbe0dcc8f62071202ea72d05b83581e8cd968cbd099ee0ccf37e9fbcd7d476bd4da6b1965434fc1a65302c732a06b6e5cebff37101a21926a34f1b236a4660a599c6ec93ae7296176fc ``` \ No newline at end of file diff --git a/randonautentropy/__init__.py b/randonautentropy/__init__.py index ef68637..711c7e4 100644 --- a/randonautentropy/__init__.py +++ b/randonautentropy/__init__.py @@ -1,8 +1,3 @@ -import os -import glob - -from .rndo import * -from .cmd import * - -modules = glob.glob(os.path.dirname(__file__)+"/*.py") -__all__ = [ os.path.basename(f)[:-3] for f in modules if not f.endswith('__init__.py')] \ No newline at end of file +from .rndo import get +from .cmd import main +from .temporal import get \ No newline at end of file diff --git a/randonautentropy/cmd.py b/randonautentropy/cmd.py index a64f5b9..0f93f42 100644 --- a/randonautentropy/cmd.py +++ b/randonautentropy/cmd.py @@ -1,67 +1,31 @@ -# Copyright 2023 randogoth -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -""" -A tool for printing random data from the Randonautica Quantum Random Number Generators -""" -from __future__ import print_function - import sys -from . import rndo import argparse +from . import rndo +from . import temporal def main(): parser = argparse.ArgumentParser(description="A tool for printing random data from the Randonautica Quantum Random Number Generators") - parser.add_argument("--hex", action="store_false", help="Hexadecimal entropy") - parser.add_argument("--int", "-i", action="store_true", help="Random 32 bit integer") - parser.add_argument("--uniform", "-u", action="store_true", help="Random uniform float") - parser.add_argument("--gauss", "--normal", "-g", "-n", action="store_true", help="Random normal distributed float") - parser.add_argument("--base64", "-b64", "-b", action="store_true", help="Random uniform float") + parser.add_argument("--rndo", "-r", action="store_false", help="Hexadecimal QRNG entropy") + parser.add_argument("--temporal", "-t", action="store_true", help="Hexadecimal Temporal entropy") parser.add_argument("bytes", nargs="?", type=int, default=10, help="amount of hexadecimal bytes") parser.print_usage = parser.print_help args = parser.parse_args() generator = None - if args.hex: + if args.temporal: try: bytes = int(args.bytes) except ValueError: sys.exit(1) - generator = rndo.get('hex16', bytes) - - if args.int: - print(rndo.get('int32')) - sys.exit(0) - - if args.uniform: - print(rndo.get('uniform')) - sys.exit(0) - - if args.gauss: - print(rndo.get('normal')) - sys.exit(0) - - if args.base64: - print(rndo.get('base64')) - sys.exit(0) + generator = temporal.get(bytes) + elif args.rndo: + try: + bytes = int(args.bytes) + except ValueError: + sys.exit(1) + generator = rndo.get(bytes) if not generator: sys.exit(1) diff --git a/randonautentropy/install.py b/randonautentropy/install.py new file mode 100644 index 0000000..5e34de9 --- /dev/null +++ b/randonautentropy/install.py @@ -0,0 +1,24 @@ +import os +import shutil + +def install(): + print("TemporalLib not found. Attempting to install it...") + print("==================================================") + module_path = os.path.abspath(os.path.dirname(__file__)) + temporal_path = os.path.abspath(f"{module_path}/temporal") + os.chdir(module_path) + try: + os.system('git clone --depth 1 git@github.com:TheRandonauts/temporal.git') + except: + print("Cloning Temporal from GitHub failed. Please install it manually:") + return + try: + os.chdir(temporal_path) + os.system('./make.sh') + print("Installed. Deleting build directory.") + shutil.rmtree(temporal_path, ignore_errors=True) + except: + print("Compiling Temporal failed. Please install it manually:") + return + print("==================================================") + print("TemporalLib successfully installed") \ No newline at end of file diff --git a/randonautentropy/rndo.py b/randonautentropy/rndo.py index d65f718..b8252d1 100644 --- a/randonautentropy/rndo.py +++ b/randonautentropy/rndo.py @@ -1,27 +1,3 @@ -# Copyright 2023 randogoth -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -""" -A Python interface to the Randonautica Quantum Random Numbers Server. - -""" - import requests try: @@ -34,7 +10,7 @@ from urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) VERSION = '1.0.0' -URL = 'https://api.qrng.rndo.it/api/json/' +URL = 'https://qrng.randonautica.com/api/json/' typeS = { 'int32' : 'randint32', 'hex16' : 'randhex', @@ -45,7 +21,7 @@ typeS = { DEVICE_ID = 'QWR70154' -def get(type='hex', length=1): +def get(length=10, type='hex16'): """Fetch data from the Randonautica Quantum Random Numbers JSON API""" if type not in typeS.keys(): raise Exception("type must be one of %s" % typeS.keys()) diff --git a/randonautentropy/temporal.py b/randonautentropy/temporal.py new file mode 100644 index 0000000..00cbe83 --- /dev/null +++ b/randonautentropy/temporal.py @@ -0,0 +1,14 @@ +import os +import shutil +from subprocess import check_output as exec +from .install import install + +def get(length=10, channel=0): + length *= 2 + module_path = os.path.abspath(os.path.dirname(__file__)) + temporal_path = os.path.abspath(f"{module_path}/temporal") + exe_path = f'{temporal_path}/result/{os.uname().sysname}/temporal' + if shutil.which('temporal') is None: + install() + temporal = exec(f'temporal hexdump {channel} {length}', shell=True) + return temporal[:-1].decode('UTF-8') \ No newline at end of file