diff options
-rw-r--r-- | qvisqve/noncegen.py | 29 | ||||
-rw-r--r-- | qvisqve/noncegen_tests.py | 34 |
2 files changed, 63 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. + + +# 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 <http://www.gnu.org/licenses/>. + + +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) |