Skip to content

Commit 384a053

Browse files
committed
Add tests for SSlib Signer
Signed-off-by: Martin Vrachev <[email protected]>
1 parent af02805 commit 384a053

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

tests/test_signer.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
<Program Name>
5+
test_signer.py
6+
7+
<Author>
8+
Martin Vrachev <[email protected]>
9+
10+
<Started>
11+
February, 04 2021
12+
13+
<Copyright>
14+
See LICENSE for licensing information.
15+
16+
<Purpose>
17+
Test cases for 'signer.py'.
18+
"""
19+
20+
import unittest
21+
import securesystemslib.formats
22+
import securesystemslib.keys as KEYS
23+
from securesystemslib.signer import SSlibSigner
24+
25+
26+
class TestSigners(unittest.TestCase):\
27+
28+
@classmethod
29+
def setUpClass(cls):
30+
cls.rsakey_dict = KEYS.generate_rsa_key()
31+
cls.ed25519key_dict = KEYS.generate_ed25519_key()
32+
cls.ecdsakey_dict = KEYS.generate_ecdsa_key()
33+
cls.DATA_STR = 'SOME DATA REQUIRING AUTHENTICITY.'
34+
cls.DATA = securesystemslib.formats.encode_canonical(cls.DATA_STR).encode(
35+
'utf-8')
36+
cls.FORMAT_ERROR_MSG = 'securesystemslib.exceptions.FormatError was raised!' + \
37+
' Check object\'s format.'
38+
39+
40+
def test_sslib_sign(self):
41+
# Test generation of RSA signatures.
42+
sslib_signer = SSlibSigner(self.rsakey_dict)
43+
rsa_sig_obj = sslib_signer.sign(self.DATA)
44+
45+
# Check format of output.
46+
self.assertEqual(None,
47+
securesystemslib.formats.SIGNATURE_SCHEMA.check_match(
48+
rsa_sig_obj.to_dict()),
49+
self.FORMAT_ERROR_MSG)
50+
51+
# Verify rsa signature
52+
verified = KEYS.verify_signature(self.rsakey_dict, rsa_sig_obj.to_dict(),
53+
self.DATA)
54+
self.assertTrue(verified, "Incorrect signature.")
55+
56+
# Test for invalid signature scheme.
57+
valid_scheme = self.rsakey_dict['scheme']
58+
self.rsakey_dict['scheme'] = 'invalid_scheme'
59+
sslib_signer.key_dict = self.rsakey_dict
60+
61+
self.assertRaises(securesystemslib.exceptions.UnsupportedAlgorithmError,
62+
sslib_signer.sign, self.DATA)
63+
self.rsakey_dict['scheme'] = valid_scheme
64+
65+
# Removing private key from 'rsakey_dict' - should raise a TypeError.
66+
private = self.rsakey_dict['keyval']['private']
67+
self.rsakey_dict['keyval']['private'] = ''
68+
sslib_signer.key_dict = self.rsakey_dict
69+
70+
self.assertRaises(ValueError, sslib_signer.sign, self.DATA)
71+
72+
# Supplying an incorrect number of arguments.
73+
self.assertRaises(TypeError, KEYS.create_signature)
74+
self.rsakey_dict['keyval']['private'] = private
75+
76+
# Test generation of ECDSA signatures.
77+
78+
sslib_signer.key_dict = self.ecdsakey_dict
79+
# Creating a signature for 'DATA'.
80+
ecdsa_sig = sslib_signer.sign(self.DATA)
81+
82+
# Check format of output.
83+
self.assertEqual(None,
84+
securesystemslib.formats.SIGNATURE_SCHEMA.check_match(
85+
ecdsa_sig.to_dict()),
86+
self.FORMAT_ERROR_MSG)
87+
88+
# Verify rsa signature
89+
verified = KEYS.verify_signature(self.ecdsakey_dict, ecdsa_sig.to_dict(),
90+
self.DATA)
91+
self.assertTrue(verified, "Incorrect signature.")
92+
93+
# Removing private key from 'ecdsakey_dict' - should raise a TypeError.
94+
private = self.ecdsakey_dict['keyval']['private']
95+
self.ecdsakey_dict['keyval']['private'] = ''
96+
97+
self.assertRaises(ValueError, sslib_signer.sign, self.DATA)
98+
99+
# Supplying an incorrect number of arguments.
100+
self.assertRaises(TypeError, sslib_signer.sign)
101+
self.ecdsakey_dict['keyval']['private'] = private
102+
103+
104+
# Run the unit tests.
105+
if __name__ == '__main__':
106+
unittest.main()

0 commit comments

Comments
 (0)