|
Packit Service |
31306d |
/*
|
|
Packit Service |
31306d |
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
|
Packit Service |
31306d |
*
|
|
Packit Service |
31306d |
* Licensed under the OpenSSL license (the "License"). You may not use
|
|
Packit Service |
31306d |
* this file except in compliance with the License. You can obtain a copy
|
|
Packit Service |
31306d |
* in the file LICENSE in the source distribution or at
|
|
Packit Service |
31306d |
* https://www.openssl.org/source/license.html
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#include "config.h"
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#include <string.h>
|
|
Packit Service |
31306d |
#include "libcrypto-compat.h"
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#ifndef OPENSSL_NO_ENGINE
|
|
Packit Service |
31306d |
#include <openssl/engine.h>
|
|
Packit Service |
31306d |
#endif
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
static void *OPENSSL_zalloc(size_t num)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
void *ret = OPENSSL_malloc(num);
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (ret != NULL)
|
|
Packit Service |
31306d |
memset(ret, 0, num);
|
|
Packit Service |
31306d |
return ret;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
/* If the fields n and e in r are NULL, the corresponding input
|
|
Packit Service |
31306d |
* parameters MUST be non-NULL for n and e. d may be
|
|
Packit Service |
31306d |
* left NULL (in case only the public key is used).
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
if ((r->n == NULL && n == NULL)
|
|
Packit Service |
31306d |
|| (r->e == NULL && e == NULL))
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (n != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->n);
|
|
Packit Service |
31306d |
r->n = n;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (e != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->e);
|
|
Packit Service |
31306d |
r->e = e;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (d != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->d);
|
|
Packit Service |
31306d |
r->d = d;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
/* If the fields p and q in r are NULL, the corresponding input
|
|
Packit Service |
31306d |
* parameters MUST be non-NULL.
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
if ((r->p == NULL && p == NULL)
|
|
Packit Service |
31306d |
|| (r->q == NULL && q == NULL))
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (p != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->p);
|
|
Packit Service |
31306d |
r->p = p;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (q != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->q);
|
|
Packit Service |
31306d |
r->q = q;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
/* If the fields dmp1, dmq1 and iqmp in r are NULL, the corresponding input
|
|
Packit Service |
31306d |
* parameters MUST be non-NULL.
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
if ((r->dmp1 == NULL && dmp1 == NULL)
|
|
Packit Service |
31306d |
|| (r->dmq1 == NULL && dmq1 == NULL)
|
|
Packit Service |
31306d |
|| (r->iqmp == NULL && iqmp == NULL))
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (dmp1 != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->dmp1);
|
|
Packit Service |
31306d |
r->dmp1 = dmp1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (dmq1 != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->dmq1);
|
|
Packit Service |
31306d |
r->dmq1 = dmq1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (iqmp != NULL) {
|
|
Packit Service |
31306d |
BN_free(r->iqmp);
|
|
Packit Service |
31306d |
r->iqmp = iqmp;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void RSA_get0_key(const RSA *r,
|
|
Packit Service |
31306d |
const BIGNUM **n, const BIGNUM **e, const BIGNUM **d)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (n != NULL)
|
|
Packit Service |
31306d |
*n = r->n;
|
|
Packit Service |
31306d |
if (e != NULL)
|
|
Packit Service |
31306d |
*e = r->e;
|
|
Packit Service |
31306d |
if (d != NULL)
|
|
Packit Service |
31306d |
*d = r->d;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (p != NULL)
|
|
Packit Service |
31306d |
*p = r->p;
|
|
Packit Service |
31306d |
if (q != NULL)
|
|
Packit Service |
31306d |
*q = r->q;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void RSA_get0_crt_params(const RSA *r,
|
|
Packit Service |
31306d |
const BIGNUM **dmp1, const BIGNUM **dmq1,
|
|
Packit Service |
31306d |
const BIGNUM **iqmp)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (dmp1 != NULL)
|
|
Packit Service |
31306d |
*dmp1 = r->dmp1;
|
|
Packit Service |
31306d |
if (dmq1 != NULL)
|
|
Packit Service |
31306d |
*dmq1 = r->dmq1;
|
|
Packit Service |
31306d |
if (iqmp != NULL)
|
|
Packit Service |
31306d |
*iqmp = r->iqmp;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void DSA_get0_pqg(const DSA *d,
|
|
Packit Service |
31306d |
const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (p != NULL)
|
|
Packit Service |
31306d |
*p = d->p;
|
|
Packit Service |
31306d |
if (q != NULL)
|
|
Packit Service |
31306d |
*q = d->q;
|
|
Packit Service |
31306d |
if (g != NULL)
|
|
Packit Service |
31306d |
*g = d->g;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
/* If the fields p, q and g in d are NULL, the corresponding input
|
|
Packit Service |
31306d |
* parameters MUST be non-NULL.
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
if ((d->p == NULL && p == NULL)
|
|
Packit Service |
31306d |
|| (d->q == NULL && q == NULL)
|
|
Packit Service |
31306d |
|| (d->g == NULL && g == NULL))
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (p != NULL) {
|
|
Packit Service |
31306d |
BN_free(d->p);
|
|
Packit Service |
31306d |
d->p = p;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (q != NULL) {
|
|
Packit Service |
31306d |
BN_free(d->q);
|
|
Packit Service |
31306d |
d->q = q;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (g != NULL) {
|
|
Packit Service |
31306d |
BN_free(d->g);
|
|
Packit Service |
31306d |
d->g = g;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void DSA_get0_key(const DSA *d,
|
|
Packit Service |
31306d |
const BIGNUM **pub_key, const BIGNUM **priv_key)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (pub_key != NULL)
|
|
Packit Service |
31306d |
*pub_key = d->pub_key;
|
|
Packit Service |
31306d |
if (priv_key != NULL)
|
|
Packit Service |
31306d |
*priv_key = d->priv_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
/* If the field pub_key in d is NULL, the corresponding input
|
|
Packit Service |
31306d |
* parameters MUST be non-NULL. The priv_key field may
|
|
Packit Service |
31306d |
* be left NULL.
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
if (d->pub_key == NULL && pub_key == NULL)
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (pub_key != NULL) {
|
|
Packit Service |
31306d |
BN_free(d->pub_key);
|
|
Packit Service |
31306d |
d->pub_key = pub_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (priv_key != NULL) {
|
|
Packit Service |
31306d |
BN_free(d->priv_key);
|
|
Packit Service |
31306d |
d->priv_key = priv_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (pr != NULL)
|
|
Packit Service |
31306d |
*pr = sig->r;
|
|
Packit Service |
31306d |
if (ps != NULL)
|
|
Packit Service |
31306d |
*ps = sig->s;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (r == NULL || s == NULL)
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
BN_clear_free(sig->r);
|
|
Packit Service |
31306d |
BN_clear_free(sig->s);
|
|
Packit Service |
31306d |
sig->r = r;
|
|
Packit Service |
31306d |
sig->s = s;
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (pr != NULL)
|
|
Packit Service |
31306d |
*pr = sig->r;
|
|
Packit Service |
31306d |
if (ps != NULL)
|
|
Packit Service |
31306d |
*ps = sig->s;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (r == NULL || s == NULL)
|
|
Packit Service |
31306d |
return 0;
|
|
Packit Service |
31306d |
BN_clear_free(sig->r);
|
|
Packit Service |
31306d |
BN_clear_free(sig->s);
|
|
Packit Service |
31306d |
sig->r = r;
|
|
Packit Service |
31306d |
sig->s = s;
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
EVP_MD_CTX *EVP_MD_CTX_new(void)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
return OPENSSL_zalloc(sizeof(EVP_MD_CTX));
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
static void OPENSSL_clear_free(void *str, size_t num)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (str == NULL)
|
|
Packit Service |
31306d |
return;
|
|
Packit Service |
31306d |
if (num)
|
|
Packit Service |
31306d |
OPENSSL_cleanse(str, num);
|
|
Packit Service |
31306d |
OPENSSL_free(str);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
/* This call frees resources associated with the context */
|
|
Packit Service |
31306d |
int EVP_MD_CTX_reset(EVP_MD_CTX *ctx)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (ctx == NULL)
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
/*
|
|
Packit Service |
31306d |
* Don't assume ctx->md_data was cleaned in EVP_Digest_Final, because
|
|
Packit Service |
31306d |
* sometimes only copies of the context are ever finalised.
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
if (ctx->digest && ctx->digest->cleanup
|
|
Packit Service |
31306d |
&& !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED))
|
|
Packit Service |
31306d |
ctx->digest->cleanup(ctx);
|
|
Packit Service |
31306d |
if (ctx->digest && ctx->digest->ctx_size && ctx->md_data
|
|
Packit Service |
31306d |
&& !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) {
|
|
Packit Service |
31306d |
OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
EVP_PKEY_CTX_free(ctx->pctx);
|
|
Packit Service |
31306d |
#ifndef OPENSSL_NO_ENGINE
|
|
Packit Service |
31306d |
ENGINE_finish(ctx->engine);
|
|
Packit Service |
31306d |
#endif
|
|
Packit Service |
31306d |
OPENSSL_cleanse(ctx, sizeof(*ctx));
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void EVP_MD_CTX_free(EVP_MD_CTX *ctx)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
EVP_MD_CTX_reset(ctx);
|
|
Packit Service |
31306d |
OPENSSL_free(ctx);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
HMAC_CTX *HMAC_CTX_new(void)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
HMAC_CTX *ctx = OPENSSL_zalloc(sizeof(HMAC_CTX));
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
if (ctx != NULL) {
|
|
Packit Service |
31306d |
if (!HMAC_CTX_reset(ctx)) {
|
|
Packit Service |
31306d |
HMAC_CTX_free(ctx);
|
|
Packit Service |
31306d |
return NULL;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
return ctx;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
static void hmac_ctx_cleanup(HMAC_CTX *ctx)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
EVP_MD_CTX_reset(&ctx->i_ctx);
|
|
Packit Service |
31306d |
EVP_MD_CTX_reset(&ctx->o_ctx);
|
|
Packit Service |
31306d |
EVP_MD_CTX_reset(&ctx->md_ctx);
|
|
Packit Service |
31306d |
ctx->md = NULL;
|
|
Packit Service |
31306d |
ctx->key_length = 0;
|
|
Packit Service |
31306d |
OPENSSL_cleanse(ctx->key, sizeof(ctx->key));
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void HMAC_CTX_free(HMAC_CTX *ctx)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (ctx != NULL) {
|
|
Packit Service |
31306d |
hmac_ctx_cleanup(ctx);
|
|
Packit Service |
31306d |
#if OPENSSL_VERSION_NUMBER > 0x10100000L
|
|
Packit Service |
31306d |
EVP_MD_CTX_free(&ctx->i_ctx);
|
|
Packit Service |
31306d |
EVP_MD_CTX_free(&ctx->o_ctx);
|
|
Packit Service |
31306d |
EVP_MD_CTX_free(&ctx->md_ctx);
|
|
Packit Service |
31306d |
#endif
|
|
Packit Service |
31306d |
OPENSSL_free(ctx);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int HMAC_CTX_reset(HMAC_CTX *ctx)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
HMAC_CTX_init(ctx);
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#ifndef HAVE_OPENSSL_EVP_CIPHER_CTX_NEW
|
|
Packit Service |
31306d |
EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
return OPENSSL_zalloc(sizeof(EVP_CIPHER_CTX));
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
/* EVP_CIPHER_CTX_reset(ctx); alias */
|
|
Packit Service |
31306d |
EVP_CIPHER_CTX_init(ctx);
|
|
Packit Service |
31306d |
OPENSSL_free(ctx);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
#endif
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void DH_get0_pqg(const DH *dh,
|
|
Packit Service |
31306d |
const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (p) {
|
|
Packit Service |
31306d |
*p = dh->p;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (q) {
|
|
Packit Service |
31306d |
*q = NULL;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (g) {
|
|
Packit Service |
31306d |
*g = dh->g;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (p) {
|
|
Packit Service |
31306d |
if (dh->p) {
|
|
Packit Service |
31306d |
BN_free(dh->p);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
dh->p = p;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (g) {
|
|
Packit Service |
31306d |
if (dh->g) {
|
|
Packit Service |
31306d |
BN_free(dh->g);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
dh->g = g;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
void DH_get0_key(const DH *dh,
|
|
Packit Service |
31306d |
const BIGNUM **pub_key, const BIGNUM **priv_key)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (pub_key) {
|
|
Packit Service |
31306d |
*pub_key = dh->pub_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (priv_key) {
|
|
Packit Service |
31306d |
*priv_key = dh->priv_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key)
|
|
Packit Service |
31306d |
{
|
|
Packit Service |
31306d |
if (pub_key) {
|
|
Packit Service |
31306d |
if (dh->pub_key) {
|
|
Packit Service |
31306d |
BN_free(dh->pub_key);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
dh->pub_key = pub_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if (priv_key) {
|
|
Packit Service |
31306d |
if (dh->priv_key) {
|
|
Packit Service |
31306d |
BN_free(dh->priv_key);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
dh->priv_key = priv_key;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
return 1;
|
|
Packit Service |
31306d |
}
|