xsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/crypto/api-digestmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h$Message Digest Algorithm Definitionsh]h$Message Digest Algorithm Definitions}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/crypto/api-digest.rsthKubh 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:4: ./include/crypto/hash.hhKhhhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleahash_alg (C struct) c.ahash_alghNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h ahash_algh]hdesc_signature_line)}(hstruct ahash_algh](hdesc_sig_keyword)}(hstructh]hstruct}(hhhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKubhdesc_sig_space)}(h h]h }(hhhhhNhNubah}(h]h ]wah"]h$]h&]uh1hhhhhhhhKubh desc_name)}(h ahash_algh]h desc_sig_name)}(hhh]h ahash_alg}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j hhhhhhhKubeh}(h]h ]h"]h$]h&]j+j, add_permalinkuh1hsphinx_line_type declaratorhhhhhhhKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhhhKhhhhubh desc_content)}(hhh]h)}(h&asynchronous message digest definitionh]h&asynchronous message digest definition}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKLhjChhubah}(h]h ]h"]h$]h&]uh1jAhhhhhhhKubeh}(h]h ](cstructeh"]h$]h&]domainj^objtypej_desctypej_noindex 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}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh:}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKPhjkubh literal_block)}(hX struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; };h]hX struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*export_core)(struct ahash_request *req, void *out); int (*import_core)(struct ahash_request *req, const void *in); int (*setkey)(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_ahash *tfm); void (*exit_tfm)(struct crypto_ahash *tfm); int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src); struct hash_alg_common halg; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKRhjkubh)}(h **Members**h]jt)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKchjkubhdefinition_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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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](jt)}(h**[mandatory]**h]h [mandatory]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubhXA 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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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)}(hjh]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhK^hj ubj)}(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](jt)}(h**[mandatory]**h]h [mandatory]}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj+ubhXu Push a chunk of data into the driver for transformation. This function actually pushes blocks of data from upper layers into the driver, which then passes those to the hardware as seen fit. This function must not finalize the HASH transformation by calculating the final message digest as this only adds more data into the transformation. This function shall not modify the transformation context, as this function may be called in parallel with the same transformation object. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point. Driver must not use req->result. For block-only algorithms, }(hj+hhhNhNubjt)}(h **update**h]hupdate}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj+ubhJ must return the number of bytes to store in the API partial block buffer.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKShj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hK^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)}(hjlh]hfinal}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKchjfubj)}(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](jt)}(h**[mandatory]**h]h [mandatory]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubhX? 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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhK_hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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](jt)}(h**[optional]**h]h [optional]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh Combination of }(hjhhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh and }(hjhhhNhNubjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh0. This function is effectively a combination of }(hjhhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh and }hjsbjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh6 calls issued in sequence. As some hardware cannot do }(hjhhhNhNubjt)}(h **update**h]hupdate}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh and }hjsbjt)}(h **final**h]hfinal}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh 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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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)}(hjhh]hdigest}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKohjbubj)}(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 }(hjhhhNhNubjt)}(h**init**h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh and }(hjhhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh and }hjsbjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubhG. This function effectively behaves as the entire chain of operations, }(hjhhhNhNubjt)}(h**init**h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh, }(hjhhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh and }hjsbjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh issued in sequence. Just like }(hjhhhNhNubjt)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh7, this was added for hardware which cannot do even the }(hjhhhNhNubjt)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh, 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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKjhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKohjubj)}(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)}(hj2h]hexport}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj,ubj)}(hhh]h)}(hXExport partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be **import** 'ed back later on. This is useful in case you want to save partial result of the transformation after processing certain amount of data and reload this partial result multiple times later on for multiple re-use. No data processing happens at this point. Driver must not use req->result.h](hExport partial state of the transformation. This function dumps the entire state of the ongoing transformation into a provided block of data so it can be }(hjKhhhNhNubjt)}(h **import**h]himport}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jshjKubhX! ‘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.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhK}hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhjubj)}(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)}(hj~h]himport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjxubj)}(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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hXO``setkey`` Set optional key used by the hashing algorithm. Intended to push optional key used by the hashing algorithm from upper layers into the driver. This function can store the key in the transformation context or can outright program it into the hardware. In the former case, one must be careful to program the key into the hardware at appropriate time and one must be careful that .setkey() can be called multiple times during the existence of the transformation object. Not all hashing algorithms do implement this function as it is only needed for keyed message digests. SHAx/MDx/CRCx do NOT implement this function. HMAC(MDx)/HMAC(SHAx)/CMAC(AES) do implement this function. This function must be called before any other of the **init**, **update**, **final**, **finup**, **digest** is called. No data processing happens at this point. h](j)}(h ``setkey``h]j)}(hj,h]hsetkey}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhK|hj&ubj)}(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 }(hjEhhhNhNubjt)}(h**init**h]hinit}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubh, }(hjEhhhNhNubjt)}(h **update**h]hupdate}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubh, }hjEsbjt)}(h **final**h]hfinal}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubh, }hjEsbjt)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubh, }hjEsbjt)}(h **digest**h]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubh5 is called. No data processing happens at this point.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKphjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhK|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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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 }(hjhhhNhNubjt)}(h **init_tfm**h]hinit_tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh(, used to remove various changes set in }(hjhhhNhNubjt)}(h **init_tfm**h]hinit_tfm}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hjXh]h clone_tfm}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjRubj)}(hhh]h)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjubj)}(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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jihhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌshash_alg (C struct) c.shash_alghNtauh1hhhhhhNhNubh)}(hhh](h)}(h shash_algh]h)}(hstruct shash_algh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(h shash_algh]j)}(hjh]h shash_alg}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]h)}(h%synchronous message digest definitionh]h%synchronous message digest definition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j^structeh"]h$]h&]jcj^jdjEjejEjfjgjhuh1hhhhhhNhNubjj)}(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](jt)}(h**Definition**h]h Definition}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjMubh:}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjIubj)}(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; }; };}hjjsbah}(h]h ]h"]h$]h&]j+j,uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjIubh)}(h **Members**h]jt)}(hj{h]hMembers}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjyubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjIubj)}(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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``final`` see struct ahash_alg h](j)}(h ``final``h]j)}(hj h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjubj)}(h``finup`` see struct ahash_alg h](j)}(h ``finup``h]j)}(hjEh]hfinup}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj?ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhKhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhKhjubj)}(h ``digest`` see struct ahash_alg h](j)}(h ``digest``h]j)}(hj~h]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjxubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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)}(hjh]himport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h%``export_core`` see struct ahash_alg h](j)}(h``export_core``h]j)}(hj) h]h export_core}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj# ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj> hKhj? ubah}(h]h ]h"]h$]h&]uh1jhj# ubeh}(h]h ]h"]h$]h&]uh1jhj> hKhjubj)}(h%``import_core`` see struct ahash_alg h](j)}(h``import_core``h]j)}(hjb h]h import_core}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj\ ubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw hKhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw 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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h``exit_tfm`` Deinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**. h](j)}(h ``exit_tfm``h]j)}(hj h]hexit_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hDeinitialize the cryptographic transformation object. This is a counterpart to **init_tfm**, used to remove various changes set in **init_tfm**.h](hODeinitialize the cryptographic transformation object. This is a counterpart to }(hj' hhhNhNubjt)}(h **init_tfm**h]hinit_tfm}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj' ubh(, used to remove various changes set in }(hj' hhhNhNubjt)}(h **init_tfm**h]hinit_tfm}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj' ubh.}(hj' hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj# hKhjubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hjl h]h clone_tfm}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjf 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&]uh1jhjf 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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- hKhj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj- hKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hjQ h]hhalg}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjK ubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1jhjf hKhjubeh}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jihhhhhNhNubeh}(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 hhhhhK ubh)}(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:13: ./include/crypto/hash.hhMhj 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:13: ./include/crypto/hash.hhMhj hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_alloc_ahash (C function)c.crypto_alloc_ahashhNtauh1hhj hhhNhNubh)}(hhh](h)}(hSstruct crypto_ahash * crypto_alloc_ahash (const char *alg_name, u32 type, u32 mask)h]h)}(hQstruct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type, u32 mask)h](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM)ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj hM)ubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj^reftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j crypto_alloc_ahashsbc.crypto_alloc_ahashasbuh1hhj hhhj hM)ubh)}(h h]h }(hj* hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj hM)ubhdesc_sig_punctuation)}(h*h]h*}(hj: hhhNhNubah}(h]h ]pah"]h$]h&]uh1j8 hj hhhj hM)ubj)}(hcrypto_alloc_ahashh]j)}(hj' h]hcrypto_alloc_ahash}(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhj hM)ubhdesc_parameterlist)}(h*(const char *alg_name, u32 type, u32 mask)h](hdesc_parameter)}(hconst char *alg_nameh](h)}(hconsth]hconst}(hjl hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjh ubh)}(h h]h }(hjz hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjh ubhdesc_sig_keyword_type)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hjh ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjh ubj9 )}(hj< h]h*}(hj hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjh ubj)}(halg_nameh]halg_name}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjb ubjg )}(hu32 typeh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj modnameN classnameNj j )}j! ]j% c.crypto_alloc_ahashasbuh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(htypeh]htype}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjb ubjg )}(hu32 maskh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj modnameN classnameNj j )}j! ]j% c.crypto_alloc_ahashasbuh1hhj ubh)}(h h]h }(hj6 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hmaskh]hmask}(hjD hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjb ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj hhhj hM)ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj hM)ubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hM)hj hhubjB)}(hhh]h)}(hallocate ahash cipher handleh]hallocate ahash cipher handle}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM)hjk hhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj hM)ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj jej jfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM-hj 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:16: ./include/crypto/hash.hhM+hj 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:16: ./include/crypto/hash.hhM*hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM+hj ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hj h]hu32 type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM,hj ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM,hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM,hj ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hj"h]hu32 mask}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM-hjubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM-hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM-hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]jt)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj[ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM/hj ubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM3hj ubj)}(hhh]j)}(hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h](j)}(hDallocated cipher handle in case of success; IS_ERR() is true in caseh]hDallocated cipher handle in case of success; IS_ERR() is true in case}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM3hjubj)}(hhh]h)}(h.of an error, PTR_ERR() returns the error code.h]h.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:16: ./include/crypto/hash.hhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_free_ahash (C function)c.crypto_free_ahashhNtauh1hhj hhhNhNubh)}(hhh](h)}(h1void crypto_free_ahash (struct crypto_ahash *tfm)h]h)}(h0void crypto_free_ahash(struct crypto_ahash *tfm)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMAubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMAubj)}(hcrypto_free_ahashh]j)}(hcrypto_free_ahashh]hcrypto_free_ahash}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMAubja )}(h(struct crypto_ahash *tfm)h]jg )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjQmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_free_ahashasbuh1hhj-ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj9 )}(hj< h]h*}(hj}hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj-ubj)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj)ubah}(h]h ]h"]h$]h&]j+j,uh1j` hjhhhjhMAubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMAubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMAhjhhubjB)}(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:16: ./include/crypto/hash.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMAubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMEhjubj)}(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:16: ./include/crypto/hash.hhMBhjubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMBhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMBhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj.ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMDhjubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hjFhhhNhNubjt)}(h**tfm**h]htfm}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjFubh8 is a NULL or error pointer, this function does nothing.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$crypto_ahash_digestsize (C function)c.crypto_ahash_digestsizehNtauh1hhj hhhNhNubh)}(hhh](h)}(h?unsigned int crypto_ahash_digestsize (struct crypto_ahash *tfm)h]h)}(h>unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm)h](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM|ubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhM|ubj)}(hcrypto_ahash_digestsizeh]j)}(hcrypto_ahash_digestsizeh]hcrypto_ahash_digestsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhM|ubja )}(h(struct crypto_ahash *tfm)h]jg )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_ahash_digestsizeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hj,hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(htfmh]htfm}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubah}(h]h ]h"]h$]h&]j+j,uh1j` hjhhhjhM|ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhM|ubah}(h]jzah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhM|hj|hhubjB)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM|hj`hhubah}(h]h ]h"]h$]h&]uh1jAhj|hhhjhM|ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj{jej{jfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjh]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM}hjubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(hmessage digest size of cipherh]hmessage digest size of cipher}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#crypto_ahash_statesize (C function)c.crypto_ahash_statesizehNtauh1hhj hhhNhNubh)}(hhh](h)}(h>unsigned int crypto_ahash_statesize (struct crypto_ahash *tfm)h]h)}(h=unsigned int crypto_ahash_statesize(struct crypto_ahash *tfm)h](j )}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGhhhjYhMubj )}(hinth]hint}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGhhhjYhMubh)}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGhhhjYhMubj)}(hcrypto_ahash_statesizeh]j)}(hcrypto_ahash_statesizeh]hcrypto_ahash_statesize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjGhhhjYhMubja )}(h(struct crypto_ahash *tfm)h]jg )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_ahash_statesizeasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubah}(h]h ]h"]h$]h&]j+j,uh1j` hjGhhhjYhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjChhhjYhMubah}(h]j>ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjYhMhj@hhubjB)}(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:16: ./include/crypto/hash.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1jAhj@hhhjYhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj?jej?jfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjCubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjhh]hstruct crypto_ahash *tfm}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjbubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjCubh)}(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:16: ./include/crypto/hash.hhMhjCubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjCubh)}(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:16: ./include/crypto/hash.hhMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_ahash_reqtfm (C function)c.crypto_ahash_reqtfmhNtauh1hhj hhhNhNubh)}(hhh](h)}(hEstruct crypto_ahash * crypto_ahash_reqtfm (struct ahash_request *req)h]h)}(hCstruct crypto_ahash *crypto_ahash_reqtfm(struct ahash_request *req)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhMubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj0modnameN classnameNj j )}j! ]j$ )}j crypto_ahash_reqtfmsbc.crypto_ahash_reqtfmasbuh1hhj hhhjhMubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhjhMubj9 )}(hj< h]h*}(hj]hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj hhhjhMubj)}(hcrypto_ahash_reqtfmh]j)}(hjLh]hcrypto_ahash_reqtfm}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhjhMubja )}(h(struct ahash_request *req)h]jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]jJc.crypto_ahash_reqtfmasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubah}(h]h ]h"]h$]h&]j+j,uh1j` hj hhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]h)}(h!obtain cipher handle from requesth]h!obtain cipher handle from request}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj"jej"jfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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)}(hjKh]hstruct ahash_request *req}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjEubj)}(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}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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:16: ./include/crypto/hash.hhMhj&ubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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:16: ./include/crypto/hash.hhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!crypto_ahash_reqsize (C function)c.crypto_ahash_reqsizehNtauh1hhj hhhNhNubh)}(hhh](h)}(hj?)j@huh1hhjhMhjhhubjB)}(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:16: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhj hNhNubjj)}(hb**Parameters** ``struct crypto_ahash *tfm`` cipher handle **Return** size of the request datah](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubj)}(hhh]j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjh]hstruct crypto_ahash *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]jt)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(hsize of the request datah]hsize of the request data}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_ahash_setkey (C function)c.crypto_ahash_setkeyhNtauh1hhj hhhNhNubh)}(hhh](h)}(hVint crypto_ahash_setkey (struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h]h)}(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:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hcrypto_ahash_setkeyh]j)}(hcrypto_ahash_setkeyh]hcrypto_ahash_setkey}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubja )}(h>(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h](jg )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_ahash_setkeyasbuh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(htfmh]htfm}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubjg )}(h const u8 *keyh](h)}(hjn h]hconst}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj;ubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubh)}(hhh]j)}(hu8h]hu8}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj_modnameN classnameNj j )}j! ]jc.crypto_ahash_setkeyasbuh1hhj;ubh)}(h h]h }(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;ubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj;ubj)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubjg )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hkeylenh]hkeylen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubeh}(h]h ]h"]h$]h&]j+j,uh1j` hjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]h)}(hset key for cipher handleh]hset key for cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj)jej)jfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj-ubj)}(hhh](j)}(h+``struct crypto_ahash *tfm`` cipher handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hjRh]hstruct crypto_ahash *tfm}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjLubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubj)}(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:16: ./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&]uh1jhjhMhjIubj)}(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:16: ./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&]uh1jhjhMhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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:16: ./include/crypto/hash.hhMhj-ubh)}(h **Return**h]jt)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_ahash_finup (C function)c.crypto_ahash_finuphNtauh1hhj hhhNhNubh)}(hhh](h)}(h2int crypto_ahash_finup (struct ahash_request *req)h]h)}(h1int crypto_ahash_finup(struct ahash_request *req)h](j )}(hinth]hint}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjghhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjghhhjyhMubj)}(hcrypto_ahash_finuph]j)}(hcrypto_ahash_finuph]hcrypto_ahash_finup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjghhhjyhMubja )}(h(struct ahash_request *req)h]jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_ahash_finupasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubah}(h]h ]h"]h$]h&]j+j,uh1j` hjghhhjyhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjchhhjyhMubah}(h]j^ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjyhMhj`hhubjB)}(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:16: ./include/crypto/hash.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jAhj`hhhjyhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjCjejCjfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjKubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjGubj)}(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)}(hjlh]hstruct ahash_request *req}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjfubj)}(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:16: ./include/crypto/hash.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjGubh)}(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:16: ./include/crypto/hash.hhMhjGubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjGubh)}(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:16: ./include/crypto/hash.hhMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_ahash_final (C function)c.crypto_ahash_finalhNtauh1hhj hhhNhNubh)}(hhh](h)}(h2int crypto_ahash_final (struct ahash_request *req)h]h)}(h1int crypto_ahash_final(struct ahash_request *req)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj"hMubj)}(hcrypto_ahash_finalh]j)}(hcrypto_ahash_finalh]hcrypto_ahash_final}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhj"hMubja )}(h(struct ahash_request *req)h]jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjMubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjqmodnameN classnameNj j )}j! ]j$ )}j j7sbc.crypto_ahash_finalasbuh1hhjMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjMubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjIubah}(h]h ]h"]h$]h&]j+j,uh1j` hjhhhj"hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj"hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj"hMhj hhubjB)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj"hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hgreference to the ahash_request handle that holds all information needed to perform the cipher operationh]hgreference to the ahash_request handle that holds all information needed to perform the cipher operation}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jshjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(h **Return**h]jt)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjvubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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:16: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_ahash_digest (C function)c.crypto_ahash_digesthNtauh1hhj hhhNhNubh)}(hhh](h)}(h3int crypto_ahash_digest (struct ahash_request *req)h]h)}(h2int crypto_ahash_digest(struct ahash_request *req)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hcrypto_ahash_digesth]j)}(hcrypto_ahash_digesth]hcrypto_ahash_digest}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMubja )}(h(struct ahash_request *req)h]jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_ahash_digestasbuh1hhjubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hjFhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(hreqh]hreq}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubah}(h]h ]h"]h$]h&]j+j,uh1j` hjhhhjhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMhjhhubjB)}(hhh]h)}(h%calculate message digest for a bufferh]h%calculate message digest for a buffer}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjzhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubj)}(hhh]j)}(h``struct ahash_request *req`` reference to the ahash_request handle that holds all information needed to perform the cipher operation h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./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:16: ./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]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(hThis function is a "short-hand" for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions.h]hThis function is a “short-hand” for the function calls of crypto_ahash_init, crypto_ahash_update and crypto_ahash_final. The parameters have the same meaning as discussed for those separate three functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(h **Return**h]jt)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_ahash_export (C function)c.crypto_ahash_exporthNtauh1hhj hhhNhNubh)}(hhh](h)}(h>int crypto_ahash_export (struct ahash_request *req, void *out)h]h)}(h=int crypto_ahash_export(struct ahash_request *req, void *out)h](j )}(hinth]hint}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjbhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbhhhjthMubj)}(hcrypto_ahash_exporth]j)}(hcrypto_ahash_exporth]hcrypto_ahash_export}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjbhhhjthMubja )}(h&(struct ahash_request *req, void *out)h](jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.crypto_ahash_exportasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj9 )}(hj< h]h*}(hjhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubjg )}(h void *outh](j )}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubh)}(h h]h }(hj# hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj9 )}(hj< h]h*}(hj1 hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj ubj)}(houth]hout}(hj> hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjubeh}(h]h ]h"]h$]h&]j+j,uh1j` hjbhhhjthMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj^hhhjthMubah}(h]jYah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjthMhj[hhubjB)}(hhh]h)}(h$extract current message digest stateh]h$extract current message digest state}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhje hhubah}(h]h ]h"]h$]h&]uh1jAhj[hhhjthMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj jej jfjgjhuh1hhhhj hNhNubjj)}(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]jt)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM hj 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:16: ./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:16: ./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]jt)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM hj 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()).}(hj3!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM hj ubh)}(h **Return**h]jt)}(hjD!h]hReturn}(hjF!hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjB!ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj ubh)}(h80 if the export was successful; < 0 if an error occurredh]h80 if the export was successful; < 0 if an error occurred}(hjZ!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_ahash_import (C function)c.crypto_ahash_importhNtauh1hhj hhhNhNubh)}(hhh](h)}(hCint crypto_ahash_import (struct ahash_request *req, const void *in)h]h)}(hBint crypto_ahash_import(struct ahash_request *req, const void *in)h](j )}(hinth]hint}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!hhhj!hMubj)}(hcrypto_ahash_importh]j)}(hcrypto_ahash_importh]hcrypto_ahash_import}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj!hhhj!hMubja )}(h+(struct ahash_request *req, const void *in)h](jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!ubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj!modnameN classnameNj j )}j! ]j$ )}j j!sbc.crypto_ahash_importasbuh1hhj!ubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubj9 )}(hj< h]h*}(hj"hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj!ubj)}(hreqh]hreq}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj!ubjg )}(hconst void *inh](h)}(hjn h]hconst}(hj8"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj4"ubh)}(h h]h }(hjE"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4"ubj )}(hvoidh]hvoid}(hjS"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4"ubh)}(h h]h }(hja"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj4"ubj9 )}(hj< h]h*}(hjo"hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj4"ubj)}(hinh]hin}(hj|"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4"ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj!ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj!hhhj!hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj!hhhj!hMubah}(h]j|!ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj!hMhj~!hhubjB)}(hhh]h)}(himport message digest stateh]himport message digest state}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1jAhj~!hhhj!hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj"jej"jfjgjhuh1hhhhj hNhNubjj)}(hX**Parameters** ``struct ahash_request *req`` reference to ahash_request handle the state is imported into ``const void *in`` buffer holding the state **Description** This function imports the hash state into the ahash_request handle from the input buffer. That buffer should have been generated with the crypto_ahash_export function. **Return** 0 if the import was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj"ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj"ubj)}(hhh](j)}(h[``struct ahash_request *req`` reference to ahash_request handle the state is imported into h](j)}(h``struct ahash_request *req``h]j)}(hj"h]hstruct ahash_request *req}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj"ubj)}(hhh]h)}(hj?)j@huh1hhj#hM hj#hhubjB)}(hhh]h)}(h$(re)initialize message digest handleh]h$(re)initialize message digest handle}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM hj$hhubah}(h]h ]h"]h$]h&]uh1jAhj#hhhj#hM ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj$jej$jfjgjhuh1hhhhj hNhNubjj)}(hX{**Parameters** ``struct ahash_request *req`` ahash_request handle that already is initialized with all necessary data using the ahash_request_* API functions **Description** The call (re-)initializes the message digest referenced by the ahash_request handle. Any potentially existing state created by previous operations is discarded. **Return** see crypto_ahash_final()h](h)}(h**Parameters**h]jt)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM$hj$ubj)}(hhh]j)}(h``struct ahash_request *req`` ahash_request handle that already is initialized with all necessary data using the ahash_request_* API functions 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:16: ./include/crypto/hash.hhM"hj$ubj)}(hhh]h)}(hpahash_request handle that already is initialized with all necessary data using the ahash_request_* API functionsh]hpahash_request handle that already is initialized with all necessary data using the ahash_request_* API functions}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM!hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM"hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]jt)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj%ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM$hj$ubh)}(hThe call (re-)initializes the message digest referenced by the ahash_request handle. Any potentially existing state created by previous operations is discarded.h]hThe call (re-)initializes the message digest referenced by the ahash_request handle. Any potentially existing state created by previous operations is discarded.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM$hj$ubh)}(h **Return**h]jt)}(hj+%h]hReturn}(hj-%hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj)%ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM(hj$ubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hjA%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM(hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj hhhNhNubeh}(h]asynchronous-message-digest-apiah ]h"]asynchronous message digest apiah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Asynchronous Hash Request Handleh]h Asynchronous Hash Request Handle}(hjb%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_%hhhhhKubh)}(hXThe :c:type:`ahash_request` data structure contains all pointers to data required for the asynchronous cipher operation. This includes the cipher handle (which can be used by multiple :c:type:`ahash_request` instances), pointer to plaintext and the message digest output buffer, asynchronous callback function, etc. It acts as a handle to the ahash_request_* API calls in a similar way as ahash handle to the crypto_ahash_* API calls.h](hThe }(hjp%hhhNhNubh)}(h:c:type:`ahash_request`h]j)}(hjz%h]h ahash_request}(hj|%hhhNhNubah}(h]h ](xrefj^c-typeeh"]h$]h&]uh1jhjx%ubah}(h]h ]h"]h$]h&]refdoccrypto/api-digest refdomainj^reftypetype refexplicitrefwarnj j )}j! ]sb reftarget ahash_requestuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:22: ./include/crypto/hash.hhM:hjp%ubh data structure contains all pointers to data required for the asynchronous cipher operation. This includes the cipher handle (which can be used by multiple }(hjp%hhhNhNubh)}(h:c:type:`ahash_request`h]j)}(hj%h]h ahash_request}(hj%hhhNhNubah}(h]h ](j%j^c-typeeh"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]refdocj% refdomainj^reftypetype refexplicitrefwarnj j%j% ahash_requestuh1hhj%hM:hjp%ubh instances), pointer to plaintext and the message digest output buffer, asynchronous callback function, etc. It acts as a handle to the ahash_request_* API calls in a similar way as ahash handle to the crypto_ahash_* API calls.}(hjp%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hM:hj_%hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"ahash_request_set_tfm (C function)c.ahash_request_set_tfmhNtauh1hhj_%hhhNhNubh)}(hhh](h)}(hPvoid ahash_request_set_tfm (struct ahash_request *req, struct crypto_ahash *tfm)h]h)}(hOvoid ahash_request_set_tfm(struct ahash_request *req, struct crypto_ahash *tfm)h](j )}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMEubh)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%hhhj%hMEubj)}(hahash_request_set_tfmh]j)}(hahash_request_set_tfmh]hahash_request_set_tfm}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj%hhhj%hMEubja )}(h5(struct ahash_request *req, struct crypto_ahash *tfm)h](jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj!&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubh)}(h h]h }(hj.&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hj?&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<&ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjA&modnameN classnameNj j )}j! ]j$ )}j j&sbc.ahash_request_set_tfmasbuh1hhj&ubh)}(h h]h }(hj_&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubj9 )}(hj< h]h*}(hjm&hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj&ubj)}(hreqh]hreq}(hjz&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj&ubjg )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hj&hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj&modnameN classnameNj j )}j! ]j[&c.ahash_request_set_tfmasbuh1hhj&ubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubj9 )}(hj< h]h*}(hj&hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj&ubj)}(htfmh]htfm}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj&ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj%hhhj%hMEubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj%hhhj%hMEubah}(h]j%ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj%hMEhj%hhubjB)}(hhh]h)}(h)update cipher handle reference in requesth]h)update cipher handle reference in request}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMEhj'hhubah}(h]h ]h"]h$]h&]uh1jAhj%hhhj%hMEubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj,'jej,'jfjgjhuh1hhhhj_%hNhNubjj)}(hX!**Parameters** ``struct ahash_request *req`` request handle to be modified ``struct crypto_ahash *tfm`` cipher handle that shall be added to the request handle **Description** Allow the caller to replace the existing ahash handle in the request data structure with a different one.h](h)}(h**Parameters**h]jt)}(hj6'h]h Parameters}(hj8'hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj4'ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMIhj0'ubj)}(hhh](j)}(h<``struct ahash_request *req`` request handle to be modified h](j)}(h``struct ahash_request *req``h]j)}(hjU'h]hstruct ahash_request *req}(hjW'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMFhjO'ubj)}(hhh]h)}(hrequest handle to be modifiedh]hrequest handle to be modified}(hjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj'hMFhjk'ubah}(h]h ]h"]h$]h&]uh1jhjO'ubeh}(h]h ]h"]h$]h&]uh1jhjj'hMFhjL'ubj)}(hU``struct crypto_ahash *tfm`` cipher handle that shall be added to the request handle h](j)}(h``struct crypto_ahash *tfm``h]j)}(hj'h]hstruct crypto_ahash *tfm}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMGhj'ubj)}(hhh]h)}(h7cipher handle that shall be added to the request handleh]h7cipher handle that shall be added to the request handle}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMGhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMGhjL'ubeh}(h]h ]h"]h$]h&]uh1jhj0'ubh)}(h**Description**h]jt)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj'ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMIhj0'ubh)}(hiAllow the caller to replace the existing ahash handle in the request data structure with a different one.h]hiAllow the caller to replace the existing ahash handle in the request data structure with a different one.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMIhj0'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj_%hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ ahash_request_alloc (C function)c.ahash_request_allochNtauh1hhj_%hhhNhNubh)}(hhh](h)}(hPstruct ahash_request * ahash_request_alloc (struct crypto_ahash *tfm, gfp_t gfp)h]h)}(hNstruct ahash_request *ahash_request_alloc(struct crypto_ahash *tfm, gfp_t gfp)h](h)}(hhh]hstruct}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj (hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMSubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj (hhhj(hMSubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hj-(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*(ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj/(modnameN classnameNj j )}j! ]j$ )}j ahash_request_allocsbc.ahash_request_allocasbuh1hhj (hhhj(hMSubh)}(h h]h }(hjN(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj (hhhj(hMSubj9 )}(hj< h]h*}(hj\(hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj (hhhj(hMSubj)}(hahash_request_alloch]j)}(hjK(h]hahash_request_alloc}(hjm(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji(ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj (hhhj(hMSubja )}(h%(struct crypto_ahash *tfm, gfp_t gfp)h](jg )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj(modnameN classnameNj j )}j! ]jI(c.ahash_request_allocasbuh1hhj(ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubj9 )}(hj< h]h*}(hj(hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj(ubj)}(htfmh]htfm}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj(ubjg )}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj(modnameN classnameNj j )}j! ]jI(c.ahash_request_allocasbuh1hhj(ubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubj)}(hgfph]hgfp}(hj')hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj(ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj (hhhj(hMSubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj(hhhj(hMSubah}(h]j(ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj(hMShj(hhubjB)}(hhh]h)}(hallocate request data structureh]hallocate request data structure}(hjQ)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMShjN)hhubah}(h]h ]h"]h$]h&]uh1jAhj(hhhj(hMSubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdji)jeji)jfjgjhuh1hhhhj_%hNhNubjj)}(hX**Parameters** ``struct crypto_ahash *tfm`` cipher handle to be registered with the request ``gfp_t gfp`` memory allocation flag that is handed to kmalloc by the API call. **Description** Allocate the request data structure that must be used with the ahash message digest API calls. During the allocation, the provided ahash handle is registered in the request data structure. **Return** allocated request handle in case of success, or NULL if out of memoryh](h)}(h**Parameters**h]jt)}(hjs)h]h Parameters}(hju)hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjq)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMWhjm)ubj)}(hhh](j)}(hM``struct crypto_ahash *tfm`` cipher handle to be registered with the request h](j)}(h``struct crypto_ahash *tfm``h]j)}(hj)h]hstruct crypto_ahash *tfm}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMThj)ubj)}(hhh]h)}(h/cipher handle to be registered with the requesth]h/cipher handle to be registered with the request}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMThj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMThj)ubj)}(hP``gfp_t gfp`` memory allocation flag that is handed to kmalloc by the API call. h](j)}(h ``gfp_t gfp``h]j)}(hj)h]h gfp_t gfp}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMUhj)ubj)}(hhh]h)}(hAmemory allocation flag that is handed to kmalloc by the API call.h]hAmemory allocation flag that is handed to kmalloc by the API call.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMUhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMUhj)ubeh}(h]h ]h"]h$]h&]uh1jhjm)ubh)}(h**Description**h]jt)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMWhjm)ubh)}(hAllocate the request data structure that must be used with the ahash message digest API calls. During the allocation, the provided ahash handle is registered in the request data structure.h]hAllocate the request data structure that must be used with the ahash message digest API calls. During the allocation, the provided ahash handle is registered in the request data structure.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMWhjm)ubh)}(h **Return**h]jt)}(hj-*h]hReturn}(hj/*hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj+*ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM\hjm)ubh)}(hEallocated request handle in case of success, or NULL if out of memoryh]hEallocated request handle in case of success, or NULL if out of memory}(hjC*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM\hjm)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj_%hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌahash_request_free (C function)c.ahash_request_freehNtauh1hhj_%hhhNhNubh)}(hhh](h)}(h3void ahash_request_free (struct ahash_request *req)h]h)}(h2void ahash_request_free(struct ahash_request *req)h](j )}(hvoidh]hvoid}(hjr*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjn*hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMnubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjn*hhhj*hMnubj)}(hahash_request_freeh]j)}(hahash_request_freeh]hahash_request_free}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjn*hhhj*hMnubja )}(h(struct ahash_request *req)h]jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj*ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj*modnameN classnameNj j )}j! ]j$ )}j j*sbc.ahash_request_freeasbuh1hhj*ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubj9 )}(hj< h]h*}(hj*hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj*ubj)}(hreqh]hreq}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj*ubah}(h]h ]h"]h$]h&]j+j,uh1j` hjn*hhhj*hMnubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjj*hhhj*hMnubah}(h]je*ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj*hMnhjg*hhubjB)}(hhh]h)}(h+zeroize and free the request data structureh]h+zeroize and free the request data structure}(hj2+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMnhj/+hhubah}(h]h ]h"]h$]h&]uh1jAhjg*hhhj*hMnubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjJ+jejJ+jfjgjhuh1hhhhj_%hNhNubjj)}(h`**Parameters** ``struct ahash_request *req`` request data structure cipher handle to be freedh](h)}(h**Parameters**h]jt)}(hjT+h]h Parameters}(hjV+hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjR+ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMrhjN+ubj)}(hhh]j)}(hN``struct ahash_request *req`` request data structure cipher handle to be freedh](j)}(h``struct ahash_request *req``h]j)}(hjs+h]hstruct ahash_request *req}(hju+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq+ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMthjm+ubj)}(hhh]h)}(h0request data structure cipher handle to be freedh]h0request data structure cipher handle to be freed}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMohj+ubah}(h]h ]h"]h$]h&]uh1jhjm+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMthjj+ubah}(h]h ]h"]h$]h&]uh1jhjN+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj_%hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'ahash_request_set_callback (C function)c.ahash_request_set_callbackhNtauh1hhj_%hhhNhNubh)}(hhh](h)}(hmvoid ahash_request_set_callback (struct ahash_request *req, u32 flags, crypto_completion_t compl, void *data)h]h)}(hlvoid ahash_request_set_callback(struct ahash_request *req, u32 flags, crypto_completion_t compl, void *data)h](j )}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+hhhj+hMubj)}(hahash_request_set_callbackh]j)}(hahash_request_set_callbackh]hahash_request_set_callback}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj+hhhj+hMubja )}(hM(struct ahash_request *req, u32 flags, crypto_completion_t compl, void *data)h](jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj ,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hj(,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%,ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj*,modnameN classnameNj j )}j! ]j$ )}j j+sbc.ahash_request_set_callbackasbuh1hhj,ubh)}(h h]h }(hjH,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubj9 )}(hj< h]h*}(hjV,hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj,ubj)}(hreqh]hreq}(hjc,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,ubjg )}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|,ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj,modnameN classnameNj j )}j! ]jD,c.ahash_request_set_callbackasbuh1hhjx,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjx,ubj)}(hflagsh]hflags}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,ubjg )}(hcrypto_completion_t complh](h)}(hhh]j)}(hcrypto_completion_th]hcrypto_completion_t}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj,modnameN classnameNj j )}j! ]jD,c.ahash_request_set_callbackasbuh1hhj,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubj)}(hcomplh]hcompl}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,ubjg )}(h void *datah](j )}(hvoidh]hvoid}(hj -hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-ubh)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj9 )}(hj< h]h*}(hj(-hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj-ubj)}(hdatah]hdata}(hj5-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj+hhhj+hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj+hhhj+hMubah}(h]j+ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj+hMhj+hhubjB)}(hhh]h)}(h"set asynchronous callback functionh]h"set asynchronous callback function}(hj_-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj\-hhubah}(h]h ]h"]h$]h&]uh1jAhj+hhhj+hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjw-jejw-jfjgjhuh1hhhhj_%hNhNubjj)}(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]jt)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj-ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj{-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:25: ./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:25: ./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:25: ./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:25: ./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)}(hjL.h]h void *data}(hjN.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ.ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhjF.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 }(hje.hhhNhNubh)}(h:c:type:`crypto_async_request`h]j)}(hjo.h]hcrypto_async_request}(hjq.hhhNhNubah}(h]h ](j%j^c-typeeh"]h$]h&]uh1jhjm.ubah}(h]h ]h"]h$]h&]refdocj% refdomainj^reftypetype refexplicitrefwarnj j%j%crypto_async_requestuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhje.ubh2 data structure provided to the callback function.}(hje.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMhjb.ubah}(h]h ]h"]h$]h&]uh1jhjF.ubeh}(h]h ]h"]h$]h&]uh1jhja.hMhj-ubeh}(h]h ]h"]h$]h&]uh1jhj{-ubh)}(h**Description**h]jt)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj.ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj{-ubh)}(hiThis function allows setting the callback function that is triggered once the cipher operation completes.h]hiThis function allows setting the callback function that is triggered once the cipher operation completes.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj{-ubh)}(hyThe callback function is registered with the :c:type:`ahash_request` handle and must comply with the following template::h](h-The callback function is registered with the }(hj.hhhNhNubh)}(h:c:type:`ahash_request`h]j)}(hj.h]h ahash_request}(hj.hhhNhNubah}(h]h ](j%j^c-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj% refdomainj^reftypetype refexplicitrefwarnj j%j% ahash_requestuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj.ubh4 handle and must comply with the following template:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMhj{-ubj)}(hCvoid callback_function(struct crypto_async_request *req, int error)h]hCvoid callback_function(struct crypto_async_request *req, int error)}hj/sbah}(h]h ]h"]h$]h&]j+j,uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj{-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj_%hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$ahash_request_set_crypt (C function)c.ahash_request_set_crypthNtauh1hhj_%hhhNhNubh)}(hhh](h)}(hrvoid ahash_request_set_crypt (struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h]h)}(hqvoid ahash_request_set_crypt(struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h](j )}(hvoidh]hvoid}(hj1/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-/hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMubh)}(h h]h }(hj@/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-/hhhj?/hMubj)}(hahash_request_set_crypth]j)}(hahash_request_set_crypth]hahash_request_set_crypt}(hjR/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN/ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj-/hhhj?/hMubja )}(hU(struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h](jg )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjn/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjj/ubh)}(h h]h }(hj{/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjj/ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj/modnameN classnameNj j )}j! ]j$ )}j jT/sbc.ahash_request_set_cryptasbuh1hhjj/ubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjj/ubj9 )}(hj< h]h*}(hj/hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjj/ubj)}(hreqh]hreq}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj/ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjf/ubjg )}(hstruct scatterlist *srch](h)}(hhh]hstruct}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj0modnameN classnameNj j )}j! ]j/c.ahash_request_set_cryptasbuh1hhj/ubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubj9 )}(hj< h]h*}(hj*0hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj/ubj)}(hsrch]hsrc}(hj70hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjf/ubjg )}(h u8 *resulth](h)}(hhh]j)}(hu8h]hu8}(hjS0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP0ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjU0modnameN classnameNj j )}j! ]j/c.ahash_request_set_cryptasbuh1hhjL0ubh)}(h h]h }(hjq0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjL0ubj9 )}(hj< h]h*}(hj0hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjL0ubj)}(hresulth]hresult}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL0ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjf/ubjg )}(hunsigned int nbytesh](j )}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj )}(hinth]hint}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubh)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(hnbytesh]hnbytes}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjf/ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj-/hhhj?/hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj)/hhhj?/hMubah}(h]j$/ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj?/hMhj&/hhubjB)}(hhh]h)}(hset data buffersh]hset data buffers}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jAhj&/hhhj?/hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj1jej1jfjgjhuh1hhhhj_%hNhNubjj)}(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]jt)}(hj)1h]h Parameters}(hj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj'1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj#1ubj)}(hhh](j)}(hA``struct ahash_request *req`` ahash_request handle to be updated h](j)}(h``struct ahash_request *req``h]j)}(hjH1h]hstruct ahash_request *req}(hjJ1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhjB1ubj)}(hhh]h)}(h"ahash_request handle to be updatedh]h"ahash_request handle to be updated}(hja1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]1hMhj^1ubah}(h]h ]h"]h$]h&]uh1jhjB1ubeh}(h]h ]h"]h$]h&]uh1jhj]1hMhj?1ubj)}(h7``struct scatterlist *src`` source scatter/gather list h](j)}(h``struct scatterlist *src``h]j)}(hj1h]hstruct scatterlist *src}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj{1ubj)}(hhh]h)}(hsource scatter/gather listh]hsource scatter/gather list}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj{1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj?1ubj)}(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:25: ./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:25: ./include/crypto/hash.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj?1ubj)}(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:25: ./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}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 2hMhj 2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj 2hMhj?1ubeh}(h]h ]h"]h$]h&]uh1jhj#1ubh)}(h**Description**h]jt)}(hj/2h]h Description}(hj12hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj-2ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj#1ubh)}(hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.h]hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.}(hjE2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj#1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj_%hhhNhNubeh}(h] asynchronous-hash-request-handleah ]h"] asynchronous hash request handleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSynchronous Message Digest APIh]hSynchronous Message Digest API}(hjf2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc2hhhhhKubh)}(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)}(hjt2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:31: ./include/crypto/hash.hhMhjc2hhubh)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:31: ./include/crypto/hash.hhMhjc2hhubh)}(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:31: ./include/crypto/hash.hhMhjc2hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_alloc_shash (C function)c.crypto_alloc_shashhNtauh1hhjc2hhhNhNubh)}(hhh](h)}(hSstruct crypto_shash * crypto_alloc_shash (const char *alg_name, u32 type, u32 mask)h]h)}(hQstruct crypto_shash *crypto_alloc_shash(const char *alg_name, u32 type, u32 mask)h](h)}(hhh]hstruct}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2hhhj2hMubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj2modnameN classnameNj j )}j! ]j$ )}j crypto_alloc_shashsbc.crypto_alloc_shashasbuh1hhj2hhhj2hMubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2hhhj2hMubj9 )}(hj< h]h*}(hj3hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj2hhhj2hMubj)}(hcrypto_alloc_shashh]j)}(hj2h]hcrypto_alloc_shash}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj2hhhj2hMubja )}(h*(const char *alg_name, u32 type, u32 mask)h](jg )}(hconst char *alg_nameh](h)}(hjn h]hconst}(hj43hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj03ubh)}(h h]h }(hjA3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj03ubj )}(hcharh]hchar}(hjO3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj03ubh)}(h h]h }(hj]3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj03ubj9 )}(hj< h]h*}(hjk3hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj03ubj)}(halg_nameh]halg_name}(hjx3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj03ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,3ubjg )}(hu32 typeh](h)}(hhh]j)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj3modnameN classnameNj j )}j! ]j2c.crypto_alloc_shashasbuh1hhj3ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubj)}(htypeh]htype}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,3ubjg )}(hu32 maskh](h)}(hhh]j)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj3modnameN classnameNj j )}j! ]j2c.crypto_alloc_shashasbuh1hhj3ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubj)}(hmaskh]hmask}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj,3ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj2hhhj2hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj2hhhj2hMubah}(h]j2ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj2hMhj2hhubjB)}(hhh]h)}(hallocate message digest handleh]hallocate message digest handle}(hj24hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj/4hhubah}(h]h ]h"]h$]h&]uh1jAhj2hhhj2hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjJ4jejJ4jfjgjhuh1hhhhjc2hNhNubjj)}(hXI**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]jt)}(hjT4h]h Parameters}(hjV4hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjR4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjN4ubj)}(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)}(hjs4h]hconst char *alg_name}(hju4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjm4ubj)}(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:34: ./include/crypto/hash.hhMhj4ubah}(h]h ]h"]h$]h&]uh1jhjm4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjj4ubj)}(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:34: ./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&]uh1jhj4hMhjj4ubj)}(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:34: ./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&]uh1jhj4hMhjj4ubeh}(h]h ]h"]h$]h&]uh1jhjN4ubh)}(h**Description**h]jt)}(hj!5h]h Description}(hj#5hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjN4ubh)}(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)}(hjA5h]hstruct crypto_shash}(hjC5hhhNhNubah}(h]h ](j%j^c-typeeh"]h$]h&]uh1jhj?5ubah}(h]h ]h"]h$]h&]refdocj% refdomainj^reftypetype refexplicitrefwarnj j%j% crypto_shashuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj75ubha is the cipher handle that is required for any subsequent API invocation for that message digest.}(hj75hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^5hMhjN4ubh)}(h **Return**h]jt)}(hjk5h]hReturn}(hjm5hhhNhNubah}(h]h ]h"]h$]h&]uh1jshji5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjN4ubj)}(hhh]j)}(hsallocated cipher handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h](j)}(hDallocated cipher handle in case of success; IS_ERR() is true in caseh]hDallocated cipher handle in case of success; IS_ERR() is true in case}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj5ubj)}(hhh]h)}(h.of an error, PTR_ERR() returns the error code.h]h.of an error, PTR_ERR() returns the error code.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjN4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_free_shash (C function)c.crypto_free_shashhNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h1void crypto_free_shash (struct crypto_shash *tfm)h]h)}(h0void crypto_free_shash(struct crypto_shash *tfm)h](j )}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5hhhj5hMubj)}(hcrypto_free_shashh]j)}(hcrypto_free_shashh]hcrypto_free_shash}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj5hhhj5hMubja )}(h(struct crypto_shash *tfm)h]jg )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6ubh)}(h h]h }(hj%6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj66hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj36ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj86modnameN classnameNj j )}j! ]j$ )}j j5sbc.crypto_free_shashasbuh1hhj6ubh)}(h h]h }(hjV6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6ubj9 )}(hj< h]h*}(hjd6hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj6ubj)}(htfmh]htfm}(hjq6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj6ubah}(h]h ]h"]h$]h&]j+j,uh1j` hj5hhhj5hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj5hhhj5hMubah}(h]j5ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj5hMhj5hhubjB)}(hhh]h)}(h*zeroize and free the message digest handleh]h*zeroize and free the message digest handle}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj6hhubah}(h]h ]h"]h$]h&]uh1jAhj5hhhj5hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj6jej6jfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./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:34: ./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]jt)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj7ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj6ubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hj-7hhhNhNubjt)}(h**tfm**h]htfm}(hj57hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj-7ubh8 is a NULL or error pointer, this function does nothing.}(hj-7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#crypto_shash_blocksize (C function)c.crypto_shash_blocksizehNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h>unsigned int crypto_shash_blocksize (struct crypto_shash *tfm)h]h)}(h=unsigned int crypto_shash_blocksize(struct crypto_shash *tfm)h](j )}(hunsignedh]hunsigned}(hjn7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjj7hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM ubh)}(h h]h }(hj}7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjj7hhhj|7hM ubj )}(hinth]hint}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjj7hhhj|7hM ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjj7hhhj|7hM ubj)}(hcrypto_shash_blocksizeh]j)}(hcrypto_shash_blocksizeh]hcrypto_shash_blocksize}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjj7hhhj|7hM ubja )}(h(struct crypto_shash *tfm)h]jg )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj7modnameN classnameNj j )}j! ]j$ )}j j7sbc.crypto_shash_blocksizeasbuh1hhj7ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj9 )}(hj< h]h*}(hj8hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj7ubj)}(htfmh]htfm}(hj 8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj7ubah}(h]h ]h"]h$]h&]j+j,uh1j` hjj7hhhj|7hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjf7hhhj|7hM ubah}(h]ja7ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj|7hM hjc7hhubjB)}(hhh]h)}(hobtain block size for cipherh]hobtain block size for cipher}(hjJ8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM hjG8hhubah}(h]h ]h"]h$]h&]uh1jAhjc7hhhj|7hM ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjb8jejb8jfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hjl8h]h Parameters}(hjn8hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjf8ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj8h]hstruct crypto_shash *tfm}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj8ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjf8ubh)}(h**Description**h]jt)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjf8ubh)}(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:34: ./include/crypto/hash.hhMhjf8ubh)}(h **Return**h]jt)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjf8ubh)}(hblock size of cipherh]hblock size of cipher}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjf8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$crypto_shash_digestsize (C function)c.crypto_shash_digestsizehNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h?unsigned int crypto_shash_digestsize (struct crypto_shash *tfm)h]h)}(h>unsigned int crypto_shash_digestsize(struct crypto_shash *tfm)h](j )}(hunsignedh]hunsigned}(hj29hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj.9hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM%ubh)}(h h]h }(hjA9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.9hhhj@9hM%ubj )}(hinth]hint}(hjO9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj.9hhhj@9hM%ubh)}(h h]h }(hj]9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.9hhhj@9hM%ubj)}(hcrypto_shash_digestsizeh]j)}(hcrypto_shash_digestsizeh]hcrypto_shash_digestsize}(hjo9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk9ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj.9hhhj@9hM%ubja )}(h(struct crypto_shash *tfm)h]jg )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj9ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj9ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj9modnameN classnameNj j )}j! ]j$ )}j jq9sbc.crypto_shash_digestsizeasbuh1hhj9ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj9ubj9 )}(hj< h]h*}(hj9hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj9ubj)}(htfmh]htfm}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj9ubah}(h]h ]h"]h$]h&]j+j,uh1j` hj.9hhhj@9hM%ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj*9hhhj@9hM%ubah}(h]j%9ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj@9hM%hj'9hhubjB)}(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:34: ./include/crypto/hash.hhM%hj :hhubah}(h]h ]h"]h$]h&]uh1jAhj'9hhhj@9hM%ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj&:jej&:jfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hj0:h]h Parameters}(hj2:hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj.:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM)hj*:ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hjO:h]hstruct crypto_shash *tfm}(hjQ:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM&hjI:ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjh:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd:hM&hje:ubah}(h]h ]h"]h$]h&]uh1jhjI:ubeh}(h]h ]h"]h$]h&]uh1jhjd:hM&hjF:ubah}(h]h ]h"]h$]h&]uh1jhj*:ubh)}(h**Description**h]jt)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM(hj*:ubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM(hj*:ubh)}(h **Return**h]jt)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj:ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM+hj*:ubh)}(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:34: ./include/crypto/hash.hhM+hj*:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"crypto_shash_descsize (C function)c.crypto_shash_descsizehNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h=unsigned int crypto_shash_descsize (struct crypto_shash *tfm)h]h)}(hj?)j@huh1hhj;hMGhj:hhubjB)}(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:34: ./include/crypto/hash.hhMGhj;hhubah}(h]h ]h"]h$]h&]uh1jAhj:hhhj;hMGubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj;jej;jfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj;ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMKhj;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:34: ./include/crypto/hash.hhMHhj <ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj,<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(<hMHhj)<ubah}(h]h ]h"]h$]h&]uh1jhj <ubeh}(h]h ]h"]h$]h&]uh1jhj(<hMHhj <ubah}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h**Description**h]jt)}(hjN<h]h Description}(hjP<hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjL<ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMJhj;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.}(hjd<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMJhj;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)}(hjs<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMOhj;ubh)}(h **Return**h]jt)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj<ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMShj;ubh)}(hsize of the operational stateh]hsize of the operational state}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMShj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_setkey (C function)c.crypto_shash_setkeyhNtauh1hhjc2hhhNhNubh)}(hhh](h)}(hVint crypto_shash_setkey (struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h]h)}(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:34: ./include/crypto/hash.hhM`ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<hhhj<hM`ubj)}(hcrypto_shash_setkeyh]j)}(hcrypto_shash_setkeyh]hcrypto_shash_setkey}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj<hhhj<hM`ubja )}(h>(struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h](jg )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj=ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj=ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj$=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!=ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj&=modnameN classnameNj j )}j! ]j$ )}j j<sbc.crypto_shash_setkeyasbuh1hhj=ubh)}(h h]h }(hjD=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj=ubj9 )}(hj< h]h*}(hjR=hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj=ubj)}(htfmh]htfm}(hj_=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj<ubjg )}(h const u8 *keyh](h)}(hjn h]hconst}(hjx=hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjt=ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjt=ubh)}(hhh]j)}(hu8h]hu8}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj=modnameN classnameNj j )}j! ]j@=c.crypto_shash_setkeyasbuh1hhjt=ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjt=ubj9 )}(hj< h]h*}(hj=hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjt=ubj)}(hkeyh]hkey}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt=ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj<ubjg )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj=ubj )}(hinth]hint}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj=ubj)}(hkeylenh]hkeylen}(hj >hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj<ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj<hhhj<hM`ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj<hhhj<hM`ubah}(h]j<ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj<hM`hj<hhubjB)}(hhh]h)}(hset key for message digesth]hset key for message digest}(hjJ>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM`hjG>hhubah}(h]h ]h"]h$]h&]uh1jAhj<hhhj<hM`ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjb>jejb>jfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hjl>h]h Parameters}(hjn>hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjj>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMdhjf>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:34: ./include/crypto/hash.hhMahj>ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMahj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMahj>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:34: ./include/crypto/hash.hhMbhj>ubj)}(hhh]h)}(hbuffer holding the keyh]hbuffer holding the key}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMbhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMbhj>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:34: ./include/crypto/hash.hhMchj>ubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMchj?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj?hMchj>ubeh}(h]h ]h"]h$]h&]uh1jhjf>ubh)}(h**Description**h]jt)}(hj8?h]h Description}(hj:?hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj6?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMehjf>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.}(hjN?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMehjf>ubh)}(h **Context**h]jt)}(hj_?h]hContext}(hja?hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj]?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMihjf>ubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hju?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMihjf>ubh)}(h **Return**h]jt)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj?ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMkhjf>ubh)}(hD0 if the setting of the key was successful; < 0 if an error occurredh]hD0 if the setting of the key was successful; < 0 if an error occurred}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMjhjf>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_digest (C function)c.crypto_shash_digesthNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h\int crypto_shash_digest (struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h]h)}(h[int crypto_shash_digest(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hinth]hint}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMpubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?hhhj?hMpubj)}(hcrypto_shash_digesth]j)}(hcrypto_shash_digesth]hcrypto_shash_digest}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj?hhhj?hMpubja )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](jg )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hj@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj@ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@ubh)}(hhh]j)}(h shash_desch]h shash_desc}(hj&@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#@ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj(@modnameN classnameNj j )}j! ]j$ )}j j?sbc.crypto_shash_digestasbuh1hhj@ubh)}(h h]h }(hjF@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@ubj9 )}(hj< h]h*}(hjT@hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj@ubj)}(hdesch]hdesc}(hja@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj@ubjg )}(hconst u8 *datah](h)}(hjn h]hconst}(hjz@hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjv@ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjv@ubh)}(hhh]j)}(hu8h]hu8}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj@modnameN classnameNj j )}j! ]jB@c.crypto_shash_digestasbuh1hhjv@ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjv@ubj9 )}(hj< h]h*}(hj@hhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjv@ubj)}(hdatah]hdata}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj@ubjg )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@ubj )}(hinth]hint}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@ubj)}(hlenh]hlen}(hj"AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj@ubjg )}(hu8 *outh](h)}(hhh]j)}(hu8h]hu8}(hj>AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Aubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj@AmodnameN classnameNj j )}j! ]jB@c.crypto_shash_digestasbuh1hhj7Aubh)}(h h]h }(hj\AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7Aubj9 )}(hj< h]h*}(hjjAhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj7Aubj)}(houth]hout}(hjwAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Aubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hj@ubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj?hhhj?hMpubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj?hhhj?hMpubah}(h]j?ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj?hMphj?hhubjB)}(hhh]h)}(h#calculate message digest for bufferh]h#calculate message digest for buffer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMphjAhhubah}(h]h ]h"]h$]h&]uh1jAhj?hhhj?hMpubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjAjejAjfjgjhuh1hhhhjc2hNhNubjj)}(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_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]jt)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjAubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMthjAubj)}(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:34: ./include/crypto/hash.hhMqhjAubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMqhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMqhjAubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjBh]hconst u8 *data}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMrhjBubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hj4BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0BhMrhj1Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj0BhMrhjAubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hjTBh]hunsigned int len}(hjVBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRBubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMshjNBubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjmBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiBhMshjjBubah}(h]h ]h"]h$]h&]uh1jhjNBubeh}(h]h ]h"]h$]h&]uh1jhjiBhMshjAubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjBh]hu8 *out}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMthjBubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMthjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMthjAubeh}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]jt)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMvhjAubh)}(hThis function is a "short-hand" for the function calls of crypto_shash_init, crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate three functions.h]hThis function is a “short-hand” for the function calls of crypto_shash_init, crypto_shash_update and crypto_shash_final. The parameters have the same meaning as discussed for those separate three functions.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMvhjAubh)}(h **Context**h]jt)}(hjBh]hContext}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjBubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMzhjAubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMzhjAubh)}(h **Return**h]jt)}(hjCh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jshjCubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM|hjAubj)}(hhh]j)}(hI0 if the message digest creation was successful; < 0 if an error occurredh](j)}(h@0 if the message digest creation was successful; < 0 if an errorh]h@0 if the message digest creation was successful; < 0 if an error}(hj3ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM{hj/Cubj)}(hhh]h)}(hoccurredh]hoccurred}(hjEChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM|hjBCubah}(h]h ]h"]h$]h&]uh1jhj/Cubeh}(h]h ]h"]h$]h&]uh1jhjAChM{hj,Cubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_export (C function)c.crypto_shash_exporthNtauh1hhjc2hhhNhNubh)}(hhh](h)}(hj?)j@huh1hhjChMhj{ChhubjB)}(hhh]h)}(h,extract operational state for message digesth]h,extract operational state for message digest}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1jAhj{ChhhjChMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjDjejDjfjgjhuh1hhhhjc2hNhNubjj)}(hX**Parameters** ``struct shash_desc *desc`` reference to the operational state 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 operational state handle into the caller-allocated output buffer out which must have sufficient size (e.g. by calling crypto_shash_descsize). **Context** Softirq or process context. **Return** 0 if the export creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjDubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubj)}(hhh](j)}(h^``struct shash_desc *desc`` reference to the operational state handle whose state is exported h](j)}(h``struct shash_desc *desc``h]j)}(hjDh]hstruct shash_desc *desc}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubj)}(hhh]h)}(hAreference to the operational state handle whose state is exportedh]hAreference to the operational state handle whose state is exported}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjDubj)}(hL``void *out`` output buffer of sufficient size that can hold the hash state h](j)}(h ``void *out``h]j)}(hjEh]h void *out}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubj)}(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}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjDubeh}(h]h ]h"]h$]h&]uh1jhjDubh)}(h**Description**h]jt)}(hj=Eh]h Description}(hj?EhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj;Eubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubh)}(hThis function exports the hash state of the operational state handle into the caller-allocated output buffer out which must have sufficient size (e.g. by calling crypto_shash_descsize).h]hThis function exports the hash state of the operational state handle into the caller-allocated output buffer out which must have sufficient size (e.g. by calling crypto_shash_descsize).}(hjSEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubh)}(h **Context**h]jt)}(hjdEh]hContext}(hjfEhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjbEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjzEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubh)}(h **Return**h]jt)}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubh)}(hA0 if the export creation was successful; < 0 if an error occurredh]hA0 if the export creation was successful; < 0 if an error occurred}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_import (C function)c.crypto_shash_importhNtauh1hhjc2hhhNhNubh)}(hhh](h)}(hAint crypto_shash_import (struct shash_desc *desc, const void *in)h]h)}(h@int crypto_shash_import(struct shash_desc *desc, const void *in)h](j )}(hinth]hint}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEhhhjEhMubj)}(hcrypto_shash_importh]j)}(hcrypto_shash_importh]hcrypto_shash_import}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjEhhhjEhMubja )}(h)(struct shash_desc *desc, const void *in)h](jg )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hj FhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Fubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj Fubh)}(hhh]j)}(h shash_desch]h shash_desc}(hj+FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Fubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetj-FmodnameN classnameNj j )}j! ]j$ )}j jEsbc.crypto_shash_importasbuh1hhj Fubh)}(h h]h }(hjKFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj Fubj9 )}(hj< h]h*}(hjYFhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj Fubj)}(hdesch]hdesc}(hjfFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Fubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjFubjg )}(hconst void *inh](h)}(hjn h]hconst}(hjFhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{Fubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{Fubj )}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj{Fubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{Fubj9 )}(hj< h]h*}(hjFhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj{Fubj)}(hinh]hin}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Fubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjFubeh}(h]h ]h"]h$]h&]j+j,uh1j` hjEhhhjEhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjEhhhjEhMubah}(h]jEah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjEhMhjEhhubjB)}(hhh]h)}(himport operational stateh]himport operational state}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jAhjEhhhjEhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjGjejGjfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj Gubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Gubj)}(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)}(hj.Gh]hstruct shash_desc *desc}(hj0GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Gubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj(Gubj)}(hhh]h)}(hAreference to the operational state handle the state imported intoh]hAreference to the operational state handle the state imported into}(hjGGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCGhMhjDGubah}(h]h ]h"]h$]h&]uh1jhj(Gubeh}(h]h ]h"]h$]h&]uh1jhjCGhMhj%Gubj)}(h,``const void *in`` buffer holding the state h](j)}(h``const void *in``h]j)}(hjgGh]hconst void *in}(hjiGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeGubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjaGubj)}(hhh]h)}(hbuffer holding the stateh]hbuffer holding the state}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|GhMhj}Gubah}(h]h ]h"]h$]h&]uh1jhjaGubeh}(h]h ]h"]h$]h&]uh1jhj|GhMhj%Gubeh}(h]h ]h"]h$]h&]uh1jhj Gubh)}(h**Description**h]jt)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Gubh)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Gubh)}(h **Context**h]jt)}(hjGh]hContext}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Gubh)}(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:34: ./include/crypto/hash.hhMhj Gubh)}(h **Return**h]jt)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjGubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Gubh)}(h80 if the import was successful; < 0 if an error occurredh]h80 if the import was successful; < 0 if an error occurred}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Gubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_shash_init (C function)c.crypto_shash_inithNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h/int crypto_shash_init (struct shash_desc *desc)h]h)}(h.int crypto_shash_init(struct shash_desc *desc)h](j )}(hinth]hint}(hj5HhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1HhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hjDHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1HhhhjCHhMubj)}(hcrypto_shash_inith]j)}(hcrypto_shash_inith]hcrypto_shash_init}(hjVHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRHubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj1HhhhjCHhMubja )}(h(struct shash_desc *desc)h]jg )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjrHhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnHubh)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnHubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjHmodnameN classnameNj j )}j! ]j$ )}j jXHsbc.crypto_shash_initasbuh1hhjnHubh)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnHubj9 )}(hj< h]h*}(hjHhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjnHubj)}(hdesch]hdesc}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnHubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjjHubah}(h]h ]h"]h$]h&]j+j,uh1j` hj1HhhhjCHhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj-HhhhjCHhMubah}(h]j(Hah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjCHhMhj*HhhubjB)}(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:34: ./include/crypto/hash.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1jAhj*HhhhjCHhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj Ijej Ijfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubj)}(hhh]j)}(hL``struct shash_desc *desc`` operational state handle that is already filled h](j)}(h``struct shash_desc *desc``h]j)}(hj6Ih]hstruct shash_desc *desc}(hj8IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Iubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj0Iubj)}(hhh]h)}(h/operational state handle that is already filledh]h/operational state handle that is already filled}(hjOIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKIhMhjLIubah}(h]h ]h"]h$]h&]uh1jhj0Iubeh}(h]h ]h"]h$]h&]uh1jhjKIhMhj-Iubah}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]jt)}(hjqIh]h Description}(hjsIhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubh)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubh)}(h **Context**h]jt)}(hjIh]hContext}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubh)}(h **Return**h]jt)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjIubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubj)}(hhh]j)}(hO0 if the message digest initialization was successful; < 0 if an error occurredh](j)}(h@0 if the message digest initialization was successful; < 0 if anh]h@0 if the message digest initialization was successful; < 0 if an}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubj)}(hhh]h)}(herror occurredh]herror occurred}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_shash_finup (C function)c.crypto_shash_finuphNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h[int crypto_shash_finup (struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h]h)}(hZint crypto_shash_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hinth]hint}(hj/JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+JhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj>JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+Jhhhj=JhMubj)}(hcrypto_shash_finuph]j)}(hcrypto_shash_finuph]hcrypto_shash_finup}(hjPJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLJubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj+Jhhhj=JhMubja )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](jg )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjlJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhJubh)}(h h]h }(hjyJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhJubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjJmodnameN classnameNj j )}j! ]j$ )}j jRJsbc.crypto_shash_finupasbuh1hhjhJubh)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhJubj9 )}(hj< h]h*}(hjJhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjhJubj)}(hdesch]hdesc}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhJubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjdJubjg )}(hconst u8 *datah](h)}(hjn h]hconst}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubh)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJubh)}(hhh]j)}(hu8h]hu8}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjJmodnameN classnameNj j )}j! ]jJc.crypto_shash_finupasbuh1hhjJubh)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJubj9 )}(hj< h]h*}(hj(KhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjJubj)}(hdatah]hdata}(hj5KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjdJubjg )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjNKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJKubh)}(h h]h }(hj\KhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJKubj )}(hinth]hint}(hjjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJKubh)}(h h]h }(hjxKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJKubj)}(hlenh]hlen}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJKubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjdJubjg )}(hu8 *outh](h)}(hhh]j)}(hu8h]hu8}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjKmodnameN classnameNj j )}j! ]jJc.crypto_shash_finupasbuh1hhjKubh)}(h h]h }(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKubj9 )}(hj< h]h*}(hjKhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjKubj)}(houth]hout}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjdJubeh}(h]h ]h"]h$]h&]j+j,uh1j` hj+Jhhhj=JhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj'Jhhhj=JhMubah}(h]j"Jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj=JhMhj$JhhubjB)}(hhh]h)}(h"calculate message digest of bufferh]h"calculate message digest of buffer}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1jAhj$Jhhhj=JhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjLjejLjfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hj'Lh]h Parameters}(hj)LhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj%Lubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!Lubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hjFLh]hstruct shash_desc *desc}(hjHLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj@Lubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hj_LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[LhMhj\Lubah}(h]h ]h"]h$]h&]uh1jhj@Lubeh}(h]h ]h"]h$]h&]uh1jhj[LhMhj=Lubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjLh]hconst u8 *data}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Lubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjyLubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjyLubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj=Lubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hjLh]hunsigned int len}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjLubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjLhhhNhNubah}(h]h ]h"]h$]h&RZ]uh1hhjLhMhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj=Lubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjLh]hu8 *out}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjLubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj=Lubeh}(h]h ]h"]h$]h&]uh1jhj!Lubh)}(h**Description**h]jt)}(hj,Mh]h Description}(hj.MhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj*Mubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!Lubh)}(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.}(hjBMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!Lubh)}(h **Context**h]jt)}(hjSMh]hContext}(hjUMhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjQMubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!Lubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjiMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!Lubh)}(h **Return**h]jt)}(hjzMh]hReturn}(hj|MhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjxMubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!Lubj)}(hhh]j)}(hI0 if the message digest creation was successful; < 0 if an error occurredh](j)}(h@0 if the message digest creation was successful; < 0 if an errorh]h@0 if the message digest creation was successful; < 0 if an error}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubj)}(hhh]h)}(hoccurredh]hoccurred}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhj!Lubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_update (C function)c.crypto_shash_updatehNtauh1hhjc2hhhNhNubh)}(hhh](h)}(hSint crypto_shash_update (struct shash_desc *desc, const u8 *data, unsigned int len)h]h)}(hRint crypto_shash_update(struct shash_desc *desc, const u8 *data, unsigned int len)h](j )}(hinth]hint}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjMhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjMhhhjMhMubj)}(hcrypto_shash_updateh]j)}(hcrypto_shash_updateh]hcrypto_shash_update}(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjMhhhjMhMubja )}(h;(struct shash_desc *desc, const u8 *data, unsigned int len)h](jg )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hj'NhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#Nubh)}(h h]h }(hj4NhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#Nubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjENhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBNubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjGNmodnameN classnameNj j )}j! ]j$ )}j j Nsbc.crypto_shash_updateasbuh1hhj#Nubh)}(h h]h }(hjeNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#Nubj9 )}(hj< h]h*}(hjsNhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hj#Nubj)}(hdesch]hdesc}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Nubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjNubjg )}(hconst u8 *datah](h)}(hjn h]hconst}(hjNhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNubh)}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjNubh)}(hhh]j)}(hu8h]hu8}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjNmodnameN classnameNj j )}j! ]jaNc.crypto_shash_updateasbuh1hhjNubh)}(h h]h }(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjNubj9 )}(hj< h]h*}(hjNhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjNubj)}(hdatah]hdata}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjNubjg )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hj OhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjOubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubj )}(hinth]hint}(hj%OhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjOubh)}(h h]h }(hj3OhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubj)}(hlenh]hlen}(hjAOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjNubeh}(h]h ]h"]h$]h&]j+j,uh1j` hjMhhhjMhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjMhhhjMhMubah}(h]jMah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjMhMhjMhhubjB)}(hhh]h)}(h)add data to message digest for processingh]h)add data to message digest for processing}(hjkOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjhOhhubah}(h]h ]h"]h$]h&]uh1jAhjMhhhjMhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjOjejOjfjgjhuh1hhhhjc2hNhNubjj)}(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]jt)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjOubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubj)}(hhh](j)}(hQ``struct shash_desc *desc`` operational state handle that is already initialized h](j)}(h``struct shash_desc *desc``h]j)}(hjOh]hstruct shash_desc *desc}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubj)}(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&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubj)}(h@``const u8 *data`` input data to be added to the message digest h](j)}(h``const u8 *data``h]j)}(hjOh]hconst u8 *data}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubj)}(hhh]h)}(h,input data to be added to the message digesth]h,input data to be added to the message digest}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubj)}(h.``unsigned int len`` length of the input data h](j)}(h``unsigned int len``h]j)}(hjPh]hunsigned int len}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjPubj)}(hhh]h)}(hlength of the input datah]hlength of the input data}(hj7PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3PhMhj4Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhj3PhMhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]jt)}(hjYPh]h Description}(hj[PhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjWPubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubh)}(hAUpdates the message digest state of the operational state handle.h]hAUpdates the message digest state of the operational state handle.}(hjoPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubh)}(h **Context**h]jt)}(hjPh]hContext}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj~Pubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubh)}(h **Return**h]jt)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjPubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjOubj)}(hhh]j)}(hG0 if the message digest update was successful; < 0 if an error occurredh](j)}(h>0 if the message digest update was successful; < 0 if an errorh]h>0 if the message digest update was successful; < 0 if an error}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjPubj)}(hhh]h)}(hoccurredh]hoccurred}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_shash_final (C function)c.crypto_shash_finalhNtauh1hhjc2hhhNhNubh)}(hhh](h)}(h9int crypto_shash_final (struct shash_desc *desc, u8 *out)h]h)}(h8int crypto_shash_final(struct shash_desc *desc, u8 *out)h](j )}(hinth]hint}(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj&QhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjQhhhj%QhMubj)}(hcrypto_shash_finalh]j)}(hcrypto_shash_finalh]hcrypto_shash_final}(hj8QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Qubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjQhhhj%QhMubja )}(h"(struct shash_desc *desc, u8 *out)h](jg )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjTQhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjPQubh)}(h h]h }(hjaQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPQubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjrQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoQubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjtQmodnameN classnameNj j )}j! ]j$ )}j j:Qsbc.crypto_shash_finalasbuh1hhjPQubh)}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPQubj9 )}(hj< h]h*}(hjQhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjPQubj)}(hdesch]hdesc}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPQubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjLQubjg )}(hu8 *outh](h)}(hhh]j)}(hu8h]hu8}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainj^reftypej reftargetjQmodnameN classnameNj j )}j! ]jQc.crypto_shash_finalasbuh1hhjQubh)}(h h]h }(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjQubj9 )}(hj< h]h*}(hjQhhhNhNubah}(h]h ]jE ah"]h$]h&]uh1j8 hjQubj)}(houth]hout}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jf hjLQubeh}(h]h ]h"]h$]h&]j+j,uh1j` hjQhhhj%QhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjQhhhj%QhMubah}(h]j Qah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj%QhMhj QhhubjB)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hj,RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj)Rhhubah}(h]h ]h"]h$]h&]uh1jAhj Qhhhj%QhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjDRjejDRjfjgjhuh1hhhhjc2hNhNubjj)}(hXE**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]jt)}(hjNRh]h Parameters}(hjPRhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjLRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjHRubj)}(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)}(hjmRh]hstruct shash_desc *desc}(hjoRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkRubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjgRubj)}(hhh]h)}(h9operational state handle that is already filled with datah]h9operational state handle that is already filled with data}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjgRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjdRubj)}(h9``u8 *out`` output buffer filled with the message digest h](j)}(h ``u8 *out``h]j)}(hjRh]hu8 *out}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRubj)}(hhh]h)}(h,output buffer filled with the message digesth]h,output buffer filled with the message digest}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjdRubeh}(h]h ]h"]h$]h&]uh1jhjHRubh)}(h**Description**h]jt)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjHRubh)}(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:34: ./include/crypto/hash.hhMhjHRubh)}(h **Context**h]jt)}(hjSh]hContext}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jshjSubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjHRubh)}(hSoftirq or process context.h]hSoftirq or process context.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjHRubh)}(h **Return**h]jt)}(hj/Sh]hReturn}(hj1ShhhNhNubah}(h]h ]h"]h$]h&]uh1jshj-Subah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjHRubj)}(hhh]j)}(hI0 if the message digest creation was successful; < 0 if an error occurredh](j)}(h@0 if the message digest creation was successful; < 0 if an errorh]h@0 if the message digest creation was successful; < 0 if an error}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjHSubj)}(hhh]h)}(hoccurredh]hoccurred}(hj^ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj[Subah}(h]h ]h"]h$]h&]uh1jhjHSubeh}(h]h ]h"]h$]h&]uh1jhjZShMhjESubah}(h]h ]h"]h$]h&]uh1jhjHRubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjc2hhhNhNubeh}(h]synchronous-message-digest-apiah ]h"]synchronous message digest apiah$]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_handlerjSerror_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}(j j j\%jY%j`2j]2jSjSu nametypes}(j j\%j`2jSuh}(j hhhjjjY%j j j jjjzjj>jCjjjjjjj^jcjj jjjYj^j|!j!j#j#j]2j_%j%j%j(j(je*jj*j+j+j$/j)/jSjc2j2j2j5j5ja7jf7j%9j*9j:j:j<j<j?j?jyCj~CjEjEj(Hj-Hj"Jj'JjMjMj QjQu 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.