€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ"/translations/zh_CN/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/zh_TW/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/it_IT/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ja_JP/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ko_KR/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/pt_BR/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/sp_SP/crypto/api-kpp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ'Key-agreement Protocol Primitives (KPP)”h]”hŒ'Key-agreement Protocol Primitives (KPP)”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œh²hubjV)�”}”(hhh]”ju)�”}”(hŒOuser-instantiated object which encapsulate algorithms and core processing logic”h]”hŒOuser-instantiated object which encapsulate algorithms and core processing logic”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K)hjˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj>h²hh³jVh´K$ubeh}”(h]”h ]”(jcŒstruct”eh"]”h$]”h&]”jhjcjij£jjj£jk‰jl‰jm‰uh1híh²hhhËh³Nh´Nubjo)�”}”(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 structure”h]”(ju)�”}”(hŒ**Definition**::”h]”(j{)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj«ubhŒ:”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K-hj§ubj–)�”}”(hŒLstruct crypto_kpp { unsigned int reqsize; struct crypto_tfm base; };”h]”hŒLstruct crypto_kpp { unsigned int reqsize; struct crypto_tfm base; };”…”�”}”hjÈsbah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1j•h³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K/hj§ubju)�”}”(hŒ **Members**”h]”j{)�”}”(hjÙh]”hŒMembers”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K4hj§ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒF``reqsize`` Request context size required by algorithm implementation ”h]”(jÊ)�”}”(hŒ ``reqsize``”h]”jÐ)�”}”(hjøh]”hŒreqsize”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K.hjòubjæ)�”}”(hhh]”ju)�”}”(hŒ9Request context size required by algorithm implementation”h]”hŒ9Request context size required by algorithm implementation”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j h´K.hjïubjÄ)�”}”(hŒ3``base`` Common crypto API algorithm data structure”h]”(jÊ)�”}”(hŒ``base``”h]”jÐ)�”}”(hj2h]”hŒbase”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K.hj,ubjæ)�”}”(hhh]”ju)�”}”(hŒ*Common crypto API algorithm data structure”h]”hŒ*Common crypto API algorithm data structure”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K/hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jGh´K.hjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkpp_alg (C struct)”Œ c.kpp_alg”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkpp_alg”h]”hù)�”}”(hŒstruct kpp_alg”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjˆh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆh²hh³j™h´K5ubj")�”}”(hŒkpp_alg”h]”j()�”}”(hj†h]”hŒkpp_alg”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj¨ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjˆh²hh³j™h´K5ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj„h²hh³j™h´K5ubah}”(h]”jah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³j™h´K5hj�h²hubjV)�”}”(hhh]”ju)�”}”(hŒ)generic key-agreement protocol primitives”h]”hŒ)generic key-agreement protocol primitives”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K7hjËh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj�h²hh³j™h´K5ubeh}”(h]”h ]”(jcŒstruct”eh"]”h$]”h&]”jhjcjijæjjjæjk‰jl‰jm‰uh1híh²hhhËh³Nh´Nubjo)�”}”(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 structure”h]”(ju)�”}”(hŒ**Definition**::”h]”(j{)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjîubhŒ:”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K;hjêubj–)�”}”(hX�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; };”h]”hX�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; };”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1j•h³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K=hjêubju)�”}”(hŒ **Members**”h]”j{)�”}”(hjh]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KGhjêubj¿)�”}”(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=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´Kdst_len will be updated to the size required ”h]”(jÊ)�”}”(hŒ``generate_public_key``”h]”jÐ)�”}”(hjuh]”hŒgenerate_public_key”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K@hjoubjæ)�”}”(hhh]”ju)�”}”(hŒ¢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”h]”hŒ¢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”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´K=hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jŠh´K@hj2ubjÄ)�”}”(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Ð)�”}”(hj¯h]”hŒcompute_shared_secret”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KDhj©ubjæ)�”}”(hhh]”ju)�”}”(hŒÉ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]”hŒÉ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”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KAhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jÄh´KDhj2ubjÄ)�”}”(hŒ<``max_size`` Function returns the size of the output buffer ”h]”(jÊ)�”}”(hŒ ``max_size``”h]”jÐ)�”}”(hjéh]”hŒmax_size”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KEhjãubjæ)�”}”(hhh]”ju)�”}”(hŒ.Function returns the size of the output buffer”h]”hŒ.Function returns the size of the output buffer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jþh´KEhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jþh´KEhj2ubjÄ)�”}”(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Ð)�”}”(hj"h]”hŒinit”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KIhjubjæ)�”}”(hhh]”ju)�”}”(hŒ±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]”hŒ±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.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KFhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j7h´KIhj2ubjÄ)�”}”(hŒ'``exit`` Undo everything **init** did. ”h]”(jÊ)�”}”(hŒ``exit``”h]”jÐ)�”}”(hj\h]”hŒexit”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KJhjVubjæ)�”}”(hhh]”ju)�”}”(hŒUndo everything **init** did.”h]”(hŒUndo everything ”…”�”}”(hjuh²hh³Nh´Nubj{)�”}”(hŒ**init**”h]”hŒinit”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjuubhŒ did.”…”�”}”(hjuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³jqh´KJhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jqh´KJhj2ubjÄ)�”}”(hŒ3``base`` Common crypto API algorithm data structure”h]”(jÊ)�”}”(hŒ``base``”h]”jÐ)�”}”(hj§h]”hŒbase”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KKhj¡ubjæ)�”}”(hhh]”ju)�”}”(hŒ*Common crypto API algorithm data structure”h]”hŒ*Common crypto API algorithm data structure”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KLhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j¼h´KKhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjêubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkpp_secret (C struct)”Œ c.kpp_secret”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ kpp_secret”h]”hù)�”}”(hŒstruct kpp_secret”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjýh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´KRubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýh²hh³jh´KRubj")�”}”(hŒ kpp_secret”h]”j()�”}”(hjûh]”hŒ kpp_secret”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjýh²hh³jh´KRubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjùh²hh³jh´KRubah}”(h]”jôah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jh´KRhjöh²hubjV)�”}”(hhh]”ju)�”}”(hŒ&small header for packing secret buffer”h]”hŒ&small header for packing secret buffer”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´Mhj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjöh²hh³jh´KRubeh}”(h]”h ]”(jcŒstruct”eh"]”h$]”h&]”jhjcjij[jjj[jk‰jl‰jm‰uh1híh²hhhËh³Nh´Nubjo)�”}”(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 struct”h]”(ju)�”}”(hŒ**Definition**::”h]”(j{)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjcubhŒ:”…”�”}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´M hj_ubj–)�”}”(hŒGstruct kpp_secret { unsigned short type; unsigned short len; };”h]”hŒGstruct kpp_secret { unsigned short type; unsigned short len; };”…”�”}”hj€sbah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1j•h³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´Mhj_ubju)�”}”(hŒ **Members**”h]”j{)�”}”(hj‘h]”hŒMembers”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´Mhj_ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒB``type`` define type of secret. Each kpp type will define its own ”h]”(jÊ)�”}”(hŒ``type``”h]”jÐ)�”}”(hj°h]”hŒtype”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´M hjªubjæ)�”}”(hhh]”ju)�”}”(hŒ8define type of secret. Each kpp type will define its own”h]”hŒ8define type of secret. Each kpp type will define its own”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jÅh´M hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jÅh´M hj§ubjÄ)�”}”(hŒR``len`` specify the len of the secret, include the header, that follows the struct”h]”(jÊ)�”}”(hŒ``len``”h]”jÐ)�”}”(hjéh]”hŒlen”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:7: ./include/crypto/kpp.h”h´M hjãubjæ)�”}”(hhh]”ju)�”}”(hŒJspecify the len of the secret, include the header, that follows the struct”h]”hŒJspecify the len of the secret, include the header, that follows the struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jþh´M hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jþh´M hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhhËh²hh³Nh´Nubeh}”(h]”ŒBkey-agreement-protocol-primitives-kpp-cipher-algorithm-definitions”ah ]”h"]”ŒDkey-agreement protocol primitives (kpp) cipher algorithm definitions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ2Key-agreement Protocol Primitives (KPP) Cipher API”h]”hŒ2Key-agreement Protocol Primitives (KPP) Cipher API”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj1h²hh³hÊh´K ubju)�”}”(hŒfThe KPP API is used with the algorithm type CRYPTO_ALG_TYPE_KPP (listed as type "kpp" in /proc/crypto)”h]”hŒjThe KPP API is used with the algorithm type CRYPTO_ALG_TYPE_KPP (listed as type “kppâ€� in /proc/crypto)”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:13: ./include/crypto/kpp.h”h´K\hj1h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒcrypto_alloc_kpp (C function)”Œc.crypto_alloc_kpp”hNt”auh1hÜhj1h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOstruct crypto_kpp * crypto_alloc_kpp (const char *alg_name, u32 type, u32 mask)”h]”hù)�”}”(hŒMstruct crypto_kpp *crypto_alloc_kpp(const char *alg_name, u32 type, u32 mask)”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjfh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Kcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfh²hh³jwh´Kcubh)�”}”(hhh]”j()�”}”(hŒ crypto_kpp”h]”hŒ crypto_kpp”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”Œ identifier”Œ reftarget”j‹Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j¤Œ ASTIdentifier”“”)�”}”jŸŒcrypto_alloc_kpp”sbŒc.crypto_alloc_kpp”†”asbuh1hhjfh²hh³jwh´Kcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfh²hh³jwh´KcubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jÀhjfh²hh³jwh´Kcubj")�”}”(hŒcrypto_alloc_kpp”h]”j()�”}”(hj¯h]”hŒcrypto_alloc_kpp”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjÑubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjfh²hh³jwh´KcubhŒdesc_parameterlist”“”)�”}”(hŒ*(const char *alg_name, u32 type, u32 mask)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst char *alg_name”h]”(hÿ)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjðubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðubhŒdesc_sig_keyword_type”“”)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j hjðubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjðubj()�”}”(hŒalg_name”h]”hŒalg_name”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjêubjï)�”}”(hŒu32 type”h]”(h)�”}”(hhh]”j()�”}”(hŒu32”h]”hŒu32”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjU ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jZ Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j­Œc.crypto_alloc_kpp”†”asbuh1hhjQ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ ubj()�”}”(hŒtype”h]”hŒtype”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjQ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjêubjï)�”}”(hŒu32 mask”h]”(h)�”}”(hhh]”j()�”}”(hŒu32”h]”hŒu32”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j¢ Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j­Œc.crypto_alloc_kpp”†”asbuh1hhj™ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ ubj()�”}”(hŒmask”h]”hŒmask”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj™ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjêubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjfh²hh³jwh´Kcubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjbh²hh³jwh´Kcubah}”(h]”j]ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jwh´Kchj_h²hubjV)�”}”(hhh]”ju)�”}”(hŒallocate KPP tfm handle”h]”hŒallocate KPP tfm handle”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Kchjó h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj_h²hh³jwh´Kcubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjij jjj jk‰jl‰jm‰uh1híh²hhj1h³Nh´Nubjo)�”}”(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]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Kghj ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒN``const char *alg_name`` is the name of the kpp algorithm (e.g. "dh", "ecdh") ”h]”(jÊ)�”}”(hŒ``const char *alg_name``”h]”jÐ)�”}”(hj7 h]”hŒconst char *alg_name”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Kdhj1 ubjæ)�”}”(hhh]”ju)�”}”(hŒ4is the name of the kpp algorithm (e.g. "dh", "ecdh")”h]”hŒ(struct crypto_kpp *tfm, const void *buffer, unsigned int len)”h]”(jï)�”}”(hŒstruct crypto_kpp *tfm”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubh)�”}”(hhh]”j()�”}”(hŒ crypto_kpp”h]”hŒ crypto_kpp”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj; ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j@ Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj sbŒc.crypto_kpp_set_secret”†”asbuh1hhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj ubj()�”}”(hŒtfm”h]”hŒtfm”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj ubjï)�”}”(hŒconst void *buffer”h]”(hÿ)�”}”(hjöh]”hŒconst”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjŽ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽ ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjŽ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽ ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjŽ ubj()�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj ubjï)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjë ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjë ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë ubj()�”}”(hŒlen”h]”hŒlen”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjë ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjß h²hh³jñ h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjÛ h²hh³jñ h´Mubah}”(h]”jÖ ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jñ h´MhjØ h²hubjV)�”}”(hhh]”ju)�”}”(hŒInvoke kpp operation”h]”hŒInvoke kpp operation”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MhjNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjØ h²hh³jñ h´Mubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijijjjijk‰jl‰jm‰uh1híh²hhj1h³Nh´Nubjo)�”}”(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 error”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hjsh]”hŒ Parameters”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Mhjmubj¿)�”}”(hhh]”(jÄ)�”}”(hŒ&``struct crypto_kpp *tfm`` tfm handle ”h]”(jÊ)�”}”(hŒ``struct crypto_kpp *tfm``”h]”jÐ)�”}”(hj’h]”hŒstruct crypto_kpp *tfm”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MhjŒubjæ)�”}”(hhh]”ju)�”}”(hŒ tfm handle”h]”hŒ tfm handle”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j§h´Mhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j§h´Mhj‰ubjÄ)�”}”(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Ð)�”}”(hjËh]”hŒconst void *buffer”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MhjÅubjæ)�”}”(hhh]”ju)�”}”(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).”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Mhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jàh´Mhj‰ubjÄ)�”}”(hŒ>``unsigned int len`` Length of the packet private key buffer. ”h]”(jÊ)�”}”(hŒ``unsigned int len``”h]”jÐ)�”}”(hjh]”hŒunsigned int len”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´Mhjÿubjæ)�”}”(hhh]”ju)�”}”(hŒ(Length of the packet private key buffer.”h]”hŒ(Length of the packet private key buffer.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jh´Mhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjmubju)�”}”(hŒ**Description**”h]”j{)�”}”(hj@h]”hŒ Description”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´M hjmubju)�”}”(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 )�”}”(hŒint”h]”hŒint”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj_h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´M=ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_h²hh³jqh´M=ubj")�”}”(hŒ crypto_kpp_compute_shared_secret”h]”j()�”}”(hŒ crypto_kpp_compute_shared_secret”h]”hŒ crypto_kpp_compute_shared_secret”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj€ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj_h²hh³jqh´M=ubjé)�”}”(hŒ(struct kpp_request *req)”h]”jï)�”}”(hŒstruct kpp_request *req”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœubh)�”}”(hhh]”j()�”}”(hŒ kpp_request”h]”hŒ kpp_request”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jÀŒmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj†sbŒ"c.crypto_kpp_compute_shared_secret”†”asbuh1hhjœubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjœubj()�”}”(hŒreq”h]”hŒreq”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj˜ubah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhj_h²hh³jqh´M=ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj[h²hh³jqh´M=ubah}”(h]”jVah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jqh´M=hjXh²hubjV)�”}”(hhh]”ju)�”}”(hŒInvoke kpp operation”h]”hŒInvoke kpp operation”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´M=hj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjXh²hh³jqh´M=ubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjij;jjj;jk‰jl‰jm‰uh1híh²hhj1h³Nh´Nubjo)�”}”(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 error”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hjEh]”hŒ Parameters”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MAhj?ubj¿)�”}”(hhh]”jÄ)�”}”(hŒ,``struct kpp_request *req`` kpp key request ”h]”(jÊ)�”}”(hŒ``struct kpp_request *req``”h]”jÐ)�”}”(hjdh]”hŒstruct kpp_request *req”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MBhj^ubjæ)�”}”(hhh]”ju)�”}”(hŒkpp key request”h]”hŒkpp key request”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jyh´MBhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jyh´MBhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾hj?ubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjŸh]”hŒ Description”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MDhj?ubju)�”}”(hŒfFunction invokes the specific kpp operation for computing the shared secret for a given kpp algorithm.”h]”hŒfFunction invokes the specific kpp operation for computing the shared secret for a given kpp algorithm.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´M>hj?ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hjÆh]”hŒReturn”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MAhj?ubju)�”}”(hŒ,zero on success; error code in case of error”h]”hŒ,zero on success; error code in case of error”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MDhj?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj1h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒcrypto_kpp_maxsize (C function)”Œc.crypto_kpp_maxsize”hNt”auh1hÜhj1h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8unsigned int crypto_kpp_maxsize (struct crypto_kpp *tfm)”h]”hù)�”}”(hŒ7unsigned int crypto_kpp_maxsize(struct crypto_kpp *tfm)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MNubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³jh´MNubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjh²hh³jh´MNubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³jh´MNubj")�”}”(hŒcrypto_kpp_maxsize”h]”j()�”}”(hŒcrypto_kpp_maxsize”h]”hŒcrypto_kpp_maxsize”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjDubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjh²hh³jh´MNubjé)�”}”(hŒ(struct crypto_kpp *tfm)”h]”jï)�”}”(hŒstruct crypto_kpp *tfm”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`ubh)�”}”(hhh]”j()�”}”(hŒ crypto_kpp”h]”hŒ crypto_kpp”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j„Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸjJsbŒc.crypto_kpp_maxsize”†”asbuh1hhj`ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj`ubj()�”}”(hŒtfm”h]”hŒtfm”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj\ubah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjh²hh³jh´MNubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jG•ˆuh1højHjIhjh²hh³jh´MNubah}”(h]”jþah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jh´MNhjh²hubjV)�”}”(hhh]”ju)�”}”(hŒGet len for output buffer”h]”hŒGet len for output buffer”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MNhjäh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjh²hh³jh´MNubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijÿjjjÿjk‰jl‰jm‰uh1híh²hhj1h³Nh´Nubjo)�”}”(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]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MRhjubj¿)�”}”(hhh]”jÄ)�”}”(hŒL``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() ”h]”(jÊ)�”}”(hŒ``struct crypto_kpp *tfm``”h]”jÐ)�”}”(hj(h]”hŒstruct crypto_kpp *tfm”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MUhj"ubjæ)�”}”(hhh]”ju)�”}”(hŒ0KPP tfm handle allocated with crypto_alloc_kpp()”h]”hŒ0KPP tfm handle allocated with crypto_alloc_kpp()”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j=h´MUhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j=h´MUhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjch]”hŒ Description”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MWhjubju)�”}”(hŒñ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]”hŒñ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.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:16: ./include/crypto/kpp.h”h´MOhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj1h²hh³Nh´Nubeh}”(h]”Œ0key-agreement-protocol-primitives-kpp-cipher-api”ah ]”h"]”Œ2key-agreement protocol primitives (kpp) cipher api”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒ=Key-agreement Protocol Primitives (KPP) Cipher Request Handle”h]”hŒ=Key-agreement Protocol Primitives (KPP) Cipher Request Handle”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj—h²hh³hÊh´KubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkpp_request_alloc (C function)”Œc.kpp_request_alloc”hNt”auh1hÜhj—h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJstruct kpp_request * kpp_request_alloc (struct crypto_kpp *tfm, gfp_t gfp)”h]”hù)�”}”(hŒHstruct kpp_request *kpp_request_alloc(struct crypto_kpp *tfm, gfp_t gfp)”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj½h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K­ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½h²hh³jÎh´K­ubh)�”}”(hhh]”j()�”}”(hŒ kpp_request”h]”hŒ kpp_request”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jâŒmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸŒkpp_request_alloc”sbŒc.kpp_request_alloc”†”asbuh1hhj½h²hh³jÎh´K­ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½h²hh³jÎh´K­ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj½h²hh³jÎh´K­ubj")�”}”(hŒkpp_request_alloc”h]”j()�”}”(hjþh]”hŒkpp_request_alloc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj½h²hh³jÎh´K­ubjé)�”}”(hŒ#(struct crypto_kpp *tfm, gfp_t gfp)”h]”(jï)�”}”(hŒstruct crypto_kpp *tfm”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubh)�”}”(hhh]”j()�”}”(hŒ crypto_kpp”h]”hŒ crypto_kpp”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j[Œmodname”NŒ classname”Nj£j¦)�”}”j©]”jüŒc.kpp_request_alloc”†”asbuh1hhj7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj7ubj()�”}”(hŒtfm”h]”hŒtfm”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj3ubjï)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j()�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j°Œmodname”NŒ classname”Nj£j¦)�”}”j©]”jüŒc.kpp_request_alloc”†”asbuh1hhj§ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§ubj()�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj3ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhj½h²hh³jÎh´K­ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj¹h²hh³jÎh´K­ubah}”(h]”j´ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jÎh´K­hj¶h²hubjV)�”}”(hhh]”ju)�”}”(hŒallocates kpp request”h]”hŒallocates kpp request”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K­hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj¶h²hh³jÎh´K­ubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijjjjjk‰jl‰jm‰uh1híh²hhj—h³Nh´Nubjo)�”}”(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]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj&h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K±hj ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒL``struct crypto_kpp *tfm`` KPP tfm handle allocated with crypto_alloc_kpp() ”h]”(jÊ)�”}”(hŒ``struct crypto_kpp *tfm``”h]”jÐ)�”}”(hjEh]”hŒstruct crypto_kpp *tfm”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K¯hj?ubjæ)�”}”(hhh]”ju)�”}”(hŒ0KPP tfm handle allocated with crypto_alloc_kpp()”h]”hŒ0KPP tfm handle allocated with crypto_alloc_kpp()”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jZh´K¯hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jZh´K¯hj<ubjÄ)�”}”(hŒ``gfp_t gfp`` allocation flags ”h]”(jÊ)�”}”(hŒ ``gfp_t gfp``”h]”jÐ)�”}”(hj~h]”hŒ gfp_t gfp”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K°hjxubjæ)�”}”(hhh]”ju)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j“h´K°hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j“h´K°hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hj ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hj¹h]”hŒReturn”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K²hj ubju)�”}”(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.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K²hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj—h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkpp_request_free (C function)”Œc.kpp_request_free”hNt”auh1hÜhj—h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/void kpp_request_free (struct kpp_request *req)”h]”hù)�”}”(hŒ.void kpp_request_free(struct kpp_request *req)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjúh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÁubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúh²hh³j h´KÁubj")�”}”(hŒkpp_request_free”h]”j()�”}”(hŒkpp_request_free”h]”hŒkpp_request_free”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjúh²hh³j h´KÁubjé)�”}”(hŒ(struct kpp_request *req)”h]”jï)�”}”(hŒstruct kpp_request *req”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubh)�”}”(hhh]”j()�”}”(hŒ kpp_request”h]”hŒ kpp_request”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j[Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj!sbŒc.kpp_request_free”†”asbuh1hhj7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj7ubj()�”}”(hŒreq”h]”hŒreq”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj3ubah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjúh²hh³j h´KÁubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjöh²hh³j h´KÁubah}”(h]”jñah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³j h´KÁhjóh²hubjV)�”}”(hhh]”ju)�”}”(hŒzeroize and free kpp request”h]”hŒzeroize and free kpp request”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÁhj»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjóh²hh³j h´KÁubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijÖjjjÖjk‰jl‰jm‰uh1híh²hhj—h³Nh´Nubjo)�”}”(hŒ=**Parameters** ``struct kpp_request *req`` request to free”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hjàh]”hŒ Parameters”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÅhjÚubj¿)�”}”(hhh]”jÄ)�”}”(hŒ+``struct kpp_request *req`` request to free”h]”(jÊ)�”}”(hŒ``struct kpp_request *req``”h]”jÐ)�”}”(hjÿh]”hŒstruct kpp_request *req”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÇhjùubjæ)�”}”(hhh]”ju)�”}”(hŒrequest to free”h]”hŒrequest to free”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÃhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jh´KÇhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj—h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%kpp_request_set_callback (C function)”Œc.kpp_request_set_callback”hNt”auh1hÜhj—h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒgvoid kpp_request_set_callback (struct kpp_request *req, u32 flgs, crypto_completion_t cmpl, void *data)”h]”hù)�”}”(hŒfvoid kpp_request_set_callback(struct kpp_request *req, u32 flgs, crypto_completion_t cmpl, void *data)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjUh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KËubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUh²hh³jgh´KËubj")�”}”(hŒkpp_request_set_callback”h]”j()�”}”(hŒkpp_request_set_callback”h]”hŒkpp_request_set_callback”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjvubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjUh²hh³jgh´KËubjé)�”}”(hŒI(struct kpp_request *req, u32 flgs, crypto_completion_t cmpl, void *data)”h]”(jï)�”}”(hŒstruct kpp_request *req”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ubh)�”}”(hhh]”j()�”}”(hŒ kpp_request”h]”hŒ kpp_request”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j¶Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj|sbŒc.kpp_request_set_callback”†”asbuh1hhj’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj’ubj()�”}”(hŒreq”h]”hŒreq”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŽubjï)�”}”(hŒu32 flgs”h]”(h)�”}”(hhh]”j()�”}”(hŒu32”h]”hŒu32”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j Œmodname”NŒ classname”Nj£j¦)�”}”j©]”jÐŒc.kpp_request_set_callback”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj()�”}”(hŒflgs”h]”hŒflgs”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŽubjï)�”}”(hŒcrypto_completion_t cmpl”h]”(h)�”}”(hhh]”j()�”}”(hŒcrypto_completion_t”h]”hŒcrypto_completion_t”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jUŒmodname”NŒ classname”Nj£j¦)�”}”j©]”jÐŒc.kpp_request_set_callback”†”asbuh1hhjLubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubj()�”}”(hŒcmpl”h]”hŒcmpl”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŽubjï)�”}”(hŒ void *data”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj”ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj”ubj()�”}”(hŒdata”h]”hŒdata”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŽubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjUh²hh³jgh´KËubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjQh²hh³jgh´KËubah}”(h]”jLah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jgh´KËhjNh²hubjV)�”}”(hhh]”ju)�”}”(hŒSets an asynchronous callback.”h]”hŒSets an asynchronous callback.”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KËhjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjNh²hh³jgh´KËubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijjjjjk‰jl‰jm‰uh1híh²hhj—h³Nh´Nubjo)�”}”(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]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj h]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÏhjubj¿)�”}”(hhh]”(jÄ)�”}”(hŒF``struct kpp_request *req`` request that the callback will be set for ”h]”(jÊ)�”}”(hŒ``struct kpp_request *req``”h]”jÐ)�”}”(hj,h]”hŒstruct kpp_request *req”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÐhj&ubjæ)�”}”(hhh]”ju)�”}”(hŒ)request that the callback will be set for”h]”hŒ)request that the callback will be set for”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jAh´KÐhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jAh´KÐhj#ubjÄ)�”}”(hŒ?``u32 flgs`` specify for instance if the operation may backlog ”h]”(jÊ)�”}”(hŒ ``u32 flgs``”h]”jÐ)�”}”(hjeh]”hŒu32 flgs”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÑhj_ubjæ)�”}”(hhh]”ju)�”}”(hŒ1specify for instance if the operation may backlog”h]”hŒ1specify for instance if the operation may backlog”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jzh´KÑhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jzh´KÑhj#ubjÄ)�”}”(hŒ;``crypto_completion_t cmpl`` callback which will be called ”h]”(jÊ)�”}”(hŒ``crypto_completion_t cmpl``”h]”jÐ)�”}”(hjžh]”hŒcrypto_completion_t cmpl”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÒhj˜ubjæ)�”}”(hhh]”ju)�”}”(hŒcallback which will be called”h]”hŒcallback which will be called”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j³h´KÒhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j³h´KÒhj#ubjÄ)�”}”(hŒ/``void *data`` private data used by the caller ”h]”(jÊ)�”}”(hŒ``void *data``”h]”jÐ)�”}”(hj×h]”hŒ void *data”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÓhjÑubjæ)�”}”(hhh]”ju)�”}”(hŒprivate data used by the caller”h]”hŒprivate data used by the caller”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jìh´KÓhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jìh´KÓhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÕhjubju)�”}”(hŒVCallback will be called when an asynchronous operation on a given request is finished.”h]”hŒVCallback will be called when an asynchronous operation on a given request is finished.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KÌhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj—h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kpp_request_set_input (C function)”Œc.kpp_request_set_input”hNt”auh1hÜhj—h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒgvoid kpp_request_set_input (struct kpp_request *req, struct scatterlist *input, unsigned int input_len)”h]”hù)�”}”(hŒfvoid kpp_request_set_input(struct kpp_request *req, struct scatterlist *input, unsigned int input_len)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjSh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kàubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSh²hh³jeh´Kàubj")�”}”(hŒkpp_request_set_input”h]”j()�”}”(hŒkpp_request_set_input”h]”hŒkpp_request_set_input”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjtubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjSh²hh³jeh´Kàubjé)�”}”(hŒL(struct kpp_request *req, struct scatterlist *input, unsigned int input_len)”h]”(jï)�”}”(hŒstruct kpp_request *req”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubh)�”}”(hhh]”j()�”}”(hŒ kpp_request”h]”hŒ kpp_request”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j´Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸjzsbŒc.kpp_request_set_input”†”asbuh1hhj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj�ubj()�”}”(hŒreq”h]”hŒreq”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŒubjï)�”}”(hŒstruct scatterlist *input”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubh)�”}”(hhh]”j()�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j&Œmodname”NŒ classname”Nj£j¦)�”}”j©]”jÎŒc.kpp_request_set_input”†”asbuh1hhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjubj()�”}”(hŒinput”h]”hŒinput”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŒubjï)�”}”(hŒunsigned int input_len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjrubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjrubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrubj()�”}”(hŒ input_len”h]”hŒ input_len”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjŒubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjSh²hh³jeh´Kàubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjOh²hh³jeh´Kàubah}”(h]”jJah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jeh´KàhjLh²hubjV)�”}”(hhh]”ju)�”}”(hŒSets input buffer”h]”hŒSets input buffer”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KàhjÕh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjLh²hh³jeh´Kàubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijðjjjðjk‰jl‰jm‰uh1híh²hhj—h³Nh´Nubjo)�”}”(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_key”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hjúh]”hŒ Parameters”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kähjôubj¿)�”}”(hhh]”(jÄ)�”}”(hŒ(``struct kpp_request *req`` kpp request ”h]”(jÊ)�”}”(hŒ``struct kpp_request *req``”h]”jÐ)�”}”(hjh]”hŒstruct kpp_request *req”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kähjubjæ)�”}”(hhh]”ju)�”}”(hŒ kpp request”h]”hŒ kpp request”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j.h´Kähj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j.h´KähjubjÄ)�”}”(hŒ8``struct scatterlist *input`` ptr to input scatter list ”h]”(jÊ)�”}”(hŒ``struct scatterlist *input``”h]”jÐ)�”}”(hjRh]”hŒstruct scatterlist *input”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KåhjLubjæ)�”}”(hhh]”ju)�”}”(hŒptr to input scatter list”h]”hŒptr to input scatter list”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jgh´Kåhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jgh´KåhjubjÄ)�”}”(hŒ:``unsigned int input_len`` size of the input scatter list ”h]”(jÊ)�”}”(hŒ``unsigned int input_len``”h]”jÐ)�”}”(hj‹h]”hŒunsigned int input_len”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kæhj…ubjæ)�”}”(hhh]”ju)�”}”(hŒsize of the input scatter list”h]”hŒsize of the input scatter list”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j h´Kæhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j h´Kæhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjôubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjÆh]”hŒ Description”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kèhjôubju)�”}”(hŒ/Sets parameters required by generate_public_key”h]”hŒ/Sets parameters required by generate_public_key”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Káhjôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj—h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#kpp_request_set_output (C function)”Œc.kpp_request_set_output”hNt”auh1hÜhj—h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒjvoid kpp_request_set_output (struct kpp_request *req, struct scatterlist *output, unsigned int output_len)”h]”hù)�”}”(hŒivoid kpp_request_set_output(struct kpp_request *req, struct scatterlist *output, unsigned int output_len)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kñubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh²hh³jh´Kñubj")�”}”(hŒkpp_request_set_output”h]”j()�”}”(hŒkpp_request_set_output”h]”hŒkpp_request_set_output”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj(ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjh²hh³jh´Kñubjé)�”}”(hŒN(struct kpp_request *req, struct scatterlist *output, unsigned int output_len)”h]”(jï)�”}”(hŒstruct kpp_request *req”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDubh)�”}”(hhh]”j()�”}”(hŒ kpp_request”h]”hŒ kpp_request”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jhŒmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj.sbŒc.kpp_request_set_output”†”asbuh1hhjDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjDubj()�”}”(hŒreq”h]”hŒreq”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj@ubjï)�”}”(hŒstruct scatterlist *output”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj¶ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ubh)�”}”(hhh]”j()�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jÚŒmodname”NŒ classname”Nj£j¦)�”}”j©]”j‚Œc.kpp_request_set_output”†”asbuh1hhj¶ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj¶ubj()�”}”(hŒoutput”h]”hŒoutput”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj@ubjï)�”}”(hŒunsigned int output_len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj&ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj&ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ubj()�”}”(hŒ output_len”h]”hŒ output_len”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj@ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjh²hh³jh´Kñubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjh²hh³jh´Kñubah}”(h]”jþah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jh´Kñhjh²hubjV)�”}”(hhh]”ju)�”}”(hŒSets output buffer”h]”hŒSets output buffer”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kñhj‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjh²hh³jh´Kñubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjij¤jjj¤jk‰jl‰jm‰uh1híh²hhj—h³Nh´Nubjo)�”}”(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 operation”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj®h]”hŒ Parameters”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kõhj¨ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒ(``struct kpp_request *req`` kpp request ”h]”(jÊ)�”}”(hŒ``struct kpp_request *req``”h]”jÐ)�”}”(hjÍh]”hŒstruct kpp_request *req”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´KõhjÇubjæ)�”}”(hhh]”ju)�”}”(hŒ kpp request”h]”hŒ kpp request”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jâh´Kõhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jâh´KõhjÄubjÄ)�”}”(hŒ:``struct scatterlist *output`` ptr to output scatter list ”h]”(jÊ)�”}”(hŒ``struct scatterlist *output``”h]”jÐ)�”}”(hj h]”hŒstruct scatterlist *output”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Köhj ubjæ)�”}”(hhh]”ju)�”}”(hŒptr to output scatter list”h]”hŒptr to output scatter list”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j h´Köhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j h´KöhjÄubjÄ)�”}”(hŒ<``unsigned int output_len`` size of the output scatter list ”h]”(jÊ)�”}”(hŒ``unsigned int output_len``”h]”jÐ)�”}”(hj? h]”hŒunsigned int output_len”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´K÷hj9 ubjæ)�”}”(hhh]”ju)�”}”(hŒsize of the output scatter list”h]”hŒsize of the output scatter list”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jT h´K÷hjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jT h´K÷hjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hj¨ubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjz h]”hŒ Description”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kùhj¨ubju)�”}”(hŒ)Sets parameters required by kpp operation”h]”hŒ)Sets parameters required by kpp operation”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒS/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:22: ./include/crypto/kpp.h”h´Kòhj¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj—h²hh³Nh´Nubeh}”(h]”Œ;key-agreement-protocol-primitives-kpp-cipher-request-handle”ah ]”h"]”Œ=key-agreement protocol primitives (kpp) cipher request handle”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒECDH Helper Functions”h]”hŒECDH Helper Functions”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj® h²hh³hÊh´Kubju)�”}”(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¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:28: ./include/crypto/ecdh.h”h´K hj® h²hubju)�”}”(hŒRThe ECC curves known to the ECDH implementation are specified in this header file.”h]”hŒRThe ECC curves known to the ECDH implementation are specified in this header file.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:28: ./include/crypto/ecdh.h”h´Khj® h²hubju)�”}”(hŒ¿To 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]”hŒ¿To 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Ý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:28: ./include/crypto/ecdh.h”h´Khj® h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒecdh (C struct)”Œc.ecdh”hNt”auh1hÜhj® h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒecdh”h]”hù)�”}”(hŒ struct ecdh”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj!h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´Kubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!h²hh³j!h´Kubj")�”}”(hŒecdh”h]”j()�”}”(hjÿ h]”hŒecdh”…”�”}”(hj%!h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj!!ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj!h²hh³j!h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjý h²hh³j!h´Kubah}”(h]”jø ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³j!h´Khjú h²hubjV)�”}”(hhh]”ju)�”}”(hŒdefine an ECDH private key”h]”hŒdefine an ECDH private key”…”�”}”(hjG!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K hjD!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjú h²hh³j!h´Kubeh}”(h]”h ]”(jcŒstruct”eh"]”h$]”h&]”jhjcjij_!jjj_!jk‰jl‰jm‰uh1híh²hhj® h³Nh´Nubjo)�”}”(hŒ¬**Definition**:: struct ecdh { char *key; unsigned short key_size; }; **Members** ``key`` Private ECDH key ``key_size`` Size of the private ECDH key”h]”(ju)�”}”(hŒ**Definition**::”h]”(j{)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjk!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjg!ubhŒ:”…”�”}”(hjg!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K$hjc!ubj–)�”}”(hŒ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K+hj;#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj<"h²hh³jU"h´K+ubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijV#jjjV#jk‰jl‰jm‰uh1híh²hhj® h³Nh´Nubjo)�”}”(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 bytes”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj`#h]”hŒ Parameters”…”�”}”(hjb#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj^#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K/hjZ#ubj¿)�”}”(hhh]”jÄ)�”}”(hŒ/``const struct ecdh *params`` private ECDH key ”h]”(jÊ)�”}”(hŒ``const struct ecdh *params``”h]”jÐ)�”}”(hj#h]”hŒconst struct ecdh *params”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj}#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K,hjy#ubjæ)�”}”(hhh]”ju)�”}”(hŒprivate ECDH key”h]”hŒprivate ECDH key”…”�”}”(hj˜#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j”#h´K,hj•#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjy#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j”#h´K,hjv#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjZ#ubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjº#h]”hŒ Description”…”�”}”(hj¼#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¸#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K.hjZ#ubju)�”}”(hŒ«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.”h]”hŒ«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.”…”�”}”(hjÐ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K-hjZ#ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hjá#h]”hŒReturn”…”�”}”(hjã#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjß#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K1hjZ#ubju)�”}”(hŒsize of the key in bytes”h]”hŒsize of the key in bytes”…”�”}”(hj÷#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K2hjZ#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj® h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#crypto_ecdh_encode_key (C function)”Œc.crypto_ecdh_encode_key”hNt”auh1hÜhj® h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒNint crypto_ecdh_encode_key (char *buf, unsigned int len, const struct ecdh *p)”h]”hù)�”}”(hŒMint crypto_ecdh_encode_key(char *buf, unsigned int len, const struct ecdh *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj&$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj"$h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"$h²hh³j4$h´K7ubj")�”}”(hŒcrypto_ecdh_encode_key”h]”j()�”}”(hŒcrypto_ecdh_encode_key”h]”hŒcrypto_ecdh_encode_key”…”�”}”(hjG$h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjC$ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj"$h²hh³j4$h´K7ubjé)�”}”(hŒ3(char *buf, unsigned int len, const struct ecdh *p)”h]”(jï)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjc$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj_$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_$ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj_$ubj()�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjŒ$h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj_$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj[$ubjï)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¥$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¡$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡$ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÁ$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¡$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡$ubj()�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÝ$h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj¡$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj[$ubjï)�”}”(hŒconst struct ecdh *p”h]”(hÿ)�”}”(hjöh]”hŒconst”…”�”}”(hjö$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjò$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjò$ubhÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjò$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjò$ubh)�”}”(hhh]”j()�”}”(hŒecdh”h]”hŒecdh”…”�”}”(hj/%h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj,%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j1%Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸjI$sbŒc.crypto_ecdh_encode_key”†”asbuh1hhjò$ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjò$ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj]%h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjò$ubj()�”}”(hjÍh]”hŒp”…”�”}”(hjj%h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjò$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj[$ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhj"$h²hh³j4$h´K7ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj$h²hh³j4$h´K7ubah}”(h]”j$ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³j4$h´K7hj$h²hubjV)�”}”(hhh]”ju)�”}”(hŒencode the private key”h]”hŒencode the private key”…”�”}”(hj“%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K7hj�%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj$h²hh³j4$h´K7ubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjij«%jjj«%jk‰jl‰jm‰uh1híh²hhj® h³Nh´Nubjo)�”}”(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 success”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hjµ%h]”hŒ Parameters”…”�”}”(hj·%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj³%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K;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Ö%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÒ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K:hjÎ%ubjæ)�”}”(hhh]”ju)�”}”(hŒ„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]”hŒ„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.”…”�”}”(hjí%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K8hjê%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÎ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jé%h´K:hjË%ubjÄ)�”}”(hŒ=``unsigned int len`` Length of the packet private key buffer ”h]”(jÊ)�”}”(hŒ``unsigned int len``”h]”jÐ)�”}”(hj&h]”hŒunsigned int len”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K;hj&ubjæ)�”}”(hhh]”ju)�”}”(hŒ'Length of the packet private key buffer”h]”hŒ'Length of the packet private key buffer”…”�”}”(hj'&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j#&h´K;hj$&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j#&h´K;hjË%ubjÄ)�”}”(hŒF``const struct ecdh *p`` Buffer with the caller-specified private key ”h]”(jÊ)�”}”(hŒ``const struct ecdh *p``”h]”jÐ)�”}”(hjG&h]”hŒconst struct ecdh *p”…”�”}”(hjI&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjE&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´Khj¯%ubju)�”}”(hŒOThe ECDH implementations operate on a packet representation of the private key.”h]”hŒOThe ECDH implementations operate on a packet representation of the private key.”…”�”}”(hj˜&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K=hj¯%ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hj©&h]”hŒReturn”…”�”}”(hj«&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj§&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´K@hj¯%ubju)�”}”(hŒ5-EINVAL if buffer has insufficient size, 0 on success”h]”hŒ5-EINVAL if buffer has insufficient size, 0 on success”…”�”}”(hj¿&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KAhj¯%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj® h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#crypto_ecdh_decode_key (C function)”Œc.crypto_ecdh_decode_key”hNt”auh1hÜhj® h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒNint crypto_ecdh_decode_key (const char *buf, unsigned int len, struct ecdh *p)”h]”hù)�”}”(hŒMint crypto_ecdh_decode_key(const char *buf, unsigned int len, struct ecdh *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjî&h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjê&h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KFubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê&h²hh³jü&h´KFubj")�”}”(hŒcrypto_ecdh_decode_key”h]”j()�”}”(hŒcrypto_ecdh_decode_key”h]”hŒcrypto_ecdh_decode_key”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj 'ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hjê&h²hh³jü&h´KFubjé)�”}”(hŒ3(const char *buf, unsigned int len, struct ecdh *p)”h]”(jï)�”}”(hŒconst char *buf”h]”(hÿ)�”}”(hjöh]”hŒconst”…”�”}”(hj+'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj''ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj''ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjF'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj''ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj''ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjb'h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhj''ubj()�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjo'h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj''ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj#'ubjï)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjˆ'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj„'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„'ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj¤'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj„'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„'ubj()�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÀ'h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj„'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj#'ubjï)�”}”(hŒstruct ecdh *p”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hjÙ'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjÕ'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ'ubh)�”}”(hhh]”j()�”}”(hŒecdh”h]”hŒecdh”…”�”}”(hj÷'h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjô'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jù'Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj'sbŒc.crypto_ecdh_decode_key”†”asbuh1hhjÕ'ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ'ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj%(h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjÕ'ubj()�”}”(hjÍh]”hŒp”…”�”}”(hj2(h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjÕ'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhj#'ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhjê&h²hh³jü&h´KFubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhjæ&h²hh³jü&h´KFubah}”(h]”já&ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jü&h´KFhjã&h²hubjV)�”}”(hhh]”ju)�”}”(hŒdecode a private key”h]”hŒdecode a private key”…”�”}”(hj[(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KFhjX(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhjã&h²hh³jü&h´KFubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijs(jjjs(jk‰jl‰jm‰uh1híh²hhj® h³Nh´Nubjo)�”}”(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 success”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj}(h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj{(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KJhjw(ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒG``const char *buf`` Buffer holding a packet key that should be decoded ”h]”(jÊ)�”}”(hŒ``const char *buf``”h]”jÐ)�”}”(hjœ(h]”hŒconst char *buf”…”�”}”(hjž(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjš(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KGhj–(ubjæ)�”}”(hhh]”ju)�”}”(hŒ2Buffer holding a packet key that should be decoded”h]”hŒ2Buffer holding a packet key that should be decoded”…”�”}”(hjµ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j±(h´KGhj²(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj–(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j±(h´KGhj“(ubjÄ)�”}”(hŒ=``unsigned int len`` Length of the packet private key buffer ”h]”(jÊ)�”}”(hŒ``unsigned int len``”h]”jÐ)�”}”(hjÕ(h]”hŒunsigned int len”…”�”}”(hj×(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÓ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KHhjÏ(ubjæ)�”}”(hhh]”ju)�”}”(hŒ'Length of the packet private key buffer”h]”hŒ'Length of the packet private key buffer”…”�”}”(hjî(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jê(h´KHhjë(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÏ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jê(h´KHhj“(ubjÄ)�”}”(hŒe``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]”hŒstruct ecdh *p”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj )ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KJhj)ubjæ)�”}”(hhh]”ju)�”}”(hŒQBuffer allocated by the caller that is filled with the unpacked ECDH private key.”h]”hŒQBuffer allocated by the caller that is filled with the unpacked ECDH private key.”…”�”}”(hj')h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KIhj$)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j#)h´KJhj“(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjw(ubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjJ)h]”hŒ Description”…”�”}”(hjL)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjH)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KLhjw(ubju)�”}”(hŒ‰The unpacking obtains the private key by pointing **p** to the correct location in **buf**. Thus, both pointers refer to the same memory.”h]”(hŒ2The unpacking obtains the private key by pointing ”…”�”}”(hj`)h²hh³Nh´Nubj{)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjh)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj`)ubhŒ to the correct location in ”…”�”}”(hj`)h²hh³Nh´Nubj{)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjz)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj`)ubhŒ/. Thus, both pointers refer to the same memory.”…”�”}”(hj`)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KKhjw(ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hj•)h]”hŒReturn”…”�”}”(hj—)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj“)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KNhjw(ubju)�”}”(hŒ5-EINVAL if buffer has insufficient size, 0 on success”h]”hŒ5-EINVAL if buffer has insufficient size, 0 on success”…”�”}”(hj«)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒT/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:31: ./include/crypto/ecdh.h”h´KOhjw(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhj® h²hh³Nh´Nubeh}”(h]”Œecdh-helper-functions”ah ]”h"]”Œecdh helper functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒDH Helper Functions”h]”hŒDH Helper Functions”…”�”}”(hjÌ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÉ)h²hh³hÊh´K#ubju)�”}”(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Ú)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³•y~ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:37: ./include/crypto/dh.h”h´K hjÉ)h²hubju)�”}”(hŒºTo 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]”hŒºTo 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é)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:37: ./include/crypto/dh.h”h´KhjÉ)h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ dh (C struct)”Œc.dh”hNt”auh1hÜhjÉ)h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒdh”h]”hù)�”}”(hŒ struct dh”h]”(hÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhj *h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Kubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj *h²hh³j*h´Kubj")�”}”(hŒdh”h]”j()�”}”(hj *h]”hŒdh”…”�”}”(hj1*h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj-*ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj *h²hh³j*h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj *h²hh³j*h´Kubah}”(h]”j*ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³j*h´Khj*h²hubjV)�”}”(hhh]”ju)�”}”(hŒdefine a DH private key”h]”hŒdefine a DH private key”…”�”}”(hjS*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´KhjP*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj*h²hh³j*h´Kubeh}”(h]”h ]”(jcŒstruct”eh"]”h$]”h&]”jhjcjijk*jjjk*jk‰jl‰jm‰uh1híh²hhjÉ)h³Nh´Nubjo)�”}”(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 G”h]”(ju)�”}”(hŒ**Definition**::”h]”(j{)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjw*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjs*ubhŒ:”…”�”}”(hjs*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khjo*ubj–)�”}”(hŒ–struct dh { const void *key; const void *p; const void *g; unsigned int key_size; unsigned int p_size; unsigned int g_size; };”h]”hŒ–struct 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@uh1j•h³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khjo*ubju)�”}”(hŒ **Members**”h]”j{)�”}”(hj¡*h]”hŒMembers”…”�”}”(hj£*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjŸ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K&hjo*ubj¿)�”}”(hhh]”(jÄ)�”}”(hŒ``key`` Private DH key ”h]”(jÊ)�”}”(hŒ``key``”h]”jÐ)�”}”(hjÀ*h]”hŒkey”…”�”}”(hjÂ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj¾*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khjº*ubjæ)�”}”(hhh]”ju)�”}”(hŒPrivate DH key”h]”hŒPrivate DH key”…”�”}”(hjÙ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jÕ*h´KhjÖ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjº*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jÕ*h´Khj·*ubjÄ)�”}”(hŒ!``p`` Diffie-Hellman parameter P ”h]”(jÊ)�”}”(hŒ``p``”h]”jÐ)�”}”(hjù*h]”hŒp”…”�”}”(hjû*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj÷*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khjó*ubjæ)�”}”(hhh]”ju)�”}”(hŒDiffie-Hellman parameter P”h]”hŒDiffie-Hellman parameter P”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j+h´Khj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjó*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j+h´Khj·*ubjÄ)�”}”(hŒ!``g`` Diffie-Hellman generator G ”h]”(jÊ)�”}”(hŒ``g``”h]”jÐ)�”}”(hj2+h]”hŒg”…”�”}”(hj4+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj0+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khj,+ubjæ)�”}”(hhh]”ju)�”}”(hŒDiffie-Hellman generator G”h]”hŒDiffie-Hellman generator G”…”�”}”(hjK+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jG+h´KhjH+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj,+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jG+h´Khj·*ubjÄ)�”}”(hŒ(``key_size`` Size of the private DH key ”h]”(jÊ)�”}”(hŒ ``key_size``”h]”jÐ)�”}”(hjk+h]”hŒkey_size”…”�”}”(hjm+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhji+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khje+ubjæ)�”}”(hhh]”ju)�”}”(hŒSize of the private DH key”h]”hŒSize of the private DH key”…”�”}”(hj„+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j€+h´Khj�+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhje+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j€+h´Khj·*ubjÄ)�”}”(hŒ"``p_size`` Size of DH parameter P ”h]”(jÊ)�”}”(hŒ ``p_size``”h]”jÐ)�”}”(hj¤+h]”hŒp_size”…”�”}”(hj¦+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj¢+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khjž+ubjæ)�”}”(hhh]”ju)�”}”(hŒSize of DH parameter P”h]”hŒSize of DH parameter P”…”�”}”(hj½+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j¹+h´Khjº+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjž+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j¹+h´Khj·*ubjÄ)�”}”(hŒ!``g_size`` Size of DH generator G”h]”(jÊ)�”}”(hŒ ``g_size``”h]”jÐ)�”}”(hjÝ+h]”hŒg_size”…”�”}”(hjß+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÛ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khj×+ubjæ)�”}”(hhh]”ju)�”}”(hŒSize of DH generator G”h]”hŒSize of DH generator G”…”�”}”(hjö+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´Khjó+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj×+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jò+h´Khj·*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjo*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhjÉ)h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒcrypto_dh_key_len (C function)”Œc.crypto_dh_key_len”hNt”auh1hÜhjÉ)h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8unsigned int crypto_dh_key_len (const struct dh *params)”h]”hù)�”}”(hŒ7unsigned int crypto_dh_key_len(const struct dh *params)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj7,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj3,h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3,h²hh³jE,h´K*ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjT,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj3,h²hh³jE,h´K*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3,h²hh³jE,h´K*ubj")�”}”(hŒcrypto_dh_key_len”h]”j()�”}”(hŒcrypto_dh_key_len”h]”hŒcrypto_dh_key_len”…”�”}”(hjt,h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjp,ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj3,h²hh³jE,h´K*ubjé)�”}”(hŒ(const struct dh *params)”h]”jï)�”}”(hŒconst struct dh *params”h]”(hÿ)�”}”(hjöh]”hŒconst”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjŒ,ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒ,ubhÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj«,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjŒ,ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒ,ubh)�”}”(hhh]”j()�”}”(hŒdh”h]”hŒdh”…”�”}”(hjÉ,h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjÆ,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”jË,Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸjv,sbŒc.crypto_dh_key_len”†”asbuh1hhjŒ,ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒ,ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hj÷,h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjŒ,ubj()�”}”(hŒparams”h]”hŒparams”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjŒ,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjˆ,ubah}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhj3,h²hh³jE,h´K*ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj/,h²hh³jE,h´K*ubah}”(h]”j*,ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³jE,h´K*hj,,h²hubjV)�”}”(hhh]”ju)�”}”(hŒ%Obtain the size of the private DH key”h]”hŒ%Obtain the size of the private DH key”…”�”}”(hj.-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K*hj+-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj,,h²hh³jE,h´K*ubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijF-jjjF-jk‰jl‰jm‰uh1híh²hhjÉ)h³Nh´Nubjo)�”}”(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 bytes”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hjP-h]”hŒ Parameters”…”�”}”(hjR-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjN-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K.hjJ-ubj¿)�”}”(hhh]”jÄ)�”}”(hŒ+``const struct dh *params`` private DH key ”h]”(jÊ)�”}”(hŒ``const struct dh *params``”h]”jÐ)�”}”(hjo-h]”hŒconst struct dh *params”…”�”}”(hjq-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjm-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K+hji-ubjæ)�”}”(hhh]”ju)�”}”(hŒprivate DH key”h]”hŒprivate DH key”…”�”}”(hjˆ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j„-h´K+hj…-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhji-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j„-h´K+hjf-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾hjJ-ubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjª-h]”hŒ Description”…”�”}”(hj¬-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¨-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K-hjJ-ubju)�”}”(hŒ§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.”h]”hŒ§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.”…”�”}”(hjÀ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K,hjJ-ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hjÑ-h]”hŒReturn”…”�”}”(hjÓ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÏ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K0hjJ-ubju)�”}”(hŒsize of the key in bytes”h]”hŒsize of the key in bytes”…”�”}”(hjç-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K1hjJ-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhjÉ)h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!crypto_dh_encode_key (C function)”Œc.crypto_dh_encode_key”hNt”auh1hÜhjÉ)h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOint crypto_dh_encode_key (char *buf, unsigned int len, const struct dh *params)”h]”hù)�”}”(hŒNint crypto_dh_encode_key(char *buf, unsigned int len, const struct dh *params)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj.h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K6ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.h²hh³j$.h´K6ubj")�”}”(hŒcrypto_dh_encode_key”h]”j()�”}”(hŒcrypto_dh_encode_key”h]”hŒcrypto_dh_encode_key”…”�”}”(hj7.h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj3.ubah}”(h]”h ]”(j:j;eh"]”h$]”h&]”j?j@uh1j!hj.h²hh³j$.h´K6ubjé)�”}”(hŒ6(char *buf, unsigned int len, const struct dh *params)”h]”(jï)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjS.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjO.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO.ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjo.h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjO.ubj()�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj|.h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjO.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjK.ubjï)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‘.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘.ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj±.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‘.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘.ubj()�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÍ.h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj‘.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjK.ubjï)�”}”(hŒconst struct dh *params”h]”(hÿ)�”}”(hjöh]”hŒconst”…”�”}”(hjæ.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjâ.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ.ubhÿ)�”}”(hjh]”hŒstruct”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hþhjâ.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ.ubh)�”}”(hhh]”j()�”}”(hŒdh”h]”hŒdh”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jcŒreftype”jŸŒ reftarget”j!/Œmodname”NŒ classname”Nj£j¦)�”}”j©]”j¬)�”}”jŸj9.sbŒc.crypto_dh_encode_key”†”asbuh1hhjâ.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ.ubjÁ)�”}”(hjÄh]”hŒ*”…”�”}”(hjM/h²hh³Nh´Nubah}”(h]”h ]”jÍah"]”h$]”h&]”uh1jÀhjâ.ubj()�”}”(hŒparams”h]”hŒparams”…”�”}”(hjZ/h²hh³Nh´Nubah}”(h]”h ]”j3ah"]”h$]”h&]”uh1j'hjâ.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj?j@uh1jîhjK.ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@uh1jèhj.h²hh³j$.h´K6ubeh}”(h]”h ]”h"]”h$]”h&]”j?j@jGˆuh1højHjIhj.h²hh³j$.h´K6ubah}”(h]”j .ah ]”(jMjNeh"]”h$]”h&]”jRˆjS)jThuh1hòh³j$.h´K6hj .h²hubjV)�”}”(hhh]”ju)�”}”(hŒencode the private key”h]”hŒencode the private key”…”�”}”(hj„/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K6hj�/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jUhj .h²hh³j$.h´K6ubeh}”(h]”h ]”(jcŒfunction”eh"]”h$]”h&]”jhjcjijœ/jjjœ/jk‰jl‰jm‰uh1híh²hhjÉ)h³Nh´Nubjo)�”}”(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 success”h]”(ju)�”}”(hŒ**Parameters**”h]”j{)�”}”(hj¦/h]”hŒ Parameters”…”�”}”(hj¨/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¤/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K: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Ç/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÃ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K9hj¿/ubjæ)�”}”(hhh]”ju)�”}”(hŒ€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]”hŒ€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.”…”�”}”(hjÞ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K7hjÛ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¿/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jÚ/h´K9hj¼/ubjÄ)�”}”(hŒ=``unsigned int len`` Length of the packet private key buffer ”h]”(jÊ)�”}”(hŒ``unsigned int len``”h]”jÐ)�”}”(hjÿ/h]”hŒunsigned int len”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjý/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K:hjù/ubjæ)�”}”(hhh]”ju)�”}”(hŒ'Length of the packet private key buffer”h]”hŒ'Length of the packet private key buffer”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³j0h´K:hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjù/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³j0h´K:hj¼/ubjÄ)�”}”(hŒI``const struct dh *params`` Buffer with the caller-specified private key ”h]”(jÊ)�”}”(hŒ``const struct dh *params``”h]”jÐ)�”}”(hj80h]”hŒconst struct dh *params”…”�”}”(hj:0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj60ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÉh³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K;hj20ubjæ)�”}”(hhh]”ju)�”}”(hŒ,Buffer with the caller-specified private key”h]”hŒ,Buffer with the caller-specified private key”…”�”}”(hjQ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³jM0h´K;hjN0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj20ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃh³jM0h´K;hj¼/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¾hj /ubju)�”}”(hŒ**Description**”h]”j{)�”}”(hjs0h]”hŒ Description”…”�”}”(hju0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjq0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K=hj /ubju)�”}”(hŒMThe DH implementations operate on a packet representation of the private key.”h]”hŒMThe DH implementations operate on a packet representation of the private key.”…”�”}”(hj‰0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´K3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj:3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´KKhji2ubju)�”}”(hŒ‰The unpacking obtains the private key by pointing **p** to the correct location in **buf**. Thus, both pointers refer to the same memory.”h]”(hŒ2The unpacking obtains the private key by pointing ”…”�”}”(hjR3h²hh³Nh´Nubj{)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjZ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjR3ubhŒ to the correct location in ”…”�”}”(hjR3h²hh³Nh´Nubj{)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjl3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjR3ubhŒ/. Thus, both pointers refer to the same memory.”…”�”}”(hjR3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´KJhji2ubju)�”}”(hŒ **Return**”h]”j{)�”}”(hj‡3h]”hŒReturn”…”�”}”(hj‰3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj…3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´KMhji2ubju)�”}”(hŒ5-EINVAL if buffer has insufficient size, 0 on success”h]”hŒ5-EINVAL if buffer has insufficient size, 0 on success”…”�”}”(hj�3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jth³ŒR/var/lib/git/docbuild/linux/Documentation/crypto/api-kpp:40: ./include/crypto/dh.h”h´KNhji2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jnhjÉ)h²hh³Nh´Nubeh}”(h]”Œdh-helper-functions”ah ]”h"]”Œdh helper functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K#ubeh}”(h]”Œ%key-agreement-protocol-primitives-kpp”ah ]”h"]”Œ'key-agreement protocol primitives (kpp)”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jæ3Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÀ3j½3j.j+j”j‘j« j¨ jÆ)jÃ)j¸3jµ3uŒ nametypes”}”(jÀ3‰j.‰j”‰j« ‰jÆ)‰j¸3‰uh}”(j½3h·j+hËhëhôj<jAjj„jôjùj‘j1j]jbjC jH jÖ jÛ jŸj¤jVj[jþjj¨ j—j´j¹jñjöjLjQjJjOjþjjÃ)j® jø jý j:"j?"j$j$já&jæ&jµ3jÉ)j*j *j*,j/,j .j.jÒ0j×0uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.