2 * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
10 #include <openssl/dh.h>
11 #include "internal/refcount.h"
13 #define DH_MIN_MODULUS_BITS 512
17 * This first argument is used to pick up errors when a DH is passed
18 * instead of a EVP_PKEY
24 int32_t length
; /* optional */
25 BIGNUM
*pub_key
; /* g^x % p */
26 BIGNUM
*priv_key
; /* x */
28 BN_MONT_CTX
*method_mont_p
;
29 /* Place holders if we want to do X9.42 DH */
35 CRYPTO_REF_COUNT references
;
37 CRYPTO_EX_DATA ex_data
;
39 const DH_METHOD
*meth
;
44 size_t dirty_cnt
; /* If any key material changes, increment this */
50 int (*generate_key
) (DH
*dh
);
51 int (*compute_key
) (unsigned char *key
, const BIGNUM
*pub_key
, DH
*dh
);
54 int (*bn_mod_exp
) (const DH
*dh
, BIGNUM
*r
, const BIGNUM
*a
,
55 const BIGNUM
*p
, const BIGNUM
*m
, BN_CTX
*ctx
,
58 int (*finish
) (DH
*dh
);
61 /* If this is non-NULL, it will be used to generate parameters */
62 int (*generate_params
) (DH
*dh
, int prime_len
, int generator
,
66 int dh_buf2key(DH
*key
, const unsigned char *buf
, size_t len
);
67 size_t dh_key2buf(const DH
*dh
, unsigned char **pbuf
);