diff options
Diffstat (limited to 'src/regress')
| -rw-r--r-- | src/regress/lib/libcrypto/bn/Makefile | 4 | ||||
| -rw-r--r-- | src/regress/lib/libcrypto/bn/bn_ffdh.c | 502 |
2 files changed, 505 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/bn/Makefile b/src/regress/lib/libcrypto/bn/Makefile index 8f49050615..2cf1b4250d 100644 --- a/src/regress/lib/libcrypto/bn/Makefile +++ b/src/regress/lib/libcrypto/bn/Makefile | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | # $OpenBSD: Makefile,v 1.38 2024/04/09 14:59:57 jsing Exp $ | 1 | # $OpenBSD: Makefile,v 1.39 2026/01/23 07:24:48 tb Exp $ |
| 2 | 2 | ||
| 3 | PROGS += bn_add_sub | 3 | PROGS += bn_add_sub |
| 4 | PROGS += bn_bits | 4 | PROGS += bn_bits |
| 5 | PROGS += bn_cmp | 5 | PROGS += bn_cmp |
| 6 | PROGS += bn_convert | 6 | PROGS += bn_convert |
| 7 | PROGS += bn_ffdh | ||
| 7 | PROGS += bn_gcd | 8 | PROGS += bn_gcd |
| 8 | PROGS += bn_general | 9 | PROGS += bn_general |
| 9 | PROGS += bn_isqrt | 10 | PROGS += bn_isqrt |
| @@ -20,6 +21,7 @@ PROGS += bn_to_string | |||
| 20 | PROGS += bn_unit | 21 | PROGS += bn_unit |
| 21 | PROGS += bn_word | 22 | PROGS += bn_word |
| 22 | 23 | ||
| 24 | STATIC_LINK += bn_ffdh | ||
| 23 | STATIC_LINK += bn_gcd | 25 | STATIC_LINK += bn_gcd |
| 24 | STATIC_LINK += bn_isqrt | 26 | STATIC_LINK += bn_isqrt |
| 25 | STATIC_LINK += bn_mod_exp | 27 | STATIC_LINK += bn_mod_exp |
diff --git a/src/regress/lib/libcrypto/bn/bn_ffdh.c b/src/regress/lib/libcrypto/bn/bn_ffdh.c new file mode 100644 index 0000000000..37dfe94278 --- /dev/null +++ b/src/regress/lib/libcrypto/bn/bn_ffdh.c | |||
| @@ -0,0 +1,502 @@ | |||
| 1 | /* $OpenBSD: bn_ffdh.c,v 1.1 2026/01/23 07:24:48 tb Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2026 Theo Buehler <tb@openbsd.org> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <err.h> | ||
| 20 | #include <stdio.h> | ||
| 21 | |||
| 22 | #include <openssl/bn.h> | ||
| 23 | #include <openssl/dh.h> | ||
| 24 | |||
| 25 | #include "bn_local.h" | ||
| 26 | |||
| 27 | #define HAVE_RFC7919_PRIMES 0 | ||
| 28 | #define HAVE_SCAPY_SPECIAL 0 | ||
| 29 | |||
| 30 | /* | ||
| 31 | * The strings below were copied from RFCs 2409, 3526, 7919, | ||
| 32 | * wrapped to 6 columns, added quotes and semicolons. | ||
| 33 | */ | ||
| 34 | |||
| 35 | static const char *rfc2409_prime_768 = | ||
| 36 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 37 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 38 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 39 | "E485B576" "625E7EC6" "F44C42E9" "A63A3620" "FFFFFFFF" "FFFFFFFF"; | ||
| 40 | |||
| 41 | static const char *rfc2409_prime_1024 = | ||
| 42 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 43 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 44 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 45 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 46 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE65381" | ||
| 47 | "FFFFFFFF" "FFFFFFFF"; | ||
| 48 | |||
| 49 | static const char *rfc3526_prime_1536 = | ||
| 50 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 51 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 52 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 53 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 54 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE45B3D" | ||
| 55 | "C2007CB8" "A163BF05" "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" | ||
| 56 | "83655D23" "DCA3AD96" "1C62F356" "208552BB" "9ED52907" "7096966D" | ||
| 57 | "670C354E" "4ABC9804" "F1746C08" "CA237327" "FFFFFFFF" "FFFFFFFF"; | ||
| 58 | |||
| 59 | static const char *rfc3526_prime_2048 = | ||
| 60 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 61 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 62 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 63 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 64 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE45B3D" | ||
| 65 | "C2007CB8" "A163BF05" "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" | ||
| 66 | "83655D23" "DCA3AD96" "1C62F356" "208552BB" "9ED52907" "7096966D" | ||
| 67 | "670C354E" "4ABC9804" "F1746C08" "CA18217C" "32905E46" "2E36CE3B" | ||
| 68 | "E39E772C" "180E8603" "9B2783A2" "EC07A28F" "B5C55DF0" "6F4C52C9" | ||
| 69 | "DE2BCBF6" "95581718" "3995497C" "EA956AE5" "15D22618" "98FA0510" | ||
| 70 | "15728E5A" "8AACAA68" "FFFFFFFF" "FFFFFFFF"; | ||
| 71 | |||
| 72 | static const char *rfc3526_prime_3072 = | ||
| 73 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 74 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 75 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 76 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 77 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE45B3D" | ||
| 78 | "C2007CB8" "A163BF05" "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" | ||
| 79 | "83655D23" "DCA3AD96" "1C62F356" "208552BB" "9ED52907" "7096966D" | ||
| 80 | "670C354E" "4ABC9804" "F1746C08" "CA18217C" "32905E46" "2E36CE3B" | ||
| 81 | "E39E772C" "180E8603" "9B2783A2" "EC07A28F" "B5C55DF0" "6F4C52C9" | ||
| 82 | "DE2BCBF6" "95581718" "3995497C" "EA956AE5" "15D22618" "98FA0510" | ||
| 83 | "15728E5A" "8AAAC42D" "AD33170D" "04507A33" "A85521AB" "DF1CBA64" | ||
| 84 | "ECFB8504" "58DBEF0A" "8AEA7157" "5D060C7D" "B3970F85" "A6E1E4C7" | ||
| 85 | "ABF5AE8C" "DB0933D7" "1E8C94E0" "4A25619D" "CEE3D226" "1AD2EE6B" | ||
| 86 | "F12FFA06" "D98A0864" "D8760273" "3EC86A64" "521F2B18" "177B200C" | ||
| 87 | "BBE11757" "7A615D6C" "770988C0" "BAD946E2" "08E24FA0" "74E5AB31" | ||
| 88 | "43DB5BFC" "E0FD108E" "4B82D120" "A93AD2CA" "FFFFFFFF" "FFFFFFFF"; | ||
| 89 | |||
| 90 | static const char *rfc3526_prime_4096 = | ||
| 91 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 92 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 93 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 94 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 95 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE45B3D" | ||
| 96 | "C2007CB8" "A163BF05" "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" | ||
| 97 | "83655D23" "DCA3AD96" "1C62F356" "208552BB" "9ED52907" "7096966D" | ||
| 98 | "670C354E" "4ABC9804" "F1746C08" "CA18217C" "32905E46" "2E36CE3B" | ||
| 99 | "E39E772C" "180E8603" "9B2783A2" "EC07A28F" "B5C55DF0" "6F4C52C9" | ||
| 100 | "DE2BCBF6" "95581718" "3995497C" "EA956AE5" "15D22618" "98FA0510" | ||
| 101 | "15728E5A" "8AAAC42D" "AD33170D" "04507A33" "A85521AB" "DF1CBA64" | ||
| 102 | "ECFB8504" "58DBEF0A" "8AEA7157" "5D060C7D" "B3970F85" "A6E1E4C7" | ||
| 103 | "ABF5AE8C" "DB0933D7" "1E8C94E0" "4A25619D" "CEE3D226" "1AD2EE6B" | ||
| 104 | "F12FFA06" "D98A0864" "D8760273" "3EC86A64" "521F2B18" "177B200C" | ||
| 105 | "BBE11757" "7A615D6C" "770988C0" "BAD946E2" "08E24FA0" "74E5AB31" | ||
| 106 | "43DB5BFC" "E0FD108E" "4B82D120" "A9210801" "1A723C12" "A787E6D7" | ||
| 107 | "88719A10" "BDBA5B26" "99C32718" "6AF4E23C" "1A946834" "B6150BDA" | ||
| 108 | "2583E9CA" "2AD44CE8" "DBBBC2DB" "04DE8EF9" "2E8EFC14" "1FBECAA6" | ||
| 109 | "287C5947" "4E6BC05D" "99B2964F" "A090C3A2" "233BA186" "515BE7ED" | ||
| 110 | "1F612970" "CEE2D7AF" "B81BDD76" "2170481C" "D0069127" "D5B05AA9" | ||
| 111 | "93B4EA98" "8D8FDDC1" "86FFB7DC" "90A6C08F" "4DF435C9" "34063199" | ||
| 112 | "FFFFFFFF" "FFFFFFFF"; | ||
| 113 | |||
| 114 | static const char *rfc3526_prime_6144 = | ||
| 115 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 116 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 117 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 118 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 119 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE45B3D" | ||
| 120 | "C2007CB8" "A163BF05" "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" | ||
| 121 | "83655D23" "DCA3AD96" "1C62F356" "208552BB" "9ED52907" "7096966D" | ||
| 122 | "670C354E" "4ABC9804" "F1746C08" "CA18217C" "32905E46" "2E36CE3B" | ||
| 123 | "E39E772C" "180E8603" "9B2783A2" "EC07A28F" "B5C55DF0" "6F4C52C9" | ||
| 124 | "DE2BCBF6" "95581718" "3995497C" "EA956AE5" "15D22618" "98FA0510" | ||
| 125 | "15728E5A" "8AAAC42D" "AD33170D" "04507A33" "A85521AB" "DF1CBA64" | ||
| 126 | "ECFB8504" "58DBEF0A" "8AEA7157" "5D060C7D" "B3970F85" "A6E1E4C7" | ||
| 127 | "ABF5AE8C" "DB0933D7" "1E8C94E0" "4A25619D" "CEE3D226" "1AD2EE6B" | ||
| 128 | "F12FFA06" "D98A0864" "D8760273" "3EC86A64" "521F2B18" "177B200C" | ||
| 129 | "BBE11757" "7A615D6C" "770988C0" "BAD946E2" "08E24FA0" "74E5AB31" | ||
| 130 | "43DB5BFC" "E0FD108E" "4B82D120" "A9210801" "1A723C12" "A787E6D7" | ||
| 131 | "88719A10" "BDBA5B26" "99C32718" "6AF4E23C" "1A946834" "B6150BDA" | ||
| 132 | "2583E9CA" "2AD44CE8" "DBBBC2DB" "04DE8EF9" "2E8EFC14" "1FBECAA6" | ||
| 133 | "287C5947" "4E6BC05D" "99B2964F" "A090C3A2" "233BA186" "515BE7ED" | ||
| 134 | "1F612970" "CEE2D7AF" "B81BDD76" "2170481C" "D0069127" "D5B05AA9" | ||
| 135 | "93B4EA98" "8D8FDDC1" "86FFB7DC" "90A6C08F" "4DF435C9" "34028492" | ||
| 136 | "36C3FAB4" "D27C7026" "C1D4DCB2" "602646DE" "C9751E76" "3DBA37BD" | ||
| 137 | "F8FF9406" "AD9E530E" "E5DB382F" "413001AE" "B06A53ED" "9027D831" | ||
| 138 | "179727B0" "865A8918" "DA3EDBEB" "CF9B14ED" "44CE6CBA" "CED4BB1B" | ||
| 139 | "DB7F1447" "E6CC254B" "33205151" "2BD7AF42" "6FB8F401" "378CD2BF" | ||
| 140 | "5983CA01" "C64B92EC" "F032EA15" "D1721D03" "F482D7CE" "6E74FEF6" | ||
| 141 | "D55E702F" "46980C82" "B5A84031" "900B1C9E" "59E7C97F" "BEC7E8F3" | ||
| 142 | "23A97A7E" "36CC88BE" "0F1D45B7" "FF585AC5" "4BD407B2" "2B4154AA" | ||
| 143 | "CC8F6D7E" "BF48E1D8" "14CC5ED2" "0F8037E0" "A79715EE" "F29BE328" | ||
| 144 | "06A1D58B" "B7C5DA76" "F550AA3D" "8A1FBFF0" "EB19CCB1" "A313D55C" | ||
| 145 | "DA56C9EC" "2EF29632" "387FE8D7" "6E3C0468" "043E8F66" "3F4860EE" | ||
| 146 | "12BF2D5B" "0B7474D6" "E694F91E" "6DCC4024" "FFFFFFFF" "FFFFFFFF"; | ||
| 147 | |||
| 148 | static const char *rfc3526_prime_8192 = | ||
| 149 | "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" | ||
| 150 | "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" | ||
| 151 | "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" | ||
| 152 | "E485B576" "625E7EC6" "F44C42E9" "A637ED6B" "0BFF5CB6" "F406B7ED" | ||
| 153 | "EE386BFB" "5A899FA5" "AE9F2411" "7C4B1FE6" "49286651" "ECE45B3D" | ||
| 154 | "C2007CB8" "A163BF05" "98DA4836" "1C55D39A" "69163FA8" "FD24CF5F" | ||
| 155 | "83655D23" "DCA3AD96" "1C62F356" "208552BB" "9ED52907" "7096966D" | ||
| 156 | "670C354E" "4ABC9804" "F1746C08" "CA18217C" "32905E46" "2E36CE3B" | ||
| 157 | "E39E772C" "180E8603" "9B2783A2" "EC07A28F" "B5C55DF0" "6F4C52C9" | ||
| 158 | "DE2BCBF6" "95581718" "3995497C" "EA956AE5" "15D22618" "98FA0510" | ||
| 159 | "15728E5A" "8AAAC42D" "AD33170D" "04507A33" "A85521AB" "DF1CBA64" | ||
| 160 | "ECFB8504" "58DBEF0A" "8AEA7157" "5D060C7D" "B3970F85" "A6E1E4C7" | ||
| 161 | "ABF5AE8C" "DB0933D7" "1E8C94E0" "4A25619D" "CEE3D226" "1AD2EE6B" | ||
| 162 | "F12FFA06" "D98A0864" "D8760273" "3EC86A64" "521F2B18" "177B200C" | ||
| 163 | "BBE11757" "7A615D6C" "770988C0" "BAD946E2" "08E24FA0" "74E5AB31" | ||
| 164 | "43DB5BFC" "E0FD108E" "4B82D120" "A9210801" "1A723C12" "A787E6D7" | ||
| 165 | "88719A10" "BDBA5B26" "99C32718" "6AF4E23C" "1A946834" "B6150BDA" | ||
| 166 | "2583E9CA" "2AD44CE8" "DBBBC2DB" "04DE8EF9" "2E8EFC14" "1FBECAA6" | ||
| 167 | "287C5947" "4E6BC05D" "99B2964F" "A090C3A2" "233BA186" "515BE7ED" | ||
| 168 | "1F612970" "CEE2D7AF" "B81BDD76" "2170481C" "D0069127" "D5B05AA9" | ||
| 169 | "93B4EA98" "8D8FDDC1" "86FFB7DC" "90A6C08F" "4DF435C9" "34028492" | ||
| 170 | "36C3FAB4" "D27C7026" "C1D4DCB2" "602646DE" "C9751E76" "3DBA37BD" | ||
| 171 | "F8FF9406" "AD9E530E" "E5DB382F" "413001AE" "B06A53ED" "9027D831" | ||
| 172 | "179727B0" "865A8918" "DA3EDBEB" "CF9B14ED" "44CE6CBA" "CED4BB1B" | ||
| 173 | "DB7F1447" "E6CC254B" "33205151" "2BD7AF42" "6FB8F401" "378CD2BF" | ||
| 174 | "5983CA01" "C64B92EC" "F032EA15" "D1721D03" "F482D7CE" "6E74FEF6" | ||
| 175 | "D55E702F" "46980C82" "B5A84031" "900B1C9E" "59E7C97F" "BEC7E8F3" | ||
| 176 | "23A97A7E" "36CC88BE" "0F1D45B7" "FF585AC5" "4BD407B2" "2B4154AA" | ||
| 177 | "CC8F6D7E" "BF48E1D8" "14CC5ED2" "0F8037E0" "A79715EE" "F29BE328" | ||
| 178 | "06A1D58B" "B7C5DA76" "F550AA3D" "8A1FBFF0" "EB19CCB1" "A313D55C" | ||
| 179 | "DA56C9EC" "2EF29632" "387FE8D7" "6E3C0468" "043E8F66" "3F4860EE" | ||
| 180 | "12BF2D5B" "0B7474D6" "E694F91E" "6DBE1159" "74A3926F" "12FEE5E4" | ||
| 181 | "38777CB6" "A932DF8C" "D8BEC4D0" "73B931BA" "3BC832B6" "8D9DD300" | ||
| 182 | "741FA7BF" "8AFC47ED" "2576F693" "6BA42466" "3AAB639C" "5AE4F568" | ||
| 183 | "3423B474" "2BF1C978" "238F16CB" "E39D652D" "E3FDB8BE" "FC848AD9" | ||
| 184 | "22222E04" "A4037C07" "13EB57A8" "1A23F0C7" "3473FC64" "6CEA306B" | ||
| 185 | "4BCBC886" "2F8385DD" "FA9D4B7F" "A2C087E8" "79683303" "ED5BDD3A" | ||
| 186 | "062B3CF5" "B3A278A6" "6D2A13F8" "3F44F82D" "DF310EE0" "74AB6A36" | ||
| 187 | "4597E899" "A0255DC1" "64F31CC5" "0846851D" "F9AB4819" "5DED7EA1" | ||
| 188 | "B1D510BD" "7EE74D73" "FAF36BC3" "1ECFA268" "359046F4" "EB879F92" | ||
| 189 | "4009438B" "481C6CD7" "889A002E" "D5EE382B" "C9190DA6" "FC026E47" | ||
| 190 | "9558E447" "5677E9AA" "9E3050E2" "765694DF" "C81F56E8" "80B96E71" | ||
| 191 | "60C980DD" "98EDD3DF" "FFFFFFFF" "FFFFFFFF" | ||
| 192 | ; | ||
| 193 | |||
| 194 | #if HAVE_RFC7919_PRIMES | ||
| 195 | |||
| 196 | static const char *rfc7919_prime_2048 = | ||
| 197 | "FFFFFFFF" "FFFFFFFF" "ADF85458" "A2BB4A9A" "AFDC5620" "273D3CF1" | ||
| 198 | "D8B9C583" "CE2D3695" "A9E13641" "146433FB" "CC939DCE" "249B3EF9" | ||
| 199 | "7D2FE363" "630C75D8" "F681B202" "AEC4617A" "D3DF1ED5" "D5FD6561" | ||
| 200 | "2433F51F" "5F066ED0" "85636555" "3DED1AF3" "B557135E" "7F57C935" | ||
| 201 | "984F0C70" "E0E68B77" "E2A689DA" "F3EFE872" "1DF158A1" "36ADE735" | ||
| 202 | "30ACCA4F" "483A797A" "BC0AB182" "B324FB61" "D108A94B" "B2C8E3FB" | ||
| 203 | "B96ADAB7" "60D7F468" "1D4F42A3" "DE394DF4" "AE56EDE7" "6372BB19" | ||
| 204 | "0B07A7C8" "EE0A6D70" "9E02FCE1" "CDF7E2EC" "C03404CD" "28342F61" | ||
| 205 | "9172FE9C" "E98583FF" "8E4F1232" "EEF28183" "C3FE3B1B" "4C6FAD73" | ||
| 206 | "3BB5FCBC" "2EC22005" "C58EF183" "7D1683B2" "C6F34A26" "C1B2EFFA" | ||
| 207 | "886B4238" "61285C97" "FFFFFFFF" "FFFFFFFF"; | ||
| 208 | |||
| 209 | static const char *rfc7919_prime_3072 = | ||
| 210 | "FFFFFFFF" "FFFFFFFF" "ADF85458" "A2BB4A9A" "AFDC5620" "273D3CF1" | ||
| 211 | "D8B9C583" "CE2D3695" "A9E13641" "146433FB" "CC939DCE" "249B3EF9" | ||
| 212 | "7D2FE363" "630C75D8" "F681B202" "AEC4617A" "D3DF1ED5" "D5FD6561" | ||
| 213 | "2433F51F" "5F066ED0" "85636555" "3DED1AF3" "B557135E" "7F57C935" | ||
| 214 | "984F0C70" "E0E68B77" "E2A689DA" "F3EFE872" "1DF158A1" "36ADE735" | ||
| 215 | "30ACCA4F" "483A797A" "BC0AB182" "B324FB61" "D108A94B" "B2C8E3FB" | ||
| 216 | "B96ADAB7" "60D7F468" "1D4F42A3" "DE394DF4" "AE56EDE7" "6372BB19" | ||
| 217 | "0B07A7C8" "EE0A6D70" "9E02FCE1" "CDF7E2EC" "C03404CD" "28342F61" | ||
| 218 | "9172FE9C" "E98583FF" "8E4F1232" "EEF28183" "C3FE3B1B" "4C6FAD73" | ||
| 219 | "3BB5FCBC" "2EC22005" "C58EF183" "7D1683B2" "C6F34A26" "C1B2EFFA" | ||
| 220 | "886B4238" "611FCFDC" "DE355B3B" "6519035B" "BC34F4DE" "F99C0238" | ||
| 221 | "61B46FC9" "D6E6C907" "7AD91D26" "91F7F7EE" "598CB0FA" "C186D91C" | ||
| 222 | "AEFE1309" "85139270" "B4130C93" "BC437944" "F4FD4452" "E2D74DD3" | ||
| 223 | "64F2E21E" "71F54BFF" "5CAE82AB" "9C9DF69E" "E86D2BC5" "22363A0D" | ||
| 224 | "ABC52197" "9B0DEADA" "1DBF9A42" "D5C4484E" "0ABCD06B" "FA53DDEF" | ||
| 225 | "3C1B20EE" "3FD59D7C" "25E41D2B" "66C62E37" "FFFFFFFF" "FFFFFFFF"; | ||
| 226 | |||
| 227 | static const char *rfc7919_prime_4096 = | ||
| 228 | "FFFFFFFF" "FFFFFFFF" "ADF85458" "A2BB4A9A" "AFDC5620" "273D3CF1" | ||
| 229 | "D8B9C583" "CE2D3695" "A9E13641" "146433FB" "CC939DCE" "249B3EF9" | ||
| 230 | "7D2FE363" "630C75D8" "F681B202" "AEC4617A" "D3DF1ED5" "D5FD6561" | ||
| 231 | "2433F51F" "5F066ED0" "85636555" "3DED1AF3" "B557135E" "7F57C935" | ||
| 232 | "984F0C70" "E0E68B77" "E2A689DA" "F3EFE872" "1DF158A1" "36ADE735" | ||
| 233 | "30ACCA4F" "483A797A" "BC0AB182" "B324FB61" "D108A94B" "B2C8E3FB" | ||
| 234 | "B96ADAB7" "60D7F468" "1D4F42A3" "DE394DF4" "AE56EDE7" "6372BB19" | ||
| 235 | "0B07A7C8" "EE0A6D70" "9E02FCE1" "CDF7E2EC" "C03404CD" "28342F61" | ||
| 236 | "9172FE9C" "E98583FF" "8E4F1232" "EEF28183" "C3FE3B1B" "4C6FAD73" | ||
| 237 | "3BB5FCBC" "2EC22005" "C58EF183" "7D1683B2" "C6F34A26" "C1B2EFFA" | ||
| 238 | "886B4238" "611FCFDC" "DE355B3B" "6519035B" "BC34F4DE" "F99C0238" | ||
| 239 | "61B46FC9" "D6E6C907" "7AD91D26" "91F7F7EE" "598CB0FA" "C186D91C" | ||
| 240 | "AEFE1309" "85139270" "B4130C93" "BC437944" "F4FD4452" "E2D74DD3" | ||
| 241 | "64F2E21E" "71F54BFF" "5CAE82AB" "9C9DF69E" "E86D2BC5" "22363A0D" | ||
| 242 | "ABC52197" "9B0DEADA" "1DBF9A42" "D5C4484E" "0ABCD06B" "FA53DDEF" | ||
| 243 | "3C1B20EE" "3FD59D7C" "25E41D2B" "669E1EF1" "6E6F52C3" "164DF4FB" | ||
| 244 | "7930E9E4" "E58857B6" "AC7D5F42" "D69F6D18" "7763CF1D" "55034004" | ||
| 245 | "87F55BA5" "7E31CC7A" "7135C886" "EFB4318A" "ED6A1E01" "2D9E6832" | ||
| 246 | "A907600A" "918130C4" "6DC778F9" "71AD0038" "092999A3" "33CB8B7A" | ||
| 247 | "1A1DB93D" "7140003C" "2A4ECEA9" "F98D0ACC" "0A8291CD" "CEC97DCF" | ||
| 248 | "8EC9B55A" "7F88A46B" "4DB5A851" "F44182E1" "C68A007E" "5E655F6A" | ||
| 249 | "FFFFFFFF" "FFFFFFFF"; | ||
| 250 | |||
| 251 | static const char *rfc7919_prime_6144 = | ||
| 252 | "FFFFFFFF" "FFFFFFFF" "ADF85458" "A2BB4A9A" "AFDC5620" "273D3CF1" | ||
| 253 | "D8B9C583" "CE2D3695" "A9E13641" "146433FB" "CC939DCE" "249B3EF9" | ||
| 254 | "7D2FE363" "630C75D8" "F681B202" "AEC4617A" "D3DF1ED5" "D5FD6561" | ||
| 255 | "2433F51F" "5F066ED0" "85636555" "3DED1AF3" "B557135E" "7F57C935" | ||
| 256 | "984F0C70" "E0E68B77" "E2A689DA" "F3EFE872" "1DF158A1" "36ADE735" | ||
| 257 | "30ACCA4F" "483A797A" "BC0AB182" "B324FB61" "D108A94B" "B2C8E3FB" | ||
| 258 | "B96ADAB7" "60D7F468" "1D4F42A3" "DE394DF4" "AE56EDE7" "6372BB19" | ||
| 259 | "0B07A7C8" "EE0A6D70" "9E02FCE1" "CDF7E2EC" "C03404CD" "28342F61" | ||
| 260 | "9172FE9C" "E98583FF" "8E4F1232" "EEF28183" "C3FE3B1B" "4C6FAD73" | ||
| 261 | "3BB5FCBC" "2EC22005" "C58EF183" "7D1683B2" "C6F34A26" "C1B2EFFA" | ||
| 262 | "886B4238" "611FCFDC" "DE355B3B" "6519035B" "BC34F4DE" "F99C0238" | ||
| 263 | "61B46FC9" "D6E6C907" "7AD91D26" "91F7F7EE" "598CB0FA" "C186D91C" | ||
| 264 | "AEFE1309" "85139270" "B4130C93" "BC437944" "F4FD4452" "E2D74DD3" | ||
| 265 | "64F2E21E" "71F54BFF" "5CAE82AB" "9C9DF69E" "E86D2BC5" "22363A0D" | ||
| 266 | "ABC52197" "9B0DEADA" "1DBF9A42" "D5C4484E" "0ABCD06B" "FA53DDEF" | ||
| 267 | "3C1B20EE" "3FD59D7C" "25E41D2B" "669E1EF1" "6E6F52C3" "164DF4FB" | ||
| 268 | "7930E9E4" "E58857B6" "AC7D5F42" "D69F6D18" "7763CF1D" "55034004" | ||
| 269 | "87F55BA5" "7E31CC7A" "7135C886" "EFB4318A" "ED6A1E01" "2D9E6832" | ||
| 270 | "A907600A" "918130C4" "6DC778F9" "71AD0038" "092999A3" "33CB8B7A" | ||
| 271 | "1A1DB93D" "7140003C" "2A4ECEA9" "F98D0ACC" "0A8291CD" "CEC97DCF" | ||
| 272 | "8EC9B55A" "7F88A46B" "4DB5A851" "F44182E1" "C68A007E" "5E0DD902" | ||
| 273 | "0BFD64B6" "45036C7A" "4E677D2C" "38532A3A" "23BA4442" "CAF53EA6" | ||
| 274 | "3BB45432" "9B7624C8" "917BDD64" "B1C0FD4C" "B38E8C33" "4C701C3A" | ||
| 275 | "CDAD0657" "FCCFEC71" "9B1F5C3E" "4E46041F" "388147FB" "4CFDB477" | ||
| 276 | "A52471F7" "A9A96910" "B855322E" "DB6340D8" "A00EF092" "350511E3" | ||
| 277 | "0ABEC1FF" "F9E3A26E" "7FB29F8C" "183023C3" "587E38DA" "0077D9B4" | ||
| 278 | "763E4E4B" "94B2BBC1" "94C6651E" "77CAF992" "EEAAC023" "2A281BF6" | ||
| 279 | "B3A739C1" "22611682" "0AE8DB58" "47A67CBE" "F9C9091B" "462D538C" | ||
| 280 | "D72B0374" "6AE77F5E" "62292C31" "1562A846" "505DC82D" "B854338A" | ||
| 281 | "E49F5235" "C95B9117" "8CCF2DD5" "CACEF403" "EC9D1810" "C6272B04" | ||
| 282 | "5B3B71F9" "DC6B80D6" "3FDD4A8E" "9ADB1E69" "62A69526" "D43161C1" | ||
| 283 | "A41D570D" "7938DAD4" "A40E329C" "D0E40E65" "FFFFFFFF" "FFFFFFFF"; | ||
| 284 | |||
| 285 | static const char *rfc7919_prime_8192 = | ||
| 286 | "FFFFFFFF" "FFFFFFFF" "ADF85458" "A2BB4A9A" "AFDC5620" "273D3CF1" | ||
| 287 | "D8B9C583" "CE2D3695" "A9E13641" "146433FB" "CC939DCE" "249B3EF9" | ||
| 288 | "7D2FE363" "630C75D8" "F681B202" "AEC4617A" "D3DF1ED5" "D5FD6561" | ||
| 289 | "2433F51F" "5F066ED0" "85636555" "3DED1AF3" "B557135E" "7F57C935" | ||
| 290 | "984F0C70" "E0E68B77" "E2A689DA" "F3EFE872" "1DF158A1" "36ADE735" | ||
| 291 | "30ACCA4F" "483A797A" "BC0AB182" "B324FB61" "D108A94B" "B2C8E3FB" | ||
| 292 | "B96ADAB7" "60D7F468" "1D4F42A3" "DE394DF4" "AE56EDE7" "6372BB19" | ||
| 293 | "0B07A7C8" "EE0A6D70" "9E02FCE1" "CDF7E2EC" "C03404CD" "28342F61" | ||
| 294 | "9172FE9C" "E98583FF" "8E4F1232" "EEF28183" "C3FE3B1B" "4C6FAD73" | ||
| 295 | "3BB5FCBC" "2EC22005" "C58EF183" "7D1683B2" "C6F34A26" "C1B2EFFA" | ||
| 296 | "886B4238" "611FCFDC" "DE355B3B" "6519035B" "BC34F4DE" "F99C0238" | ||
| 297 | "61B46FC9" "D6E6C907" "7AD91D26" "91F7F7EE" "598CB0FA" "C186D91C" | ||
| 298 | "AEFE1309" "85139270" "B4130C93" "BC437944" "F4FD4452" "E2D74DD3" | ||
| 299 | "64F2E21E" "71F54BFF" "5CAE82AB" "9C9DF69E" "E86D2BC5" "22363A0D" | ||
| 300 | "ABC52197" "9B0DEADA" "1DBF9A42" "D5C4484E" "0ABCD06B" "FA53DDEF" | ||
| 301 | "3C1B20EE" "3FD59D7C" "25E41D2B" "669E1EF1" "6E6F52C3" "164DF4FB" | ||
| 302 | "7930E9E4" "E58857B6" "AC7D5F42" "D69F6D18" "7763CF1D" "55034004" | ||
| 303 | "87F55BA5" "7E31CC7A" "7135C886" "EFB4318A" "ED6A1E01" "2D9E6832" | ||
| 304 | "A907600A" "918130C4" "6DC778F9" "71AD0038" "092999A3" "33CB8B7A" | ||
| 305 | "1A1DB93D" "7140003C" "2A4ECEA9" "F98D0ACC" "0A8291CD" "CEC97DCF" | ||
| 306 | "8EC9B55A" "7F88A46B" "4DB5A851" "F44182E1" "C68A007E" "5E0DD902" | ||
| 307 | "0BFD64B6" "45036C7A" "4E677D2C" "38532A3A" "23BA4442" "CAF53EA6" | ||
| 308 | "3BB45432" "9B7624C8" "917BDD64" "B1C0FD4C" "B38E8C33" "4C701C3A" | ||
| 309 | "CDAD0657" "FCCFEC71" "9B1F5C3E" "4E46041F" "388147FB" "4CFDB477" | ||
| 310 | "A52471F7" "A9A96910" "B855322E" "DB6340D8" "A00EF092" "350511E3" | ||
| 311 | "0ABEC1FF" "F9E3A26E" "7FB29F8C" "183023C3" "587E38DA" "0077D9B4" | ||
| 312 | "763E4E4B" "94B2BBC1" "94C6651E" "77CAF992" "EEAAC023" "2A281BF6" | ||
| 313 | "B3A739C1" "22611682" "0AE8DB58" "47A67CBE" "F9C9091B" "462D538C" | ||
| 314 | "D72B0374" "6AE77F5E" "62292C31" "1562A846" "505DC82D" "B854338A" | ||
| 315 | "E49F5235" "C95B9117" "8CCF2DD5" "CACEF403" "EC9D1810" "C6272B04" | ||
| 316 | "5B3B71F9" "DC6B80D6" "3FDD4A8E" "9ADB1E69" "62A69526" "D43161C1" | ||
| 317 | "A41D570D" "7938DAD4" "A40E329C" "CFF46AAA" "36AD004C" "F600C838" | ||
| 318 | "1E425A31" "D951AE64" "FDB23FCE" "C9509D43" "687FEB69" "EDD1CC5E" | ||
| 319 | "0B8CC3BD" "F64B10EF" "86B63142" "A3AB8829" "555B2F74" "7C932665" | ||
| 320 | "CB2C0F1C" "C01BD702" "29388839" "D2AF05E4" "54504AC7" "8B758282" | ||
| 321 | "2846C0BA" "35C35F5C" "59160CC0" "46FD8251" "541FC68C" "9C86B022" | ||
| 322 | "BB709987" "6A460E74" "51A8A931" "09703FEE" "1C217E6C" "3826E52C" | ||
| 323 | "51AA691E" "0E423CFC" "99E9E316" "50C1217B" "624816CD" "AD9A95F9" | ||
| 324 | "D5B80194" "88D9C0A0" "A1FE3075" "A577E231" "83F81D4A" "3F2FA457" | ||
| 325 | "1EFC8CE0" "BA8A4FE8" "B6855DFE" "72B0A66E" "DED2FBAB" "FBE58A30" | ||
| 326 | "FAFABE1C" "5D71A87E" "2F741EF8" "C1FE86FE" "A6BBFDE5" "30677F0D" | ||
| 327 | "97D11D49" "F7A8443D" "0822E506" "A9F4614E" "011E2A94" "838FF88C" | ||
| 328 | "D68C8BB7" "C5C6424C" "FFFFFFFF" "FFFFFFFF"; | ||
| 329 | |||
| 330 | #endif /* HAVE_RFC7919_PRIMES */ | ||
| 331 | |||
| 332 | typedef BIGNUM *(*get_p_fn)(BIGNUM *); | ||
| 333 | |||
| 334 | static const struct ffdh_test { | ||
| 335 | const char *name; | ||
| 336 | const char **str; | ||
| 337 | get_p_fn fn; | ||
| 338 | } ffdh_tests[] = { | ||
| 339 | { | ||
| 340 | .name = "RFC 2409, 768 bit", | ||
| 341 | .str = &rfc2409_prime_768, | ||
| 342 | .fn = BN_get_rfc2409_prime_768, | ||
| 343 | }, | ||
| 344 | { | ||
| 345 | .name = "RFC 2409, 1024 bit", | ||
| 346 | .str = &rfc2409_prime_1024, | ||
| 347 | .fn = BN_get_rfc2409_prime_1024, | ||
| 348 | }, | ||
| 349 | { | ||
| 350 | .name = "RFC 3526, 1536 bit", | ||
| 351 | .str = &rfc3526_prime_1536, | ||
| 352 | .fn = BN_get_rfc3526_prime_1536, | ||
| 353 | }, | ||
| 354 | { | ||
| 355 | .name = "RFC 3526, 2048 bit", | ||
| 356 | .str = &rfc3526_prime_2048, | ||
| 357 | .fn = BN_get_rfc3526_prime_2048, | ||
| 358 | }, | ||
| 359 | { | ||
| 360 | .name = "RFC 3526, 3072 bit", | ||
| 361 | .str = &rfc3526_prime_3072, | ||
| 362 | .fn = BN_get_rfc3526_prime_3072, | ||
| 363 | }, | ||
| 364 | { | ||
| 365 | .name = "RFC 3526, 4096 bit", | ||
| 366 | .str = &rfc3526_prime_4096, | ||
| 367 | .fn = BN_get_rfc3526_prime_4096, | ||
| 368 | }, | ||
| 369 | { | ||
| 370 | .name = "RFC 3526, 6144 bit", | ||
| 371 | .str = &rfc3526_prime_6144, | ||
| 372 | .fn = BN_get_rfc3526_prime_6144, | ||
| 373 | }, | ||
| 374 | { | ||
| 375 | .name = "RFC 3526, 8192 bit", | ||
| 376 | .str = &rfc3526_prime_8192, | ||
| 377 | .fn = BN_get_rfc3526_prime_8192, | ||
| 378 | }, | ||
| 379 | #if HAVE_RFC7919_PRIMES | ||
| 380 | { | ||
| 381 | .name = "RFC 7919, 2048 bit", | ||
| 382 | .str = &rfc7919_prime_2048, | ||
| 383 | .fn = BN_get_rfc7919_prime_2048, | ||
| 384 | }, | ||
| 385 | { | ||
| 386 | .name = "RFC 7919, 3072 bit", | ||
| 387 | .str = &rfc7919_prime_3072, | ||
| 388 | .fn = BN_get_rfc7919_prime_3072, | ||
| 389 | }, | ||
| 390 | { | ||
| 391 | .name = "RFC 7919, 4096 bit", | ||
| 392 | .str = &rfc7919_prime_4096, | ||
| 393 | .fn = BN_get_rfc7919_prime_4096, | ||
| 394 | }, | ||
| 395 | { | ||
| 396 | .name = "RFC 7919, 6144 bit", | ||
| 397 | .str = &rfc7919_prime_6144, | ||
| 398 | .fn = BN_get_rfc7919_prime_6144, | ||
| 399 | }, | ||
| 400 | { | ||
| 401 | .name = "RFC 7919, 8192 bit", | ||
| 402 | .str = &rfc7919_prime_8192, | ||
| 403 | .fn = BN_get_rfc7919_prime_8192, | ||
| 404 | }, | ||
| 405 | #endif /* HAVE_RFC7919_PRIMES */ | ||
| 406 | }; | ||
| 407 | |||
| 408 | #define N_TESTS (sizeof(ffdh_tests) / sizeof(ffdh_tests[0])) | ||
| 409 | |||
| 410 | static int | ||
| 411 | ffdh_test_case(const struct ffdh_test *t, BN_CTX *ctx) | ||
| 412 | { | ||
| 413 | BIGNUM *pstr, *papi; | ||
| 414 | int failed = 1; | ||
| 415 | |||
| 416 | BN_CTX_start(ctx); | ||
| 417 | |||
| 418 | if ((pstr = BN_CTX_get(ctx)) == NULL) | ||
| 419 | errx(1, "BN_CTX_get"); | ||
| 420 | if ((papi = BN_CTX_get(ctx)) == NULL) | ||
| 421 | errx(1, "BN_CTX_get"); | ||
| 422 | |||
| 423 | if (BN_hex2bn(&pstr, *t->str) == 0) | ||
| 424 | errx(1, "%s: BN_hex2bn", t->name); | ||
| 425 | if (t->fn(papi) == NULL) | ||
| 426 | errx(1, "%s: BN_get_*", t->name); | ||
| 427 | |||
| 428 | if (BN_cmp(pstr, papi) != 0) { | ||
| 429 | fprintf(stderr, "FAIL: %s mismatch\n", t->name); | ||
| 430 | goto failed; | ||
| 431 | } | ||
| 432 | |||
| 433 | failed = 0; | ||
| 434 | |||
| 435 | failed: | ||
| 436 | BN_CTX_end(ctx); | ||
| 437 | |||
| 438 | return failed; | ||
| 439 | } | ||
| 440 | |||
| 441 | static int | ||
| 442 | ffdh_check(const struct ffdh_test *t) | ||
| 443 | { | ||
| 444 | #if HAVE_SCAPY_SPECIAL | ||
| 445 | DH *dh = NULL; | ||
| 446 | BIGNUM *p = NULL, *g = NULL; | ||
| 447 | int codes = 0; | ||
| 448 | int failed = 1; | ||
| 449 | |||
| 450 | if (BN_hex2bn(&p, *t->str) == 0) | ||
| 451 | errx(1, "BN_hex2bn"); | ||
| 452 | if (BN_hex2bn(&g, "2") == 0) | ||
| 453 | errx(1, "BN_hex2bn"); | ||
| 454 | |||
| 455 | if ((dh = DH_new()) == NULL) | ||
| 456 | errx(1, "DH_new"); | ||
| 457 | if (!DH_set0_pqg(dh, p, NULL, g)) | ||
| 458 | errx(1, "DH_set0_pqg"); | ||
| 459 | p = NULL; | ||
| 460 | g = NULL; | ||
| 461 | |||
| 462 | if (!DH_check(dh, &codes)) { | ||
| 463 | fprintf(stderr, "FAIL: %s: DH_check\n", t->name); | ||
| 464 | goto failed; | ||
| 465 | } | ||
| 466 | if (codes != 0) { | ||
| 467 | fprintf(stderr, "FAIL: %s: DH_check set %x\n", t->name, codes); | ||
| 468 | goto failed; | ||
| 469 | } | ||
| 470 | |||
| 471 | failed = 0; | ||
| 472 | |||
| 473 | failed: | ||
| 474 | BN_free(p); | ||
| 475 | BN_free(g); | ||
| 476 | DH_free(dh); | ||
| 477 | |||
| 478 | return failed; | ||
| 479 | #else | ||
| 480 | return 0; | ||
| 481 | #endif /* HAVE_SCAPY_SPECIAL */ | ||
| 482 | } | ||
| 483 | |||
| 484 | int | ||
| 485 | main(void) | ||
| 486 | { | ||
| 487 | BN_CTX *ctx; | ||
| 488 | size_t i; | ||
| 489 | int failed = 0; | ||
| 490 | |||
| 491 | if ((ctx = BN_CTX_new()) == NULL) | ||
| 492 | errx(1, "BN_CTX_new"); | ||
| 493 | |||
| 494 | for (i = 0; i < N_TESTS; i++) { | ||
| 495 | failed |= ffdh_test_case(&ffdh_tests[i], ctx); | ||
| 496 | failed |= ffdh_check(&ffdh_tests[i]); | ||
| 497 | } | ||
| 498 | |||
| 499 | BN_CTX_free(ctx); | ||
| 500 | |||
| 501 | return failed; | ||
| 502 | } | ||
