sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/crypto/api-digestmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hMessage Digesth]hMessage Digest}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/crypto/api-digest.rsthKubh)}(hhh](h)}(h$Message Digest Algorithm Definitionsh]h$Message Digest Algorithm Definitions}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThese data structures define modular message digest algorithm implementations, managed via crypto_register_ahash(), crypto_register_shash(), crypto_unregister_ahash() and crypto_unregister_shash().h]hThese data structures define modular message digest algorithm implementations, managed via crypto_register_ahash(), crypto_register_shash(), crypto_unregister_ahash() and crypto_unregister_shash().}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhhhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleahash_alg (C struct) c.ahash_alghNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h ahash_algh]hdesc_signature_line)}(hstruct ahash_algh](hdesc_sig_keyword)}(hstructh]hstruct}(hhhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1j hhhhhj hKubh desc_name)}(h ahash_algh]h desc_sig_name)}(hhh]h ahash_alg}(hj&hhhNhNubah}(h]h ]nah"]h$]h&]uh1j$hj ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhhhhhj hKubeh}(h]h ]h"]h$]h&]j<j= add_permalinkuh1hsphinx_line_type declaratorhhhhhj hKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhj hKhhhhubh desc_content)}(hhh]h)}(h&asynchronous message digest definitionh]h&asynchronous message digest definition}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKLhjThhubah}(h]h ]h"]h$]h&]uh1jRhhhhhj hKubeh}(h]h ](cstructeh"]h$]h&]domainjoobjtypejpdesctypejpnoindex noindexentrynocontentsentryuh1hhhhhhNhNubh container)}(hXf**Definition**:: struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; }; **Members** ``init`` **[mandatory]** Initialize the transformation context. Intended only to initialize the state of the HASH transformation at the beginning. This shall fill in the internal structures used during the entire duration of the whole transformation. No data processing happens at this point. Driver code implementation must not use req->result. ``update`` **[mandatory]** Push a chunk of data into the driver for transformation. This function actually pushes blocks of data from upper layers into the driver, which then passes those to the hardware as seen fit. This function must not finalize the HASH transformation by calculating the final message digest as this only adds more data into the transformation. This function shall not modify the transformation context, as this function may be called in parallel with the same transformation object. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. Driver must not use req->result. For block-only algorithms, **update** must return the number of bytes to store in the API partial block buffer. ``final`` **[mandatory]** Retrieve result from the driver. This function finalizes the transformation and retrieves the resulting hash from the driver and pushes it back to upper layers. No data processing happens at this point unless hardware requires it to finish the transformation (then the data buffered by the device driver is processed). ``finup`` **[optional]** Combination of **update** and **final**. This function is effectively a combination of **update** and **final** calls issued in sequence. As some hardware cannot do **update** and **final** separately, this callback was added to allow such hardware to be used at least by IPsec. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. ``digest`` Combination of **init** and **update** and **final**. This function effectively behaves as the entire chain of operations, **init**, **update** and **final** issued in sequence. Just like **finup**, this was added for hardware which cannot do even the **finup**, but can only do the whole transformation in one run. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. ``export`` Export partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be **import** 'ed back later on. This is useful in case you want to save partial result of the transformation after processing certain amount of data and reload this partial result multiple times later on for multiple re-use. No data processing happens at this point. Driver must not use req->result. ``import`` Import partial state of the transformation. This function loads the entire state of the ongoing transformation from a provided block of data so the transformation can continue from this point onward. No data processing happens at this point. Driver must not use req->result. ``export_core`` Export partial state without partial block. Only defined for algorithms that are not block-only. ``import_core`` Import partial state without partial block. Only defined for algorithms that are not block-only. ``setkey`` Set optional key used by the hashing algorithm. Intended to push optional key used by the hashing algorithm from upper layers into the driver. This function can store the key in the transformation context or can outright program it into the hardware. In the former case, one must be careful to program the key into the hardware at appropriate time and one must be careful that .setkey() can be called multiple times during the existence of the transformation object. Not all hashing algorithms do implement this function as it is only needed for keyed message digests. SHAx/MDx/CRCx do NOT implement this function. HMAC(MDx)/HMAC(SHAx)/CMAC(AES) do implement this function. This function must be called before any other of the **init**, **update**, **final**, **finup**, **digest** is called. No data processing happens at this point. ``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. ``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. ``clone_tfm`` Copy transform into new object, may allocate memory. ``halg`` see struct hash_alg_commonh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKPhj|ubh literal_block)}(hX struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; };h]hX struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKRhj|ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKchj|ubhdefinition_list)}(hhh](hdefinition_list_item)}(hXZ``init`` **[mandatory]** Initialize the transformation context. Intended only to initialize the state of the HASH transformation at the beginning. This shall fill in the internal structures used during the entire duration of the whole transformation. No data processing happens at this point. Driver code implementation must not use req->result. h](hterm)}(h``init``h]hliteral)}(hjh]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKRhjubh definition)}(hhh]h)}(hXP**[mandatory]** Initialize the transformation context. Intended only to initialize the state of the HASH transformation at the beginning. This shall fill in the internal structures used during the entire duration of the whole transformation. No data processing happens at this point. Driver code implementation must not use req->result.h](j)}(h**[mandatory]**h]h [mandatory]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhXA Initialize the transformation context. Intended only to initialize the state of the HASH transformation at the beginning. This shall fill in the internal structures used during the entire duration of the whole transformation. No data processing happens at this point. Driver code implementation must not use req->result.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjubj)}(hX``update`` **[mandatory]** Push a chunk of data into the driver for transformation. This function actually pushes blocks of data from upper layers into the driver, which then passes those to the hardware as seen fit. This function must not finalize the HASH transformation by calculating the final message digest as this only adds more data into the transformation. This function shall not modify the transformation context, as this function may be called in parallel with the same transformation object. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. Driver must not use req->result. For block-only algorithms, **update** must return the number of bytes to store in the API partial block buffer. h](j)}(h ``update``h]j)}(hj#h]hupdate}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK^hjubj)}(hhh]h)}(hX**[mandatory]** Push a chunk of data into the driver for transformation. This function actually pushes blocks of data from upper layers into the driver, which then passes those to the hardware as seen fit. This function must not finalize the HASH transformation by calculating the final message digest as this only adds more data into the transformation. This function shall not modify the transformation context, as this function may be called in parallel with the same transformation object. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. Driver must not use req->result. For block-only algorithms, **update** must return the number of bytes to store in the API partial block buffer.h](j)}(h**[mandatory]**h]h [mandatory]}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubhXu Push a chunk of data into the driver for transformation. This function actually pushes blocks of data from upper layers into the driver, which then passes those to the hardware as seen fit. This function must not finalize the HASH transformation by calculating the final message digest as this only adds more data into the transformation. This function shall not modify the transformation context, as this function may be called in parallel with the same transformation object. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. Driver must not use req->result. For block-only algorithms, }(hj<hhhNhNubj)}(h **update**h]hupdate}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubhJ must return the number of bytes to store in the API partial block buffer.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKShj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hK^hjubj)}(hXY``final`` **[mandatory]** Retrieve result from the driver. This function finalizes the transformation and retrieves the resulting hash from the driver and pushes it back to upper layers. No data processing happens at this point unless hardware requires it to finish the transformation (then the data buffered by the device driver is processed). h](j)}(h ``final``h]j)}(hj}h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKchjwubj)}(hhh]h)}(hXN**[mandatory]** Retrieve result from the driver. This function finalizes the transformation and retrieves the resulting hash from the driver and pushes it back to upper layers. No data processing happens at this point unless hardware requires it to finish the transformation (then the data buffered by the device driver is processed).h](j)}(h**[mandatory]**h]h [mandatory]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX? Retrieve result from the driver. This function finalizes the transformation and retrieves the resulting hash from the driver and pushes it back to upper layers. No data processing happens at this point unless hardware requires it to finish the transformation (then the data buffered by the device driver is processed).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK_hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKchjubj)}(hX``finup`` **[optional]** Combination of **update** and **final**. This function is effectively a combination of **update** and **final** calls issued in sequence. As some hardware cannot do **update** and **final** separately, this callback was added to allow such hardware to be used at least by IPsec. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. h](j)}(h ``finup``h]j)}(hjh]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKihjubj)}(hhh]h)}(hX**[optional]** Combination of **update** and **final**. This function is effectively a combination of **update** and **final** calls issued in sequence. As some hardware cannot do **update** and **final** separately, this callback was added to allow such hardware to be used at least by IPsec. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point.h](j)}(h**[optional]**h]h [optional]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh Combination of }(hjhhhNhNubj)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0. This function is effectively a combination of }(hjhhhNhNubj)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h **final**h]hfinal}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 calls issued in sequence. As some hardware cannot do }(hjhhhNhNubj)}(h **update**h]hupdate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h **final**h]hfinal}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh separately, this callback was added to allow such hardware to be used at least by IPsec. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKihjubj)}(hX``digest`` Combination of **init** and **update** and **final**. This function effectively behaves as the entire chain of operations, **init**, **update** and **final** issued in sequence. Just like **finup**, this was added for hardware which cannot do even the **finup**, but can only do the whole transformation in one run. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. h](j)}(h ``digest``h]j)}(hjyh]hdigest}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKohjsubj)}(hhh]h)}(hXCombination of **init** and **update** and **final**. This function effectively behaves as the entire chain of operations, **init**, **update** and **final** issued in sequence. Just like **finup**, this was added for hardware which cannot do even the **finup**, but can only do the whole transformation in one run. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point.h](hCombination of }(hjhhhNhNubj)}(h**init**h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhG. This function effectively behaves as the entire chain of operations, }(hjhhhNhNubj)}(h**init**h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh issued in sequence. Just like }(hjhhhNhNubj)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7, this was added for hardware which cannot do even the }(hjhhhNhNubj)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, but can only do the whole transformation in one run. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKjhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKohjubj)}(hX``export`` Export partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be **import** 'ed back later on. This is useful in case you want to save partial result of the transformation after processing certain amount of data and reload this partial result multiple times later on for multiple re-use. No data processing happens at this point. Driver must not use req->result. h](j)}(h ``export``h]j)}(hjCh]hexport}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj=ubj)}(hhh]h)}(hXExport partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be **import** 'ed back later on. This is useful in case you want to save partial result of the transformation after processing certain amount of data and reload this partial result multiple times later on for multiple re-use. No data processing happens at this point. Driver must not use req->result.h](hExport partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be }(hj\hhhNhNubj)}(h **import**h]himport}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubhX! ‘ed back later on. This is useful in case you want to save partial result of the transformation after processing certain amount of data and reload this partial result multiple times later on for multiple re-use. No data processing happens at this point. Driver must not use req->result.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK}hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjubj)}(hX``import`` Import partial state of the transformation. This function loads the entire state of the ongoing transformation from a provided block of data so the transformation can continue from this point onward. No data processing happens at this point. Driver must not use req->result. h](j)}(h ``import``h]j)}(hjh]himport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hXImport partial state of the transformation. This function loads the entire state of the ongoing transformation from a provided block of data so the transformation can continue from this point onward. No data processing happens at this point. Driver must not use req->result.h]hXImport partial state of the transformation. This function loads the entire state of the ongoing transformation from a provided block of data so the transformation can continue from this point onward. No data processing happens at this point. Driver must not use req->result.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hr``export_core`` Export partial state without partial block. Only defined for algorithms that are not block-only. h](j)}(h``export_core``h]j)}(hjh]h export_core}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(haExport partial state without partial block. Only defined for algorithms that are not block-only.h]haExport partial state without partial block. Only defined for algorithms that are not block-only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hr``import_core`` Import partial state without partial block. Only defined for algorithms that are not block-only. h](j)}(h``import_core``h]j)}(hjh]h import_core}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(haImport partial state without partial block. Only defined for algorithms that are not block-only.h]haImport partial state without partial block. Only defined for algorithms that are not block-only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hXO``setkey`` Set optional key used by the hashing algorithm. Intended to push optional key used by the hashing algorithm from upper layers into the driver. This function can store the key in the transformation context or can outright program it into the hardware. In the former case, one must be careful to program the key into the hardware at appropriate time and one must be careful that .setkey() can be called multiple times during the existence of the transformation object. Not all hashing algorithms do implement this function as it is only needed for keyed message digests. SHAx/MDx/CRCx do NOT implement this function. HMAC(MDx)/HMAC(SHAx)/CMAC(AES) do implement this function. This function must be called before any other of the **init**, **update**, **final**, **finup**, **digest** is called. No data processing happens at this point. h](j)}(h ``setkey``h]j)}(hj=h]hsetkey}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK|hj7ubj)}(hhh]h)}(hXCSet optional key used by the hashing algorithm. Intended to push optional key used by the hashing algorithm from upper layers into the driver. This function can store the key in the transformation context or can outright program it into the hardware. In the former case, one must be careful to program the key into the hardware at appropriate time and one must be careful that .setkey() can be called multiple times during the existence of the transformation object. Not all hashing algorithms do implement this function as it is only needed for keyed message digests. SHAx/MDx/CRCx do NOT implement this function. HMAC(MDx)/HMAC(SHAx)/CMAC(AES) do implement this function. This function must be called before any other of the **init**, **update**, **final**, **finup**, **digest** is called. No data processing happens at this point.h](hXSet optional key used by the hashing algorithm. Intended to push optional key used by the hashing algorithm from upper layers into the driver. This function can store the key in the transformation context or can outright program it into the hardware. In the former case, one must be careful to program the key into the hardware at appropriate time and one must be careful that .setkey() can be called multiple times during the existence of the transformation object. Not all hashing algorithms do implement this function as it is only needed for keyed message digests. SHAx/MDx/CRCx do NOT implement this function. HMAC(MDx)/HMAC(SHAx)/CMAC(AES) do implement this function. This function must be called before any other of the }(hjVhhhNhNubj)}(h**init**h]hinit}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, }(hjVhhhNhNubj)}(h **update**h]hupdate}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, }hjVsbj)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, }hjVsbj)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, }hjVsbj)}(h **digest**h]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh5 is called. No data processing happens at this point.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKphjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhK|hjubj)}(hX``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. h](j)}(h ``init_tfm``h]j)}(hjh]hinit_tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hXInitialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place.h]hXInitialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. h](j)}(h ``exit_tfm``h]j)}(hj h]hexit_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hDeinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**.h](hODeinitialize the cryptographic transformation object. This is a counterpart to }(hj$hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh(, used to remove various changes set in }(hj$hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hjih]h clone_tfm}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjcubj)}(hhh]h)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hjh]hhalg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hshash_alg (C struct) c.shash_alghNtauh1hhhhhhNhNubh)}(hhh](h)}(h shash_algh]h)}(hstruct shash_algh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hKubj)}(h shash_algh]j%)}(hjh]h shash_alg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hKhjhhubjS)}(hhh]h)}(h%synchronous message digest definitionh]h%synchronous message digest definition}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj;hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hKubeh}(h]h ](jostructeh"]h$]h&]jtjojujVjvjVjwjxjyuh1hhhhhhNhNubj{)}(hX **Definition**:: struct shash_alg { int (*init)(struct shash_desc *desc); int (*update)(struct shash_desc *desc, const u8 *data, unsigned int len); int (*final)(struct shash_desc *desc, u8 *out); int (*finup)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*digest)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*export)(struct shash_desc *desc, void *out); int (*import)(struct shash_desc *desc, const void *in); int (*export_core)(struct shash_desc *desc, void *out); int (*import_core)(struct shash_desc *desc, const void *in); int (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; }; **Members** ``init`` see struct ahash_alg ``update`` see struct ahash_alg ``final`` see struct ahash_alg ``finup`` see struct ahash_alg ``digest`` see struct ahash_alg ``export`` see struct ahash_alg ``import`` see struct ahash_alg ``export_core`` see struct ahash_alg ``import_core`` see struct ahash_alg ``setkey`` see struct ahash_alg ``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. ``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. ``clone_tfm`` Copy transform into new object, may allocate memory. ``descsize`` Size of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctx ``{unnamed_union}`` anonymous ``HASH_ALG_COMMON`` see struct hash_alg_common ``halg`` see struct hash_alg_commonh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh:}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjZubj)}(hXstruct shash_alg { int (*init)(struct shash_desc *desc); int (*update)(struct shash_desc *desc, const u8 *data, unsigned int len); int (*final)(struct shash_desc *desc, u8 *out); int (*finup)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*digest)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*export)(struct shash_desc *desc, void *out); int (*import)(struct shash_desc *desc, const void *in); int (*export_core)(struct shash_desc *desc, void *out); int (*import_core)(struct shash_desc *desc, const void *in); int (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; };h]hXstruct shash_alg { int (*init)(struct shash_desc *desc); int (*update)(struct shash_desc *desc, const u8 *data, unsigned int len); int (*final)(struct shash_desc *desc, u8 *out); int (*finup)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*digest)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*export)(struct shash_desc *desc, void *out); int (*import)(struct shash_desc *desc, const void *in); int (*export_core)(struct shash_desc *desc, void *out); int (*import_core)(struct shash_desc *desc, const void *in); int (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; };}hj{sbah}(h]h ]h"]h$]h&]j<j=uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjZubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjZubj)}(hhh](j)}(h``init`` see struct ahash_alg h](j)}(h``init``h]j)}(hjh]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``update`` see struct ahash_alg h](j)}(h ``update``h]j)}(hjh]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``final`` see struct ahash_alg h](j)}(h ``final``h]j)}(hjh]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hKhjubj)}(h``finup`` see struct ahash_alg h](j)}(h ``finup``h]j)}(hjVh]hfinup}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjPubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKhjubj)}(h ``digest`` see struct ahash_alg h](j)}(h ``digest``h]j)}(hjh]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``export`` see struct ahash_alg h](j)}(h ``export``h]j)}(hjh]hexport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``import`` see struct ahash_alg h](j)}(h ``import``h]j)}(hj h]himport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h%``export_core`` see struct ahash_alg h](j)}(h``export_core``h]j)}(hj: h]h export_core}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj4 ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO hKhjP ubah}(h]h ]h"]h$]h&]uh1jhj4 ubeh}(h]h ]h"]h$]h&]uh1jhjO hKhjubj)}(h%``import_core`` see struct ahash_alg h](j)}(h``import_core``h]j)}(hjs h]h import_core}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjm ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjm ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h ``setkey`` see struct ahash_alg h](j)}(h ``setkey``h]j)}(hj h]hsetkey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(hX``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. h](j)}(h ``init_tfm``h]j)}(hj h]hinit_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hXInitialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place.h]hXInitialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. h](j)}(h ``exit_tfm``h]j)}(hj h]hexit_tfm}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hDeinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**.h](hODeinitialize the cryptographic transformation object. This is a counterpart to }(hj8 hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubh(, used to remove various changes set in }(hj8 hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubh.}(hj8 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hKhjubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hj} h]h clone_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjw ubj)}(hhh]h)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjw ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``descsize`` Size of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctx h](j)}(h ``descsize``h]j)}(hj h]hdescsize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hSize of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctxh]hSize of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj h]h{unnamed_union}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h/``HASH_ALG_COMMON`` see struct hash_alg_common h](j)}(h``HASH_ALG_COMMON``h]j)}(hj) h]hHASH_ALG_COMMON}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj# ubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj> hKhj? ubah}(h]h ]h"]h$]h&]uh1jhj# ubeh}(h]h ]h"]h$]h&]uh1jhj> hKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hjb h]hhalg}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj\ ubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw hKhjubeh}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhhhhhNhNubeh}(h]$message-digest-algorithm-definitionsah ]h"]$message digest algorithm definitionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hAsynchronous Message Digest APIh]hAsynchronous Message Digest API}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hThe asynchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_AHASH (listed as type "ahash" in /proc/crypto)h]hThe asynchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_AHASH (listed as type “ahash” in /proc/crypto)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM!hj hhubh)}(hpThe asynchronous cipher operation discussion provided for the CRYPTO_ALG_TYPE_SKCIPHER API applies here as well.h]hpThe asynchronous cipher operation discussion provided for the CRYPTO_ALG_TYPE_SKCIPHER API applies here as well.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM$hj hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_alloc_ahash (C function)c.crypto_alloc_ahashhNtauh1hhj hhhNhNubh)}(hhh](h)}(hSstruct crypto_ahash * crypto_alloc_ahash (const char *alg_name, u32 type, u32 mask)h]h)}(hQstruct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type, u32 mask)h](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM5ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hM5ubh)}(hhh]j%)}(h crypto_ahashh]h crypto_ahash}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjoreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j- ASTIdentifier)}j( crypto_alloc_ahashsbc.crypto_alloc_ahashasbuh1hhj hhhj hM5ubj)}(h h]h }(hj; hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hM5ubhdesc_sig_punctuation)}(h*h]h*}(hjK hhhNhNubah}(h]h ]pah"]h$]h&]uh1jI hj hhhj hM5ubj)}(hcrypto_alloc_ahashh]j%)}(hj8 h]hcrypto_alloc_ahash}(hj^ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZ ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hM5ubhdesc_parameterlist)}(h*(const char *alg_name, u32 type, u32 mask)h](hdesc_parameter)}(hconst char *alg_nameh](h)}(hconsth]hconst}(hj} hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjy ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjy ubhdesc_sig_keyword_type)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hjy ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjy ubjJ )}(hjM h]h*}(hj hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjy ubj%)}(halg_nameh]halg_name}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjy ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjs ubjx )}(hu32 typeh](h)}(hhh]j%)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj modnameN classnameNj, j/ )}j2 ]j6 c.crypto_alloc_ahashasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(htypeh]htype}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjs ubjx )}(hu32 maskh](h)}(hhh]j%)}(hu32h]hu32}(hj) hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj& ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj+ modnameN classnameNj, j/ )}j2 ]j6 c.crypto_alloc_ahashasbuh1hhj" ubj)}(h h]h }(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj" ubj%)}(hmaskh]hmask}(hjU hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj" ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjs ubeh}(h]h ]h"]h$]h&]j<j=uh1jq hj hhhj hM5ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hM5ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hM5hj hhubjS)}(hhh]h)}(hallocate ahash cipher handleh]hallocate ahash cipher handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM5hj| hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hM5ubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj jvj jwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the ahash cipher ``u32 type`` specifies the type of the cipher ``u32 mask`` specifies the mask for the cipher **Description** Allocate a cipher handle for an ahash. The returned struct crypto_ahash is the cipher handle that is required for any subsequent API invocation for that ahash. **Return** allocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM9hj ubj)}(hhh](j)}(he``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the ahash cipher h](j)}(h``const char *alg_name``h]j)}(hj h]hconst char *alg_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM7hj ubj)}(hhh]h)}(hKis the cra_name / name or cra_driver_name / driver name of the ahash cipherh]hKis the cra_name / name or cra_driver_name / driver name of the ahash cipher}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM6hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM7hj ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hj h]hu32 type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM8hj ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhM8hj ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hj3h]hu32 mask}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM9hj-ubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM9hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM9hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM;hj ubh)}(hAllocate a cipher handle for an ahash. The returned struct crypto_ahash is the cipher handle that is required for any subsequent API invocation for that ahash.h]hAllocate a cipher handle for an ahash. The returned struct crypto_ahash is the cipher handle that is required for any subsequent API invocation for that ahash.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM:hj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM>hj ubh)}(hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h]hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM?hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_free_ahash (C function)c.crypto_free_ahashhNtauh1hhj hhhNhNubh)}(hhh](h)}(h1void crypto_free_ahash (struct crypto_ahash *tfm)h]h)}(h0void crypto_free_ahash(struct crypto_ahash *tfm)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMMubj)}(hcrypto_free_ahashh]j%)}(hcrypto_free_ahashh]hcrypto_free_ahash}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMMubjr )}(h(struct crypto_ahash *tfm)h]jx )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h crypto_ahashh]h crypto_ahash}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj7modnameN classnameNj, j/ )}j2 ]j5 )}j( jsbc.crypto_free_ahashasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hjchhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(htfmh]htfm}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubah}(h]h ]h"]h$]h&]j<j=uh1jq hjhhhjhMMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMMhjhhubjS)}(hhh]h)}(h!zeroize and free the ahash handleh]h!zeroize and free the ahash handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujjvjjwjxjyuh1hhhhj hNhNubj{)}(h**Parameters** ``struct crypto_ahash *tfm`` cipher handle to be freed **Description** If **tfm** is a NULL or error pointer, this function does nothing.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMQhjubj)}(hhh]j)}(h7``struct crypto_ahash *tfm`` cipher handle to be freed h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjh]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMNhjubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMPhjubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hj,hhhNhNubj)}(h**tfm**h]htfm}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh8 is a NULL or error pointer, this function does nothing.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$crypto_ahash_digestsize (C function)c.crypto_ahash_digestsizehNtauh1hhj hhhNhNubh)}(hhh](h)}(h?unsigned int crypto_ahash_digestsize (struct crypto_ahash *tfm)h]h)}(h>unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm)h](j )}(hunsignedh]hunsigned}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjihhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjihhhj{hMubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjihhhj{hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjihhhj{hMubj)}(hcrypto_ahash_digestsizeh]j%)}(hcrypto_ahash_digestsizeh]hcrypto_ahash_digestsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjihhhj{hMubjr )}(h(struct crypto_ahash *tfm)h]jx )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( jsbc.crypto_ahash_digestsizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubah}(h]h ]h"]h$]h&]j<j=uh1jq hjihhhj{hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjehhhj{hMubah}(h]j`ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj{hMhjbhhubjS)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jRhjbhhhj{hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujajvjajwjxjyuh1hhhhj hNhNubj{)}(h**Parameters** ``struct crypto_ahash *tfm`` cipher handle **Description** The size for the message digest created by the message digest cipher referenced with the cipher handle is returned. **Return** message digest size of cipherh](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjeubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjh]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjeubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjeubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjeubh)}(hmessage digest size of cipherh]hmessage digest size of cipher}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#crypto_ahash_statesize (C function)c.crypto_ahash_statesizehNtauh1hhj hhhNhNubh)}(hhh](h)}(h>unsigned int crypto_ahash_statesize (struct crypto_ahash *tfm)h]h)}(h=unsigned int crypto_ahash_statesize(struct crypto_ahash *tfm)h](j )}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhj?hMubj )}(hinth]hint}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-hhhj?hMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhj?hMubj)}(hcrypto_ahash_statesizeh]j%)}(hcrypto_ahash_statesizeh]hcrypto_ahash_statesize}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-hhhj?hMubjr )}(h(struct crypto_ahash *tfm)h]jx )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( jpsbc.crypto_ahash_statesizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubah}(h]h ]h"]h$]h&]j<j=uh1jq hj-hhhj?hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj)hhhj?hMubah}(h]j$ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj?hMhj&hhubjS)}(hhh]h)}(hobtain size of the ahash stateh]hobtain size of the ahash state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jRhj&hhhj?hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj%jvj%jwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct crypto_ahash *tfm`` cipher handle **Description** Return the size of the ahash state. With the crypto_ahash_export() function, the caller can export the state into a buffer whose size is defined with this function. **Return** size of the ahash stateh](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj)ubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjNh]hstruct crypto_ahash *tfm}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjHubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj)ubh)}(hReturn the size of the ahash state. With the crypto_ahash_export() function, the caller can export the state into a buffer whose size is defined with this function.h]hReturn the size of the ahash state. With the crypto_ahash_export() function, the caller can export the state into a buffer whose size is defined with this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj)ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj)ubh)}(hsize of the ahash stateh]hsize of the ahash state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_reqtfm (C function)c.crypto_ahash_reqtfmhNtauh1hhj hhhNhNubh)}(hhh](h)}(hEstruct crypto_ahash * crypto_ahash_reqtfm (struct ahash_request *req)h]h)}(hCstruct crypto_ahash *crypto_ahash_reqtfm(struct ahash_request *req)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( crypto_ahash_reqtfmsbc.crypto_ahash_reqtfmasbuh1hhjhhhjhMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubjJ )}(hjM h]h*}(hjChhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjhhhjhMubj)}(hcrypto_ahash_reqtfmh]j%)}(hj2h]hcrypto_ahash_reqtfm}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubjr )}(h(struct ahash_request *req)h]jx )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hhh]j%)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j0c.crypto_ahash_reqtfmasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjkubj%)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjgubah}(h]h ]h"]h$]h&]j<j=uh1jq hjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]h)}(h!obtain cipher handle from requesth]h!obtain cipher handle from request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujjvjjwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct ahash_request *req`` asynchronous request handle that contains the reference to the ahash cipher handle **Description** Return the ahash cipher handle that is registered with the asynchronous request handle ahash_request. **Return** ahash cipher handleh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubj)}(hhh]j)}(hq``struct ahash_request *req`` asynchronous request handle that contains the reference to the ahash cipher handle h](j)}(h``struct ahash_request *req``h]j)}(hj1h]hstruct ahash_request *req}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj+ubj)}(hhh]h)}(hRasynchronous request handle that contains the reference to the ahash cipher handleh]hRasynchronous request handle that contains the reference to the ahash cipher handle}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubh)}(heReturn the ahash cipher handle that is registered with the asynchronous request handle ahash_request.h]heReturn the ahash cipher handle that is registered with the asynchronous request handle ahash_request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubh)}(hahash cipher handleh]hahash cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!crypto_ahash_reqsize (C function)c.crypto_ahash_reqsizehNtauh1hhj hhhNhNubh)}(hhh](h)}(h(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h](jx )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( jsbc.crypto_ahash_setkeyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(htfmh]htfm}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubjx )}(h const u8 *keyh](h)}(hj h]hconst}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubh)}(hhh]j%)}(hu8h]hu8}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjEmodnameN classnameNj, j/ )}j2 ]jc.crypto_ahash_setkeyasbuh1hhj!ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubjJ )}(hjM h]h*}(hjohhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj!ubj%)}(hkeyh]hkey}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubjx )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hkeylenh]hkeylen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubeh}(h]h ]h"]h$]h&]j<j=uh1jq hjrhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjhMubah}(h]jiah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjkhhubjS)}(hhh]h)}(hset key for cipher handleh]hset key for cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjkhhhjhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujjvjjwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct crypto_ahash *tfm`` cipher handle ``const u8 *key`` buffer holding the key ``unsigned int keylen`` length of the key in bytes **Description** The caller provided key is set for the ahash cipher. The cipher handle must point to a keyed hash in order for this function to succeed. **Return** 0 if the setting of the key was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh](j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hj8h]hstruct crypto_ahash *tfm}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj2ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubj)}(h)``const u8 *key`` buffer holding the key h](j)}(h``const u8 *key``h]j)}(hjqh]h const u8 *key}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjkubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubj)}(h3``unsigned int keylen`` length of the key in bytes h](j)}(h``unsigned int keylen``h]j)}(hjh]hunsigned int keylen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hThe caller provided key is set for the ahash cipher. The cipher handle must point to a keyed hash in order for this function to succeed.h]hThe caller provided key is set for the ahash cipher. The cipher handle must point to a keyed hash in order for this function to succeed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hD0 if the setting of the key was successful; < 0 if an error occurredh]hD0 if the setting of the key was successful; < 0 if an error occurred}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_ahash_finup (C function)c.crypto_ahash_finuphNtauh1hhj hhhNhNubh)}(hhh](h)}(h2int crypto_ahash_finup (struct ahash_request *req)h]h)}(h1int crypto_ahash_finup(struct ahash_request *req)h](j )}(hinth]hint}(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjMhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMhhhj_hMubj)}(hcrypto_ahash_finuph]j%)}(hcrypto_ahash_finuph]hcrypto_ahash_finup}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjMhhhj_hMubjr )}(h(struct ahash_request *req)h]jx )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( jtsbc.crypto_ahash_finupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubah}(h]h ]h"]h$]h&]j<j=uh1jq hjMhhhj_hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjIhhhj_hMubah}(h]jDah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj_hMhjFhhubjS)}(hhh]h)}(h"update and finalize message digesth]h"update and finalize message digest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjFhhhj_hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj)jvj)jwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation **Description** This function is a "short-hand" for the function calls of crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate functions. **Return** see crypto_ahash_final()h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj-ubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjRh]hstruct ahash_request *req}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjLubj)}(hhh]h)}(hgreference to the ahash_request handle that holds all information needed to perform the cipher operationh]hgreference to the ahash_request handle that holds all information needed to perform the cipher operation}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj-ubh)}(hThis function is a "short-hand" for the function calls of crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate functions.h]hThis function is a “short-hand” for the function calls of crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj-ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj-ubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_ahash_final (C function)c.crypto_ahash_finalhNtauh1hhj hhhNhNubh)}(hhh](h)}(h2int crypto_ahash_final (struct ahash_request *req)h]h)}(h1int crypto_ahash_final(struct ahash_request *req)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hcrypto_ahash_finalh]j%)}(hcrypto_ahash_finalh]hcrypto_ahash_final}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubjr )}(h(struct ahash_request *req)h]jx )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubh)}(hhh]j%)}(h ahash_requesth]h ahash_request}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjWmodnameN classnameNj, j/ )}j2 ]j5 )}j( jsbc.crypto_ahash_finalasbuh1hhj3ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj3ubj%)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj/ubah}(h]h ]h"]h$]h&]j<j=uh1jq hjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujjvjjwjxjyuh1hhhhj hNhNubj{)}(hXv**Parameters** ``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation **Description** Finalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle. **Return** 0 if the message digest was successfully calculated; -EINPROGRESS if data is fed into hardware (DMA) or queued for later; -EBUSY if queue is full and request should be resubmitted later; other < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hgreference to the ahash_request handle that holds all information needed to perform the cipher operationh]hgreference to the ahash_request handle that holds all information needed to perform the cipher operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle.h]hFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h **Return**h]j)}(hj^h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h0 if the message digest was successfully calculated; -EINPROGRESS if data is fed into hardware (DMA) or queued for later; -EBUSY if queue is full and request should be resubmitted later; other < 0 if an error occurredh]h0 if the message digest was successfully calculated; -EINPROGRESS if data is fed into hardware (DMA) or queued for later; -EBUSY if queue is full and request should be resubmitted later; other < 0 if an error occurred}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_digest (C function)c.crypto_ahash_digesthNtauh1hhj hhhNhNubh)}(hhh](h)}(h3int crypto_ahash_digest (struct ahash_request *req)h]h)}(h2int crypto_ahash_digest(struct ahash_request *req)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hcrypto_ahash_digesth]j%)}(hcrypto_ahash_digesth]hcrypto_ahash_digest}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubjr )}(h(struct ahash_request *req)h]jx )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( jsbc.crypto_ahash_digestasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hj,hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(hreqh]hreq}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubah}(h]h ]h"]h$]h&]j<j=uh1jq hjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]h)}(h%calculate message digest for a bufferh]h%calculate message digest for a buffer}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj`hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj{jvj{jwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation **Description** This function is a "short-hand" for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions. **Return** see crypto_ahash_final()h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hgreference to the ahash_request handle that holds all information needed to perform the cipher operationh]hgreference to the ahash_request handle that holds all information needed to perform the cipher operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubh)}(hThis function is a "short-hand" for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions.h]hThis function is a “short-hand” for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_export (C function)c.crypto_ahash_exporthNtauh1hhj hhhNhNubh)}(hhh](h)}(h>int crypto_ahash_export (struct ahash_request *req, void *out)h]h)}(h=int crypto_ahash_export(struct ahash_request *req, void *out)h](j )}(hinth]hint}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjHhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjZhMubj)}(hcrypto_ahash_exporth]j%)}(hcrypto_ahash_exporth]hcrypto_ahash_export}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHhhhjZhMubjr )}(h&(struct ahash_request *req, void *out)h](jx )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjmodnameN classnameNj, j/ )}j2 ]j5 )}j( josbc.crypto_ahash_exportasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hjhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubjx )}(h void *outh](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjJ )}(hjM h]h*}(hj hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjubj%)}(houth]hout}(hj$ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjubeh}(h]h ]h"]h$]h&]j<j=uh1jq hjHhhhjZhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjDhhhjZhMubah}(h]j?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjZhMhjAhhubjS)}(hhh]h)}(h$extract current message digest stateh]h$extract current message digest state}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjK hhubah}(h]h ]h"]h$]h&]uh1jRhjAhhhjZhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujf jvjf jwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct ahash_request *req`` reference to the ahash_request handle whose state is exported ``void *out`` output buffer of sufficient size that can hold the hash state **Description** This function exports the hash state of the ahash_request handle into the caller-allocated output buffer out which must have sufficient size (e.g. by calling crypto_ahash_statesize()). **Return** 0 if the export was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjp h]h Parameters}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjj ubj)}(hhh](j)}(h\``struct ahash_request *req`` reference to the ahash_request handle whose state is exported h](j)}(h``struct ahash_request *req``h]j)}(hj h]hstruct ahash_request *req}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubj)}(hhh]h)}(h=reference to the ahash_request handle whose state is exportedh]h=reference to the ahash_request handle whose state is exported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(hL``void *out`` output buffer of sufficient size that can hold the hash state h](j)}(h ``void *out``h]j)}(hj h]h void *out}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubj)}(hhh]h)}(h=output buffer of sufficient size that can hold the hash stateh]h=output buffer of sufficient size that can hold the hash state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjj ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjj ubh)}(hThis function exports the hash state of the ahash_request handle into the caller-allocated output buffer out which must have sufficient size (e.g. by calling crypto_ahash_statesize()).h]hThis function exports the hash state of the ahash_request handle into the caller-allocated output buffer out which must have sufficient size (e.g. by calling crypto_ahash_statesize()).}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjj ubh)}(h **Return**h]j)}(hj*!h]hReturn}(hj,!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjj ubh)}(h80 if the export was successful; < 0 if an error occurredh]h80 if the export was successful; < 0 if an error occurred}(hj@!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_import (C function)c.crypto_ahash_importhNtauh1hhj hhhNhNubh)}(hhh](h)}(hCint crypto_ahash_import (struct ahash_request *req, const void *in)h]h)}(hBint crypto_ahash_import(struct ahash_request *req, const void *in)h](j )}(hinth]hint}(hjo!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjk!hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj)}(h h]h }(hj~!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjk!hhhj}!hMubj)}(hcrypto_ahash_importh]j%)}(hcrypto_ahash_importh]hcrypto_ahash_import}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjk!hhhj}!hMubjr )}(h+(struct ahash_request *req, const void *in)h](jx )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubh)}(hhh]j%)}(h ahash_requesth]h ahash_request}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj!modnameN classnameNj, j/ )}j2 ]j5 )}j( j!sbc.crypto_ahash_importasbuh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubjJ )}(hjM h]h*}(hj!hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj!ubj%)}(hreqh]hreq}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj!ubjx )}(hconst void *inh](h)}(hj h]hconst}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj+"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj )}(hvoidh]hvoid}(hj9"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"ubj)}(h h]h }(hjG"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubjJ )}(hjM h]h*}(hjU"hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj"ubj%)}(hinh]hin}(hjb"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj!ubeh}(h]h ]h"]h$]h&]j<j=uh1jq hjk!hhhj}!hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjg!hhhj}!hMubah}(h]jb!ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}!hMhjd!hhubjS)}(hhh]h)}(himport message digest stateh]himport message digest state}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1jRhjd!hhhj}!hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj"jvj"jwjxjyuh1hhhhj hNhNubj{)}(hX**Parameters** ``struct ahash_request *req`` reference to ahash_request handle the state is imported into ``const void *in`` buffer holding the state **Description** This function imports the hash state into the ahash_request handle from the input buffer. That buffer should have been generated with the crypto_ahash_export function. **Return** 0 if the import was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM#hj"ubj)}(hhh](j)}(h[``struct ahash_request *req`` reference to ahash_request handle the state is imported into h](j)}(h``struct ahash_request *req``h]j)}(hj"h]hstruct ahash_request *req}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hj"ubj)}(hhh]h)}(hnumber of bytes to process from the source scatter/gather listh]h>number of bytes to process from the source scatter/gather list}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj%1ubeh}(h]h ]h"]h$]h&]uh1jhj 1ubh)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj 1ubh)}(hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.h]hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.}(hj+2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj 1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjE%hhhNhNubeh}(h] asynchronous-hash-request-handleah ]h"] asynchronous hash request handleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSynchronous Message Digest APIh]hSynchronous Message Digest API}(hjL2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI2hhhhhK ubh)}(hThe synchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_SHASH (listed as type "shash" in /proc/crypto)h]hThe synchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_SHASH (listed as type “shash” in /proc/crypto)}(hjZ2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjI2hhubh)}(hLThe message digest API is able to maintain state information for the caller.h]hLThe message digest API is able to maintain state information for the caller.}(hji2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjI2hhubh)}(hkThe synchronous message digest API can store user-related context in its shash_desc request data structure.h]hkThe synchronous message digest API can store user-related context in its shash_desc request data structure.}(hjx2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjI2hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_alloc_shash (C function)c.crypto_alloc_shashhNtauh1hhjI2hhhNhNubh)}(hhh](h)}(hSstruct crypto_shash * crypto_alloc_shash (const char *alg_name, u32 type, u32 mask)h]h)}(hQstruct crypto_shash *crypto_alloc_shash(const char *alg_name, u32 type, u32 mask)h](h)}(hhh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2hhhj2hMubh)}(hhh]j%)}(h crypto_shashh]h crypto_shash}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj2modnameN classnameNj, j/ )}j2 ]j5 )}j( crypto_alloc_shashsbc.crypto_alloc_shashasbuh1hhj2hhhj2hMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2hhhj2hMubjJ )}(hjM h]h*}(hj2hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj2hhhj2hMubj)}(hcrypto_alloc_shashh]j%)}(hj2h]hcrypto_alloc_shash}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj2hhhj2hMubjr )}(h*(const char *alg_name, u32 type, u32 mask)h](jx )}(hconst char *alg_nameh](h)}(hj h]hconst}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hj'3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj )}(hcharh]hchar}(hj53hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(h h]h }(hjC3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubjJ )}(hjM h]h*}(hjQ3hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj3ubj%)}(halg_nameh]halg_name}(hj^3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj3ubjx )}(hu32 typeh](h)}(hhh]j%)}(hu32h]hu32}(hjz3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw3ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj|3modnameN classnameNj, j/ )}j2 ]j2c.crypto_alloc_shashasbuh1hhjs3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs3ubj%)}(htypeh]htype}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj3ubjx )}(hu32 maskh](h)}(hhh]j%)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj3modnameN classnameNj, j/ )}j2 ]j2c.crypto_alloc_shashasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj%)}(hmaskh]hmask}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj3ubeh}(h]h ]h"]h$]h&]j<j=uh1jq hj2hhhj2hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj2hhhj2hMubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj2hMhj2hhubjS)}(hhh]h)}(hallocate message digest handleh]hallocate message digest handle}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jRhj2hhhj2hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj04jvj04jwjxjyuh1hhhhjI2hNhNubj{)}(hXA**Parameters** ``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the message digest cipher ``u32 type`` specifies the type of the cipher ``u32 mask`` specifies the mask for the cipher **Description** Allocate a cipher handle for a message digest. The returned :c:type:`struct crypto_shash ` is the cipher handle that is required for any subsequent API invocation for that message digest. **Return** allocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h](h)}(h**Parameters**h]j)}(hj:4h]h Parameters}(hj<4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj84ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj44ubj)}(hhh](j)}(hn``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the message digest cipher h](j)}(h``const char *alg_name``h]j)}(hjY4h]hconst char *alg_name}(hj[4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjS4ubj)}(hhh]h)}(hTis the cra_name / name or cra_driver_name / driver name of the message digest cipherh]hTis the cra_name / name or cra_driver_name / driver name of the message digest cipher}(hjr4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjo4ubah}(h]h ]h"]h$]h&]uh1jhjS4ubeh}(h]h ]h"]h$]h&]uh1jhjn4hMhjP4ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hj4h]hu32 type}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjP4ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hj4h]hu32 mask}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4ubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjP4ubeh}(h]h ]h"]h$]h&]uh1jhj44ubh)}(h**Description**h]j)}(hj5h]h Description}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj44ubh)}(hAllocate a cipher handle for a message digest. The returned :c:type:`struct crypto_shash ` is the cipher handle that is required for any subsequent API invocation for that message digest.h](h`h]j)}(hj'5h]hstruct crypto_shash}(hj)5hhhNhNubah}(h]h ](jl%joc-typeeh"]h$]h&]uh1jhj%5ubah}(h]h ]h"]h$]h&]refdocjx% refdomainjoreftypetype refexplicitrefwarnj, j~%j% crypto_shashuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj5ubha is the cipher handle that is required for any subsequent API invocation for that message digest.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjD5hMhj44ubh)}(h **Return**h]j)}(hjQ5h]hReturn}(hjS5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj44ubh)}(hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h]hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.}(hjg5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj44ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_free_shash (C function)c.crypto_free_shashhNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h1void crypto_free_shash (struct crypto_shash *tfm)h]h)}(h0void crypto_free_shash(struct crypto_shash *tfm)h](j )}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhj5hMubj)}(hcrypto_free_shashh]j%)}(hcrypto_free_shashh]hcrypto_free_shash}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhj5hMubjr )}(h(struct crypto_shash *tfm)h]jx )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubh)}(hhh]j%)}(h crypto_shashh]h crypto_shash}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj5modnameN classnameNj, j/ )}j2 ]j5 )}j( j5sbc.crypto_free_shashasbuh1hhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubjJ )}(hjM h]h*}(hj6hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj5ubj%)}(htfmh]htfm}(hj,6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj5ubah}(h]h ]h"]h$]h&]j<j=uh1jq hj5hhhj5hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhj5hMubah}(h]j5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj5hMhj5hhubjS)}(hhh]h)}(h*zeroize and free the message digest handleh]h*zeroize and free the message digest handle}(hjV6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjS6hhubah}(h]h ]h"]h$]h&]uh1jRhj5hhhj5hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujn6jvjn6jwjxjyuh1hhhhjI2hNhNubj{)}(h**Parameters** ``struct crypto_shash *tfm`` cipher handle to be freed **Description** If **tfm** is a NULL or error pointer, this function does nothing.h](h)}(h**Parameters**h]j)}(hjx6h]h Parameters}(hjz6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjr6ubj)}(hhh]j)}(h7``struct crypto_shash *tfm`` cipher handle to be freed h](j)}(h``struct crypto_shash *tfm``h]j)}(hj6h]hstruct crypto_shash *tfm}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj6ubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjr6ubh)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjr6ubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hj6hhhNhNubj)}(h**tfm**h]htfm}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh8 is a NULL or error pointer, this function does nothing.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjr6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#crypto_shash_blocksize (C function)c.crypto_shash_blocksizehNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h>unsigned int crypto_shash_blocksize (struct crypto_shash *tfm)h]h)}(h=unsigned int crypto_shash_blocksize(struct crypto_shash *tfm)h](j )}(hunsignedh]hunsigned}(hj)7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%7hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj)}(h h]h }(hj87hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%7hhhj77hMubj )}(hinth]hint}(hjF7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%7hhhj77hMubj)}(h h]h }(hjT7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%7hhhj77hMubj)}(hcrypto_shash_blocksizeh]j%)}(hcrypto_shash_blocksizeh]hcrypto_shash_blocksize}(hjf7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjb7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj%7hhhj77hMubjr )}(h(struct crypto_shash *tfm)h]jx )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj~7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~7ubh)}(hhh]j%)}(h crypto_shashh]h crypto_shash}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj7modnameN classnameNj, j/ )}j2 ]j5 )}j( jh7sbc.crypto_shash_blocksizeasbuh1hhj~7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~7ubjJ )}(hjM h]h*}(hj7hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj~7ubj%)}(htfmh]htfm}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjz7ubah}(h]h ]h"]h$]h&]j<j=uh1jq hj%7hhhj77hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj!7hhhj77hMubah}(h]j7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj77hMhj7hhubjS)}(hhh]h)}(hobtain block size for cipherh]hobtain block size for cipher}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jRhj7hhhj77hMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj8jvj8jwjxjyuh1hhhhjI2hNhNubj{)}(h**Parameters** ``struct crypto_shash *tfm`` cipher handle **Description** The block size for the message digest cipher referenced with the cipher handle is returned. **Return** block size of cipherh](h)}(h**Parameters**h]j)}(hj'8h]h Parameters}(hj)8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj!8ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hjF8h]hstruct crypto_shash *tfm}(hjH8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj@8ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj_8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[8hMhj\8ubah}(h]h ]h"]h$]h&]uh1jhj@8ubeh}(h]h ]h"]h$]h&]uh1jhj[8hMhj=8ubah}(h]h ]h"]h$]h&]uh1jhj!8ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj!8ubh)}(h[The block size for the message digest cipher referenced with the cipher handle is returned.h]h[The block size for the message digest cipher referenced with the cipher handle is returned.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj!8ubh)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj!8ubh)}(hblock size of cipherh]hblock size of cipher}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj!8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$crypto_shash_digestsize (C function)c.crypto_shash_digestsizehNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h?unsigned int crypto_shash_digestsize (struct crypto_shash *tfm)h]h)}(h>unsigned int crypto_shash_digestsize(struct crypto_shash *tfm)h](j )}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM1ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhj8hM1ubj )}(hinth]hint}(hj 9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8hhhj8hM1ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhj8hM1ubj)}(hcrypto_shash_digestsizeh]j%)}(hcrypto_shash_digestsizeh]hcrypto_shash_digestsize}(hj*9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&9ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj8hhhj8hM1ubjr )}(h(struct crypto_shash *tfm)h]jx )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hjF9hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjB9ubj)}(h h]h }(hjS9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB9ubh)}(hhh]j%)}(h crypto_shashh]h crypto_shash}(hjd9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hja9ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjf9modnameN classnameNj, j/ )}j2 ]j5 )}j( j,9sbc.crypto_shash_digestsizeasbuh1hhjB9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB9ubjJ )}(hjM h]h*}(hj9hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjB9ubj%)}(htfmh]htfm}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjB9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj>9ubah}(h]h ]h"]h$]h&]j<j=uh1jq hj8hhhj8hM1ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj8hhhj8hM1ubah}(h]j8ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hM1hj8hhubjS)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM1hj9hhubah}(h]h ]h"]h$]h&]uh1jRhj8hhhj8hM1ubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj9jvj9jwjxjyuh1hhhhjI2hNhNubj{)}(h**Parameters** ``struct crypto_shash *tfm`` cipher handle **Description** The size for the message digest created by the message digest cipher referenced with the cipher handle is returned. **Return** digest size of cipherh](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM5hj9ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj :h]hstruct crypto_shash *tfm}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM2hj:ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj#:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM2hj :ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hM2hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hjE:h]h Description}(hjG:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM4hj9ubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hj[:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM3hj9ubh)}(h **Return**h]j)}(hjl:h]hReturn}(hjn:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM6hj9ubh)}(hdigest size of cipherh]hdigest size of cipher}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM7hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"crypto_shash_descsize (C function)c.crypto_shash_descsizehNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h=unsigned int crypto_shash_descsize (struct crypto_shash *tfm)h]h)}(h(struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h](jx )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(h crypto_shashh]h crypto_shash}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj<modnameN classnameNj, j/ )}j2 ]j5 )}j( j<sbc.crypto_shash_setkeyasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubjJ )}(hjM h]h*}(hj =hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj<ubj%)}(htfmh]htfm}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj<ubjx )}(h const u8 *keyh](h)}(hj h]hconst}(hj3=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/=ubj)}(h h]h }(hj@=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/=ubh)}(hhh]j%)}(hu8h]hu8}(hjQ=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjN=ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjS=modnameN classnameNj, j/ )}j2 ]j<c.crypto_shash_setkeyasbuh1hhj/=ubj)}(h h]h }(hjo=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/=ubjJ )}(hjM h]h*}(hj}=hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj/=ubj%)}(hkeyh]hkey}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj<ubjx )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj )}(hinth]hint}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj%)}(hkeylenh]hkeylen}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj<ubeh}(h]h ]h"]h$]h&]j<j=uh1jq hj<hhhj<hMlubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|<hhhj<hMlubah}(h]jw<ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hMlhjy<hhubjS)}(hhh]h)}(hset key for message digesth]hset key for message digest}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMlhj>hhubah}(h]h ]h"]h$]h&]uh1jRhjy<hhhj<hMlubeh}(h]h ](jofunctioneh"]h$]h&]jtjojuj>jvj>jwjxjyuh1hhhhjI2hNhNubj{)}(hX**Parameters** ``struct crypto_shash *tfm`` cipher handle ``const u8 *key`` buffer holding the key ``unsigned int keylen`` length of the key in bytes **Description** The caller provided key is set for the keyed message digest cipher. The cipher handle must point to a keyed message digest cipher in order for this function to succeed. **Context** Softirq or process context. **Return** 0 if the setting of the key was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hj'>h]h Parameters}(hj)>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMphj!>ubj)}(hhh](j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hjF>h]hstruct crypto_shash *tfm}(hjH>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMmhj@>ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj_>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[>hMmhj\>ubah}(h]h ]h"]h$]h&]uh1jhj@>ubeh}(h]h ]h"]h$]h&]uh1jhj[>hMmhj=>ubj)}(h)``const u8 *key`` buffer holding the key h](j)}(h``const u8 *key``h]j)}(hj>h]h const u8 *key}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMnhjy>ubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMnhj>ubah}(h]h ]h"]h$]h&]uh1jhjy>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMnhj=>ubj)}(h3``unsigned int keylen`` length of the key in bytes h](j)}(h``unsigned int keylen``h]j)}(hj>h]hunsigned int keylen}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMohj>ubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMohj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMohj=>ubeh}(h]h ]h"]h$]h&]uh1jhj!>ubh)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMqhj!>ubh)}(hThe caller provided key is set for the keyed message digest cipher. The cipher handle must point to a keyed message digest cipher in order for this function to succeed.h]hThe caller provided key is set for the keyed message digest cipher. The cipher handle must point to a keyed message digest cipher in order for this function to succeed.}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMphj!>ubh)}(h **Context**h]j)}(hj?h]hContext}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMthj!>ubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hj0?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMuhj!>ubh)}(h **Return**h]j)}(hjA?h]hReturn}(hjC?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj??ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMwhj!>ubh)}(hD0 if the setting of the key was successful; < 0 if an error occurredh]hD0 if the setting of the key was successful; < 0 if an error occurred}(hjW?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMvhj!>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_digest (C function)c.crypto_shash_digesthNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h\int crypto_shash_digest (struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h]h)}(h[int crypto_shash_digest(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hinth]hint}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM|ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?hhhj?hM|ubj)}(hcrypto_shash_digesth]j%)}(hcrypto_shash_digesth]hcrypto_shash_digest}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj?hhhj?hM|ubjr )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](jx )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubh)}(hhh]j%)}(h shash_desch]h shash_desc}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj?modnameN classnameNj, j/ )}j2 ]j5 )}j( j?sbc.crypto_shash_digestasbuh1hhj?ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubjJ )}(hjM h]h*}(hj@hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj?ubj%)}(hdesch]hdesc}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj?ubjx )}(hconst u8 *datah](h)}(hj h]hconst}(hj5@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1@ubj)}(h h]h }(hjB@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1@ubh)}(hhh]j%)}(hu8h]hu8}(hjS@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjP@ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjU@modnameN classnameNj, j/ )}j2 ]j?c.crypto_shash_digestasbuh1hhj1@ubj)}(h h]h }(hjq@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1@ubjJ )}(hjM h]h*}(hj@hhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj1@ubj%)}(hdatah]hdata}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj?ubjx )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj )}(hinth]hint}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj%)}(hlenh]hlen}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj?ubjx )}(hu8 *outh](h)}(hhh]j%)}(hu8h]hu8}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj@modnameN classnameNj, j/ )}j2 ]j?c.crypto_shash_digestasbuh1hhj@ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubjJ )}(hjM h]h*}(hj%AhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj@ubj%)}(houth]hout}(hj2AhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj?ubeh}(h]h ]h"]h$]h&]j<j=uh1jq hj?hhhj?hM|ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~?hhhj?hM|ubah}(h]jy?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj?hM|hj{?hhubjS)}(hhh]h)}(h#calculate message digest for bufferh]h#calculate message digest for buffer}(hj\AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM|hjYAhhubah}(h]h ]h"]h$]h&]uh1jRhj{?hhhj?hM|ubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujtAjvjtAjwjxjyuh1hhhhjI2hNhNubj{)}(hX2**Parameters** ``struct shash_desc *desc`` see crypto_shash_final() ``const u8 *data`` see crypto_shash_update() ``unsigned int len`` see crypto_shash_update() ``u8 *out`` see crypto_shash_final() **Description** This function is a "short-hand" for the function calls of crypto_shash_init, crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate three functions. **Context** Softirq or process context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hj~Ah]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Aubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hjAh]hstruct shash_desc *desc}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM}hjAubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM}hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM}hjAubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjAh]hconst u8 *data}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM~hjAubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM~hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM~hjAubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hjBh]hunsigned int len}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Bubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj Bubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hj(BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$BhMhj%Bubah}(h]h ]h"]h$]h&]uh1jhj Bubeh}(h]h ]h"]h$]h&]uh1jhj$BhMhjAubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjHBh]hu8 *out}(hjJBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFBubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjBBubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjaBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]BhMhj^Bubah}(h]h ]h"]h$]h&]uh1jhjBBubeh}(h]h ]h"]h$]h&]uh1jhj]BhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjxAubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubh)}(hThis function is a "short-hand" for the function calls of crypto_shash_init, crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate three functions.h]hThis function is a “short-hand” for the function calls of crypto_shash_init, crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate three functions.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubh)}(h **Context**h]j)}(hjBh]hContext}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubh)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubh)}(hI0 if the message digest creation was successful; < 0 if an error occurredh]hI0 if the message digest creation was successful; < 0 if an error occurred}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjxAubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_export (C function)c.crypto_shash_exporthNtauh1hhjI2hhhNhNubh)}(hhh](h)}(hIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(h **Return**h]j)}(hjOIh]hReturn}(hjQIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(hO0 if the message digest initialization was successful; < 0 if an error occurredh]hO0 if the message digest initialization was successful; < 0 if an error occurred}(hjeIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_shash_finup (C function)c.crypto_shash_finuphNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h[int crypto_shash_finup (struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h]h)}(hZint crypto_shash_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hinth]hint}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIhhhjIhMubj)}(hcrypto_shash_finuph]j%)}(hcrypto_shash_finuph]hcrypto_shash_finup}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjIhhhjIhMubjr )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](jx )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(h shash_desch]h shash_desc}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjImodnameN classnameNj, j/ )}j2 ]j5 )}j( jIsbc.crypto_shash_finupasbuh1hhjIubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubjJ )}(hjM h]h*}(hjJhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjIubj%)}(hdesch]hdesc}(hj*JhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjIubjx )}(hconst u8 *datah](h)}(hj h]hconst}(hjCJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?Jubj)}(h h]h }(hjPJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?Jubh)}(hhh]j%)}(hu8h]hu8}(hjaJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^Jubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjcJmodnameN classnameNj, j/ )}j2 ]j Jc.crypto_shash_finupasbuh1hhj?Jubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?JubjJ )}(hjM h]h*}(hjJhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj?Jubj%)}(hdatah]hdata}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?Jubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjIubjx )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj )}(hinth]hint}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj%)}(hlenh]hlen}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjIubjx )}(hu8 *outh](h)}(hhh]j%)}(hu8h]hu8}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetj KmodnameN classnameNj, j/ )}j2 ]j Jc.crypto_shash_finupasbuh1hhjKubj)}(h h]h }(hj%KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubjJ )}(hjM h]h*}(hj3KhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjKubj%)}(houth]hout}(hj@KhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjIubeh}(h]h ]h"]h$]h&]j<j=uh1jq hjIhhhjIhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjIhhhjIhMubah}(h]jIah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjIhMhjIhhubjS)}(hhh]h)}(h"calculate message digest of bufferh]h"calculate message digest of buffer}(hjjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjgKhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhjIhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujKjvjKjwjxjyuh1hhhhjI2hNhNubj{)}(hX**Parameters** ``struct shash_desc *desc`` see crypto_shash_final() ``const u8 *data`` see crypto_shash_update() ``unsigned int len`` see crypto_shash_update() ``u8 *out`` see crypto_shash_final() **Description** This function is a "short-hand" for the function calls of crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate functions. **Context** Softirq or process context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hjKh]hstruct shash_desc *desc}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjKh]hconst u8 *data}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hjLh]hunsigned int len}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjLubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hj6LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2LhMhj3Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj2LhMhjKubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjVLh]hu8 *out}(hjXLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjPLubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjoLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkLhMhjlLubah}(h]h ]h"]h$]h&]uh1jhjPLubeh}(h]h ]h"]h$]h&]uh1jhjkLhMhjKubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**wRh]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(hThis function is a "short-hand" for the function calls of crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate functions.h]hThis function is a “short-hand” for the function calls of crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate functions.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(h **Context**h]j)}(hjLh]hContext}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(h **Return**h]j)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(hI0 if the message digest creation was successful; < 0 if an error occurredh]hI0 if the message digest creation was successful; < 0 if an error occurred}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_update (C function)c.crypto_shash_updatehNtauh1hhjI2hhhNhNubh)}(hhh](h)}(hSint crypto_shash_update (struct shash_desc *desc, const u8 *data, unsigned int len)h]h)}(hRint crypto_shash_update(struct shash_desc *desc, const u8 *data, unsigned int len)h](j )}(hinth]hint}(hj$MhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj MhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj)}(h h]h }(hj3MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Mhhhj2MhMubj)}(hcrypto_shash_updateh]j%)}(hcrypto_shash_updateh]hcrypto_shash_update}(hjEMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAMubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj Mhhhj2MhMubjr )}(h;(struct shash_desc *desc, const u8 *data, unsigned int len)h](jx )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjaMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]Mubj)}(h h]h }(hjnMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]Mubh)}(hhh]j%)}(h shash_desch]h shash_desc}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|Mubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjMmodnameN classnameNj, j/ )}j2 ]j5 )}j( jGMsbc.crypto_shash_updateasbuh1hhj]Mubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]MubjJ )}(hjM h]h*}(hjMhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj]Mubj%)}(hdesch]hdesc}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]Mubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjYMubjx )}(hconst u8 *datah](h)}(hj h]hconst}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hhh]j%)}(hu8h]hu8}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjMmodnameN classnameNj, j/ )}j2 ]jMc.crypto_shash_updateasbuh1hhjMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubjJ )}(hjM h]h*}(hjNhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjMubj%)}(hdatah]hdata}(hj*NhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjYMubjx )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjCNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?Nubj)}(h h]h }(hjQNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?Nubj )}(hinth]hint}(hj_NhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?Nubj)}(h h]h }(hjmNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?Nubj%)}(hlenh]hlen}(hj{NhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?Nubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hjYMubeh}(h]h ]h"]h$]h&]j<j=uh1jq hj Mhhhj2MhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhj2MhMubah}(h]jMah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj2MhMhjMhhubjS)}(hhh]h)}(h)add data to message digest for processingh]h)add data to message digest for processing}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1jRhjMhhhj2MhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujNjvjNjwjxjyuh1hhhhjI2hNhNubj{)}(hX**Parameters** ``struct shash_desc *desc`` operational state handle that is already initialized ``const u8 *data`` input data to be added to the message digest ``unsigned int len`` length of the input data **Description** Updates the message digest state of the operational state handle. **Context** Softirq or process context. **Return** 0 if the message digest update was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubj)}(hhh](j)}(hQ``struct shash_desc *desc`` operational state handle that is already initialized h](j)}(h``struct shash_desc *desc``h]j)}(hjNh]hstruct shash_desc *desc}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubj)}(hhh]h)}(h4operational state handle that is already initializedh]h4operational state handle that is already initialized}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubj)}(h@``const u8 *data`` input data to be added to the message digest h](j)}(h``const u8 *data``h]j)}(hjOh]hconst u8 *data}(hj!OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjOubj)}(hhh]h)}(h,input data to be added to the message digesth]h,input data to be added to the message digest}(hj8OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4OhMhj5Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj4OhMhjNubj)}(h.``unsigned int len`` length of the input data h](j)}(h``unsigned int len``h]j)}(hjXOh]hunsigned int len}(hjZOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjROubj)}(hhh]h)}(hlength of the input datah]hlength of the input data}(hjqOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmOhMhjnOubah}(h]h ]h"]h$]h&]uh1jhjROubeh}(h]h ]h"]h$]h&]uh1jhjmOhMhjNubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(hAUpdates the message digest state of the operational state handle.h]hAUpdates the message digest state of the operational state handle.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(h **Context**h]j)}(hjOh]hContext}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(hG0 if the message digest update was successful; < 0 if an error occurredh]hG0 if the message digest update was successful; < 0 if an error occurred}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jzhjI2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_shash_final (C function)c.crypto_shash_finalhNtauh1hhjI2hhhNhNubh)}(hhh](h)}(h9int crypto_shash_final (struct shash_desc *desc, u8 *out)h]h)}(h8int crypto_shash_final(struct shash_desc *desc, u8 *out)h](j )}(hinth]hint}(hj&PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"PhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj)}(h h]h }(hj5PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"Phhhj4PhMubj)}(hcrypto_shash_finalh]j%)}(hcrypto_shash_finalh]hcrypto_shash_final}(hjGPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCPubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"Phhhj4PhMubjr )}(h"(struct shash_desc *desc, u8 *out)h](jx )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjcPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj_Pubj)}(h h]h }(hjpPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Pubh)}(hhh]j%)}(h shash_desch]h shash_desc}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~Pubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjPmodnameN classnameNj, j/ )}j2 ]j5 )}j( jIPsbc.crypto_shash_finalasbuh1hhj_Pubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_PubjJ )}(hjM h]h*}(hjPhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hj_Pubj%)}(hdesch]hdesc}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_Pubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj[Pubjx )}(hu8 *outh](h)}(hhh]j%)}(hu8h]hu8}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjoreftypej( reftargetjPmodnameN classnameNj, j/ )}j2 ]jPc.crypto_shash_finalasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubjJ )}(hjM h]h*}(hjQhhhNhNubah}(h]h ]jV ah"]h$]h&]uh1jI hjPubj%)}(houth]hout}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jw hj[Pubeh}(h]h ]h"]h$]h&]j<j=uh1jq hj"Phhhj4PhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjPhhhj4PhMubah}(h]jPah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj4PhMhjPhhubjS)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hj;QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj8Qhhubah}(h]h ]h"]h$]h&]uh1jRhjPhhhj4PhMubeh}(h]h ](jofunctioneh"]h$]h&]jtjojujSQjvjSQjwjxjyuh1hhhhjI2hNhNubj{)}(hX=**Parameters** ``struct shash_desc *desc`` operational state handle that is already filled with data ``u8 *out`` output buffer filled with the message digest **Description** Finalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer. The caller must ensure that the output buffer is large enough by using crypto_shash_digestsize. **Context** Softirq or process context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hj]Qh]h Parameters}(hj_QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Qubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjWQubj)}(hhh](j)}(hV``struct shash_desc *desc`` operational state handle that is already filled with data h](j)}(h``struct shash_desc *desc``h]j)}(hj|Qh]hstruct shash_desc *desc}(hj~QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjvQubj)}(hhh]h)}(h9operational state handle that is already filled with datah]h9operational state handle that is already filled with data}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjvQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjsQubj)}(h9``u8 *out`` output buffer filled with the message digest h](j)}(h ``u8 *out``h]j)}(hjQh]hu8 *out}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjQubj)}(hhh]h)}(h,output buffer filled with the message digesth]h,output buffer filled with the message digest}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjsQubeh}(h]h ]h"]h$]h&]uh1jhjWQubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjWQubh)}(hXFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer. The caller must ensure that the output buffer is large enough by using crypto_shash_digestsize.h]hXFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer. The caller must ensure that the output buffer is large enough by using crypto_shash_digestsize.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjWQubh)}(h **Context**h]j)}(hjRh]hContext}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjWQubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hj-RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjWQubh)}(h **Return**h]j)}(hj>Rh]hReturn}(hj@RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj