sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget4/translations/zh_CN/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/zh_TW/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/it_IT/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/ja_JP/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/ko_KR/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/pt_BR/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget4/translations/sp_SP/crypto/libcrypto-auth-encryptionmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h)SPDX-License-Identifier: GPL-2.0-or-laterh]h)SPDX-License-Identifier: GPL-2.0-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhN/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption.rsthKubhsection)}(hhh](htitle)}(hAuthenticated encryptionh]hAuthenticated encryption}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hGThese APIs provide support for authenticated encryption and decryption.h]hGThese APIs provide support for authenticated encryption and decryption.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hAES-CCMh]hAES-CCM}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(h?This API provides support for AES in the CCM mode of operation.h]h?This API provides support for AES in the CCM mode of operation.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleaes_ccm_key (C struct) c.aes_ccm_keyhNtauh1j hhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h aes_ccm_keyh]hdesc_signature_line)}(hstruct aes_ccm_keyh](hdesc_sig_keyword)}(hstructh]hstruct}(hj0hhhNhNubah}(h]h ]kah"]h$]h&]uh1j.hj*hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKubhdesc_sig_space)}(h h]h }(hjBhhhNhNubah}(h]h ]wah"]h$]h&]uh1j@hj*hhhj?hKubh desc_name)}(h aes_ccm_keyh]h desc_sig_name)}(hj&h]h aes_ccm_key}(hjYhhhNhNubah}(h]h ]nah"]h$]h&]uh1jWhjSubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jQhj*hhhj?hKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j(sphinx_line_type declaratorhj$hhhj?hKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j"hj?hKhjhhubh desc_content)}(hhh]h)}(h4A key prepared for AES-CCM encryption and decryptionh]h4A key prepared for AES-CCM encryption and decryption}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj?hKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhhhNhNubh container)}(h:**Definition**:: struct aes_ccm_key { }; **Members**h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjubh literal_block)}(hstruct aes_ccm_key { };h]hstruct aes_ccm_key { };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_ccm_ctx (C struct) c.aes_ccm_ctxhNtauh1j hhhhhNhNubj)}(hhh](j#)}(h aes_ccm_ctxh]j))}(hstruct aes_ccm_ctxh](j/)}(hj2h]hstruct}(hjhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjhhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKubjA)}(h h]h }(hj'hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjhhhj&hKubjR)}(h aes_ccm_ctxh]jX)}(hjh]h aes_ccm_ctx}(hj9hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj5ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhjhhhj&hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhjhhhj&hKubah}(h]j ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj&hKhjhhubj)}(hhh]h)}(h1Context for incrementally en/decrypting a messageh]h1Context for incrementally en/decrypting a message}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj&hKubeh}(h]h ](jstructeh"]h$]h&]jjjjsjjsjjjuh1jhhhhhNhNubj)}(h:**Definition**:: struct aes_ccm_ctx { }; **Members**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh:}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjwubj)}(hstruct aes_ccm_ctx { };h]hstruct aes_ccm_ctx { };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjwubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_ccm_preparekey (C function)c.aes_ccm_preparekeyhNtauh1j hhhhhNhNubj)}(hhh](j#)}(hfint aes_ccm_preparekey (struct aes_ccm_key *key, const u8 *in_key, size_t key_len, size_t authtag_len)h]j))}(heint aes_ccm_preparekey(struct aes_ccm_key *key, const u8 *in_key, size_t key_len, size_t authtag_len)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK6ubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjhhhjhK6ubjR)}(haes_ccm_preparekeyh]jX)}(haes_ccm_preparekeyh]haes_ccm_preparekey}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhjhhhjhK6ubhdesc_parameterlist)}(hO(struct aes_ccm_key *key, const u8 *in_key, size_t key_len, size_t authtag_len)h](hdesc_parameter)}(hstruct aes_ccm_key *keyh](j/)}(hj2h]hstruct}(hj#hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjubjA)}(h h]h }(hj0hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubh)}(hhh]jX)}(h aes_ccm_keyh]h aes_ccm_key}(hjAhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj>ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjCmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j\ ASTIdentifier)}jWjsbc.aes_ccm_preparekeyasbuh1hhjubjA)}(h h]h }(hjihhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubhdesc_sig_punctuation)}(h*h]h*}(hjyhhhNhNubah}(h]h ]pah"]h$]h&]uh1jwhjubjX)}(hkeyh]hkey}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hconst u8 *in_keyh](j/)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubh)}(hhh]jX)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jec.aes_ccm_preparekeyasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubjX)}(hin_keyh]hin_key}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hsize_t key_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jec.aes_ccm_preparekeyasbuh1hhjubjA)}(h h]h }(hj3hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(hkey_lenh]hkey_len}(hjAhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hsize_t authtag_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj]hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjZubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj_modnameN classnameNj[j^)}ja]jec.aes_ccm_preparekeyasbuh1hhjVubjA)}(h h]h }(hj{hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjVubjX)}(h authtag_lenh]h authtag_len}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK6ubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhjhhhjhK6ubah}(h]jah ](j{j|eh"]h$]h&]jj)jhuh1j"hjhK6hjhhubj)}(hhh]h)}(h3Prepare a key for AES-CCM encryption and decryptionh]h3Prepare a key for AES-CCM encryption and decryption}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK6hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhhhNhNubj)}(hXI**Parameters** ``struct aes_ccm_key *key`` (output) The key structure to initialize ``const u8 *in_key`` The raw AES-CCM key ``size_t key_len`` Length of the raw key in bytes: 16, 24, or 32 ``size_t authtag_len`` Length of the authentication tag in bytes: 4, 6, 8, 10, 12, 14, or 16. 16 is recommended. **Description** Users should use memzero_explicit() to zeroize the key struct at the end of its lifetime. (But if this function fails, zeroization is unnecessary.) **Context** Any context. **Return** * 0 on success * -EINVAL if either of the lengths is invalidh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK:hjubhdefinition_list)}(hhh](hdefinition_list_item)}(hE``struct aes_ccm_key *key`` (output) The key structure to initialize h](hterm)}(h``struct aes_ccm_key *key``h]hliteral)}(hjh]hstruct aes_ccm_key *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK7hjubh definition)}(hhh]h)}(h((output) The key structure to initializeh]h((output) The key structure to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK7hjubj)}(h)``const u8 *in_key`` The raw AES-CCM key h](j)}(h``const u8 *in_key``h]j)}(hj7h]hconst u8 *in_key}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK8hj1ubj)}(hhh]h)}(hThe raw AES-CCM keyh]hThe raw AES-CCM key}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK8hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhK8hjubj)}(hA``size_t key_len`` Length of the raw key in bytes: 16, 24, or 32 h](j)}(h``size_t key_len``h]j)}(hjph]hsize_t key_len}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK9hjjubj)}(hhh]h)}(h-Length of the raw key in bytes: 16, 24, or 32h]h-Length of the raw key in bytes: 16, 24, or 32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubj)}(hr``size_t authtag_len`` Length of the authentication tag in bytes: 4, 6, 8, 10, 12, 14, or 16. 16 is recommended. h](j)}(h``size_t authtag_len``h]j)}(hjh]hsize_t authtag_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK;hjubj)}(hhh]h)}(hZLength of the authentication tag in bytes: 4, 6, 8, 10, 12, 14, or 16. 16 is recommended.h]hZLength of the authentication tag in bytes: 4, 6, 8, 10, 12, 14, or 16. 16 is recommended.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhK=hjubh)}(hUsers should use memzero_explicit() to zeroize the key struct at the end of its lifetime. (But if this function fails, zeroization is unnecessary.)h]hUsers should use memzero_explicit() to zeroize the key struct at the end of its lifetime. (But if this function fails, zeroization is unnecessary.)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h const u8 *srch](j/)}(hjh]hconst}(hjWhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjSubjA)}(h h]h }(hjdhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjSubh)}(hhh]jX)}(hu8h]hu8}(hjuhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjrubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjwmodnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhjSubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjSubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjSubjX)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hsize_t data_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(hdata_lenh]hdata_len}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hconst u8 *authtagh](j/)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj ubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj ubh)}(hhh]jX)}(hu8h]hu8}(hj-hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj/modnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhj ubjA)}(h h]h }(hjKhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj ubjx)}(hj{h]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj ubjX)}(hauthtagh]hauthtag}(hjfhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h const u8 *adh](j/)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj{ubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj{ubh)}(hhh]jX)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhj{ubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj{ubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj{ubjX)}(hadh]had}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj{ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h size_t ad_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(had_lenh]had_len}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hconst u8 *nonceh](j/)}(hjh]hconst}(hj7hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj3ubjA)}(h h]h }(hjDhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj3ubh)}(hhh]jX)}(hu8h]hu8}(hjUhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjRubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjWmodnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhj3ubjA)}(h h]h }(hjshhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj3ubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj3ubjX)}(hnonceh]hnonce}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hsize_t nonce_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(h nonce_lenh]h nonce_len}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hconst struct aes_ccm_key *keyh](j/)}(hjh]hconst}(hjhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubj/)}(hj2h]hstruct}(hj hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubh)}(hhh]jX)}(h aes_ccm_keyh]h aes_ccm_key}(hj(hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj*modnameN classnameNj[j^)}ja]jc.aes_ccm_decryptasbuh1hhjubjA)}(h h]h }(hjFhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjx)}(hj{h]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubjX)}(hkeyh]hkey}(hjahhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hKeubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj hhhj hKeubah}(h]j ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj hKehj hhubj)}(hhh]h)}(hDecrypt a message with AES-CCMh]hDecrypt a message with AES-CCM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKehjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``u8 *dst`` The destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. ``const u8 *src`` The source ciphertext data ``size_t data_len`` Length of plaintext in bytes (and ciphertext excluding the tag): at most 2^(120 - (8 * **nonce_len**)) - 1 ``const u8 *authtag`` The stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). Usually protocols using AES-CCM put the tag at the end of the ciphertext, in which case this should be set to **src** + **data_len** and **src** must have room for the tag. ``const u8 *ad`` The associated data ``size_t ad_len`` Length of associated data in bytes ``const u8 *nonce`` The nonce ``size_t nonce_len`` Length of the nonce in bytes: between 7 and 13 inclusive ``const struct aes_ccm_key *key`` The key, already prepared using aes_ccm_preparekey() **Context** Any context. **Return** * 0 on success. This is the only case where any decrypted or associated data can be used. * -EBADMSG if the message is inauthentic * -EINVAL if **nonce_len** is invalid * -EOVERFLOW if **data_len** is too large for the selected **nonce_len**h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKihjubj)}(hhh](j)}(h~``u8 *dst`` The destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. h](j)}(h ``u8 *dst``h]j)}(hjh]hu8 *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKghjubj)}(hhh]h)}(hqThe destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.h]hqThe destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKghjubj)}(h-``const u8 *src`` The source ciphertext data h](j)}(h``const u8 *src``h]j)}(hjh]h const u8 *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhhjubj)}(hhh]h)}(hThe source ciphertext datah]hThe source ciphertext data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhhjubj)}(h``size_t data_len`` Length of plaintext in bytes (and ciphertext excluding the tag): at most 2^(120 - (8 * **nonce_len**)) - 1 h](j)}(h``size_t data_len``h]j)}(hj?h]hsize_t data_len}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKjhj9ubj)}(hhh]h)}(hjLength of plaintext in bytes (and ciphertext excluding the tag): at most 2^(120 - (8 * **nonce_len**)) - 1h](hWLength of plaintext in bytes (and ciphertext excluding the tag): at most 2^(120 - (8 * }(hjXhhhNhNubj)}(h **nonce_len**h]h nonce_len}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh)) - 1}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKihjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKjhjubj)}(hX'``const u8 *authtag`` The stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). Usually protocols using AES-CCM put the tag at the end of the ciphertext, in which case this should be set to **src** + **data_len** and **src** must have room for the tag. h](j)}(h``const u8 *authtag``h]j)}(hjh]hconst u8 *authtag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKnhjubj)}(hhh]h)}(hXThe stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). Usually protocols using AES-CCM put the tag at the end of the ciphertext, in which case this should be set to **src** + **data_len** and **src** must have room for the tag.h](hThe stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). Usually protocols using AES-CCM put the tag at the end of the ciphertext, in which case this should be set to }(hjhhhNhNubj)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h **data_len**h]hdata_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**src**h]hsrc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must have room for the tag.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhjubj)}(h%``const u8 *ad`` The associated data h](j)}(h``const u8 *ad``h]j)}(hjh]h const u8 *ad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKohjubj)}(hhh]h)}(hThe associated datah]hThe associated data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohjubj)}(h5``size_t ad_len`` Length of associated data in bytes h](j)}(h``size_t ad_len``h]j)}(hj4h]h size_t ad_len}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKphj.ubj)}(hhh]h)}(h"Length of associated data in bytesh]h"Length of associated data in bytes}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKphjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKphjubj)}(h``const u8 *nonce`` The nonce h](j)}(h``const u8 *nonce``h]j)}(hjmh]hconst u8 *nonce}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKqhjgubj)}(hhh]h)}(h The nonceh]h The nonce}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKqhjubj)}(hN``size_t nonce_len`` Length of the nonce in bytes: between 7 and 13 inclusive h](j)}(h``size_t nonce_len``h]j)}(hjh]hsize_t nonce_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKrhjubj)}(hhh]h)}(h8Length of the nonce in bytes: between 7 and 13 inclusiveh]h8Length of the nonce in bytes: between 7 and 13 inclusive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKrhjubj)}(hW``const struct aes_ccm_key *key`` The key, already prepared using aes_ccm_preparekey() h](j)}(h!``const struct aes_ccm_key *key``h]j)}(hjh]hconst struct aes_ccm_key *key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKshjubj)}(hhh]h)}(h4The key, already prepared using aes_ccm_preparekey()h]h4The key, already prepared using aes_ccm_preparekey()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKshjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKuhjubh)}(h Any context.h]h Any context.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKuhjubh)}(h **Return**h]j)}(hjAh]hReturn}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKwhjubjJ)}(hhh](jO)}(hX0 on success. This is the only case where any decrypted or associated data can be used.h]h)}(hX0 on success. This is the only case where any decrypted or associated data can be used.h]hX0 on success. This is the only case where any decrypted or associated data can be used.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKvhjZubah}(h]h ]h"]h$]h&]uh1jNhjWubjO)}(h&-EBADMSG if the message is inauthentich]h)}(hjuh]h&-EBADMSG if the message is inauthentic}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKxhjsubah}(h]h ]h"]h$]h&]uh1jNhjWubjO)}(h#-EINVAL if **nonce_len** is invalidh]h)}(hjh](h -EINVAL if }(hjhhhNhNubj)}(h **nonce_len**h]h nonce_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is invalid}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKyhjubah}(h]h ]h"]h$]h&]uh1jNhjWubjO)}(hF-EOVERFLOW if **data_len** is too large for the selected **nonce_len**h]h)}(hjh](h-EOVERFLOW if }(hjhhhNhNubj)}(h **data_len**h]hdata_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is too large for the selected }(hjhhhNhNubj)}(h **nonce_len**h]h nonce_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKzhjubah}(h]h ]h"]h$]h&]uh1jNhjWubeh}(h]h ]h"]h$]h&]jj{uh1jIhjlhKvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_ccm_init (C function)c.aes_ccm_inithNtauh1j hhhhhNhNubj)}(hhh](j#)}(hint aes_ccm_init (struct aes_ccm_ctx *ctx, u64 data_len, u64 ad_len, const u8 *nonce, size_t nonce_len, const struct aes_ccm_key *key)h]j))}(hint aes_ccm_init(struct aes_ccm_ctx *ctx, u64 data_len, u64 ad_len, const u8 *nonce, size_t nonce_len, const struct aes_ccm_key *key)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKubjA)}(h h]h }(hj"hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjhhhj!hKubjR)}(h aes_ccm_inith]jX)}(h aes_ccm_inith]h aes_ccm_init}(hj4hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj0ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhjhhhj!hKubj)}(hu(struct aes_ccm_ctx *ctx, u64 data_len, u64 ad_len, const u8 *nonce, size_t nonce_len, const struct aes_ccm_key *key)h](j)}(hstruct aes_ccm_ctx *ctxh](j/)}(hj2h]hstruct}(hjPhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjLubjA)}(h h]h }(hj]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjLubh)}(hhh]jX)}(h aes_ccm_ctxh]h aes_ccm_ctx}(hjnhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjkubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjpmodnameN classnameNj[j^)}ja]jd)}jWj6sbc.aes_ccm_initasbuh1hhjLubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjLubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjLubjX)}(hctxh]hctx}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjLubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubj)}(h u64 data_lenh](h)}(hhh]jX)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_initasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(hdata_lenh]hdata_len}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubj)}(h u64 ad_lenh](h)}(hhh]jX)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_initasbuh1hhjubjA)}(h h]h }(hj+hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(had_lenh]had_len}(hj9hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubj)}(hconst u8 *nonceh](j/)}(hjh]hconst}(hjRhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjNubjA)}(h h]h }(hj_hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjNubh)}(hhh]jX)}(hu8h]hu8}(hjphhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjmubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjrmodnameN classnameNj[j^)}ja]jc.aes_ccm_initasbuh1hhjNubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjNubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjNubjX)}(hnonceh]hnonce}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubj)}(hsize_t nonce_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_initasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(h nonce_lenh]h nonce_len}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubj)}(hconst struct aes_ccm_key *keyh](j/)}(hjh]hconst}(hj hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubj/)}(hj2h]hstruct}(hj%hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjubjA)}(h h]h }(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubh)}(hhh]jX)}(h aes_ccm_keyh]h aes_ccm_key}(hjChhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjEmodnameN classnameNj[j^)}ja]jc.aes_ccm_initasbuh1hhjubjA)}(h h]h }(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjx)}(hj{h]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjubjX)}(hkeyh]hkey}(hj|hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj!hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj hhhj!hKubah}(h]jah ](j{j|eh"]h$]h&]jj)jhuh1j"hj!hKhjhhubj)}(hhh]h)}(hCInitialize context for incremental AES-CCM encryption or decryptionh]hCInitialize context for incremental AES-CCM encryption or decryption}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct aes_ccm_ctx *ctx`` The context to initialize ``u64 data_len`` Length of the en/decrypted data that will be provided in bytes: at most 2^(120 - (8 * **nonce_len**)) - 1 ``u64 ad_len`` Length of the associated data that will be provided in bytes ``const u8 *nonce`` The nonce. All (key, nonce) pairs used for encryption MUST be distinct. ``size_t nonce_len`` Length of the nonce in bytes: between 7 and 13 inclusive ``const struct aes_ccm_key *key`` The key, already prepared using aes_ccm_preparekey(). Note that a pointer to the key is saved in the context, so the key must live at least as long as the context. **Description** Unlike AES-GCM, AES-CCM requires the total lengths of the associated data and the en/decrypted data to be known during initialization. Callers MUST ensure that these lengths are correct. If this function returns success, the context should be zeroized at the end of its lifetime. Normally that happens in aes_ccm_encrypt_final() or aes_ccm_decrypt_final(), but callers that abandon a context without finalizing it should explicitly zeroize it. IMPORTANT: Callers that are decrypting MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified. This incremental API is provided solely to support callers that can't efficiently use the one-shot functions due to using a nonlinear data layout. For incremental AES-CCM encryption, use: 1. aes_ccm_init() 2. aes_ccm_auth_update() (any number of times) 3. aes_ccm_encrypt_update() (any number of times) 4. aes_ccm_encrypt_final() For incremental AES-CCM decryption, use: 1. aes_ccm_init() 2. aes_ccm_auth_update() (any number of times) 3. aes_ccm_decrypt_update() (any number of times) 4. aes_ccm_decrypt_final() **Context** Any context. **Return** * 0 on success * -EINVAL if **nonce_len** is invalid * -EOVERFLOW if **data_len** is too large for the selected **nonce_len**h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjubj)}(hhh](j)}(h6``struct aes_ccm_ctx *ctx`` The context to initialize h](j)}(h``struct aes_ccm_ctx *ctx``h]j)}(hjh]hstruct aes_ccm_ctx *ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjubj)}(hhh]h)}(hThe context to initializeh]hThe context to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h{``u64 data_len`` Length of the en/decrypted data that will be provided in bytes: at most 2^(120 - (8 * **nonce_len**)) - 1 h](j)}(h``u64 data_len``h]j)}(hj h]h u64 data_len}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjubj)}(hhh]h)}(hiLength of the en/decrypted data that will be provided in bytes: at most 2^(120 - (8 * **nonce_len**)) - 1h](hVLength of the en/decrypted data that will be provided in bytes: at most 2^(120 - (8 * }(hj9hhhNhNubj)}(h **nonce_len**h]h nonce_len}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh)) - 1}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hKhjubj)}(hL``u64 ad_len`` Length of the associated data that will be provided in bytes h](j)}(h``u64 ad_len``h]j)}(hjlh]h u64 ad_len}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjfubj)}(hhh]h)}(hhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h const u8 *srch](j/)}(hjh]hconst}(hjWhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjSubjA)}(h h]h }(hjdhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjSubh)}(hhh]jX)}(hu8h]hu8}(hjuhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjrubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjwmodnameN classnameNj[j^)}ja]jc.aes_ccm_encrypt_updateasbuh1hhjSubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjSubjx)}(hj{h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjSubjX)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjmodnameN classnameNj[j^)}ja]jc.aes_ccm_encrypt_updateasbuh1hhjubjA)}(h h]h }(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjubjX)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjOhhhjahKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhjKhhhjahKubah}(h]jFah ](j{j|eh"]h$]h&]jj)jhuh1j"hjahKhjHhhubj)}(hhh]h)}(h'Incrementally encrypt data with AES-CCMh]h'Incrementally encrypt data with AES-CCM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8 jj8 jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct aes_ccm_ctx *ctx`` An AES-CCM context ``u8 *dst`` The destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. ``const u8 *src`` The source plaintext data ``size_t len`` Number of bytes to encrypt **Description** This can be called only after all associated data has been processed. The total length of the encrypted data (over all calls to this function) MUST match the data_len that was passed to aes_ccm_init(). **Context** Any context.h](h)}(h**Parameters**h]j)}(hjB h]h Parameters}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj< ubj)}(hhh](j)}(h/``struct aes_ccm_ctx *ctx`` An AES-CCM context h](j)}(h``struct aes_ccm_ctx *ctx``h]j)}(hja h]hstruct aes_ccm_ctx *ctx}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj[ ubj)}(hhh]h)}(hAn AES-CCM contexth]hAn AES-CCM context}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv hKhjw ubah}(h]h ]h"]h$]h&]uh1jhj[ ubeh}(h]h ]h"]h$]h&]uh1jhjv hKhjX ubj)}(hw``u8 *dst`` The destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. h](j)}(h ``u8 *dst``h]j)}(hj h]hu8 *dst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj ubj)}(hhh]h)}(hjThe destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.h]hjThe destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjX ubj)}(h,``const u8 *src`` The source plaintext data h](j)}(h``const u8 *src``h]j)}(hj h]h const u8 *src}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj ubj)}(hhh]h)}(hThe source plaintext datah]hThe source plaintext data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjX ubj)}(h*``size_t len`` Number of bytes to encrypt h](j)}(h``size_t len``h]j)}(hj !h]h size_t len}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj!ubj)}(hhh]h)}(hNumber of bytes to encrypth]hNumber of bytes to encrypt}(hj&!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"!hKhj#!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj"!hKhjX ubeh}(h]h ]h"]h$]h&]uh1jhj< ubh)}(h**Description**h]j)}(hjH!h]h Description}(hjJ!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF!ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj< ubh)}(hEThis can be called only after all associated data has been processed.h]hEThis can be called only after all associated data has been processed.}(hj^!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj< ubh)}(hThe total length of the encrypted data (over all calls to this function) MUST match the data_len that was passed to aes_ccm_init().h]hThe total length of the encrypted data (over all calls to this function) MUST match the data_len that was passed to aes_ccm_init().}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj< ubh)}(h **Context**h]j)}(hj~!h]hContext}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|!ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj< ubh)}(h Any context.h]h Any context.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj< ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j#aes_ccm_decrypt_update (C function)c.aes_ccm_decrypt_updatehNtauh1j hhhhhNhNubj)}(hhh](j#)}(hYvoid aes_ccm_decrypt_update (struct aes_ccm_ctx *ctx, u8 *dst, const u8 *src, size_t len)h]j))}(hXvoid aes_ccm_decrypt_update(struct aes_ccm_ctx *ctx, u8 *dst, const u8 *src, size_t len)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKubjA)}(h h]h }(hj!hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj!hhhj!hKubjR)}(haes_ccm_decrypt_updateh]jX)}(haes_ccm_decrypt_updateh]haes_ccm_decrypt_update}(hj!hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj!ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj!hhhj!hKubj)}(h=(struct aes_ccm_ctx *ctx, u8 *dst, const u8 *src, size_t len)h](j)}(hstruct aes_ccm_ctx *ctxh](j/)}(hj2h]hstruct}(hj"hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj!ubjA)}(h h]h }(hj "hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj!ubh)}(hhh]jX)}(h aes_ccm_ctxh]h aes_ccm_ctx}(hj"hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj "modnameN classnameNj[j^)}ja]jd)}jWj!sbc.aes_ccm_decrypt_updateasbuh1hhj!ubjA)}(h h]h }(hj>"hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj!ubjx)}(hj{h]h*}(hjL"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj!ubjX)}(hctxh]hctx}(hjY"hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubj)}(hu8 *dsth](h)}(hhh]jX)}(hu8h]hu8}(hju"hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjr"ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjw"modnameN classnameNj[j^)}ja]j:"c.aes_ccm_decrypt_updateasbuh1hhjn"ubjA)}(h h]h }(hj"hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjn"ubjx)}(hj{h]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjn"ubjX)}(hdsth]hdst}(hj"hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjn"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubj)}(h const u8 *srch](j/)}(hjh]hconst}(hj"hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj"ubjA)}(h h]h }(hj"hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj"ubh)}(hhh]jX)}(hu8h]hu8}(hj"hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj"modnameN classnameNj[j^)}ja]j:"c.aes_ccm_decrypt_updateasbuh1hhj"ubjA)}(h h]h }(hj#hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj"ubjx)}(hj{h]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj"ubjX)}(hsrch]hsrc}(hj#hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubj)}(h size_t lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj:#hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj7#ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj<#modnameN classnameNj[j^)}ja]j:"c.aes_ccm_decrypt_updateasbuh1hhj3#ubjA)}(h h]h }(hjX#hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj3#ubjX)}(hlenh]hlen}(hjf#hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj3#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj!ubeh}(h]h ]h"]h$]h&]hhuh1jhj!hhhj!hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj!hhhj!hKubah}(h]j!ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj!hKhj!hhubj)}(hhh]h)}(h'Incrementally decrypt data with AES-CCMh]h'Incrementally decrypt data with AES-CCM}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct aes_ccm_ctx *ctx`` An AES-CCM context ``u8 *dst`` The destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. ``const u8 *src`` The source ciphertext data (not including auth tag) ``size_t len`` Number of bytes to decrypt **Description** This can be called only after all associated data has been processed. The total length of the decrypted data (over all calls to this function) MUST match the data_len that was passed to aes_ccm_init(). IMPORTANT: Callers MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified. **Context** Any context.h](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubj)}(hhh](j)}(h/``struct aes_ccm_ctx *ctx`` An AES-CCM context h](j)}(h``struct aes_ccm_ctx *ctx``h]j)}(hj#h]hstruct aes_ccm_ctx *ctx}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubj)}(hhh]h)}(hAn AES-CCM contexth]hAn AES-CCM context}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj#ubj)}(hw``u8 *dst`` The destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. h](j)}(h ``u8 *dst``h]j)}(hj $h]hu8 *dst}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj$ubj)}(hhh]h)}(hjThe destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.h]hjThe destination buffer. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.}(hj#$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj $ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj#ubj)}(hF``const u8 *src`` The source ciphertext data (not including auth tag) h](j)}(h``const u8 *src``h]j)}(hjD$h]h const u8 *src}(hjF$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB$ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj>$ubj)}(hhh]h)}(h3The source ciphertext data (not including auth tag)h]h3The source ciphertext data (not including auth tag)}(hj]$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY$hKhjZ$ubah}(h]h ]h"]h$]h&]uh1jhj>$ubeh}(h]h ]h"]h$]h&]uh1jhjY$hKhj#ubj)}(h*``size_t len`` Number of bytes to decrypt h](j)}(h``size_t len``h]j)}(hj}$h]h size_t len}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{$ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjw$ubj)}(hhh]h)}(hNumber of bytes to decrypth]hNumber of bytes to decrypt}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjw$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubh)}(hEThis can be called only after all associated data has been processed.h]hEThis can be called only after all associated data has been processed.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubh)}(hThe total length of the decrypted data (over all calls to this function) MUST match the data_len that was passed to aes_ccm_init().h]hThe total length of the decrypted data (over all calls to this function) MUST match the data_len that was passed to aes_ccm_init().}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubh)}(hIMPORTANT: Callers MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified.h]hIMPORTANT: Callers MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubh)}(h **Context**h]j)}(hj$h]hContext}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubh)}(h Any context.h]h Any context.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j"aes_ccm_encrypt_final (C function)c.aes_ccm_encrypt_finalhNtauh1j hhhhhNhNubj)}(hhh](j#)}(hAvoid aes_ccm_encrypt_final (struct aes_ccm_ctx *ctx, u8 *authtag)h]j))}(h@void aes_ccm_encrypt_final(struct aes_ccm_ctx *ctx, u8 *authtag)h](j)}(hvoidh]hvoid}(hjB%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>%hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKubjA)}(h h]h }(hjQ%hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj>%hhhjP%hKubjR)}(haes_ccm_encrypt_finalh]jX)}(haes_ccm_encrypt_finalh]haes_ccm_encrypt_final}(hjc%hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj_%ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj>%hhhjP%hKubj)}(h&(struct aes_ccm_ctx *ctx, u8 *authtag)h](j)}(hstruct aes_ccm_ctx *ctxh](j/)}(hj2h]hstruct}(hj%hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj{%ubjA)}(h h]h }(hj%hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj{%ubh)}(hhh]jX)}(h aes_ccm_ctxh]h aes_ccm_ctx}(hj%hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj%modnameN classnameNj[j^)}ja]jd)}jWje%sbc.aes_ccm_encrypt_finalasbuh1hhj{%ubjA)}(h h]h }(hj%hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj{%ubjx)}(hj{h]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj{%ubjX)}(hctxh]hctx}(hj%hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj{%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjw%ubj)}(h u8 *authtagh](h)}(hhh]jX)}(hu8h]hu8}(hj%hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj%modnameN classnameNj[j^)}ja]j%c.aes_ccm_encrypt_finalasbuh1hhj%ubjA)}(h h]h }(hj&hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj%ubjx)}(hj{h]h*}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj%ubjX)}(hauthtagh]hauthtag}(hj-&hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjw%ubeh}(h]h ]h"]h$]h&]hhuh1jhj>%hhhjP%hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj:%hhhjP%hKubah}(h]j5%ah ](j{j|eh"]h$]h&]jj)jhuh1j"hjP%hKhj7%hhubj)}(hhh]h)}(h(Finish encrypting a message with AES-CCMh]h(Finish encrypting a message with AES-CCM}(hjW&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjT&hhubah}(h]h ]h"]h$]h&]uh1jhj7%hhhjP%hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjo&jjo&jjjuh1jhhhhhNhNubj)}(hX&**Parameters** ``struct aes_ccm_ctx *ctx`` An AES-CCM context ``u8 *authtag`` The output authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). **Description** This also zeroizes **ctx**, so the caller doesn't need to do it. **Context** Any context.h](h)}(h**Parameters**h]j)}(hjy&h]h Parameters}(hj{&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw&ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjs&ubj)}(hhh](j)}(h/``struct aes_ccm_ctx *ctx`` An AES-CCM context h](j)}(h``struct aes_ccm_ctx *ctx``h]j)}(hj&h]hstruct aes_ccm_ctx *ctx}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj&ubj)}(hhh]h)}(hAn AES-CCM contexth]hAn AES-CCM context}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj&ubj)}(hs``u8 *authtag`` The output authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). h](j)}(h``u8 *authtag``h]j)}(hj&h]h u8 *authtag}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj&ubj)}(hhh]h)}(hbThe output authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey().h]hbThe output authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey().}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj&ubeh}(h]h ]h"]h$]h&]uh1jhjs&ubh)}(h**Description**h]j)}(hj 'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 'ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjs&ubh)}(h@This also zeroizes **ctx**, so the caller doesn't need to do it.h](hThis also zeroizes }(hj#'hhhNhNubj)}(h**ctx**h]hctx}(hj+'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#'ubh(, so the caller doesn’t need to do it.}(hj#'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjs&ubh)}(h **Context**h]j)}(hjF'h]hContext}(hjH'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD'ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjs&ubh)}(h Any context.h]h Any context.}(hj\'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjs&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j"aes_ccm_decrypt_final (C function)c.aes_ccm_decrypt_finalhNtauh1j hhhhhNhNubj)}(hhh](j#)}(hFint aes_ccm_decrypt_final (struct aes_ccm_ctx *ctx, const u8 *authtag)h]j))}(hEint aes_ccm_decrypt_final(struct aes_ccm_ctx *ctx, const u8 *authtag)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKubjA)}(h h]h }(hj'hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj'hhhj'hKubjR)}(haes_ccm_decrypt_finalh]jX)}(haes_ccm_decrypt_finalh]haes_ccm_decrypt_final}(hj'hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj'ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj'hhhj'hKubj)}(h,(struct aes_ccm_ctx *ctx, const u8 *authtag)h](j)}(hstruct aes_ccm_ctx *ctxh](j/)}(hj2h]hstruct}(hj'hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj'ubjA)}(h h]h }(hj'hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj'ubh)}(hhh]jX)}(h aes_ccm_ctxh]h aes_ccm_ctx}(hj'hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj'modnameN classnameNj[j^)}ja]jd)}jWj'sbc.aes_ccm_decrypt_finalasbuh1hhj'ubjA)}(h h]h }(hj(hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj'ubjx)}(hj{h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj'ubjX)}(hctxh]hctx}(hj!(hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(hconst u8 *authtagh](j/)}(hjh]hconst}(hj:(hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj6(ubjA)}(h h]h }(hjG(hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj6(ubh)}(hhh]jX)}(hu8h]hu8}(hjX(hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjU(ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjZ(modnameN classnameNj[j^)}ja]j(c.aes_ccm_decrypt_finalasbuh1hhj6(ubjA)}(h h]h }(hjv(hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj6(ubjx)}(hj{h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj6(ubjX)}(hauthtagh]hauthtag}(hj(hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj6(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubeh}(h]h ]h"]h$]h&]hhuh1jhj'hhhj'hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj'hhhj'hKubah}(h]j~'ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj'hKhj'hhubj)}(hhh]h)}(h(Finish decrypting a message with AES-CCMh]h(Finish decrypting a message with AES-CCM}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct aes_ccm_ctx *ctx`` An AES-CCM context ``const u8 *authtag`` The stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). **Description** This also zeroizes **ctx**, so the caller doesn't need to do it. **Context** Any context. **Return** * 0 on success. This is the only case where any decrypted or associated data can be used. * -EBADMSG if the message is inauthentich](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj(ubj)}(hhh](j)}(h/``struct aes_ccm_ctx *ctx`` An AES-CCM context h](j)}(h``struct aes_ccm_ctx *ctx``h]j)}(hj(h]hstruct aes_ccm_ctx *ctx}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj(ubj)}(hhh]h)}(hAn AES-CCM contexth]hAn AES-CCM context}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj(ubj)}(hy``const u8 *authtag`` The stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey(). h](j)}(h``const u8 *authtag``h]j)}(hj5)h]hconst u8 *authtag}(hj7)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3)ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj/)ubj)}(hhh]h)}(hbThe stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey().h]hbThe stored authentication tag. Length is the authtag_len that was passed to aes_ccm_preparekey().}(hjN)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhjK)ubah}(h]h ]h"]h$]h&]uh1jhj/)ubeh}(h]h ]h"]h$]h&]uh1jhjJ)hKhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]j)}(hjq)h]h Description}(hjs)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj(ubh)}(h@This also zeroizes **ctx**, so the caller doesn't need to do it.h](hThis also zeroizes }(hj)hhhNhNubj)}(h**ctx**h]hctx}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh(, so the caller doesn’t need to do it.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhKhj(ubh)}(h **Context**h]j)}(hj)h]hContext}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhMhj(ubh)}(h Any context.h]h Any context.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhMhj(ubh)}(h **Return**h]j)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhMhj(ubjJ)}(hhh](jO)}(hX0 on success. This is the only case where any decrypted or associated data can be used.h]h)}(hX0 on success. This is the only case where any decrypted or associated data can be used.h]hX0 on success. This is the only case where any decrypted or associated data can be used.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jNhj)ubjO)}(h&-EBADMSG if the message is inauthentich]h)}(hj*h]h&-EBADMSG if the message is inauthentic}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:13: ./include/crypto/aes-ccm.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jNhj)ubeh}(h]h ]h"]h$]h&]jj{uh1jIhj)hMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h]aes-ccmah ]h"]aes-ccmah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hAES-GCMh]hAES-GCM}(hj3*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0*hhhhhKubh)}(h?This API provides support for AES in the GCM mode of operation.h]h?This API provides support for AES in the GCM mode of operation.}(hjA*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj0*hhubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_gcm_key (C struct) c.aes_gcm_keyhNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(h aes_gcm_keyh]j))}(hstruct aes_gcm_keyh](j/)}(hj2h]hstruct}(hjh*hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjd*hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKubjA)}(h h]h }(hjv*hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjd*hhhju*hKubjR)}(h aes_gcm_keyh]jX)}(hjb*h]h aes_gcm_key}(hj*hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj*ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhjd*hhhju*hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj`*hhhju*hKubah}(h]j[*ah ](j{j|eh"]h$]h&]jj)jhuh1j"hju*hKhj]*hhubj)}(hhh]h)}(h4A key prepared for AES-GCM encryption and decryptionh]h4A key prepared for AES-GCM encryption and decryption}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj*hhubah}(h]h ]h"]h$]h&]uh1jhj]*hhhju*hKubeh}(h]h ](jstructeh"]h$]h&]jjjj*jj*jjjuh1jhhhj0*hNhNubj)}(h:**Definition**:: struct aes_gcm_key { }; **Members**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh:}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj*ubj)}(hstruct aes_gcm_key { };h]hstruct aes_gcm_key { };}hj*sbah}(h]h ]h"]h$]h&]hhuh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj*ubh)}(h **Members**h]j)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_gcm_ctx (C struct) c.aes_gcm_ctxhNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(h aes_gcm_ctxh]j))}(hstruct aes_gcm_ctxh](j/)}(hj2h]hstruct}(hj.+hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj*+hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKubjA)}(h h]h }(hj<+hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj*+hhhj;+hKubjR)}(h aes_gcm_ctxh]jX)}(hj(+h]h aes_gcm_ctx}(hjN+hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjJ+ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj*+hhhj;+hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj&+hhhj;+hKubah}(h]j!+ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj;+hKhj#+hhubj)}(hhh]h)}(h1Context for incrementally en/decrypting a messageh]h1Context for incrementally en/decrypting a message}(hjp+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjm+hhubah}(h]h ]h"]h$]h&]uh1jhj#+hhhj;+hKubeh}(h]h ](jstructeh"]h$]h&]jjjj+jj+jjjuh1jhhhj0*hNhNubj)}(h:**Definition**:: struct aes_gcm_ctx { }; **Members**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh:}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj+ubj)}(hstruct aes_gcm_ctx { };h]hstruct aes_gcm_ctx { };}hj+sbah}(h]h ]h"]h$]h&]hhuh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj+ubh)}(h **Members**h]j)}(hj+h]hMembers}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK"hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_gcm_preparekey (C function)c.aes_gcm_preparekeyhNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hfint aes_gcm_preparekey (struct aes_gcm_key *key, const u8 *in_key, size_t key_len, size_t authtag_len)h]j))}(heint aes_gcm_preparekey(struct aes_gcm_key *key, const u8 *in_key, size_t key_len, size_t authtag_len)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK>ubjA)}(h h]h }(hj,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj+hhhj,hK>ubjR)}(haes_gcm_preparekeyh]jX)}(haes_gcm_preparekeyh]haes_gcm_preparekey}(hj,hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj,ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj+hhhj,hK>ubj)}(hO(struct aes_gcm_key *key, const u8 *in_key, size_t key_len, size_t authtag_len)h](j)}(hstruct aes_gcm_key *keyh](j/)}(hj2h]hstruct}(hj1,hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj-,ubjA)}(h h]h }(hj>,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj-,ubh)}(hhh]jX)}(h aes_gcm_keyh]h aes_gcm_key}(hjO,hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjL,ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjQ,modnameN classnameNj[j^)}ja]jd)}jWj,sbc.aes_gcm_preparekeyasbuh1hhj-,ubjA)}(h h]h }(hjo,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj-,ubjx)}(hj{h]h*}(hj},hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj-,ubjX)}(hkeyh]hkey}(hj,hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj-,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj),ubj)}(hconst u8 *in_keyh](j/)}(hjh]hconst}(hj,hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj,ubjA)}(h h]h }(hj,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj,ubh)}(hhh]jX)}(hu8h]hu8}(hj,hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj,modnameN classnameNj[j^)}ja]jk,c.aes_gcm_preparekeyasbuh1hhj,ubjA)}(h h]h }(hj,hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj,ubjx)}(hj{h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj,ubjX)}(hin_keyh]hin_key}(hj,hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj),ubj)}(hsize_t key_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj-hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj-modnameN classnameNj[j^)}ja]jk,c.aes_gcm_preparekeyasbuh1hhj-ubjA)}(h h]h }(hj4-hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj-ubjX)}(hkey_lenh]hkey_len}(hjB-hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj),ubj)}(hsize_t authtag_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj^-hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj[-ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj`-modnameN classnameNj[j^)}ja]jk,c.aes_gcm_preparekeyasbuh1hhjW-ubjA)}(h h]h }(hj|-hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjW-ubjX)}(h authtag_lenh]h authtag_len}(hj-hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjW-ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj),ubeh}(h]h ]h"]h$]h&]hhuh1jhj+hhhj,hK>ubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj+hhhj,hK>ubah}(h]j+ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj,hK>hj+hhubj)}(hhh]h)}(h3Prepare a key for AES-GCM encryption and decryptionh]h3Prepare a key for AES-GCM encryption and decryption}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK>hj-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj,hK>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jhhhj0*hNhNubj)}(hXJ**Parameters** ``struct aes_gcm_key *key`` (output) The key structure to initialize ``const u8 *in_key`` The raw AES-GCM key ``size_t key_len`` Length of the raw key in bytes: 16, 24, or 32 ``size_t authtag_len`` Length of the authentication tag in bytes: 4, 8, 12, 13, 14, 15, or 16. 16 is recommended. **Description** Users should use memzero_explicit() to zeroize the key struct at the end of its lifetime. (But if this function fails, zeroization is unnecessary.) **Context** Any context. **Return** * 0 on success * -EINVAL if either of the lengths is invalidh](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKBhj-ubj)}(hhh](j)}(hE``struct aes_gcm_key *key`` (output) The key structure to initialize h](j)}(h``struct aes_gcm_key *key``h]j)}(hj-h]hstruct aes_gcm_key *key}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK?hj-ubj)}(hhh]h)}(h((output) The key structure to initializeh]h((output) The key structure to initialize}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj .hK?hj .ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj .hK?hj-ubj)}(h)``const u8 *in_key`` The raw AES-GCM key h](j)}(h``const u8 *in_key``h]j)}(hj..h]hconst u8 *in_key}(hj0.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK@hj(.ubj)}(hhh]h)}(hThe raw AES-GCM keyh]hThe raw AES-GCM key}(hjG.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC.hK@hjD.ubah}(h]h ]h"]h$]h&]uh1jhj(.ubeh}(h]h ]h"]h$]h&]uh1jhjC.hK@hj-ubj)}(hA``size_t key_len`` Length of the raw key in bytes: 16, 24, or 32 h](j)}(h``size_t key_len``h]j)}(hjg.h]hsize_t key_len}(hji.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKAhja.ubj)}(hhh]h)}(h-Length of the raw key in bytes: 16, 24, or 32h]h-Length of the raw key in bytes: 16, 24, or 32}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|.hKAhj}.ubah}(h]h ]h"]h$]h&]uh1jhja.ubeh}(h]h ]h"]h$]h&]uh1jhj|.hKAhj-ubj)}(hs``size_t authtag_len`` Length of the authentication tag in bytes: 4, 8, 12, 13, 14, 15, or 16. 16 is recommended. h](j)}(h``size_t authtag_len``h]j)}(hj.h]hsize_t authtag_len}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKChj.ubj)}(hhh]h)}(h[Length of the authentication tag in bytes: 4, 8, 12, 13, 14, 15, or 16. 16 is recommended.h]h[Length of the authentication tag in bytes: 4, 8, 12, 13, 14, 15, or 16. 16 is recommended.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKBhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKChj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKEhj-ubh)}(hUsers should use memzero_explicit() to zeroize the key struct at the end of its lifetime. (But if this function fails, zeroization is unnecessary.)h]hUsers should use memzero_explicit() to zeroize the key struct at the end of its lifetime. (But if this function fails, zeroization is unnecessary.)}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKDhj-ubh)}(h **Context**h]j)}(hj/h]hContext}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKGhj-ubh)}(h Any context.h]h Any context.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKHhj-ubh)}(h **Return**h]j)}(hj*/h]hReturn}(hj,/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(/ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKJhj-ubjJ)}(hhh](jO)}(h 0 on successh]h)}(hjE/h]h 0 on success}(hjG/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKIhjC/ubah}(h]h ]h"]h$]h&]uh1jNhj@/ubjO)}(h+-EINVAL if either of the lengths is invalidh]h)}(hj]/h]h+-EINVAL if either of the lengths is invalid}(hj_/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKJhj[/ubah}(h]h ]h"]h$]h&]uh1jNhj@/ubeh}(h]h ]h"]h$]h&]jj{uh1jIhjT/hKIhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_gcm_encrypt (C function)c.aes_gcm_encrypthNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hvoid aes_gcm_encrypt (u8 *dst, const u8 *src, size_t data_len, u8 *authtag, const u8 *ad, size_t ad_len, const u8 nonce[static 12], const struct aes_gcm_key *key)h]j))}(hvoid aes_gcm_encrypt(u8 *dst, const u8 *src, size_t data_len, u8 *authtag, const u8 *ad, size_t ad_len, const u8 nonce[static 12], const struct aes_gcm_key *key)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKQubjA)}(h h]h }(hj/hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj/hhhj/hKQubjR)}(haes_gcm_encrypth]jX)}(haes_gcm_encrypth]haes_gcm_encrypt}(hj/hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj/ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj/hhhj/hKQubj)}(h(u8 *dst, const u8 *src, size_t data_len, u8 *authtag, const u8 *ad, size_t ad_len, const u8 nonce[static 12], const struct aes_gcm_key *key)h](j)}(hu8 *dsth](h)}(hhh]jX)}(hu8h]hu8}(hj/hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj/ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj/modnameN classnameNj[j^)}ja]jd)}jWj/sbc.aes_gcm_encryptasbuh1hhj/ubjA)}(h h]h }(hj/hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj/ubjx)}(hj{h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj/ubjX)}(hdsth]hdst}(hj0hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(h const u8 *srch](j/)}(hjh]hconst}(hj-0hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj)0ubjA)}(h h]h }(hj:0hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj)0ubh)}(hhh]jX)}(hu8h]hu8}(hjK0hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjH0ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjM0modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj)0ubjA)}(h h]h }(hji0hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj)0ubjx)}(hj{h]h*}(hjw0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj)0ubjX)}(hsrch]hsrc}(hj0hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj)0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(hsize_t data_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj0hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj0modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj0ubjA)}(h h]h }(hj0hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj0ubjX)}(hdata_lenh]hdata_len}(hj0hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(h u8 *authtagh](h)}(hhh]jX)}(hu8h]hu8}(hj0hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj0modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj0ubjA)}(h h]h }(hj1hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj0ubjx)}(hj{h]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj0ubjX)}(hauthtagh]hauthtag}(hj!1hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(h const u8 *adh](j/)}(hjh]hconst}(hj:1hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj61ubjA)}(h h]h }(hjG1hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj61ubh)}(hhh]jX)}(hu8h]hu8}(hjX1hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjU1ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjZ1modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj61ubjA)}(h h]h }(hjv1hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj61ubjx)}(hj{h]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj61ubjX)}(hadh]had}(hj1hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj61ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(h size_t ad_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj1hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj1modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj1ubjA)}(h h]h }(hj1hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj1ubjX)}(had_lenh]had_len}(hj1hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(hconst u8 nonce[static 12]h](j/)}(hjh]hconst}(hj1hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj1ubjA)}(h h]h }(hj1hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj1ubh)}(hhh]jX)}(hu8h]hu8}(hj2hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj 2ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj2modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj1ubjA)}(h h]h }(hj.2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj1ubjX)}(hnonceh]hnonce}(hj<2hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj1ubjx)}(h[h]h[}(hjJ2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj1ubj/)}(hstatich]hstatic}(hjX2hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj1ubjA)}(h h]h }(hjf2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj1ubhdesc_sig_literal_number)}(h12h]h12}(hjv2hhhNhNubah}(h]h ]mah"]h$]h&]uh1jt2hj1ubjx)}(h]h]h]}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubj)}(hconst struct aes_gcm_key *keyh](j/)}(hjh]hconst}(hj2hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj2ubjA)}(h h]h }(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj2ubj/)}(hj2h]hstruct}(hj2hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj2ubjA)}(h h]h }(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj2ubh)}(hhh]jX)}(h aes_gcm_keyh]h aes_gcm_key}(hj2hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj2ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj2modnameN classnameNj[j^)}ja]j/c.aes_gcm_encryptasbuh1hhj2ubjA)}(h h]h }(hj2hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj2ubjx)}(hj{h]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj2ubjX)}(hkeyh]hkey}(hj3hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubeh}(h]h ]h"]h$]h&]hhuh1jhj/hhhj/hKQubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj/hhhj/hKQubah}(h]j/ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj/hKQhj/hhubj)}(hhh]h)}(hEncrypt a message with AES-GCMh]hEncrypt a message with AES-GCM}(hj:3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKQhj73hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hKQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjR3jjR3jjjuh1jhhhj0*hNhNubj)}(hX6**Parameters** ``u8 *dst`` The destination ciphertext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. ``const u8 *src`` The source plaintext data ``size_t data_len`` Length of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32 ``u8 *authtag`` The output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to **dst** + **data_len** and **dst** must have room for the tag. ``const u8 *ad`` The associated data ``size_t ad_len`` Length of associated data in bytes: at most 2^61 - 1 ``const u8 nonce[static 12]`` The 12-byte nonce. All (key, nonce) pairs used MUST be distinct. ``const struct aes_gcm_key *key`` The key, already prepared using aes_gcm_preparekey() **Description** For AES-GMAC (i.e., AES-GCM without any data en/decrypted), use dst=NULL, src=NULL, and data_len=0 to generate the AES-GMAC value. **Context** Any context.h](h)}(h**Parameters**h]j)}(hj\3h]h Parameters}(hj^3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ3ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKUhjV3ubj)}(hhh](j)}(h``u8 *dst`` The destination ciphertext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. h](j)}(h ``u8 *dst``h]j)}(hj{3h]hu8 *dst}(hj}3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKShju3ubj)}(hhh]h)}(hrThe destination ciphertext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.h]hrThe destination ciphertext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKRhj3ubah}(h]h ]h"]h$]h&]uh1jhju3ubeh}(h]h ]h"]h$]h&]uh1jhj3hKShjr3ubj)}(h,``const u8 *src`` The source plaintext data h](j)}(h``const u8 *src``h]j)}(hj3h]h const u8 *src}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKThj3ubj)}(hhh]h)}(hThe source plaintext datah]hThe source plaintext data}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKThj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hKThjr3ubj)}(hg``size_t data_len`` Length of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32 h](j)}(h``size_t data_len``h]j)}(hj3h]hsize_t data_len}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKVhj3ubj)}(hhh]h)}(hRLength of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32h]hRLength of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKUhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hKVhjr3ubj)}(hX!``u8 *authtag`` The output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to **dst** + **data_len** and **dst** must have room for the tag. h](j)}(h``u8 *authtag``h]j)}(hj(4h]h u8 *authtag}(hj*4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKZhj"4ubj)}(hhh]h)}(hXThe output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to **dst** + **data_len** and **dst** must have room for the tag.h](hThe output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to }(hjA4hhhNhNubj)}(h**dst**h]hdst}(hjI4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA4ubh + }(hjA4hhhNhNubj)}(h **data_len**h]hdata_len}(hj[4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA4ubh and }(hjA4hhhNhNubj)}(h**dst**h]hdst}(hjm4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA4ubh must have room for the tag.}(hjA4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKWhj>4ubah}(h]h ]h"]h$]h&]uh1jhj"4ubeh}(h]h ]h"]h$]h&]uh1jhj=4hKZhjr3ubj)}(h%``const u8 *ad`` The associated data h](j)}(h``const u8 *ad``h]j)}(hj4h]h const u8 *ad}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK[hj4ubj)}(hhh]h)}(hThe associated datah]hThe associated data}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hK[hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hK[hjr3ubj)}(hG``size_t ad_len`` Length of associated data in bytes: at most 2^61 - 1 h](j)}(h``size_t ad_len``h]j)}(hj4h]h size_t ad_len}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK\hj4ubj)}(hhh]h)}(h4Length of associated data in bytes: at most 2^61 - 1h]h4Length of associated data in bytes: at most 2^61 - 1}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hK\hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hK\hjr3ubj)}(h```const u8 nonce[static 12]`` The 12-byte nonce. All (key, nonce) pairs used MUST be distinct. h](j)}(h``const u8 nonce[static 12]``h]j)}(hj 5h]hconst u8 nonce[static 12]}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK]hj5ubj)}(hhh]h)}(hAThe 12-byte nonce. All (key, nonce) pairs used MUST be distinct.h]hAThe 12-byte nonce. All (key, nonce) pairs used MUST be distinct.}(hj#5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hK]hj 5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hK]hjr3ubj)}(hW``const struct aes_gcm_key *key`` The key, already prepared using aes_gcm_preparekey() h](j)}(h!``const struct aes_gcm_key *key``h]j)}(hjC5h]hconst struct aes_gcm_key *key}(hjE5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA5ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK^hj=5ubj)}(hhh]h)}(h4The key, already prepared using aes_gcm_preparekey()h]h4The key, already prepared using aes_gcm_preparekey()}(hj\5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX5hK^hjY5ubah}(h]h ]h"]h$]h&]uh1jhj=5ubeh}(h]h ]h"]h$]h&]uh1jhjX5hK^hjr3ubeh}(h]h ]h"]h$]h&]uh1jhjV3ubh)}(h**Description**h]j)}(hj~5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK`hjV3ubh)}(hFor AES-GMAC (i.e., AES-GCM without any data en/decrypted), use dst=NULL, src=NULL, and data_len=0 to generate the AES-GMAC value.h]hFor AES-GMAC (i.e., AES-GCM without any data en/decrypted), use dst=NULL, src=NULL, and data_len=0 to generate the AES-GMAC value.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK_hjV3ubh)}(h **Context**h]j)}(hj5h]hContext}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKbhjV3ubh)}(h Any context.h]h Any context.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKchjV3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_gcm_decrypt (C function)c.aes_gcm_decrypthNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hint aes_gcm_decrypt (u8 *dst, const u8 *src, size_t data_len, const u8 *authtag, const u8 *ad, size_t ad_len, const u8 nonce[static 12], const struct aes_gcm_key *key)h]j))}(hint aes_gcm_decrypt(u8 *dst, const u8 *src, size_t data_len, const u8 *authtag, const u8 *ad, size_t ad_len, const u8 nonce[static 12], const struct aes_gcm_key *key)h](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKjubjA)}(h h]h }(hj5hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj5hhhj5hKjubjR)}(haes_gcm_decrypth]jX)}(haes_gcm_decrypth]haes_gcm_decrypt}(hj 6hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj6ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj5hhhj5hKjubj)}(h(u8 *dst, const u8 *src, size_t data_len, const u8 *authtag, const u8 *ad, size_t ad_len, const u8 nonce[static 12], const struct aes_gcm_key *key)h](j)}(hu8 *dsth](h)}(hhh]jX)}(hu8h]hu8}(hj*6hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj'6ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj,6modnameN classnameNj[j^)}ja]jd)}jWj 6sbc.aes_gcm_decryptasbuh1hhj#6ubjA)}(h h]h }(hjJ6hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj#6ubjx)}(hj{h]h*}(hjX6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj#6ubjX)}(hdsth]hdst}(hje6hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj#6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(h const u8 *srch](j/)}(hjh]hconst}(hj~6hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjz6ubjA)}(h h]h }(hj6hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjz6ubh)}(hhh]jX)}(hu8h]hu8}(hj6hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj6modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhjz6ubjA)}(h h]h }(hj6hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjz6ubjx)}(hj{h]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjz6ubjX)}(hsrch]hsrc}(hj6hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjz6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(hsize_t data_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj6hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj6modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhj6ubjA)}(h h]h }(hj7hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj6ubjX)}(hdata_lenh]hdata_len}(hj7hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(hconst u8 *authtagh](j/)}(hjh]hconst}(hj67hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj27ubjA)}(h h]h }(hjC7hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj27ubh)}(hhh]jX)}(hu8h]hu8}(hjT7hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjQ7ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjV7modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhj27ubjA)}(h h]h }(hjr7hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj27ubjx)}(hj{h]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj27ubjX)}(hauthtagh]hauthtag}(hj7hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj27ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(h const u8 *adh](j/)}(hjh]hconst}(hj7hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj7ubjA)}(h h]h }(hj7hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj7ubh)}(hhh]jX)}(hu8h]hu8}(hj7hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj7modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhj7ubjA)}(h h]h }(hj7hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj7ubjx)}(hj{h]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj7ubjX)}(hadh]had}(hj7hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(h size_t ad_lenh](h)}(hhh]jX)}(hsize_th]hsize_t}(hj8hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj8modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhj8ubjA)}(h h]h }(hj78hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj8ubjX)}(had_lenh]had_len}(hjE8hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(hconst u8 nonce[static 12]h](j/)}(hjh]hconst}(hj^8hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjZ8ubjA)}(h h]h }(hjk8hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjZ8ubh)}(hhh]jX)}(hu8h]hu8}(hj|8hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjy8ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj~8modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhjZ8ubjA)}(h h]h }(hj8hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjZ8ubjX)}(hnonceh]hnonce}(hj8hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjZ8ubjx)}(hjL2h]h[}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjZ8ubj/)}(hjZ2h]hstatic}(hj8hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjZ8ubjA)}(h h]h }(hj8hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjZ8ubju2)}(h12h]h12}(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1jt2hjZ8ubjx)}(hj2h]h]}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjZ8ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubj)}(hconst struct aes_gcm_key *keyh](j/)}(hjh]hconst}(hj9hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj9ubjA)}(h h]h }(hj9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj9ubj/)}(hj2h]hstruct}(hj9hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj9ubjA)}(h h]h }(hj,9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj9ubh)}(hhh]jX)}(h aes_gcm_keyh]h aes_gcm_key}(hj=9hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj:9ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj?9modnameN classnameNj[j^)}ja]jF6c.aes_gcm_decryptasbuh1hhj9ubjA)}(h h]h }(hj[9hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj9ubjx)}(hj{h]h*}(hji9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj9ubjX)}(hkeyh]hkey}(hjv9hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6ubeh}(h]h ]h"]h$]h&]hhuh1jhj5hhhj5hKjubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj5hhhj5hKjubah}(h]j5ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj5hKjhj5hhubj)}(hhh]h)}(hDecrypt a message with AES-GCMh]hDecrypt a message with AES-GCM}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKjhj9hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1jhhhj0*hNhNubj)}(hX**Parameters** ``u8 *dst`` The destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. ``const u8 *src`` The source ciphertext data ``size_t data_len`` Length of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32 ``const u8 *authtag`` The stored authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to **src** + **data_len** and **src** must have room for the tag. ``const u8 *ad`` The associated data ``size_t ad_len`` Length of associated data in bytes: at most 2^61 - 1 ``const u8 nonce[static 12]`` The 12-byte nonce ``const struct aes_gcm_key *key`` The key, already prepared using aes_gcm_preparekey() **Description** For AES-GMAC (i.e., AES-GCM without any data en/decrypted), use dst=NULL, src=NULL, and data_len=0 to verify the AES-GMAC value. **Context** Any context. **Return** * 0 on success. This is the only case where any decrypted or associated data can be used. * -EBADMSG if the message is inauthentich](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKnhj9ubj)}(hhh](j)}(h~``u8 *dst`` The destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified. h](j)}(h ``u8 *dst``h]j)}(hj9h]hu8 *dst}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKlhj9ubj)}(hhh]h)}(hqThe destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.h]hqThe destination plaintext data. Can be in-place or out-of-place. For other overlaps the behavior is unspecified.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKkhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKlhj9ubj)}(h-``const u8 *src`` The source ciphertext data h](j)}(h``const u8 *src``h]j)}(hj:h]h const u8 *src}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKmhj:ubj)}(hhh]h)}(hThe source ciphertext datah]hThe source ciphertext data}(hj4:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0:hKmhj1:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj0:hKmhj9ubj)}(hg``size_t data_len`` Length of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32 h](j)}(h``size_t data_len``h]j)}(hjT:h]hsize_t data_len}(hjV:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKohjN:ubj)}(hhh]h)}(hRLength of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32h]hRLength of plaintext in bytes (and ciphertext excluding the tag): at most 2^36 - 32}(hjm:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKnhjj:ubah}(h]h ]h"]h$]h&]uh1jhjN:ubeh}(h]h ]h"]h$]h&]uh1jhji:hKohj9ubj)}(hX'``const u8 *authtag`` The stored authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to **src** + **data_len** and **src** must have room for the tag. h](j)}(h``const u8 *authtag``h]j)}(hj:h]hconst u8 *authtag}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKshj:ubj)}(hhh]h)}(hXThe stored authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to **src** + **data_len** and **src** must have room for the tag.h](hThe stored authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). Usually protocols using AES-GCM put the tag at the end of the ciphertext, in which case this should be set to }(hj:hhhNhNubj)}(h**src**h]hsrc}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh + }(hj:hhhNhNubj)}(h **data_len**h]hdata_len}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh and }(hj:hhhNhNubj)}(h**src**h]hsrc}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh must have room for the tag.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKphj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hKshj9ubj)}(h%``const u8 *ad`` The associated data h](j)}(h``const u8 *ad``h]j)}(hj:h]h const u8 *ad}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKthj:ubj)}(hhh]h)}(hThe associated datah]hThe associated data}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKthj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj;hKthj9ubj)}(hG``size_t ad_len`` Length of associated data in bytes: at most 2^61 - 1 h](j)}(h``size_t ad_len``h]j)}(hj7;h]h size_t ad_len}(hj9;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5;ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKuhj1;ubj)}(hhh]h)}(h4Length of associated data in bytes: at most 2^61 - 1h]h4Length of associated data in bytes: at most 2^61 - 1}(hjP;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL;hKuhjM;ubah}(h]h ]h"]h$]h&]uh1jhj1;ubeh}(h]h ]h"]h$]h&]uh1jhjL;hKuhj9ubj)}(h0``const u8 nonce[static 12]`` The 12-byte nonce h](j)}(h``const u8 nonce[static 12]``h]j)}(hjp;h]hconst u8 nonce[static 12]}(hjr;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn;ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKvhjj;ubj)}(hhh]h)}(hThe 12-byte nonceh]hThe 12-byte nonce}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKvhj;ubah}(h]h ]h"]h$]h&]uh1jhjj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hKvhj9ubj)}(hW``const struct aes_gcm_key *key`` The key, already prepared using aes_gcm_preparekey() h](j)}(h!``const struct aes_gcm_key *key``h]j)}(hj;h]hconst struct aes_gcm_key *key}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKwhj;ubj)}(hhh]h)}(h4The key, already prepared using aes_gcm_preparekey()h]h4The key, already prepared using aes_gcm_preparekey()}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKwhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hKwhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKyhj9ubh)}(hFor AES-GMAC (i.e., AES-GCM without any data en/decrypted), use dst=NULL, src=NULL, and data_len=0 to verify the AES-GMAC value.h]hFor AES-GMAC (i.e., AES-GCM without any data en/decrypted), use dst=NULL, src=NULL, and data_len=0 to verify the AES-GMAC value.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKxhj9ubh)}(h **Context**h]j)}(hj <h]hContext}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj <ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK{hj9ubh)}(h Any context.h]h Any context.}(hj!<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK|hj9ubh)}(h **Return**h]j)}(hj2<h]hReturn}(hj4<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0<ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK~hj9ubjJ)}(hhh](jO)}(hX0 on success. This is the only case where any decrypted or associated data can be used.h]h)}(hX0 on success. This is the only case where any decrypted or associated data can be used.h]hX0 on success. This is the only case where any decrypted or associated data can be used.}(hjO<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhK}hjK<ubah}(h]h ]h"]h$]h&]uh1jNhjH<ubjO)}(h&-EBADMSG if the message is inauthentich]h)}(hjf<h]h&-EBADMSG if the message is inauthentic}(hjh<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjd<ubah}(h]h ]h"]h$]h&]uh1jNhjH<ubeh}(h]h ]h"]h$]h&]jj{uh1jIhj]<hK}hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](jaes_gcm_init (C function)c.aes_gcm_inithNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hevoid aes_gcm_init (struct aes_gcm_ctx *ctx, const u8 nonce[static 12], const struct aes_gcm_key *key)h]j))}(hdvoid aes_gcm_init(struct aes_gcm_ctx *ctx, const u8 nonce[static 12], const struct aes_gcm_key *key)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKubjA)}(h h]h }(hj<hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj<hhhj<hKubjR)}(h aes_gcm_inith]jX)}(h aes_gcm_inith]h aes_gcm_init}(hj<hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj<ubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhj<hhhj<hKubj)}(hS(struct aes_gcm_ctx *ctx, const u8 nonce[static 12], const struct aes_gcm_key *key)h](j)}(hstruct aes_gcm_ctx *ctxh](j/)}(hj2h]hstruct}(hj<hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj<ubjA)}(h h]h }(hj<hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj<ubh)}(hhh]jX)}(h aes_gcm_ctxh]h aes_gcm_ctx}(hj<hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj<modnameN classnameNj[j^)}ja]jd)}jWj<sbc.aes_gcm_initasbuh1hhj<ubjA)}(h h]h }(hj=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj<ubjx)}(hj{h]h*}(hj+=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj<ubjX)}(hctxh]hctx}(hj8=hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubj)}(hconst u8 nonce[static 12]h](j/)}(hjh]hconst}(hjQ=hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjM=ubjA)}(h h]h }(hj^=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjM=ubh)}(hhh]jX)}(hu8h]hu8}(hjo=hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjl=ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjq=modnameN classnameNj[j^)}ja]j=c.aes_gcm_initasbuh1hhjM=ubjA)}(h h]h }(hj=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjM=ubjX)}(hnonceh]hnonce}(hj=hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjM=ubjx)}(hjL2h]h[}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjM=ubj/)}(hjZ2h]hstatic}(hj=hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjM=ubjA)}(h h]h }(hj=hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjM=ubju2)}(h12h]h12}(hj=hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1jt2hjM=ubjx)}(hj2h]h]}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjM=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubj)}(hconst struct aes_gcm_key *keyh](j/)}(hjh]hconst}(hj=hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj=ubjA)}(h h]h }(hj>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj=ubj/)}(hj2h]hstruct}(hj>hhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj=ubjA)}(h h]h }(hj>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj=ubh)}(hhh]jX)}(h aes_gcm_keyh]h aes_gcm_key}(hj0>hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj->ubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj2>modnameN classnameNj[j^)}ja]j=c.aes_gcm_initasbuh1hhj=ubjA)}(h h]h }(hjN>hhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj=ubjx)}(hj{h]h*}(hj\>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj=ubjX)}(hkeyh]hkey}(hji>hhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj<ubeh}(h]h ]h"]h$]h&]hhuh1jhj<hhhj<hKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhj<hhhj<hKubah}(h]j<ah ](j{j|eh"]h$]h&]jj)jhuh1j"hj<hKhj<hhubj)}(hhh]h)}(h`Initialize context for incremental AES-GCM encryption or decryption, or for AES-GMAC computationh]h`Initialize context for incremental AES-GCM encryption or decryption, or for AES-GMAC computation}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhj0*hNhNubj)}(hX**Parameters** ``struct aes_gcm_ctx *ctx`` The context to initialize ``const u8 nonce[static 12]`` The 12-byte nonce. All (key, nonce) pairs used for encryption or MAC generation MUST be distinct. ``const struct aes_gcm_key *key`` The key, already prepared using aes_gcm_preparekey(). Note that a pointer to the key is saved in the context, so the key must live at least as long as the context. **Description** The context should be zeroized at the end of its lifetime. Normally that happens in aes_gcm_encrypt_final() or aes_gcm_decrypt_final(), but callers that abandon a context without finalizing it should explicitly zeroize it. IMPORTANT: Callers that are decrypting data or computing a GMAC value for verification MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified. This incremental API is provided solely to support callers that can't efficiently use the one-shot functions due to using a nonlinear data layout. For incremental AES-GCM encryption, use: 1. aes_gcm_init() 2. aes_gcm_auth_update() (any number of times) 3. aes_gcm_encrypt_update() (any number of times) 4. aes_gcm_encrypt_final() For incremental AES-GCM decryption, use: 1. aes_gcm_init() 2. aes_gcm_auth_update() (any number of times) 3. aes_gcm_decrypt_update() (any number of times) 4. aes_gcm_decrypt_final() AES-GMAC is just AES-GCM with zero bytes en/decrypted. For incremental AES-GMAC computation, use: 1. aes_gcm_init() 2. aes_gcm_auth_update() (any number of times) 3. aes_gcm_encrypt_final() to return the computed tag to the caller, or aes_gcm_decrypt_final() to directly verify the computed tag **Context** Any context.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubj)}(hhh](j)}(h6``struct aes_gcm_ctx *ctx`` The context to initialize h](j)}(h``struct aes_gcm_ctx *ctx``h]j)}(hj>h]hstruct aes_gcm_ctx *ctx}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubj)}(hhh]h)}(hThe context to initializeh]hThe context to initialize}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhj>ubj)}(h``const u8 nonce[static 12]`` The 12-byte nonce. All (key, nonce) pairs used for encryption or MAC generation MUST be distinct. h](j)}(h``const u8 nonce[static 12]``h]j)}(hj ?h]hconst u8 nonce[static 12]}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj?ubj)}(hhh]h)}(hbThe 12-byte nonce. All (key, nonce) pairs used for encryption or MAC generation MUST be distinct.h]hbThe 12-byte nonce. All (key, nonce) pairs used for encryption or MAC generation MUST be distinct.}(hj&?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj#?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj"?hKhj>ubj)}(h``const struct aes_gcm_key *key`` The key, already prepared using aes_gcm_preparekey(). Note that a pointer to the key is saved in the context, so the key must live at least as long as the context. h](j)}(h!``const struct aes_gcm_key *key``h]j)}(hjG?h]hconst struct aes_gcm_key *key}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE?ubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjA?ubj)}(hhh]h)}(hThe key, already prepared using aes_gcm_preparekey(). Note that a pointer to the key is saved in the context, so the key must live at least as long as the context.h]hThe key, already prepared using aes_gcm_preparekey(). Note that a pointer to the key is saved in the context, so the key must live at least as long as the context.}(hj`?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj]?ubah}(h]h ]h"]h$]h&]uh1jhjA?ubeh}(h]h ]h"]h$]h&]uh1jhj\?hKhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubh)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubh)}(hThe context should be zeroized at the end of its lifetime. Normally that happens in aes_gcm_encrypt_final() or aes_gcm_decrypt_final(), but callers that abandon a context without finalizing it should explicitly zeroize it.h]hThe context should be zeroized at the end of its lifetime. Normally that happens in aes_gcm_encrypt_final() or aes_gcm_decrypt_final(), but callers that abandon a context without finalizing it should explicitly zeroize it.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubh)}(hX]IMPORTANT: Callers that are decrypting data or computing a GMAC value for verification MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified. This incremental API is provided solely to support callers that can't efficiently use the one-shot functions due to using a nonlinear data layout.h]hX_IMPORTANT: Callers that are decrypting data or computing a GMAC value for verification MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified. This incremental API is provided solely to support callers that can’t efficiently use the one-shot functions due to using a nonlinear data layout.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubh)}(h(For incremental AES-GCM encryption, use:h]h(For incremental AES-GCM encryption, use:}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubj)}(hhh](jO)}(haes_gcm_init()h]h)}(hj?h]haes_gcm_init()}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj?ubah}(h]h ]h"]h$]h&]uh1jNhj?ubjO)}(h+aes_gcm_auth_update() (any number of times)h]h)}(hj?h]h+aes_gcm_auth_update() (any number of times)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj?ubah}(h]h ]h"]h$]h&]uh1jNhj?ubjO)}(h.aes_gcm_encrypt_update() (any number of times)h]h)}(hj?h]h.aes_gcm_encrypt_update() (any number of times)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj?ubah}(h]h ]h"]h$]h&]uh1jNhj?ubjO)}(haes_gcm_encrypt_final() h]h)}(haes_gcm_encrypt_final()h]haes_gcm_encrypt_final()}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj@ubah}(h]h ]h"]h$]h&]uh1jNhj?ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj>ubh)}(h(For incremental AES-GCM decryption, use:h]h(For incremental AES-GCM decryption, use:}(hj0@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubj)}(hhh](jO)}(haes_gcm_init()h]h)}(hjD@h]haes_gcm_init()}(hjF@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjB@ubah}(h]h ]h"]h$]h&]uh1jNhj?@ubjO)}(h+aes_gcm_auth_update() (any number of times)h]h)}(hj\@h]h+aes_gcm_auth_update() (any number of times)}(hj^@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjZ@ubah}(h]h ]h"]h$]h&]uh1jNhj?@ubjO)}(h.aes_gcm_decrypt_update() (any number of times)h]h)}(hjt@h]h.aes_gcm_decrypt_update() (any number of times)}(hjv@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjr@ubah}(h]h ]h"]h$]h&]uh1jNhj?@ubjO)}(haes_gcm_decrypt_final() h]h)}(haes_gcm_decrypt_final()h]haes_gcm_decrypt_final()}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj@ubah}(h]h ]h"]h$]h&]uh1jNhj?@ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj>ubh)}(hbAES-GMAC is just AES-GCM with zero bytes en/decrypted. For incremental AES-GMAC computation, use:h]hbAES-GMAC is just AES-GCM with zero bytes en/decrypted. For incremental AES-GMAC computation, use:}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubj)}(hhh](jO)}(haes_gcm_init()h]h)}(hj@h]haes_gcm_init()}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj@ubah}(h]h ]h"]h$]h&]uh1jNhj@ubjO)}(h+aes_gcm_auth_update() (any number of times)h]h)}(hj@h]h+aes_gcm_auth_update() (any number of times)}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj@ubah}(h]h ]h"]h$]h&]uh1jNhj@ubjO)}(haes_gcm_encrypt_final() to return the computed tag to the caller, or aes_gcm_decrypt_final() to directly verify the computed tag h]h)}(haes_gcm_encrypt_final() to return the computed tag to the caller, or aes_gcm_decrypt_final() to directly verify the computed tagh]haes_gcm_encrypt_final() to return the computed tag to the caller, or aes_gcm_decrypt_final() to directly verify the computed tag}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj@ubah}(h]h ]h"]h$]h&]uh1jNhj@ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj>ubh)}(h **Context**h]j)}(hj Ah]hContext}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Aubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubh)}(h Any context.h]h Any context.}(hj"AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j aes_gcm_auth_update (C function)c.aes_gcm_auth_updatehNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hLvoid aes_gcm_auth_update (struct aes_gcm_ctx *ctx, const u8 *ad, size_t len)h]j))}(hKvoid aes_gcm_auth_update(struct aes_gcm_ctx *ctx, const u8 *ad, size_t len)h](j)}(hvoidh]hvoid}(hjQAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMAhhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKubjA)}(h h]h }(hj`AhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjMAhhhj_AhKubjR)}(haes_gcm_auth_updateh]jX)}(haes_gcm_auth_updateh]haes_gcm_auth_update}(hjrAhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjnAubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhjMAhhhj_AhKubj)}(h3(struct aes_gcm_ctx *ctx, const u8 *ad, size_t len)h](j)}(hstruct aes_gcm_ctx *ctxh](j/)}(hj2h]hstruct}(hjAhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjAubjA)}(h h]h }(hjAhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjAubh)}(hhh]jX)}(h aes_gcm_ctxh]h aes_gcm_ctx}(hjAhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjAubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjAmodnameN classnameNj[j^)}ja]jd)}jWjtAsbc.aes_gcm_auth_updateasbuh1hhjAubjA)}(h h]h }(hjAhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjAubjx)}(hj{h]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjAubjX)}(hctxh]hctx}(hjAhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjAubj)}(h const u8 *adh](j/)}(hjh]hconst}(hjBhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hjAubjA)}(h h]h }(hj BhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjAubh)}(hhh]jX)}(hu8h]hu8}(hjBhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjBubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetj BmodnameN classnameNj[j^)}ja]jAc.aes_gcm_auth_updateasbuh1hhjAubjA)}(h h]h }(hjJubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj:Jubj)}(hhh]h)}(hNumber of bytes to decrypt. The caller must ensure that the total number of bytes decrypted doesn't exceed GCM's limit of 2^36 - 32.h]hNumber of bytes to decrypt. The caller must ensure that the total number of bytes decrypted doesn’t exceed GCM’s limit of 2^36 - 32.}(hjYJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjVJubah}(h]h ]h"]h$]h&]uh1jhj:Jubeh}(h]h ]h"]h$]h&]uh1jhjUJhKhjIubeh}(h]h ]h"]h$]h&]uh1jhjoIubh)}(h**Description**h]j)}(hj|Jh]h Description}(hj~JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzJubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjoIubh)}(hEThis can be called only after all associated data has been processed.h]hEThis can be called only after all associated data has been processed.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjoIubh)}(hIMPORTANT: Callers MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified.h]hIMPORTANT: Callers MUST NOT assume that any decrypted or associated data is authentic until the authentication tag has been verified.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjoIubh)}(h **Context**h]j)}(hjJh]hContext}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjoIubh)}(h Any context.h]h Any context.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjoIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j"aes_gcm_encrypt_final (C function)c.aes_gcm_encrypt_finalhNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hAvoid aes_gcm_encrypt_final (struct aes_gcm_ctx *ctx, u8 *authtag)h]j))}(h@void aes_gcm_encrypt_final(struct aes_gcm_ctx *ctx, u8 *authtag)h](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKubjA)}(h h]h }(hjKhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjJhhhjKhKubjR)}(haes_gcm_encrypt_finalh]jX)}(haes_gcm_encrypt_finalh]haes_gcm_encrypt_final}(hjKhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjKubah}(h]h ](jjjkeh"]h$]h&]hhuh1jQhjJhhhjKhKubj)}(h&(struct aes_gcm_ctx *ctx, u8 *authtag)h](j)}(hstruct aes_gcm_ctx *ctxh](j/)}(hj2h]hstruct}(hj4KhhhNhNubah}(h]h ]j;ah"]h$]h&]uh1j.hj0KubjA)}(h h]h }(hjAKhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj0Kubh)}(hhh]jX)}(h aes_gcm_ctxh]h aes_gcm_ctx}(hjRKhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjOKubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjTKmodnameN classnameNj[j^)}ja]jd)}jWjKsbc.aes_gcm_encrypt_finalasbuh1hhj0KubjA)}(h h]h }(hjrKhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hj0Kubjx)}(hj{h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhj0KubjX)}(hctxh]hctx}(hjKhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhj0Kubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj,Kubj)}(h u8 *authtagh](h)}(hhh]jX)}(hu8h]hu8}(hjKhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjKubah}(h]h ]h"]h$]h&] refdomainjreftypejW reftargetjKmodnameN classnameNj[j^)}ja]jnKc.aes_gcm_encrypt_finalasbuh1hhjKubjA)}(h h]h }(hjKhhhNhNubah}(h]h ]jMah"]h$]h&]uh1j@hjKubjx)}(hj{h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jwhjKubjX)}(hauthtagh]hauthtag}(hjKhhhNhNubah}(h]h ]jcah"]h$]h&]uh1jWhjKubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj,Kubeh}(h]h ]h"]h$]h&]hhuh1jhjJhhhjKhKubeh}(h]h ]h"]h$]h&]hhjuuh1j(jvjwhjJhhhjKhKubah}(h]jJah ](j{j|eh"]h$]h&]jj)jhuh1j"hjKhKhjJhhubj)}(hhh]h)}(h(Finish encrypting a message with AES-GCMh]h(Finish encrypting a message with AES-GCM}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj Lhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjKhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$Ljj$Ljjjuh1jhhhj0*hNhNubj)}(hX&**Parameters** ``struct aes_gcm_ctx *ctx`` An AES-GCM context ``u8 *authtag`` The output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). **Description** This also zeroizes **ctx**, so the caller doesn't need to do it. **Context** Any context.h](h)}(h**Parameters**h]j)}(hj.Lh]h Parameters}(hj0LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Lubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj(Lubj)}(hhh](j)}(h/``struct aes_gcm_ctx *ctx`` An AES-GCM context h](j)}(h``struct aes_gcm_ctx *ctx``h]j)}(hjMLh]hstruct aes_gcm_ctx *ctx}(hjOLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKLubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjGLubj)}(hhh]h)}(hAn AES-GCM contexth]hAn AES-GCM context}(hjfLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbLhKhjcLubah}(h]h ]h"]h$]h&]uh1jhjGLubeh}(h]h ]h"]h$]h&]uh1jhjbLhKhjDLubj)}(hs``u8 *authtag`` The output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey(). h](j)}(h``u8 *authtag``h]j)}(hjLh]h u8 *authtag}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjLubj)}(hhh]h)}(hbThe output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey().h]hbThe output authentication tag. Length is the authtag_len that was passed to aes_gcm_preparekey().}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhKhjDLubeh}(h]h ]h"]h$]h&]uh1jhj(Lubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj(Lubh)}(h@This also zeroizes **ctx**, so the caller doesn't need to do it.h](hThis also zeroizes }(hjLhhhNhNubj)}(h**ctx**h]hctx}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh(, so the caller doesn’t need to do it.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj(Lubh)}(h **Context**h]j)}(hjLh]hContext}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj(Lubh)}(h Any context.h]h Any context.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/crypto/libcrypto-auth-encryption:20: ./include/crypto/aes-gcm.hhKhj(Lubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0*hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j"aes_gcm_decrypt_final (C function)c.aes_gcm_decrypt_finalhNtauh1j hj0*hhhNhNubj)}(hhh](j#)}(hFint aes_gcm_decrypt_final (struct aes_gcm_ctx *ctx, const u8 *authtag)h]j))}(hEint aes_gcm_decrypt_final(struct aes_gcm_ctx *ctx, const u8 *authtag)h](j)}(hinth]hint}(hj@MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj