sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget"/translations/zh_CN/crypto/api-kppmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/zh_TW/crypto/api-kppmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/it_IT/crypto/api-kppmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/ja_JP/crypto/api-kppmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/ko_KR/crypto/api-kppmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/sp_SP/crypto/api-kppmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h'Key-agreement Protocol Primitives (KPP)h]h'Key-agreement Protocol Primitives (KPP)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhj?)j@huh1hhjBhK$hj*hhubjB)}(hhh]ja)}(hOuser-instantiated object which encapsulate algorithms and core processing logich]hOuser-instantiated object which encapsulate algorithms and core processing logic}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK)hjthhubah}(h]h ]h"]h$]h&]uh1jAhj*hhhjBhK$ubeh}(h]h ](jOstructeh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhhhNhNubj[)}(h**Definition**:: struct crypto_kpp { unsigned int reqsize; struct crypto_tfm base; }; **Members** ``reqsize`` Request context size required by algorithm implementation ``base`` Common crypto API algorithm data structureh](ja)}(h**Definition**::h](jg)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK-hjubj)}(hLstruct crypto_kpp { unsigned int reqsize; struct crypto_tfm base; };h]hLstruct crypto_kpp { unsigned int reqsize; struct crypto_tfm base; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK/hjubja)}(h **Members**h]jg)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK4hjubj)}(hhh](j)}(hF``reqsize`` Request context size required by algorithm implementation h](j)}(h ``reqsize``h]j)}(hjh]hreqsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK.hjubj)}(hhh]ja)}(h9Request context size required by algorithm implementationh]h9Request context size required by algorithm implementation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hjubj)}(h3``base`` Common crypto API algorithm data structureh](j)}(h``base``h]j)}(hjh]hbase}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK.hjubj)}(hhh]ja)}(h*Common crypto API algorithm data structureh]h*Common crypto API algorithm data structure}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK/hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hK.hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkpp_alg (C struct) c.kpp_alghNtauh1hhhhhhNhNubh)}(hhh](h)}(hkpp_algh]h)}(hstruct kpp_algh](h)}(hhh]hstruct}(hjxhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjthhhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK5ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjthhhjhK5ubj)}(hkpp_algh]j)}(hjrh]hkpp_alg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjthhhjhK5ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjphhhjhK5ubah}(h]jkah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhK5hjmhhubjB)}(hhh]ja)}(h)generic key-agreement protocol primitivesh]h)generic key-agreement protocol primitives}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK7hjhhubah}(h]h ]h"]h$]h&]uh1jAhjmhhhjhK5ubeh}(h]h ](jOstructeh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhhhNhNubj[)}(hXv**Definition**:: struct kpp_alg { int (*set_secret)(struct crypto_kpp *tfm, const void *buffer, unsigned int len); int (*generate_public_key)(struct kpp_request *req); int (*compute_shared_secret)(struct kpp_request *req); unsigned int (*max_size)(struct crypto_kpp *tfm); int (*init)(struct crypto_kpp *tfm); void (*exit)(struct crypto_kpp *tfm); struct crypto_alg base; }; **Members** ``set_secret`` Function invokes the protocol specific function to store the secret private key along with parameters. The implementation knows how to decode the buffer ``generate_public_key`` Function generate the public key to be sent to the counterpart. In case of error, where output is not big enough req->dst_len will be updated to the size required ``compute_shared_secret`` Function compute the shared secret as defined by the algorithm. The result is given back to the user. In case of error, where output is not big enough, req->dst_len will be updated to the size required ``max_size`` Function returns the size of the output buffer ``init`` Initialize the object. This is called only once at instantiation time. In case the cryptographic hardware needs to be initialized. Software fallback should be put in place here. ``exit`` Undo everything **init** did. ``base`` Common crypto API algorithm data structureh](ja)}(h**Definition**::h](jg)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK;hjubj)}(hXstruct kpp_alg { int (*set_secret)(struct crypto_kpp *tfm, const void *buffer, unsigned int len); int (*generate_public_key)(struct kpp_request *req); int (*compute_shared_secret)(struct kpp_request *req); unsigned int (*max_size)(struct crypto_kpp *tfm); int (*init)(struct crypto_kpp *tfm); void (*exit)(struct crypto_kpp *tfm); struct crypto_alg base; };h]hXstruct kpp_alg { int (*set_secret)(struct crypto_kpp *tfm, const void *buffer, unsigned int len); int (*generate_public_key)(struct kpp_request *req); int (*compute_shared_secret)(struct kpp_request *req); unsigned int (*max_size)(struct crypto_kpp *tfm); int (*init)(struct crypto_kpp *tfm); void (*exit)(struct crypto_kpp *tfm); struct crypto_alg base; };}hjsbah}(h]h ]h"]h$]h&]j+j,uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK=hjubja)}(h **Members**h]jg)}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKGhjubj)}(hhh](j)}(h``set_secret`` Function invokes the protocol specific function to store the secret private key along with parameters. The implementation knows how to decode the buffer h](j)}(h``set_secret``h]j)}(hj'h]h set_secret}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKdst_len will be updated to the size required h](j)}(h``generate_public_key``h]j)}(hjah]hgenerate_public_key}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK@hj[ubj)}(hhh]ja)}(hFunction generate the public key to be sent to the counterpart. In case of error, where output is not big enough req->dst_len will be updated to the size requiredh]hFunction generate the public key to be sent to the counterpart. In case of error, where output is not big enough req->dst_len will be updated to the size required}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhK=hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhK@hjubj)}(h``compute_shared_secret`` Function compute the shared secret as defined by the algorithm. The result is given back to the user. In case of error, where output is not big enough, req->dst_len will be updated to the size required h](j)}(h``compute_shared_secret``h]j)}(hjh]hcompute_shared_secret}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKDhjubj)}(hhh]ja)}(hFunction compute the shared secret as defined by the algorithm. The result is given back to the user. In case of error, where output is not big enough, req->dst_len will be updated to the size requiredh]hFunction compute the shared secret as defined by the algorithm. The result is given back to the user. In case of error, where output is not big enough, req->dst_len will be updated to the size required}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKDhjubj)}(h<``max_size`` Function returns the size of the output buffer h](j)}(h ``max_size``h]j)}(hjh]hmax_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKEhjubj)}(hhh]ja)}(h.Function returns the size of the output bufferh]h.Function returns the size of the output buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKEhjubj)}(h``init`` Initialize the object. This is called only once at instantiation time. In case the cryptographic hardware needs to be initialized. Software fallback should be put in place here. h](j)}(h``init``h]j)}(hjh]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKIhjubj)}(hhh]ja)}(hInitialize the object. This is called only once at instantiation time. In case the cryptographic hardware needs to be initialized. Software fallback should be put in place here.h]hInitialize the object. This is called only once at instantiation time. In case the cryptographic hardware needs to be initialized. Software fallback should be put in place here.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKFhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKIhjubj)}(h'``exit`` Undo everything **init** did. h](j)}(h``exit``h]j)}(hjHh]hexit}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKJhjBubj)}(hhh]ja)}(hUndo everything **init** did.h](hUndo everything }(hjahhhNhNubjg)}(h**init**h]hinit}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjaubh did.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hj]hKJhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKJhjubj)}(h3``base`` Common crypto API algorithm data structureh](j)}(h``base``h]j)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKKhjubj)}(hhh]ja)}(h*Common crypto API algorithm data structureh]h*Common crypto API algorithm data structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkpp_secret (C struct) c.kpp_secrethNtauh1hhhhhhNhNubh)}(hhh](h)}(h kpp_secreth]h)}(hstruct kpp_secreth](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhKRubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKRubj)}(h kpp_secreth]j)}(hjh]h kpp_secret}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKRubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKRubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKRhjhhubjB)}(hhh]ja)}(h&small header for packing secret bufferh]h&small header for packing secret buffer}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhMhj,hhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKRubeh}(h]h ](jOstructeh"]h$]h&]jTjOjUjGjVjGjWjXjYuh1hhhhhhNhNubj[)}(hX **Definition**:: struct kpp_secret { unsigned short type; unsigned short len; }; **Members** ``type`` define type of secret. Each kpp type will define its own ``len`` specify the len of the secret, include the header, that follows the structh](ja)}(h**Definition**::h](jg)}(h**Definition**h]h Definition}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjOubh:}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhM hjKubj)}(hGstruct kpp_secret { unsigned short type; unsigned short len; };h]hGstruct kpp_secret { unsigned short type; unsigned short len; };}hjlsbah}(h]h ]h"]h$]h&]j+j,uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhMhjKubja)}(h **Members**h]jg)}(hj}h]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj{ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhMhjKubj)}(hhh](j)}(hB``type`` define type of secret. Each kpp type will define its own h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhM hjubj)}(hhh]ja)}(h8define type of secret. Each kpp type will define its ownh]h8define type of secret. Each kpp type will define its own}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hR``len`` specify the len of the secret, include the header, that follows the structh](j)}(h``len``h]j)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.hhM hjubj)}(hhh]ja)}(hJspecify the len of the secret, include the header, that follows the structh]hJspecify the len of the secret, include the header, that follows the struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhhhhhNhNubeh}(h]Bkey-agreement-protocol-primitives-kpp-cipher-algorithm-definitionsah ]h"]Dkey-agreement protocol primitives (kpp) cipher algorithm definitionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h2Key-agreement Protocol Primitives (KPP) Cipher APIh]h2Key-agreement Protocol Primitives (KPP) Cipher API}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubja)}(hfThe KPP API is used with the algorithm type CRYPTO_ALG_TYPE_KPP (listed as type "kpp" in /proc/crypto)h]hjThe KPP API is used with the algorithm type CRYPTO_ALG_TYPE_KPP (listed as type “kpp” in /proc/crypto)}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:13: ./include/crypto/kpp.hhK\hjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_alloc_kpp (C function)c.crypto_alloc_kpphNtauh1hhjhhhNhNubh)}(hhh](h)}(hOstruct crypto_kpp * crypto_alloc_kpp (const char *alg_name, u32 type, u32 mask)h]h)}(hMstruct crypto_kpp *crypto_alloc_kpp(const char *alg_name, u32 type, u32 mask)h](h)}(hhh]hstruct}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjRhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKcubh)}(h h]h }(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRhhhjchKcubh)}(hhh]j)}(h crypto_kpph]h crypto_kpp}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjOreftype identifier reftargetjwmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jcrypto_alloc_kppsbc.crypto_alloc_kppasbuh1hhjRhhhjchKcubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRhhhjchKcubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjRhhhjchKcubj)}(hcrypto_alloc_kpph]j)}(hjh]hcrypto_alloc_kpp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjRhhhjchKcubhdesc_parameterlist)}(h*(const char *alg_name, u32 type, u32 mask)h](hdesc_parameter)}(hconst char *alg_nameh](h)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubhdesc_sig_keyword_type)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halg_nameh]halg_name}(hj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubj)}(hu32 typeh](h)}(hhh]j)}(hu32h]hu32}(hjD hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjF modnameN classnameNjj)}j]jc.crypto_alloc_kppasbuh1hhj= ubh)}(h h]h }(hjb hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj= ubj)}(htypeh]htype}(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubj)}(hu32 maskh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetj modnameN classnameNjj)}j]jc.crypto_alloc_kppasbuh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hmaskh]hmask}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjRhhhjchKcubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjNhhhjchKcubah}(h]jIah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjchKchjKhhubjB)}(hhh]ja)}(hallocate KPP tfm handleh]hallocate KPP tfm handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKchj hhubah}(h]h ]h"]h$]h&]uh1jAhjKhhhjchKcubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj jVj jWjXjYuh1hhhhjhNhNubj[)}(hX**Parameters** ``const char *alg_name`` is the name of the kpp algorithm (e.g. "dh", "ecdh") ``u32 type`` specifies the type of the algorithm ``u32 mask`` specifies the mask for the algorithm **Description** Allocate a handle for kpp algorithm. The returned struct crypto_kpp is required for any following API invocation **Return** allocated handle in case of success; IS_ERR() is true in case of an error, PTR_ERR() returns the error code.h](ja)}(h**Parameters**h]jg)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKghj ubj)}(hhh](j)}(hN``const char *alg_name`` is the name of the kpp algorithm (e.g. "dh", "ecdh") h](j)}(h``const char *alg_name``h]j)}(hj# h]hconst char *alg_name}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj! ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKdhj ubj)}(hhh]ja)}(h4is the name of the kpp algorithm (e.g. "dh", "ecdh")h]hj?)j@huh1hhjJ hKhj1 hhubjB)}(hhh]ja)}(hfree KPP tfm handleh]hfree KPP tfm handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jAhj1 hhhjJ hKubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj jVj jWjXjYuh1hhhhjhNhNubj[)}(h**Parameters** ``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() **Description** If **tfm** is a NULL or error pointer, this function does nothing.h](ja)}(h**Parameters**h]jg)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKhj ubj)}(hhh]j)}(hL``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() h](j)}(h``struct crypto_kpp *tfm``h]j)}(hj= h]hstruct crypto_kpp *tfm}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKhj7 ubj)}(hhh]ja)}(h0KPP tfm handle allocated with crypto_alloc_kpp()h]h0KPP tfm handle allocated with crypto_alloc_kpp()}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjR hKhjS ubah}(h]h ]h"]h$]h&]uh1jhj7 ubeh}(h]h ]h"]h$]h&]uh1jhjR hKhj4 ubah}(h]h ]h"]h$]h&]uh1jhj ubja)}(h**Description**h]jg)}(hjx h]h Description}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjv ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKhj ubja)}(hBIf **tfm** is a NULL or error pointer, this function does nothing.h](hIf }(hj hhhNhNubjg)}(h**tfm**h]htfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj ubh8 is a NULL or error pointer, this function does nothing.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"crypto_kpp_set_secret (C function)c.crypto_kpp_set_secrethNtauh1hhjhhhNhNubh)}(hhh](h)}(hXint crypto_kpp_set_secret (struct crypto_kpp *tfm, const void *buffer, unsigned int len)h]h)}(hWint crypto_kpp_set_secret(struct crypto_kpp *tfm, const void *buffer, unsigned int len)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj hMubj)}(hcrypto_kpp_set_secreth]j)}(hcrypto_kpp_set_secreth]hcrypto_kpp_set_secret}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhj hMubj)}(h>(struct crypto_kpp *tfm, const void *buffer, unsigned int len)h](j)}(hstruct crypto_kpp *tfmh](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubh)}(hhh]j)}(h crypto_kpph]h crypto_kpp}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetj, modnameN classnameNjj)}j]j)}jj sbc.crypto_kpp_set_secretasbuh1hhj ubh)}(h h]h }(hjJ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hjh]h*}(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(htfmh]htfm}(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj ubj)}(hconst void *bufferh](h)}(hjh]hconst}(hj~ hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjz ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjz ubj)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjz ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjz ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz ubj)}(hbufferh]hbuffer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj hMubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hMhj hhubjB)}(hhh]ja)}(hInvoke kpp operationh]hInvoke kpp operation}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj hMubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjUjVjUjWjXjYuh1hhhhjhNhNubj[)}(hX&**Parameters** ``struct crypto_kpp *tfm`` tfm handle ``const void *buffer`` Buffer holding the packet representation of the private key. The structure of the packet key depends on the particular KPP implementation. Packing and unpacking helpers are provided for ECDH and DH (see the respective header files for those implementations). ``unsigned int len`` Length of the packet private key buffer. **Description** Function invokes the specific kpp operation for a given alg. **Return** zero on success; error code in case of errorh](ja)}(h**Parameters**h]jg)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj]ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMhjYubj)}(hhh](j)}(h&``struct crypto_kpp *tfm`` tfm handle h](j)}(h``struct crypto_kpp *tfm``h]j)}(hj~h]hstruct crypto_kpp *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMhjxubj)}(hhh]ja)}(h tfm handleh]h tfm handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(hX``const void *buffer`` Buffer holding the packet representation of the private key. The structure of the packet key depends on the particular KPP implementation. Packing and unpacking helpers are provided for ECDH and DH (see the respective header files for those implementations). h](j)}(h``const void *buffer``h]j)}(hjh]hconst void *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMhjubj)}(hhh]ja)}(hXBuffer holding the packet representation of the private key. The structure of the packet key depends on the particular KPP implementation. Packing and unpacking helpers are provided for ECDH and DH (see the respective header files for those implementations).h]hXBuffer holding the packet representation of the private key. The structure of the packet key depends on the particular KPP implementation. Packing and unpacking helpers are provided for ECDH and DH (see the respective header files for those implementations).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h>``unsigned int len`` Length of the packet private key buffer. h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMhjubj)}(hhh]ja)}(h(Length of the packet private key buffer.h]h(Length of the packet private key buffer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubeh}(h]h ]h"]h$]h&]uh1jhjYubja)}(h**Description**h]jg)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj*ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM hjYubja)}(hj?)j@huh1hhjhM)hjhhubjB)}(hhh]ja)}(hInvoke kpp operationh]hInvoke kpp operation}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM)hjUhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhM)ubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjpjVjpjWjXjYuh1hhhhjhNhNubj[)}(hXz**Parameters** ``struct kpp_request *req`` kpp key request **Description** Function invokes the specific kpp operation for generating the public part for a given kpp algorithm. To generate a private key, the caller should use a random number generator. The output of the requested length serves as the private key. **Return** zero on success; error code in case of errorh](ja)}(h**Parameters**h]jg)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjxubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM-hjtubj)}(hhh]j)}(h,``struct kpp_request *req`` kpp key request h](j)}(h``struct kpp_request *req``h]j)}(hjh]hstruct kpp_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM1hjubj)}(hhh]ja)}(hkpp key requesth]hkpp key request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjtubja)}(h**Description**h]jg)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM3hjtubja)}(heFunction invokes the specific kpp operation for generating the public part for a given kpp algorithm.h]heFunction invokes the specific kpp operation for generating the public part for a given kpp algorithm.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM*hjtubja)}(hTo generate a private key, the caller should use a random number generator. The output of the requested length serves as the private key.h]hTo generate a private key, the caller should use a random number generator. The output of the requested length serves as the private key.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM-hjtubja)}(h **Return**h]jg)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM0hjtubja)}(h,zero on success; error code in case of errorh]h,zero on success; error code in case of error}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM3hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-crypto_kpp_compute_shared_secret (C function)"c.crypto_kpp_compute_shared_secrethNtauh1hhjhhhNhNubh)}(hhh](h)}(h>int crypto_kpp_compute_shared_secret (struct kpp_request *req)h]h)}(h=int crypto_kpp_compute_shared_secret(struct kpp_request *req)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM=ubh)}(h h]h }(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKhhhj]hM=ubj)}(h crypto_kpp_compute_shared_secreth]j)}(h crypto_kpp_compute_shared_secreth]h crypto_kpp_compute_shared_secret}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjKhhhj]hM=ubj)}(h(struct kpp_request *req)h]j)}(hstruct kpp_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h kpp_requesth]h kpp_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]j)}jjrsb"c.crypto_kpp_compute_shared_secretasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubah}(h]h ]h"]h$]h&]j+j,uh1jhjKhhhj]hM=ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjGhhhj]hM=ubah}(h]jBah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj]hM=hjDhhubjB)}(hhh]ja)}(hInvoke kpp operationh]hInvoke kpp operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM=hj hhubah}(h]h ]h"]h$]h&]uh1jAhjDhhhj]hM=ubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj'jVj'jWjXjYuh1hhhhjhNhNubj[)}(h**Parameters** ``struct kpp_request *req`` kpp key request **Description** Function invokes the specific kpp operation for computing the shared secret for a given kpp algorithm. **Return** zero on success; error code in case of errorh](ja)}(h**Parameters**h]jg)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj/ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMAhj+ubj)}(hhh]j)}(h,``struct kpp_request *req`` kpp key request h](j)}(h``struct kpp_request *req``h]j)}(hjPh]hstruct kpp_request *req}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMBhjJubj)}(hhh]ja)}(hkpp key requesth]hkpp key request}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjehMBhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMBhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubja)}(h**Description**h]jg)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMDhj+ubja)}(hfFunction invokes the specific kpp operation for computing the shared secret for a given kpp algorithm.h]hfFunction invokes the specific kpp operation for computing the shared secret for a given kpp algorithm.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhM>hj+ubja)}(h **Return**h]jg)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMAhj+ubja)}(h,zero on success; error code in case of errorh]h,zero on success; error code in case of error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMDhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_kpp_maxsize (C function)c.crypto_kpp_maxsizehNtauh1hhjhhhNhNubh)}(hhh](h)}(h8unsigned int crypto_kpp_maxsize (struct crypto_kpp *tfm)h]h)}(h7unsigned int crypto_kpp_maxsize(struct crypto_kpp *tfm)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMNubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMNubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhjhMNubh)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMNubj)}(hcrypto_kpp_maxsizeh]j)}(hcrypto_kpp_maxsizeh]hcrypto_kpp_maxsize}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhMNubj)}(h(struct crypto_kpp *tfm)h]j)}(hstruct crypto_kpp *tfmh](h)}(hhh]hstruct}(hjPhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjLubh)}(h h]h }(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLubh)}(hhh]j)}(h crypto_kpph]h crypto_kpp}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjpmodnameN classnameNjj)}j]j)}jj6sbc.crypto_kpp_maxsizeasbuh1hhjLubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(htfmh]htfm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjHubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhMNubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhMNubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhMNhjhhubjB)}(hhh]ja)}(hGet len for output bufferh]hGet len for output buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMNhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhMNubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhjhNhNubj[)}(hXa**Parameters** ``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() **Description** Function returns the output buffer size required for a given key. Function assumes that the key is already set in the transformation. If this function is called without a setkey or with a failed setkey, you will end up in a NULL dereference.h](ja)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMRhjubj)}(hhh]j)}(hL``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() h](j)}(h``struct crypto_kpp *tfm``h]j)}(hjh]hstruct crypto_kpp *tfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMUhjubj)}(hhh]ja)}(h0KPP tfm handle allocated with crypto_alloc_kpp()h]h0KPP tfm handle allocated with crypto_alloc_kpp()}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj)hMUhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMUhj ubah}(h]h ]h"]h$]h&]uh1jhjubja)}(h**Description**h]jg)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjMubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMWhjubja)}(hFunction returns the output buffer size required for a given key. Function assumes that the key is already set in the transformation. If this function is called without a setkey or with a failed setkey, you will end up in a NULL dereference.h]hFunction returns the output buffer size required for a given key. Function assumes that the key is already set in the transformation. If this function is called without a setkey or with a failed setkey, you will end up in a NULL dereference.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.hhMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubeh}(h]0key-agreement-protocol-primitives-kpp-cipher-apiah ]h"]2key-agreement protocol primitives (kpp) cipher apiah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h=Key-agreement Protocol Primitives (KPP) Cipher Request Handleh]h=Key-agreement Protocol Primitives (KPP) Cipher Request Handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkpp_request_alloc (C function)c.kpp_request_allochNtauh1hhjhhhNhNubh)}(hhh](h)}(hJstruct kpp_request * kpp_request_alloc (struct crypto_kpp *tfm, gfp_t gfp)h]h)}(hHstruct kpp_request *kpp_request_alloc(struct crypto_kpp *tfm, gfp_t gfp)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubh)}(hhh]j)}(h kpp_requesth]h kpp_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]j)}jkpp_request_allocsbc.kpp_request_allocasbuh1hhjhhhjhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hkpp_request_alloch]j)}(hjh]hkpp_request_alloc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h#(struct crypto_kpp *tfm, gfp_t gfp)h](j)}(hstruct crypto_kpp *tfmh](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubh)}(hhh]j)}(h crypto_kpph]h crypto_kpp}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjGmodnameN classnameNjj)}j]jc.kpp_request_allocasbuh1hhj#ubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(htfmh]htfm}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubj)}(h gfp_t gfph](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]jc.kpp_request_allocasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]ja)}(hallocates kpp requesth]hallocates kpp request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhjhNhNubj[)}(h**Parameters** ``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() ``gfp_t gfp`` allocation flags **Return** allocated handle in case of success or NULL in case of an error.h](ja)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhj ubj)}(hhh](j)}(hL``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() h](j)}(h``struct crypto_kpp *tfm``h]j)}(hj1h]hstruct crypto_kpp *tfm}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhj+ubj)}(hhh]ja)}(h0KPP tfm handle allocated with crypto_alloc_kpp()h]h0KPP tfm handle allocated with crypto_alloc_kpp()}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKhj(ubj)}(h``gfp_t gfp`` allocation flags h](j)}(h ``gfp_t gfp``h]j)}(hjjh]h gfp_t gfp}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjdubj)}(hhh]ja)}(hallocation flagsh]hallocation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhKhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubja)}(h **Return**h]jg)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhj ubja)}(h@allocated handle in case of success or NULL in case of an error.h]h@allocated handle in case of success or NULL in case of an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkpp_request_free (C function)c.kpp_request_freehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void kpp_request_free (struct kpp_request *req)h]h)}(h.void kpp_request_free(struct kpp_request *req)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hkpp_request_freeh]j)}(hkpp_request_freeh]hkpp_request_free}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(h(struct kpp_request *req)h]j)}(hstruct kpp_request *reqh](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubh)}(h h]h }(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubh)}(hhh]j)}(h kpp_requesth]h kpp_request}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjGmodnameN classnameNjj)}j]j)}jj sbc.kpp_request_freeasbuh1hhj#ubh)}(h h]h }(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjubah}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]ja)}(hzeroize and free kpp requesth]hzeroize and free kpp request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhjhNhNubj[)}(h=**Parameters** ``struct kpp_request *req`` request to freeh](ja)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]j)}(h+``struct kpp_request *req`` request to freeh](j)}(h``struct kpp_request *req``h]j)}(hjh]hstruct kpp_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(hrequest to freeh]hrequest to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%kpp_request_set_callback (C function)c.kpp_request_set_callbackhNtauh1hhjhhhNhNubh)}(hhh](h)}(hgvoid kpp_request_set_callback (struct kpp_request *req, u32 flgs, crypto_completion_t cmpl, void *data)h]h)}(hfvoid kpp_request_set_callback(struct kpp_request *req, u32 flgs, crypto_completion_t cmpl, void *data)h](j)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKubh)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAhhhjShKubj)}(hkpp_request_set_callbackh]j)}(hkpp_request_set_callbackh]hkpp_request_set_callback}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjAhhhjShKubj)}(hI(struct kpp_request *req, u32 flgs, crypto_completion_t cmpl, void *data)h](j)}(hstruct kpp_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj~ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~ubh)}(hhh]j)}(h kpp_requesth]h kpp_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]j)}jjhsbc.kpp_request_set_callbackasbuh1hhj~ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjzubj)}(hu32 flgsh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]jc.kpp_request_set_callbackasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hflgsh]hflgs}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjzubj)}(hcrypto_completion_t cmplh](h)}(hhh]j)}(hcrypto_completion_th]hcrypto_completion_t}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjAmodnameN classnameNjj)}j]jc.kpp_request_set_callbackasbuh1hhj8ubh)}(h h]h }(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8ubj)}(hcmplh]hcmpl}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjzubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjzubeh}(h]h ]h"]h$]h&]j+j,uh1jhjAhhhjShKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj=hhhjShKubah}(h]j8ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjShKhj:hhubjB)}(hhh]ja)}(hSets an asynchronous callback.h]hSets an asynchronous callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhj:hhhjShKubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhjhNhNubj[)}(hXr**Parameters** ``struct kpp_request *req`` request that the callback will be set for ``u32 flgs`` specify for instance if the operation may backlog ``crypto_completion_t cmpl`` callback which will be called ``void *data`` private data used by the caller **Description** Callback will be called when an asynchronous operation on a given request is finished.h](ja)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh](j)}(hF``struct kpp_request *req`` request that the callback will be set for h](j)}(h``struct kpp_request *req``h]j)}(hjh]hstruct kpp_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(h)request that the callback will be set forh]h)request that the callback will be set for}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj-hKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjubj)}(h?``u32 flgs`` specify for instance if the operation may backlog h](j)}(h ``u32 flgs``h]j)}(hjQh]hu32 flgs}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjKubj)}(hhh]ja)}(h1specify for instance if the operation may backlogh]h1specify for instance if the operation may backlog}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjfhKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjubj)}(h;``crypto_completion_t cmpl`` callback which will be called h](j)}(h``crypto_completion_t cmpl``h]j)}(hjh]hcrypto_completion_t cmpl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(hcallback which will be calledh]hcallback which will be called}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``void *data`` private data used by the caller h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(hprivate data used by the callerh]hprivate data used by the caller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubja)}(h**Description**h]jg)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubja)}(hVCallback will be called when an asynchronous operation on a given request is finished.h]hVCallback will be called when an asynchronous operation on a given request is finished.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"kpp_request_set_input (C function)c.kpp_request_set_inputhNtauh1hhjhhhNhNubh)}(hhh](h)}(hgvoid kpp_request_set_input (struct kpp_request *req, struct scatterlist *input, unsigned int input_len)h]h)}(hfvoid kpp_request_set_input(struct kpp_request *req, struct scatterlist *input, unsigned int input_len)h](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?hhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKubh)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj?hhhjQhKubj)}(hkpp_request_set_inputh]j)}(hkpp_request_set_inputh]hkpp_request_set_input}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj?hhhjQhKubj)}(hL(struct kpp_request *req, struct scatterlist *input, unsigned int input_len)h](j)}(hstruct kpp_request *reqh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubh)}(hhh]j)}(h kpp_requesth]h kpp_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]j)}jjfsbc.kpp_request_set_inputasbuh1hhj|ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjxubj)}(hstruct scatterlist *inputh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]jc.kpp_request_set_inputasbuh1hhjubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinputh]hinput}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjxubj)}(hunsigned int input_lenh](j)}(hunsignedh]hunsigned}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubh)}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubj)}(hinth]hint}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^ubj)}(h input_lenh]h input_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjxubeh}(h]h ]h"]h$]h&]j+j,uh1jhj?hhhjQhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj;hhhjQhKubah}(h]j6ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjQhKhj8hhubjB)}(hhh]ja)}(hSets input bufferh]hSets input buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jAhj8hhhjQhKubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhjhNhNubj[)}(h**Parameters** ``struct kpp_request *req`` kpp request ``struct scatterlist *input`` ptr to input scatter list ``unsigned int input_len`` size of the input scatter list **Description** Sets parameters required by generate_public_keyh](ja)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh](j)}(h(``struct kpp_request *req`` kpp request h](j)}(h``struct kpp_request *req``h]j)}(hjh]hstruct kpp_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(h kpp requesth]h kpp request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``struct scatterlist *input`` ptr to input scatter list h](j)}(h``struct scatterlist *input``h]j)}(hj>h]hstruct scatterlist *input}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhj8ubj)}(hhh]ja)}(hptr to input scatter listh]hptr to input scatter list}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKhjubj)}(h:``unsigned int input_len`` size of the input scatter list h](j)}(h``unsigned int input_len``h]j)}(hjwh]hunsigned int input_len}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjqubj)}(hhh]ja)}(hsize of the input scatter listh]hsize of the input scatter list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubja)}(h**Description**h]jg)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubja)}(h/Sets parameters required by generate_public_keyh]h/Sets parameters required by generate_public_key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#kpp_request_set_output (C function)c.kpp_request_set_outputhNtauh1hhjhhhNhNubh)}(hhh](h)}(hjvoid kpp_request_set_output (struct kpp_request *req, struct scatterlist *output, unsigned int output_len)h]h)}(hivoid kpp_request_set_output(struct kpp_request *req, struct scatterlist *output, unsigned int output_len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hkpp_request_set_outputh]j)}(hkpp_request_set_outputh]hkpp_request_set_output}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hjhhhjhKubj)}(hN(struct kpp_request *req, struct scatterlist *output, unsigned int output_len)h](j)}(hstruct kpp_request *reqh](h)}(hhh]hstruct}(hj4hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj0ubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubh)}(hhh]j)}(h kpp_requesth]h kpp_request}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjTmodnameN classnameNjj)}j]j)}jjsbc.kpp_request_set_outputasbuh1hhj0ubh)}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj,ubj)}(hstruct scatterlist *outputh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetjmodnameN classnameNjj)}j]jnc.kpp_request_set_outputasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(houtputh]houtput}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj,ubj)}(hunsigned int output_lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hinth]hint}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h output_lenh]h output_len}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj,ubeh}(h]h ]h"]h$]h&]j+j,uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hjhhhjhKubah}(h]jah ](j9j:eh"]h$]h&]j>j?)j@huh1hhjhKhjhhubjB)}(hhh]ja)}(hSets output bufferh]hSets output buffer}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjuhhubah}(h]h ]h"]h$]h&]uh1jAhjhhhjhKubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjjVjjWjXjYuh1hhhhjhNhNubj[)}(h**Parameters** ``struct kpp_request *req`` kpp request ``struct scatterlist *output`` ptr to output scatter list ``unsigned int output_len`` size of the output scatter list **Description** Sets parameters required by kpp operationh](ja)}(h**Parameters**h]jg)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh](j)}(h(``struct kpp_request *req`` kpp request h](j)}(h``struct kpp_request *req``h]j)}(hjh]hstruct kpp_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(h kpp requesth]h kpp request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``struct scatterlist *output`` ptr to output scatter list h](j)}(h``struct scatterlist *output``h]j)}(hjh]hstruct scatterlist *output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubj)}(hhh]ja)}(hptr to output scatter listh]hptr to output scatter list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubj)}(h<``unsigned int output_len`` size of the output scatter list h](j)}(h``unsigned int output_len``h]j)}(hj+ h]hunsigned int output_len}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhj% ubj)}(hhh]ja)}(hsize of the output scatter listh]hsize of the output scatter list}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj@ hKhjA ubah}(h]h ]h"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]uh1jhj@ hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubja)}(h**Description**h]jg)}(hjf h]h Description}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjd ubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubja)}(h)Sets parameters required by kpp operationh]h)Sets parameters required by kpp operation}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhjhhhNhNubeh}(h];key-agreement-protocol-primitives-kpp-cipher-request-handleah ]h"]=key-agreement protocol primitives (kpp) cipher request handleah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hECDH Helper Functionsh]hECDH Helper Functions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubja)}(h_To use ECDH with the KPP cipher API, the following data structure and functions should be used.h]h_To use ECDH with the KPP cipher API, the following data structure and functions should be used.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:28: ./include/crypto/ecdh.hhK hj hhubja)}(hRThe ECC curves known to the ECDH implementation are specified in this header file.h]hRThe ECC curves known to the ECDH implementation are specified in this header file.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:28: ./include/crypto/ecdh.hhKhj hhubja)}(hTo use ECDH with KPP, the following functions should be used to operate on an ECDH private key. The packet private key that can be set with the KPP API function call of crypto_kpp_set_secret.h]hTo use ECDH with KPP, the following functions should be used to operate on an ECDH private key. The packet private key that can be set with the KPP API function call of crypto_kpp_set_secret.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:28: ./include/crypto/ecdh.hhKhj hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌecdh (C struct)c.ecdhhNtauh1hhj hhhNhNubh)}(hhh](h)}(hecdhh]h)}(h struct ecdhh](h)}(hhh]hstruct}(hj hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj hhhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj hhhj hKubj)}(hecdhh]j)}(hj h]hecdh}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj !ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj hhhj hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj hhhj hKubah}(h]j ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj hKhj hhubjB)}(hhh]ja)}(hdefine an ECDH private keyh]hdefine an ECDH private key}(hj3!hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK hj0!hhubah}(h]h ]h"]h$]h&]uh1jAhj hhhj hKubeh}(h]h ](jOstructeh"]h$]h&]jTjOjUjK!jVjK!jWjXjYuh1hhhhj hNhNubj[)}(h**Definition**:: struct ecdh { char *key; unsigned short key_size; }; **Members** ``key`` Private ECDH key ``key_size`` Size of the private ECDH keyh](ja)}(h**Definition**::h](jg)}(h**Definition**h]h Definition}(hjW!hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjS!ubh:}(hjS!hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK$hjO!ubj)}(hj?)j@huh1hhjA"hK+hj("hhubjB)}(hhh]ja)}(h'Obtain the size of the private ECDH keyh]h'Obtain the size of the private ECDH key}(hj*#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK+hj'#hhubah}(h]h ]h"]h$]h&]uh1jAhj("hhhjA"hK+ubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjB#jVjB#jWjXjYuh1hhhhj hNhNubj[)}(hX$**Parameters** ``const struct ecdh *params`` private ECDH key **Description** This function returns the packet ECDH key size. A caller can use that with the provided ECDH private key reference to obtain the required memory size to hold a packet key. **Return** size of the key in bytesh](ja)}(h**Parameters**h]jg)}(hjL#h]h Parameters}(hjN#hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjJ#ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK/hjF#ubj)}(hhh]j)}(h/``const struct ecdh *params`` private ECDH key h](j)}(h``const struct ecdh *params``h]j)}(hjk#h]hconst struct ecdh *params}(hjm#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji#ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK,hje#ubj)}(hhh]ja)}(hprivate ECDH keyh]hprivate ECDH key}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj#hK,hj#ubah}(h]h ]h"]h$]h&]uh1jhje#ubeh}(h]h ]h"]h$]h&]uh1jhj#hK,hjb#ubah}(h]h ]h"]h$]h&]uh1jhjF#ubja)}(h**Description**h]jg)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj#ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK.hjF#ubja)}(hThis function returns the packet ECDH key size. A caller can use that with the provided ECDH private key reference to obtain the required memory size to hold a packet key.h]hThis function returns the packet ECDH key size. A caller can use that with the provided ECDH private key reference to obtain the required memory size to hold a packet key.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK-hjF#ubja)}(h **Return**h]jg)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj#ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK1hjF#ubja)}(hsize of the key in bytesh]hsize of the key in bytes}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK2hjF#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#crypto_ecdh_encode_key (C function)c.crypto_ecdh_encode_keyhNtauh1hhj hhhNhNubh)}(hhh](h)}(hNint crypto_ecdh_encode_key (char *buf, unsigned int len, const struct ecdh *p)h]h)}(hMint crypto_ecdh_encode_key(char *buf, unsigned int len, const struct ecdh *p)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$hhhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK7ubh)}(h h]h }(hj!$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$hhhj $hK7ubj)}(hcrypto_ecdh_encode_keyh]j)}(hcrypto_ecdh_encode_keyh]hcrypto_ecdh_encode_key}(hj3$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/$ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj$hhhj $hK7ubj)}(h3(char *buf, unsigned int len, const struct ecdh *p)h](j)}(h char *bufh](j)}(hcharh]hchar}(hjO$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjK$ubh)}(h h]h }(hj]$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjK$ubj)}(hjh]h*}(hjk$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK$ubj)}(hbufh]hbuf}(hjx$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK$ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjG$ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hinth]hint}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hlenh]hlen}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjG$ubj)}(hconst struct ecdh *ph](h)}(hjh]hconst}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubh)}(hhh]hstruct}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj$ubh)}(h h]h }(hj %hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubh)}(hhh]j)}(hecdhh]hecdh}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetj%modnameN classnameNjj)}j]j)}jj5$sbc.crypto_ecdh_encode_keyasbuh1hhj$ubh)}(h h]h }(hj;%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hjh]h*}(hjI%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hp}(hjV%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjG$ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj$hhhj $hK7ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj $hhhj $hK7ubah}(h]j$ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj $hK7hj$hhubjB)}(hhh]ja)}(hencode the private keyh]hencode the private key}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK7hj|%hhubah}(h]h ]h"]h$]h&]uh1jAhj$hhhj $hK7ubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj%jVj%jWjXjYuh1hhhhj hNhNubj[)}(hX**Parameters** ``char *buf`` Buffer allocated by the caller to hold the packet ECDH private key. The buffer should be at least crypto_ecdh_key_len bytes in size. ``unsigned int len`` Length of the packet private key buffer ``const struct ecdh *p`` Buffer with the caller-specified private key **Description** The ECDH implementations operate on a packet representation of the private key. **Return** -EINVAL if buffer has insufficient size, 0 on successh](ja)}(h**Parameters**h]jg)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj%ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK;hj%ubj)}(hhh](j)}(h``char *buf`` Buffer allocated by the caller to hold the packet ECDH private key. The buffer should be at least crypto_ecdh_key_len bytes in size. h](j)}(h ``char *buf``h]j)}(hj%h]h char *buf}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK:hj%ubj)}(hhh]ja)}(hBuffer allocated by the caller to hold the packet ECDH private key. The buffer should be at least crypto_ecdh_key_len bytes in size.h]hBuffer allocated by the caller to hold the packet ECDH private key. The buffer should be at least crypto_ecdh_key_len bytes in size.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK8hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hK:hj%ubj)}(h=``unsigned int len`` Length of the packet private key buffer h](j)}(h``unsigned int len``h]j)}(hj%h]hunsigned int len}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK;hj%ubj)}(hhh]ja)}(h'Length of the packet private key bufferh]h'Length of the packet private key buffer}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj&hK;hj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hK;hj%ubj)}(hF``const struct ecdh *p`` Buffer with the caller-specified private key h](j)}(h``const struct ecdh *p``h]j)}(hj3&h]hconst struct ecdh *p}(hj5&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1&ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKhj%ubja)}(hOThe ECDH implementations operate on a packet representation of the private key.h]hOThe ECDH implementations operate on a packet representation of the private key.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK=hj%ubja)}(h **Return**h]jg)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhK@hj%ubja)}(h5-EINVAL if buffer has insufficient size, 0 on successh]h5-EINVAL if buffer has insufficient size, 0 on success}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKAhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhj hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#crypto_ecdh_decode_key (C function)c.crypto_ecdh_decode_keyhNtauh1hhj hhhNhNubh)}(hhh](h)}(hNint crypto_ecdh_decode_key (const char *buf, unsigned int len, struct ecdh *p)h]h)}(hMint crypto_ecdh_decode_key(const char *buf, unsigned int len, struct ecdh *p)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&hhhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKFubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&hhhj&hKFubj)}(hcrypto_ecdh_decode_keyh]j)}(hcrypto_ecdh_decode_keyh]hcrypto_ecdh_decode_key}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj&hhhj&hKFubj)}(h3(const char *buf, unsigned int len, struct ecdh *p)h](j)}(hconst char *bufh](h)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubh)}(h h]h }(hj$'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hcharh]hchar}(hj2'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubh)}(h h]h }(hj@'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hjh]h*}(hjN'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hbufh]hbuf}(hj['hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj'ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjt'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjp'ubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjp'ubj)}(hinth]hint}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjp'ubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjp'ubj)}(hlenh]hlen}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp'ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj'ubj)}(hstruct ecdh *ph](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj'ubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubh)}(hhh]j)}(hecdhh]hecdh}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetj'modnameN classnameNjj)}j]j)}jj&sbc.crypto_ecdh_decode_keyasbuh1hhj'ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]hp}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj'ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj&hhhj&hKFubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj&hhhj&hKFubah}(h]j&ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj&hKFhj&hhubjB)}(hhh]ja)}(hdecode a private keyh]hdecode a private key}(hjG(hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKFhjD(hhubah}(h]h ]h"]h$]h&]uh1jAhj&hhhj&hKFubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj_(jVj_(jWjXjYuh1hhhhj hNhNubj[)}(hX**Parameters** ``const char *buf`` Buffer holding a packet key that should be decoded ``unsigned int len`` Length of the packet private key buffer ``struct ecdh *p`` Buffer allocated by the caller that is filled with the unpacked ECDH private key. **Description** The unpacking obtains the private key by pointing **p** to the correct location in **buf**. Thus, both pointers refer to the same memory. **Return** -EINVAL if buffer has insufficient size, 0 on successh](ja)}(h**Parameters**h]jg)}(hji(h]h Parameters}(hjk(hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjg(ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKJhjc(ubj)}(hhh](j)}(hG``const char *buf`` Buffer holding a packet key that should be decoded h](j)}(h``const char *buf``h]j)}(hj(h]hconst char *buf}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKGhj(ubj)}(hhh]ja)}(h2Buffer holding a packet key that should be decodedh]h2Buffer holding a packet key that should be decoded}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj(hKGhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKGhj(ubj)}(h=``unsigned int len`` Length of the packet private key buffer h](j)}(h``unsigned int len``h]j)}(hj(h]hunsigned int len}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKHhj(ubj)}(hhh]ja)}(h'Length of the packet private key bufferh]h'Length of the packet private key buffer}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj(hKHhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKHhj(ubj)}(he``struct ecdh *p`` Buffer allocated by the caller that is filled with the unpacked ECDH private key. h](j)}(h``struct ecdh *p``h]j)}(hj(h]hstruct ecdh *p}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKJhj(ubj)}(hhh]ja)}(hQBuffer allocated by the caller that is filled with the unpacked ECDH private key.h]hQBuffer allocated by the caller that is filled with the unpacked ECDH private key.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKIhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj)hKJhj(ubeh}(h]h ]h"]h$]h&]uh1jhjc(ubja)}(h**Description**h]jg)}(hj6)h]h Description}(hj8)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj4)ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKLhjc(ubja)}(hThe unpacking obtains the private key by pointing **p** to the correct location in **buf**. Thus, both pointers refer to the same memory.h](h2The unpacking obtains the private key by pointing }(hjL)hhhNhNubjg)}(h**p**h]hp}(hjT)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjL)ubh to the correct location in }(hjL)hhhNhNubjg)}(h**buf**h]hbuf}(hjf)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjL)ubh/. Thus, both pointers refer to the same memory.}(hjL)hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKKhjc(ubja)}(h **Return**h]jg)}(hj)h]hReturn}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj)ubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKNhjc(ubja)}(h5-EINVAL if buffer has insufficient size, 0 on successh]h5-EINVAL if buffer has insufficient size, 0 on success}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.hhKOhjc(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhj hhhNhNubeh}(h]ecdh-helper-functionsah ]h"]ecdh helper functionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDH Helper Functionsh]hDH Helper Functions}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hhhhhK#ubja)}(h]To use DH with the KPP cipher API, the following data structure and functions should be used.h]h]To use DH with the KPP cipher API, the following data structure and functions should be used.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:37: ./include/crypto/dh.hhK hj)hhubja)}(hTo use DH with KPP, the following functions should be used to operate on a DH private key. The packet private key that can be set with the KPP API function call of crypto_kpp_set_secret.h]hTo use DH with KPP, the following functions should be used to operate on a DH private key. The packet private key that can be set with the KPP API function call of crypto_kpp_set_secret.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:37: ./include/crypto/dh.hhKhj)hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ dh (C struct)c.dhhNtauh1hhj)hhhNhNubh)}(hhh](h)}(hdhh]h)}(h struct dhzh](h)}(hhh]hstruct}(hj)hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)hhhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKubh)}(h h]h }(hj *hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)hhhj *hKubj)}(hdhh]j)}(hj)h]hdh}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj)hhhj *hKubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj)hhhj *hKubah}(h]j)ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj *hKhj)hhubjB)}(hhh]ja)}(hdefine a DH private keyh]hdefine a DH private key}(hj?*hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj<*hhubah}(h]h ]h"]h$]h&]uh1jAhj)hhhj *hKubeh}(h]h ](jOstructeh"]h$]h&]jTjOjUjW*jVjW*jWjXjYuh1hhhhj)hNhNubj[)}(hX**Definition**:: struct dh { const void *key; const void *p; const void *g; unsigned int key_size; unsigned int p_size; unsigned int g_size; }; **Members** ``key`` Private DH key ``p`` Diffie-Hellman parameter P ``g`` Diffie-Hellman generator G ``key_size`` Size of the private DH key ``p_size`` Size of DH parameter P ``g_size`` Size of DH generator Gh](ja)}(h**Definition**::h](jg)}(h**Definition**h]h Definition}(hjc*hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj_*ubh:}(hj_*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj[*ubj)}(hstruct dh { const void *key; const void *p; const void *g; unsigned int key_size; unsigned int p_size; unsigned int g_size; };h]hstruct dh { const void *key; const void *p; const void *g; unsigned int key_size; unsigned int p_size; unsigned int g_size; };}hj|*sbah}(h]h ]h"]h$]h&]j+j,uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj[*ubja)}(h **Members**h]jg)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj*ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK&hj[*ubj)}(hhh](j)}(h``key`` Private DH key h](j)}(h``key``h]j)}(hj*h]hkey}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj*ubj)}(hhh]ja)}(hPrivate DH keyh]hPrivate DH key}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj*ubj)}(h!``p`` Diffie-Hellman parameter P h](j)}(h``p``h]j)}(hj*h]hp}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj*ubj)}(hhh]ja)}(hDiffie-Hellman parameter Ph]hDiffie-Hellman parameter P}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj*ubj)}(h!``g`` Diffie-Hellman generator G h](j)}(h``g``h]j)}(hj+h]hg}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj+ubj)}(hhh]ja)}(hDiffie-Hellman generator Gh]hDiffie-Hellman generator G}(hj7+hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj3+hKhj4+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj3+hKhj*ubj)}(h(``key_size`` Size of the private DH key h](j)}(h ``key_size``h]j)}(hjW+h]hkey_size}(hjY+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhjQ+ubj)}(hhh]ja)}(hSize of the private DH keyh]hSize of the private DH key}(hjp+hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjl+hKhjm+ubah}(h]h ]h"]h$]h&]uh1jhjQ+ubeh}(h]h ]h"]h$]h&]uh1jhjl+hKhj*ubj)}(h"``p_size`` Size of DH parameter P h](j)}(h ``p_size``h]j)}(hj+h]hp_size}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj+ubj)}(hhh]ja)}(hSize of DH parameter Ph]hSize of DH parameter P}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj*ubj)}(h!``g_size`` Size of DH generator Gh](j)}(h ``g_size``h]j)}(hj+h]hg_size}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj+ubj)}(hhh]ja)}(hSize of DH generator Gh]hSize of DH generator G}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj*ubeh}(h]h ]h"]h$]h&]uh1jhj[*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhj)hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌcrypto_dh_key_len (C function)c.crypto_dh_key_lenhNtauh1hhj)hhhNhNubh)}(hhh](h)}(h8unsigned int crypto_dh_key_len (const struct dh *params)h]h)}(h7unsigned int crypto_dh_key_len(const struct dh *params)h](j)}(hunsignedh]hunsigned}(hj#,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,hhhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK*ubh)}(h h]h }(hj2,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,hhhj1,hK*ubj)}(hinth]hint}(hj@,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,hhhj1,hK*ubh)}(h h]h }(hjN,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,hhhj1,hK*ubj)}(hcrypto_dh_key_lenh]j)}(hcrypto_dh_key_lenh]hcrypto_dh_key_len}(hj`,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\,ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj,hhhj1,hK*ubj)}(h(const struct dh *params)h]j)}(hconst struct dh *paramsh](h)}(hjh]hconst}(hj|,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjx,ubh)}(hhh]hstruct}(hj,hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjx,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjx,ubh)}(hhh]j)}(hdhh]hdh}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetj,modnameN classnameNjj)}j]j)}jjb,sbc.crypto_dh_key_lenasbuh1hhjx,ubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjx,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx,ubj)}(hparamsh]hparams}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx,ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhjt,ubah}(h]h ]h"]h$]h&]j+j,uh1jhj,hhhj1,hK*ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj,hhhj1,hK*ubah}(h]j,ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj1,hK*hj,hhubjB)}(hhh]ja)}(h%Obtain the size of the private DH keyh]h%Obtain the size of the private DH key}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK*hj-hhubah}(h]h ]h"]h$]h&]uh1jAhj,hhhj1,hK*ubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj2-jVj2-jWjXjYuh1hhhhj)hNhNubj[)}(hX**Parameters** ``const struct dh *params`` private DH key **Description** This function returns the packet DH key size. A caller can use that with the provided DH private key reference to obtain the required memory size to hold a packet key. **Return** size of the key in bytesh](ja)}(h**Parameters**h]jg)}(hj<-h]h Parameters}(hj>-hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj:-ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK.hj6-ubj)}(hhh]j)}(h+``const struct dh *params`` private DH key h](j)}(h``const struct dh *params``h]j)}(hj[-h]hconst struct dh *params}(hj]-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK+hjU-ubj)}(hhh]ja)}(hprivate DH keyh]hprivate DH key}(hjt-hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjp-hK+hjq-ubah}(h]h ]h"]h$]h&]uh1jhjU-ubeh}(h]h ]h"]h$]h&]uh1jhjp-hK+hjR-ubah}(h]h ]h"]h$]h&]uh1jhj6-ubja)}(h**Description**h]jg)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj-ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK-hj6-ubja)}(hThis function returns the packet DH key size. A caller can use that with the provided DH private key reference to obtain the required memory size to hold a packet key.h]hThis function returns the packet DH key size. A caller can use that with the provided DH private key reference to obtain the required memory size to hold a packet key.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK,hj6-ubja)}(h **Return**h]jg)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj-ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK0hj6-ubja)}(hsize of the key in bytesh]hsize of the key in bytes}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK1hj6-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhj)hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!crypto_dh_encode_key (C function)c.crypto_dh_encode_keyhNtauh1hhj)hhhNhNubh)}(hhh](h)}(hOint crypto_dh_encode_key (char *buf, unsigned int len, const struct dh *params)h]h)}(hNint crypto_dh_encode_key(char *buf, unsigned int len, const struct dh *params)h](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-hhhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK6ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-hhhj.hK6ubj)}(hcrypto_dh_encode_keyh]j)}(hcrypto_dh_encode_keyh]hcrypto_dh_encode_key}(hj#.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](j&j'eh"]h$]h&]j+j,uh1j hj-hhhj.hK6ubj)}(h6(char *buf, unsigned int len, const struct dh *params)h](j)}(h char *bufh](j)}(hcharh]hchar}(hj?.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;.ubh)}(h h]h }(hjM.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;.ubj)}(hjh]h*}(hj[.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;.ubj)}(hbufh]hbuf}(hjh.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;.ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj7.ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}.ubj)}(hinth]hint}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}.ubj)}(hlenh]hlen}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}.ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj7.ubj)}(hconst struct dh *paramsh](h)}(hjh]hconst}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubh)}(hhh]hstruct}(hj.hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.ubh)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubh)}(hhh]j)}(hdhh]hdh}(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjOreftypej reftargetj /modnameN classnameNjj)}j]j)}jj%.sbc.crypto_dh_encode_keyasbuh1hhj.ubh)}(h h]h }(hj+/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.ubj)}(hjh]h*}(hj9/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hparamsh]hparams}(hjF/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphj+j,uh1jhj7.ubeh}(h]h ]h"]h$]h&]j+j,uh1jhj-hhhj.hK6ubeh}(h]h ]h"]h$]h&]j+j,j3uh1hj4j5hj-hhhj.hK6ubah}(h]j-ah ](j9j:eh"]h$]h&]j>j?)j@huh1hhj.hK6hj-hhubjB)}(hhh]ja)}(hencode the private keyh]hencode the private key}(hjp/hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK6hjm/hhubah}(h]h ]h"]h$]h&]uh1jAhj-hhhj.hK6ubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUj/jVj/jWjXjYuh1hhhhj)hNhNubj[)}(hX**Parameters** ``char *buf`` Buffer allocated by the caller to hold the packet DH private key. The buffer should be at least crypto_dh_key_len bytes in size. ``unsigned int len`` Length of the packet private key buffer ``const struct dh *params`` Buffer with the caller-specified private key **Description** The DH implementations operate on a packet representation of the private key. **Return** -EINVAL if buffer has insufficient size, 0 on successh](ja)}(h**Parameters**h]jg)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj/ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK:hj/ubj)}(hhh](j)}(h``char *buf`` Buffer allocated by the caller to hold the packet DH private key. The buffer should be at least crypto_dh_key_len bytes in size. h](j)}(h ``char *buf``h]j)}(hj/h]h char *buf}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK9hj/ubj)}(hhh]ja)}(hBuffer allocated by the caller to hold the packet DH private key. The buffer should be at least crypto_dh_key_len bytes in size.h]hBuffer allocated by the caller to hold the packet DH private key. The buffer should be at least crypto_dh_key_len bytes in size.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK7hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hK9hj/ubj)}(h=``unsigned int len`` Length of the packet private key buffer h](j)}(h``unsigned int len``h]j)}(hj/h]hunsigned int len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK:hj/ubj)}(hhh]ja)}(h'Length of the packet private key bufferh]h'Length of the packet private key buffer}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj0hK:hj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hK:hj/ubj)}(hI``const struct dh *params`` Buffer with the caller-specified private key h](j)}(h``const struct dh *params``h]j)}(hj$0h]hconst struct dh *params}(hj&0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"0ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK;hj0ubj)}(hhh]ja)}(h,Buffer with the caller-specified private keyh]h,Buffer with the caller-specified private key}(hj=0hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj90hK;hj:0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj90hK;hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubja)}(h**Description**h]jg)}(hj_0h]h Description}(hja0hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj]0ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhK=hj/ubja)}(hMThe DH implementations operate on a packet representation of the private key.h]hMThe DH implementations operate on a packet representation of the private key.}(hju0hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKj?)j@huh1hhj0hKEhj0hhubjB)}(hhh]ja)}(hdecode a private keyh]hdecode a private key}(hj92hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKEhj62hhubah}(h]h ]h"]h$]h&]uh1jAhj0hhhj0hKEubeh}(h]h ](jOfunctioneh"]h$]h&]jTjOjUjQ2jVjQ2jWjXjYuh1hhhhj)hNhNubj[)}(hX**Parameters** ``const char *buf`` Buffer holding a packet key that should be decoded ``unsigned int len`` Length of the packet private key buffer ``struct dh *params`` Buffer allocated by the caller that is filled with the unpacked DH private key. **Description** The unpacking obtains the private key by pointing **p** to the correct location in **buf**. Thus, both pointers refer to the same memory. **Return** -EINVAL if buffer has insufficient size, 0 on successh](ja)}(h**Parameters**h]jg)}(hj[2h]h Parameters}(hj]2hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjY2ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKIhjU2ubj)}(hhh](j)}(hG``const char *buf`` Buffer holding a packet key that should be decoded h](j)}(h``const char *buf``h]j)}(hjz2h]hconst char *buf}(hj|2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKFhjt2ubj)}(hhh]ja)}(h2Buffer holding a packet key that should be decodedh]h2Buffer holding a packet key that should be decoded}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj2hKFhj2ubah}(h]h ]h"]h$]h&]uh1jhjt2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKFhjq2ubj)}(h=``unsigned int len`` Length of the packet private key buffer h](j)}(h``unsigned int len``h]j)}(hj2h]hunsigned int len}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKGhj2ubj)}(hhh]ja)}(h'Length of the packet private key bufferh]h'Length of the packet private key buffer}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj2hKGhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKGhjq2ubj)}(hf``struct dh *params`` Buffer allocated by the caller that is filled with the unpacked DH private key. h](j)}(h``struct dh *params``h]j)}(hj2h]hstruct dh *params}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKIhj2ubj)}(hhh]ja)}(hOBuffer allocated by the caller that is filled with the unpacked DH private key.h]hOBuffer allocated by the caller that is filled with the unpacked DH private key.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKHhj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hKIhjq2ubeh}(h]h ]h"]h$]h&]uh1jhjU2ubja)}(h**Description**h]jg)}(hj(3h]h Description}(hj*3hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj&3ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKKhjU2ubja)}(hThe unpacking obtains the private key by pointing **p** to the correct location in **buf**. Thus, both pointers refer to the same memory.h](h2The unpacking obtains the private key by pointing }(hj>3hhhNhNubjg)}(h**p**h]hp}(hjF3hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj>3ubh to the correct location in }(hj>3hhhNhNubjg)}(h**buf**h]hbuf}(hjX3hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhj>3ubh/. Thus, both pointers refer to the same memory.}(hj>3hhhNhNubeh}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKJhjU2ubja)}(h **Return**h]jg)}(hjs3h]hReturn}(hju3hhhNhNubah}(h]h ]h"]h$]h&]uh1jfhjq3ubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKMhjU2ubja)}(h5-EINVAL if buffer has insufficient size, 0 on successh]h5-EINVAL if buffer has insufficient size, 0 on success}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.hhKNhjU2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jZhj)hhhNhNubeh}(h]dh-helper-functionsah ]h"]dh helper functionsah$]h&]uh1hhhhhhhhK#ubeh}(h]%key-agreement-protocol-primitives-kppah ]h"]'key-agreement protocol primitives (kpp)ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj3error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j3j3jjjj}j j j)j)j3j3u nametypes}(j3jjj j)j3uh}(j3hjhhhj(j-jkjpjjj}jjIjNj/ j4 j j jjjBjGjjj jjjjjj8j=j6j;jjj)j j j j&"j+"j$j $j&j&j3j)j)j)j,j,j-j-j0j0u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.