From 99ee63f8247a7c89ca1180838db1a4974812ed23 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 4 Aug 2018 12:59:18 +0300 Subject: Add: NonceGenerator --- qvisqve/noncegen.py | 29 +++++++++++++++++++++++++++++ qvisqve/noncegen_tests.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 qvisqve/noncegen.py create mode 100644 qvisqve/noncegen_tests.py diff --git a/qvisqve/noncegen.py b/qvisqve/noncegen.py new file mode 100644 index 0000000..295b7c8 --- /dev/null +++ b/qvisqve/noncegen.py @@ -0,0 +1,29 @@ +# Copyright (C) 2018 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +# Generate unique, hard-to-predict, single-use secure codes for +# nonces. These can be used to prevent replay attacks, and such. +# +# We use uuid4 as nonces. + + +import uuid + + +class NonceGenerator: + + def create_nonce(self): + return str(uuid.uuid4()) diff --git a/qvisqve/noncegen_tests.py b/qvisqve/noncegen_tests.py new file mode 100644 index 0000000..1a0cf74 --- /dev/null +++ b/qvisqve/noncegen_tests.py @@ -0,0 +1,34 @@ +# Copyright (C) 2018 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +import unittest + +import qvisqve + + +class NonceGeneratorTests(unittest.TestCase): + + def test_returns_a_string(self): + gen = qvisqve.NonceGenerator() + nonce = gen.create_nonce() + self.assertTrue(isinstance(nonce, str)) + + def test_returns_a_new_string_every_time(self): + gen = qvisqve.NonceGenerator() + nonce = gen.create_nonce() + for i in range(1000): + new = gen.create_nonce() + self.assertNotEqual(nonce, new) -- cgit v1.2.1