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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/pt_BR/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}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKubhdesc_sig_space)}(h h]h }(hj#hhhNhNubah}(h]h ]wah"]h$]h&]uh1j!hj hhhj hKubh desc_name)}(h ahash_algh]h desc_sig_name)}(hjh]h ahash_alg}(hj:hhhNhNubah}(h]h ]nah"]h$]h&]uh1j8hj4ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j2hj hhhj hKubeh}(h]h ]h"]h$]h&]jPjQ add_permalinkuh1j sphinx_line_type declaratorhjhhhj hKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj hKhjhhubh desc_content)}(hhh]h)}(h&asynchronous message digest definitionh]h&asynchronous message digest definition}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKLhjhhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhj hKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1hhhhhhNhNubh container)}(hX**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); 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**. ``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.hhKPhjubh literal_block)}(hXstruct 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); struct hash_alg_common halg; };h]hXstruct 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); struct hash_alg_common halg; };}hjsbah}(h]h ]h"]h$]h&]jPjQuh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKRhjubh)}(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.hhKbhjubhdefinition_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]}(hj hhhNhNubah}(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)}(hj7h]hupdate}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK^hj1ubj)}(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]}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubhXu 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, }(hjPhhhNhNubj)}(h **update**h]hupdate}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubhJ must return the number of bytes to store in the API partial block buffer.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKShjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhK^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)}(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.hhKchjubj)}(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&]uh1jhjubeh}(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}(hj,hhhNhNubah}(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}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }hjsbj)}(h **final**h]hfinal}(hjbhhhNhNubah}(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)}(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.hhKohjubj)}(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}(hj,hhhNhNubah}(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&]uh1jhjubeh}(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)}(hjWh]hexport}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjQubj)}(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 }(hjphhhNhNubj)}(h **import**h]himport}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubhX! ‘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.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK}hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjubj)}(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.}(hj0hhhNhNubah}(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)}(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)}(hjQh]hsetkey}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhK|hjKubj)}(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 }(hjjhhhNhNubj)}(h**init**h]hinit}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh, }(hjjhhhNhNubj)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh, }hjjsbj)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh, }hjjsbj)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh, }hjjsbj)}(h **digest**h]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh5 is called. No data processing happens at this point.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKphjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhK|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)}(hjh]hexit_tfm}(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)}(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 }(hj8hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh(, used to remove various changes set in }(hj8hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hj}h]hhalg}(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.hhKhjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hshash_alg (C struct) c.shash_alghNtauh1hhhhhhNhNubh)}(hhh](j)}(h shash_algh]j )}(hstruct shash_algh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhKubj3)}(h shash_algh]j9)}(hjh]h shash_alg}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhKubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhKubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhKhjhhubjg)}(hhh]h)}(h%synchronous message digest definitionh]h%synchronous message digest definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjj1jj1jjjuh1hhhhhhNhNubj)}(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); 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**. ``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}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh:}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj5ubj)}(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); 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); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; };}hjVsbah}(h]h ]h"]h$]h&]jPjQuh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj5ubh)}(h **Members**h]j)}(hjgh]hMembers}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj5ubj)}(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&]uh1jhjhKhj}ubj)}(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&]uh1jhjhKhj}ubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj}ubj)}(h``finup`` see struct ahash_alg h](j)}(h ``finup``h]j)}(hj1h]hfinup}(hj3hhhNhNubah}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKhj}ubj)}(h ``digest`` see struct ahash_alg h](j)}(h ``digest``h]j)}(hjjh]hdigest}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjdubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKhj}ubj)}(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&]uh1jhjhKhj}ubj)}(h ``import`` see struct ahash_alg 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)}(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&]uh1jhjhKhj}ubj)}(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&]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* hKhj}ubj)}(h%``import_core`` see struct ahash_alg h](j)}(h``import_core``h]j)}(hjN h]h import_core}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjH ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc hKhjd ubah}(h]h ]h"]h$]h&]uh1jhjH ubeh}(h]h ]h"]h$]h&]uh1jhjc hKhj}ubj)}(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 hKhj}ubj)}(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 hKhj}ubj)}(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 }(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj}ubj)}(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)}(hjX h]hdescsize}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjR 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}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjn ubah}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]uh1jhjm hKhj}ubj)}(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 hKhj}ubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj}ubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hj h]hhalg}(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}(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 hKhj}ubeh}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h]$message-digest-algorithm-definitionsah ]h"]$message digest algorithm definitionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hAsynchronous Message Digest APIh]hAsynchronous Message Digest API}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM 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.hhMhjM 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.}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM hjM hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_alloc_ahash (C function)c.crypto_alloc_ahashhNtauh1hhjM hhhNhNubh)}(hhh](j)}(hSstruct crypto_ahash * crypto_alloc_ahash (const char *alg_name, u32 type, u32 mask)h]j )}(hQstruct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type, u32 mask)h](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM1ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhj hM1ubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j crypto_alloc_ahashsbc.crypto_alloc_ahashasbuh1hhj hhhj hM1ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhj hM1ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj hhhj hM1ubj3)}(hcrypto_alloc_ahashh]j9)}(hj h]hcrypto_alloc_ahash}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj hhhj hM1ubhdesc_parameterlist)}(h*(const char *alg_name, u32 type, u32 mask)h](hdesc_parameter)}(hconst char *alg_nameh](j)}(hconsth]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj")}(h h]h }(hj- hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubhdesc_sig_keyword_type)}(hcharh]hchar}(hj= hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j; hj ubj")}(h h]h }(hjL hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj )}(hj h]h*}(hjZ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj9)}(halg_nameh]halg_name}(hjg hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj ubj )}(hu32 typeh](h)}(hhh]j9)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j c.crypto_alloc_ahashasbuh1hhj| ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj| ubj9)}(htypeh]htype}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj| ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj ubj )}(hu32 maskh](h)}(hhh]j9)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j c.crypto_alloc_ahashasbuh1hhj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj9)}(hmaskh]hmask}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj hhhj hM1ubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj hhhj hM1ubah}(h]j ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj hM1hj hhubjg)}(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.hhM1hj hhubah}(h]h ]h"]h$]h&]uh1jfhj hhhj hM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9 jj9 jjjuh1hhhhjM 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)}(hjC h]h Parameters}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM5hj= 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)}(hjb h]hconst char *alg_name}(hjd 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.hhM3hj\ 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.hhM2hjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw hM3hjY 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.hhM4hj ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM4hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM4hjY ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hj h]hu32 mask}(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.hhM5hj ubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM5hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM5hjY ubeh}(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.hhM7hj= 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.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM6hj= ubh)}(h **Return**h]j)}(hj7h]hReturn}(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.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.}(hjMhhhNhNubah}(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&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_free_ahash (C function)c.crypto_free_ahashhNtauh1hhjM hhhNhNubh)}(hhh](j)}(h1void crypto_free_ahash (struct crypto_ahash *tfm)h]j )}(h0void crypto_free_ahash(struct crypto_ahash *tfm)h](j< )}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjxhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMGubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjxhhhjhMGubj3)}(hcrypto_free_ahashh]j9)}(hcrypto_free_ahashh]hcrypto_free_ahash}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjxhhhjhMGubj )}(h(struct crypto_ahash *tfm)h]j )}(hstruct crypto_ahash *tfmh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.crypto_free_ahashasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj9)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubah}(h]h ]h"]h$]h&]jPjQuh1j hjxhhhjhMGubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjthhhjhMGubah}(h]joah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMGhjqhhubjg)}(hhh]h)}(h!zeroize and free the ahash handleh]h!zeroize and free the ahash handle}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMGhj9hhubah}(h]h ]h"]h$]h&]uh1jfhjqhhhjhMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1hhhhjM 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)}(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.hhMKhjXubj)}(hhh]j)}(h7``struct crypto_ahash *tfm`` cipher handle to be freed h](j)}(h``struct crypto_ahash *tfm``h]j)}(hj}h]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(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.hhMHhjwubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjtubah}(h]h ]h"]h$]h&]uh1jhjXubh)}(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.hhMJhjXubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hjhhhNhNubj)}(h**tfm**h]htfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 is a NULL or error pointer, this function does nothing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMIhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$crypto_ahash_digestsize (C function)c.crypto_ahash_digestsizehNtauh1hhjM hhhNhNubh)}(hhh](j)}(h?unsigned int crypto_ahash_digestsize (struct crypto_ahash *tfm)h]j )}(h>unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm)h](j< )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhjhMubj< )}(hinth]hint}(hj,hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj hhhjhMubj")}(h h]h }(hj:hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhjhMubj3)}(hcrypto_ahash_digestsizeh]j9)}(hcrypto_ahash_digestsizeh]hcrypto_ahash_digestsize}(hjLhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj hhhjhMubj )}(h(struct crypto_ahash *tfm)h]j )}(hstruct crypto_ahash *tfmh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj")}(h h]h }(hjuhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjdubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jNsbc.crypto_ahash_digestsizeasbuh1hhjdubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjdubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdubj9)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj`ubah}(h]h ]h"]h$]h&]jPjQuh1j hj hhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjhhubjg)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(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&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjM 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)}(hj h]h Parameters}(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.hhMhjubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hj,h]hstruct crypto_ahash *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:19: ./include/crypto/hash.hhMhj&ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(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:19: ./include/crypto/hash.hhMhjubh)}(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.hhMhjubh)}(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.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#crypto_ahash_statesize (C function)c.crypto_ahash_statesizehNtauh1hhjM hhhNhNubh)}(hhh](j)}(h>unsigned int crypto_ahash_statesize (struct crypto_ahash *tfm)h]j )}(h=unsigned int crypto_ahash_statesize(struct crypto_ahash *tfm)h](j< )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jH 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 ]j.ah"]h$]h&]uh1j!hjhhhjhMubj< )}(hinth]hint}(hjhhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjhhhjhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubj3)}(hcrypto_ahash_statesizeh]j9)}(hcrypto_ahash_statesizeh]hcrypto_ahash_statesize}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhMubj )}(h(struct crypto_ahash *tfm)h]j )}(hstruct crypto_ahash *tfmh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj")}(h h]h }(hj9hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj(ubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNj j )}j ]j )}j jsbc.crypto_ahash_statesizeasbuh1hhj(ubj")}(h h]h }(hjjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj(ubj )}(hj h]h*}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubj9)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj(ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj$ubah}(h]h ]h"]h$]h&]jPjQuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjhhubjg)}(hhh]h)}(hobtain size of the ahash stateh]hobtain size of the ahash state}(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&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjM 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)}(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)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(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.hhMhjubh)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h **Return**h]j)}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hsize of the ahash stateh]hsize of the ahash state}(hjhhhhNhNubah}(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&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_reqtfm (C function)c.crypto_ahash_reqtfmhNtauh1hhjM hhhNhNubh)}(hhh](j)}(hEstruct crypto_ahash * crypto_ahash_reqtfm (struct ahash_request *req)h]j )}(hCstruct crypto_ahash *crypto_ahash_reqtfm(struct ahash_request *req)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j crypto_ahash_reqtfmsbc.crypto_ahash_reqtfmasbuh1hhjhhhjhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj3)}(hcrypto_ahash_reqtfmh]j9)}(hjh]hcrypto_ahash_reqtfm}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhMubj )}(h(struct ahash_request *req)h]j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNj j )}j ]jc.crypto_ahash_reqtfmasbuh1hhj ubj")}(h h]h }(hjMhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj )}(hj h]h*}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj9)}(hreqh]hreq}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj ubah}(h]h ]h"]h$]h&]jPjQuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjhhubjg)}(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&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjM 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.hhMhjubj)}(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)}(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)}(hRasynchronous request handle that contains the reference to the ahash cipher handleh]hRasynchronous request handle that contains the reference to the ahash cipher handle}(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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(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.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h **Return**h]j)}(hj6h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hahash cipher handleh]hahash cipher handle}(hjLhhhNhNubah}(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&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!crypto_ahash_reqsize (C function)c.crypto_ahash_reqsizehNtauh1hhjM hhhNhNubh)}(hhh](j)}(h(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h](j )}(hstruct crypto_ahash *tfmh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj")}(h h]h }(hjbhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjQubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hjshhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNj j )}j ]j )}j j;sbc.crypto_ahash_setkeyasbuh1hhjQubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjQubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQubj9)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjQubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjMubj )}(h const u8 *keyh](j)}(hj! h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j9)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.crypto_ahash_setkeyasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj9)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjMubj )}(hunsigned int keylenh](j< )}(hunsignedh]hunsigned}(hj7hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj3ubj")}(h h]h }(hjEhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3ubj< )}(hinth]hint}(hjShhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj3ubj")}(h h]h }(hjahhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3ubj9)}(hkeylenh]hkeylen}(hjohhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjMubeh}(h]h ]h"]h$]h&]jPjQuh1j hjhhhj&hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhj&hMubah}(h]j ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj&hMhj hhubjg)}(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&]uh1jfhj hhhj&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjM 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)}(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&]uh1jhjhMhjubj)}(h)``const u8 *key`` buffer holding the key h](j)}(h``const u8 *key``h]j)}(hjh]h const u8 *key}(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.hhMhj ubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(h3``unsigned int keylen`` length of the key in bytes h](j)}(h``unsigned int keylen``h]j)}(hjLh]hunsigned int keylen}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjFubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubeh}(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)}(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.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}(hjhhhNhNubah}(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&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_ahash_finup (C function)c.crypto_ahash_finuphNtauh1hhjM hhhNhNubh)}(hhh](j)}(h2int crypto_ahash_finup (struct ahash_request *req)h]j )}(h1int crypto_ahash_finup(struct ahash_request *req)h](j< )}(hinth]hint}(hjhhhNhNubah}(h]h ]jH 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 ]j.ah"]h$]h&]uh1j!hjhhhjhMubj3)}(hcrypto_ahash_finuph]j9)}(hcrypto_ahash_finuph]hcrypto_ahash_finup}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhMubj )}(h(struct ahash_request *req)h]j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj,ubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNj j )}j ]j )}j jsbc.crypto_ahash_finupasbuh1hhj,ubj")}(h h]h }(hjnhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj,ubj )}(hj h]h*}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj(ubah}(h]h ]h"]h$]h&]jPjQuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjhhubjg)}(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&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjM 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)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(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)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(h **Return**h]j)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hjmhhhNhNubah}(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&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_ahash_final (C function)c.crypto_ahash_finalhNtauh1hhjM hhhNhNubh)}(hhh](j)}(h2int crypto_ahash_final (struct ahash_request *req)h]j )}(h1int crypto_ahash_final(struct ahash_request *req)h](j< )}(hinth]hint}(hjhhhNhNubah}(h]h ]jH 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 ]j.ah"]h$]h&]uh1j!hjhhhjhMubj3)}(hcrypto_ahash_finalh]j9)}(hcrypto_ahash_finalh]hcrypto_ahash_final}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhMubj )}(h(struct ahash_request *req)h]j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.crypto_ahash_finalasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj )}(hj h]h*}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj9)}(hreqh]hreq}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubah}(h]h ]h"]h$]h&]jPjQuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjhhubjg)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjYhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1hhhhjM 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)}(hj~h]h Parameters}(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.hhMhjxubj)}(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&]uh1jhjxubh)}(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.hhMhjxubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjxubh)}(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.hhMhjxubh)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_digest (C function)c.crypto_ahash_digesthNtauh1hhjM hhhNhNubh)}(hhh](j)}(h3int crypto_ahash_digest (struct ahash_request *req)h]j )}(h2int crypto_ahash_digest(struct ahash_request *req)h](j< )}(hinth]hint}(hjEhhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjAhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj")}(h h]h }(hjThhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjAhhhjShMubj3)}(hcrypto_ahash_digesth]j9)}(hcrypto_ahash_digesth]hcrypto_ahash_digest}(hjfhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjbubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjAhhhjShMubj )}(h(struct ahash_request *req)h]j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj~ubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jhsbc.crypto_ahash_digestasbuh1hhj~ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj~ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjzubah}(h]h ]h"]h$]h&]jPjQuh1j hjAhhhjShMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj=hhhjShMubah}(h]j8ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjShMhj:hhubjg)}(hhh]h)}(h%calculate message digest for a bufferh]h%calculate message digest for a buffer}(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&]uh1jfhj:hhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhjM 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)}(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.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)}(hjFh]hstruct ahash_request *req}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj@ubj)}(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}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubah}(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_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.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&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_export (C function)c.crypto_ahash_exporthNtauh1hhjM hhhNhNubh)}(hhh](j)}(h>int crypto_ahash_export (struct ahash_request *req, void *out)h]j )}(h=int crypto_ahash_export(struct ahash_request *req, void *out)h](j< )}(hinth]hint}(hjhhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhM ubj3)}(hcrypto_ahash_exporth]j9)}(hcrypto_ahash_exporth]hcrypto_ahash_export}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhM ubj )}(h&(struct ahash_request *req, void *out)h](j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj")}(h h]h }(hj8hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj'ubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNj j )}j ]j )}j jsbc.crypto_ahash_exportasbuh1hhj'ubj")}(h h]h }(hjihhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj'ubj )}(hj h]h*}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj'ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj#ubj )}(h void *outh](j< )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj9)}(houth]hout}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj#ubeh}(h]h ]h"]h$]h&]jPjQuh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhM ubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhM hjhhubjg)}(hhh]h)}(h$extract current message digest stateh]h$extract current message digest state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhjM 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)}(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.hhMhj 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)}(hj1 h]hstruct ahash_request *req}(hj3 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)}(h=reference to the ahash_request handle whose state is exportedh]h=reference to the ahash_request handle whose state is exported}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF hM hjG ubah}(h]h ]h"]h$]h&]uh1jhj+ ubeh}(h]h ]h"]h$]h&]uh1jhjF hM hj( ubj)}(hL``void *out`` output buffer of sufficient size that can hold the hash state h](j)}(h ``void *out``h]j)}(hjj h]h void *out}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjd 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&]uh1jhjd ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj( 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:19: ./include/crypto/hash.hhMhj 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.hhMhj 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.hhMhj 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.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjM hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_import (C function)c.crypto_ahash_importhNtauh1hhjM hhhNhNubh)}(hhh](j)}(hCint crypto_ahash_import (struct ahash_request *req, const void *in)h]j )}(hBint crypto_ahash_import(struct ahash_request *req, const void *in)h](j< )}(hinth]hint}(hj!hhhNhNubah}(h]h ]jH 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 ]j.ah"]h$]h&]uh1j!hj !hhhj!hMubj3)}(hcrypto_ahash_importh]j9)}(hcrypto_ahash_importh]hcrypto_ahash_import}(hj2!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.!ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj !hhhj!hMubj )}(h+(struct ahash_request *req, const void *in)h](j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hjN!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ!ubj")}(h h]h }(hj[!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjJ!ubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hjl!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hji!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjn!modnameN classnameNj j )}j ]j )}j j4!sbc.crypto_ahash_importasbuh1hhjJ!ubj")}(h h]h }(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjJ!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJ!ubj9)}(hreqh]hreq}(hj!hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJ!ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjF!ubj )}(hconst void *inh](j)}(hj! h]hconst}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj")}(h h]h }(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj!ubj< )}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj!ubj")}(h h]h }(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj!ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!ubj9)}(hinh]hin}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj!ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjF!ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj !hhhj!hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj !hhhj!hMubah}(h]j!ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj!hMhj!hhubjg)}(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&]uh1jfhj!hhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjF"jjF"jjjuh1hhhhjM 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)}(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 ahash_request handle the state is imported into h](j)}(h``struct ahash_request *req``h]j)}(hjo"h]hstruct ahash_request *req}(hjq"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhji"ubj)}(hhh]h)}(h-ubah}(h]h ]h"]h$]h&]uh1jhj"-ubeh}(h]h ]h"]h$]h&]uh1jhj=-hMhj-ubj)}(h``u32 flags`` specify zero or an ORing of the flags CRYPTO_TFM_REQ_MAY_BACKLOG the request queue may back log and increase the wait queue beyond the initial maximum size; CRYPTO_TFM_REQ_MAY_SLEEP the request processing may sleep h](j)}(h ``u32 flags``h]j)}(hja-h]h u32 flags}(hjc-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj[-ubj)}(hhh]h)}(hspecify zero or an ORing of the flags CRYPTO_TFM_REQ_MAY_BACKLOG the request queue may back log and increase the wait queue beyond the initial maximum size; CRYPTO_TFM_REQ_MAY_SLEEP the request processing may sleeph]hspecify zero or an ORing of the flags CRYPTO_TFM_REQ_MAY_BACKLOG the request queue may back log and increase the wait queue beyond the initial maximum size; CRYPTO_TFM_REQ_MAY_SLEEP the request processing may sleep}(hjz-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhjw-ubah}(h]h ]h"]h$]h&]uh1jhj[-ubeh}(h]h ]h"]h$]h&]uh1jhjv-hMhj-ubj)}(ha``crypto_completion_t compl`` callback function pointer to be registered with the request handle h](j)}(h``crypto_completion_t compl``h]j)}(hj-h]hcrypto_completion_t compl}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubj)}(hhh]h)}(hBcallback function pointer to be registered with the request handleh]hBcallback function pointer to be registered with the request handle}(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)}(hXC``void *data`` The data pointer refers to memory that is not used by the kernel crypto API, but provided to the callback function for it to use. Here, the caller can provide a reference to memory the callback function can operate on. As the callback function is invoked asynchronously to the related functionality, it may need to access data structures of the related functionality which can be referenced using this pointer. The callback function can access the memory via the "data" field in the :c:type:`crypto_async_request` data structure provided to the callback function. h](j)}(h``void *data``h]j)}(hj-h]h void *data}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubj)}(hhh]h)}(hX3The data pointer refers to memory that is not used by the kernel crypto API, but provided to the callback function for it to use. Here, the caller can provide a reference to memory the callback function can operate on. As the callback function is invoked asynchronously to the related functionality, it may need to access data structures of the related functionality which can be referenced using this pointer. The callback function can access the memory via the "data" field in the :c:type:`crypto_async_request` data structure provided to the callback function.h](hXThe data pointer refers to memory that is not used by the kernel crypto API, but provided to the callback function for it to use. Here, the caller can provide a reference to memory the callback function can operate on. As the callback function is invoked asynchronously to the related functionality, it may need to access data structures of the related functionality which can be referenced using this pointer. The callback function can access the memory via the “data” field in the }(hj-hhhNhNubh)}(h:c:type:`crypto_async_request`h]j)}(hj-h]hcrypto_async_request}(hj-hhhNhNubah}(h]h ](j%jc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj% refdomainjreftypetype refexplicitrefwarnj j %j#%crypto_async_requestuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubh2 data structure provided to the callback function.}(hj-hhhNhNubeh}(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&]uh1jhj-ubh)}(h**Description**h]j)}(hj3.h]h Description}(hj5.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1.ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubh)}(hiThis function allows setting the callback function that is triggered once the cipher operation completes.h]hiThis function allows setting the callback function that is triggered once the cipher operation completes.}(hjI.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubh)}(hyThe callback function is registered with the :c:type:`ahash_request` handle and must comply with the following template::h](h-The callback function is registered with the }(hjX.hhhNhNubh)}(h:c:type:`ahash_request`h]j)}(hjb.h]h ahash_request}(hjd.hhhNhNubah}(h]h ](j%jc-typeeh"]h$]h&]uh1jhj`.ubah}(h]h ]h"]h$]h&]refdocj% refdomainjreftypetype refexplicitrefwarnj j %j#% ahash_requestuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhjX.ubh4 handle and must comply with the following template:}(hjX.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMhj-ubj)}(hCvoid callback_function(struct crypto_async_request *req, int error)h]hCvoid callback_function(struct crypto_async_request *req, int error)}hj.sbah}(h]h ]h"]h$]h&]jPjQuh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$ahash_request_set_crypt (C function)c.ahash_request_set_crypthNtauh1hhj$hhhNhNubh)}(hhh](j)}(hrvoid ahash_request_set_crypt (struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h]j )}(hqvoid ahash_request_set_crypt(struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h](j< )}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj.hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMubj")}(h h]h }(hj.hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj.hhhj.hMubj3)}(hahash_request_set_crypth]j9)}(hahash_request_set_crypth]hahash_request_set_crypt}(hj.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj.hhhj.hMubj )}(hU(struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h](j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj")}(h h]h }(hj/hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj.ubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNj j )}j ]j )}j j.sbc.ahash_request_set_cryptasbuh1hhj.ubj")}(h h]h }(hj4/hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj.ubj )}(hj h]h*}(hjB/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj.ubj9)}(hreqh]hreq}(hjO/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj.ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj.ubj )}(hstruct scatterlist *srch](j)}(hjh]hstruct}(hjh/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd/ubj")}(h h]h }(hju/hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjd/ubh)}(hhh]j9)}(h scatterlisth]h scatterlist}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNj j )}j ]j0/c.ahash_request_set_cryptasbuh1hhjd/ubj")}(h h]h }(hj/hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjd/ubj )}(hj h]h*}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjd/ubj9)}(hsrch]hsrc}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjd/ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj.ubj )}(h u8 *resulth](h)}(hhh]j9)}(hu8h]hu8}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNj j )}j ]j0/c.ahash_request_set_cryptasbuh1hhj/ubj")}(h h]h }(hj/hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj/ubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj9)}(hresulth]hresult}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj.ubj )}(hunsigned int nbytesh](j< )}(hunsignedh]hunsigned}(hj-0hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj)0ubj")}(h h]h }(hj;0hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj)0ubj< )}(hinth]hint}(hjI0hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj)0ubj")}(h h]h }(hjW0hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj)0ubj9)}(hnbytesh]hnbytes}(hje0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj)0ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj.ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj.hhhj.hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj.hhhj.hMubah}(h]j.ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj.hMhj.hhubjg)}(hhh]h)}(hset data buffersh]hset data buffers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jfhj.hhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1hhhhj$hNhNubj)}(hXV**Parameters** ``struct ahash_request *req`` ahash_request handle to be updated ``struct scatterlist *src`` source scatter/gather list ``u8 *result`` buffer that is filled with the message digest -- the caller must ensure that the buffer has sufficient space by, for example, calling crypto_ahash_digestsize() ``unsigned int nbytes`` number of bytes to process from the source scatter/gather list **Description** By 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](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj0ubj)}(hhh](j)}(hA``struct ahash_request *req`` ahash_request handle to be updated h](j)}(h``struct ahash_request *req``h]j)}(hj0h]hstruct ahash_request *req}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj0ubj)}(hhh]h)}(h"ahash_request handle to be updatedh]h"ahash_request handle to be updated}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubj)}(h7``struct scatterlist *src`` source scatter/gather list h](j)}(h``struct scatterlist *src``h]j)}(hj 1h]hstruct scatterlist *src}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj1ubj)}(hhh]h)}(hsource scatter/gather listh]hsource scatter/gather list}(hj"1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj0ubj)}(h``u8 *result`` buffer that is filled with the message digest -- the caller must ensure that the buffer has sufficient space by, for example, calling crypto_ahash_digestsize() h](j)}(h``u8 *result``h]j)}(hjB1h]h u8 *result}(hjD1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj<1ubj)}(hhh]h)}(hbuffer that is filled with the message digest -- the caller must ensure that the buffer has sufficient space by, for example, calling crypto_ahash_digestsize()h]hbuffer that is filled with the message digest -- the caller must ensure that the buffer has sufficient space by, for example, calling crypto_ahash_digestsize()}(hj[1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhjX1ubah}(h]h ]h"]h$]h&]uh1jhj<1ubeh}(h]h ]h"]h$]h&]uh1jhjW1hMhj0ubj)}(hW``unsigned int nbytes`` number of bytes to process from the source scatter/gather list h](j)}(h``unsigned int nbytes``h]j)}(hj|1h]hunsigned int nbytes}(hj~1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhjv1ubj)}(hhh]h)}(h>number 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&]uh1jhjv1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj0ubh)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj$hhhNhNubeh}(h] asynchronous-hash-request-handleah ]h"] asynchronous hash request handleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSynchronous Message Digest APIh]hSynchronous Message Digest API}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hhhhhK 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)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj1hhubh)}(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.}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj1hhubh)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj1hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_alloc_shash (C function)c.crypto_alloc_shashhNtauh1hhj1hhhNhNubh)}(hhh](j)}(hSstruct crypto_shash * crypto_alloc_shash (const char *alg_name, u32 type, u32 mask)h]j )}(hQstruct crypto_shash *crypto_alloc_shash(const char *alg_name, u32 type, u32 mask)h](j)}(hjh]hstruct}(hjB2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>2hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjP2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj>2hhhjO2hMubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hja2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj^2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjc2modnameN classnameNj j )}j ]j )}j crypto_alloc_shashsbc.crypto_alloc_shashasbuh1hhj>2hhhjO2hMubj")}(h h]h }(hj2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj>2hhhjO2hMubj )}(hj h]h*}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>2hhhjO2hMubj3)}(hcrypto_alloc_shashh]j9)}(hj2h]hcrypto_alloc_shash}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj>2hhhjO2hMubj )}(h*(const char *alg_name, u32 type, u32 mask)h](j )}(hconst char *alg_nameh](j)}(hj! h]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj")}(h h]h }(hj2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj2ubj< )}(hcharh]hchar}(hj2hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj2ubj")}(h h]h }(hj2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj2ubj )}(hj h]h*}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2ubj9)}(halg_nameh]halg_name}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj2ubj )}(hu32 typeh](h)}(hhh]j9)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNj j )}j ]j}2c.crypto_alloc_shashasbuh1hhj3ubj")}(h h]h }(hj:3hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3ubj9)}(htypeh]htype}(hjH3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj2ubj )}(hu32 maskh](h)}(hhh]j9)}(hu32h]hu32}(hjd3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hja3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjf3modnameN classnameNj j )}j ]j}2c.crypto_alloc_shashasbuh1hhj]3ubj")}(h h]h }(hj3hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj]3ubj9)}(hmaskh]hmask}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj]3ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj2ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj>2hhhjO2hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj:2hhhjO2hMubah}(h]j52ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjO2hMhj72hhubjg)}(hhh]h)}(hallocate message digest handleh]hallocate message digest handle}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj3hhubah}(h]h ]h"]h$]h&]uh1jfhj72hhhjO2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1hhhhj1hNhNubj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj3ubj)}(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)}(hj3h]hconst char *alg_name}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj3ubj)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hj54h]hu32 type}(hj74hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj34ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj/4ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hjN4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ4hMhjK4ubah}(h]h ]h"]h$]h&]uh1jhj/4ubeh}(h]h ]h"]h$]h&]uh1jhjJ4hMhj3ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hjn4h]hu32 mask}(hjp4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjh4ubj)}(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&]uh1jhjh4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj3ubh)}(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)}(hj4h]hstruct crypto_shash}(hj4hhhNhNubah}(h]h ](j%jc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj% refdomainjreftypetype refexplicitrefwarnj j %j#% crypto_shashuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4ubha is the cipher handle that is required for any subsequent API invocation for that message digest.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj3ubh)}(h **Return**h]j)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj3ubh)}(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.}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_free_shash (C function)c.crypto_free_shashhNtauh1hhj1hhhNhNubh)}(hhh](j)}(h1void crypto_free_shash (struct crypto_shash *tfm)h]j )}(h0void crypto_free_shash(struct crypto_shash *tfm)h](j< )}(hvoidh]hvoid}(hj85hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj45hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjG5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj45hhhjF5hMubj3)}(hcrypto_free_shashh]j9)}(hcrypto_free_shashh]hcrypto_free_shash}(hjY5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjU5ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj45hhhjF5hMubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hju5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq5ubj")}(h h]h }(hj5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjq5ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNj j )}j ]j )}j j[5sbc.crypto_free_shashasbuh1hhjq5ubj")}(h h]h }(hj5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjq5ubj )}(hj h]h*}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjq5ubj9)}(htfmh]htfm}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjq5ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjm5ubah}(h]h ]h"]h$]h&]jPjQuh1j hj45hhhjF5hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj05hhhjF5hMubah}(h]j+5ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjF5hMhj-5hhubjg)}(hhh]h)}(h*zeroize and free the message digest handleh]h*zeroize and free the message digest handle}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jfhj-5hhhjF5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1hhhhj1hNhNubj)}(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)}(hj6h]h Parameters}(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.hhMhj6ubj)}(hhh]j)}(h7``struct crypto_shash *tfm`` cipher handle to be freed h](j)}(h``struct crypto_shash *tfm``h]j)}(hj96h]hstruct crypto_shash *tfm}(hj;6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj76ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj36ubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hjR6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN6hMhjO6ubah}(h]h ]h"]h$]h&]uh1jhj36ubeh}(h]h ]h"]h$]h&]uh1jhjN6hMhj06ubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hjt6h]h Description}(hjv6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj6ubh)}(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.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#crypto_shash_blocksize (C function)c.crypto_shash_blocksizehNtauh1hhj1hhhNhNubh)}(hhh](j)}(h>unsigned int crypto_shash_blocksize (struct crypto_shash *tfm)h]j )}(h=unsigned int crypto_shash_blocksize(struct crypto_shash *tfm)h](j< )}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj6hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hj6hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj6hhhj6hMubj< )}(hinth]hint}(hj6hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj6hhhj6hMubj")}(h h]h }(hj6hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj6hhhj6hMubj3)}(hcrypto_shash_blocksizeh]j9)}(hcrypto_shash_blocksizeh]hcrypto_shash_blocksize}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj6hhhj6hMubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hj$7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 7ubj")}(h h]h }(hj17hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj 7ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hjB7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD7modnameN classnameNj j )}j ]j )}j j 7sbc.crypto_shash_blocksizeasbuh1hhj 7ubj")}(h h]h }(hjb7hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj 7ubj )}(hj h]h*}(hjp7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 7ubj9)}(htfmh]htfm}(hj}7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj 7ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj7ubah}(h]h ]h"]h$]h&]jPjQuh1j hj6hhhj6hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj6hhhj6hMubah}(h]j6ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj6hMhj6hhubjg)}(hhh]h)}(hobtain block size for cipherh]hobtain block size for cipher}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jfhj6hhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1hhhhj1hNhNubj)}(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)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj7ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj7h]hstruct crypto_shash *tfm}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj7ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hj#8h]h Description}(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.hhMhj7ubh)}(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.}(hj98hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj7ubh)}(h **Return**h]j)}(hjJ8h]hReturn}(hjL8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj7ubh)}(hblock size of cipherh]hblock size of cipher}(hj`8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$crypto_shash_digestsize (C function)c.crypto_shash_digestsizehNtauh1hhj1hhhNhNubh)}(hhh](j)}(h?unsigned int crypto_shash_digestsize (struct crypto_shash *tfm)h]j )}(h>unsigned int crypto_shash_digestsize(struct crypto_shash *tfm)h](j< )}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj8hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM)ubj")}(h h]h }(hj8hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj8hhhj8hM)ubj< )}(hinth]hint}(hj8hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hj8hhhj8hM)ubj")}(h h]h }(hj8hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj8hhhj8hM)ubj3)}(hcrypto_shash_digestsizeh]j9)}(hcrypto_shash_digestsizeh]hcrypto_shash_digestsize}(hj8hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj8hhhj8hM)ubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj")}(h h]h }(hj8hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj8ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]j )}j j8sbc.crypto_shash_digestsizeasbuh1hhj8ubj")}(h h]h }(hj&9hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj8ubj )}(hj h]h*}(hj49hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8ubj9)}(htfmh]htfm}(hjA9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj8ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj8ubah}(h]h ]h"]h$]h&]jPjQuh1j hj8hhhj8hM)ubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj8hhhj8hM)ubah}(h]j8ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj8hM)hj8hhubjg)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hjk9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM)hjh9hhubah}(h]h ]h"]h$]h&]uh1jfhj8hhhj8hM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1hhhhj1hNhNubj)}(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.hhM-hj9ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj9h]hstruct crypto_shash *tfm}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM*hj9ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM*hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM*hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hj9h]h Description}(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.hhM,hj9ubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM+hj9ubh)}(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:37: ./include/crypto/hash.hhM.hj9ubh)}(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.hhM/hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"crypto_shash_descsize (C function)c.crypto_shash_descsizehNtauh1hhj1hhhNhNubh)}(hhh](j)}(h=unsigned int crypto_shash_descsize (struct crypto_shash *tfm)h]j )}(h(struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h](j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hjc<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_<ubj")}(h h]h }(hjp<hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj_<ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNj j )}j ]j )}j jI<sbc.crypto_shash_setkeyasbuh1hhj_<ubj")}(h h]h }(hj<hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj_<ubj )}(hj h]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj_<ubj9)}(htfmh]htfm}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj_<ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj[<ubj )}(h const u8 *keyh](j)}(hj! h]hconst}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj")}(h h]h }(hj<hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj<ubh)}(hhh]j9)}(hu8h]hu8}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNj j )}j ]j<c.crypto_shash_setkeyasbuh1hhj<ubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj<ubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubj9)}(hkeyh]hkey}(hj,=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj[<ubj )}(hunsigned int keylenh](j< )}(hunsignedh]hunsigned}(hjE=hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjA=ubj")}(h h]h }(hjS=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjA=ubj< )}(hinth]hint}(hja=hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjA=ubj")}(h h]h }(hjo=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjA=ubj9)}(hkeylenh]hkeylen}(hj}=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjA=ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj[<ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj"<hhhj4<hMdubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj<hhhj4<hMdubah}(h]j<ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj4<hMdhj<hhubjg)}(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.hhMdhj=hhubah}(h]h ]h"]h$]h&]uh1jfhj<hhhj4<hMdubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1hhhhj1hNhNubj)}(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.hhMhhj=ubj)}(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.hhMehj=ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMehj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMehj=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.hhMfhj>ubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hj:>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6>hMfhj7>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj6>hMfhj=ubj)}(h3``unsigned int keylen`` length of the key in bytes h](j)}(h``unsigned int keylen``h]j)}(hjZ>h]hunsigned int keylen}(hj\>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMghjT>ubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hjs>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo>hMghjp>ubah}(h]h ]h"]h$]h&]uh1jhjT>ubeh}(h]h ]h"]h$]h&]uh1jhjo>hMghj=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.hhMihj=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.hhMhhj=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.hhMlhj=ubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMmhj=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:37: ./include/crypto/hash.hhMohj=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}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMnhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_digest (C function)c.crypto_shash_digesthNtauh1hhj1hhhNhNubh)}(hhh](j)}(h\int crypto_shash_digest (struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h]j )}(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 ]jH ah"]h$]h&]uh1j; hj$?hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMtubj")}(h h]h }(hj7?hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj$?hhhj6?hMtubj3)}(hcrypto_shash_digesth]j9)}(hcrypto_shash_digesth]hcrypto_shash_digest}(hjI?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjE?ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj$?hhhj6?hMtubj )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hstruct shash_desc *desch](j)}(hjh]hstruct}(hje?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja?ubj")}(h h]h }(hjr?hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hja?ubh)}(hhh]j9)}(h shash_desch]h shash_desc}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNj j )}j ]j )}j jK?sbc.crypto_shash_digestasbuh1hhja?ubj")}(h h]h }(hj?hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hja?ubj )}(hj h]h*}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hja?ubj9)}(hdesch]hdesc}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hja?ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj]?ubj )}(hconst u8 *datah](j)}(hj! h]hconst}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj")}(h h]h }(hj?hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj?ubh)}(hhh]j9)}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNj j )}j ]j?c.crypto_shash_digestasbuh1hhj?ubj")}(h h]h }(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj?ubj )}(hj h]h*}(hj!@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?ubj9)}(hdatah]hdata}(hj.@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj]?ubj )}(hunsigned int lenh](j< )}(hunsignedh]hunsigned}(hjG@hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjC@ubj")}(h h]h }(hjU@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjC@ubj< )}(hinth]hint}(hjc@hhhNhNubah}(h]h ]jH ah"]h$]h&]uh1j; hjC@ubj")}(h h]h }(hjq@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjC@ubj9)}(hlenh]hlen}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjC@ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj]?ubj )}(hu8 *outh](h)}(hhh]j9)}(hu8h]hu8}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNj j )}j ]j?c.crypto_shash_digestasbuh1hhj@ubj")}(h h]h }(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj@ubj )}(hj h]h*}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj9)}(houth]hout}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj]?ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj$?hhhj6?hMtubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj ?hhhj6?hMtubah}(h]j?ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj6?hMthj?hhubjg)}(hhh]h)}(h#calculate message digest for bufferh]h#calculate message digest for buffer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMthj@hhubah}(h]h ]h"]h$]h&]uh1jfhj?hhhj6?hMtubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1hhhhj1hNhNubj)}(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}(hj"AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMxhjAubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hj?Ah]hstruct shash_desc *desc}(hjAAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Aubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMuhj9Aubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjXAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTAhMuhjUAubah}(h]h ]h"]h$]h&]uh1jhj9Aubeh}(h]h ]h"]h$]h&]uh1jhjTAhMuhj6Aubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjxAh]hconst u8 *data}(hjzAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMvhjrAubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMvhjAubah}(h]h ]h"]h$]h&]uh1jhjrAubeh}(h]h ]h"]h$]h&]uh1jhjAhMvhj6Aubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hjAh]hunsigned int len}(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.hhMwhjAubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMwhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMwhj6Aubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjAh]hu8 *out}(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.hhMxhjAubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMxhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMxhj6Aubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hj%Bh]h Description}(hj'BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Bubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMzhjAubh)}(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.}(hj;BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMyhjAubh)}(h **Context**h]j)}(hjLBh]hContext}(hjNBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM}hjAubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjbBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM~hjAubh)}(h **Return**h]j)}(hjsBh]hReturn}(hjuBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjAubh)}(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.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_export (C function)c.crypto_shash_exporthNtauh1hhj1hhhNhNubh)}(hhh](j)}(h