xref: /freebsd/crypto/openssl/crypto/dh/dh_local.h (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1  /*
2   * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
3   *
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
8   */
9  
10  #include <openssl/dh.h>
11  #include "internal/refcount.h"
12  #include "internal/ffc.h"
13  
14  #define DH_MIN_MODULUS_BITS     512
15  
16  struct dh_st {
17      /*
18       * This first argument is used to pick up errors when a DH is passed
19       * instead of a EVP_PKEY
20       */
21      int pad;
22      int version;
23      FFC_PARAMS params;
24      /* max generated private key length (can be less than len(q)) */
25      int32_t length;
26      BIGNUM *pub_key;            /* g^x % p */
27      BIGNUM *priv_key;           /* x */
28      int flags;
29      BN_MONT_CTX *method_mont_p;
30      CRYPTO_REF_COUNT references;
31  #ifndef FIPS_MODULE
32      CRYPTO_EX_DATA ex_data;
33      ENGINE *engine;
34  #endif
35      OSSL_LIB_CTX *libctx;
36      const DH_METHOD *meth;
37      CRYPTO_RWLOCK *lock;
38  
39      /* Provider data */
40      size_t dirty_cnt; /* If any key material changes, increment this */
41  };
42  
43  struct dh_method {
44      char *name;
45      /* Methods here */
46      int (*generate_key) (DH *dh);
47      int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh);
48  
49      /* Can be null */
50      int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a,
51                         const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
52                         BN_MONT_CTX *m_ctx);
53      int (*init) (DH *dh);
54      int (*finish) (DH *dh);
55      int flags;
56      char *app_data;
57      /* If this is non-NULL, it will be used to generate parameters */
58      int (*generate_params) (DH *dh, int prime_len, int generator,
59                              BN_GENCB *cb);
60  };
61