| ============= | |
| CRYPTO ENGINE | |
| ============= | |
| Overview | |
| -------- | |
| The crypto engine API (CE), is a crypto queue manager. | |
| Requirement | |
| ----------- | |
| You have to put at start of your tfm_ctx the struct crypto_engine_ctx:: | |
| struct your_tfm_ctx { | |
| struct crypto_engine_ctx enginectx; | |
| ... | |
| }; | |
| Why: Since CE manage only crypto_async_request, it cannot know the underlying | |
| request_type and so have access only on the TFM. | |
| So using container_of for accessing __ctx is impossible. | |
| Furthermore, the crypto engine cannot know the "struct your_tfm_ctx", | |
| so it must assume that crypto_engine_ctx is at start of it. | |
| Order of operations | |
| ------------------- | |
| You have to obtain a struct crypto_engine via crypto_engine_alloc_init(). | |
| And start it via crypto_engine_start(). | |
| Before transferring any request, you have to fill the enginectx. | |
| - prepare_request: (taking a function pointer) If you need to do some processing before doing the request | |
| - unprepare_request: (taking a function pointer) Undoing what's done in prepare_request | |
| - do_one_request: (taking a function pointer) Do encryption for current request | |
| Note: that those three functions get the crypto_async_request associated with the received request. | |
| So your need to get the original request via container_of(areq, struct yourrequesttype_request, base); | |
| When your driver receive a crypto_request, you have to transfer it to | |
| the cryptoengine via one of: | |
| - crypto_transfer_ablkcipher_request_to_engine() | |
| - crypto_transfer_aead_request_to_engine() | |
| - crypto_transfer_akcipher_request_to_engine() | |
| - crypto_transfer_hash_request_to_engine() | |
| - crypto_transfer_skcipher_request_to_engine() | |
| At the end of the request process, a call to one of the following function is needed: | |
| - crypto_finalize_ablkcipher_request | |
| - crypto_finalize_aead_request | |
| - crypto_finalize_akcipher_request | |
| - crypto_finalize_hash_request | |
| - crypto_finalize_skcipher_request |