psa_crypto_sys/
shim.rs

1// Copyright 2020 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3
4//! The shim module is needed to expose from this crate the methods or constants that are not
5//! generated by bindgen, such as #define or static inline functions.
6
7use super::psa_crypto_binding::{
8    self, psa_algorithm_t, psa_cipher_operation_t, psa_dh_family_t, psa_ecc_family_t,
9    psa_key_attributes_t, psa_key_derivation_operation_t, psa_key_derivation_step_t, psa_key_id_t,
10    psa_key_lifetime_t, psa_key_type_t, psa_key_usage_t,
11};
12
13pub const PSA_KEY_DERIVATION_INPUT_SECRET: psa_key_derivation_step_t =
14    psa_crypto_binding::shim_PSA_KEY_DERIVATION_INPUT_SECRET;
15pub const PSA_KEY_DERIVATION_INPUT_LABEL: psa_key_derivation_step_t =
16    psa_crypto_binding::shim_PSA_KEY_DERIVATION_INPUT_LABEL;
17pub const PSA_KEY_DERIVATION_INPUT_SALT: psa_key_derivation_step_t =
18    psa_crypto_binding::shim_PSA_KEY_DERIVATION_INPUT_SALT;
19pub const PSA_KEY_DERIVATION_INPUT_INFO: psa_key_derivation_step_t =
20    psa_crypto_binding::shim_PSA_KEY_DERIVATION_INPUT_INFO;
21pub const PSA_KEY_DERIVATION_INPUT_SEED: psa_key_derivation_step_t =
22    psa_crypto_binding::shim_PSA_KEY_DERIVATION_INPUT_SEED;
23
24pub unsafe fn psa_get_key_bits(attributes: *const psa_key_attributes_t) -> usize {
25    psa_crypto_binding::shim_get_key_bits(attributes)
26}
27
28pub unsafe fn psa_get_key_type(attributes: *const psa_key_attributes_t) -> psa_key_type_t {
29    psa_crypto_binding::shim_get_key_type(attributes)
30}
31
32pub unsafe fn psa_get_key_lifetime(attributes: *const psa_key_attributes_t) -> psa_key_lifetime_t {
33    psa_crypto_binding::shim_get_key_lifetime(attributes)
34}
35
36pub unsafe fn psa_get_key_algorithm(attributes: *const psa_key_attributes_t) -> psa_algorithm_t {
37    psa_crypto_binding::shim_get_key_algorithm(attributes)
38}
39
40pub unsafe fn psa_get_key_usage_flags(attributes: *const psa_key_attributes_t) -> psa_key_usage_t {
41    psa_crypto_binding::shim_get_key_usage_flags(attributes)
42}
43
44pub unsafe fn psa_key_attributes_init() -> psa_key_attributes_t {
45    psa_crypto_binding::shim_key_attributes_init()
46}
47
48pub unsafe fn psa_cipher_operation_init() -> psa_cipher_operation_t {
49    psa_crypto_binding::shim_cipher_operation_init()
50}
51
52pub fn psa_key_derivation_operation_init() -> psa_key_derivation_operation_t {
53    unsafe { psa_crypto_binding::shim_key_derivation_operation_init() }
54}
55
56pub unsafe fn psa_set_key_algorithm(attributes: *mut psa_key_attributes_t, alg: psa_algorithm_t) {
57    psa_crypto_binding::shim_set_key_algorithm(attributes, alg);
58}
59
60pub unsafe fn psa_set_key_bits(attributes: *mut psa_key_attributes_t, bits: usize) {
61    psa_crypto_binding::shim_set_key_bits(attributes, bits);
62}
63
64pub unsafe fn psa_set_key_id(attributes: *mut psa_key_attributes_t, id: psa_key_id_t) {
65    psa_crypto_binding::shim_set_key_id(attributes, id);
66}
67
68pub unsafe fn psa_set_key_lifetime(
69    attributes: *mut psa_key_attributes_t,
70    lifetime: psa_key_lifetime_t,
71) {
72    psa_crypto_binding::shim_set_key_lifetime(attributes, lifetime);
73}
74
75pub unsafe fn psa_set_key_type(attributes: *mut psa_key_attributes_t, type_: psa_key_type_t) {
76    psa_crypto_binding::shim_set_key_type(attributes, type_);
77}
78
79pub unsafe fn psa_set_key_usage_flags(
80    attributes: *mut psa_key_attributes_t,
81    usage_flags: psa_key_usage_t,
82) {
83    psa_crypto_binding::shim_set_key_usage_flags(attributes, usage_flags);
84}
85
86pub unsafe fn psa_get_key_id(attributes: *const psa_key_attributes_t) -> psa_key_id_t {
87    psa_crypto_binding::shim_get_key_id(attributes)
88}
89
90pub fn PSA_ALG_IS_HASH(alg: psa_algorithm_t) -> bool {
91    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_HASH(alg) == 1 }
92}
93
94pub fn PSA_ALG_IS_MAC(alg: psa_algorithm_t) -> bool {
95    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_MAC(alg) == 1 }
96}
97
98pub fn PSA_ALG_IS_HMAC(alg: psa_algorithm_t) -> bool {
99    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_HMAC(alg) == 1 }
100}
101
102pub fn PSA_ALG_IS_BLOCK_CIPHER_MAC(alg: psa_algorithm_t) -> bool {
103    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) == 1 }
104}
105
106pub fn PSA_ALG_IS_CIPHER(alg: psa_algorithm_t) -> bool {
107    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_CIPHER(alg) == 1 }
108}
109
110pub fn PSA_ALG_IS_AEAD(alg: psa_algorithm_t) -> bool {
111    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_AEAD(alg) == 1 }
112}
113
114pub fn PSA_ALG_IS_SIGN(alg: psa_algorithm_t) -> bool {
115    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_SIGN(alg) == 1 }
116}
117
118pub fn PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg: psa_algorithm_t) -> bool {
119    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg) == 1 }
120}
121
122pub unsafe fn PSA_ALG_IS_RSA_OAEP(alg: psa_algorithm_t) -> bool {
123    psa_crypto_binding::shim_PSA_ALG_IS_RSA_OAEP(alg) == 1
124}
125
126pub fn PSA_ALG_IS_KEY_AGREEMENT(alg: psa_algorithm_t) -> bool {
127    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_KEY_AGREEMENT(alg) == 1 }
128}
129
130pub fn PSA_ALG_IS_RAW_KEY_AGREEMENT(alg: psa_algorithm_t) -> bool {
131    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_RAW_KEY_AGREEMENT(alg) == 1 }
132}
133
134pub fn PSA_ALG_IS_FFDH(alg: psa_algorithm_t) -> bool {
135    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_FFDH(alg) == 1 }
136}
137
138pub fn PSA_ALG_IS_ECDH(alg: psa_algorithm_t) -> bool {
139    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_ECDH(alg) == 1 }
140}
141
142pub fn PSA_ALG_IS_KEY_DERIVATION(alg: psa_algorithm_t) -> bool {
143    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_KEY_DERIVATION(alg) == 1 }
144}
145
146pub fn PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg: psa_algorithm_t) -> bool {
147    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) == 1 }
148}
149
150pub fn PSA_ALG_IS_RSA_PSS(alg: psa_algorithm_t) -> bool {
151    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_RSA_PSS(alg) == 1 }
152}
153
154pub fn PSA_ALG_IS_ECDSA(alg: psa_algorithm_t) -> bool {
155    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_ECDSA(alg) == 1 }
156}
157
158pub fn PSA_ALG_IS_DETERMINISTIC_ECDSA(alg: psa_algorithm_t) -> bool {
159    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_DETERMINISTIC_ECDSA(alg) == 1 }
160}
161
162pub fn PSA_ALG_IS_HKDF(alg: psa_algorithm_t) -> bool {
163    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_HKDF(alg) == 1 }
164}
165
166pub fn PSA_ALG_IS_TLS12_PRF(alg: psa_algorithm_t) -> bool {
167    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_TLS12_PRF(alg) == 1 }
168}
169
170pub fn PSA_ALG_IS_TLS12_PSK_TO_MS(alg: psa_algorithm_t) -> bool {
171    unsafe { psa_crypto_binding::shim_PSA_ALG_IS_TLS12_PSK_TO_MS(alg) == 1 }
172}
173
174pub fn PSA_ALG_SIGN_GET_HASH(sign_alg: psa_algorithm_t) -> psa_algorithm_t {
175    unsafe { psa_crypto_binding::shim_PSA_ALG_SIGN_GET_HASH(sign_alg) }
176}
177
178pub fn PSA_ALG_RSA_OAEP_GET_HASH(rsa_oaep_alg: psa_algorithm_t) -> psa_algorithm_t {
179    unsafe { psa_crypto_binding::shim_PSA_ALG_RSA_OAEP_GET_HASH(rsa_oaep_alg) }
180}
181
182pub fn PSA_ALG_HMAC_GET_HASH(hmac_alg: psa_algorithm_t) -> psa_algorithm_t {
183    unsafe { psa_crypto_binding::shim_PSA_ALG_HMAC_GET_HASH(hmac_alg) }
184}
185
186pub fn PSA_ALG_HKDF_GET_HASH(hkdf_alg: psa_algorithm_t) -> psa_algorithm_t {
187    unsafe { psa_crypto_binding::shim_PSA_ALG_HKDF_GET_HASH(hkdf_alg) }
188}
189
190pub fn PSA_ALG_TLS12_PRF_GET_HASH(tls12_prf_alg: psa_algorithm_t) -> psa_algorithm_t {
191    unsafe { psa_crypto_binding::shim_PSA_ALG_TLS12_PRF_GET_HASH(tls12_prf_alg) }
192}
193
194pub fn PSA_ALG_TLS12_PSK_TO_MS_GET_HASH(tls12_psk_to_ms_alg: psa_algorithm_t) -> psa_algorithm_t {
195    unsafe { psa_crypto_binding::shim_PSA_ALG_TLS12_PSK_TO_MS_GET_HASH(tls12_psk_to_ms_alg) }
196}
197
198pub unsafe fn PSA_ALG_KEY_AGREEMENT_GET_BASE(alg: psa_algorithm_t) -> psa_algorithm_t {
199    psa_crypto_binding::shim_PSA_ALG_KEY_AGREEMENT_GET_BASE(alg)
200}
201
202pub unsafe fn PSA_ALG_KEY_AGREEMENT_GET_KDF(alg: psa_algorithm_t) -> psa_algorithm_t {
203    psa_crypto_binding::shim_PSA_ALG_KEY_AGREEMENT_GET_KDF(alg)
204}
205
206pub fn PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
207    unsafe { psa_crypto_binding::shim_PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg) }
208}
209
210pub fn PSA_ALG_RSA_PSS(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
211    unsafe { psa_crypto_binding::shim_PSA_ALG_RSA_PSS(hash_alg) }
212}
213
214pub fn PSA_ALG_ECDSA(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
215    unsafe { psa_crypto_binding::shim_PSA_ALG_ECDSA(hash_alg) }
216}
217
218pub fn PSA_ALG_DETERMINISTIC_ECDSA(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
219    unsafe { psa_crypto_binding::shim_PSA_ALG_DETERMINISTIC_ECDSA(hash_alg) }
220}
221
222pub unsafe fn PSA_ALG_RSA_OAEP(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
223    psa_crypto_binding::shim_PSA_ALG_RSA_OAEP(hash_alg)
224}
225
226pub unsafe fn PSA_ALG_HMAC(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
227    psa_crypto_binding::shim_PSA_ALG_HMAC(hash_alg)
228}
229
230pub unsafe fn PSA_ALG_TRUNCATED_MAC(
231    mac_alg: psa_algorithm_t,
232    mac_length: usize,
233) -> psa_algorithm_t {
234    psa_crypto_binding::shim_PSA_ALG_TRUNCATED_MAC(mac_alg, mac_length)
235}
236
237pub unsafe fn PSA_ALG_FULL_LENGTH_MAC(mac_alg: psa_algorithm_t) -> psa_algorithm_t {
238    psa_crypto_binding::shim_PSA_ALG_FULL_LENGTH_MAC(mac_alg)
239}
240
241pub unsafe fn PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(aead_alg: psa_algorithm_t) -> psa_algorithm_t {
242    psa_crypto_binding::shim_PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(aead_alg)
243}
244
245pub unsafe fn PSA_ALG_AEAD_WITH_SHORTENED_TAG(
246    aead_alg: psa_algorithm_t,
247    tag_length: usize,
248) -> psa_algorithm_t {
249    psa_crypto_binding::shim_PSA_ALG_AEAD_WITH_SHORTENED_TAG(aead_alg, tag_length)
250}
251
252pub unsafe fn PSA_ALG_HKDF(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
253    psa_crypto_binding::shim_PSA_ALG_HKDF(hash_alg)
254}
255
256pub unsafe fn PSA_ALG_TLS12_PRF(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
257    psa_crypto_binding::shim_PSA_ALG_TLS12_PRF(hash_alg)
258}
259
260pub unsafe fn PSA_ALG_TLS12_PSK_TO_MS(hash_alg: psa_algorithm_t) -> psa_algorithm_t {
261    psa_crypto_binding::shim_PSA_ALG_TLS12_PSK_TO_MS(hash_alg)
262}
263
264pub unsafe fn PSA_ALG_KEY_AGREEMENT(
265    raw_key_agreement: psa_algorithm_t,
266    key_derivation: psa_algorithm_t,
267) -> psa_algorithm_t {
268    psa_crypto_binding::shim_PSA_ALG_KEY_AGREEMENT(raw_key_agreement, key_derivation)
269}
270
271pub fn PSA_KEY_TYPE_IS_ECC_KEY_PAIR(key_type: psa_key_type_t) -> bool {
272    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_IS_ECC_KEY_PAIR(key_type) == 1 }
273}
274
275pub fn PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(key_type: psa_key_type_t) -> bool {
276    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(key_type) == 1 }
277}
278
279pub fn PSA_KEY_TYPE_IS_DH_KEY_PAIR(key_type: psa_key_type_t) -> bool {
280    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_IS_DH_KEY_PAIR(key_type) == 1 }
281}
282
283pub fn PSA_KEY_TYPE_IS_DH_PUBLIC_KEY(key_type: psa_key_type_t) -> bool {
284    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_IS_DH_PUBLIC_KEY(key_type) == 1 }
285}
286
287pub fn PSA_KEY_TYPE_ECC_GET_FAMILY(key_type: psa_key_type_t) -> psa_ecc_family_t {
288    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_ECC_GET_FAMILY(key_type) }
289}
290
291pub fn PSA_KEY_TYPE_DH_GET_FAMILY(key_type: psa_key_type_t) -> psa_dh_family_t {
292    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_DH_GET_FAMILY(key_type) }
293}
294
295pub fn PSA_KEY_TYPE_ECC_KEY_PAIR(curve: psa_ecc_family_t) -> psa_key_type_t {
296    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_ECC_KEY_PAIR(curve) }
297}
298
299pub fn PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve: psa_ecc_family_t) -> psa_key_type_t {
300    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve) }
301}
302
303pub fn PSA_KEY_TYPE_DH_KEY_PAIR(group: psa_dh_family_t) -> psa_key_type_t {
304    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_DH_KEY_PAIR(group) }
305}
306
307pub fn PSA_KEY_TYPE_DH_PUBLIC_KEY(group: psa_dh_family_t) -> psa_key_type_t {
308    unsafe { psa_crypto_binding::shim_PSA_KEY_TYPE_DH_PUBLIC_KEY(group) }
309}
310
311pub unsafe fn PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(key_type: psa_key_type_t) -> psa_key_type_t {
312    psa_crypto_binding::shim_PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(key_type)
313}
314
315pub unsafe fn PSA_SIGN_OUTPUT_SIZE(
316    key_type: psa_key_type_t,
317    key_bits: usize,
318    alg: psa_algorithm_t,
319) -> usize {
320    psa_crypto_binding::shim_PSA_SIGN_OUTPUT_SIZE(key_type, key_bits, alg)
321}
322
323pub unsafe fn PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(
324    key_type: psa_key_type_t,
325    key_bits: usize,
326    alg: psa_algorithm_t,
327) -> usize {
328    psa_crypto_binding::shim_PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg)
329}
330
331pub unsafe fn PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(
332    key_type: psa_key_type_t,
333    key_bits: usize,
334    alg: psa_algorithm_t,
335) -> usize {
336    psa_crypto_binding::shim_PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg)
337}
338
339pub unsafe fn PSA_EXPORT_KEY_OUTPUT_SIZE(key_type: psa_key_type_t, key_bits: usize) -> usize {
340    psa_crypto_binding::shim_PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits)
341}
342
343pub fn PSA_HASH_LENGTH(alg: psa_algorithm_t) -> usize {
344    unsafe { psa_crypto_binding::shim_PSA_HASH_LENGTH(alg) }
345}
346
347pub unsafe fn PSA_MAC_LENGTH(
348    key_type: psa_key_type_t,
349    key_bits: usize,
350    alg: psa_algorithm_t,
351) -> usize {
352    psa_crypto_binding::shim_PSA_MAC_LENGTH(key_type, key_bits, alg)
353}
354
355pub unsafe fn PSA_MAC_TRUNCATED_LENGTH(alg: psa_algorithm_t) -> usize {
356    // No longer in PSA spec but required to convert form psa_algorithm_to to algorithm/Mac
357    psa_crypto_binding::shim_PSA_MAC_TRUNCATED_LENGTH(alg)
358}
359
360pub fn PSA_AEAD_TAG_LENGTH(
361    key_type: psa_key_type_t,
362    key_bits: usize,
363    alg: psa_algorithm_t,
364) -> usize {
365    unsafe { psa_crypto_binding::shim_PSA_AEAD_TAG_LENGTH(key_type, key_bits, alg) }
366}
367
368pub unsafe fn PSA_AEAD_ENCRYPT_OUTPUT_SIZE(
369    key_type: psa_key_type_t,
370    alg: psa_algorithm_t,
371    plaintext_length: usize,
372) -> usize {
373    psa_crypto_binding::shim_PSA_AEAD_ENCRYPT_OUTPUT_SIZE(key_type, alg, plaintext_length)
374}
375
376pub unsafe fn PSA_AEAD_DECRYPT_OUTPUT_SIZE(
377    key_type: psa_key_type_t,
378    alg: psa_algorithm_t,
379    ciphertext_length: usize,
380) -> usize {
381    psa_crypto_binding::shim_PSA_AEAD_DECRYPT_OUTPUT_SIZE(key_type, alg, ciphertext_length)
382}