sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/crypto/api-digestmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/crypto/api-digestmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(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.hhKEhjChhubah}(h]h ]h"]h$]h&]uh1jAhhhhhhhKubeh}(h]h ](cstructeh"]h$]h&]domainj^objtypej_desctypej_noindex noindexentrynocontentsentryuh1hhhhhhNhNubh container)}(hX**Definition**:: struct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*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); unsigned int reqsize; 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. ``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. ``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. ``reqsize`` Size of the request context. ``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.hhKIhjkubh literal_block)}(hXstruct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*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); unsigned int reqsize; struct hash_alg_common halg; };h]hXstruct ahash_alg { int (*init)(struct ahash_request *req); int (*update)(struct ahash_request *req); int (*final)(struct ahash_request *req); int (*finup)(struct ahash_request *req); int (*digest)(struct ahash_request *req); int (*export)(struct ahash_request *req, void *out); int (*import)(struct ahash_request *req, const void *in); int (*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); unsigned int reqsize; 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.hhKKhjkubh)}(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.hhK[hjkubhdefinition_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.hhKKhjubh 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.hhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubj)}(hXt``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. 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.hhKUhj ubj)}(hhh]h)}(hXh**[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.h](jt)}(h**[mandatory]**h]h [mandatory]}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj+ubhXY 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.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKLhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKUhjubj)}(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)}(hjZh]hfinal}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKZhjTubj)}(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]}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjsubhX? 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).}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKVhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohKZhjubj)}(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.hhK`hjubj)}(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}(hjhhhNhNubah}(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.hhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK`hjubj)}(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)}(hjVh]hdigest}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKfhjPubj)}(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 }(hjohhhNhNubjt)}(h**init**h]hinit}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh and }(hjohhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh and }hjosbjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubhG. This function effectively behaves as the entire chain of operations, }(hjohhhNhNubjt)}(h**init**h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh, }(hjohhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh and }hjosbjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh issued in sequence. Just like }(hjohhhNhNubjt)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh7, this was added for hardware which cannot do even the }(hjohhhNhNubjt)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubh, but can only do the whole transformation in one run. Data processing can happen synchronously [SHASH] or asynchronously [AHASH] at this point.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKahjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKfhjubj)}(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)}(hj h]hexport}(hj"hhhNhNubah}(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.hhKzhjubj)}(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 }(hj9hhhNhNubjt)}(h **import**h]himport}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj9ubhX! ‘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.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKthj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hKzhjubj)}(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)}(hjlh]himport}(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.hhKhjfubj)}(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.hhK{hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(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)}(hjh]hsetkey}(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.hhKshjubj)}(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 }(hjhhhNhNubjt)}(h**init**h]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh, }(hjhhhNhNubjt)}(h **update**h]hupdate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh, }hjsbjt)}(h **final**h]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh, }hjsbjt)}(h **finup**h]hfinup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh, }hjsbjt)}(h **digest**h]hdigest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh5 is called. No data processing happens at this point.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKshjubj)}(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&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj4ubj)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjubj)}(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)}(hjth]hexit_tfm}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjnubj)}(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}(hjhhhNhNubah}(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&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hjh]h clone_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)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h)``reqsize`` Size of the request context. h](j)}(h ``reqsize``h]j)}(hj h]hreqsize}(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.hhKhjubj)}(hhh]h)}(hSize of the request context.h]hSize of the request context.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hjDh]hhalg}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(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}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhKhjubeh}(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}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](j^structeh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhhhNhNubjj)}(hXH**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 (*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 ``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}(hjhhhNhNubah}(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.hhKhjubj)}(hXNstruct 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 (*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]hXNstruct 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 (*setkey)(struct crypto_shash *tfm, const u8 *key, unsigned int keylen); int (*init_tfm)(struct crypto_shash *tfm); void (*exit_tfm)(struct crypto_shash *tfm); int (*clone_tfm)(struct crypto_shash *dst, struct crypto_shash *src); unsigned int descsize; union { struct HASH_ALG_COMMON; struct hash_alg_common halg; }; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubh)}(h **Members**h]jt)}(hj.h]hMembers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj,ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjubj)}(hhh](j)}(h``init`` see struct ahash_alg h](j)}(h``init``h]j)}(hjMh]hinit}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjGubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjDubj)}(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&]uh1jhjhKhjDubj)}(h``final`` see struct ahash_alg h](j)}(h ``final``h]j)}(hjh]hfinal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]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&]uh1jhjhKhjDubj)}(h``finup`` see struct ahash_alg 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.hhKhjubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjDubj)}(h ``digest`` see struct ahash_alg h](j)}(h ``digest``h]j)}(hj1h]hdigest}(hj3hhhNhNubah}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjDubj)}(h ``export`` see struct ahash_alg h](j)}(h ``export``h]j)}(hjjh]hexport}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjdubj)}(hhh]h)}(hsee struct ahash_algh]hsee struct ahash_alg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKhjDubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjDubj)}(h ``setkey`` see struct ahash_alg h](j)}(h ``setkey``h]j)}(hjh]hsetkey}(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&]uh1jhjhKhjDubj)}(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* hKhjDubj)}(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)}(hjO h]hexit_tfm}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjI 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 }(hjh hhhNhNubjt)}(h **init_tfm**h]hinit_tfm}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjh ubh(, used to remove various changes set in }(hjh hhhNhNubjt)}(h **init_tfm**h]hinit_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjh ubh.}(hjh hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhje ubah}(h]h ]h"]h$]h&]uh1jhjI ubeh}(h]h ]h"]h$]h&]uh1jhjd hKhjDubj)}(hC``clone_tfm`` Copy transform into new object, may allocate memory. h](j)}(h ``clone_tfm``h]j)}(hj h]h clone_tfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhj ubj)}(hhh]h)}(h4Copy transform into new object, may allocate memory.h]h4Copy transform into new object, may allocate memory.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjDubj)}(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 hKhjDubj)}(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}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5 hKhj6 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj5 hKhjDubj)}(h/``HASH_ALG_COMMON`` see struct hash_alg_common h](j)}(h``HASH_ALG_COMMON``h]j)}(hjY h]hHASH_ALG_COMMON}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:7: ./include/crypto/hash.hhKhjS ubj)}(hhh]h)}(hsee struct hash_alg_commonh]hsee struct hash_alg_common}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn hKhjo ubah}(h]h ]h"]h$]h&]uh1jhjS ubeh}(h]h ]h"]h$]h&]uh1jhjn hKhjDubj)}(h#``halg`` see struct hash_alg_commonh](j)}(h``halg``h]j)}(hj h]hhalg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]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}(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 hKhjDubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(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.hhKhj 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.hhKhj 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.hhMubh)}(h h]h }(hj1 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj0 hMubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? ubah}(h]h ]h"]h$]h&] refdomainj^reftype identifier reftargetjD modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j] ASTIdentifier)}jX crypto_alloc_ahashsbc.crypto_alloc_ahashasbuh1hhj hhhj0 hMubh)}(h h]h }(hjk hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj0 hMubhdesc_sig_punctuation)}(h*h]h*}(hj{ hhhNhNubah}(h]h ]pah"]h$]h&]uh1jy hj hhhj0 hMubj)}(hcrypto_alloc_ahashh]j)}(hjh h]hcrypto_alloc_ahash}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhj0 hMubhdesc_parameterlist)}(h*(const char *alg_name, u32 type, u32 mask)h](hdesc_parameter)}(hconst char *alg_nameh](h)}(hconsth]hconst}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubhdesc_sig_keyword_type)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubjz )}(hj} h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj ubj)}(halg_nameh]halg_name}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj )}(hu32 typeh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj modnameN classnameNj\ j_ )}jb ]jf 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,uh1j hj ubj )}(hu32 maskh](h)}(hhh]j)}(hu32h]hu32}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj[ modnameN classnameNj\ j_ )}jb ]jf c.crypto_alloc_ahashasbuh1hhjR ubh)}(h h]h }(hjw hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjR ubj)}(hmaskh]hmask}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubeh}(h]h ]h"]h$]h&]j+j,uh1j hj hhhj0 hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj0 hMubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj0 hMhj hhubjB)}(hhh]h)}(hallocate ahash cipher handleh]hallocate ahash cipher handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj0 hMubeh}(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.hhMhj 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.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj 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.hhMhj$ ubj)}(hhh]h)}(h specifies the type of the cipherh]h specifies the type of the cipher}(hjC 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 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hjc h]hu32 mask}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja 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 mask for the cipherh]h!specifies the mask for the cipher}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx hM hjy ubah}(h]h ]h"]h$]h&]uh1jhj] ubeh}(h]h ]h"]h$]h&]uh1jhjx hM 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.}(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.hhMhj 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj ubj)}(hhh]h)}(h.of an error, PTR_ERR() returns the error code.h]h.of an error, PTR_ERR() returns the error code.}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(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}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM"ubh)}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhjChM"ubj)}(hcrypto_free_ahashh]j)}(hcrypto_free_ahashh]hcrypto_free_ahash}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj1hhhjChM"ubj )}(h(struct crypto_ahash *tfm)h]j )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjmodnameN classnameNj\ j_ )}jb ]je )}jX jXsbc.crypto_free_ahashasbuh1hhjnubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubjz )}(hj} h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjnubj)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjjubah}(h]h ]h"]h$]h&]j+j,uh1j hj1hhhjChM"ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj-hhhjChM"ubah}(h]j(ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjChM"hj*hhubjB)}(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.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhj*hhhjChM"ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj jej jfjgjhuh1hhhhj 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.hhM!hjubj)}(hhh]j)}(h7``struct crypto_ahash *tfm`` cipher handle to be freed h](j)}(h``struct crypto_ahash *tfm``h]j)}(hj6h]hstruct crypto_ahash *tfm}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj0ubj)}(hhh]h)}(hcipher handle to be freedh]hcipher handle to be freed}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-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.hhM hjubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hjhhhNhNubjt)}(h**tfm**h]htfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubh8 is a NULL or error pointer, this function does nothing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM hjubeh}(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.hhMaubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMaubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMaubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMaubj)}(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 hjhhhjhMaubj )}(h(struct crypto_ahash *tfm)h]j )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hj!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjAmodnameN classnameNj\ j_ )}jb ]je )}jX jsbc.crypto_ahash_digestsizeasbuh1hhjubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubjz )}(hj} h]h*}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjubj)}(htfmh]htfm}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(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)}(hobtain message digest sizeh]hobtain message digest size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMXhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMaubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhj 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.hhM\hjubj)}(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.hhMYhjubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hj h]h Description}(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.hhM[hjubh)}(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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM[hjubh)}(h **Return**h]jt)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjEubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM^hjubh)}(hmessage digest size of cipherh]hmessage digest size of cipher}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhM_hjubeh}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMpubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMpubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMpubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMpubj)}(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 hjhhhjhMpubj )}(h(struct crypto_ahash *tfm)h]j )}(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^reftypejX reftargetjmodnameN classnameNj\ j_ )}jb ]je )}jX jsbc.crypto_ahash_statesizeasbuh1hhjubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubjz )}(hj} h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjubj)}(htfmh]htfm}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1j hjhhhjhMpubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMpubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMphjhhubjB)}(hhh]h)}(hobtain size of the ahash stateh]hobtain size of the ahash state}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMghjehhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMpubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjejjfjgjhuh1hhhhj 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)}(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.hhMkhjubj)}(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.hhMhhjubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubah}(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.hhMjhjubh)}(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.hhMjhjubh)}(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.hhMnhjubh)}(hsize of the ahash stateh]hsize 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.hhMnhjubeh}(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}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLhhhW/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&]uh1hhjLhhhj]hMubh)}(hhh]j)}(h crypto_ahashh]h crypto_ahash}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjqmodnameN classnameNj\ j_ )}jb ]je )}jX crypto_ahash_reqtfmsbc.crypto_ahash_reqtfmasbuh1hhjLhhhj]hMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLhhhj]hMubjz )}(hj} h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjLhhhj]hMubj)}(hcrypto_ahash_reqtfmh]j)}(hjh]hcrypto_ahash_reqtfm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjLhhhj]hMubj )}(h(struct ahash_request *req)h]j )}(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^reftypejX reftargetjmodnameN classnameNj\ j_ )}jb ]jc.crypto_ahash_reqtfmasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubjz )}(hj} h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjubj)}(hreqh]hreq}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1j hjLhhhj]hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjHhhhj]hMubah}(h]jCah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj]hMhjEhhubjB)}(hhh]h)}(h!obtain cipher handle from requesth]h!obtain cipher handle from request}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1jAhjEhhhj]hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjcjejcjfjgjhuh1hhhhj 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)}(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)}(hq``struct ahash_request *req`` asynchronous request handle that contains the reference to the ahash cipher handle h](j)}(h``struct ahash_request *req``h]j)}(hjh]hstruct ahash_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubj)}(hhh]h)}(hRasynchronous request handle that contains the reference to the ahash cipher handleh]hRasynchronous request handle that contains the reference to the ahash cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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)}(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.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)}(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.hhMhjgubeh}(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@huh1hhjBhMhj)hhubjB)}(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.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jAhj)hhhjBhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj(jej(jfjgjhuh1hhhhj hNhNubjj)}(hb**Parameters** ``struct crypto_ahash *tfm`` cipher handle **Return** size of the request datah](h)}(h**Parameters**h]jt)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj0ubah}(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)}(hjQh]hstruct crypto_ahash *tfm}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjKubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,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)}(hsize of the request datah]hsize of the request data}(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_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 hjhhhjhMubj )}(h>(struct crypto_ahash *tfm, const u8 *key, unsigned int keylen)h](j )}(hstruct crypto_ahash *tfmh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hjhhhNhNubah}(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^reftypejX reftargetj.modnameN classnameNj\ j_ )}jb ]je )}jX jsbc.crypto_ahash_setkeyasbuh1hhj ubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubjz )}(hj} h]h*}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj ubj)}(htfmh]htfm}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj )}(h const u8 *keyh](h)}(hj h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjmodnameN classnameNj\ j_ )}jb ]jHc.crypto_ahash_setkeyasbuh1hhj|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubjz )}(hj} h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj|ubj)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj )}(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}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hkeylenh]hkeylen}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j 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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjjjejjjfjgjhuh1hhhhj 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)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjrubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjnubj)}(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.hhMhjubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``const u8 *key`` buffer holding the key h](j)}(h``const u8 *key``h]j)}(hjh]h const u8 *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest: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&]uh1jhjhMhjubj)}(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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]jt)}(hj@h]h Description}(hjBhhhNhNubah}(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.hhMhjnubh)}(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.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjnubh)}(h **Return**h]jt)}(hjgh]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jshjeubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjnubh)}(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.hhMhjnubeh}(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}(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_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 hjhhhjhMubj )}(h(struct ahash_request *req)h]j )}(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^reftypejX reftargetj modnameN classnameNj\ j_ )}jb ]je )}jX jsbc.crypto_ahash_finupasbuh1hhjubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubjz )}(hj} h]h*}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjubj)}(hreqh]hreq}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j 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"update and finalize message digesth]h"update and finalize message digest}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjihhubah}(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_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)}(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_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.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)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hj&hhhNhNubah}(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_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}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjQhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMubh)}(h h]h }(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjQhhhjchMubj)}(hcrypto_ahash_finalh]j)}(hcrypto_ahash_finalh]hcrypto_ahash_final}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjQhhhjchMubj )}(h(struct ahash_request *req)h]j )}(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^reftypejX reftargetjmodnameN classnameNj\ j_ )}jb ]je )}jX jxsbc.crypto_ahash_finalasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubjz )}(hj} h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubah}(h]h ]h"]h$]h&]j+j,uh1j hjQhhhjchMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjMhhhjchMubah}(h]jHah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjchMhjJhhubjB)}(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&]uh1jAhjJhhhjchMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj-jej-jfjgjhuh1hhhhj 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)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj1ubj)}(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)}(hjVh]hstruct ahash_request *req}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjPubj)}(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}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubh)}(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.hhMhj1ubh)}(hFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle.h]hFinalize the message digest operation and create the message digest based on all data added to the cipher handle. The message digest is placed into the output buffer registered with the ahash_request handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj1ubh)}(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.hhMhj1ubh)}(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.hhMhj1ubeh}(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 }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj hMubj)}(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 hjhhhj hMubj )}(h(struct ahash_request *req)h]j )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hj;hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7ubh)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj[modnameN classnameNj\ j_ )}jb ]je )}jX j!sbc.crypto_ahash_digestasbuh1hhj7ubh)}(h h]h }(hjyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubjz )}(hj} h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj7ubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj3ubah}(h]h ]h"]h$]h&]j+j,uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhj hMubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hMhjhhubjB)}(hhh]h)}(h%calculate message digest for a bufferh]h%calculate message digest for a buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhj hMubeh}(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)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj9ubah}(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.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(h **Return**h]jt)}(hjbh]hReturn}(hjdhhhNhNubah}(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.hhMhjubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(hjxhhhNhNubah}(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}(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_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 hjhhhjhMubj )}(h&(struct ahash_request *req, void *out)h](j )}(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^reftypejX reftargetjmodnameN classnameNj\ j_ )}jb ]je )}jX jsbc.crypto_ahash_exportasbuh1hhjubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubjz )}(hj} h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjubj)}(hreqh]hreq}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjubj )}(h void *outh](j )}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjRubh)}(h h]h }(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubjz )}(hj} h]h*}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjRubj)}(houth]hout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j 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)}(h$extract current message digest stateh]h$extract current message digest state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjhhubah}(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 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)}(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 whose state is exported 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)}(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&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1hhj8 hMhj9 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj8 hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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.hhMhjubh)}(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()).}(hjt hhhNhNubah}(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&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubh)}(h80 if the export was successful; < 0 if an error occurredh]h80 if the export was successful; < 0 if an error occurred}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhjubeh}(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 hMubj )}(h+(struct ahash_request *req, const void *in)h](j )}(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^reftypejX reftargetj'!modnameN classnameNj\ j_ )}jb ]je )}jX j sbc.crypto_ahash_importasbuh1hhj!ubh)}(h h]h }(hjE!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!ubjz )}(hj} h]h*}(hjS!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj!ubj)}(hreqh]hreq}(hj`!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj ubj )}(hconst void *inh](h)}(hj h]hconst}(hjy!hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhju!ubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhju!ubj )}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hju!ubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhju!ubjz )}(hj} h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hju!ubj)}(hinh]hin}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju!ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j 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#hMhj"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.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`` 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.hhMhj#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.hhMhj$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.hhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]jt)}(hjE$h]h Description}(hjG$hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjC$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj#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.hhMhj#ubh)}(h **Return**h]jt)}(hjl$h]hReturn}(hjn$hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjj$ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:16: ./include/crypto/hash.hhMhj#ubh)}(hsee crypto_ahash_final()h]hsee crypto_ahash_final()}(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 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}(hj$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 }(hj$hhhNhNubh)}(h:c:type:`ahash_request`h]j)}(hj$h]h ahash_request}(hj$hhhNhNubah}(h]h ](xrefj^c-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdoccrypto/api-digest refdomainj^reftypetype refexplicitrefwarnj\ j_ )}jb ]sb reftarget ahash_requestuh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:22: ./include/crypto/hash.hhMhj$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 }(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_requestuh1hhj$hMhj$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.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMhj$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.hhM$ubh)}(h h]h }(hj4%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!%hhhj3%hM$ubj)}(hahash_request_set_tfmh]j)}(hahash_request_set_tfmh]hahash_request_set_tfm}(hjF%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB%ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj!%hhhj3%hM$ubj )}(h5(struct ahash_request *req, struct crypto_ahash *tfm)h](j )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjb%hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^%ubh)}(h h]h }(hjo%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^reftypejX reftargetj%modnameN classnameNj\ j_ )}jb ]je )}jX jH%sbc.ahash_request_set_tfmasbuh1hhj^%ubh)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^%ubjz )}(hj} h]h*}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj^%ubj)}(hreqh]hreq}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^%ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZ%ubj )}(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^reftypejX reftargetj%modnameN classnameNj\ j_ )}jb ]j%c.ahash_request_set_tfmasbuh1hhj%ubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%ubjz )}(hj} h]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj%ubj)}(htfmh]htfm}(hj+&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZ%ubeh}(h]h ]h"]h$]h&]j+j,uh1j hj!%hhhj3%hM$ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj%hhhj3%hM$ubah}(h]j%ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj3%hM$hj%hhubjB)}(hhh]h)}(h)update cipher handle reference in requesth]h)update cipher handle reference in request}(hjU&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhjR&hhubah}(h]h ]h"]h$]h&]uh1jAhj%hhhj3%hM$ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjm&jejm&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)}(hjw&h]h Parameters}(hjy&hhhNhNubah}(h]h ]h"]h$]h&]uh1jshju&ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM!hjq&ubj)}(hhh](j)}(h<``struct ahash_request *req`` request handle to be modified 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 handle to be modifiedh]hrequest handle to be modified}(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)}(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.hhMhj&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&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubeh}(h]h ]h"]h$]h&]uh1jhjq&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.hhM!hjq&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.hhM!hjq&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}(hjO'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjK'hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM6ubh)}(h h]h }(hj]'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjK'hhhj\'hM6ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hjn'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk'ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjp'modnameN classnameNj\ j_ )}jb ]je )}jX ahash_request_allocsbc.ahash_request_allocasbuh1hhjK'hhhj\'hM6ubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjK'hhhj\'hM6ubjz )}(hj} h]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjK'hhhj\'hM6ubj)}(hahash_request_alloch]j)}(hj'h]hahash_request_alloc}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjK'hhhj\'hM6ubj )}(h%(struct crypto_ahash *tfm, gfp_t gfp)h](j )}(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^reftypejX reftargetj'modnameN classnameNj\ j_ )}jb ]j'c.ahash_request_allocasbuh1hhj'ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubjz )}(hj} h]h*}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj'ubj)}(htfmh]htfm}(hj (hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj'ubj )}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj<(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9(ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj>(modnameN classnameNj\ j_ )}jb ]j'c.ahash_request_allocasbuh1hhj5(ubh)}(h h]h }(hjZ(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5(ubj)}(hgfph]hgfp}(hjh(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5(ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj'ubeh}(h]h ]h"]h$]h&]j+j,uh1j hjK'hhhj\'hM6ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjG'hhhj\'hM6ubah}(h]jB'ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj\'hM6hjD'hhubjB)}(hhh]h)}(hallocate request data structureh]hallocate request data structure}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM+hj(hhubah}(h]h ]h"]h$]h&]uh1jAhjD'hhhj\'hM6ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj(jej(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)}(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.hhM/hj(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.hhM,hj(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(hM,hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hM,hj(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.hhM-hj)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!)hM-hj")ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj!)hM-hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]jt)}(hjG)h]h Description}(hjI)hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjE)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM/hj(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.hhM/hj(ubh)}(h **Return**h]jt)}(hjn)h]hReturn}(hjp)hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjl)ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM4hj(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}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM4hj(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}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMIubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)hhhj)hMIubj)}(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 hj)hhhj)hMIubj )}(h(struct ahash_request *req)h]j )}(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^reftypejX reftargetj*modnameN classnameNj\ j_ )}jb ]je )}jX j)sbc.ahash_request_freeasbuh1hhj)ubh)}(h h]h }(hj.*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubjz )}(hj} h]h*}(hj<*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj)ubj)}(hreqh]hreq}(hjI*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj)ubah}(h]h ]h"]h$]h&]j+j,uh1j hj)hhhj)hMIubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj)hhhj)hMIubah}(h]j)ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj)hMIhj)hhubjB)}(hhh]h)}(h+zeroize and free the request data structureh]h+zeroize and free the request data structure}(hjs*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMFhjp*hhubah}(h]h ]h"]h$]h&]uh1jAhj)hhhj)hMIubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj*jej*jfjgjhuh1hhhhj$hNhNubjj)}(h`**Parameters** ``struct ahash_request *req`` request data structure cipher handle to be freedh](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.hhMJhj*ubj)}(hhh]j)}(hN``struct ahash_request *req`` request data structure cipher handle to be freedh](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.hhMLhj*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.hhMGhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMLhj*ubah}(h]h ]h"]h$]h&]uh1jhj*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.hhMmubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj +hhhj+hMmubj)}(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+hMmubj )}(hM(struct ahash_request *req, u32 flags, crypto_completion_t compl, void *data)h](j )}(hstruct ahash_request *reqh](h)}(hhh]hstruct}(hjK+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjG+ubh)}(h h]h }(hjX+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjG+ubh)}(hhh]j)}(h ahash_requesth]h ahash_request}(hji+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf+ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjk+modnameN classnameNj\ j_ )}jb ]je )}jX j1+sbc.ahash_request_set_callbackasbuh1hhjG+ubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjG+ubjz )}(hj} h]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjG+ubj)}(hreqh]hreq}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG+ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjC+ubj )}(h u32 flagsh](h)}(hhh]j)}(hu32h]hu32}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj+modnameN classnameNj\ j_ )}jb ]j+c.ahash_request_set_callbackasbuh1hhj+ubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+ubj)}(hflagsh]hflags}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjC+ubj )}(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^reftypejX reftargetj ,modnameN classnameNj\ j_ )}jb ]j+c.ahash_request_set_callbackasbuh1hhj,ubh)}(h h]h }(hj&,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,ubj)}(hcomplh]hcompl}(hj4,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjC+ubj )}(h void *datah](j )}(hvoidh]hvoid}(hjM,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjI,ubh)}(h h]h }(hj[,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjI,ubjz )}(hj} h]h*}(hji,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjI,ubj)}(hdatah]hdata}(hjv,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjC+ubeh}(h]h ]h"]h$]h&]j+j,uh1j hj +hhhj+hMmubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj+hhhj+hMmubah}(h]j+ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj+hMmhj+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.hhMUhj,hhubah}(h]h ]h"]h$]h&]uh1jAhj+hhhj+hMmubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj,jej,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.hhMYhj,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.hhMVhj,ubj)}(hhh]h)}(hrequest handleh]hrequest handle}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMVhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMVhj,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.hhMZhj-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}(hj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMWhj0-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj/-hMZhj,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)}(hjT-h]hcrypto_completion_t compl}(hjV-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM[hjN-ubj)}(hhh]h)}(hBcallback function pointer to be registered with the request handleh]hBcallback function pointer to be registered with the request handle}(hjm-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji-hM[hjj-ubah}(h]h ]h"]h$]h&]uh1jhjN-ubeh}(h]h ]h"]h$]h&]uh1jhji-hM[hj,ubj)}(hXC``void *data`` The data pointer refers to memory that is not used by the kernel crypto API, but provided to the callback function for it to use. Here, the caller can provide a reference to memory the callback function can operate on. As the callback function is invoked asynchronously to the related functionality, it may need to access data structures of the related functionality which can be referenced using this pointer. The callback function can access the memory via the "data" field in the :c:type:`crypto_async_request` data structure provided to the callback function. h](j)}(h``void *data``h]j)}(hj-h]h void *data}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMchj-ubj)}(hhh]h)}(hX3The data pointer refers to memory that is not used by the kernel crypto API, but provided to the callback function for it to use. Here, the caller can provide a reference to memory the callback function can operate on. As the callback function is invoked asynchronously to the related functionality, it may need to access data structures of the related functionality which can be referenced using this pointer. The callback function can access the memory via the "data" field in the :c:type:`crypto_async_request` data structure provided to the callback function.h](hXThe data pointer refers to memory that is not used by the kernel crypto API, but provided to the callback function for it to use. Here, the caller can provide a reference to memory the callback function can operate on. As the callback function is invoked asynchronously to the related functionality, it may need to access data structures of the related functionality which can be referenced using this pointer. The callback function can access the memory via the “data” field in the }(hj-hhhNhNubh)}(h:c:type:`crypto_async_request`h]j)}(hj-h]hcrypto_async_request}(hj-hhhNhNubah}(h]h ](j$j^c-typeeh"]h$]h&]uh1jhj-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.hhM\hj-ubh2 data structure provided to the callback function.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hM\hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMchj,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.hhMehj,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.hhMehj,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.hhMhhj.ubh4 handle and must comply with the following template:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8.hMhhj,ubj)}(hCvoid callback_function(struct crypto_async_request *req, int error)h]hCvoid callback_function(struct crypto_async_request *req, int error)}hjC.sbah}(h]h ]h"]h$]h&]j+j,uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMkhj,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}(hjr.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjn.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&]uh1hhjn.hhhj.hMubj)}(hahash_request_set_crypth]j)}(hahash_request_set_crypth]hahash_request_set_crypt}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjn.hhhj.hMubj )}(hU(struct ahash_request *req, struct scatterlist *src, u8 *result, unsigned int nbytes)h](j )}(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^reftypejX reftargetj.modnameN classnameNj\ j_ )}jb ]je )}jX j.sbc.ahash_request_set_cryptasbuh1hhj.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubjz )}(hj} h]h*}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj.ubj)}(hreqh]hreq}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj.ubj )}(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&]uh1jhjj?)j@huh1hhj.hMhjg.hhubjB)}(hhh]h)}(hset data buffersh]hset data buffers}(hjH0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM}hjE0hhubah}(h]h ]h"]h$]h&]uh1jAhjg.hhhj.hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj`0jej`0jfjgjhuh1hhhhj$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)}(hjj0h]h Parameters}(hjl0hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjh0ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhjd0ubj)}(hhh](j)}(hA``struct ahash_request *req`` ahash_request handle to be updated h](j)}(h``struct ahash_request *req``h]j)}(hj0h]hstruct ahash_request *req}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhM~hj0ubj)}(hhh]h)}(h"ahash_request handle to be updatedh]h"ahash_request handle to be updated}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM~hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM~hj0ubj)}(h7``struct scatterlist *src`` source scatter/gather list h](j)}(h``struct scatterlist *src``h]j)}(hj0h]hstruct scatterlist *src}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj0ubj)}(hhh]h)}(hsource scatter/gather listh]hsource scatter/gather list}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubj)}(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)}(hj0h]h u8 *result}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj0ubj)}(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&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj0ubj)}(hW``unsigned int nbytes`` number of bytes to process from the source scatter/gather list h](j)}(h``unsigned int nbytes``h]j)}(hj51h]hunsigned int nbytes}(hj71hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj31ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhj/1ubj)}(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}(hjN1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ1hMhjK1ubah}(h]h ]h"]h$]h&]uh1jhj/1ubeh}(h]h ]h"]h$]h&]uh1jhjJ1hMhj0ubeh}(h]h ]h"]h$]h&]uh1jhjd0ubh)}(h**Description**h]jt)}(hjp1h]h Description}(hjr1hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjn1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhjd0ubh)}(hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.h]hBy using this call, the caller references the source scatter/gather list. The source scatter/gather list points to the data the message digest is to be calculated for.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:25: ./include/crypto/hash.hhMhjd0ubeh}(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}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hhhhhKubh)}(hThe synchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_SHASH (listed as type "shash" in /proc/crypto)h]hThe synchronous message digest API is used with the ciphers of type CRYPTO_ALG_TYPE_SHASH (listed as type “shash” in /proc/crypto)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:31: ./include/crypto/hash.hhMhj1hhubh)}(hLThe message digest API is able to maintain state information for the caller.h]hLThe message digest API is able to maintain state information for the caller.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:31: ./include/crypto/hash.hhMhj1hhubh)}(hkThe synchronous message digest API can store user-related context in its shash_desc request data structure.h]hkThe synchronous message digest API can store user-related context in its shash_desc request data structure.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:31: ./include/crypto/hash.hhMhj1hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_alloc_shash (C function)c.crypto_alloc_shashhNtauh1hhj1hhhNhNubh)}(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}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj 2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhj2hMubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj2modnameN classnameNj\ j_ )}jb ]je )}jX crypto_alloc_shashsbc.crypto_alloc_shashasbuh1hhj1hhhj2hMubh)}(h h]h }(hj;2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhj2hMubjz )}(hj} h]h*}(hjI2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj1hhhj2hMubj)}(hcrypto_alloc_shashh]j)}(hj82h]hcrypto_alloc_shash}(hjZ2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV2ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj1hhhj2hMubj )}(h*(const char *alg_name, u32 type, u32 mask)h](j )}(hconst char *alg_nameh](h)}(hj h]hconst}(hju2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjq2ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjq2ubj )}(hcharh]hchar}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjq2ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjq2ubjz )}(hj} h]h*}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjq2ubj)}(halg_nameh]halg_name}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq2ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjm2ubj )}(hu32 typeh](h)}(hhh]j)}(hu32h]hu32}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj2modnameN classnameNj\ j_ )}jb ]j62c.crypto_alloc_shashasbuh1hhj2ubh)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj)}(htypeh]htype}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjm2ubj )}(hu32 maskh](h)}(hhh]j)}(hu32h]hu32}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj3modnameN classnameNj\ j_ )}jb ]j62c.crypto_alloc_shashasbuh1hhj3ubh)}(h h]h }(hj;3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubj)}(hmaskh]hmask}(hjI3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjm2ubeh}(h]h ]h"]h$]h&]j+j,uh1j hj1hhhj2hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj1hhhj2hMubah}(h]j1ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj2hMhj1hhubjB)}(hhh]h)}(hallocate message digest handleh]hallocate message digest handle}(hjs3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjp3hhubah}(h]h ]h"]h$]h&]uh1jAhj1hhhj2hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj3jej3jfjgjhuh1hhhhj1hNhNubjj)}(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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj3ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3ubj)}(hhh](j)}(hn``const char *alg_name`` is the cra_name / name or cra_driver_name / driver name of the message digest cipher h](j)}(h``const char *alg_name``h]j)}(hj3h]hconst char *alg_name}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3ubj)}(hhh]h)}(hTis the cra_name / name or cra_driver_name / driver name of the message digest cipherh]hTis the cra_name / name or cra_driver_name / driver name of the message digest cipher}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(h.``u32 type`` specifies the type of the cipher h](j)}(h ``u32 type``h]j)}(hj3h]hu32 type}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3ubj)}(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&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubj)}(h/``u32 mask`` specifies the mask for the cipher h](j)}(h ``u32 mask``h]j)}(hj'4h]hu32 mask}(hj)4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%4ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj!4ubj)}(hhh]h)}(h!specifies the mask for the cipherh]h!specifies the mask for the cipher}(hj@4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<4hMhj=4ubah}(h]h ]h"]h$]h&]uh1jhj!4ubeh}(h]h ]h"]h$]h&]uh1jhj<4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubh)}(h**Description**h]jt)}(hjb4h]h Description}(hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj`4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3ubh)}(hAllocate a cipher handle for a message digest. The returned :c:type:`struct crypto_shash ` is the cipher handle that is required for any subsequent API invocation for that message digest.h](h`h]j)}(hj4h]hstruct crypto_shash}(hj4hhhNhNubah}(h]h ](j$j^c-typeeh"]h$]h&]uh1jhj4ubah}(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.hhMhjx4ubha is the cipher handle that is required for any subsequent API invocation for that message digest.}(hjx4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4hMhj3ubh)}(h **Return**h]jt)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3ubj)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj4ubj)}(hhh]h)}(h.of an error, PTR_ERR() returns the error code.h]h.of an error, PTR_ERR() returns the error code.}(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&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_free_shash (C function)c.crypto_free_shashhNtauh1hhj1hhhNhNubh)}(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 }(hj+5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5hhhj*5hMubj)}(hcrypto_free_shashh]j)}(hcrypto_free_shashh]hcrypto_free_shash}(hj=5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj95ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj5hhhj*5hMubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hjY5hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjU5ubh)}(h h]h }(hjf5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjU5ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hjw5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt5ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjy5modnameN classnameNj\ j_ )}jb ]je )}jX j?5sbc.crypto_free_shashasbuh1hhjU5ubh)}(h h]h }(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjU5ubjz )}(hj} h]h*}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjU5ubj)}(htfmh]htfm}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU5ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjQ5ubah}(h]h ]h"]h$]h&]j+j,uh1j hj5hhhj*5hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj5hhhj*5hMubah}(h]j5ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj*5hMhj5hhubjB)}(hhh]h)}(h*zeroize and free the message digest handleh]h*zeroize and free the message digest handle}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jAhj5hhhj*5hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj5jej5jfjgjhuh1hhhhj1hNhNubjj)}(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)}(hj5h]h Parameters}(hj6hhhNhNubah}(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.hhMhj5ubj)}(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}(hj66hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj26hMhj36ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj26hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubh)}(h**Description**h]jt)}(hjX6h]h Description}(hjZ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjV6ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj5ubh)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hjn6hhhNhNubjt)}(h**tfm**h]htfm}(hjv6hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjn6ubh8 is a NULL or error pointer, this function does nothing.}(hjn6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#crypto_shash_blocksize (C function)c.crypto_shash_blocksizehNtauh1hhj1hhhNhNubh)}(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}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6hhhj6hMubj )}(hinth]hint}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6hhhj6hMubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6hhhj6hMubj)}(hcrypto_shash_blocksizeh]j)}(hcrypto_shash_blocksizeh]hcrypto_shash_blocksize}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj6hhhj6hMubj )}(h(struct crypto_shash *tfm)h]j )}(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}(hj&7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#7ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj(7modnameN classnameNj\ j_ )}jb ]je )}jX j6sbc.crypto_shash_blocksizeasbuh1hhj7ubh)}(h h]h }(hjF7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubjz )}(hj} h]h*}(hjT7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj7ubj)}(htfmh]htfm}(hja7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj7ubah}(h]h ]h"]h$]h&]j+j,uh1j hj6hhhj6hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj6hhhj6hMubah}(h]j6ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj6hMhj6hhubjB)}(hhh]h)}(hobtain block size for cipherh]hobtain block size for cipher}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jAhj6hhhj6hMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj7jej7jfjgjhuh1hhhhj1hNhNubjj)}(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)}(hj7h]h Parameters}(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.hhMhj7ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj7h]hstruct crypto_shash *tfm}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj7ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]jt)}(hj8h]h Description}(hj 8hhhNhNubah}(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.hhMhj7ubh)}(h[The block size for the message digest cipher referenced with the cipher handle is returned.h]h[The block size for the message digest cipher referenced with the cipher handle is returned.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj7ubh)}(h **Return**h]jt)}(hj.8h]hReturn}(hj08hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj,8ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj7ubh)}(hblock size of cipherh]hblock size of cipher}(hjD8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$crypto_shash_digestsize (C function)c.crypto_shash_digestsizehNtauh1hhj1hhhNhNubh)}(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}(hjs8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjo8hhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjo8hhhj8hM ubj )}(hinth]hint}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjo8hhhj8hM ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjo8hhhj8hM ubj)}(hcrypto_shash_digestsizeh]j)}(hcrypto_shash_digestsizeh]hcrypto_shash_digestsize}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjo8hhhj8hM ubj )}(h(struct crypto_shash *tfm)h]j )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hj8hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj8ubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj8modnameN classnameNj\ j_ )}jb ]je )}jX j8sbc.crypto_shash_digestsizeasbuh1hhj8ubh)}(h h]h }(hj 9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubjz )}(hj} h]h*}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj8ubj)}(htfmh]htfm}(hj%9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj8ubah}(h]h ]h"]h$]h&]j+j,uh1j hjo8hhhj8hM ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjk8hhhj8hM ubah}(h]jf8ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj8hM hjh8hhubjB)}(hhh]h)}(hobtain message digest sizeh]hobtain message digest size}(hjO9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjL9hhubah}(h]h ]h"]h$]h&]uh1jAhjh8hhhj8hM ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjg9jejg9jfjgjhuh1hhhhj1hNhNubjj)}(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)}(hjq9h]h Parameters}(hjs9hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjo9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM hjk9ubj)}(hhh]j)}(h+``struct crypto_shash *tfm`` cipher handle h](j)}(h``struct crypto_shash *tfm``h]j)}(hj9h]hstruct crypto_shash *tfm}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj9ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjk9ubh)}(h**Description**h]jt)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjk9ubh)}(hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.h]hsThe size for the message digest created by the message digest cipher referenced with the cipher handle is returned.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjk9ubh)}(h **Return**h]jt)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj9ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM hjk9ubh)}(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 hjk9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"crypto_shash_descsize (C function)c.crypto_shash_descsizehNtauh1hhj1hhhNhNubh)}(hhh](h)}(h=unsigned int crypto_shash_descsize (struct crypto_shash *tfm)h]h)}(hj?)j@huh1hhjE:hM5hj,: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.hhM'hj;hhubah}(h]h ]h"]h$]h&]uh1jAhj,:hhhjE:hM5ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj+;jej+;jfjgjhuh1hhhhj1hNhNubjj)}(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)}(hj5;h]h Parameters}(hj7;hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj3;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)}(hjT;h]hstruct crypto_shash *tfm}(hjV;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR;ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM(hjN;ubj)}(hhh]h)}(h cipher handleh]h cipher handle}(hjm;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji;hM(hjj;ubah}(h]h ]h"]h$]h&]uh1jhjN;ubeh}(h]h ]h"]h$]h&]uh1jhji;hM(hjK;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)}(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.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM*hj/;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)}(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.hhM3hj/;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.hhM3hj/;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_setkey (C function)c.crypto_shash_setkeyhNtauh1hhj1hhhNhNubh)}(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.hhMLubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<hhhj<hMLubj)}(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<hMLubj )}(h>(struct crypto_shash *tfm, const u8 *key, unsigned int keylen)h](j )}(hstruct crypto_shash *tfmh](h)}(hhh]hstruct}(hjG<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjC<ubh)}(h h]h }(hjT<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjC<ubh)}(hhh]j)}(h crypto_shashh]h crypto_shash}(hje<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb<ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjg<modnameN classnameNj\ j_ )}jb ]je )}jX j-<sbc.crypto_shash_setkeyasbuh1hhjC<ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjC<ubjz )}(hj} h]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjC<ubj)}(htfmh]htfm}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC<ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj?<ubj )}(h const u8 *keyh](h)}(hj h]hconst}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubh)}(hhh]j)}(hu8h]hu8}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj<modnameN classnameNj\ j_ )}jb ]j<c.crypto_shash_setkeyasbuh1hhj<ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubjz )}(hj} h]h*}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj<ubj)}(hkeyh]hkey}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj?<ubj )}(hunsigned int keylenh](j )}(hunsignedh]hunsigned}(hj)=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%=ubh)}(h h]h }(hj7=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%=ubj )}(hinth]hint}(hjE=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%=ubh)}(h h]h }(hjS=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj%=ubj)}(hkeylenh]hkeylen}(hja=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%=ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hj?<ubeh}(h]h ]h"]h$]h&]j+j,uh1j hj<hhhj<hMLubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj<hhhj<hMLubah}(h]j;ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj<hMLhj;hhubjB)}(hhh]h)}(hset key for message digesth]hset key for message digest}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM@hj=hhubah}(h]h ]h"]h$]h&]uh1jAhj;hhhj<hMLubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj=jej=jfjgjhuh1hhhhj1hNhNubjj)}(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** Any context. **Return** 0 if the setting of the key 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:34: ./include/crypto/hash.hhMDhj=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.hhMChj8>ubj)}(hhh]h)}(hlength of the key in bytesh]hlength of the key in bytes}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS>hMChjT>ubah}(h]h ]h"]h$]h&]uh1jhj8>ubeh}(h]h ]h"]h$]h&]uh1jhjS>hMChj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]jt)}(hjy>h]h Description}(hj{>hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjw>ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMEhj=ubh)}(hThe caller provided key is set for the keyed message digest cipher. The cipher handle must point to a keyed message digest cipher in order for this function to succeed.h]hThe caller provided key is set for the keyed message digest cipher. The cipher handle must point to a keyed message digest cipher in order for this function to succeed.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMEhj=ubh)}(h **Context**h]jt)}(hj>h]hContext}(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.hhMIhj=ubh)}(h Any context.h]h Any context.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMIhj=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.hhMKhj=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.hhMJhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_digest (C function)c.crypto_shash_digesthNtauh1hhj1hhhNhNubh)}(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.hhM^ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?hhhj?hM^ubj)}(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?hM^ubj )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjI?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjE?ubh)}(h h]h }(hjV?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjE?ubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjg?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd?ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetji?modnameN classnameNj\ j_ )}jb ]je )}jX j/?sbc.crypto_shash_digestasbuh1hhjE?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjE?ubjz )}(hj} h]h*}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjE?ubj)}(hdesch]hdesc}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE?ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjA?ubj )}(hconst u8 *datah](h)}(hj h]hconst}(hj?hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubh)}(hhh]j)}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj?modnameN classnameNj\ j_ )}jb ]j?c.crypto_shash_digestasbuh1hhj?ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?ubjz )}(hj} h]h*}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj?ubj)}(hdatah]hdata}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjA?ubj )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hj+@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'@ubh)}(h h]h }(hj9@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'@ubj )}(hinth]hint}(hjG@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'@ubh)}(h h]h }(hjU@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'@ubj)}(hlenh]hlen}(hjc@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjA?ubj )}(hu8 *outh](h)}(hhh]j)}(hu8h]hu8}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|@ubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj@modnameN classnameNj\ j_ )}jb ]j?c.crypto_shash_digestasbuh1hhjx@ubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjx@ubjz )}(hj} h]h*}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjx@ubj)}(houth]hout}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx@ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjA?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)}(h#calculate message digest for bufferh]h#calculate message digest for buffer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMPhj@hhubah}(h]h ]h"]h$]h&]uh1jAhj?hhhj?hM^ubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj@jej@jfjgjhuh1hhhhj1hNhNubjj)}(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** Any 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.hhMThj@ubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hj#Ah]hstruct shash_desc *desc}(hj%AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Aubah}(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()}(hjj?)j@huh1hhjBhMhjBhhubjB)}(hhh]h)}(h,extract operational state for message digesth]h,extract operational state for message digest}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMuhjChhubah}(h]h ]h"]h$]h&]uh1jAhjBhhhjBhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjCjejCjfjgjhuh1hhhhj1hNhNubjj)}(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** Any context. **Return** 0 if the export creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjCh]h Parameters}(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.hhMyhjCubj)}(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)}(hj Dh]hstruct shash_desc *desc}(hj DhhhNhNubah}(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.hhMvhjDubj)}(hhh]h)}(hAreference to the operational state handle whose state is exportedh]hAreference to the operational state handle whose state is exported}(hj#DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMvhj Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMvhjDubj)}(hL``void *out`` output buffer of sufficient size that can hold the hash state h](j)}(h ``void *out``h]j)}(hjCDh]h void *out}(hjEDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjADubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMwhj=Dubj)}(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\DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXDhMwhjYDubah}(h]h ]h"]h$]h&]uh1jhj=Dubeh}(h]h ]h"]h$]h&]uh1jhjXDhMwhjDubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]jt)}(hj~Dh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj|Dubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMyhjCubh)}(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).}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMyhjCubh)}(h **Context**h]jt)}(hjDh]hContext}(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.hhM}hjCubh)}(h Any context.h]h Any context.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM}hjCubh)}(h **Return**h]jt)}(hjDh]hReturn}(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.hhMhjCubh)}(hA0 if the export creation was successful; < 0 if an error occurredh]hA0 if the export creation was successful; < 0 if an error occurred}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhM~hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_import (C function)c.crypto_shash_importhNtauh1hhj1hhhNhNubh)}(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 hj EhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj EhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj EhhhjEhMubj)}(hcrypto_shash_importh]j)}(hcrypto_shash_importh]hcrypto_shash_import}(hj2EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Eubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj EhhhjEhMubj )}(h)(struct shash_desc *desc, const void *in)h](j )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjNEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJEubh)}(h h]h }(hj[EhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJEubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjlEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiEubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjnEmodnameN classnameNj\ j_ )}jb ]je )}jX j4Esbc.crypto_shash_importasbuh1hhjJEubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJEubjz )}(hj} h]h*}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjJEubj)}(hdesch]hdesc}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJEubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjFEubj )}(hconst void *inh](h)}(hj h]hconst}(hjEhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjEubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubj )}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubh)}(h h]h }(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjEubjz )}(hj} h]h*}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjEubj)}(hinh]hin}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjFEubeh}(h]h ]h"]h$]h&]j+j,uh1j hj EhhhjEhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj EhhhjEhMubah}(h]jEah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjEhMhjEhhubjB)}(hhh]h)}(himport operational stateh]himport operational state}(hj.FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj+Fhhubah}(h]h ]h"]h$]h&]uh1jAhjEhhhjEhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjFFjejFFjfjgjhuh1hhhhj1hNhNubjj)}(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** Any context. **Return** 0 if the import was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjPFh]h Parameters}(hjRFhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjNFubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjJFubj)}(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)}(hjoFh]hstruct shash_desc *desc}(hjqFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjiFubj)}(hhh]h)}(hAreference to the operational state handle the state imported intoh]hAreference to the operational state handle the state imported into}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjiFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjfFubj)}(h,``const void *in`` buffer holding the state h](j)}(h``const void *in``h]j)}(hjFh]hconst void *in}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjFubj)}(hhh]h)}(hbuffer holding the stateh]hbuffer holding the state}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjfFubeh}(h]h ]h"]h$]h&]uh1jhjJFubh)}(h**Description**h]jt)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjFubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjJFubh)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjJFubh)}(h **Context**h]jt)}(hj Gh]hContext}(hj GhhhNhNubah}(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.hhMhjJFubh)}(h Any context.h]h Any context.}(hj GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjJFubh)}(h **Return**h]jt)}(hj1Gh]hReturn}(hj3GhhhNhNubah}(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.hhMhjJFubh)}(h80 if the import was successful; < 0 if an error occurredh]h80 if the import was successful; < 0 if an error occurred}(hjGGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjJFubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_shash_init (C function)c.crypto_shash_inithNtauh1hhj1hhhNhNubh)}(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}(hjvGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrGhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrGhhhjGhMubj)}(hcrypto_shash_inith]j)}(hcrypto_shash_inith]hcrypto_shash_init}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjrGhhhjGhMubj )}(h(struct shash_desc *desc)h]j )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjGhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjGubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjGmodnameN classnameNj\ j_ )}jb ]je )}jX jGsbc.crypto_shash_initasbuh1hhjGubh)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubjz )}(hj} h]h*}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjGubj)}(hdesch]hdesc}(hj HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjGubah}(h]h ]h"]h$]h&]j+j,uh1j hjrGhhhjGhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjnGhhhjGhMubah}(h]jiGah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjGhMhjkGhhubjB)}(hhh]h)}(h(re)initialize message digesth]h(re)initialize message digest}(hj6HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj3Hhhubah}(h]h ]h"]h$]h&]uh1jAhjkGhhhjGhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjNHjejNHjfjgjhuh1hhhhj1hNhNubjj)}(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** Any context. **Return** 0 if the message digest initialization was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjXHh]h Parameters}(hjZHhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjVHubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRHubj)}(hhh]j)}(hL``struct shash_desc *desc`` operational state handle that is already filled h](j)}(h``struct shash_desc *desc``h]j)}(hjwHh]hstruct shash_desc *desc}(hjyHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuHubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjqHubj)}(hhh]h)}(h/operational state handle that is already filledh]h/operational state handle that is already filled}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjqHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjnHubah}(h]h ]h"]h$]h&]uh1jhjRHubh)}(h**Description**h]jt)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjHubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRHubh)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRHubh)}(h **Context**h]jt)}(hjHh]hContext}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjHubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRHubh)}(h Any context.h]h Any context.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRHubh)}(h **Return**h]jt)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjHubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRHubj)}(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}(hj/IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj,Iubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhj+IhMhjIubah}(h]h ]h"]h$]h&]uh1jhjRHubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ crypto_shash_update (C function)c.crypto_shash_updatehNtauh1hhj1hhhNhNubh)}(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}(hjpIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjlIhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlIhhhj~IhMubj)}(hcrypto_shash_updateh]j)}(hcrypto_shash_updateh]hcrypto_shash_update}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjlIhhhj~IhMubj )}(h;(struct shash_desc *desc, const u8 *data, unsigned int len)h](j )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjIhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjIubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjImodnameN classnameNj\ j_ )}jb ]je )}jX jIsbc.crypto_shash_updateasbuh1hhjIubh)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubjz )}(hj} h]h*}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjIubj)}(hdesch]hdesc}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjIubj )}(hconst u8 *datah](h)}(hj h]hconst}(hjJhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjJubh)}(h h]h }(hj,JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJubh)}(hhh]j)}(hu8h]hu8}(hj=JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Jubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetj?JmodnameN classnameNj\ j_ )}jb ]jIc.crypto_shash_updateasbuh1hhjJubh)}(h h]h }(hj[JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJubjz )}(hj} h]h*}(hjiJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjJubj)}(hdatah]hdata}(hjvJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjIubj )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubh)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJubj )}(hinth]hint}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubh)}(h h]h }(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJubj)}(hlenh]hlen}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjIubeh}(h]h ]h"]h$]h&]j+j,uh1j hjlIhhhj~IhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhIhhhj~IhMubah}(h]jcIah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj~IhMhjeIhhubjB)}(hhh]h)}(h)add data to message digest for processingh]h)add data to message digest for processing}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjJhhubah}(h]h ]h"]h$]h&]uh1jAhjeIhhhj~IhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdj Kjej Kjfjgjhuh1hhhhj1hNhNubjj)}(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** Any context. **Return** 0 if the message digest update was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjKubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Kubj)}(hhh](j)}(hQ``struct shash_desc *desc`` operational state handle that is already initialized h](j)}(h``struct shash_desc *desc``h]j)}(hj2Kh]hstruct shash_desc *desc}(hj4KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Kubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj,Kubj)}(hhh]h)}(h4operational state handle that is already initializedh]h4operational state handle that is already initialized}(hjKKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGKhMhjHKubah}(h]h ]h"]h$]h&]uh1jhj,Kubeh}(h]h ]h"]h$]h&]uh1jhjGKhMhj)Kubj)}(h@``const u8 *data`` input data to be added to the message digest h](j)}(h``const u8 *data``h]j)}(hjkKh]hconst u8 *data}(hjmKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjeKubj)}(hhh]h)}(h,input data to be added to the message digesth]h,input data to be added to the message digest}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjeKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj)Kubj)}(h.``unsigned int len`` length of the input data h](j)}(h``unsigned int len``h]j)}(hjKh]hunsigned int len}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjKubj)}(hhh]h)}(hlength of the input datah]hlength of the input data}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj)Kubeh}(h]h ]h"]h$]h&]uh1jhj Kubh)}(h**Description**h]jt)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjKubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Kubh)}(hAUpdates the message digest state of the operational state handle.h]hAUpdates the message digest state of the operational state handle.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Kubh)}(h **Context**h]jt)}(hjLh]hContext}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjLubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Kubh)}(h Any context.h]h Any context.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj Kubh)}(h **Return**h]jt)}(hj-Lh]hReturn}(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 Kubj)}(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}(hjJLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjFLubj)}(hhh]h)}(hoccurredh]hoccurred}(hj\LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjYLubah}(h]h ]h"]h$]h&]uh1jhjFLubeh}(h]h ]h"]h$]h&]uh1jhjXLhMhjCLubah}(h]h ]h"]h$]h&]uh1jhj Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_shash_final (C function)c.crypto_shash_finalhNtauh1hhj1hhhNhNubh)}(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}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjLhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLhhhjLhMubj)}(hcrypto_shash_finalh]j)}(hcrypto_shash_finalh]hcrypto_shash_final}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjLhhhjLhMubj )}(h"(struct shash_desc *desc, u8 *out)h](j )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjLhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjLmodnameN classnameNj\ j_ )}jb ]je )}jX jLsbc.crypto_shash_finalasbuh1hhjLubh)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLubjz )}(hj} h]h*}(hj&MhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjLubj)}(hdesch]hdesc}(hj3MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjLubj )}(hu8 *outh](h)}(hhh]j)}(hu8h]hu8}(hjOMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLMubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjQMmodnameN classnameNj\ j_ )}jb ]jMc.crypto_shash_finalasbuh1hhjHMubh)}(h h]h }(hjmMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHMubjz )}(hj} h]h*}(hj{MhhhNhNubah}(h]h ]j ah"]h$]h&]uIh1jy hjHMubj)}(houth]hout}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHMubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjLubeh}(h]h ]h"]h$]h&]j+j,uh1j hjLhhhjLhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjLhhhjLhMubah}(h]jLah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjLhMhjLhhubjB)}(hhh]h)}(hcalculate message digesth]hcalculate message digest}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1jAhjLhhhjLhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjMjejMjfjgjhuh1hhhhj1hNhNubjj)}(hX6**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** Any context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjMubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubj)}(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)}(hjMh]hstruct shash_desc *desc}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubj)}(hhh]h)}(h9operational state handle that is already filled with datah]h9operational state handle that is already filled with data}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhj Nubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjMubj)}(h9``u8 *out`` output buffer filled with the message digest h](j)}(h ``u8 *out``h]j)}(hj,Nh]hu8 *out}(hj.NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Nubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj&Nubj)}(hhh]h)}(h,output buffer filled with the message digesth]h,output buffer filled with the message digest}(hjENhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjANhMhjBNubah}(h]h ]h"]h$]h&]uh1jhj&Nubeh}(h]h ]h"]h$]h&]uh1jhjANhMhjMubeh}(h]h ]h"]h$]h&]uh1jhjMubh)}(h**Description**h]jt)}(hjgNh]h Description}(hjiNhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjeNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubh)}(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.}(hj}NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubh)}(h **Context**h]jt)}(hjNh]hContext}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubh)}(h Any context.h]h Any context.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubh)}(h **Return**h]jt)}(hjNh]hReturn}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjMubj)}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjNubj)}(hhh]h)}(hoccurredh]hoccurred}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_shash_finup (C function)c.crypto_shash_finuphNtauh1hhj1hhhNhNubh)}(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%OhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!OhhhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMubh)}(h h]h }(hj4OhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!Ohhhj3OhMubj)}(hcrypto_shash_finuph]j)}(hcrypto_shash_finuph]hcrypto_shash_finup}(hjFOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBOubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj!Ohhhj3OhMubj )}(hD(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out)h](j )}(hstruct shash_desc *desch](h)}(hhh]hstruct}(hjbOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj^Oubh)}(h h]h }(hjoOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^Oubh)}(hhh]j)}(h shash_desch]h shash_desc}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Oubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjOmodnameN classnameNj\ j_ )}jb ]je )}jX jHOsbc.crypto_shash_finupasbuh1hhj^Oubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^Oubjz )}(hj} h]h*}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hj^Oubj)}(hdesch]hdesc}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Oubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZOubj )}(hconst u8 *datah](h)}(hj h]hconst}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjOubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubh)}(hhh]j)}(hu8h]hu8}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjOmodnameN classnameNj\ j_ )}jb ]jOc.crypto_shash_finupasbuh1hhjOubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubjz )}(hj} h]h*}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjOubj)}(hdatah]hdata}(hj+PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZOubj )}(hunsigned int lenh](j )}(hunsignedh]hunsigned}(hjDPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@Pubh)}(h h]h }(hjRPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@Pubj )}(hinth]hint}(hj`PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@Pubh)}(h h]h }(hjnPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@Pubj)}(hlenh]hlen}(hj|PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Pubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZOubj )}(hu8 *outh](h)}(hhh]j)}(hu8h]hu8}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainj^reftypejX reftargetjPmodnameN classnameNj\ j_ )}jb ]jOc.crypto_shash_finupasbuh1hhjPubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPubjz )}(hj} h]h*}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jy hjPubj)}(houth]hout}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphj+j,uh1j hjZOubeh}(h]h ]h"]h$]h&]j+j,uh1j hj!Ohhhj3OhMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjOhhhj3OhMubah}(h]jOah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj3OhMhjOhhubjB)}(hhh]h)}(h"calculate message digest of bufferh]h"calculate message digest of buffer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jAhjOhhhj3OhMubeh}(h]h ](j^functioneh"]h$]h&]jcj^jdjQjejQjfjgjhuh1hhhhj1hNhNubjj)}(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** Any context. **Return** 0 if the message digest creation was successful; < 0 if an error occurredh](h)}(h**Parameters**h]jt)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjQubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubj)}(hhh](j)}(h5``struct shash_desc *desc`` see crypto_shash_final() h](j)}(h``struct shash_desc *desc``h]j)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Qubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhj6Qubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjUQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQQhMhjRQubah}(h]h ]h"]h$]h&]uh1jhj6Qubeh}(h]h ]h"]h$]h&]uh1jhjQQhMhj3Qubj)}(h-``const u8 *data`` see crypto_shash_update() h](j)}(h``const u8 *data``h]j)}(hjuQh]hconst u8 *data}(hjwQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjoQubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjoQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3Qubj)}(h/``unsigned int len`` see crypto_shash_update() h](j)}(h``unsigned int len``h]j)}(hjQh]hunsigned int len}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubj)}(hhh]h)}(hsee crypto_shash_update()h]hsee crypto_shash_update()}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3Qubj)}(h%``u8 *out`` see crypto_shash_final() h](j)}(h ``u8 *out``h]j)}(hjQh]hu8 *out}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubj)}(hhh]h)}(hsee crypto_shash_final()h]hsee crypto_shash_final()}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3Qubeh}(h]h ]h"]h$]h&]uh1jhjQubh)}(h**Description**h]jt)}(hj"Rh]h Description}(hj$RhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj Rubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubh)}(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.}(hj8RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubh)}(h **Context**h]jt)}(hjIRh]hContext}(hjKRhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjGRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubh)}(h Any context.h]h Any context.}(hj_RhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubh)}(h **Return**h]jt)}(hjpRh]hReturn}(hjrRhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjnRubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjQubj)}(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}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRubj)}(hhh]h)}(hoccurredh]hoccurred}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/crypto/api-digest:34: ./include/crypto/hash.hhMhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jihj1hhhNhNubeh}(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_handlerjRerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j j$j$j1j1jRjRu nametypes}(j j$j1jRuh}(j hhhjjj$j j j j(j-jjjjjCjHj'j,jjjjjHjMjjjjj j j"j#j1j$j%j%jB'jG'j)j)j+j+je.jj.jRj1j1j1j5j5j6j6jf8jk8j*:j/:j;j<j>j?jBjBjEj EjiGjnGjcIjhIjLjLjOjOu 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.