int write_key_pem_private(FILE *fp, struct ndn_pkey *private_key_ndn, char *password) { unsigned long err; int res = 0; if (password) { res = PEM_write_PKCS8PrivateKey (fp, (EVP_PKEY *) private_key_ndn, EVP_aes_256_cbc (), password, strlen(password), NULL, NULL); } else { res = PEM_write_PrivateKey(fp, (EVP_PKEY *) private_key_ndn, NULL, NULL, 0, NULL, NULL); } if (!res) { err = ERR_get_error(); PyErr_Format(g_PyExc_NDNKeyError, "Unable to write Private Key: %s", ERR_reason_error_string(err)); return -1; } return 0; }
void pki_evp::writePKCS8(const QString fname, const EVP_CIPHER *enc, pem_password_cb *cb, bool pem) { EVP_PKEY *pkey; pass_info p(XCA_TITLE, tr("Please enter the password protecting the PKCS#8 key '%1'").arg(getIntName())); FILE *fp = fopen(QString2filename(fname), "w"); if (fp != NULL) { if (key) { pkey = decryptKey(); if (pkey) { if (pem) PEM_write_PKCS8PrivateKey(fp, pkey, enc, NULL, 0, cb, &p); else i2d_PKCS8PrivateKey_fp(fp, pkey, enc, NULL, 0, cb, &p); EVP_PKEY_free(pkey); } } fclose(fp); pki_openssl_error(); } else fopen_error(fname); }
int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u) { if (FIPS_mode()) return PEM_write_PKCS8PrivateKey(fp, x, enc, (char *)kstr, klen, cb, u); else return PEM_ASN1_write((int (*)())i2d_PrivateKey, (((x)->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), fp,(char *)x,enc,kstr,klen,cb,u); }
uint32 CRegProtocol::CreatePrivateKey(char *name, EVP_PKEY **key) { TU_RET err = TU_ERROR_CRYPTO_FAILED; RSA *rsaKey; EVP_PKEY *pkey; FILE *fp; rsaKey = RSA_generate_key(1024, 65537, NULL, NULL); if(rsaKey == NULL) { TUTRACE((TUTRACE_ERR, "Couldn't generate RSA key\n")); goto EXIT; } //Now store it in a PKEY pkey = EVP_PKEY_new(); if(!pkey) { TUTRACE((TUTRACE_ERR, "Couldn't generate new EVP key\n")); goto EXIT; } if(!EVP_PKEY_assign_RSA(pkey, rsaKey)) { TUTRACE((TUTRACE_ERR, "Couldn't assign RSA key to EVP key\n")); RSA_free(rsaKey); goto EXIT; } fp = fopen(name, "w"); if(!PEM_write_PKCS8PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL)) { TUTRACE((TUTRACE_ERR, "Error writing Signing key to file\n")); fclose(fp); goto ERR_EVP; } fclose(fp); if(key) *key = pkey; else EVP_PKEY_free(pkey); return TU_SUCCESS; ERR_EVP: EVP_PKEY_free(pkey); EXIT: return err; }