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)}(hXf**Definition**:: struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; }; **Members** ``init`` **[mandatory]** Initialize the transformation context. Intended only to initialize the state of the HASH transformation at the beginning. This shall fill in the internal structures used during the entire duration of the whole transformation. No data processing happens at this point. Driver code implementation must not use req->result. ``update`` **[mandatory]** Push a chunk of data into the driver for transformation. This function actually pushes blocks of data from upper layers into the driver, which then passes those to the hardware as seen fit. This function must not finalize the HASH transformation by calculating the final message digest as this only adds more data into the transformation. This function shall not modify the transformation context, as this function may be called in parallel with the same transformation object. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. Driver must not use req->result. For block-only algorithms, **update** must return the number of bytes to store in the API partial block buffer. ``final`` **[mandatory]** Retrieve result from the driver. This function finalizes the transformation and retrieves the resulting hash from the driver and pushes it back to upper layers. No data processing happens at this point unless hardware requires it to finish the transformation (then the data buffered by the device driver is processed). ``finup`` **[optional]** Combination of **update** and **final**. This function is effectively a combination of **update** and **final** calls issued in sequence. As some hardware cannot do **update** and **final** separately, this callback was added to allow such hardware to be used at least by IPsec. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. ``digest`` Combination of **init** and **update** and **final**. This function effectively behaves as the entire chain of operations, **init**, **update** and **final** issued in sequence. Just like **finup**, this was added for hardware which cannot do even the **finup**, but can only do the whole transformation in one run. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. ``export`` Export partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be **import** 'ed back later on. This is useful in case you want to save partial result of the transformation after processing certain amount of data and reload this partial result multiple times later on for multiple re-use. No data processing happens at this point. Driver must not use req->result. ``import`` Import partial state of the transformation. This function loads the entire state of the ongoing transformation from a provided block of data so the transformation can continue from this point onward. No data processing happens at this point. Driver must not use req->result. ``export_core`` Export partial state without partial block. Only defined for algorithms that are not block-only. ``import_core`` Import partial state without partial block. Only defined for algorithms that are not block-only. ``setkey`` Set optional key used by the hashing algorithm. Intended to push optional key used by the hashing algorithm from upper layers into the driver. This function can store the key in the transformation context or can outright program it into the hardware. In the former case, one must be careful to program the key into the hardware at appropriate time and one must be careful that .setkey() can be called multiple times during the existence of the transformation object. Not all hashing algorithms do implement this function as it is only needed for keyed message digests. SHAx/MDx/CRCx do NOT implement this function. HMAC(MDx)/HMAC(SHAx)/CMAC(AES) do implement this function. This function must be called before any other of the **init**, **update**, **final**, **finup**, **digest** is called. No data processing happens at this point. ``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. ``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. ``clone_tfm`` Copy transform into new object, may allocate memory. ``halg`` see struct hash_alg_commonh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKPhjubh literal_block)}(hX struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; };h]hX struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; };}hjsbah}(h]h ]h"]h$]h&]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.hhKchjubhdefinition_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)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hj}h]h clone_tfm}(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)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hjh]hhalg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]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&]uh1jhj hhhW/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!hj hhhjhKubj3)}(h shash_algh]j9)}(hj h]h shash_alg}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj hhhjhKubeh}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjOhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjjjuh1hhhhhhNhNubj)}(hX **Definition**:: struct shash_alg { int (*init)(struct shash_desc *desc); int (*update)(struct shash_desc *desc, const u8 *data, unsigned int len); int (*final)(struct shash_desc *desc, u8 *out); int (*finup)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*digest)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*export)(struct shash_desc *desc, void *out); int (*import)(struct shash_desc *desc, const void *in); int (*export_core)(struct shash_desc *desc, void *out); int (*import_core)(struct shash_desc *desc, const void *in); int (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; }; **Members** ``init`` see struct ahash_alg ``update`` see struct ahash_alg ``final`` see struct ahash_alg ``finup`` see struct ahash_alg ``digest`` see struct ahash_alg ``export`` see struct ahash_alg ``import`` see struct ahash_alg ``export_core`` see struct ahash_alg ``import_core`` see struct ahash_alg ``setkey`` see struct ahash_alg ``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. ``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. ``clone_tfm`` Copy transform into new object, may allocate memory. ``descsize`` Size of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctx ``{unnamed_union}`` anonymous ``HASH_ALG_COMMON`` see struct hash_alg_common ``halg`` see struct hash_alg_commonh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjnubj)}(hXstruct shash_alg { int (*init)(struct shash_desc *desc); int (*update)(struct shash_desc *desc, const u8 *data, unsigned int len); int (*final)(struct shash_desc *desc, u8 *out); int (*finup)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*digest)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*export)(struct shash_desc *desc, void *out); int (*import)(struct shash_desc *desc, const void *in); int (*export_core)(struct shash_desc *desc, void *out); int (*import_core)(struct shash_desc *desc, const void *in); int (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; };h]hXstruct shash_alg { int (*init)(struct shash_desc *desc); int (*update)(struct shash_desc *desc, const u8 *data, unsigned int len); int (*final)(struct shash_desc *desc, u8 *out); int (*finup)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*digest)(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out); int (*export)(struct shash_desc *desc, void *out); int (*import)(struct shash_desc *desc, const void *in); int (*export_core)(struct shash_desc *desc, void *out); int (*import_core)(struct shash_desc *desc, const void *in); int (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; };}hjsbah}(h]h ]h"]h$]h&]jPjQuh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjnubh)}(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.hhKhjnubj)}(hhh](j)}(h``init`` see struct ahash_alg h](j)}(h``init``h]j)}(hjh]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``update`` see struct ahash_alg h](j)}(h ``update``h]j)}(hjh]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``final`` see struct ahash_alg h](j)}(h ``final``h]j)}(hj1h]hfinal}(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&]uh1jhjFhKhjubj)}(h``finup`` see struct ahash_alg h](j)}(h ``finup``h]j)}(hjjh]hfinup}(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&]uh1jhjhKhjubj)}(h ``digest`` see struct ahash_alg h](j)}(h ``digest``h]j)}(hjh]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``export`` see struct ahash_alg h](j)}(h ``export``h]j)}(hjh]hexport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``import`` see struct ahash_alg h](j)}(h ``import``h]j)}(hj h]himport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj* hKhj+ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj* hKhjubj)}(h%``export_core`` see struct ahash_alg h](j)}(h``export_core``h]j)}(hjN h]h export_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 hKhjubj)}(h%``import_core`` see struct ahash_alg h](j)}(h``import_core``h]j)}(hj h]h import_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 hKhjubj)}(h ``setkey`` see struct ahash_alg h](j)}(h ``setkey``h]j)}(hj h]hsetkey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(hX``init_tfm`` Initialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place. h](j)}(h ``init_tfm``h]j)}(hj h]hinit_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hXInitialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place.h]hXInitialize the cryptographic transformation object. This function is called only once at the instantiation time, right after the transformation context was allocated. In case the cryptographic hardware has some special requirements which need to be handled by software, this function shall check for the precise requirement of the transformation and put any software fallbacks in place.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. h](j)}(h ``exit_tfm``h]j)}(hj3 h]hexit_tfm}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1 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 }(hjL hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL ubh(, used to remove various changes set in }(hjL hhhNhNubj)}(h **init_tfm**h]hinit_tfm}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL ubh.}(hjL hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjI ubah}(h]h ]h"]h$]h&]uh1jhj- ubeh}(h]h ]h"]h$]h&]uh1jhjH hKhjubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hj h]h clone_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``descsize`` Size of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctx h](j)}(h ``descsize``h]j)}(hj h]hdescsize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hSize of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctxh]hSize of the operational state for the message digest. This state size is the memory size that needs to be allocated for shash_desc.__ctx}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj h]h{unnamed_union}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h/``HASH_ALG_COMMON`` see struct hash_alg_common h](j)}(h``HASH_ALG_COMMON``h]j)}(hj= h]hHASH_ALG_COMMON}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhj7 ubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR hKhjS ubah}(h]h ]h"]h$]h&]uh1jhj7 ubeh}(h]h ]h"]h$]h&]uh1jhjR hKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hjv h]hhalg}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:10: ./include/crypto/hash.hhKhjp 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&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hThe asynchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_AHASH (listed as type "ahash" in /proc/crypto)h]hThe asynchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_AHASH (listed as type “ahash” in /proc/crypto)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM!hj hhubh)}(hpThe asynchronous cipher operation discussion provided for the CRYPTO_ALG_TYPE_SKCIPHER API applies here as well.h]hpThe asynchronous cipher operation discussion provided for the CRYPTO_ALG_TYPE_SKCIPHER API applies here as well.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM$hj hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_alloc_ahash (C function)c.crypto_alloc_ahashhNtauh1hhj hhhNhNubh)}(hhh](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.hhM5ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhj hM5ubh)}(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]jA ASTIdentifier)}j< crypto_alloc_ahashsbc.crypto_alloc_ahashasbuh1hhj hhhj hM5ubj")}(h h]h }(hjO hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhj hM5ubhdesc_sig_punctuation)}(h*h]h*}(hj_ hhhNhNubah}(h]h ]pah"]h$]h&]uh1j] hj hhhj hM5ubj3)}(hcrypto_alloc_ahashh]j9)}(hjL h]hcrypto_alloc_ahash}(hjr hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjn ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj hhhj hM5ubhdesc_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 }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj^ )}(hja h]h*}(hj hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj ubj9)}(halg_nameh]halg_name}(hj 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@ jC )}jF ]jJ 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@ jC )}jF ]jJ c.crypto_alloc_ahashasbuh1hhj6 ubj")}(h h]h }(hj[ hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj6 ubj9)}(hmaskh]hmask}(hji hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6 ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj hhhj hM5ubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj hhhj hM5ubah}(h]j ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj hM5hj 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.hhM5hj hhubah}(h]h ]h"]h$]h&]uh1jfhj hhhj hM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1hhhhj hNhNubj)}(hX**Parameters** ``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the ahash cipher ``u32 type`` specifies the type of the cipher ``u32 mask`` specifies the mask for the cipher **Description** Allocate a cipher handle for an ahash. The returned struct crypto_ahash is the cipher handle that is required for any subsequent API invocation for that ahash. **Return** allocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM9hj ubj)}(hhh](j)}(he``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the ahash cipher h](j)}(h``const char *alg_name``h]j)}(hj h]hconst char *alg_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM7hj ubj)}(hhh]h)}(hKis the cra_name / name or cra_driver_name / driver name of the ahash cipherh]hKis the cra_name / name or cra_driver_name / driver name of the ahash cipher}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM6hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM7hj ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hjh]hu32 type}(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.hhM8hjubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM8hj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hM8hj ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hjGh]hu32 mask}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM9hjAubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM9hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM9hj 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.hhM;hj ubh)}(hAllocate a cipher handle for an ahash. The returned struct crypto_ahash is the cipher handle that is required for any subsequent API invocation for that ahash.h]hAllocate a cipher handle for an ahash. The returned struct crypto_ahash is the cipher handle that is required for any subsequent API invocation for that ahash.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM:hj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM>hj ubh)}(hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h]hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM?hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_free_ahash (C function)c.crypto_free_ahashhNtauh1hhj 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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMMubj3)}(hcrypto_free_ahashh]j9)}(hcrypto_free_ahashh]hcrypto_free_ahash}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhMMubj )}(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 }(hj8hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj'ubh)}(hhh]j9)}(h crypto_ahashh]h crypto_ahash}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjKmodnameN classnameNj@ jC )}jF ]jI )}j< jsbc.crypto_free_ahashasbuh1hhj'ubj")}(h h]h }(hjihhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj'ubj^ )}(hja h]h*}(hjwhhhNhNubah}(h]h ]jj 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 hjhhhjhMMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMMubah}(h]jah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMMhjhhubjg)}(hhh]h)}(h!zeroize and free the ahash handleh]h!zeroize and free the ahash handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMMhjhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhMMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj hNhNubj)}(h**Parameters** ``struct crypto_ahash *tfm`` cipher handle to be freed **Description** If **tfm** is a NULL or error pointer, this function does nothing.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMQhjubj)}(hhh]j)}(h7``struct crypto_ahash *tfm`` cipher handle to be freed h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjh]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMNhjubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(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.hhMPhjubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hj@hhhNhNubj)}(h**tfm**h]htfm}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh8 is a NULL or error pointer, this function does nothing.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$crypto_ahash_digestsize (C function)c.crypto_ahash_digestsizehNtauh1hhj 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 ]j 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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}hhhjhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj}hhhjhMubj3)}(hcrypto_ahash_digestsizeh]j9)}(hcrypto_ahash_digestsizeh]hcrypto_ahash_digestsize}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj}hhhjhMubj )}(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@ jC )}jF ]jI )}j< jsbc.crypto_ahash_digestsizeasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hj&hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjubj9)}(htfmh]htfm}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubah}(h]h ]h"]h$]h&]jPjQuh1j hj}hhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjyhhhjhMubah}(h]jtah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjvhhubjg)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjZhhubah}(h]h ]h"]h$]h&]uh1jfhjvhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1hhhhj 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)}(hjh]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.hhMhjyubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjh]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubh)}(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.hhMhjyubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjyubh)}(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.hhMhjyubh)}(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.hhMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#crypto_ahash_statesize (C function)c.crypto_ahash_statesizehNtauh1hhj 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}(hjEhhhNhNubah}(h]h ]j 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!hjAhhhjShMubj )}(hinth]hint}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAhhhjShMubj")}(h h]h }(hjphhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjAhhhjShMubj3)}(hcrypto_ahash_statesizeh]j9)}(hcrypto_ahash_statesizeh]hcrypto_ahash_statesize}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj~ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjAhhhjShMubj )}(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@ jC )}jF ]jI )}j< jsbc.crypto_ahash_statesizeasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj 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 hjAhhhjShMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj=hhhjShMubah}(h]j8ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjShMhj:hhubjg)}(hhh]h)}(hobtain size of the ahash stateh]hobtain size of the ahash state}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jfhj:hhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1hhhhj 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)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj=ubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjbh]hstruct crypto_ahash *tfm}(hjdhhhNhNubah}(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}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj=ubh)}(hReturn the size of the ahash state. With the crypto_ahash_export() function, the caller can export the state into a buffer whose size is defined with this function.h]hReturn the size of the ahash state. With the crypto_ahash_export() function, the caller can export the state into a buffer whose size is defined with this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj=ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj=ubh)}(hsize of the ahash stateh]hsize of the ahash state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_reqtfm (C function)c.crypto_ahash_reqtfmhNtauh1hhj 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}(hj hhhNhNubah}(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}(hj(hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj*modnameN classnameNj@ jC )}jF ]jI )}j< crypto_ahash_reqtfmsbc.crypto_ahash_reqtfmasbuh1hhjhhhjhMubj")}(h h]h }(hjIhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubj^ )}(hja h]h*}(hjWhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjhhhjhMubj3)}(hcrypto_ahash_reqtfmh]j9)}(hjFh]hcrypto_ahash_reqtfm}(hjhhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjdubah}(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@ jC )}jF ]jDc.crypto_ahash_reqtfmasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(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&]jjjjjjjjjuh1hhhhj 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)}(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)}(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)}(hjEh]hstruct ahash_request *req}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj?ubj)}(hhh]h)}(hRasynchronous request handle that contains the reference to the ahash cipher handleh]hRasynchronous request handle that contains the reference to the ahash cipher handle}(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&]uh1jhjZhMhj<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)}(heReturn the ahash cipher handle that is registered with the asynchronous request handle ahash_request.h]heReturn the ahash cipher handle that is registered with the asynchronous request handle ahash_request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubh)}(hahash cipher handleh]hahash cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!crypto_ahash_reqsize (C function)c.crypto_ahash_reqsizehNtauh1hhj hhhNhNubh)}(hhh](j)}(hubah}(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 size of the request data structureh]h)obtain size of the request data structure}(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&]jjjjjjjjjuh1hhhhj hNhNubj)}(hb**Parameters** ``struct crypto_ahash *tfm`` cipher handle **Return** size of the request datah](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)}(hj h]hstruct crypto_ahash *tfm}(hj hhhNhNubah}(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&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hsize of the request datah]hsize of the request data}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_setkey (C function)c.crypto_ahash_setkeyhNtauh1hhj hhhNhNubh)}(hhh](j)}(hVint crypto_ahash_setkey (struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h]j )}(hUint crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubj3)}(hcrypto_ahash_setkeyh]j9)}(hcrypto_ahash_setkeyh]hcrypto_ahash_setkey}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjhhhjhMubj )}(h>(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)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@ jC )}jF ]jI )}j< jsbc.crypto_ahash_setkeyasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjubj9)}(htfmh]htfm}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubj )}(h const u8 *keyh](j)}(hj h]hconst}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj")}(h h]h }(hjFhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj5ubh)}(hhh]j9)}(hu8h]hu8}(hjWhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjTubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjYmodnameN classnameNj@ jC )}jF ]jc.crypto_ahash_setkeyasbuh1hhj5ubj")}(h h]h }(hjuhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj5ubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj5ubj9)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubj )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj9)}(hkeylenh]hkeylen}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubeh}(h]h ]h"]h$]h&]jPjQuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjhhhjhMubah}(h]j}ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjhMhjhhubjg)}(hhh]h)}(hset key for cipher handleh]hset key for cipher handle}(hj hhhNhNubah}(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&]jjjj#jj#jjjuh1hhhhj 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)}(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 crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjLh]hstruct crypto_ahash *tfm}(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)}(h cipher handleh]h cipher handle}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjCubj)}(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.hhMhjubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjCubj)}(h3``unsigned int keylen`` length of the key in bytes h](j)}(h``unsigned int keylen``h]j)}(hjh]hunsigned int keylen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjCubeh}(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)}(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.hhMhj'ubh)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj'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}(hj6hhhNhNubah}(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&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_ahash_finup (C function)c.crypto_ahash_finuphNtauh1hhj 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}(hjehhhNhNubah}(h]h ]j 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_finuph]j9)}(hcrypto_ahash_finuph]hcrypto_ahash_finup}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubah}(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&]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@ jC )}jF ]jI )}j< jsbc.crypto_ahash_finupasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubah}(h]h ]h"]h$]h&]jPjQuh1j hjahhhjshMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj]hhhjshMubah}(h]jXah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjshMhjZhhubjg)}(hhh]h)}(h"update and finalize message digesth]h"update and finalize message digest}(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&]uh1jfhjZhhhjshMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1hhhhj 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)}(hjGh]h Parameters}(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.hhMhjAubj)}(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}(hjhhhNhNubah}(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&]uh1jhjAubh)}(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.hhMhjAubh)}(hThis function is a "short-hand" for the function calls of crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate functions.h]hThis function is a “short-hand” for the function calls of crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjAubh)}(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.hhMhjAubh)}(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.hhMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_ahash_final (C function)c.crypto_ahash_finalhNtauh1hhj 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 ]j 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 hhhjhMubj3)}(hcrypto_ahash_finalh]j9)}(hcrypto_ahash_finalh]hcrypto_ahash_final}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj+ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj hhhjhMubj )}(h(struct ahash_request *req)h]j )}(hstruct ahash_request *reqh](j)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj")}(h h]h }(hjXhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjGubh)}(hhh]j9)}(h ahash_requesth]h ahash_request}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjfubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjkmodnameN classnameNj@ jC )}jF ]jI )}j< j1sbc.crypto_ahash_finalasbuh1hhjGubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjGubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjGubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjCubah}(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)}(hcalculate message digesth]hcalculate message digest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj hNhNubj)}(hXv**Parameters** ``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation **Description** Finalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle. **Return** 0 if the message digest was successfully calculated; -EINPROGRESS if data is fed into hardware (DMA) or queued for later; -EBUSY if queue is full and request should be resubmitted later; other < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]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)}(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$hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubh)}(hFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle.h]hFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle.}(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)}(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.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_digest (C function)c.crypto_ahash_digesthNtauh1hhj 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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubj3)}(hcrypto_ahash_digesth]j9)}(hcrypto_ahash_digesth]hcrypto_ahash_digest}(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@ jC )}jF ]jI )}j< jsbc.crypto_ahash_digestasbuh1hhjubj")}(h h]h }(hj2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hj@hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjubj9)}(hreqh]hreq}(hjMhhhNhNubah}(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)}(h%calculate message digest for a bufferh]h%calculate message digest for a buffer}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jfhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1hhhhj hNhNubj)}(hX**Parameters** ``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation **Description** This function is a "short-hand" for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions. **Return** see crypto_ahash_final()h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hgreference to the ahash_request handle that holds all information needed to perform the cipher operationh]hgreference to the ahash_request handle that holds all information needed to perform the cipher operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubh)}(hThis function is a "short-hand" for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions.h]hThis function is a “short-hand” for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions.}(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.hhM hjubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_ahash_export (C function)c.crypto_ahash_exporthNtauh1hhj 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}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMubj")}(h h]h }(hjohhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj\hhhjnhMubj3)}(hcrypto_ahash_exporth]j9)}(hcrypto_ahash_exporth]hcrypto_ahash_export}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj}ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj\hhhjnhMubj )}(h&(struct ahash_request *req, void *out)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@ jC )}jF ]jI )}j< jsbc.crypto_ahash_exportasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj^ )}(hja h]h*}(hjhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjubj9)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubj )}(h void *outh](j )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj^ )}(hja h]h*}(hj+ hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj ubj9)}(houth]hout}(hj8 hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjubeh}(h]h ]h"]h$]h&]jPjQuh1j hj\hhhjnhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjXhhhjnhMubah}(h]jSah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjnhMhjUhhubjg)}(hhh]h)}(h$extract current message digest stateh]h$extract current message digest state}(hjb 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&]uh1jfhjUhhhjnhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjz jjz jjjuh1hhhhj 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)}(hj h]hstruct ahash_request *req}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubj)}(hhh]h)}(h=reference to the ahash_request handle whose state is exportedh]h=reference to the ahash_request handle whose state is exported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(hL``void *out`` output buffer of sufficient size that can hold the hash state h](j)}(h ``void *out``h]j)}(hj h]h void *out}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:19: ./include/crypto/hash.hhMhj ubj)}(hhh]h)}(h=output buffer of sufficient size that can hold the hash stateh]h=output buffer of sufficient size that can hold the hash state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]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,c.ahash_request_set_callbackasbuh1hhjr,ubj")}(h h]h }(hj,hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjr,ubj9)}(hflagsh]hflags}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjr,ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj+ubj )}(hcrypto_completion_t complh](h)}(hhh]j9)}(hcrypto_completion_th]hcrypto_completion_t}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj,modnameN classnameNj@ jC )}jF ]j>,c.ahash_request_set_callbackasbuh1hhj,ubj")}(h h]h }(hj,hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj,ubj9)}(hcomplh]hcompl}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj,ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj+ubj )}(h void *datah](j )}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-ubj")}(h h]h }(hj-hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj-ubj^ )}(hja h]h*}(hj"-hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj-ubj9)}(hdatah]hdata}(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+hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj+hhhj+hMubah}(h]j+ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj+hMhj+hhubjg)}(hhh]h)}(h"set asynchronous callback functionh]h"set asynchronous callback function}(hjY-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhjV-hhubah}(h]h ]h"]h$]h&]uh1jfhj+hhhj+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjq-jjq-jjjuh1hhhhjY%hNhNubj)}(hX%**Parameters** ``struct ahash_request *req`` request handle ``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 ``crypto_completion_t compl`` callback function pointer to be registered with the request handle ``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. **Description** This function allows setting the callback function that is triggered once the cipher operation completes. The callback function is registered with the :c:type:`ahash_request` handle and must comply with the following template:: void callback_function(struct crypto_async_request *req, int error)h](h)}(h**Parameters**h]j)}(hj{-h]h Parameters}(hj}-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhju-ubj)}(hhh](j)}(h-``struct ahash_request *req`` request handle h](j)}(h``struct ahash_request *req``h]j)}(hj-h]hstruct ahash_request *req}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubj)}(hhh]h)}(hrequest handleh]hrequest 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)}(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)}(hj-h]h u32 flags}(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)}(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}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-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)}(hjF.h]h void *data}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD.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)}(hji.h]hcrypto_async_request}(hjk.hhhNhNubah}(h]h ](j%jc-typeeh"]h$]h&]uh1jhjg.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&]uh1jhju-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:28: ./include/crypto/hash.hhMhju-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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhju-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 }(hj.hhhNhNubh)}(h:c:type:`ahash_request`h]j)}(hj.h]h ahash_request}(hj.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.hhMhj.ubh4 handle and must comply with the following template:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMhju-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.hhMhju-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjY%hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$ahash_request_set_crypt (C function)c.ahash_request_set_crypthNtauh1hhjY%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 ]j 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'/hhhj9/hMubj3)}(hahash_request_set_crypth]j9)}(hahash_request_set_crypth]hahash_request_set_crypt}(hjL/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjH/ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj'/hhhj9/hMubj )}(hU(struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h](j )}(hstruct ahash_request *reqh](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 ahash_requesth]h ahash_request}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj/modnameN classnameNj@ jC )}jF ]jI )}j< jN/sbc.ahash_request_set_cryptasbuh1hhjd/ubj")}(h h]h }(hj/hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjd/ubj^ )}(hja h]h*}(hj/hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjd/ubj9)}(hreqh]hreq}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjd/ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj`/ubj )}(hstruct scatterlist *srch](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 scatterlisth]h scatterlist}(hj/hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj/modnameN classnameNj@ jC )}jF ]j/c.ahash_request_set_cryptasbuh1hhj/ubj")}(h h]h }(hj0hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj/ubj^ )}(hja h]h*}(hj$0hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj/ubj9)}(hsrch]hsrc}(hj10hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj/ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj`/ubj )}(h u8 *resulth](h)}(hhh]j9)}(hu8h]hu8}(hjM0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJ0ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjO0modnameN classnameNj@ jC )}jF ]j/c.ahash_request_set_cryptasbuh1hhjF0ubj")}(h h]h }(hjk0hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjF0ubj^ )}(hja h]h*}(hjy0hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjF0ubj9)}(hresulth]hresult}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjF0ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj`/ubj )}(hunsigned int nbytesh](j )}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj")}(h h]h }(hj0hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj0ubj )}(hinth]hint}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj")}(h h]h }(hj0hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj0ubj9)}(hnbytesh]hnbytes}(hj0hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj0ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj`/ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj'/hhhj9/hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj#/hhhj9/hMubah}(h]j/ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj9/hMhj /hhubjg)}(hhh]h)}(hset data buffersh]hset data buffers}(hj1hhhNhNubah}(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 /hhhj9/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1hhhhjY%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)}(hj#1h]h Parameters}(hj%1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj1ubj)}(hhh](j)}(hA``struct ahash_request *req`` ahash_request handle to be updated h](j)}(h``struct ahash_request *req``h]j)}(hjB1h]hstruct ahash_request *req}(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)}(h"ahash_request handle to be updatedh]h"ahash_request handle to be updated}(hj[1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW1hMhjX1ubah}(h]h ]h"]h$]h&]uh1jhj<1ubeh}(h]h ]h"]h$]h&]uh1jhjW1hMhj91ubj)}(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&]uh1jhjy1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhju1ubj)}(hhh]h)}(hsource scatter/gather listh]hsource scatter/gather list}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhju1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj91ubj)}(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)}(hj1h]h u8 *result}(hj1hhhNhNubah}(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)}(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()}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj91ubj)}(hW``unsigned int nbytes`` number of bytes to process from the source scatter/gather list h](j)}(h``unsigned int nbytes``h]j)}(hj1h]hunsigned int nbytes}(hj1hhhNhNubah}(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)}(h>number of bytes to process from the source scatter/gather listh]h>number of bytes to process from the source scatter/gather list}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj91ubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hj)2h]h Description}(hj+2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'2ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj1ubh)}(hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.h]hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.}(hj?2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:28: ./include/crypto/hash.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjY%hhhNhNubeh}(h] asynchronous-hash-request-handleah ]h"] asynchronous hash request handleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSynchronous Message Digest APIh]hSynchronous Message Digest API}(hj`2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]2hhhhhK 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)}(hjn2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj]2hhubh)}(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.hhMhj]2hhubh)}(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.hhMhj]2hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_alloc_shash (C function)c.crypto_alloc_shashhNtauh1hhj]2hhhNhNubh)}(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}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hj2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj2hhhj2hMubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hj2hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj2modnameN classnameNj@ jC )}jF ]jI )}j< crypto_alloc_shashsbc.crypto_alloc_shashasbuh1hhj2hhhj2hMubj")}(h h]h }(hj2hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj2hhhj2hMubj^ )}(hja h]h*}(hj3hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj2hhhj2hMubj3)}(hcrypto_alloc_shashh]j9)}(hj2h]hcrypto_alloc_shash}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj2hhhj2hMubj )}(h*(const char *alg_name, u32 type, u32 mask)h](j )}(hconst char *alg_nameh](j)}(hj h]hconst}(hj.3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*3ubj")}(h h]h }(hj;3hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj*3ubj )}(hcharh]hchar}(hjI3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*3ubj")}(h h]h }(hjW3hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj*3ubj^ )}(hja h]h*}(hje3hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj*3ubj9)}(halg_nameh]halg_name}(hjr3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj*3ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj&3ubj )}(hu32 typeh](h)}(hhh]j9)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj3modnameN classnameNj@ jC )}jF ]j2c.crypto_alloc_shashasbuh1hhj3ubj")}(h h]h }(hj3hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3ubj9)}(htypeh]htype}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj&3ubj )}(hu32 maskh](h)}(hhh]j9)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj3modnameN classnameNj@ jC )}jF ]j2c.crypto_alloc_shashasbuh1hhj3ubj")}(h h]h }(hj3hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3ubj9)}(hmaskh]hmask}(hj4hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj3ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj&3ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj2hhhj2hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj2hhhj2hMubah}(h]j2ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj2hMhj2hhubjg)}(hhh]h)}(hallocate message digest handleh]hallocate message digest handle}(hj,4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj)4hhubah}(h]h ]h"]h$]h&]uh1jfhj2hhhj2hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjD4jjD4jjjuh1hhhhj]2hNhNubj)}(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)}(hjN4h]h Parameters}(hjP4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjH4ubj)}(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)}(hjm4h]hconst char *alg_name}(hjo4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjg4ubj)}(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&]uh1jhjg4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjd4ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hj4h]hu32 type}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjd4ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hj4h]hu32 mask}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj4ubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjd4ubeh}(h]h ]h"]h$]h&]uh1jhjH4ubh)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjH4ubh)}(hAllocate a cipher handle for a message digest. The returned :c:type:`struct crypto_shash ` is the cipher handle that is required for any subsequent API invocation for that message digest.h](h`h]j)}(hj;5h]hstruct crypto_shash}(hj=5hhhNhNubah}(h]h ](j%jc-typeeh"]h$]h&]uh1jhj95ubah}(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.hhMhj15ubha is the cipher handle that is required for any subsequent API invocation for that message digest.}(hj15hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjX5hMhjH4ubh)}(h **Return**h]j)}(hje5h]hReturn}(hjg5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjH4ubh)}(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.hhMhjH4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_free_shash (C function)c.crypto_free_shashhNtauh1hhj]2hhhNhNubh)}(hhh](j)}(h1void crypto_free_shash (struct crypto_shash *tfm)h]j )}(h0void crypto_free_shash(struct crypto_shash *tfm)h](j )}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hj5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj5hhhj5hMubj3)}(hcrypto_free_shashh]j9)}(hcrypto_free_shashh]hcrypto_free_shash}(hj5hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj5hhhj5hMubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj")}(h h]h }(hj5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj5ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hj6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj6modnameN classnameNj@ jC )}jF ]jI )}j< j5sbc.crypto_free_shashasbuh1hhj5ubj")}(h h]h }(hj%6hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj5ubj^ )}(hja h]h*}(hj36hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj5ubj9)}(htfmh]htfm}(hj@6hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj5ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj5ubah}(h]h ]h"]h$]h&]jPjQuh1j hj5hhhj5hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj5hhhj5hMubah}(h]j5ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj5hMhj5hhubjg)}(hhh]h)}(h*zeroize and free the message digest handleh]h*zeroize and free the message digest handle}(hjj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjg6hhubah}(h]h ]h"]h$]h&]uh1jfhj5hhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1hhhhj]2hNhNubj)}(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)}(hj6h]hstruct crypto_shash *tfm}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj6ubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj6ubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hj6hhhNhNubj)}(h**tfm**h]htfm}(hj7hhhNhNubah}(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&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#crypto_shash_blocksize (C function)c.crypto_shash_blocksizehNtauh1hhj]2hhhNhNubh)}(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}(hj=7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj97hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjL7hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj97hhhjK7hMubj )}(hinth]hint}(hjZ7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj97hhhjK7hMubj")}(h h]h }(hjh7hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj97hhhjK7hMubj3)}(hcrypto_shash_blocksizeh]j9)}(hcrypto_shash_blocksizeh]hcrypto_shash_blocksize}(hjz7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjv7ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj97hhhjK7hMubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj")}(h h]h }(hj7hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj7ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj7modnameN classnameNj@ jC )}jF ]jI )}j< j|7sbc.crypto_shash_blocksizeasbuh1hhj7ubj")}(h h]h }(hj7hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj7ubj^ )}(hja h]h*}(hj7hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj7ubj9)}(htfmh]htfm}(hj7hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj7ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj7ubah}(h]h ]h"]h$]h&]jPjQuh1j hj97hhhjK7hMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj57hhhjK7hMubah}(h]j07ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjK7hMhj27hhubjg)}(hhh]h)}(hobtain block size for cipherh]hobtain block size for cipher}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jfhj27hhhjK7hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj18jj18jjjuh1hhhhj]2hNhNubj)}(h**Parameters** ``struct crypto_shash *tfm`` cipher handle **Description** The block size for the message digest cipher referenced with the cipher handle is returned. **Return** block size of cipherh](h)}(h**Parameters**h]j)}(hj;8h]h Parameters}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj98ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj58ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hjZ8h]hstruct crypto_shash *tfm}(hj\8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjT8ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjs8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo8hMhjp8ubah}(h]h ]h"]h$]h&]uh1jhjT8ubeh}(h]h ]h"]h$]h&]uh1jhjo8hMhjQ8ubah}(h]h ]h"]h$]h&]uh1jhj58ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj58ubh)}(h[The block size for the message digest cipher referenced with the cipher handle is returned.h]h[The block size for the message digest cipher referenced with the cipher handle is returned.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj58ubh)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj58ubh)}(hblock size of cipherh]hblock size of cipher}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj58ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$crypto_shash_digestsize (C function)c.crypto_shash_digestsizehNtauh1hhj]2hhhNhNubh)}(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}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM1ubj")}(h h]h }(hj9hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj8hhhj9hM1ubj )}(hinth]hint}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8hhhj9hM1ubj")}(h h]h }(hj,9hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj8hhhj9hM1ubj3)}(hcrypto_shash_digestsizeh]j9)}(hcrypto_shash_digestsizeh]hcrypto_shash_digestsize}(hj>9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj:9ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj8hhhj9hM1ubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](j)}(hjh]hstruct}(hjZ9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV9ubj")}(h h]h }(hjg9hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjV9ubh)}(hhh]j9)}(h crypto_shashh]h crypto_shash}(hjx9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hju9ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjz9modnameN classnameNj@ jC )}jF ]jI )}j< j@9sbc.crypto_shash_digestsizeasbuh1hhjV9ubj")}(h h]h }(hj9hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjV9ubj^ )}(hja h]h*}(hj9hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjV9ubj9)}(htfmh]htfm}(hj9hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjV9ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjR9ubah}(h]h ]h"]h$]h&]jPjQuh1j hj8hhhj9hM1ubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj8hhhj9hM1ubah}(h]j8ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj9hM1hj8hhubjg)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM1hj9hhubah}(h]h ]h"]h$]h&]uh1jfhj8hhhj9hM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1hhhhj]2hNhNubj)}(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}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM5hj9ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj:h]hstruct crypto_shash *tfm}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM2hj:ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj7:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3:hM2hj4:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj3:hM2hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hjY:h]h Description}(hj[:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM4hj9ubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hjo:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM3hj9ubh)}(h **Return**h]j)}(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.hhM6hj9ubh)}(hdigest size of cipherh]hdigest size of cipher}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM7hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"crypto_shash_descsize (C function)c.crypto_shash_descsizehNtauh1hhj]2hhhNhNubh)}(hhh](j)}(h=unsigned int crypto_shash_descsize (struct crypto_shash *tfm)h]j )}(h;modnameN classnameNj@ jC )}jF ]jI )}j< j;sbc.crypto_shash_descsizeasbuh1hhj;ubj")}(h h]h }(hj\;hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj;ubj^ )}(hja h]h*}(hjj;hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj;ubj9)}(htfmh]htfm}(hjw;hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj;ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj;ubah}(h]h ]h"]h$]h&]jPjQuh1j hj:hhhj:hMSubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj:hhhj:hMSubah}(h]j:ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj:hMShj:hhubjg)}(hhh]h)}(h!obtain the operational state sizeh]h!obtain the operational state size}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMShj;hhubah}(h]h ]h"]h$]h&]uh1jfhj:hhhj:hMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1hhhhj]2hNhNubj)}(hX)**Parameters** ``struct crypto_shash *tfm`` cipher handle **Description** The size of the operational state the cipher needs during operation is returned for the hash referenced with the cipher handle. This size is required to calculate the memory requirements to allow the caller allocating sufficient memory for operational state. The operational state is defined with struct shash_desc where the size of that data structure is to be calculated as sizeof(struct shash_desc) + crypto_shash_descsize(alg) **Return** size of the operational stateh](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.hhMWhj;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.hhMThj;ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMThj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMThj;ubah}(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.hhMVhj;ubh)}(hXThe size of the operational state the cipher needs during operation is returned for the hash referenced with the cipher handle. This size is required to calculate the memory requirements to allow the caller allocating sufficient memory for operational state.h]hXThe size of the operational state the cipher needs during operation is returned for the hash referenced with the cipher handle. This size is required to calculate the memory requirements to allow the caller allocating sufficient memory for operational state.}(hj3<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMUhj;ubh)}(hThe operational state is defined with struct shash_desc where the size of that data structure is to be calculated as sizeof(struct shash_desc) + crypto_shash_descsize(alg)h]hThe operational state is defined with struct shash_desc where the size of that data structure is to be calculated as sizeof(struct shash_desc) + crypto_shash_descsize(alg)}(hjB<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMZhj;ubh)}(h **Return**h]j)}(hjS<h]hReturn}(hjU<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ<ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM^hj;ubh)}(hsize of the operational stateh]hsize of the operational state}(hji<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM_hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_setkey (C function)c.crypto_shash_setkeyhNtauh1hhj]2hhhNhNubh)}(hhh](j)}(hVint crypto_shash_setkey (struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h]j )}(hUint crypto_shash_setkey(struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h](j )}(hinth]hint}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMlubj")}(h h]h }(hj<hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj<hhhj<hMlubj3)}(hcrypto_shash_setkeyh]j9)}(hcrypto_shash_setkeyh]hcrypto_shash_setkey}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj<hhhj<hMlubj )}(h>(struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h](j )}(hstruct crypto_shash *tfmh](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 crypto_shashh]h crypto_shash}(hj<hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj<modnameN classnameNj@ jC )}jF ]jI )}j< j<sbc.crypto_shash_setkeyasbuh1hhj<ubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj<ubj^ )}(hja h]h*}(hj!=hhhNhNubah}(h]h ]jj 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}(hjG=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC=ubj")}(h h]h }(hjT=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjC=ubh)}(hhh]j9)}(hu8h]hu8}(hje=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjb=ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjg=modnameN classnameNj@ jC )}jF ]j=c.crypto_shash_setkeyasbuh1hhjC=ubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjC=ubj^ )}(hja h]h*}(hj=hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjC=ubj9)}(hkeyh]hkey}(hj=hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjC=ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj<ubj )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj=ubj )}(hinth]hint}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj=ubj9)}(hkeylenh]hkeylen}(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<hMlubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj<hhhj<hMlubah}(h]j<ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj<hMlhj<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.hhMlhj>hhubah}(h]h ]h"]h$]h&]uh1jfhj<hhhj<hMlubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1>jj1>jjjuh1hhhhj]2hNhNubj)}(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&]uh1jhj9>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMphj5>ubj)}(hhh](j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hjZ>h]hstruct crypto_shash *tfm}(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.hhMmhjT>ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjs>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo>hMmhjp>ubah}(h]h ]h"]h$]h&]uh1jhjT>ubeh}(h]h ]h"]h$]h&]uh1jhjo>hMmhjQ>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.hhMnhj>ubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMnhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMnhjQ>ubj)}(h3``unsigned int keylen`` length of the key in bytes h](j)}(h``unsigned int keylen``h]j)}(hj>h]hunsigned int keylen}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMohj>ubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMohj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMohjQ>ubeh}(h]h ]h"]h$]h&]uh1jhj5>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.hhMqhj5>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.hhMphj5>ubh)}(h **Context**h]j)}(hj.?h]hContext}(hj0?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.hhMthj5>ubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjD?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMuhj5>ubh)}(h **Return**h]j)}(hjU?h]hReturn}(hjW?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMwhj5>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}(hjk?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMvhj5>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_digest (C function)c.crypto_shash_digesthNtauh1hhj]2hhhNhNubh)}(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 ]j ah"]h$]h&]uh1j hj?hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM|ubj")}(h h]h }(hj?hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj?hhhj?hM|ubj3)}(hcrypto_shash_digesth]j9)}(hcrypto_shash_digesth]hcrypto_shash_digest}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj?hhhj?hM|ubj )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hstruct shash_desc *desch](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 shash_desch]h shash_desc}(hj?hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj?modnameN classnameNj@ jC )}jF ]jI )}j< j?sbc.crypto_shash_digestasbuh1hhj?ubj")}(h h]h }(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj?ubj^ )}(hja h]h*}(hj#@hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hj?ubj9)}(hdesch]hdesc}(hj0@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj?ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj?ubj )}(hconst u8 *datah](j)}(hj h]hconst}(hjI@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE@ubj")}(h h]h }(hjV@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjE@ubh)}(hhh]j9)}(hu8h]hu8}(hjg@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjd@ubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetji@modnameN classnameNj@ jC )}jF ]j@c.crypto_shash_digestasbuh1hhjE@ubj")}(h h]h }(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjE@ubj^ )}(hja h]h*}(hj@hhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjE@ubj9)}(hdatah]hdata}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjE@ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj?ubj )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj")}(h h]h }(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj@ubj )}(hinth]hint}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj")}(h h]h }(hj@hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj@ubj9)}(hlenh]hlen}(hj@hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj@ubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj?ubj )}(hu8 *outh](h)}(hhh]j9)}(hu8h]hu8}(hj AhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj Aubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjAmodnameN classnameNj@ jC )}jF ]j@c.crypto_shash_digestasbuh1hhjAubj")}(h h]h }(hj+AhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjAubj^ )}(hja h]h*}(hj9AhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjAubj9)}(houth]hout}(hjFAhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjAubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hj?ubeh}(h]h ]h"]h$]h&]jPjQuh1j hj?hhhj?hM|ubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj?hhhj?hM|ubah}(h]j?ah ](j^j_eh"]h$]h&]jcjd)jehuh1jhj?hM|hj?hhubjg)}(hhh]h)}(h#calculate message digest for bufferh]h#calculate message digest for buffer}(hjpAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM|hjmAhhubah}(h]h ]h"]h$]h&]uh1jfhj?hhhj?hM|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1hhhhj]2hNhNubj)}(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)}(hjAh]h Parameters}(hjAhhhNhNubah}(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.hhMhjAubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hjAh]hstruct shash_desc *desc}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM}hjAubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM}hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM}hjAubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjAh]hconst u8 *data}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhM~hjAubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM~hjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM~hjAubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hj#Bh]hunsigned int len}(hj%BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Bubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjBubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj")}(h h]h }(hjLFhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjFubj^ )}(hja h]h*}(hjZFhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjFubj9)}(hinh]hin}(hjgFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjFubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjEubeh}(h]h ]h"]h$]h&]jPjQuh1j hjpEhhhjEhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjlEhhhjEhMubah}(h]jgEah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjEhMhjiEhhubjg)}(hhh]h)}(himport operational stateh]himport operational state}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jfhjiEhhhjEhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1hhhhj]2hNhNubj)}(hX**Parameters** ``struct shash_desc *desc`` reference to the operational state handle the state imported into ``const void *in`` buffer holding the state **Description** This function imports the hash state into the operational state handle from the input buffer. That buffer should have been generated with the crypto_ahash_export function. **Context** Softirq or process context. **Return** 0 if the import was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubj)}(hhh](j)}(h^``struct shash_desc *desc`` reference to the operational state handle the state imported into h](j)}(h``struct shash_desc *desc``h]j)}(hjFh]hstruct shash_desc *desc}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubj)}(hhh]h)}(hAreference to the operational state handle the state imported intoh]hAreference to the operational state handle the state imported into}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjFubj)}(h,``const void *in`` buffer holding the state h](j)}(h``const void *in``h]j)}(hj Gh]hconst void *in}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Gubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjGubj)}(hhh]h)}(hbuffer holding the stateh]hbuffer holding the state}(hj$GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj GhMhj!Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj GhMhjFubeh}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j)}(hjFGh]h Description}(hjHGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubh)}(hThis function imports the hash state into the operational state handle from the input buffer. That buffer should have been generated with the crypto_ahash_export function.h]hThis function imports the hash state into the operational state handle from the input buffer. That buffer should have been generated with the crypto_ahash_export function.}(hj\GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubh)}(h **Context**h]j)}(hjmGh]hContext}(hjoGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubh)}(h **Return**h]j)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubh)}(h80 if the import was successful; < 0 if an error occurredh]h80 if the import was successful; < 0 if an error occurred}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_shash_init (C function)c.crypto_shash_inithNtauh1hhj]2hhhNhNubh)}(hhh](j)}(h/int crypto_shash_init (struct shash_desc *desc)h]j )}(h.int crypto_shash_init(struct shash_desc *desc)h](j )}(hinth]hint}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjGhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjGhhhjGhMubj3)}(hcrypto_shash_inith]j9)}(hcrypto_shash_inith]hcrypto_shash_init}(hjGhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjGubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjGhhhjGhMubj )}(h(struct shash_desc *desc)h]j )}(hstruct shash_desc *desch](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj")}(h h]h }(hj#HhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjHubh)}(hhh]j9)}(h shash_desch]h shash_desc}(hj4HhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hj1Hubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetj6HmodnameN classnameNj@ jC )}jF ]jI )}j< jGsbc.crypto_shash_initasbuh1hhjHubj")}(h h]h }(hjTHhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjHubj^ )}(hja h]h*}(hjbHhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjHubj9)}(hdesch]hdesc}(hjoHhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjHubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjHubah}(h]h ]h"]h$]h&]jPjQuh1j hjGhhhjGhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjGhhhjGhMubah}(h]jGah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjGhMhjGhhubjg)}(hhh]h)}(h(re)initialize message digesth]h(re)initialize message digest}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1jfhjGhhhjGhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1hhhhj]2hNhNubj)}(hX**Parameters** ``struct shash_desc *desc`` operational state handle that is already filled **Description** The call (re-)initializes the message digest referenced by the operational state handle. Any potentially existing state created by previous operations is discarded. **Context** Softirq or process context. **Return** 0 if the message digest initialization was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubj)}(hhh]j)}(hL``struct shash_desc *desc`` operational state handle that is already filled h](j)}(h``struct shash_desc *desc``h]j)}(hjHh]hstruct shash_desc *desc}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubj)}(hhh]h)}(h/operational state handle that is already filledh]h/operational state handle that is already filled}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(hThe call (re-)initializes the message digest referenced by the operational state handle. Any potentially existing state created by previous operations is discarded.h]hThe call (re-)initializes the message digest referenced by the operational state handle. Any potentially existing state created by previous operations is discarded.}(hj+IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(h **Context**h]j)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Iubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjRIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(h **Return**h]j)}(hjcIh]hReturn}(hjeIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubh)}(hO0 if the message digest initialization was successful; < 0 if an error occurredh]hO0 if the message digest initialization was successful; < 0 if an error occurred}(hjyIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_shash_finup (C function)c.crypto_shash_finuphNtauh1hhj]2hhhNhNubh)}(hhh](j)}(h[int crypto_shash_finup (struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h]j )}(hZint crypto_shash_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hinth]hint}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjIhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjIhhhjIhMubj3)}(hcrypto_shash_finuph]j9)}(hcrypto_shash_finuph]hcrypto_shash_finup}(hjIhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hjIhhhjIhMubj )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hstruct shash_desc *desch](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj")}(h h]h }(hjIhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjIubh)}(hhh]j9)}(h shash_desch]h shash_desc}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjJmodnameN classnameNj@ jC )}jF ]jI )}j< jIsbc.crypto_shash_finupasbuh1hhjIubj")}(h h]h }(hj#JhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjIubj^ )}(hja h]h*}(hj1JhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjIubj9)}(hdesch]hdesc}(hj>JhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjIubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjIubj )}(hconst u8 *datah](j)}(hj h]hconst}(hjWJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSJubj")}(h h]h }(hjdJhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjSJubh)}(hhh]j9)}(hu8h]hu8}(hjuJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjrJubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjwJmodnameN classnameNj@ jC )}jF ]jJc.crypto_shash_finupasbuh1hhjSJubj")}(h h]h }(hjJhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjSJubj^ )}(hja h]h*}(hjJhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjSJubj9)}(hdatah]hdata}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSJubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjIubj )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj")}(h h]h }(hjJhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjJubj )}(hinth]hint}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj")}(h h]h }(hjJhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjJubj9)}(hlenh]hlen}(hjJhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjJubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjIubj )}(hu8 *outh](h)}(hhh]j9)}(hu8h]hu8}(hjKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjKmodnameN classnameNj@ jC )}jF ]jJc.crypto_shash_finupasbuh1hhjKubj")}(h h]h }(hj9KhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjKubj^ )}(hja h]h*}(hjGKhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjKubj9)}(houth]hout}(hjTKhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjKubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjIubeh}(h]h ]h"]h$]h&]jPjQuh1j hjIhhhjIhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhjIhhhjIhMubah}(h]jIah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjIhMhjIhhubjg)}(hhh]h)}(h"calculate message digest of bufferh]h"calculate message digest of buffer}(hj~KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj{Khhubah}(h]h ]h"]h$]h&]uh1jfhjIhhhjIhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1hhhhj]2hNhNubj)}(hX**Parameters** ``struct shash_desc *desc`` see crypto_shash_final() ``const u8 *data`` see crypto_shash_update() ``unsigned int len`` see crypto_shash_update() ``u8 *out`` see crypto_shash_final() **Description** This function is a "short-hand" for the function calls of crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate functions. **Context** Softirq or process context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hjKh]hstruct shash_desc *desc}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjKh]hconst u8 *data}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj LhMhjLubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhj LhMhjKubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hj1Lh]hunsigned int len}(hj3LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Lubah}(h]h ]h"]h$]h&]uh1jVhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj+Lubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjJLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFLhMhjGLubah}(h]h ]h"]h$]h&]uh1jhj+Lubeh}(h]h ]h"]h$]h&]uh1jhjFLhMhjKubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjjLh]hu8 *out}(hjlLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjdLubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjdLubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjKubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(hThis function is a "short-hand" for the function calls of crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate functions.h]hThis function is a “short-hand” for the function calls of crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate functions.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(h **Context**h]j)}(hjLh]hContext}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(h **Return**h]j)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubh)}(hI0 if the message digest creation was successful; < 0 if an error occurredh]hI0 if the message digest creation was successful; < 0 if an error occurred}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h crypto_shash_update (C function)c.crypto_shash_updatehNtauh1hhj]2hhhNhNubh)}(hhh](j)}(hSint crypto_shash_update (struct shash_desc *desc, const u8 *data, unsigned int len)h]j )}(hRint crypto_shash_update(struct shash_desc *desc, const u8 *data, unsigned int len)h](j )}(hinth]hint}(hj8MhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4MhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjGMhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj4MhhhjFMhMubj3)}(hcrypto_shash_updateh]j9)}(hcrypto_shash_updateh]hcrypto_shash_update}(hjYMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjUMubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj4MhhhjFMhMubj )}(h;(struct shash_desc *desc, const u8 *data, unsigned int len)h](j )}(hstruct shash_desc *desch](j)}(hjh]hstruct}(hjuMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqMubj")}(h h]h }(hjMhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjqMubh)}(hhh]j9)}(h shash_desch]h shash_desc}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjMmodnameN classnameNj@ jC )}jF ]jI )}j< j[Msbc.crypto_shash_updateasbuh1hhjqMubj")}(h h]h }(hjMhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjqMubj^ )}(hja h]h*}(hjMhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjqMubj9)}(hdesch]hdesc}(hjMhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjqMubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjmMubj )}(hconst u8 *datah](j)}(hj h]hconst}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj")}(h h]h }(hjMhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjMubh)}(hhh]j9)}(hu8h]hu8}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjNubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjNmodnameN classnameNj@ jC )}jF ]jMc.crypto_shash_updateasbuh1hhjMubj")}(h h]h }(hj#NhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjMubj^ )}(hja h]h*}(hj1NhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjMubj9)}(hdatah]hdata}(hj>NhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjMubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjmMubj )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjWNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjSNubj")}(h h]h }(hjeNhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjSNubj )}(hinth]hint}(hjsNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjSNubj")}(h h]h }(hjNhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjSNubj9)}(hlenh]hlen}(hjNhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjSNubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjmMubeh}(h]h ]h"]h$]h&]jPjQuh1j hj4MhhhjFMhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj0MhhhjFMhMubah}(h]j+Mah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjFMhMhj-Mhhubjg)}(hhh]h)}(h)add data to message digest for processingh]h)add data to message digest for processing}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1jfhj-MhhhjFMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1hhhhj]2hNhNubj)}(hX**Parameters** ``struct shash_desc *desc`` operational state handle that is already initialized ``const u8 *data`` input data to be added to the message digest ``unsigned int len`` length of the input data **Description** Updates the message digest state of the operational state handle. **Context** Softirq or process context. **Return** 0 if the message digest update was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubj)}(hhh](j)}(hQ``struct shash_desc *desc`` operational state handle that is already initialized h](j)}(h``struct shash_desc *desc``h]j)}(hjNh]hstruct shash_desc *desc}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubj)}(hhh]h)}(h4operational state handle that is already initializedh]h4operational state handle that is already initialized}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjNubj)}(h@``const u8 *data`` input data to be added to the message digest h](j)}(h``const u8 *data``h]j)}(hj3Oh]hconst u8 *data}(hj5OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Oubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhj-Oubj)}(hhh]h)}(h,input data to be added to the message digesth]h,input data to be added to the message digest}(hjLOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHOhMhjIOubah}(h]h ]h"]h$]h&]uh1jhj-Oubeh}(h]h ]h"]h$]h&]uh1jhjHOhMhjNubj)}(h.``unsigned int len`` length of the input data h](j)}(h``unsigned int len``h]j)}(hjlOh]hunsigned int len}(hjnOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjfOubj)}(hhh]h)}(hlength of the input datah]hlength of the input data}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjfOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjNubeh}(h]h ]h"]h$]h&]uh1jhjNubh)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(hAUpdates the message digest state of the operational state handle.h]hAUpdates the message digest state of the operational state handle.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(h **Context**h]j)}(hjOh]hContext}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubh)}(hG0 if the message digest update was successful; < 0 if an error occurredh]hG0 if the message digest update was successful; < 0 if an error occurred}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hcrypto_shash_final (C function)c.crypto_shash_finalhNtauh1hhj]2hhhNhNubh)}(hhh](j)}(h9int crypto_shash_final (struct shash_desc *desc, u8 *out)h]j )}(h8int crypto_shash_final(struct shash_desc *desc, u8 *out)h](j )}(hinth]hint}(hj:PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6PhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMubj")}(h h]h }(hjIPhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj6PhhhjHPhMubj3)}(hcrypto_shash_finalh]j9)}(hcrypto_shash_finalh]hcrypto_shash_final}(hj[PhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjWPubah}(h]h ](jKjLeh"]h$]h&]jPjQuh1j2hj6PhhhjHPhMubj )}(h"(struct shash_desc *desc, u8 *out)h](j )}(hstruct shash_desc *desch](j)}(hjh]hstruct}(hjwPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsPubj")}(h h]h }(hjPhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjsPubh)}(hhh]j9)}(h shash_desch]h shash_desc}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjPmodnameN classnameNj@ jC )}jF ]jI )}j< j]Psbc.crypto_shash_finalasbuh1hhjsPubj")}(h h]h }(hjPhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjsPubj^ )}(hja h]h*}(hjPhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjsPubj9)}(hdesch]hdesc}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjsPubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjoPubj )}(hu8 *outh](h)}(hhh]j9)}(hu8h]hu8}(hjPhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubah}(h]h ]h"]h$]h&] refdomainjreftypej< reftargetjPmodnameN classnameNj@ jC )}jF ]jPc.crypto_shash_finalasbuh1hhjPubj")}(h h]h }(hj QhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjPubj^ )}(hja h]h*}(hjQhhhNhNubah}(h]h ]jj ah"]h$]h&]uh1j] hjPubj9)}(houth]hout}(hj%QhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j8hjPubeh}(h]h ]h"]h$]h&]noemphjPjQuh1j hjoPubeh}(h]h ]h"]h$]h&]jPjQuh1j hj6PhhhjHPhMubeh}(h]h ]h"]h$]h&]jPjQjXuh1j jYjZhj2PhhhjHPhMubah}(h]j-Pah ](j^j_eh"]h$]h&]jcjd)jehuh1jhjHPhMhj/Phhubjg)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hjOQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjLQhhubah}(h]h ]h"]h$]h&]uh1jfhj/PhhhjHPhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgQjjgQjjjuh1hhhhj]2hNhNubj)}(hX=**Parameters** ``struct shash_desc *desc`` operational state handle that is already filled with data ``u8 *out`` output buffer filled with the message digest **Description** Finalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer. The caller must ensure that the output buffer is large enough by using crypto_shash_digestsize. **Context** Softirq or process context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]j)}(hjqQh]h Parameters}(hjsQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoQubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubj)}(hhh](j)}(hV``struct shash_desc *desc`` operational state handle that is already filled with data h](j)}(h``struct shash_desc *desc``h]j)}(hjQh]hstruct shash_desc *desc}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjQubj)}(hhh]h)}(h9operational state handle that is already filled with datah]h9operational state handle that is already filled with data}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubj)}(h9``u8 *out`` output buffer filled with the message digest h](j)}(h ``u8 *out``h]j)}(hjQh]hu8 *out}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjQubj)}(hhh]h)}(h,output buffer filled with the message digesth]h,output buffer filled with the message digest}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjkQubh)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubh)}(hXFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer. The caller must ensure that the output buffer is large enough by using crypto_shash_digestsize.h]hXFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer. The caller must ensure that the output buffer is large enough by using crypto_shash_digestsize.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubh)}(h **Context**h]j)}(hj+Rh]hContext}(hj-RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Rubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjARhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubh)}(h **Return**h]j)}(hjRRh]hReturn}(hjTRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubh)}(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}(hjhRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:37: ./include/crypto/hash.hhMhjkQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj]2hhhNhNubeh}(h]synchronous-message-digest-apiah ]h"]synchronous message digest apiah$]h&]uh1hhhhhhhhK ubeh}(h]message-digestah ]h"]message digestah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjRerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jRjRj j jV%jS%jZ2jW2jRjRu nametypes}(jRj jV%jZ2jRuh}(jRhj hhjjjjS%j j j jjjtjyj8j=jjjjj}jjXj]jjjjjSjXjv!j{!j#j#jW2jY%j%j%j'j(j_*jd*j+j+j/j#/jRj]2j2j2j5j5j07j57j8j8j:j:j<j<j?j?jCj"CjgEjlEjGjGjIjIj+Mj0Mj-Pj2Pu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.