EVP_PKEY_DERIVE(3ssl)

NUME
EVP_PKEY_derive_init, EVP_PKEY_derive_init_ex, EVP_PKEY_derive_set_peer_ex, EVP_PKEY_derive_set_peer, EVP_PKEY_derive, EVP_PKEY_derive_SKEY - derivă (deduce) secretul partajat al algoritmului cheii publice

SINOPSIS
 #include <openssl/evp.h>

 int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
 int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
 int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer,
                                 int validate_peer);
 int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
 int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
 EVP_SKEY *EVP_PKEY_derive_SKEY(EVP_PKEY_CTX *ctx, EVP_SKEYMGMT *mgmt,
                                const char *key_type, const char *propquery,
                                size_t keylen, const OSSL_PARAM params[]);

DESCRIERE
EVP_PKEY_derive_init() inițializează un context de algoritm cu cheie publică ctx pentru derivarea secretului partajat utilizând algoritmul dat atunci când contextul a fost creat utilizând EVP_PKEY_CTX_new(3) sau variante ale acestuia. Algoritmul este utilizat pentru a prelua implicit o metodă EVP_KEYEXCH, consultați „Preluarea implicită” în provider(7) pentru mai multe informații despre preluările implicite.

EVP_PKEY_derive_init_ex() este identică cu EVP_PKEY_derive_init(), dar în plus definește parametrii pasați params în context înainte de returnare.

EVP_PKEY_derive_set_peer_ex() definește cheia omologului (peer): aceasta va fi, în mod normal, o cheie publică. validate_peer va valida cheia publică dacă această valoare este diferită de zero.

EVP_PKEY_derive_set_peer() este similară cu EVP_PKEY_derive_set_peer_ex() cu validate_peer definit la 1.

EVP_PKEY_derive() derivă (deduce) un secret partajat utilizând ctx. Dacă key este NULL, atunci dimensiunea maximă a tamponului de ieșire este scrisă în parametrul keylen. Dacă key nu este NULL, atunci înainte de apel, parametrul keylen trebuie să conțină lungimea tamponului key. Dacă apelul are succes, secretul partajat este scris în key, iar cantitatea de date este scrisă în keylen.

EVP_PKEY_derive_SKEY() este similară cu EVP_PKEY_derive(), dar returnează un obiect EVP_SKEY care stochează datele opace pentru cheia derivată(dedusă). Dacă se pasează argumentul EVP_SKEYMGMT, acesta va fi utilizat în mod explicit pentru crearea EVP_SKEY. În caz contrar, obiectul EVP_SKEYMGMT utilizat pentru EVP_SKEY va fi preluat în conformitate cu skeymgmtname și propquery. Dacă argumentul skeymgmtname este NULL, se presupune numele care corespunde numelui metodei de schimb de chei.

NOTE
După apelul către EVP_PKEY_derive_init(), se pot efectua operații de control specifice algoritmului pentru a defini parametrii corespunzători pentru operație.

Funcția EVP_PKEY_derive() poate fi apelată de mai multe ori în același context dacă se efectuează mai multe operații utilizând aceiași parametri.

VALORI RETURNATE
EVP_PKEY_derive_init() și EVP_PKEY_derive() returnează 1 pentru succes și 0 sau o valoare negativă pentru eșec. În special, o valoare de returnare de -2 indică faptul că operația nu este acceptată de algoritmul cheii publice.

EVP_PKEY_derive_SKEY() returnează un obiect EVP_SKEY nou creat în caz de succes sau NULL în caz de eșec.

EXEMPLE
Deduce secretul comun (de exemplu, cheile DH sau EC):

 #include <openssl/evp.h>
 #include <openssl/rsa.h>

 EVP_PKEY_CTX *ctx;
 ENGINE *eng;
 unsigned char *skey;
 size_t skeylen;
 EVP_PKEY *pkey, *peerkey;
 /* NB: se presupune că pkey, eng, peerkey au fost deja configurate */

 ctx = EVP_PKEY_CTX_new(pkey, eng);
 if (!ctx)
     /* A apărut o eroare */
 if (EVP_PKEY_derive_init(ctx) <= 0)
     /* Eroare */
 if (EVP_PKEY_derive_set_peer(ctx, peerkey) <= 0)
     /* Eroare */

 /* Determine buffer length */
 if (EVP_PKEY_derive(ctx, NULL, &skeylen) <= 0)
     /* Eroare */

 skey = OPENSSL_malloc(skeylen);

 if (!skey)
     /* Eșec malloc */

 if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0)
     /* Eroare */

 /* Secretul partajat este reprezentat de octeții skey scriși în tamponul skey. */

CONSULTAȚI ȘI
EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_KEYEXCH_fetch(3)

ISTORIC
Funcțiile EVP_PKEY_derive_init(), EVP_PKEY_derive_set_peer() și EVP_PKEY_derive() au fost adăugate inițial în OpenSSL 1.0.0.

Funcțiile EVP_PKEY_derive_init_ex() și EVP_PKEY_derive_set_peer_ex() au fost adăugate în OpenSSL 3.0.

Funcțiia EVP_PKEY_derive_SKEY() a fost adăugată în OpenSSL 3.6.

DREPTURI DE AUTOR
Drepturi de autor 2006-2025 The OpenSSL Project Authors. Toate drepturile rezervate.

Licențiat sub Licența Apache 2.0 („License”). Nu aveți voie să utilizați acest fișier decât în conformitate cu licența. Puteți obține o copie din fișierul LICENSE din distribuția sursei sau de la <https://www.openssl.org/source/license.html>.

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.