yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. |
| 3 | * |
| 4 | * Licensed under the OpenSSL license (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 <stdio.h> |
| 11 | #include "internal/cryptlib.h" |
| 12 | #include "dh_local.h" |
| 13 | #include <openssl/bn.h> |
| 14 | #include "crypto/bn_dh.h" |
| 15 | |
| 16 | /* |
| 17 | * Macro to make a DH structure from BIGNUM data. NB: although just copying |
| 18 | * the BIGNUM static pointers would be more efficient, we can't do that |
| 19 | * because they get wiped using BN_clear_free() when DH_free() is called. |
| 20 | */ |
| 21 | |
| 22 | #define make_dh(x) \ |
| 23 | DH *DH_get_##x(void) \ |
| 24 | { \ |
| 25 | DH *dh = DH_new(); \ |
| 26 | \ |
| 27 | if (dh == NULL) \ |
| 28 | return NULL; \ |
| 29 | dh->p = BN_dup(&_bignum_dh##x##_p); \ |
| 30 | dh->g = BN_dup(&_bignum_dh##x##_g); \ |
| 31 | dh->q = BN_dup(&_bignum_dh##x##_q); \ |
| 32 | if (dh->p == NULL || dh->q == NULL || dh->g == NULL) {\ |
| 33 | DH_free(dh); \ |
| 34 | return NULL; \ |
| 35 | } \ |
| 36 | return dh; \ |
| 37 | } |
| 38 | |
| 39 | make_dh(1024_160) |
| 40 | make_dh(2048_224) |
| 41 | make_dh(2048_256) |