3
3
import json
4
4
import unittest
5
5
6
- from fingerprint_pro_server_api_sdk import EventResponse
7
- from fingerprint_pro_server_api_sdk .sealed import DecryptionAlgorithm , DecryptionKey , unseal_events_response , \
8
- UnsealError , UnsealAggregateError
9
-
6
+ from fingerprint_pro_server_api_sdk import ApiClientDeserializer , DecryptionAlgorithm , DecryptionKey , \
7
+ unseal_event_response , UnsealError , UnsealAggregateError , EventResponse , ProductsResponse , \
8
+ ProductsResponseIdentification , BrowserDetails
10
9
11
10
class TestSealed (unittest .TestCase ):
12
11
valid_key = base64 .b64decode ('p2PA7MGy5tx56cnyJaFZMr96BCFwZeHjZV2EqMvTq53=' )
13
12
invalid_key = base64 .b64decode ('a2PA7MGy5tx56cnyJaFZMr96BCFwZeHjZV2EqMvTq53=' )
14
13
15
14
def test_unseal_aes256gcm (self ):
16
15
with io .open ("./test/mocks/sealed_result.json" , 'r' , encoding = 'utf-8' ) as f :
17
- expected_result = EventResponse (json .load (f )[ 'products' ] )
16
+ expected_result = ApiClientDeserializer . deserialize (json .load (f ), 'EventResponse' )
18
17
19
18
sealed_data = base64 .b64decode (
20
19
'noXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==' )
21
20
22
- result = unseal_events_response (sealed_data , [
21
+ result = unseal_event_response (sealed_data , [
23
22
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
24
23
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
25
24
])
26
25
27
26
self .assertEqual (result , expected_result )
27
+ self .assertIsInstance (result , EventResponse )
28
+ self .assertIsInstance (result .products , ProductsResponse )
29
+ self .assertIsInstance (result .products .identification , ProductsResponseIdentification )
30
+ self .assertIsInstance (result .products .identification .data .browser_details , BrowserDetails )
28
31
29
32
def test_unseal_invalid_header (self ):
30
33
sealed_data = base64 .b64decode (
31
34
'xzXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==' )
32
35
33
- with self .assertRaisesRegex (Exception , "Invalid sealed data header" ):
34
- unseal_events_response (sealed_data , [
36
+ with self .assertRaisesRegex (ValueError , "Invalid sealed data header" ):
37
+ unseal_event_response (sealed_data , [
35
38
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
36
39
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
37
40
])
@@ -40,8 +43,8 @@ def test_unseal_invalid_algorithm(self):
40
43
sealed_data = base64 .b64decode (
41
44
'noXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==' )
42
45
43
- with self .assertRaisesRegex (Exception , "Unsupported decryption algorithm: invalid" ):
44
- unseal_events_response (sealed_data , [
46
+ with self .assertRaisesRegex (ValueError , "Unsupported decryption algorithm: invalid" ):
47
+ unseal_event_response (sealed_data , [
45
48
DecryptionKey (self .invalid_key , 'invalid' ),
46
49
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
47
50
])
@@ -51,8 +54,8 @@ def test_unseal_invalid_data(self):
51
54
# "{\"invalid\":true}"
52
55
'noXc7VOpBstjjcavDKSKr4HTavt4mdq8h6NC32T0hUtw9S0jXT8lPjZiWL8SyHxmrF3uTGqO+g==' )
53
56
54
- with self .assertRaisesRegex (Exception , "Sealed data is not valid events response" ):
55
- unseal_events_response (sealed_data , [
57
+ with self .assertRaisesRegex (ValueError , "Sealed data is not valid event response" ):
58
+ unseal_event_response (sealed_data , [
56
59
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
57
60
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
58
61
])
@@ -61,8 +64,8 @@ def test_unseal_not_compressed_data(self):
61
64
sealed_data = base64 .b64decode (
62
65
'noXc7dtuk0smGE+ZbaoXzrp6Rq8ySxLepejTsu7+jUXlPhV1w+WuHx9gbPhaENJnOQo8BcGmsaRhL5k2NVj+DRNzYO9cQD7wHxmXKCyTbl/dvSYOMoHziUZ2VbQ7tmaorFny26v8jROr/UBGfvPE0dLKC36IN9ZlJ3X0NZJO8SY+8bCr4mTrkVZsv/hpvZp+OjC4h7e5vxcpmnBWXzxfaO79Lq3aMRIEf9XfK7/bVIptHaEqtPKCTwl9rz1KUpUUNQSHTPM0NlqJe9bjYf5mr1uYvWHhcJoXSyRyVMxIv/quRiw3SKJzAMOTBiAvFICpWuRFa+T/xIMHK0g96w/IMQo0jdY1E067ZEvBUOBmsJnGJg1LllS3rbJVe+E2ClFNL8SzFphyvtlcfvYB+SVSD4bzI0w/YCldv5Sq42BFt5bn4n4aE5A6658DYsfSRYWqP6OpqPJx96cY34W7H1t/ZG0ulez6zF5NvWhc1HDQ1gMtXd+K/ogt1n+FyFtn8xzvtSGkmrc2jJgYNI5Pd0Z0ent73z0MKbJx9v2ta/emPEzPr3cndN5amdr6TmRkDU4bq0vyhAh87DJrAnJQLdrvYLddnrr8xTdeXxj1i1Yug6SGncPh9sbTYkdOfuamPAYOuiJVBAMcfYsYEiQndZe8mOQ4bpCr+hxAAqixhZ16pQ8CeUwa247+D2scRymLB8qJXlaERuFZtWGVAZ8VP/GS/9EXjrzpjGX9vlrIPeJP8fh2S5QPzw55cGNJ7JfAdOyManXnoEw2/QzDhSZQARVl+akFgSO0Y13YmbiL7H6HcKWGcJ2ipDKIaj2fJ7GE0Vzyt+CBEezSQR99Igd8x3p2JtvsVKp35iLPksjS1VqtSCTbuIRUlINlfQHNjeQiE/B/61jo3Mf7SmjYjqtvXt5e9RKb+CQku2qH4ZU8xN3DSg+4mLom3BgKBkm/MoyGBpMK41c96d2tRp3tp4hV0F6ac02Crg7P2lw8IUct+i2VJ8VUjcbRfTIPQs0HjNjM6/gLfLCkWOHYrlFjwusXWQCJz91Kq+hVxj7M9LtplPO4AUq6RUMNhlPGUmyOI2tcUMrjq9vMLXGlfdkH185zM4Mk+O7DRLC8683lXZFZvcBEmxr855PqLLH/9SpYKHBoGRatDRdQe3oRp6gHS0jpQ1SW/si4kvLKiUNjiBExvbQVOUV7/VFXvG1RpM9wbzSoOd40gg7ZzD/72QshUC/25DkM/Pm7RBzwtjgmnRKjT+mROeC/7VQLoz3amv09O8Mvbt+h/lX5+51Q834F7NgIGagbB20WtWcMtrmKrvCEZlaoiZrmYVSbi1RfknRK7CTPJkopw9IjO7Ut2EhKZ+jL4rwk6TlVm6EC6Kuj7KNqp6wB/UNe9eM2Eym/aiHAcja8XN4YQhSIuJD2Wxb0n3LkKnAjK1/GY65c8K6rZsVYQ0MQL1j4lMl0UZPjG/vzKyetIsVDyXc4J9ZhOEMYnt/LaxEeSt4EMJGBA9wpTmz33X4h3ij0Y3DY/rH7lrEScUknw20swTZRm5T6q1bnimj7M1OiOkebdI09MZ0nyaTWRHdB7B52C/moh89Q7qa2Fulp5h8Us1FYRkWBLt37a5rGI1IfVeP38KaPbagND+XzWpNqX4HVrAVPLQVK5EwUvGamED3ooJ0FMieTc0IH0N+IeUYG7Q8XmrRVBcw32W8pEfYLO9L71An/J0jQZCIP8DuQnUG0mOvunOuloBGvP/9LvkBlkamh68F0a5f5ny1jloyIFJhRh5dt2SBlbsXS9AKqUwARYSSsA9Ao4WJWOZMyjp8A+qIBAfW65MdhhUDKYMBgIAbMCc3uiptzElQQopE5TT5xIhwfYxa503jVzQbz1Q==' )
63
66
64
- with self .assertRaisesRegex (Exception , "Unable to decrypt sealed data" ) as context :
65
- unseal_events_response (sealed_data , [
67
+ with self .assertRaisesRegex (UnsealAggregateError , "Unable to decrypt sealed data" ) as context :
68
+ unseal_event_response (sealed_data , [
66
69
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
67
70
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
68
71
])
@@ -76,26 +79,26 @@ def test_unseal_all_keys_invalid(self):
76
79
sealed_data = base64 .b64decode (
77
80
'noXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==' )
78
81
79
- with self .assertRaisesRegex (Exception , 'Unable to decrypt sealed data' ):
80
- unseal_events_response (sealed_data , [
82
+ with self .assertRaisesRegex (UnsealAggregateError , 'Unable to decrypt sealed data' ):
83
+ unseal_event_response (sealed_data , [
81
84
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
82
85
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
83
86
])
84
87
85
88
def test_unseal_empty_data (self ):
86
89
sealed_data = bytearray (b'' )
87
90
88
- with self .assertRaisesRegex (Exception , 'Invalid sealed data header' ):
89
- unseal_events_response (sealed_data , [
91
+ with self .assertRaisesRegex (ValueError , 'Invalid sealed data header' ):
92
+ unseal_event_response (sealed_data , [
90
93
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
91
94
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
92
95
])
93
96
94
97
def test_unseal_invalid_nonce (self ):
95
98
sealed_data = bytes ([0x9E , 0x85 , 0xDC , 0xED , 0xAA , 0xBB , 0xCC ])
96
99
97
- with self .assertRaisesRegex (Exception , 'Unable to decrypt sealed data' ) as context :
98
- unseal_events_response (sealed_data , [
100
+ with self .assertRaisesRegex (UnsealAggregateError , 'Unable to decrypt sealed data' ) as context :
101
+ unseal_event_response (sealed_data , [
99
102
DecryptionKey (self .invalid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
100
103
DecryptionKey (self .valid_key , DecryptionAlgorithm ['Aes256Gcm' ]),
101
104
])
0 commit comments