psa_crypto_driver_wrappers.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. /*
  2. * Function signatures for functionality that can be provided by
  3. * cryptographic accelerators.
  4. */
  5. /* Copyright The Mbed TLS Contributors
  6. * SPDX-License-Identifier: Apache-2.0
  7. *
  8. * Licensed under the Apache License, Version 2.0 (the "License"); you may
  9. * not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  16. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. */
  20. #ifndef PSA_CRYPTO_DRIVER_WRAPPERS_H
  21. #define PSA_CRYPTO_DRIVER_WRAPPERS_H
  22. #include "psa/crypto.h"
  23. #include "psa/crypto_driver_common.h"
  24. /*
  25. * Initialization and termination functions
  26. */
  27. psa_status_t psa_driver_wrapper_init(void);
  28. void psa_driver_wrapper_free(void);
  29. /*
  30. * Signature functions
  31. */
  32. psa_status_t psa_driver_wrapper_sign_message(
  33. const psa_key_attributes_t *attributes,
  34. const uint8_t *key_buffer,
  35. size_t key_buffer_size,
  36. psa_algorithm_t alg,
  37. const uint8_t *input,
  38. size_t input_length,
  39. uint8_t *signature,
  40. size_t signature_size,
  41. size_t *signature_length);
  42. psa_status_t psa_driver_wrapper_verify_message(
  43. const psa_key_attributes_t *attributes,
  44. const uint8_t *key_buffer,
  45. size_t key_buffer_size,
  46. psa_algorithm_t alg,
  47. const uint8_t *input,
  48. size_t input_length,
  49. const uint8_t *signature,
  50. size_t signature_length);
  51. psa_status_t psa_driver_wrapper_sign_hash(
  52. const psa_key_attributes_t *attributes,
  53. const uint8_t *key_buffer, size_t key_buffer_size,
  54. psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
  55. uint8_t *signature, size_t signature_size, size_t *signature_length);
  56. psa_status_t psa_driver_wrapper_verify_hash(
  57. const psa_key_attributes_t *attributes,
  58. const uint8_t *key_buffer, size_t key_buffer_size,
  59. psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
  60. const uint8_t *signature, size_t signature_length);
  61. /*
  62. * Interruptible Signature functions
  63. */
  64. uint32_t psa_driver_wrapper_sign_hash_get_num_ops(
  65. psa_sign_hash_interruptible_operation_t *operation);
  66. uint32_t psa_driver_wrapper_verify_hash_get_num_ops(
  67. psa_verify_hash_interruptible_operation_t *operation);
  68. psa_status_t psa_driver_wrapper_sign_hash_start(
  69. psa_sign_hash_interruptible_operation_t *operation,
  70. const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
  71. size_t key_buffer_size, psa_algorithm_t alg,
  72. const uint8_t *hash, size_t hash_length);
  73. psa_status_t psa_driver_wrapper_sign_hash_complete(
  74. psa_sign_hash_interruptible_operation_t *operation,
  75. uint8_t *signature, size_t signature_size,
  76. size_t *signature_length);
  77. psa_status_t psa_driver_wrapper_sign_hash_abort(
  78. psa_sign_hash_interruptible_operation_t *operation);
  79. psa_status_t psa_driver_wrapper_verify_hash_start(
  80. psa_verify_hash_interruptible_operation_t *operation,
  81. const psa_key_attributes_t *attributes, const uint8_t *key_buffer,
  82. size_t key_buffer_size, psa_algorithm_t alg,
  83. const uint8_t *hash, size_t hash_length,
  84. const uint8_t *signature, size_t signature_length);
  85. psa_status_t psa_driver_wrapper_verify_hash_complete(
  86. psa_verify_hash_interruptible_operation_t *operation);
  87. psa_status_t psa_driver_wrapper_verify_hash_abort(
  88. psa_verify_hash_interruptible_operation_t *operation);
  89. /*
  90. * Key handling functions
  91. */
  92. psa_status_t psa_driver_wrapper_import_key(
  93. const psa_key_attributes_t *attributes,
  94. const uint8_t *data, size_t data_length,
  95. uint8_t *key_buffer, size_t key_buffer_size,
  96. size_t *key_buffer_length, size_t *bits);
  97. psa_status_t psa_driver_wrapper_export_key(
  98. const psa_key_attributes_t *attributes,
  99. const uint8_t *key_buffer, size_t key_buffer_size,
  100. uint8_t *data, size_t data_size, size_t *data_length);
  101. psa_status_t psa_driver_wrapper_export_public_key(
  102. const psa_key_attributes_t *attributes,
  103. const uint8_t *key_buffer, size_t key_buffer_size,
  104. uint8_t *data, size_t data_size, size_t *data_length);
  105. psa_status_t psa_driver_wrapper_get_key_buffer_size(
  106. const psa_key_attributes_t *attributes,
  107. size_t *key_buffer_size);
  108. psa_status_t psa_driver_wrapper_get_key_buffer_size_from_key_data(
  109. const psa_key_attributes_t *attributes,
  110. const uint8_t *data,
  111. size_t data_length,
  112. size_t *key_buffer_size);
  113. psa_status_t psa_driver_wrapper_generate_key(
  114. const psa_key_attributes_t *attributes,
  115. uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length);
  116. psa_status_t psa_driver_wrapper_get_builtin_key(
  117. psa_drv_slot_number_t slot_number,
  118. psa_key_attributes_t *attributes,
  119. uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length);
  120. psa_status_t psa_driver_wrapper_copy_key(
  121. psa_key_attributes_t *attributes,
  122. const uint8_t *source_key, size_t source_key_length,
  123. uint8_t *target_key_buffer, size_t target_key_buffer_size,
  124. size_t *target_key_buffer_length);
  125. /*
  126. * Cipher functions
  127. */
  128. psa_status_t psa_driver_wrapper_cipher_encrypt(
  129. const psa_key_attributes_t *attributes,
  130. const uint8_t *key_buffer,
  131. size_t key_buffer_size,
  132. psa_algorithm_t alg,
  133. const uint8_t *iv,
  134. size_t iv_length,
  135. const uint8_t *input,
  136. size_t input_length,
  137. uint8_t *output,
  138. size_t output_size,
  139. size_t *output_length);
  140. psa_status_t psa_driver_wrapper_cipher_decrypt(
  141. const psa_key_attributes_t *attributes,
  142. const uint8_t *key_buffer,
  143. size_t key_buffer_size,
  144. psa_algorithm_t alg,
  145. const uint8_t *input,
  146. size_t input_length,
  147. uint8_t *output,
  148. size_t output_size,
  149. size_t *output_length);
  150. psa_status_t psa_driver_wrapper_cipher_encrypt_setup(
  151. psa_cipher_operation_t *operation,
  152. const psa_key_attributes_t *attributes,
  153. const uint8_t *key_buffer, size_t key_buffer_size,
  154. psa_algorithm_t alg);
  155. psa_status_t psa_driver_wrapper_cipher_decrypt_setup(
  156. psa_cipher_operation_t *operation,
  157. const psa_key_attributes_t *attributes,
  158. const uint8_t *key_buffer, size_t key_buffer_size,
  159. psa_algorithm_t alg);
  160. psa_status_t psa_driver_wrapper_cipher_set_iv(
  161. psa_cipher_operation_t *operation,
  162. const uint8_t *iv,
  163. size_t iv_length);
  164. psa_status_t psa_driver_wrapper_cipher_update(
  165. psa_cipher_operation_t *operation,
  166. const uint8_t *input,
  167. size_t input_length,
  168. uint8_t *output,
  169. size_t output_size,
  170. size_t *output_length);
  171. psa_status_t psa_driver_wrapper_cipher_finish(
  172. psa_cipher_operation_t *operation,
  173. uint8_t *output,
  174. size_t output_size,
  175. size_t *output_length);
  176. psa_status_t psa_driver_wrapper_cipher_abort(
  177. psa_cipher_operation_t *operation);
  178. /*
  179. * Hashing functions
  180. */
  181. psa_status_t psa_driver_wrapper_hash_compute(
  182. psa_algorithm_t alg,
  183. const uint8_t *input,
  184. size_t input_length,
  185. uint8_t *hash,
  186. size_t hash_size,
  187. size_t *hash_length);
  188. psa_status_t psa_driver_wrapper_hash_setup(
  189. psa_hash_operation_t *operation,
  190. psa_algorithm_t alg);
  191. psa_status_t psa_driver_wrapper_hash_clone(
  192. const psa_hash_operation_t *source_operation,
  193. psa_hash_operation_t *target_operation);
  194. psa_status_t psa_driver_wrapper_hash_update(
  195. psa_hash_operation_t *operation,
  196. const uint8_t *input,
  197. size_t input_length);
  198. psa_status_t psa_driver_wrapper_hash_finish(
  199. psa_hash_operation_t *operation,
  200. uint8_t *hash,
  201. size_t hash_size,
  202. size_t *hash_length);
  203. psa_status_t psa_driver_wrapper_hash_abort(
  204. psa_hash_operation_t *operation);
  205. /*
  206. * AEAD functions
  207. */
  208. psa_status_t psa_driver_wrapper_aead_encrypt(
  209. const psa_key_attributes_t *attributes,
  210. const uint8_t *key_buffer, size_t key_buffer_size,
  211. psa_algorithm_t alg,
  212. const uint8_t *nonce, size_t nonce_length,
  213. const uint8_t *additional_data, size_t additional_data_length,
  214. const uint8_t *plaintext, size_t plaintext_length,
  215. uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length);
  216. psa_status_t psa_driver_wrapper_aead_decrypt(
  217. const psa_key_attributes_t *attributes,
  218. const uint8_t *key_buffer, size_t key_buffer_size,
  219. psa_algorithm_t alg,
  220. const uint8_t *nonce, size_t nonce_length,
  221. const uint8_t *additional_data, size_t additional_data_length,
  222. const uint8_t *ciphertext, size_t ciphertext_length,
  223. uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length);
  224. psa_status_t psa_driver_wrapper_aead_encrypt_setup(
  225. psa_aead_operation_t *operation,
  226. const psa_key_attributes_t *attributes,
  227. const uint8_t *key_buffer, size_t key_buffer_size,
  228. psa_algorithm_t alg);
  229. psa_status_t psa_driver_wrapper_aead_decrypt_setup(
  230. psa_aead_operation_t *operation,
  231. const psa_key_attributes_t *attributes,
  232. const uint8_t *key_buffer, size_t key_buffer_size,
  233. psa_algorithm_t alg);
  234. psa_status_t psa_driver_wrapper_aead_set_nonce(
  235. psa_aead_operation_t *operation,
  236. const uint8_t *nonce,
  237. size_t nonce_length);
  238. psa_status_t psa_driver_wrapper_aead_set_lengths(
  239. psa_aead_operation_t *operation,
  240. size_t ad_length,
  241. size_t plaintext_length);
  242. psa_status_t psa_driver_wrapper_aead_update_ad(
  243. psa_aead_operation_t *operation,
  244. const uint8_t *input,
  245. size_t input_length);
  246. psa_status_t psa_driver_wrapper_aead_update(
  247. psa_aead_operation_t *operation,
  248. const uint8_t *input,
  249. size_t input_length,
  250. uint8_t *output,
  251. size_t output_size,
  252. size_t *output_length);
  253. psa_status_t psa_driver_wrapper_aead_finish(
  254. psa_aead_operation_t *operation,
  255. uint8_t *ciphertext,
  256. size_t ciphertext_size,
  257. size_t *ciphertext_length,
  258. uint8_t *tag,
  259. size_t tag_size,
  260. size_t *tag_length);
  261. psa_status_t psa_driver_wrapper_aead_verify(
  262. psa_aead_operation_t *operation,
  263. uint8_t *plaintext,
  264. size_t plaintext_size,
  265. size_t *plaintext_length,
  266. const uint8_t *tag,
  267. size_t tag_length);
  268. psa_status_t psa_driver_wrapper_aead_abort(
  269. psa_aead_operation_t *operation);
  270. /*
  271. * MAC functions
  272. */
  273. psa_status_t psa_driver_wrapper_mac_compute(
  274. const psa_key_attributes_t *attributes,
  275. const uint8_t *key_buffer,
  276. size_t key_buffer_size,
  277. psa_algorithm_t alg,
  278. const uint8_t *input,
  279. size_t input_length,
  280. uint8_t *mac,
  281. size_t mac_size,
  282. size_t *mac_length);
  283. psa_status_t psa_driver_wrapper_mac_sign_setup(
  284. psa_mac_operation_t *operation,
  285. const psa_key_attributes_t *attributes,
  286. const uint8_t *key_buffer,
  287. size_t key_buffer_size,
  288. psa_algorithm_t alg);
  289. psa_status_t psa_driver_wrapper_mac_verify_setup(
  290. psa_mac_operation_t *operation,
  291. const psa_key_attributes_t *attributes,
  292. const uint8_t *key_buffer,
  293. size_t key_buffer_size,
  294. psa_algorithm_t alg);
  295. psa_status_t psa_driver_wrapper_mac_update(
  296. psa_mac_operation_t *operation,
  297. const uint8_t *input,
  298. size_t input_length);
  299. psa_status_t psa_driver_wrapper_mac_sign_finish(
  300. psa_mac_operation_t *operation,
  301. uint8_t *mac,
  302. size_t mac_size,
  303. size_t *mac_length);
  304. psa_status_t psa_driver_wrapper_mac_verify_finish(
  305. psa_mac_operation_t *operation,
  306. const uint8_t *mac,
  307. size_t mac_length);
  308. psa_status_t psa_driver_wrapper_mac_abort(
  309. psa_mac_operation_t *operation);
  310. /*
  311. * Asymmetric cryptography
  312. */
  313. psa_status_t psa_driver_wrapper_asymmetric_encrypt(
  314. const psa_key_attributes_t *attributes,
  315. const uint8_t *key_buffer,
  316. size_t key_buffer_size,
  317. psa_algorithm_t alg,
  318. const uint8_t *input,
  319. size_t input_length,
  320. const uint8_t *salt,
  321. size_t salt_length,
  322. uint8_t *output,
  323. size_t output_size,
  324. size_t *output_length);
  325. psa_status_t psa_driver_wrapper_asymmetric_decrypt(
  326. const psa_key_attributes_t *attributes,
  327. const uint8_t *key_buffer,
  328. size_t key_buffer_size,
  329. psa_algorithm_t alg,
  330. const uint8_t *input,
  331. size_t input_length,
  332. const uint8_t *salt,
  333. size_t salt_length,
  334. uint8_t *output,
  335. size_t output_size,
  336. size_t *output_length);
  337. /*
  338. * Raw Key Agreement
  339. */
  340. psa_status_t psa_driver_wrapper_key_agreement(
  341. const psa_key_attributes_t *attributes,
  342. const uint8_t *key_buffer,
  343. size_t key_buffer_size,
  344. psa_algorithm_t alg,
  345. const uint8_t *peer_key,
  346. size_t peer_key_length,
  347. uint8_t *shared_secret,
  348. size_t shared_secret_size,
  349. size_t *shared_secret_length);
  350. /*
  351. * PAKE functions.
  352. */
  353. psa_status_t psa_driver_wrapper_pake_setup(
  354. psa_pake_operation_t *operation,
  355. const psa_crypto_driver_pake_inputs_t *inputs);
  356. psa_status_t psa_driver_wrapper_pake_output(
  357. psa_pake_operation_t *operation,
  358. psa_crypto_driver_pake_step_t step,
  359. uint8_t *output,
  360. size_t output_size,
  361. size_t *output_length);
  362. psa_status_t psa_driver_wrapper_pake_input(
  363. psa_pake_operation_t *operation,
  364. psa_crypto_driver_pake_step_t step,
  365. const uint8_t *input,
  366. size_t input_length);
  367. psa_status_t psa_driver_wrapper_pake_get_implicit_key(
  368. psa_pake_operation_t *operation,
  369. uint8_t *output, size_t output_size,
  370. size_t *output_length);
  371. psa_status_t psa_driver_wrapper_pake_abort(
  372. psa_pake_operation_t *operation);
  373. #endif /* PSA_CRYPTO_DRIVER_WRAPPERS_H */
  374. /* End of automatically generated file. */