File: test_save.py

package info (click to toggle)
python-libnacl 2.1.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 488 kB
  • sloc: python: 2,634; makefile: 149; sh: 3
file content (88 lines) | stat: -rw-r--r-- 3,102 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- coding: utf-8 -*-
# Import libnacl libs
import libnacl.dual
import libnacl.secret
import libnacl.sign
import libnacl.utils

# Import pythonlibs
import os
import stat
import unittest
import tempfile
import sys

class TestSave(unittest.TestCase):
    '''
    '''
    def test_save_load(self):
        msg = b'then leap out of the rabbit, taking the French by surprise'
        bob = libnacl.dual.DualSecret()
        alice = libnacl.dual.DualSecret()
        fh_, bob_path = tempfile.mkstemp()
        os.close(fh_)
        fh_, alice_path = tempfile.mkstemp()
        os.close(fh_)
        bob.save(bob_path)
        alice.save(alice_path)
        bob_box = libnacl.public.Box(bob, alice.pk)
        alice_box = libnacl.public.Box(alice, bob.pk)
        bob_enc = bob_box.encrypt(msg)
        alice_enc = alice_box.encrypt(msg)
        bob_load = libnacl.utils.load_key(bob_path)
        alice_load = libnacl.utils.load_key(alice_path)
        bob_load_box = libnacl.public.Box(bob_load, alice_load.pk)
        alice_load_box = libnacl.public.Box(alice_load, bob_load.pk)
        self.assertEqual(bob.sk, bob_load.sk)
        self.assertEqual(bob.pk, bob_load.pk)
        self.assertEqual(bob.vk, bob_load.vk)
        self.assertEqual(bob.seed, bob_load.seed)
        self.assertEqual(alice.sk, alice_load.sk)
        self.assertEqual(alice.pk, alice_load.pk)
        self.assertEqual(alice.vk, alice_load.vk)
        self.assertEqual(alice.seed, alice_load.seed)
        bob_dec = alice_load_box.decrypt(bob_enc)
        alice_dec = bob_load_box.decrypt(alice_enc)
        self.assertEqual(bob_dec, msg)
        self.assertEqual(alice_dec, msg)

        bob2 = libnacl.utils.load_key(bob_path)
        self.assertEqual(bob.sk, bob2.sk)
        self.assertEqual(bob.pk, bob2.pk)
        self.assertEqual(bob.vk, bob2.vk)

        os.remove(bob_path)
        os.remove(alice_path)

    def test_save_load_secret(self):
        msg = b'then leap out of the rabbit, taking the French by surprise'
        box = libnacl.secret.SecretBox()
        fh_, box_path = tempfile.mkstemp()
        os.close(fh_)
        box.save(box_path)
        lbox = libnacl.utils.load_key(box_path)
        ctxt = box.encrypt(msg)
        out_msg = lbox.decrypt(ctxt)
        self.assertEqual(msg, out_msg)

    def test_save_load_sign(self):
        msg = b'then leap out of the rabbit, taking the French by surprise'
        signer = libnacl.sign.Signer()
        fh_, sign_path = tempfile.mkstemp()
        os.close(fh_)
        signer.save(sign_path)
        signer_load = libnacl.utils.load_key(sign_path)
        signed1 = signer.sign(msg)
        signed2 = signer_load.sign(msg)
        self.assertEqual(signed1, signed2)
        os.remove(sign_path)

    def test_save_perms(self):
        bob = libnacl.dual.DualSecret()
        fh_, bob_path = tempfile.mkstemp()
        os.close(fh_)
        bob.save(bob_path)
        stats = os.stat(bob_path)
        expected_perms = 0o100600 if sys.platform != 'win32' else 0o100666
        self.assertEqual(stats[stat.ST_MODE], expected_perms)
        os.remove(bob_path)