openssl
Keys
Zoeken…
Syntaxis
- EVP_PKEY * EVP_PKEY_new (nietig);
- RSA * RSA_new (nietig);
- int RSA_generate_key_ex (RSA * rsa, int bits, BIGNUM * e, BN_GENCB * cb);
- int EVP_PKEY_assign_RSA (EVP_PKEY * pkey, RSA * key);
- int PEM_write_PrivateKey (FILE * fp, EVP_PKEY * x, const EVP_CIPHER * enc, unsigned char * kstr, int klen, pem_password_cb * cb, void * u);
- int PEM_write_bio_PrivateKey (BIO * bp, EVP_PKEY * x, const EVP_CIPHER * enc, unsigned char * kstr, int klen, pem_password_cb * cb, void * u);
- EVP_PKEY * PEM_read_PrivateKey (FILE * fp, EVP_PKEY ** x, pem_password_cb * cb, void * u);
- EVP_PKEY * PEM_read_bio_PrivateKey (BIO * bp, EVP_PKEY ** x, pem_password_cb * cb, void * u);
- void EVP_PKEY_free (EVP_PKEY * sleutel);
Genereer RSA Key
Om een RSA-sleutel te genereren, moet eerst een EVP_PKEY worden toegewezen aan EVP_PKEY_new :
EVP_PKEY *pkey;
pkey = EVP_PKEY_new();
Er is ook een exponent voor de sleutel nodig, waarvoor een BIGNUM moet worden toegewezen met BN_new en vervolgens moet worden toegewezen met BN_set_word :
BIGNUM *bn;
bn = BN_new();
BN_set_word(bn, RSA_F4);
Maak een nieuwe RSA met RSA_new om de sleutel te genereren en roep RSA_generate_key_ex :
RSA *rsa;
rsa = RSA_new();
RSA_generate_key_ex(
rsa, /* pointer to the RSA structure */
2048, /* number of bits for the key - 2048 is a good value */
bn, /* exponent allocated earlier */
NULL, /* callback - can be NULL if progress isn't needed */
);
Bel EVP_PKEY_assign_RSA om de nieuw gegenereerde sleutel toe te wijzen aan de EVP_PKEY structuur:
EVP_PKEY_assign_RSA(pkey, rsa);
De RSA structuur wordt automatisch vrijgegeven wanneer de EVP_PKEY structuur wordt vrijgegeven. Dit wordt gedaan met EVP_PKEY_free :
EVP_PKEY_free(pkey);
Bewaar privésleutel
Een EVP_PKEY kan rechtstreeks in verschillende indelingen op schijf worden opgeslagen. PEM_write_PrivateKey wordt gebruikt om EVP_PKEY op te slaan in een PEM-indeling:
FILE *f;
f = fopen("key.pem", "wb");
PEM_write_PrivateKey(
f, /* use the FILE* that was opened */
pkey, /* EVP_PKEY structure */
EVP_des_ede3_cbc(), /* default cipher for encrypting the key on disk */
"replace_me", /* passphrase required for decrypting the key on disk */
10, /* length of the passphrase string */
NULL, /* callback for requesting a password */
NULL /* data to pass to the callback */
);
Gebruik PEM_write_bio_PrivateKey om een privésleutel in een BIO op te PEM_write_bio_PrivateKey :
BIO *bio;
bio = BIO_new(BIO_s_mem());
PEM_write_bio_PrivateKey(
bio, /* BIO to write the private key to */
pkey, /* EVP_PKEY structure */
EVP_des_ede3_cbc(), /* default cipher for encrypting the key on disk */
"replace_me", /* passphrase required for decrypting the key on disk */
10, /* length of the passphrase string */
NULL, /* callback for requesting a password */
NULL /* data to pass to the callback */
);
Laad privésleutel
Gebruik de functie PEM_read_PrivateKey om een privésleutel rechtstreeks van de schijf te laden:
FILE *f;
EVP_PKEY *pkey;
f = fopen("key.pem", "rb");
PEM_read_PrivateKey(
f, /* use the FILE* that was opened */
&pkey, /* pointer to EVP_PKEY structure */
NULL, /* password callback - can be NULL */
NULL /* parameter passed to callback or password if callback is NULL */
);
Gebruik PEM_read_bio_PrivateKey om een privésleutel van een BIO PEM_read_bio_PrivateKey :
BIO *bio;
bio = BIO_new_mem_buf((void *)input, input_len);
PEM_read_bio_PrivateKey(
bio, /* BIO to read the private key from */
&pkey, /* pointer to EVP_PKEY structure */
NULL, /* password callback - can be NULL */
NULL /* parameter passed to callback or password if callback is NULL */
);