1 # Copyright (c) 2017-2018 Samsung Electronics Co., Ltd All Rights Reserved
3 # Contact: Lukasz Pawelczyk <l.pawelczyk@samsung.com>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License
18 import ctypes as _ctypes
20 import yaca.error as _err
24 class _Error(_enum.Enum):
25 __TIZEN_YACA_BASE = -0x01E30000
27 INVALID_PARAMETER = -22
29 INTERNAL = __TIZEN_YACA_BASE | 0x01
30 DATA_MISMATCH = __TIZEN_YACA_BASE | 0x02
31 INVALID_PASSWORD = __TIZEN_YACA_BASE | 0x03
34 def _errcheck(ret, func, arguments):
35 if ret == _Error.NONE.value:
37 elif ret == _Error.DATA_MISMATCH.value:
39 elif ret == _Error.INVALID_PARAMETER.value:
40 raise _err.InvalidParameterError(
41 'Invalid Parameter error returned from YACA')
42 elif ret == _Error.OUT_OF_MEMORY.value:
43 raise _err.OutOfMemoryError('Out Of Memory error returned from YACA')
44 elif ret == _Error.INTERNAL.value:
45 raise _err.InternalError('Internal error returned from YACA')
46 elif ret == _Error.INVALID_PASSWORD.value:
47 raise _err.InvalidPasswordError(
48 'Invalid Password error returned from YACA')
50 raise RuntimeError('Unknown error returned from YACA')
54 """Get C library and set argtypes"""
56 lib = _ctypes.CDLL("libyaca.so.0")
59 lib.yaca_initialize.argtypes = []
60 lib.yaca_initialize.errcheck = _errcheck
61 lib.yaca_cleanup.argtypes = []
62 lib.yaca_cleanup.restype = None
63 lib.yaca_malloc.argtypes = \
64 [_ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_void_p)]
65 lib.yaca_malloc.errcheck = _errcheck
66 lib.yaca_zalloc.argtypes = \
67 [_ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_void_p)]
68 lib.yaca_zalloc.errcheck = _errcheck
69 lib.yaca_realloc.argtypes = \
70 [_ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_void_p)]
71 lib.yaca_realloc.errcheck = _errcheck
72 lib.yaca_free.argtypes = [_ctypes.c_void_p]
73 lib.yaca_free.restype = None
74 lib.yaca_memcmp.argtypes = \
75 [_ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_char),
77 lib.yaca_memcmp.errcheck = _errcheck
78 lib.yaca_randomize_bytes.argtypes = \
79 [_ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t]
80 lib.yaca_randomize_bytes.errcheck = _errcheck
81 lib.yaca_context_set_property.argtypes = \
82 [_ctypes.c_void_p, _ctypes.c_int, _ctypes.c_void_p, _ctypes.c_size_t]
83 lib.yaca_context_set_property.errcheck = _errcheck
84 lib.yaca_context_get_property.argtypes = \
85 [_ctypes.c_void_p, _ctypes.c_int, _ctypes.POINTER(_ctypes.c_void_p),
86 _ctypes.POINTER(_ctypes.c_size_t)]
87 lib.yaca_context_get_property.errcheck = _errcheck
88 lib.yaca_context_get_output_length.argtypes = \
89 [_ctypes.c_void_p, _ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_size_t)]
90 lib.yaca_context_get_output_length.errcheck = _errcheck
91 lib.yaca_context_destroy.argtypes = [_ctypes.c_void_p]
92 lib.yaca_context_destroy.restype = None
95 lib.yaca_simple_encrypt.argtypes = \
96 [_ctypes.c_int, _ctypes.c_int, _ctypes.c_void_p, _ctypes.c_void_p,
97 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
98 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
99 _ctypes.POINTER(_ctypes.c_size_t)]
100 lib.yaca_simple_encrypt.errcheck = _errcheck
101 lib.yaca_simple_decrypt.argtypes = \
102 [_ctypes.c_int, _ctypes.c_int, _ctypes.c_void_p, _ctypes.c_void_p,
103 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
104 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
105 _ctypes.POINTER(_ctypes.c_size_t)]
106 lib.yaca_simple_decrypt.errcheck = _errcheck
107 lib.yaca_simple_calculate_digest.argtypes = \
108 [_ctypes.c_int, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
109 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
110 _ctypes.POINTER(_ctypes.c_size_t)]
111 lib.yaca_simple_calculate_digest.errcheck = _errcheck
112 lib.yaca_simple_calculate_signature.argtypes = \
113 [_ctypes.c_int, _ctypes.c_void_p,
114 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
115 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
116 _ctypes.POINTER(_ctypes.c_size_t)]
117 lib.yaca_simple_calculate_signature.errcheck = _errcheck
118 lib.yaca_simple_verify_signature.argtypes = \
119 [_ctypes.c_int, _ctypes.c_void_p,
120 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
121 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t]
122 lib.yaca_simple_verify_signature.errcheck = _errcheck
123 lib.yaca_simple_calculate_hmac.argtypes = \
124 [_ctypes.c_int, _ctypes.c_void_p,
125 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
126 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
127 _ctypes.POINTER(_ctypes.c_size_t)]
128 lib.yaca_simple_calculate_hmac.errcheck = _errcheck
129 lib.yaca_simple_calculate_cmac.argtypes = \
130 [_ctypes.c_int, _ctypes.c_void_p,
131 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
132 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
133 _ctypes.POINTER(_ctypes.c_size_t)]
134 lib.yaca_simple_calculate_cmac.errcheck = _errcheck
137 lib.yaca_key_get_type.argtypes = \
138 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_int)]
139 lib.yaca_key_get_type.errcheck = _errcheck
140 lib.yaca_key_get_bit_length.argtypes = \
141 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_size_t)]
142 lib.yaca_key_get_bit_length.errcheck = _errcheck
143 lib.yaca_key_import.argtypes = \
144 [_ctypes.c_int, _ctypes.c_char_p,
145 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
146 _ctypes.POINTER(_ctypes.c_void_p)]
147 lib.yaca_key_import.errcheck = _errcheck
148 lib.yaca_key_export.argtypes = \
149 [_ctypes.c_void_p, _ctypes.c_int, _ctypes.c_int, _ctypes.c_char_p,
150 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
151 _ctypes.POINTER(_ctypes.c_size_t)]
152 lib.yaca_key_export.errcheck = _errcheck
153 lib.yaca_key_generate.argtypes = \
154 [_ctypes.c_void_p, _ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_void_p)]
155 lib.yaca_key_generate.errcheck = _errcheck
156 lib.yaca_key_generate_from_parameters.argtypes = \
157 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_void_p)]
158 lib.yaca_key_generate_from_parameters.errcheck = _errcheck
159 lib.yaca_key_extract_public.argtypes = \
160 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_void_p)]
161 lib.yaca_key_extract_public.errcheck = _errcheck
162 lib.yaca_key_extract_parameters.argtypes = \
163 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_void_p)]
164 lib.yaca_key_extract_parameters.errcheck = _errcheck
165 lib.yaca_key_derive_dh.argtypes = \
166 [_ctypes.c_void_p, _ctypes.c_void_p,
167 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
168 _ctypes.POINTER(_ctypes.c_size_t)]
169 lib.yaca_key_derive_dh.errcheck = _errcheck
170 lib.yaca_key_derive_kdf.argtypes = \
171 [_ctypes.c_int, _ctypes.c_int,
172 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
173 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
174 _ctypes.c_size_t, _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char))]
175 lib.yaca_key_derive_kdf.errcheck = _errcheck
176 lib.yaca_key_derive_pbkdf2.argtypes = \
177 [_ctypes.c_char_p, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
178 _ctypes.c_size_t, _ctypes.c_int,
179 _ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_void_p)]
180 lib.yaca_key_derive_pbkdf2.errcheck = _errcheck
181 lib.yaca_key_destroy.argtypes = [_ctypes.c_void_p]
182 lib.yaca_key_destroy.restype = None
185 lib.yaca_digest_initialize.argtypes = \
186 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int]
187 lib.yaca_digest_initialize.errcheck = _errcheck
188 lib.yaca_digest_update.argtypes = \
189 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t]
190 lib.yaca_digest_update.errcheck = _errcheck
191 lib.yaca_digest_finalize.argtypes = \
193 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
194 lib.yaca_digest_finalize.errcheck = _errcheck
197 lib.yaca_encrypt_get_iv_bit_length.argtypes = \
198 [_ctypes.c_int, _ctypes.c_int, _ctypes.c_size_t,
199 _ctypes.POINTER(_ctypes.c_size_t)]
200 lib.yaca_encrypt_get_iv_bit_length.errcheck = _errcheck
201 lib.yaca_encrypt_initialize.argtypes = \
202 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int, _ctypes.c_int,
203 _ctypes.c_void_p, _ctypes.c_void_p]
204 lib.yaca_encrypt_initialize.errcheck = _errcheck
205 lib.yaca_encrypt_update.argtypes = \
207 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
208 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
209 lib.yaca_encrypt_update.errcheck = _errcheck
210 lib.yaca_encrypt_finalize.argtypes = \
212 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
213 lib.yaca_encrypt_finalize.errcheck = _errcheck
214 lib.yaca_decrypt_initialize.argtypes = \
215 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int, _ctypes.c_int,
216 _ctypes.c_void_p, _ctypes.c_void_p]
217 lib.yaca_decrypt_initialize.errcheck = _errcheck
218 lib.yaca_decrypt_update.argtypes = \
220 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
221 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
222 lib.yaca_decrypt_update.errcheck = _errcheck
223 lib.yaca_decrypt_finalize.argtypes = \
225 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
226 lib.yaca_decrypt_finalize.errcheck = _errcheck
229 lib.yaca_sign_initialize.argtypes = \
230 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int, _ctypes.c_void_p]
231 lib.yaca_sign_initialize.errcheck = _errcheck
232 lib.yaca_sign_initialize_hmac.argtypes = \
233 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int, _ctypes.c_void_p]
234 lib.yaca_sign_initialize_hmac.errcheck = _errcheck
235 lib.yaca_sign_initialize_cmac.argtypes = \
236 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int, _ctypes.c_void_p]
237 lib.yaca_sign_initialize_cmac.errcheck = _errcheck
238 lib.yaca_sign_update.argtypes = \
239 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t]
240 lib.yaca_sign_update.errcheck = _errcheck
241 lib.yaca_sign_finalize.argtypes = \
243 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
244 lib.yaca_sign_finalize.errcheck = _errcheck
245 lib.yaca_verify_initialize.argtypes = \
246 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_int, _ctypes.c_void_p]
247 lib.yaca_verify_initialize.errcheck = _errcheck
248 lib.yaca_verify_update.argtypes = \
249 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t]
250 lib.yaca_verify_update.errcheck = _errcheck
251 lib.yaca_verify_finalize.argtypes = \
252 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t]
253 lib.yaca_verify_finalize.errcheck = _errcheck
256 lib.yaca_seal_initialize.argtypes = \
257 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_void_p, _ctypes.c_int,
258 _ctypes.c_int, _ctypes.c_size_t, _ctypes.POINTER(_ctypes.c_void_p),
259 _ctypes.POINTER(_ctypes.c_void_p)]
260 lib.yaca_seal_initialize.errcheck = _errcheck
261 lib.yaca_seal_update.argtypes = \
262 [_ctypes.c_void_p, _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
263 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
264 lib.yaca_seal_update.errcheck = _errcheck
265 lib.yaca_seal_finalize.argtypes = \
267 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
268 lib.yaca_seal_finalize.errcheck = _errcheck
269 lib.yaca_open_initialize.argtypes = \
270 [_ctypes.POINTER(_ctypes.c_void_p), _ctypes.c_void_p, _ctypes.c_int,
271 _ctypes.c_int, _ctypes.c_size_t, _ctypes.c_void_p, _ctypes.c_void_p]
272 lib.yaca_open_initialize.errcheck = _errcheck
273 lib.yaca_open_update.argtypes = \
275 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
276 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
277 lib.yaca_open_update.errcheck = _errcheck
278 lib.yaca_open_finalize.argtypes = \
280 _ctypes.POINTER(_ctypes.c_char), _ctypes.POINTER(_ctypes.c_size_t)]
281 lib.yaca_open_finalize.errcheck = _errcheck
285 [_ctypes.c_int, _ctypes.c_void_p,
286 _ctypes.POINTER(_ctypes.c_char), _ctypes.c_size_t,
287 _ctypes.POINTER(_ctypes.POINTER(_ctypes.c_char)),
288 _ctypes.POINTER(_ctypes.c_size_t)]
289 lib.yaca_rsa_public_encrypt.argtypes = rsa_argtypes
290 lib.yaca_rsa_public_encrypt.errcheck = _errcheck
291 lib.yaca_rsa_private_decrypt.argtypes = rsa_argtypes
292 lib.yaca_rsa_private_decrypt.errcheck = _errcheck
293 lib.yaca_rsa_private_encrypt.argtypes = rsa_argtypes
294 lib.yaca_rsa_private_encrypt.errcheck = _errcheck
295 lib.yaca_rsa_public_decrypt.argtypes = rsa_argtypes
296 lib.yaca_rsa_public_decrypt.errcheck = _errcheck