summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortedu <>2014-07-28 17:57:18 +0000
committertedu <>2014-07-28 17:57:18 +0000
commit9bf4aaa7e0515aa08e8a462348fc47d3fec0e831 (patch)
tree808724802a47d43670e8dfd6f6050aba39dcf93e /src/lib
parent224cc55e7b0aa21110d14dd564e88e13893a294e (diff)
downloadopenbsd-9bf4aaa7e0515aa08e8a462348fc47d3fec0e831.tar.gz
openbsd-9bf4aaa7e0515aa08e8a462348fc47d3fec0e831.tar.bz2
openbsd-9bf4aaa7e0515aa08e8a462348fc47d3fec0e831.zip
Remove SRP code. It contains a bug (this should not surprise anyone), but
the details are under embargo. The original plan was to wait for the embargo to lift, but we've been waiting for quite some time, and there's no indication of when or even if it will end. No sense in dragging this out any longer. The SRP code has never been enabled in OpenBSD, though I understand it is in use by some other people. However, in light of this and other issues, we're officially saying SRP is outside the scope of libressl. (For now.)
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/crypto/Makefile6
-rw-r--r--src/lib/libcrypto/srp/srp.h174
-rw-r--r--src/lib/libcrypto/srp/srp_grps.h518
-rw-r--r--src/lib/libcrypto/srp/srp_lcl.h83
-rw-r--r--src/lib/libcrypto/srp/srp_lib.c376
-rw-r--r--src/lib/libcrypto/srp/srp_vfy.c663
-rw-r--r--src/lib/libssl/src/apps/progs.h3
-rw-r--r--src/lib/libssl/src/crypto/srp/srp.h174
-rw-r--r--src/lib/libssl/src/crypto/srp/srp_grps.h518
-rw-r--r--src/lib/libssl/src/crypto/srp/srp_lcl.h83
-rw-r--r--src/lib/libssl/src/crypto/srp/srp_lib.c376
-rw-r--r--src/lib/libssl/src/crypto/srp/srp_vfy.c663
12 files changed, 2 insertions, 3635 deletions
diff --git a/src/lib/libcrypto/crypto/Makefile b/src/lib/libcrypto/crypto/Makefile
index fdbafba852..cd32382081 100644
--- a/src/lib/libcrypto/crypto/Makefile
+++ b/src/lib/libcrypto/crypto/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.45 2014/07/12 20:11:45 miod Exp $ 1# $OpenBSD: Makefile,v 1.46 2014/07/28 17:57:18 tedu Exp $
2 2
3LIB= crypto 3LIB= crypto
4 4
@@ -223,9 +223,6 @@ SRCS+= rsa_pmeth.c rsa_crpt.c
223# sha/ 223# sha/
224SRCS+= sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha256.c sha512.c 224SRCS+= sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha256.c sha512.c
225 225
226# srp/
227#SRCS+= srp_lib.c srp_vfy.c
228
229# stack/ 226# stack/
230SRCS+= stack.c 227SRCS+= stack.c
231 228
@@ -374,7 +371,6 @@ HDRS=\
374 crypto/ripemd/ripemd.h \ 371 crypto/ripemd/ripemd.h \
375 crypto/rsa/rsa.h \ 372 crypto/rsa/rsa.h \
376 crypto/sha/sha.h \ 373 crypto/sha/sha.h \
377 crypto/srp/srp.h \
378 crypto/stack/safestack.h \ 374 crypto/stack/safestack.h \
379 crypto/stack/stack.h \ 375 crypto/stack/stack.h \
380 crypto/store/store.h \ 376 crypto/store/store.h \
diff --git a/src/lib/libcrypto/srp/srp.h b/src/lib/libcrypto/srp/srp.h
deleted file mode 100644
index 168d9656b3..0000000000
--- a/src/lib/libcrypto/srp/srp.h
+++ /dev/null
@@ -1,174 +0,0 @@
1/* $OpenBSD: srp.h,v 1.3 2014/07/10 22:45:58 jsing Exp $ */
2/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
3 * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
4 * for the EdelKey project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgment:
23 * "This product includes software developed by the OpenSSL Project
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 * endorse or promote products derived from this software without
28 * prior written permission. For written permission, please contact
29 * licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 * nor may "OpenSSL" appear in their names without prior written
33 * permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 * acknowledgment:
37 * "This product includes software developed by the OpenSSL Project
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com). This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59#ifndef __SRP_H__
60#define __SRP_H__
61
62#include <openssl/opensslconf.h>
63
64#ifndef OPENSSL_NO_SRP
65
66#include <stdio.h>
67#include <string.h>
68
69#ifdef __cplusplus
70extern "C" {
71#endif
72
73#include <openssl/safestack.h>
74#include <openssl/bn.h>
75#include <openssl/crypto.h>
76
77typedef struct SRP_gN_cache_st
78 {
79 char *b64_bn;
80 BIGNUM *bn;
81 } SRP_gN_cache;
82
83
84DECLARE_STACK_OF(SRP_gN_cache)
85
86typedef struct SRP_user_pwd_st
87 {
88 char *id;
89 BIGNUM *s;
90 BIGNUM *v;
91 const BIGNUM *g;
92 const BIGNUM *N;
93 char *info;
94 } SRP_user_pwd;
95
96DECLARE_STACK_OF(SRP_user_pwd)
97
98typedef struct SRP_VBASE_st
99 {
100 STACK_OF(SRP_user_pwd) *users_pwd;
101 STACK_OF(SRP_gN_cache) *gN_cache;
102/* to simulate a user */
103 char *seed_key;
104 BIGNUM *default_g;
105 BIGNUM *default_N;
106 } SRP_VBASE;
107
108
109/*Structure interne pour retenir les couples N et g*/
110typedef struct SRP_gN_st
111 {
112 char *id;
113 BIGNUM *g;
114 BIGNUM *N;
115 } SRP_gN;
116
117DECLARE_STACK_OF(SRP_gN)
118
119SRP_VBASE *SRP_VBASE_new(char *seed_key);
120int SRP_VBASE_free(SRP_VBASE *vb);
121int SRP_VBASE_init(SRP_VBASE *vb, char * verifier_file);
122SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);
123char *SRP_create_verifier(const char *user, const char *pass, char **salt,
124 char **verifier, const char *N, const char *g);
125int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g);
126
127
128#define SRP_NO_ERROR 0
129#define SRP_ERR_VBASE_INCOMPLETE_FILE 1
130#define SRP_ERR_VBASE_BN_LIB 2
131#define SRP_ERR_OPEN_FILE 3
132#define SRP_ERR_MEMORY 4
133
134#define DB_srptype 0
135#define DB_srpverifier 1
136#define DB_srpsalt 2
137#define DB_srpid 3
138#define DB_srpgN 4
139#define DB_srpinfo 5
140#undef DB_NUMBER
141#define DB_NUMBER 6
142
143#define DB_SRP_INDEX 'I'
144#define DB_SRP_VALID 'V'
145#define DB_SRP_REVOKED 'R'
146#define DB_SRP_MODIF 'v'
147
148
149/* see srp.c */
150char * SRP_check_known_gN_param(BIGNUM* g, BIGNUM* N);
151SRP_gN *SRP_get_default_gN(const char * id) ;
152
153/* server side .... */
154BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N);
155BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v);
156int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N);
157BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N) ;
158
159
160
161/* client side .... */
162BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass);
163BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g);
164BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u);
165int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N);
166
167#define SRP_MINIMAL_N 1024
168
169#ifdef __cplusplus
170}
171#endif
172
173#endif
174#endif
diff --git a/src/lib/libcrypto/srp/srp_grps.h b/src/lib/libcrypto/srp/srp_grps.h
deleted file mode 100644
index 8d7a00a3ba..0000000000
--- a/src/lib/libcrypto/srp/srp_grps.h
+++ /dev/null
@@ -1,518 +0,0 @@
1/* $OpenBSD: srp_grps.h,v 1.2 2014/06/12 15:49:30 deraadt Exp $ */
2/* start of generated data */
3
4static BN_ULONG bn_group_1024_value[] = {
5 bn_pack4(0x9FC6,0x1D2F,0xC0EB,0x06E3),
6 bn_pack4(0xFD51,0x38FE,0x8376,0x435B),
7 bn_pack4(0x2FD4,0xCBF4,0x976E,0xAA9A),
8 bn_pack4(0x68ED,0xBC3C,0x0572,0x6CC0),
9 bn_pack4(0xC529,0xF566,0x660E,0x57EC),
10 bn_pack4(0x8255,0x9B29,0x7BCF,0x1885),
11 bn_pack4(0xCE8E,0xF4AD,0x69B1,0x5D49),
12 bn_pack4(0x5DC7,0xD7B4,0x6154,0xD6B6),
13 bn_pack4(0x8E49,0x5C1D,0x6089,0xDAD1),
14 bn_pack4(0xE0D5,0xD8E2,0x50B9,0x8BE4),
15 bn_pack4(0x383B,0x4813,0xD692,0xC6E0),
16 bn_pack4(0xD674,0xDF74,0x96EA,0x81D3),
17 bn_pack4(0x9EA2,0x314C,0x9C25,0x6576),
18 bn_pack4(0x6072,0x6187,0x75FF,0x3C0B),
19 bn_pack4(0x9C33,0xF80A,0xFA8F,0xC5E8),
20 bn_pack4(0xEEAF,0x0AB9,0xADB3,0x8DD6)
21};
22static BIGNUM bn_group_1024 = {
23 bn_group_1024_value,
24 (sizeof bn_group_1024_value)/sizeof(BN_ULONG),
25 (sizeof bn_group_1024_value)/sizeof(BN_ULONG),
26 0,
27 BN_FLG_STATIC_DATA
28};
29
30static BN_ULONG bn_group_1536_value[] = {
31 bn_pack4(0xCF76,0xE3FE,0xD135,0xF9BB),
32 bn_pack4(0x1518,0x0F93,0x499A,0x234D),
33 bn_pack4(0x8CE7,0xA28C,0x2442,0xC6F3),
34 bn_pack4(0x5A02,0x1FFF,0x5E91,0x479E),
35 bn_pack4(0x7F8A,0x2FE9,0xB8B5,0x292E),
36 bn_pack4(0x837C,0x264A,0xE3A9,0xBEB8),
37 bn_pack4(0xE442,0x734A,0xF7CC,0xB7AE),
38 bn_pack4(0x6577,0x2E43,0x7D6C,0x7F8C),
39 bn_pack4(0xDB2F,0xD53D,0x24B7,0xC486),
40 bn_pack4(0x6EDF,0x0195,0x3934,0x9627),
41 bn_pack4(0x158B,0xFD3E,0x2B9C,0x8CF5),
42 bn_pack4(0x764E,0x3F4B,0x53DD,0x9DA1),
43 bn_pack4(0x4754,0x8381,0xDBC5,0xB1FC),
44 bn_pack4(0x9B60,0x9E0B,0xE3BA,0xB63D),
45 bn_pack4(0x8134,0xB1C8,0xB979,0x8914),
46 bn_pack4(0xDF02,0x8A7C,0xEC67,0xF0D0),
47 bn_pack4(0x80B6,0x55BB,0x9A22,0xE8DC),
48 bn_pack4(0x1558,0x903B,0xA0D0,0xF843),
49 bn_pack4(0x51C6,0xA94B,0xE460,0x7A29),
50 bn_pack4(0x5F4F,0x5F55,0x6E27,0xCBDE),
51 bn_pack4(0xBEEE,0xA961,0x4B19,0xCC4D),
52 bn_pack4(0xDBA5,0x1DF4,0x99AC,0x4C80),
53 bn_pack4(0xB1F1,0x2A86,0x17A4,0x7BBB),
54 bn_pack4(0x9DEF,0x3CAF,0xB939,0x277A)
55};
56static BIGNUM bn_group_1536 = {
57 bn_group_1536_value,
58 (sizeof bn_group_1536_value)/sizeof(BN_ULONG),
59 (sizeof bn_group_1536_value)/sizeof(BN_ULONG),
60 0,
61 BN_FLG_STATIC_DATA
62};
63
64static BN_ULONG bn_group_2048_value[] = {
65 bn_pack4(0x0FA7,0x111F,0x9E4A,0xFF73),
66 bn_pack4(0x9B65,0xE372,0xFCD6,0x8EF2),
67 bn_pack4(0x35DE,0x236D,0x525F,0x5475),
68 bn_pack4(0x94B5,0xC803,0xD89F,0x7AE4),
69 bn_pack4(0x71AE,0x35F8,0xE9DB,0xFBB6),
70 bn_pack4(0x2A56,0x98F3,0xA8D0,0xC382),
71 bn_pack4(0x9CCC,0x041C,0x7BC3,0x08D8),
72 bn_pack4(0xAF87,0x4E73,0x03CE,0x5329),
73 bn_pack4(0x6160,0x2790,0x04E5,0x7AE6),
74 bn_pack4(0x032C,0xFBDB,0xF52F,0xB378),
75 bn_pack4(0x5EA7,0x7A27,0x75D2,0xECFA),
76 bn_pack4(0x5445,0x23B5,0x24B0,0xD57D),
77 bn_pack4(0x5B9D,0x32E6,0x88F8,0x7748),
78 bn_pack4(0xF1D2,0xB907,0x8717,0x461A),
79 bn_pack4(0x76BD,0x207A,0x436C,0x6481),
80 bn_pack4(0xCA97,0xB43A,0x23FB,0x8016),
81 bn_pack4(0x1D28,0x1E44,0x6B14,0x773B),
82 bn_pack4(0x7359,0xD041,0xD5C3,0x3EA7),
83 bn_pack4(0xA80D,0x740A,0xDBF4,0xFF74),
84 bn_pack4(0x55F9,0x7993,0xEC97,0x5EEA),
85 bn_pack4(0x2918,0xA996,0x2F0B,0x93B8),
86 bn_pack4(0x661A,0x05FB,0xD5FA,0xAAE8),
87 bn_pack4(0xCF60,0x9517,0x9A16,0x3AB3),
88 bn_pack4(0xE808,0x3969,0xEDB7,0x67B0),
89 bn_pack4(0xCD7F,0x48A9,0xDA04,0xFD50),
90 bn_pack4(0xD523,0x12AB,0x4B03,0x310D),
91 bn_pack4(0x8193,0xE075,0x7767,0xA13D),
92 bn_pack4(0xA373,0x29CB,0xB4A0,0x99ED),
93 bn_pack4(0xFC31,0x9294,0x3DB5,0x6050),
94 bn_pack4(0xAF72,0xB665,0x1987,0xEE07),
95 bn_pack4(0xF166,0xDE5E,0x1389,0x582F),
96 bn_pack4(0xAC6B,0xDB41,0x324A,0x9A9B)
97};
98static BIGNUM bn_group_2048 = {
99 bn_group_2048_value,
100 (sizeof bn_group_2048_value)/sizeof(BN_ULONG),
101 (sizeof bn_group_2048_value)/sizeof(BN_ULONG),
102 0,
103 BN_FLG_STATIC_DATA
104};
105
106static BN_ULONG bn_group_3072_value[] = {
107 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
108 bn_pack4(0x4B82,0xD120,0xA93A,0xD2CA),
109 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
110 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
111 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
112 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
113 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
114 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
115 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
116 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
117 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
118 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
119 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
120 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
121 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
122 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
123 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
124 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
125 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
126 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
127 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
128 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
129 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
130 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
131 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
132 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
133 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
134 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
135 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
136 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
137 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
138 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
139 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
140 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
141 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
142 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
143 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
144 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
145 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
146 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
147 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
148 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
149 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
150 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
151 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
152 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
153 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
154 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
155};
156static BIGNUM bn_group_3072 = {
157 bn_group_3072_value,
158 (sizeof bn_group_3072_value)/sizeof(BN_ULONG),
159 (sizeof bn_group_3072_value)/sizeof(BN_ULONG),
160 0,
161 BN_FLG_STATIC_DATA
162};
163
164static BN_ULONG bn_group_4096_value[] = {
165 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
166 bn_pack4(0x4DF4,0x35C9,0x3406,0x3199),
167 bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
168 bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1),
169 bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9),
170 bn_pack4(0xB81B,0xDD76,0x2170,0x481C),
171 bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF),
172 bn_pack4(0x233B,0xA186,0x515B,0xE7ED),
173 bn_pack4(0x99B2,0x964F,0xA090,0xC3A2),
174 bn_pack4(0x287C,0x5947,0x4E6B,0xC05D),
175 bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6),
176 bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9),
177 bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8),
178 bn_pack4(0x1A94,0x6834,0xB615,0x0BDA),
179 bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C),
180 bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26),
181 bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7),
182 bn_pack4(0x4B82,0xD120,0xA921,0x0801),
183 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
184 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
185 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
186 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
187 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
188 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
189 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
190 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
191 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
192 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
193 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
194 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
195 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
196 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
197 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
198 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
199 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
200 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
201 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
202 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
203 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
204 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
205 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
206 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
207 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
208 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
209 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
210 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
211 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
212 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
213 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
214 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
215 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
216 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
217 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
218 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
219 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
220 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
221 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
222 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
223 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
224 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
225 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
226 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
227 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
228 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
229};
230static BIGNUM bn_group_4096 = {
231 bn_group_4096_value,
232 (sizeof bn_group_4096_value)/sizeof(BN_ULONG),
233 (sizeof bn_group_4096_value)/sizeof(BN_ULONG),
234 0,
235 BN_FLG_STATIC_DATA
236};
237
238static BN_ULONG bn_group_6144_value[] = {
239 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
240 bn_pack4(0xE694,0xF91E,0x6DCC,0x4024),
241 bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6),
242 bn_pack4(0x043E,0x8F66,0x3F48,0x60EE),
243 bn_pack4(0x387F,0xE8D7,0x6E3C,0x0468),
244 bn_pack4(0xDA56,0xC9EC,0x2EF2,0x9632),
245 bn_pack4(0xEB19,0xCCB1,0xA313,0xD55C),
246 bn_pack4(0xF550,0xAA3D,0x8A1F,0xBFF0),
247 bn_pack4(0x06A1,0xD58B,0xB7C5,0xDA76),
248 bn_pack4(0xA797,0x15EE,0xF29B,0xE328),
249 bn_pack4(0x14CC,0x5ED2,0x0F80,0x37E0),
250 bn_pack4(0xCC8F,0x6D7E,0xBF48,0xE1D8),
251 bn_pack4(0x4BD4,0x07B2,0x2B41,0x54AA),
252 bn_pack4(0x0F1D,0x45B7,0xFF58,0x5AC5),
253 bn_pack4(0x23A9,0x7A7E,0x36CC,0x88BE),
254 bn_pack4(0x59E7,0xC97F,0xBEC7,0xE8F3),
255 bn_pack4(0xB5A8,0x4031,0x900B,0x1C9E),
256 bn_pack4(0xD55E,0x702F,0x4698,0x0C82),
257 bn_pack4(0xF482,0xD7CE,0x6E74,0xFEF6),
258 bn_pack4(0xF032,0xEA15,0xD172,0x1D03),
259 bn_pack4(0x5983,0xCA01,0xC64B,0x92EC),
260 bn_pack4(0x6FB8,0xF401,0x378C,0xD2BF),
261 bn_pack4(0x3320,0x5151,0x2BD7,0xAF42),
262 bn_pack4(0xDB7F,0x1447,0xE6CC,0x254B),
263 bn_pack4(0x44CE,0x6CBA,0xCED4,0xBB1B),
264 bn_pack4(0xDA3E,0xDBEB,0xCF9B,0x14ED),
265 bn_pack4(0x1797,0x27B0,0x865A,0x8918),
266 bn_pack4(0xB06A,0x53ED,0x9027,0xD831),
267 bn_pack4(0xE5DB,0x382F,0x4130,0x01AE),
268 bn_pack4(0xF8FF,0x9406,0xAD9E,0x530E),
269 bn_pack4(0xC975,0x1E76,0x3DBA,0x37BD),
270 bn_pack4(0xC1D4,0xDCB2,0x6026,0x46DE),
271 bn_pack4(0x36C3,0xFAB4,0xD27C,0x7026),
272 bn_pack4(0x4DF4,0x35C9,0x3402,0x8492),
273 bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
274 bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1),
275 bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9),
276 bn_pack4(0xB81B,0xDD76,0x2170,0x481C),
277 bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF),
278 bn_pack4(0x233B,0xA186,0x515B,0xE7ED),
279 bn_pack4(0x99B2,0x964F,0xA090,0xC3A2),
280 bn_pack4(0x287C,0x5947,0x4E6B,0xC05D),
281 bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6),
282 bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9),
283 bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8),
284 bn_pack4(0x1A94,0x6834,0xB615,0x0BDA),
285 bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C),
286 bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26),
287 bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7),
288 bn_pack4(0x4B82,0xD120,0xA921,0x0801),
289 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
290 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
291 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
292 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
293 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
294 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
295 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
296 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
297 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
298 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
299 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
300 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
301 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
302 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
303 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
304 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
305 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
306 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
307 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
308 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
309 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
310 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
311 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
312 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
313 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
314 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
315 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
316 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
317 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
318 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
319 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
320 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
321 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
322 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
323 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
324 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
325 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
326 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
327 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
328 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
329 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
330 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
331 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
332 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
333 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
334 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
335};
336static BIGNUM bn_group_6144 = {
337 bn_group_6144_value,
338 (sizeof bn_group_6144_value)/sizeof(BN_ULONG),
339 (sizeof bn_group_6144_value)/sizeof(BN_ULONG),
340 0,
341 BN_FLG_STATIC_DATA
342};
343
344static BN_ULONG bn_group_8192_value[] = {
345 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
346 bn_pack4(0x60C9,0x80DD,0x98ED,0xD3DF),
347 bn_pack4(0xC81F,0x56E8,0x80B9,0x6E71),
348 bn_pack4(0x9E30,0x50E2,0x7656,0x94DF),
349 bn_pack4(0x9558,0xE447,0x5677,0xE9AA),
350 bn_pack4(0xC919,0x0DA6,0xFC02,0x6E47),
351 bn_pack4(0x889A,0x002E,0xD5EE,0x382B),
352 bn_pack4(0x4009,0x438B,0x481C,0x6CD7),
353 bn_pack4(0x3590,0x46F4,0xEB87,0x9F92),
354 bn_pack4(0xFAF3,0x6BC3,0x1ECF,0xA268),
355 bn_pack4(0xB1D5,0x10BD,0x7EE7,0x4D73),
356 bn_pack4(0xF9AB,0x4819,0x5DED,0x7EA1),
357 bn_pack4(0x64F3,0x1CC5,0x0846,0x851D),
358 bn_pack4(0x4597,0xE899,0xA025,0x5DC1),
359 bn_pack4(0xDF31,0x0EE0,0x74AB,0x6A36),
360 bn_pack4(0x6D2A,0x13F8,0x3F44,0xF82D),
361 bn_pack4(0x062B,0x3CF5,0xB3A2,0x78A6),
362 bn_pack4(0x7968,0x3303,0xED5B,0xDD3A),
363 bn_pack4(0xFA9D,0x4B7F,0xA2C0,0x87E8),
364 bn_pack4(0x4BCB,0xC886,0x2F83,0x85DD),
365 bn_pack4(0x3473,0xFC64,0x6CEA,0x306B),
366 bn_pack4(0x13EB,0x57A8,0x1A23,0xF0C7),
367 bn_pack4(0x2222,0x2E04,0xA403,0x7C07),
368 bn_pack4(0xE3FD,0xB8BE,0xFC84,0x8AD9),
369 bn_pack4(0x238F,0x16CB,0xE39D,0x652D),
370 bn_pack4(0x3423,0xB474,0x2BF1,0xC978),
371 bn_pack4(0x3AAB,0x639C,0x5AE4,0xF568),
372 bn_pack4(0x2576,0xF693,0x6BA4,0x2466),
373 bn_pack4(0x741F,0xA7BF,0x8AFC,0x47ED),
374 bn_pack4(0x3BC8,0x32B6,0x8D9D,0xD300),
375 bn_pack4(0xD8BE,0xC4D0,0x73B9,0x31BA),
376 bn_pack4(0x3877,0x7CB6,0xA932,0xDF8C),
377 bn_pack4(0x74A3,0x926F,0x12FE,0xE5E4),
378 bn_pack4(0xE694,0xF91E,0x6DBE,0x1159),
379 bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6),
380 bn_pack4(0x043E,0x8F66,0x3F48,0x60EE),
381 bn_pack4(0x387F,0xE8D7,0x6E3C,0x0468),
382 bn_pack4(0xDA56,0xC9EC,0x2EF2,0x9632),
383 bn_pack4(0xEB19,0xCCB1,0xA313,0xD55C),
384 bn_pack4(0xF550,0xAA3D,0x8A1F,0xBFF0),
385 bn_pack4(0x06A1,0xD58B,0xB7C5,0xDA76),
386 bn_pack4(0xA797,0x15EE,0xF29B,0xE328),
387 bn_pack4(0x14CC,0x5ED2,0x0F80,0x37E0),
388 bn_pack4(0xCC8F,0x6D7E,0xBF48,0xE1D8),
389 bn_pack4(0x4BD4,0x07B2,0x2B41,0x54AA),
390 bn_pack4(0x0F1D,0x45B7,0xFF58,0x5AC5),
391 bn_pack4(0x23A9,0x7A7E,0x36CC,0x88BE),
392 bn_pack4(0x59E7,0xC97F,0xBEC7,0xE8F3),
393 bn_pack4(0xB5A8,0x4031,0x900B,0x1C9E),
394 bn_pack4(0xD55E,0x702F,0x4698,0x0C82),
395 bn_pack4(0xF482,0xD7CE,0x6E74,0xFEF6),
396 bn_pack4(0xF032,0xEA15,0xD172,0x1D03),
397 bn_pack4(0x5983,0xCA01,0xC64B,0x92EC),
398 bn_pack4(0x6FB8,0xF401,0x378C,0xD2BF),
399 bn_pack4(0x3320,0x5151,0x2BD7,0xAF42),
400 bn_pack4(0xDB7F,0x1447,0xE6CC,0x254B),
401 bn_pack4(0x44CE,0x6CBA,0xCED4,0xBB1B),
402 bn_pack4(0xDA3E,0xDBEB,0xCF9B,0x14ED),
403 bn_pack4(0x1797,0x27B0,0x865A,0x8918),
404 bn_pack4(0xB06A,0x53ED,0x9027,0xD831),
405 bn_pack4(0xE5DB,0x382F,0x4130,0x01AE),
406 bn_pack4(0xF8FF,0x9406,0xAD9E,0x530E),
407 bn_pack4(0xC975,0x1E76,0x3DBA,0x37BD),
408 bn_pack4(0xC1D4,0xDCB2,0x6026,0x46DE),
409 bn_pack4(0x36C3,0xFAB4,0xD27C,0x7026),
410 bn_pack4(0x4DF4,0x35C9,0x3402,0x8492),
411 bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
412 bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1),
413 bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9),
414 bn_pack4(0xB81B,0xDD76,0x2170,0x481C),
415 bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF),
416 bn_pack4(0x233B,0xA186,0x515B,0xE7ED),
417 bn_pack4(0x99B2,0x964F,0xA090,0xC3A2),
418 bn_pack4(0x287C,0x5947,0x4E6B,0xC05D),
419 bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6),
420 bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9),
421 bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8),
422 bn_pack4(0x1A94,0x6834,0xB615,0x0BDA),
423 bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C),
424 bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26),
425 bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7),
426 bn_pack4(0x4B82,0xD120,0xA921,0x0801),
427 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
428 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
429 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
430 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
431 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
432 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
433 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
434 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
435 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
436 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
437 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
438 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
439 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
440 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
441 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
442 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
443 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
444 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
445 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
446 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
447 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
448 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
449 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
450 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
451 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
452 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
453 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
454 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
455 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
456 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
457 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
458 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
459 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
460 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
461 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
462 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
463 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
464 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
465 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
466 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
467 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
468 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
469 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
470 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
471 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
472 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
473};
474static BIGNUM bn_group_8192 = {
475 bn_group_8192_value,
476 (sizeof bn_group_8192_value)/sizeof(BN_ULONG),
477 (sizeof bn_group_8192_value)/sizeof(BN_ULONG),
478 0,
479 BN_FLG_STATIC_DATA
480};
481
482static BN_ULONG bn_generator_19_value[] = {19} ;
483static BIGNUM bn_generator_19 = {
484 bn_generator_19_value,
485 1,
486 1,
487 0,
488 BN_FLG_STATIC_DATA
489};
490static BN_ULONG bn_generator_5_value[] = {5} ;
491static BIGNUM bn_generator_5 = {
492 bn_generator_5_value,
493 1,
494 1,
495 0,
496 BN_FLG_STATIC_DATA
497};
498static BN_ULONG bn_generator_2_value[] = {2} ;
499static BIGNUM bn_generator_2 = {
500 bn_generator_2_value,
501 1,
502 1,
503 0,
504 BN_FLG_STATIC_DATA
505};
506
507static SRP_gN knowngN[] = {
508 {"8192",&bn_generator_19 , &bn_group_8192},
509 {"6144",&bn_generator_5 , &bn_group_6144},
510 {"4096",&bn_generator_5 , &bn_group_4096},
511 {"3072",&bn_generator_5 , &bn_group_3072},
512 {"2048",&bn_generator_2 , &bn_group_2048},
513 {"1536",&bn_generator_2 , &bn_group_1536},
514 {"1024",&bn_generator_2 , &bn_group_1024},
515};
516#define KNOWN_GN_NUMBER sizeof(knowngN) / sizeof(SRP_gN)
517
518/* end of generated data */
diff --git a/src/lib/libcrypto/srp/srp_lcl.h b/src/lib/libcrypto/srp/srp_lcl.h
deleted file mode 100644
index a647a58273..0000000000
--- a/src/lib/libcrypto/srp/srp_lcl.h
+++ /dev/null
@@ -1,83 +0,0 @@
1/* $OpenBSD: srp_lcl.h,v 1.2 2014/06/12 15:49:30 deraadt Exp $ */
2/* Written by Peter Sylvester (peter.sylvester@edelweb.fr)
3 * for the EdelKey project and contributed to the OpenSSL project 2004.
4 */
5/* ====================================================================
6 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58#ifndef HEADER_SRP_LCL_H
59#define HEADER_SRP_LCL_H
60
61#include <openssl/srp.h>
62#include <openssl/sha.h>
63
64#if 0
65#define srp_bn_print(a) {fprintf(stderr, #a "="); BN_print_fp(stderr,a); \
66 fprintf(stderr,"\n");}
67#else
68#define srp_bn_print(a)
69#endif
70
71
72
73#ifdef __cplusplus
74extern "C" {
75#endif
76
77
78
79#ifdef __cplusplus
80}
81#endif
82
83#endif
diff --git a/src/lib/libcrypto/srp/srp_lib.c b/src/lib/libcrypto/srp/srp_lib.c
deleted file mode 100644
index 1e96adc6a3..0000000000
--- a/src/lib/libcrypto/srp/srp_lib.c
+++ /dev/null
@@ -1,376 +0,0 @@
1/* $OpenBSD: srp_lib.c,v 1.9 2014/07/11 08:44:49 jsing Exp $ */
2/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
3 * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
4 * for the EdelKey project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgment:
23 * "This product includes software developed by the OpenSSL Project
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 * endorse or promote products derived from this software without
28 * prior written permission. For written permission, please contact
29 * licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 * nor may "OpenSSL" appear in their names without prior written
33 * permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 * acknowledgment:
37 * "This product includes software developed by the OpenSSL Project
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com). This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59
60#include <openssl/opensslconf.h>
61
62#ifndef OPENSSL_NO_SRP
63
64#include <openssl/evp.h>
65#include <openssl/srp.h>
66
67#include "srp_lcl.h"
68
69#if (BN_BYTES == 8)
70# if defined(_LP64)
71# define bn_pack4(a1,a2,a3,a4) ((a1##UL<<48)|(a2##UL<<32)|(a3##UL<<16)|a4##UL)
72# else
73# define bn_pack4(a1,a2,a3,a4) ((a1##ULL<<48)|(a2##ULL<<32)|(a3##ULL<<16)|a4##ULL)
74# endif
75#elif (BN_BYTES == 4)
76# define bn_pack4(a1,a2,a3,a4) ((a3##UL<<16)|a4##UL), ((a1##UL<<16)|a2##UL)
77#else
78# error "unsupported BN_BYTES"
79#endif
80
81
82#include "srp_grps.h"
83
84static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g)
85 {
86 /* k = SHA1(N | PAD(g)) -- tls-srp draft 8 */
87
88 unsigned char digest[SHA_DIGEST_LENGTH];
89 unsigned char *tmp;
90 EVP_MD_CTX ctxt;
91 BIGNUM *ret = NULL;
92 int longg;
93 int longN = BN_num_bytes(N);
94
95 if ((tmp = malloc(longN)) == NULL)
96 return NULL;
97 BN_bn2bin(N,tmp);
98
99 EVP_MD_CTX_init(&ctxt);
100 if (!EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL))
101 goto err;
102 if (!EVP_DigestUpdate(&ctxt, tmp, longN))
103 goto err;
104
105 memset(tmp, 0, longN);
106 longg = BN_bn2bin(g,tmp);
107 /* use the zeros behind to pad on left */
108 if (!EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg))
109 goto err;
110 if (!EVP_DigestUpdate(&ctxt, tmp, longg))
111 goto err;
112
113 if (!EVP_DigestFinal_ex(&ctxt, digest, NULL))
114 goto err;
115 ret = BN_bin2bn(digest, sizeof(digest), NULL);
116err:
117 EVP_MD_CTX_cleanup(&ctxt);
118 free(tmp);
119 return ret;
120 }
121
122BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N)
123 {
124 /* k = SHA1(PAD(A) || PAD(B) ) -- tls-srp draft 8 */
125
126 BIGNUM *u;
127 unsigned char cu[SHA_DIGEST_LENGTH];
128 unsigned char *cAB;
129 EVP_MD_CTX ctxt;
130 int longN;
131 if ((A == NULL) ||(B == NULL) || (N == NULL))
132 return NULL;
133
134 longN= BN_num_bytes(N);
135
136 if ((cAB = reallocarray(NULL, 2, longN)) == NULL)
137 return NULL;
138
139 memset(cAB, 0, longN);
140
141 EVP_MD_CTX_init(&ctxt);
142 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
143 EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(A,cAB+longN), longN);
144 EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(B,cAB+longN), longN);
145 free(cAB);
146 EVP_DigestFinal_ex(&ctxt, cu, NULL);
147 EVP_MD_CTX_cleanup(&ctxt);
148
149 if (!(u = BN_bin2bn(cu, sizeof(cu), NULL)))
150 return NULL;
151 if (!BN_is_zero(u))
152 return u;
153 BN_free(u);
154 return NULL;
155}
156
157BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N)
158 {
159 BIGNUM *tmp = NULL, *S = NULL;
160 BN_CTX *bn_ctx;
161
162 if (u == NULL || A == NULL || v == NULL || b == NULL || N == NULL)
163 return NULL;
164
165 if ((bn_ctx = BN_CTX_new()) == NULL ||
166 (tmp = BN_new()) == NULL ||
167 (S = BN_new()) == NULL )
168 goto err;
169
170 /* S = (A*v**u) ** b */
171
172 if (!BN_mod_exp(tmp,v,u,N,bn_ctx))
173 goto err;
174 if (!BN_mod_mul(tmp,A,tmp,N,bn_ctx))
175 goto err;
176 if (!BN_mod_exp(S,tmp,b,N,bn_ctx))
177 goto err;
178err:
179 BN_CTX_free(bn_ctx);
180 BN_clear_free(tmp);
181 return S;
182 }
183
184BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v)
185 {
186 BIGNUM *kv = NULL, *gb = NULL;
187 BIGNUM *B = NULL, *k = NULL;
188 BN_CTX *bn_ctx;
189
190 if (b == NULL || N == NULL || g == NULL || v == NULL ||
191 (bn_ctx = BN_CTX_new()) == NULL)
192 return NULL;
193
194 if ( (kv = BN_new()) == NULL ||
195 (gb = BN_new()) == NULL ||
196 (B = BN_new())== NULL)
197 goto err;
198
199 /* B = g**b + k*v */
200
201 if (!BN_mod_exp(gb,g,b,N,bn_ctx) ||
202 !(k = srp_Calc_k(N,g)) ||
203 !BN_mod_mul(kv,v,k,N,bn_ctx) ||
204 !BN_mod_add(B,gb,kv,N,bn_ctx))
205 {
206 BN_free(B);
207 B = NULL;
208 }
209err:
210 BN_CTX_free(bn_ctx);
211 BN_clear_free(kv);
212 BN_clear_free(gb);
213 BN_free(k);
214 return B;
215 }
216
217BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass)
218 {
219 unsigned char dig[SHA_DIGEST_LENGTH];
220 EVP_MD_CTX ctxt;
221 unsigned char *cs;
222
223 if ((s == NULL) ||
224 (user == NULL) ||
225 (pass == NULL))
226 return NULL;
227
228 if ((cs = malloc(BN_num_bytes(s))) == NULL)
229 return NULL;
230
231 EVP_MD_CTX_init(&ctxt);
232 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
233 EVP_DigestUpdate(&ctxt, user, strlen(user));
234 EVP_DigestUpdate(&ctxt, ":", 1);
235 EVP_DigestUpdate(&ctxt, pass, strlen(pass));
236 EVP_DigestFinal_ex(&ctxt, dig, NULL);
237
238 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
239 BN_bn2bin(s,cs);
240 EVP_DigestUpdate(&ctxt, cs, BN_num_bytes(s));
241 free(cs);
242 EVP_DigestUpdate(&ctxt, dig, sizeof(dig));
243 EVP_DigestFinal_ex(&ctxt, dig, NULL);
244 EVP_MD_CTX_cleanup(&ctxt);
245
246 return BN_bin2bn(dig, sizeof(dig), NULL);
247 }
248
249BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g)
250 {
251 BN_CTX *bn_ctx;
252 BIGNUM * A = NULL;
253
254 if (a == NULL || N == NULL || g == NULL ||
255 (bn_ctx = BN_CTX_new()) == NULL)
256 return NULL;
257
258 if ((A = BN_new()) != NULL &&
259 !BN_mod_exp(A,g,a,N,bn_ctx))
260 {
261 BN_free(A);
262 A = NULL;
263 }
264 BN_CTX_free(bn_ctx);
265 return A;
266 }
267
268
269BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u)
270 {
271 BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL , *k = NULL, *K = NULL;
272 BIGNUM *ret = NULL;
273 BN_CTX *bn_ctx;
274
275 if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL || a == NULL ||
276 (bn_ctx = BN_CTX_new()) == NULL)
277 return NULL;
278
279 if ((tmp = BN_new()) == NULL ||
280 (tmp2 = BN_new())== NULL ||
281 (tmp3 = BN_new())== NULL ||
282 (K = BN_new()) == NULL)
283 goto err;
284
285 if (!BN_mod_exp(tmp,g,x,N,bn_ctx))
286 goto err;
287 if (!(k = srp_Calc_k(N,g)))
288 goto err;
289 if (!BN_mod_mul(tmp2,tmp,k,N,bn_ctx))
290 goto err;
291 if (!BN_mod_sub(tmp,B,tmp2,N,bn_ctx))
292 goto err;
293
294 if (!BN_mod_mul(tmp3,u,x,N,bn_ctx))
295 goto err;
296 if (!BN_mod_add(tmp2,a,tmp3,N,bn_ctx))
297 goto err;
298 if (!BN_mod_exp(K,tmp,tmp2,N,bn_ctx))
299 goto err;
300
301 ret = K;
302 K = NULL;
303
304err :
305 BN_CTX_free(bn_ctx);
306 BN_clear_free(tmp);
307 BN_clear_free(tmp2);
308 BN_clear_free(tmp3);
309 BN_free(k);
310 BN_clear_free(K);
311 return ret;
312 }
313
314int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N)
315 {
316 BIGNUM *r;
317 BN_CTX *bn_ctx;
318 int ret = 0;
319
320 if (B == NULL || N == NULL ||
321 (bn_ctx = BN_CTX_new()) == NULL)
322 return 0;
323
324 if ((r = BN_new()) == NULL)
325 goto err;
326 /* Checks if B % N == 0 */
327 if (!BN_nnmod(r,B,N,bn_ctx))
328 goto err;
329 ret = !BN_is_zero(r);
330err:
331 BN_CTX_free(bn_ctx);
332 BN_free(r);
333 return ret;
334 }
335
336int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N)
337 {
338 /* Checks if A % N == 0 */
339 return SRP_Verify_B_mod_N(A,N) ;
340 }
341
342
343/* Check if G and N are kwown parameters.
344 The values have been generated from the ietf-tls-srp draft version 8
345*/
346char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N)
347 {
348 size_t i;
349 if ((g == NULL) || (N == NULL))
350 return 0;
351
352 srp_bn_print(g);
353 srp_bn_print(N);
354
355 for(i = 0; i < KNOWN_GN_NUMBER; i++)
356 {
357 if (BN_cmp(knowngN[i].g, g) == 0 && BN_cmp(knowngN[i].N, N) == 0)
358 return knowngN[i].id;
359 }
360 return NULL;
361 }
362
363SRP_gN *SRP_get_default_gN(const char *id)
364 {
365 size_t i;
366
367 if (id == NULL)
368 return knowngN;
369 for(i = 0; i < KNOWN_GN_NUMBER; i++)
370 {
371 if (strcmp(knowngN[i].id, id)==0)
372 return knowngN + i;
373 }
374 return NULL;
375 }
376#endif
diff --git a/src/lib/libcrypto/srp/srp_vfy.c b/src/lib/libcrypto/srp/srp_vfy.c
deleted file mode 100644
index 0b2a3415c2..0000000000
--- a/src/lib/libcrypto/srp/srp_vfy.c
+++ /dev/null
@@ -1,663 +0,0 @@
1/* $OpenBSD: srp_vfy.c,v 1.9 2014/07/22 02:21:20 beck Exp $ */
2/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
3 * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
4 * for the EdelKey project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgment:
23 * "This product includes software developed by the OpenSSL Project
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 * endorse or promote products derived from this software without
28 * prior written permission. For written permission, please contact
29 * licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 * nor may "OpenSSL" appear in their names without prior written
33 * permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 * acknowledgment:
37 * "This product includes software developed by the OpenSSL Project
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com). This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59
60#include <openssl/opensslconf.h>
61
62#ifndef OPENSSL_NO_SRP
63
64#include <openssl/buffer.h>
65#include <openssl/evp.h>
66#include <openssl/rand.h>
67#include <openssl/srp.h>
68#include <openssl/txt_db.h>
69
70#include "srp_lcl.h"
71
72#define SRP_RANDOM_SALT_LEN 20
73#define MAX_LEN 2500
74
75static char b64table[] =
76 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";
77
78/* the following two conversion routines have been inspired by code from Stanford */
79
80/*
81 * Convert a base64 string into raw byte array representation.
82 */
83static int t_fromb64(unsigned char *a, const char *src)
84 {
85 char *loc;
86 int i, j;
87 int size;
88
89 while(*src && (*src == ' ' || *src == '\t' || *src == '\n'))
90 ++src;
91 size = strlen(src);
92 i = 0;
93 while(i < size)
94 {
95 loc = strchr(b64table, src[i]);
96 if(loc == (char *) 0) break;
97 else a[i] = loc - b64table;
98 ++i;
99 }
100 size = i;
101 i = size - 1;
102 j = size;
103 while(1)
104 {
105 a[j] = a[i];
106 if(--i < 0) break;
107 a[j] |= (a[i] & 3) << 6;
108 --j;
109 a[j] = (unsigned char) ((a[i] & 0x3c) >> 2);
110 if(--i < 0) break;
111 a[j] |= (a[i] & 0xf) << 4;
112 --j;
113 a[j] = (unsigned char) ((a[i] & 0x30) >> 4);
114 if(--i < 0) break;
115 a[j] |= (a[i] << 2);
116
117 a[--j] = 0;
118 if(--i < 0) break;
119 }
120 while(a[j] == 0 && j <= size) ++j;
121 i = 0;
122 while (j <= size) a[i++] = a[j++];
123 return i;
124 }
125
126
127/*
128 * Convert a raw byte string into a null-terminated base64 ASCII string.
129 */
130static char *t_tob64(char *dst, const unsigned char *src, int size)
131 {
132 int c, pos = size % 3;
133 unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
134 char *olddst = dst;
135
136 switch(pos)
137 {
138 case 1:
139 b2 = src[0];
140 break;
141 case 2:
142 b1 = src[0];
143 b2 = src[1];
144 break;
145 }
146
147 while(1)
148 {
149 c = (b0 & 0xfc) >> 2;
150 if(notleading || c != 0)
151 {
152 *dst++ = b64table[c];
153 notleading = 1;
154 }
155 c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4);
156 if(notleading || c != 0)
157 {
158 *dst++ = b64table[c];
159 notleading = 1;
160 }
161 c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6);
162 if(notleading || c != 0)
163 {
164 *dst++ = b64table[c];
165 notleading = 1;
166 }
167 c = b2 & 0x3f;
168 if(notleading || c != 0)
169 {
170 *dst++ = b64table[c];
171 notleading = 1;
172 }
173 if(pos >= size) break;
174 else
175 {
176 b0 = src[pos++];
177 b1 = src[pos++];
178 b2 = src[pos++];
179 }
180 }
181
182 *dst++ = '\0';
183 return olddst;
184 }
185
186static void SRP_user_pwd_free(SRP_user_pwd *user_pwd)
187 {
188 if (user_pwd == NULL)
189 return;
190 BN_free(user_pwd->s);
191 BN_clear_free(user_pwd->v);
192 free(user_pwd->id);
193 free(user_pwd->info);
194 free(user_pwd);
195 }
196
197static SRP_user_pwd *SRP_user_pwd_new()
198 {
199 SRP_user_pwd *ret = malloc(sizeof(SRP_user_pwd));
200 if (ret == NULL)
201 return NULL;
202 ret->N = NULL;
203 ret->g = NULL;
204 ret->s = NULL;
205 ret->v = NULL;
206 ret->id = NULL ;
207 ret->info = NULL;
208 return ret;
209 }
210
211static void SRP_user_pwd_set_gN(SRP_user_pwd *vinfo, const BIGNUM *g,
212 const BIGNUM *N)
213 {
214 vinfo->N = N;
215 vinfo->g = g;
216 }
217
218static int SRP_user_pwd_set_ids(SRP_user_pwd *vinfo, const char *id,
219 const char *info)
220 {
221 if (id != NULL && NULL == (vinfo->id = strdup(id)))
222 return 0;
223 return (info == NULL || NULL != (vinfo->info = strdup(info))) ;
224 }
225
226static int SRP_user_pwd_set_sv(SRP_user_pwd *vinfo, const char *s,
227 const char *v)
228 {
229 unsigned char tmp[MAX_LEN];
230 int len;
231
232 if (strlen(s) > MAX_LEN || strlen(v) > MAX_LEN)
233 return 0;
234 len = t_fromb64(tmp, v);
235 if (NULL == (vinfo->v = BN_bin2bn(tmp, len, NULL)) )
236 return 0;
237 len = t_fromb64(tmp, s);
238 return ((vinfo->s = BN_bin2bn(tmp, len, NULL)) != NULL) ;
239 }
240
241static int SRP_user_pwd_set_sv_BN(SRP_user_pwd *vinfo, BIGNUM *s, BIGNUM *v)
242 {
243 vinfo->v = v;
244 vinfo->s = s;
245 return (vinfo->s != NULL && vinfo->v != NULL) ;
246 }
247
248SRP_VBASE *SRP_VBASE_new(char *seed_key)
249 {
250 SRP_VBASE *vb = malloc(sizeof(SRP_VBASE));
251
252 if (vb == NULL)
253 return NULL;
254 if (!(vb->users_pwd = sk_SRP_user_pwd_new_null()) ||
255 !(vb->gN_cache = sk_SRP_gN_cache_new_null()))
256 {
257 free(vb);
258 return NULL;
259 }
260 vb->default_g = NULL;
261 vb->default_N = NULL;
262 vb->seed_key = NULL;
263 if ((seed_key != NULL) &&
264 (vb->seed_key = strdup(seed_key)) == NULL)
265 {
266 sk_SRP_user_pwd_free(vb->users_pwd);
267 sk_SRP_gN_cache_free(vb->gN_cache);
268 free(vb);
269 return NULL;
270 }
271 return vb;
272 }
273
274
275int SRP_VBASE_free(SRP_VBASE *vb)
276 {
277 sk_SRP_user_pwd_pop_free(vb->users_pwd,SRP_user_pwd_free);
278 sk_SRP_gN_cache_free(vb->gN_cache);
279 free(vb->seed_key);
280 free(vb);
281 return 0;
282 }
283
284
285static SRP_gN_cache *SRP_gN_new_init(const char *ch)
286 {
287 unsigned char tmp[MAX_LEN];
288 int len;
289
290 SRP_gN_cache *newgN = malloc(sizeof(SRP_gN_cache));
291 if (newgN == NULL)
292 return NULL;
293
294 if (ch == NULL || (newgN->b64_bn = strdup(ch)) == NULL)
295 goto err;
296
297 len = t_fromb64(tmp, ch);
298 if ((newgN->bn = BN_bin2bn(tmp, len, NULL)))
299 return newgN;
300
301 free(newgN->b64_bn);
302err:
303 free(newgN);
304 return NULL;
305 }
306
307
308static void SRP_gN_free(SRP_gN_cache *gN_cache)
309 {
310 if (gN_cache == NULL)
311 return;
312 free(gN_cache->b64_bn);
313 BN_free(gN_cache->bn);
314 free(gN_cache);
315 }
316
317static SRP_gN *SRP_get_gN_by_id(const char *id, STACK_OF(SRP_gN) *gN_tab)
318 {
319 int i;
320
321 SRP_gN *gN;
322 if (gN_tab != NULL)
323 for(i = 0; i < sk_SRP_gN_num(gN_tab); i++)
324 {
325 gN = sk_SRP_gN_value(gN_tab, i);
326 if (gN && (id == NULL || strcmp(gN->id,id)==0))
327 return gN;
328 }
329
330 return SRP_get_default_gN(id);
331 }
332
333static BIGNUM *SRP_gN_place_bn(STACK_OF(SRP_gN_cache) *gN_cache, char *ch)
334 {
335 int i;
336 if (gN_cache == NULL)
337 return NULL;
338
339 /* search if we have already one... */
340 for(i = 0; i < sk_SRP_gN_cache_num(gN_cache); i++)
341 {
342 SRP_gN_cache *cache = sk_SRP_gN_cache_value(gN_cache, i);
343 if (strcmp(cache->b64_bn,ch)==0)
344 return cache->bn;
345 }
346 { /* it is the first time that we find it */
347 SRP_gN_cache *newgN = SRP_gN_new_init(ch);
348 if (newgN)
349 {
350 if (sk_SRP_gN_cache_insert(gN_cache,newgN,0)>0)
351 return newgN->bn;
352 SRP_gN_free(newgN);
353 }
354 }
355 return NULL;
356 }
357
358/* this function parses verifier file. Format is:
359 * string(index):base64(N):base64(g):0
360 * string(username):base64(v):base64(salt):int(index)
361 */
362
363
364int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file)
365 {
366 int error_code ;
367 STACK_OF(SRP_gN) *SRP_gN_tab = sk_SRP_gN_new_null();
368 char *last_index = NULL;
369 int i;
370 char **pp;
371
372 SRP_gN *gN = NULL;
373 SRP_user_pwd *user_pwd = NULL ;
374
375 TXT_DB *tmpdb = NULL;
376 BIO *in = BIO_new(BIO_s_file());
377
378 error_code = SRP_ERR_OPEN_FILE;
379
380 if (in == NULL || BIO_read_filename(in,verifier_file) <= 0)
381 goto err;
382
383 error_code = SRP_ERR_VBASE_INCOMPLETE_FILE;
384
385 if ((tmpdb =TXT_DB_read(in,DB_NUMBER)) == NULL)
386 goto err;
387
388 error_code = SRP_ERR_MEMORY;
389
390
391 if (vb->seed_key)
392 {
393 last_index = SRP_get_default_gN(NULL)->id;
394 }
395 for (i = 0; i < sk_OPENSSL_PSTRING_num(tmpdb->data); i++)
396 {
397 pp = sk_OPENSSL_PSTRING_value(tmpdb->data,i);
398 if (pp[DB_srptype][0] == DB_SRP_INDEX)
399 {
400 /*we add this couple in the internal Stack */
401
402 if ((gN = malloc(sizeof(SRP_gN))) == NULL)
403 goto err;
404
405 if ( (pp[DB_srpid] == NULL)
406 || !(gN->id = strdup(pp[DB_srpid]))
407 || !(gN->N = SRP_gN_place_bn(vb->gN_cache,pp[DB_srpverifier]))
408 || !(gN->g = SRP_gN_place_bn(vb->gN_cache,pp[DB_srpsalt]))
409 || sk_SRP_gN_insert(SRP_gN_tab,gN,0) == 0)
410 goto err;
411
412 gN = NULL;
413
414 if (vb->seed_key != NULL)
415 {
416 last_index = pp[DB_srpid];
417 }
418 }
419 else if (pp[DB_srptype][0] == DB_SRP_VALID)
420 {
421 /* it is a user .... */
422 SRP_gN *lgN;
423 if ((lgN = SRP_get_gN_by_id(pp[DB_srpgN],SRP_gN_tab))!=NULL)
424 {
425 error_code = SRP_ERR_MEMORY;
426 if ((user_pwd = SRP_user_pwd_new()) == NULL)
427 goto err;
428
429 SRP_user_pwd_set_gN(user_pwd,lgN->g,lgN->N);
430 if (!SRP_user_pwd_set_ids(user_pwd, pp[DB_srpid],pp[DB_srpinfo]))
431 goto err;
432
433 error_code = SRP_ERR_VBASE_BN_LIB;
434 if (!SRP_user_pwd_set_sv(user_pwd, pp[DB_srpsalt],pp[DB_srpverifier]))
435 goto err;
436
437 if (sk_SRP_user_pwd_insert(vb->users_pwd, user_pwd, 0) == 0)
438 goto err;
439 user_pwd = NULL; /* abandon responsability */
440 }
441 }
442 }
443
444 if (last_index != NULL)
445 {
446 /* this means that we want to simulate a default user */
447
448 if (((gN = SRP_get_gN_by_id(last_index,SRP_gN_tab))==NULL))
449 {
450 error_code = SRP_ERR_VBASE_BN_LIB;
451 goto err;
452 }
453 vb->default_g = gN->g ;
454 vb->default_N = gN->N ;
455 gN = NULL ;
456 }
457 error_code = SRP_NO_ERROR;
458
459 err:
460 /* there may be still some leaks to fix, if this fails, the application terminates most likely */
461
462 if (gN != NULL)
463 {
464 free(gN->id);
465 free(gN);
466 }
467
468 SRP_user_pwd_free(user_pwd);
469
470 if (tmpdb) TXT_DB_free(tmpdb);
471 if (in) BIO_free_all(in);
472
473 sk_SRP_gN_free(SRP_gN_tab);
474
475 return error_code;
476
477 }
478
479
480SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)
481 {
482 int i;
483 SRP_user_pwd *user;
484 unsigned char digv[SHA_DIGEST_LENGTH];
485 unsigned char digs[SHA_DIGEST_LENGTH];
486 EVP_MD_CTX ctxt;
487
488 if (vb == NULL)
489 return NULL;
490 for(i = 0; i < sk_SRP_user_pwd_num(vb->users_pwd); i++)
491 {
492 user = sk_SRP_user_pwd_value(vb->users_pwd, i);
493 if (strcmp(user->id,username)==0)
494 return user;
495 }
496 if ((vb->seed_key == NULL) ||
497 (vb->default_g == NULL) ||
498 (vb->default_N == NULL))
499 return NULL;
500
501/* if the user is unknown we set parameters as well if we have a seed_key */
502
503 if ((user = SRP_user_pwd_new()) == NULL)
504 return NULL;
505
506 SRP_user_pwd_set_gN(user,vb->default_g,vb->default_N);
507
508 if (!SRP_user_pwd_set_ids(user,username,NULL))
509 goto err;
510
511 RAND_pseudo_bytes(digv, SHA_DIGEST_LENGTH);
512 EVP_MD_CTX_init(&ctxt);
513 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
514 EVP_DigestUpdate(&ctxt, vb->seed_key, strlen(vb->seed_key));
515 EVP_DigestUpdate(&ctxt, username, strlen(username));
516 EVP_DigestFinal_ex(&ctxt, digs, NULL);
517 EVP_MD_CTX_cleanup(&ctxt);
518 if (SRP_user_pwd_set_sv_BN(user, BN_bin2bn(digs,SHA_DIGEST_LENGTH,NULL), BN_bin2bn(digv,SHA_DIGEST_LENGTH, NULL)))
519 return user;
520
521err: SRP_user_pwd_free(user);
522 return NULL;
523 }
524
525
526/*
527 create a verifier (*salt,*verifier,g and N are in base64)
528*/
529char *SRP_create_verifier(const char *user, const char *pass, char **salt,
530 char **verifier, const char *N, const char *g)
531 {
532 int len;
533 char * result=NULL;
534 char *vf;
535 BIGNUM *N_bn = NULL, *g_bn = NULL, *s = NULL, *v = NULL;
536 unsigned char tmp[MAX_LEN];
537 unsigned char tmp2[MAX_LEN];
538 char * defgNid = NULL;
539
540 if ((user == NULL)||
541 (pass == NULL)||
542 (salt == NULL)||
543 (verifier == NULL))
544 goto err;
545
546 if (N)
547 {
548 if (!(len = t_fromb64(tmp, N))) goto err;
549 N_bn = BN_bin2bn(tmp, len, NULL);
550 if (!(len = t_fromb64(tmp, g))) goto err;
551 g_bn = BN_bin2bn(tmp, len, NULL);
552 defgNid = "*";
553 }
554 else
555 {
556 SRP_gN * gN = SRP_get_gN_by_id(g, NULL) ;
557 if (gN == NULL)
558 goto err;
559 N_bn = gN->N;
560 g_bn = gN->g;
561 defgNid = gN->id;
562 }
563
564 if (*salt == NULL)
565 {
566 RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN);
567
568 s = BN_bin2bn(tmp2, SRP_RANDOM_SALT_LEN, NULL);
569 }
570 else
571 {
572 if (!(len = t_fromb64(tmp2, *salt)))
573 goto err;
574 s = BN_bin2bn(tmp2, len, NULL);
575 }
576
577
578 if(!SRP_create_verifier_BN(user, pass, &s, &v, N_bn, g_bn)) goto err;
579
580 BN_bn2bin(v,tmp);
581 if (((vf = reallocarray(NULL, BN_num_bytes(v), 2)) == NULL))
582 goto err;
583 t_tob64(vf, tmp, BN_num_bytes(v));
584
585 *verifier = vf;
586 if (*salt == NULL)
587 {
588 char *tmp_salt;
589
590 if ((tmp_salt = reallocarray(NULL, SRP_RANDOM_SALT_LEN, 2)) == NULL)
591 {
592 free(vf);
593 goto err;
594 }
595 t_tob64(tmp_salt, tmp2, SRP_RANDOM_SALT_LEN);
596 *salt = tmp_salt;
597 }
598
599 result=defgNid;
600
601err:
602 if(N)
603 {
604 BN_free(N_bn);
605 BN_free(g_bn);
606 }
607 return result;
608 }
609
610/*
611 create a verifier (*salt,*verifier,g and N are BIGNUMs)
612*/
613int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g)
614 {
615 int result=0;
616 BIGNUM *x = NULL;
617 BN_CTX *bn_ctx = BN_CTX_new();
618 unsigned char tmp2[MAX_LEN];
619
620 if ((user == NULL)||
621 (pass == NULL)||
622 (salt == NULL)||
623 (verifier == NULL)||
624 (N == NULL)||
625 (g == NULL)||
626 (bn_ctx == NULL))
627 goto err;
628
629 srp_bn_print(N);
630 srp_bn_print(g);
631
632 if (*salt == NULL)
633 {
634 RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN);
635
636 *salt = BN_bin2bn(tmp2,SRP_RANDOM_SALT_LEN,NULL);
637 }
638
639 x = SRP_Calc_x(*salt,user,pass);
640
641 *verifier = BN_new();
642 if(*verifier == NULL) goto err;
643
644 if (!BN_mod_exp(*verifier,g,x,N,bn_ctx))
645 {
646 BN_clear_free(*verifier);
647 goto err;
648 }
649
650 srp_bn_print(*verifier);
651
652 result=1;
653
654err:
655
656 BN_clear_free(x);
657 BN_CTX_free(bn_ctx);
658 return result;
659 }
660
661
662
663#endif
diff --git a/src/lib/libssl/src/apps/progs.h b/src/lib/libssl/src/apps/progs.h
index 45b5b7fe21..c1a0898a46 100644
--- a/src/lib/libssl/src/apps/progs.h
+++ b/src/lib/libssl/src/apps/progs.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: progs.h,v 1.21 2014/06/12 15:49:27 deraadt Exp $ */ 1/* $OpenBSD: progs.h,v 1.22 2014/07/28 17:57:18 tedu Exp $ */
2/* Public domain */ 2/* Public domain */
3 3
4extern int asn1parse_main(int argc, char *argv[]); 4extern int asn1parse_main(int argc, char *argv[]);
@@ -42,7 +42,6 @@ extern int sess_id_main(int argc, char *argv[]);
42extern int smime_main(int argc, char *argv[]); 42extern int smime_main(int argc, char *argv[]);
43extern int speed_main(int argc, char *argv[]); 43extern int speed_main(int argc, char *argv[]);
44extern int spkac_main(int argc, char *argv[]); 44extern int spkac_main(int argc, char *argv[]);
45extern int srp_main(int argc, char *argv[]);
46extern int ts_main(int argc, char *argv[]); 45extern int ts_main(int argc, char *argv[]);
47extern int verify_main(int argc, char *argv[]); 46extern int verify_main(int argc, char *argv[]);
48extern int version_main(int argc, char *argv[]); 47extern int version_main(int argc, char *argv[]);
diff --git a/src/lib/libssl/src/crypto/srp/srp.h b/src/lib/libssl/src/crypto/srp/srp.h
deleted file mode 100644
index 168d9656b3..0000000000
--- a/src/lib/libssl/src/crypto/srp/srp.h
+++ /dev/null
@@ -1,174 +0,0 @@
1/* $OpenBSD: srp.h,v 1.3 2014/07/10 22:45:58 jsing Exp $ */
2/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
3 * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
4 * for the EdelKey project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgment:
23 * "This product includes software developed by the OpenSSL Project
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 * endorse or promote products derived from this software without
28 * prior written permission. For written permission, please contact
29 * licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 * nor may "OpenSSL" appear in their names without prior written
33 * permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 * acknowledgment:
37 * "This product includes software developed by the OpenSSL Project
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com). This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59#ifndef __SRP_H__
60#define __SRP_H__
61
62#include <openssl/opensslconf.h>
63
64#ifndef OPENSSL_NO_SRP
65
66#include <stdio.h>
67#include <string.h>
68
69#ifdef __cplusplus
70extern "C" {
71#endif
72
73#include <openssl/safestack.h>
74#include <openssl/bn.h>
75#include <openssl/crypto.h>
76
77typedef struct SRP_gN_cache_st
78 {
79 char *b64_bn;
80 BIGNUM *bn;
81 } SRP_gN_cache;
82
83
84DECLARE_STACK_OF(SRP_gN_cache)
85
86typedef struct SRP_user_pwd_st
87 {
88 char *id;
89 BIGNUM *s;
90 BIGNUM *v;
91 const BIGNUM *g;
92 const BIGNUM *N;
93 char *info;
94 } SRP_user_pwd;
95
96DECLARE_STACK_OF(SRP_user_pwd)
97
98typedef struct SRP_VBASE_st
99 {
100 STACK_OF(SRP_user_pwd) *users_pwd;
101 STACK_OF(SRP_gN_cache) *gN_cache;
102/* to simulate a user */
103 char *seed_key;
104 BIGNUM *default_g;
105 BIGNUM *default_N;
106 } SRP_VBASE;
107
108
109/*Structure interne pour retenir les couples N et g*/
110typedef struct SRP_gN_st
111 {
112 char *id;
113 BIGNUM *g;
114 BIGNUM *N;
115 } SRP_gN;
116
117DECLARE_STACK_OF(SRP_gN)
118
119SRP_VBASE *SRP_VBASE_new(char *seed_key);
120int SRP_VBASE_free(SRP_VBASE *vb);
121int SRP_VBASE_init(SRP_VBASE *vb, char * verifier_file);
122SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);
123char *SRP_create_verifier(const char *user, const char *pass, char **salt,
124 char **verifier, const char *N, const char *g);
125int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g);
126
127
128#define SRP_NO_ERROR 0
129#define SRP_ERR_VBASE_INCOMPLETE_FILE 1
130#define SRP_ERR_VBASE_BN_LIB 2
131#define SRP_ERR_OPEN_FILE 3
132#define SRP_ERR_MEMORY 4
133
134#define DB_srptype 0
135#define DB_srpverifier 1
136#define DB_srpsalt 2
137#define DB_srpid 3
138#define DB_srpgN 4
139#define DB_srpinfo 5
140#undef DB_NUMBER
141#define DB_NUMBER 6
142
143#define DB_SRP_INDEX 'I'
144#define DB_SRP_VALID 'V'
145#define DB_SRP_REVOKED 'R'
146#define DB_SRP_MODIF 'v'
147
148
149/* see srp.c */
150char * SRP_check_known_gN_param(BIGNUM* g, BIGNUM* N);
151SRP_gN *SRP_get_default_gN(const char * id) ;
152
153/* server side .... */
154BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N);
155BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v);
156int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N);
157BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N) ;
158
159
160
161/* client side .... */
162BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass);
163BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g);
164BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u);
165int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N);
166
167#define SRP_MINIMAL_N 1024
168
169#ifdef __cplusplus
170}
171#endif
172
173#endif
174#endif
diff --git a/src/lib/libssl/src/crypto/srp/srp_grps.h b/src/lib/libssl/src/crypto/srp/srp_grps.h
deleted file mode 100644
index 8d7a00a3ba..0000000000
--- a/src/lib/libssl/src/crypto/srp/srp_grps.h
+++ /dev/null
@@ -1,518 +0,0 @@
1/* $OpenBSD: srp_grps.h,v 1.2 2014/06/12 15:49:30 deraadt Exp $ */
2/* start of generated data */
3
4static BN_ULONG bn_group_1024_value[] = {
5 bn_pack4(0x9FC6,0x1D2F,0xC0EB,0x06E3),
6 bn_pack4(0xFD51,0x38FE,0x8376,0x435B),
7 bn_pack4(0x2FD4,0xCBF4,0x976E,0xAA9A),
8 bn_pack4(0x68ED,0xBC3C,0x0572,0x6CC0),
9 bn_pack4(0xC529,0xF566,0x660E,0x57EC),
10 bn_pack4(0x8255,0x9B29,0x7BCF,0x1885),
11 bn_pack4(0xCE8E,0xF4AD,0x69B1,0x5D49),
12 bn_pack4(0x5DC7,0xD7B4,0x6154,0xD6B6),
13 bn_pack4(0x8E49,0x5C1D,0x6089,0xDAD1),
14 bn_pack4(0xE0D5,0xD8E2,0x50B9,0x8BE4),
15 bn_pack4(0x383B,0x4813,0xD692,0xC6E0),
16 bn_pack4(0xD674,0xDF74,0x96EA,0x81D3),
17 bn_pack4(0x9EA2,0x314C,0x9C25,0x6576),
18 bn_pack4(0x6072,0x6187,0x75FF,0x3C0B),
19 bn_pack4(0x9C33,0xF80A,0xFA8F,0xC5E8),
20 bn_pack4(0xEEAF,0x0AB9,0xADB3,0x8DD6)
21};
22static BIGNUM bn_group_1024 = {
23 bn_group_1024_value,
24 (sizeof bn_group_1024_value)/sizeof(BN_ULONG),
25 (sizeof bn_group_1024_value)/sizeof(BN_ULONG),
26 0,
27 BN_FLG_STATIC_DATA
28};
29
30static BN_ULONG bn_group_1536_value[] = {
31 bn_pack4(0xCF76,0xE3FE,0xD135,0xF9BB),
32 bn_pack4(0x1518,0x0F93,0x499A,0x234D),
33 bn_pack4(0x8CE7,0xA28C,0x2442,0xC6F3),
34 bn_pack4(0x5A02,0x1FFF,0x5E91,0x479E),
35 bn_pack4(0x7F8A,0x2FE9,0xB8B5,0x292E),
36 bn_pack4(0x837C,0x264A,0xE3A9,0xBEB8),
37 bn_pack4(0xE442,0x734A,0xF7CC,0xB7AE),
38 bn_pack4(0x6577,0x2E43,0x7D6C,0x7F8C),
39 bn_pack4(0xDB2F,0xD53D,0x24B7,0xC486),
40 bn_pack4(0x6EDF,0x0195,0x3934,0x9627),
41 bn_pack4(0x158B,0xFD3E,0x2B9C,0x8CF5),
42 bn_pack4(0x764E,0x3F4B,0x53DD,0x9DA1),
43 bn_pack4(0x4754,0x8381,0xDBC5,0xB1FC),
44 bn_pack4(0x9B60,0x9E0B,0xE3BA,0xB63D),
45 bn_pack4(0x8134,0xB1C8,0xB979,0x8914),
46 bn_pack4(0xDF02,0x8A7C,0xEC67,0xF0D0),
47 bn_pack4(0x80B6,0x55BB,0x9A22,0xE8DC),
48 bn_pack4(0x1558,0x903B,0xA0D0,0xF843),
49 bn_pack4(0x51C6,0xA94B,0xE460,0x7A29),
50 bn_pack4(0x5F4F,0x5F55,0x6E27,0xCBDE),
51 bn_pack4(0xBEEE,0xA961,0x4B19,0xCC4D),
52 bn_pack4(0xDBA5,0x1DF4,0x99AC,0x4C80),
53 bn_pack4(0xB1F1,0x2A86,0x17A4,0x7BBB),
54 bn_pack4(0x9DEF,0x3CAF,0xB939,0x277A)
55};
56static BIGNUM bn_group_1536 = {
57 bn_group_1536_value,
58 (sizeof bn_group_1536_value)/sizeof(BN_ULONG),
59 (sizeof bn_group_1536_value)/sizeof(BN_ULONG),
60 0,
61 BN_FLG_STATIC_DATA
62};
63
64static BN_ULONG bn_group_2048_value[] = {
65 bn_pack4(0x0FA7,0x111F,0x9E4A,0xFF73),
66 bn_pack4(0x9B65,0xE372,0xFCD6,0x8EF2),
67 bn_pack4(0x35DE,0x236D,0x525F,0x5475),
68 bn_pack4(0x94B5,0xC803,0xD89F,0x7AE4),
69 bn_pack4(0x71AE,0x35F8,0xE9DB,0xFBB6),
70 bn_pack4(0x2A56,0x98F3,0xA8D0,0xC382),
71 bn_pack4(0x9CCC,0x041C,0x7BC3,0x08D8),
72 bn_pack4(0xAF87,0x4E73,0x03CE,0x5329),
73 bn_pack4(0x6160,0x2790,0x04E5,0x7AE6),
74 bn_pack4(0x032C,0xFBDB,0xF52F,0xB378),
75 bn_pack4(0x5EA7,0x7A27,0x75D2,0xECFA),
76 bn_pack4(0x5445,0x23B5,0x24B0,0xD57D),
77 bn_pack4(0x5B9D,0x32E6,0x88F8,0x7748),
78 bn_pack4(0xF1D2,0xB907,0x8717,0x461A),
79 bn_pack4(0x76BD,0x207A,0x436C,0x6481),
80 bn_pack4(0xCA97,0xB43A,0x23FB,0x8016),
81 bn_pack4(0x1D28,0x1E44,0x6B14,0x773B),
82 bn_pack4(0x7359,0xD041,0xD5C3,0x3EA7),
83 bn_pack4(0xA80D,0x740A,0xDBF4,0xFF74),
84 bn_pack4(0x55F9,0x7993,0xEC97,0x5EEA),
85 bn_pack4(0x2918,0xA996,0x2F0B,0x93B8),
86 bn_pack4(0x661A,0x05FB,0xD5FA,0xAAE8),
87 bn_pack4(0xCF60,0x9517,0x9A16,0x3AB3),
88 bn_pack4(0xE808,0x3969,0xEDB7,0x67B0),
89 bn_pack4(0xCD7F,0x48A9,0xDA04,0xFD50),
90 bn_pack4(0xD523,0x12AB,0x4B03,0x310D),
91 bn_pack4(0x8193,0xE075,0x7767,0xA13D),
92 bn_pack4(0xA373,0x29CB,0xB4A0,0x99ED),
93 bn_pack4(0xFC31,0x9294,0x3DB5,0x6050),
94 bn_pack4(0xAF72,0xB665,0x1987,0xEE07),
95 bn_pack4(0xF166,0xDE5E,0x1389,0x582F),
96 bn_pack4(0xAC6B,0xDB41,0x324A,0x9A9B)
97};
98static BIGNUM bn_group_2048 = {
99 bn_group_2048_value,
100 (sizeof bn_group_2048_value)/sizeof(BN_ULONG),
101 (sizeof bn_group_2048_value)/sizeof(BN_ULONG),
102 0,
103 BN_FLG_STATIC_DATA
104};
105
106static BN_ULONG bn_group_3072_value[] = {
107 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
108 bn_pack4(0x4B82,0xD120,0xA93A,0xD2CA),
109 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
110 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
111 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
112 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
113 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
114 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
115 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
116 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
117 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
118 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
119 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
120 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
121 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
122 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
123 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
124 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
125 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
126 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
127 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
128 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
129 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
130 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
131 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
132 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
133 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
134 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
135 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
136 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
137 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
138 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
139 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
140 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
141 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
142 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
143 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
144 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
145 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
146 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
147 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
148 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
149 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
150 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
151 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
152 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
153 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
154 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
155};
156static BIGNUM bn_group_3072 = {
157 bn_group_3072_value,
158 (sizeof bn_group_3072_value)/sizeof(BN_ULONG),
159 (sizeof bn_group_3072_value)/sizeof(BN_ULONG),
160 0,
161 BN_FLG_STATIC_DATA
162};
163
164static BN_ULONG bn_group_4096_value[] = {
165 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
166 bn_pack4(0x4DF4,0x35C9,0x3406,0x3199),
167 bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
168 bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1),
169 bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9),
170 bn_pack4(0xB81B,0xDD76,0x2170,0x481C),
171 bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF),
172 bn_pack4(0x233B,0xA186,0x515B,0xE7ED),
173 bn_pack4(0x99B2,0x964F,0xA090,0xC3A2),
174 bn_pack4(0x287C,0x5947,0x4E6B,0xC05D),
175 bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6),
176 bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9),
177 bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8),
178 bn_pack4(0x1A94,0x6834,0xB615,0x0BDA),
179 bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C),
180 bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26),
181 bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7),
182 bn_pack4(0x4B82,0xD120,0xA921,0x0801),
183 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
184 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
185 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
186 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
187 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
188 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
189 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
190 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
191 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
192 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
193 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
194 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
195 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
196 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
197 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
198 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
199 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
200 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
201 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
202 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
203 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
204 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
205 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
206 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
207 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
208 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
209 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
210 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
211 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
212 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
213 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
214 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
215 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
216 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
217 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
218 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
219 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
220 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
221 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
222 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
223 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
224 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
225 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
226 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
227 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
228 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
229};
230static BIGNUM bn_group_4096 = {
231 bn_group_4096_value,
232 (sizeof bn_group_4096_value)/sizeof(BN_ULONG),
233 (sizeof bn_group_4096_value)/sizeof(BN_ULONG),
234 0,
235 BN_FLG_STATIC_DATA
236};
237
238static BN_ULONG bn_group_6144_value[] = {
239 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
240 bn_pack4(0xE694,0xF91E,0x6DCC,0x4024),
241 bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6),
242 bn_pack4(0x043E,0x8F66,0x3F48,0x60EE),
243 bn_pack4(0x387F,0xE8D7,0x6E3C,0x0468),
244 bn_pack4(0xDA56,0xC9EC,0x2EF2,0x9632),
245 bn_pack4(0xEB19,0xCCB1,0xA313,0xD55C),
246 bn_pack4(0xF550,0xAA3D,0x8A1F,0xBFF0),
247 bn_pack4(0x06A1,0xD58B,0xB7C5,0xDA76),
248 bn_pack4(0xA797,0x15EE,0xF29B,0xE328),
249 bn_pack4(0x14CC,0x5ED2,0x0F80,0x37E0),
250 bn_pack4(0xCC8F,0x6D7E,0xBF48,0xE1D8),
251 bn_pack4(0x4BD4,0x07B2,0x2B41,0x54AA),
252 bn_pack4(0x0F1D,0x45B7,0xFF58,0x5AC5),
253 bn_pack4(0x23A9,0x7A7E,0x36CC,0x88BE),
254 bn_pack4(0x59E7,0xC97F,0xBEC7,0xE8F3),
255 bn_pack4(0xB5A8,0x4031,0x900B,0x1C9E),
256 bn_pack4(0xD55E,0x702F,0x4698,0x0C82),
257 bn_pack4(0xF482,0xD7CE,0x6E74,0xFEF6),
258 bn_pack4(0xF032,0xEA15,0xD172,0x1D03),
259 bn_pack4(0x5983,0xCA01,0xC64B,0x92EC),
260 bn_pack4(0x6FB8,0xF401,0x378C,0xD2BF),
261 bn_pack4(0x3320,0x5151,0x2BD7,0xAF42),
262 bn_pack4(0xDB7F,0x1447,0xE6CC,0x254B),
263 bn_pack4(0x44CE,0x6CBA,0xCED4,0xBB1B),
264 bn_pack4(0xDA3E,0xDBEB,0xCF9B,0x14ED),
265 bn_pack4(0x1797,0x27B0,0x865A,0x8918),
266 bn_pack4(0xB06A,0x53ED,0x9027,0xD831),
267 bn_pack4(0xE5DB,0x382F,0x4130,0x01AE),
268 bn_pack4(0xF8FF,0x9406,0xAD9E,0x530E),
269 bn_pack4(0xC975,0x1E76,0x3DBA,0x37BD),
270 bn_pack4(0xC1D4,0xDCB2,0x6026,0x46DE),
271 bn_pack4(0x36C3,0xFAB4,0xD27C,0x7026),
272 bn_pack4(0x4DF4,0x35C9,0x3402,0x8492),
273 bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
274 bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1),
275 bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9),
276 bn_pack4(0xB81B,0xDD76,0x2170,0x481C),
277 bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF),
278 bn_pack4(0x233B,0xA186,0x515B,0xE7ED),
279 bn_pack4(0x99B2,0x964F,0xA090,0xC3A2),
280 bn_pack4(0x287C,0x5947,0x4E6B,0xC05D),
281 bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6),
282 bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9),
283 bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8),
284 bn_pack4(0x1A94,0x6834,0xB615,0x0BDA),
285 bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C),
286 bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26),
287 bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7),
288 bn_pack4(0x4B82,0xD120,0xA921,0x0801),
289 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
290 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
291 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
292 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
293 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
294 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
295 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
296 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
297 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
298 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
299 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
300 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
301 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
302 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
303 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
304 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
305 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
306 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
307 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
308 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
309 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
310 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
311 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
312 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
313 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
314 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
315 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
316 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
317 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
318 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
319 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
320 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
321 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
322 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
323 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
324 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
325 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
326 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
327 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
328 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
329 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
330 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
331 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
332 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
333 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
334 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
335};
336static BIGNUM bn_group_6144 = {
337 bn_group_6144_value,
338 (sizeof bn_group_6144_value)/sizeof(BN_ULONG),
339 (sizeof bn_group_6144_value)/sizeof(BN_ULONG),
340 0,
341 BN_FLG_STATIC_DATA
342};
343
344static BN_ULONG bn_group_8192_value[] = {
345 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
346 bn_pack4(0x60C9,0x80DD,0x98ED,0xD3DF),
347 bn_pack4(0xC81F,0x56E8,0x80B9,0x6E71),
348 bn_pack4(0x9E30,0x50E2,0x7656,0x94DF),
349 bn_pack4(0x9558,0xE447,0x5677,0xE9AA),
350 bn_pack4(0xC919,0x0DA6,0xFC02,0x6E47),
351 bn_pack4(0x889A,0x002E,0xD5EE,0x382B),
352 bn_pack4(0x4009,0x438B,0x481C,0x6CD7),
353 bn_pack4(0x3590,0x46F4,0xEB87,0x9F92),
354 bn_pack4(0xFAF3,0x6BC3,0x1ECF,0xA268),
355 bn_pack4(0xB1D5,0x10BD,0x7EE7,0x4D73),
356 bn_pack4(0xF9AB,0x4819,0x5DED,0x7EA1),
357 bn_pack4(0x64F3,0x1CC5,0x0846,0x851D),
358 bn_pack4(0x4597,0xE899,0xA025,0x5DC1),
359 bn_pack4(0xDF31,0x0EE0,0x74AB,0x6A36),
360 bn_pack4(0x6D2A,0x13F8,0x3F44,0xF82D),
361 bn_pack4(0x062B,0x3CF5,0xB3A2,0x78A6),
362 bn_pack4(0x7968,0x3303,0xED5B,0xDD3A),
363 bn_pack4(0xFA9D,0x4B7F,0xA2C0,0x87E8),
364 bn_pack4(0x4BCB,0xC886,0x2F83,0x85DD),
365 bn_pack4(0x3473,0xFC64,0x6CEA,0x306B),
366 bn_pack4(0x13EB,0x57A8,0x1A23,0xF0C7),
367 bn_pack4(0x2222,0x2E04,0xA403,0x7C07),
368 bn_pack4(0xE3FD,0xB8BE,0xFC84,0x8AD9),
369 bn_pack4(0x238F,0x16CB,0xE39D,0x652D),
370 bn_pack4(0x3423,0xB474,0x2BF1,0xC978),
371 bn_pack4(0x3AAB,0x639C,0x5AE4,0xF568),
372 bn_pack4(0x2576,0xF693,0x6BA4,0x2466),
373 bn_pack4(0x741F,0xA7BF,0x8AFC,0x47ED),
374 bn_pack4(0x3BC8,0x32B6,0x8D9D,0xD300),
375 bn_pack4(0xD8BE,0xC4D0,0x73B9,0x31BA),
376 bn_pack4(0x3877,0x7CB6,0xA932,0xDF8C),
377 bn_pack4(0x74A3,0x926F,0x12FE,0xE5E4),
378 bn_pack4(0xE694,0xF91E,0x6DBE,0x1159),
379 bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6),
380 bn_pack4(0x043E,0x8F66,0x3F48,0x60EE),
381 bn_pack4(0x387F,0xE8D7,0x6E3C,0x0468),
382 bn_pack4(0xDA56,0xC9EC,0x2EF2,0x9632),
383 bn_pack4(0xEB19,0xCCB1,0xA313,0xD55C),
384 bn_pack4(0xF550,0xAA3D,0x8A1F,0xBFF0),
385 bn_pack4(0x06A1,0xD58B,0xB7C5,0xDA76),
386 bn_pack4(0xA797,0x15EE,0xF29B,0xE328),
387 bn_pack4(0x14CC,0x5ED2,0x0F80,0x37E0),
388 bn_pack4(0xCC8F,0x6D7E,0xBF48,0xE1D8),
389 bn_pack4(0x4BD4,0x07B2,0x2B41,0x54AA),
390 bn_pack4(0x0F1D,0x45B7,0xFF58,0x5AC5),
391 bn_pack4(0x23A9,0x7A7E,0x36CC,0x88BE),
392 bn_pack4(0x59E7,0xC97F,0xBEC7,0xE8F3),
393 bn_pack4(0xB5A8,0x4031,0x900B,0x1C9E),
394 bn_pack4(0xD55E,0x702F,0x4698,0x0C82),
395 bn_pack4(0xF482,0xD7CE,0x6E74,0xFEF6),
396 bn_pack4(0xF032,0xEA15,0xD172,0x1D03),
397 bn_pack4(0x5983,0xCA01,0xC64B,0x92EC),
398 bn_pack4(0x6FB8,0xF401,0x378C,0xD2BF),
399 bn_pack4(0x3320,0x5151,0x2BD7,0xAF42),
400 bn_pack4(0xDB7F,0x1447,0xE6CC,0x254B),
401 bn_pack4(0x44CE,0x6CBA,0xCED4,0xBB1B),
402 bn_pack4(0xDA3E,0xDBEB,0xCF9B,0x14ED),
403 bn_pack4(0x1797,0x27B0,0x865A,0x8918),
404 bn_pack4(0xB06A,0x53ED,0x9027,0xD831),
405 bn_pack4(0xE5DB,0x382F,0x4130,0x01AE),
406 bn_pack4(0xF8FF,0x9406,0xAD9E,0x530E),
407 bn_pack4(0xC975,0x1E76,0x3DBA,0x37BD),
408 bn_pack4(0xC1D4,0xDCB2,0x6026,0x46DE),
409 bn_pack4(0x36C3,0xFAB4,0xD27C,0x7026),
410 bn_pack4(0x4DF4,0x35C9,0x3402,0x8492),
411 bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
412 bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1),
413 bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9),
414 bn_pack4(0xB81B,0xDD76,0x2170,0x481C),
415 bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF),
416 bn_pack4(0x233B,0xA186,0x515B,0xE7ED),
417 bn_pack4(0x99B2,0x964F,0xA090,0xC3A2),
418 bn_pack4(0x287C,0x5947,0x4E6B,0xC05D),
419 bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6),
420 bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9),
421 bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8),
422 bn_pack4(0x1A94,0x6834,0xB615,0x0BDA),
423 bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C),
424 bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26),
425 bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7),
426 bn_pack4(0x4B82,0xD120,0xA921,0x0801),
427 bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
428 bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31),
429 bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2),
430 bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C),
431 bn_pack4(0x521F,0x2B18,0x177B,0x200C),
432 bn_pack4(0xD876,0x0273,0x3EC8,0x6A64),
433 bn_pack4(0xF12F,0xFA06,0xD98A,0x0864),
434 bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B),
435 bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D),
436 bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7),
437 bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7),
438 bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D),
439 bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A),
440 bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64),
441 bn_pack4(0xAD33,0x170D,0x0450,0x7A33),
442 bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D),
443 bn_pack4(0x15D2,0x2618,0x98FA,0x0510),
444 bn_pack4(0x3995,0x497C,0xEA95,0x6AE5),
445 bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718),
446 bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9),
447 bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F),
448 bn_pack4(0xE39E,0x772C,0x180E,0x8603),
449 bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B),
450 bn_pack4(0xF174,0x6C08,0xCA18,0x217C),
451 bn_pack4(0x670C,0x354E,0x4ABC,0x9804),
452 bn_pack4(0x9ED5,0x2907,0x7096,0x966D),
453 bn_pack4(0x1C62,0xF356,0x2085,0x52BB),
454 bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96),
455 bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F),
456 bn_pack4(0x98DA,0x4836,0x1C55,0xD39A),
457 bn_pack4(0xC200,0x7CB8,0xA163,0xBF05),
458 bn_pack4(0x4928,0x6651,0xECE4,0x5B3D),
459 bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6),
460 bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5),
461 bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED),
462 bn_pack4(0xF44C,0x42E9,0xA637,0xED6B),
463 bn_pack4(0xE485,0xB576,0x625E,0x7EC6),
464 bn_pack4(0x4FE1,0x356D,0x6D51,0xC245),
465 bn_pack4(0x302B,0x0A6D,0xF25F,0x1437),
466 bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B),
467 bn_pack4(0x514A,0x0879,0x8E34,0x04DD),
468 bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22),
469 bn_pack4(0x2902,0x4E08,0x8A67,0xCC74),
470 bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1),
471 bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
472 bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
473};
474static BIGNUM bn_group_8192 = {
475 bn_group_8192_value,
476 (sizeof bn_group_8192_value)/sizeof(BN_ULONG),
477 (sizeof bn_group_8192_value)/sizeof(BN_ULONG),
478 0,
479 BN_FLG_STATIC_DATA
480};
481
482static BN_ULONG bn_generator_19_value[] = {19} ;
483static BIGNUM bn_generator_19 = {
484 bn_generator_19_value,
485 1,
486 1,
487 0,
488 BN_FLG_STATIC_DATA
489};
490static BN_ULONG bn_generator_5_value[] = {5} ;
491static BIGNUM bn_generator_5 = {
492 bn_generator_5_value,
493 1,
494 1,
495 0,
496 BN_FLG_STATIC_DATA
497};
498static BN_ULONG bn_generator_2_value[] = {2} ;
499static BIGNUM bn_generator_2 = {
500 bn_generator_2_value,
501 1,
502 1,
503 0,
504 BN_FLG_STATIC_DATA
505};
506
507static SRP_gN knowngN[] = {
508 {"8192",&bn_generator_19 , &bn_group_8192},
509 {"6144",&bn_generator_5 , &bn_group_6144},
510 {"4096",&bn_generator_5 , &bn_group_4096},
511 {"3072",&bn_generator_5 , &bn_group_3072},
512 {"2048",&bn_generator_2 , &bn_group_2048},
513 {"1536",&bn_generator_2 , &bn_group_1536},
514 {"1024",&bn_generator_2 , &bn_group_1024},
515};
516#define KNOWN_GN_NUMBER sizeof(knowngN) / sizeof(SRP_gN)
517
518/* end of generated data */
diff --git a/src/lib/libssl/src/crypto/srp/srp_lcl.h b/src/lib/libssl/src/crypto/srp/srp_lcl.h
deleted file mode 100644
index a647a58273..0000000000
--- a/src/lib/libssl/src/crypto/srp/srp_lcl.h
+++ /dev/null
@@ -1,83 +0,0 @@
1/* $OpenBSD: srp_lcl.h,v 1.2 2014/06/12 15:49:30 deraadt Exp $ */
2/* Written by Peter Sylvester (peter.sylvester@edelweb.fr)
3 * for the EdelKey project and contributed to the OpenSSL project 2004.
4 */
5/* ====================================================================
6 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24 *
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * licensing@OpenSSL.org.
29 *
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
33 *
34 * 6. Redistributions of any form whatsoever must retain the following
35 * acknowledgment:
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38 *
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
52 *
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
56 *
57 */
58#ifndef HEADER_SRP_LCL_H
59#define HEADER_SRP_LCL_H
60
61#include <openssl/srp.h>
62#include <openssl/sha.h>
63
64#if 0
65#define srp_bn_print(a) {fprintf(stderr, #a "="); BN_print_fp(stderr,a); \
66 fprintf(stderr,"\n");}
67#else
68#define srp_bn_print(a)
69#endif
70
71
72
73#ifdef __cplusplus
74extern "C" {
75#endif
76
77
78
79#ifdef __cplusplus
80}
81#endif
82
83#endif
diff --git a/src/lib/libssl/src/crypto/srp/srp_lib.c b/src/lib/libssl/src/crypto/srp/srp_lib.c
deleted file mode 100644
index 1e96adc6a3..0000000000
--- a/src/lib/libssl/src/crypto/srp/srp_lib.c
+++ /dev/null
@@ -1,376 +0,0 @@
1/* $OpenBSD: srp_lib.c,v 1.9 2014/07/11 08:44:49 jsing Exp $ */
2/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
3 * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
4 * for the EdelKey project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgment:
23 * "This product includes software developed by the OpenSSL Project
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 * endorse or promote products derived from this software without
28 * prior written permission. For written permission, please contact
29 * licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 * nor may "OpenSSL" appear in their names without prior written
33 * permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 * acknowledgment:
37 * "This product includes software developed by the OpenSSL Project
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com). This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59
60#include <openssl/opensslconf.h>
61
62#ifndef OPENSSL_NO_SRP
63
64#include <openssl/evp.h>
65#include <openssl/srp.h>
66
67#include "srp_lcl.h"
68
69#if (BN_BYTES == 8)
70# if defined(_LP64)
71# define bn_pack4(a1,a2,a3,a4) ((a1##UL<<48)|(a2##UL<<32)|(a3##UL<<16)|a4##UL)
72# else
73# define bn_pack4(a1,a2,a3,a4) ((a1##ULL<<48)|(a2##ULL<<32)|(a3##ULL<<16)|a4##ULL)
74# endif
75#elif (BN_BYTES == 4)
76# define bn_pack4(a1,a2,a3,a4) ((a3##UL<<16)|a4##UL), ((a1##UL<<16)|a2##UL)
77#else
78# error "unsupported BN_BYTES"
79#endif
80
81
82#include "srp_grps.h"
83
84static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g)
85 {
86 /* k = SHA1(N | PAD(g)) -- tls-srp draft 8 */
87
88 unsigned char digest[SHA_DIGEST_LENGTH];
89 unsigned char *tmp;
90 EVP_MD_CTX ctxt;
91 BIGNUM *ret = NULL;
92 int longg;
93 int longN = BN_num_bytes(N);
94
95 if ((tmp = malloc(longN)) == NULL)
96 return NULL;
97 BN_bn2bin(N,tmp);
98
99 EVP_MD_CTX_init(&ctxt);
100 if (!EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL))
101 goto err;
102 if (!EVP_DigestUpdate(&ctxt, tmp, longN))
103 goto err;
104
105 memset(tmp, 0, longN);
106 longg = BN_bn2bin(g,tmp);
107 /* use the zeros behind to pad on left */
108 if (!EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg))
109 goto err;
110 if (!EVP_DigestUpdate(&ctxt, tmp, longg))
111 goto err;
112
113 if (!EVP_DigestFinal_ex(&ctxt, digest, NULL))
114 goto err;
115 ret = BN_bin2bn(digest, sizeof(digest), NULL);
116err:
117 EVP_MD_CTX_cleanup(&ctxt);
118 free(tmp);
119 return ret;
120 }
121
122BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N)
123 {
124 /* k = SHA1(PAD(A) || PAD(B) ) -- tls-srp draft 8 */
125
126 BIGNUM *u;
127 unsigned char cu[SHA_DIGEST_LENGTH];
128 unsigned char *cAB;
129 EVP_MD_CTX ctxt;
130 int longN;
131 if ((A == NULL) ||(B == NULL) || (N == NULL))
132 return NULL;
133
134 longN= BN_num_bytes(N);
135
136 if ((cAB = reallocarray(NULL, 2, longN)) == NULL)
137 return NULL;
138
139 memset(cAB, 0, longN);
140
141 EVP_MD_CTX_init(&ctxt);
142 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
143 EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(A,cAB+longN), longN);
144 EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(B,cAB+longN), longN);
145 free(cAB);
146 EVP_DigestFinal_ex(&ctxt, cu, NULL);
147 EVP_MD_CTX_cleanup(&ctxt);
148
149 if (!(u = BN_bin2bn(cu, sizeof(cu), NULL)))
150 return NULL;
151 if (!BN_is_zero(u))
152 return u;
153 BN_free(u);
154 return NULL;
155}
156
157BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N)
158 {
159 BIGNUM *tmp = NULL, *S = NULL;
160 BN_CTX *bn_ctx;
161
162 if (u == NULL || A == NULL || v == NULL || b == NULL || N == NULL)
163 return NULL;
164
165 if ((bn_ctx = BN_CTX_new()) == NULL ||
166 (tmp = BN_new()) == NULL ||
167 (S = BN_new()) == NULL )
168 goto err;
169
170 /* S = (A*v**u) ** b */
171
172 if (!BN_mod_exp(tmp,v,u,N,bn_ctx))
173 goto err;
174 if (!BN_mod_mul(tmp,A,tmp,N,bn_ctx))
175 goto err;
176 if (!BN_mod_exp(S,tmp,b,N,bn_ctx))
177 goto err;
178err:
179 BN_CTX_free(bn_ctx);
180 BN_clear_free(tmp);
181 return S;
182 }
183
184BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v)
185 {
186 BIGNUM *kv = NULL, *gb = NULL;
187 BIGNUM *B = NULL, *k = NULL;
188 BN_CTX *bn_ctx;
189
190 if (b == NULL || N == NULL || g == NULL || v == NULL ||
191 (bn_ctx = BN_CTX_new()) == NULL)
192 return NULL;
193
194 if ( (kv = BN_new()) == NULL ||
195 (gb = BN_new()) == NULL ||
196 (B = BN_new())== NULL)
197 goto err;
198
199 /* B = g**b + k*v */
200
201 if (!BN_mod_exp(gb,g,b,N,bn_ctx) ||
202 !(k = srp_Calc_k(N,g)) ||
203 !BN_mod_mul(kv,v,k,N,bn_ctx) ||
204 !BN_mod_add(B,gb,kv,N,bn_ctx))
205 {
206 BN_free(B);
207 B = NULL;
208 }
209err:
210 BN_CTX_free(bn_ctx);
211 BN_clear_free(kv);
212 BN_clear_free(gb);
213 BN_free(k);
214 return B;
215 }
216
217BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass)
218 {
219 unsigned char dig[SHA_DIGEST_LENGTH];
220 EVP_MD_CTX ctxt;
221 unsigned char *cs;
222
223 if ((s == NULL) ||
224 (user == NULL) ||
225 (pass == NULL))
226 return NULL;
227
228 if ((cs = malloc(BN_num_bytes(s))) == NULL)
229 return NULL;
230
231 EVP_MD_CTX_init(&ctxt);
232 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
233 EVP_DigestUpdate(&ctxt, user, strlen(user));
234 EVP_DigestUpdate(&ctxt, ":", 1);
235 EVP_DigestUpdate(&ctxt, pass, strlen(pass));
236 EVP_DigestFinal_ex(&ctxt, dig, NULL);
237
238 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
239 BN_bn2bin(s,cs);
240 EVP_DigestUpdate(&ctxt, cs, BN_num_bytes(s));
241 free(cs);
242 EVP_DigestUpdate(&ctxt, dig, sizeof(dig));
243 EVP_DigestFinal_ex(&ctxt, dig, NULL);
244 EVP_MD_CTX_cleanup(&ctxt);
245
246 return BN_bin2bn(dig, sizeof(dig), NULL);
247 }
248
249BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g)
250 {
251 BN_CTX *bn_ctx;
252 BIGNUM * A = NULL;
253
254 if (a == NULL || N == NULL || g == NULL ||
255 (bn_ctx = BN_CTX_new()) == NULL)
256 return NULL;
257
258 if ((A = BN_new()) != NULL &&
259 !BN_mod_exp(A,g,a,N,bn_ctx))
260 {
261 BN_free(A);
262 A = NULL;
263 }
264 BN_CTX_free(bn_ctx);
265 return A;
266 }
267
268
269BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u)
270 {
271 BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL , *k = NULL, *K = NULL;
272 BIGNUM *ret = NULL;
273 BN_CTX *bn_ctx;
274
275 if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL || a == NULL ||
276 (bn_ctx = BN_CTX_new()) == NULL)
277 return NULL;
278
279 if ((tmp = BN_new()) == NULL ||
280 (tmp2 = BN_new())== NULL ||
281 (tmp3 = BN_new())== NULL ||
282 (K = BN_new()) == NULL)
283 goto err;
284
285 if (!BN_mod_exp(tmp,g,x,N,bn_ctx))
286 goto err;
287 if (!(k = srp_Calc_k(N,g)))
288 goto err;
289 if (!BN_mod_mul(tmp2,tmp,k,N,bn_ctx))
290 goto err;
291 if (!BN_mod_sub(tmp,B,tmp2,N,bn_ctx))
292 goto err;
293
294 if (!BN_mod_mul(tmp3,u,x,N,bn_ctx))
295 goto err;
296 if (!BN_mod_add(tmp2,a,tmp3,N,bn_ctx))
297 goto err;
298 if (!BN_mod_exp(K,tmp,tmp2,N,bn_ctx))
299 goto err;
300
301 ret = K;
302 K = NULL;
303
304err :
305 BN_CTX_free(bn_ctx);
306 BN_clear_free(tmp);
307 BN_clear_free(tmp2);
308 BN_clear_free(tmp3);
309 BN_free(k);
310 BN_clear_free(K);
311 return ret;
312 }
313
314int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N)
315 {
316 BIGNUM *r;
317 BN_CTX *bn_ctx;
318 int ret = 0;
319
320 if (B == NULL || N == NULL ||
321 (bn_ctx = BN_CTX_new()) == NULL)
322 return 0;
323
324 if ((r = BN_new()) == NULL)
325 goto err;
326 /* Checks if B % N == 0 */
327 if (!BN_nnmod(r,B,N,bn_ctx))
328 goto err;
329 ret = !BN_is_zero(r);
330err:
331 BN_CTX_free(bn_ctx);
332 BN_free(r);
333 return ret;
334 }
335
336int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N)
337 {
338 /* Checks if A % N == 0 */
339 return SRP_Verify_B_mod_N(A,N) ;
340 }
341
342
343/* Check if G and N are kwown parameters.
344 The values have been generated from the ietf-tls-srp draft version 8
345*/
346char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N)
347 {
348 size_t i;
349 if ((g == NULL) || (N == NULL))
350 return 0;
351
352 srp_bn_print(g);
353 srp_bn_print(N);
354
355 for(i = 0; i < KNOWN_GN_NUMBER; i++)
356 {
357 if (BN_cmp(knowngN[i].g, g) == 0 && BN_cmp(knowngN[i].N, N) == 0)
358 return knowngN[i].id;
359 }
360 return NULL;
361 }
362
363SRP_gN *SRP_get_default_gN(const char *id)
364 {
365 size_t i;
366
367 if (id == NULL)
368 return knowngN;
369 for(i = 0; i < KNOWN_GN_NUMBER; i++)
370 {
371 if (strcmp(knowngN[i].id, id)==0)
372 return knowngN + i;
373 }
374 return NULL;
375 }
376#endif
diff --git a/src/lib/libssl/src/crypto/srp/srp_vfy.c b/src/lib/libssl/src/crypto/srp/srp_vfy.c
deleted file mode 100644
index 0b2a3415c2..0000000000
--- a/src/lib/libssl/src/crypto/srp/srp_vfy.c
+++ /dev/null
@@ -1,663 +0,0 @@
1/* $OpenBSD: srp_vfy.c,v 1.9 2014/07/22 02:21:20 beck Exp $ */
2/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
3 * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
4 * for the EdelKey project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgment:
23 * "This product includes software developed by the OpenSSL Project
24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25 *
26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27 * endorse or promote products derived from this software without
28 * prior written permission. For written permission, please contact
29 * licensing@OpenSSL.org.
30 *
31 * 5. Products derived from this software may not be called "OpenSSL"
32 * nor may "OpenSSL" appear in their names without prior written
33 * permission of the OpenSSL Project.
34 *
35 * 6. Redistributions of any form whatsoever must retain the following
36 * acknowledgment:
37 * "This product includes software developed by the OpenSSL Project
38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51 * OF THE POSSIBILITY OF SUCH DAMAGE.
52 * ====================================================================
53 *
54 * This product includes cryptographic software written by Eric Young
55 * (eay@cryptsoft.com). This product includes software written by Tim
56 * Hudson (tjh@cryptsoft.com).
57 *
58 */
59
60#include <openssl/opensslconf.h>
61
62#ifndef OPENSSL_NO_SRP
63
64#include <openssl/buffer.h>
65#include <openssl/evp.h>
66#include <openssl/rand.h>
67#include <openssl/srp.h>
68#include <openssl/txt_db.h>
69
70#include "srp_lcl.h"
71
72#define SRP_RANDOM_SALT_LEN 20
73#define MAX_LEN 2500
74
75static char b64table[] =
76 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";
77
78/* the following two conversion routines have been inspired by code from Stanford */
79
80/*
81 * Convert a base64 string into raw byte array representation.
82 */
83static int t_fromb64(unsigned char *a, const char *src)
84 {
85 char *loc;
86 int i, j;
87 int size;
88
89 while(*src && (*src == ' ' || *src == '\t' || *src == '\n'))
90 ++src;
91 size = strlen(src);
92 i = 0;
93 while(i < size)
94 {
95 loc = strchr(b64table, src[i]);
96 if(loc == (char *) 0) break;
97 else a[i] = loc - b64table;
98 ++i;
99 }
100 size = i;
101 i = size - 1;
102 j = size;
103 while(1)
104 {
105 a[j] = a[i];
106 if(--i < 0) break;
107 a[j] |= (a[i] & 3) << 6;
108 --j;
109 a[j] = (unsigned char) ((a[i] & 0x3c) >> 2);
110 if(--i < 0) break;
111 a[j] |= (a[i] & 0xf) << 4;
112 --j;
113 a[j] = (unsigned char) ((a[i] & 0x30) >> 4);
114 if(--i < 0) break;
115 a[j] |= (a[i] << 2);
116
117 a[--j] = 0;
118 if(--i < 0) break;
119 }
120 while(a[j] == 0 && j <= size) ++j;
121 i = 0;
122 while (j <= size) a[i++] = a[j++];
123 return i;
124 }
125
126
127/*
128 * Convert a raw byte string into a null-terminated base64 ASCII string.
129 */
130static char *t_tob64(char *dst, const unsigned char *src, int size)
131 {
132 int c, pos = size % 3;
133 unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
134 char *olddst = dst;
135
136 switch(pos)
137 {
138 case 1:
139 b2 = src[0];
140 break;
141 case 2:
142 b1 = src[0];
143 b2 = src[1];
144 break;
145 }
146
147 while(1)
148 {
149 c = (b0 & 0xfc) >> 2;
150 if(notleading || c != 0)
151 {
152 *dst++ = b64table[c];
153 notleading = 1;
154 }
155 c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4);
156 if(notleading || c != 0)
157 {
158 *dst++ = b64table[c];
159 notleading = 1;
160 }
161 c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6);
162 if(notleading || c != 0)
163 {
164 *dst++ = b64table[c];
165 notleading = 1;
166 }
167 c = b2 & 0x3f;
168 if(notleading || c != 0)
169 {
170 *dst++ = b64table[c];
171 notleading = 1;
172 }
173 if(pos >= size) break;
174 else
175 {
176 b0 = src[pos++];
177 b1 = src[pos++];
178 b2 = src[pos++];
179 }
180 }
181
182 *dst++ = '\0';
183 return olddst;
184 }
185
186static void SRP_user_pwd_free(SRP_user_pwd *user_pwd)
187 {
188 if (user_pwd == NULL)
189 return;
190 BN_free(user_pwd->s);
191 BN_clear_free(user_pwd->v);
192 free(user_pwd->id);
193 free(user_pwd->info);
194 free(user_pwd);
195 }
196
197static SRP_user_pwd *SRP_user_pwd_new()
198 {
199 SRP_user_pwd *ret = malloc(sizeof(SRP_user_pwd));
200 if (ret == NULL)
201 return NULL;
202 ret->N = NULL;
203 ret->g = NULL;
204 ret->s = NULL;
205 ret->v = NULL;
206 ret->id = NULL ;
207 ret->info = NULL;
208 return ret;
209 }
210
211static void SRP_user_pwd_set_gN(SRP_user_pwd *vinfo, const BIGNUM *g,
212 const BIGNUM *N)
213 {
214 vinfo->N = N;
215 vinfo->g = g;
216 }
217
218static int SRP_user_pwd_set_ids(SRP_user_pwd *vinfo, const char *id,
219 const char *info)
220 {
221 if (id != NULL && NULL == (vinfo->id = strdup(id)))
222 return 0;
223 return (info == NULL || NULL != (vinfo->info = strdup(info))) ;
224 }
225
226static int SRP_user_pwd_set_sv(SRP_user_pwd *vinfo, const char *s,
227 const char *v)
228 {
229 unsigned char tmp[MAX_LEN];
230 int len;
231
232 if (strlen(s) > MAX_LEN || strlen(v) > MAX_LEN)
233 return 0;
234 len = t_fromb64(tmp, v);
235 if (NULL == (vinfo->v = BN_bin2bn(tmp, len, NULL)) )
236 return 0;
237 len = t_fromb64(tmp, s);
238 return ((vinfo->s = BN_bin2bn(tmp, len, NULL)) != NULL) ;
239 }
240
241static int SRP_user_pwd_set_sv_BN(SRP_user_pwd *vinfo, BIGNUM *s, BIGNUM *v)
242 {
243 vinfo->v = v;
244 vinfo->s = s;
245 return (vinfo->s != NULL && vinfo->v != NULL) ;
246 }
247
248SRP_VBASE *SRP_VBASE_new(char *seed_key)
249 {
250 SRP_VBASE *vb = malloc(sizeof(SRP_VBASE));
251
252 if (vb == NULL)
253 return NULL;
254 if (!(vb->users_pwd = sk_SRP_user_pwd_new_null()) ||
255 !(vb->gN_cache = sk_SRP_gN_cache_new_null()))
256 {
257 free(vb);
258 return NULL;
259 }
260 vb->default_g = NULL;
261 vb->default_N = NULL;
262 vb->seed_key = NULL;
263 if ((seed_key != NULL) &&
264 (vb->seed_key = strdup(seed_key)) == NULL)
265 {
266 sk_SRP_user_pwd_free(vb->users_pwd);
267 sk_SRP_gN_cache_free(vb->gN_cache);
268 free(vb);
269 return NULL;
270 }
271 return vb;
272 }
273
274
275int SRP_VBASE_free(SRP_VBASE *vb)
276 {
277 sk_SRP_user_pwd_pop_free(vb->users_pwd,SRP_user_pwd_free);
278 sk_SRP_gN_cache_free(vb->gN_cache);
279 free(vb->seed_key);
280 free(vb);
281 return 0;
282 }
283
284
285static SRP_gN_cache *SRP_gN_new_init(const char *ch)
286 {
287 unsigned char tmp[MAX_LEN];
288 int len;
289
290 SRP_gN_cache *newgN = malloc(sizeof(SRP_gN_cache));
291 if (newgN == NULL)
292 return NULL;
293
294 if (ch == NULL || (newgN->b64_bn = strdup(ch)) == NULL)
295 goto err;
296
297 len = t_fromb64(tmp, ch);
298 if ((newgN->bn = BN_bin2bn(tmp, len, NULL)))
299 return newgN;
300
301 free(newgN->b64_bn);
302err:
303 free(newgN);
304 return NULL;
305 }
306
307
308static void SRP_gN_free(SRP_gN_cache *gN_cache)
309 {
310 if (gN_cache == NULL)
311 return;
312 free(gN_cache->b64_bn);
313 BN_free(gN_cache->bn);
314 free(gN_cache);
315 }
316
317static SRP_gN *SRP_get_gN_by_id(const char *id, STACK_OF(SRP_gN) *gN_tab)
318 {
319 int i;
320
321 SRP_gN *gN;
322 if (gN_tab != NULL)
323 for(i = 0; i < sk_SRP_gN_num(gN_tab); i++)
324 {
325 gN = sk_SRP_gN_value(gN_tab, i);
326 if (gN && (id == NULL || strcmp(gN->id,id)==0))
327 return gN;
328 }
329
330 return SRP_get_default_gN(id);
331 }
332
333static BIGNUM *SRP_gN_place_bn(STACK_OF(SRP_gN_cache) *gN_cache, char *ch)
334 {
335 int i;
336 if (gN_cache == NULL)
337 return NULL;
338
339 /* search if we have already one... */
340 for(i = 0; i < sk_SRP_gN_cache_num(gN_cache); i++)
341 {
342 SRP_gN_cache *cache = sk_SRP_gN_cache_value(gN_cache, i);
343 if (strcmp(cache->b64_bn,ch)==0)
344 return cache->bn;
345 }
346 { /* it is the first time that we find it */
347 SRP_gN_cache *newgN = SRP_gN_new_init(ch);
348 if (newgN)
349 {
350 if (sk_SRP_gN_cache_insert(gN_cache,newgN,0)>0)
351 return newgN->bn;
352 SRP_gN_free(newgN);
353 }
354 }
355 return NULL;
356 }
357
358/* this function parses verifier file. Format is:
359 * string(index):base64(N):base64(g):0
360 * string(username):base64(v):base64(salt):int(index)
361 */
362
363
364int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file)
365 {
366 int error_code ;
367 STACK_OF(SRP_gN) *SRP_gN_tab = sk_SRP_gN_new_null();
368 char *last_index = NULL;
369 int i;
370 char **pp;
371
372 SRP_gN *gN = NULL;
373 SRP_user_pwd *user_pwd = NULL ;
374
375 TXT_DB *tmpdb = NULL;
376 BIO *in = BIO_new(BIO_s_file());
377
378 error_code = SRP_ERR_OPEN_FILE;
379
380 if (in == NULL || BIO_read_filename(in,verifier_file) <= 0)
381 goto err;
382
383 error_code = SRP_ERR_VBASE_INCOMPLETE_FILE;
384
385 if ((tmpdb =TXT_DB_read(in,DB_NUMBER)) == NULL)
386 goto err;
387
388 error_code = SRP_ERR_MEMORY;
389
390
391 if (vb->seed_key)
392 {
393 last_index = SRP_get_default_gN(NULL)->id;
394 }
395 for (i = 0; i < sk_OPENSSL_PSTRING_num(tmpdb->data); i++)
396 {
397 pp = sk_OPENSSL_PSTRING_value(tmpdb->data,i);
398 if (pp[DB_srptype][0] == DB_SRP_INDEX)
399 {
400 /*we add this couple in the internal Stack */
401
402 if ((gN = malloc(sizeof(SRP_gN))) == NULL)
403 goto err;
404
405 if ( (pp[DB_srpid] == NULL)
406 || !(gN->id = strdup(pp[DB_srpid]))
407 || !(gN->N = SRP_gN_place_bn(vb->gN_cache,pp[DB_srpverifier]))
408 || !(gN->g = SRP_gN_place_bn(vb->gN_cache,pp[DB_srpsalt]))
409 || sk_SRP_gN_insert(SRP_gN_tab,gN,0) == 0)
410 goto err;
411
412 gN = NULL;
413
414 if (vb->seed_key != NULL)
415 {
416 last_index = pp[DB_srpid];
417 }
418 }
419 else if (pp[DB_srptype][0] == DB_SRP_VALID)
420 {
421 /* it is a user .... */
422 SRP_gN *lgN;
423 if ((lgN = SRP_get_gN_by_id(pp[DB_srpgN],SRP_gN_tab))!=NULL)
424 {
425 error_code = SRP_ERR_MEMORY;
426 if ((user_pwd = SRP_user_pwd_new()) == NULL)
427 goto err;
428
429 SRP_user_pwd_set_gN(user_pwd,lgN->g,lgN->N);
430 if (!SRP_user_pwd_set_ids(user_pwd, pp[DB_srpid],pp[DB_srpinfo]))
431 goto err;
432
433 error_code = SRP_ERR_VBASE_BN_LIB;
434 if (!SRP_user_pwd_set_sv(user_pwd, pp[DB_srpsalt],pp[DB_srpverifier]))
435 goto err;
436
437 if (sk_SRP_user_pwd_insert(vb->users_pwd, user_pwd, 0) == 0)
438 goto err;
439 user_pwd = NULL; /* abandon responsability */
440 }
441 }
442 }
443
444 if (last_index != NULL)
445 {
446 /* this means that we want to simulate a default user */
447
448 if (((gN = SRP_get_gN_by_id(last_index,SRP_gN_tab))==NULL))
449 {
450 error_code = SRP_ERR_VBASE_BN_LIB;
451 goto err;
452 }
453 vb->default_g = gN->g ;
454 vb->default_N = gN->N ;
455 gN = NULL ;
456 }
457 error_code = SRP_NO_ERROR;
458
459 err:
460 /* there may be still some leaks to fix, if this fails, the application terminates most likely */
461
462 if (gN != NULL)
463 {
464 free(gN->id);
465 free(gN);
466 }
467
468 SRP_user_pwd_free(user_pwd);
469
470 if (tmpdb) TXT_DB_free(tmpdb);
471 if (in) BIO_free_all(in);
472
473 sk_SRP_gN_free(SRP_gN_tab);
474
475 return error_code;
476
477 }
478
479
480SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)
481 {
482 int i;
483 SRP_user_pwd *user;
484 unsigned char digv[SHA_DIGEST_LENGTH];
485 unsigned char digs[SHA_DIGEST_LENGTH];
486 EVP_MD_CTX ctxt;
487
488 if (vb == NULL)
489 return NULL;
490 for(i = 0; i < sk_SRP_user_pwd_num(vb->users_pwd); i++)
491 {
492 user = sk_SRP_user_pwd_value(vb->users_pwd, i);
493 if (strcmp(user->id,username)==0)
494 return user;
495 }
496 if ((vb->seed_key == NULL) ||
497 (vb->default_g == NULL) ||
498 (vb->default_N == NULL))
499 return NULL;
500
501/* if the user is unknown we set parameters as well if we have a seed_key */
502
503 if ((user = SRP_user_pwd_new()) == NULL)
504 return NULL;
505
506 SRP_user_pwd_set_gN(user,vb->default_g,vb->default_N);
507
508 if (!SRP_user_pwd_set_ids(user,username,NULL))
509 goto err;
510
511 RAND_pseudo_bytes(digv, SHA_DIGEST_LENGTH);
512 EVP_MD_CTX_init(&ctxt);
513 EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
514 EVP_DigestUpdate(&ctxt, vb->seed_key, strlen(vb->seed_key));
515 EVP_DigestUpdate(&ctxt, username, strlen(username));
516 EVP_DigestFinal_ex(&ctxt, digs, NULL);
517 EVP_MD_CTX_cleanup(&ctxt);
518 if (SRP_user_pwd_set_sv_BN(user, BN_bin2bn(digs,SHA_DIGEST_LENGTH,NULL), BN_bin2bn(digv,SHA_DIGEST_LENGTH, NULL)))
519 return user;
520
521err: SRP_user_pwd_free(user);
522 return NULL;
523 }
524
525
526/*
527 create a verifier (*salt,*verifier,g and N are in base64)
528*/
529char *SRP_create_verifier(const char *user, const char *pass, char **salt,
530 char **verifier, const char *N, const char *g)
531 {
532 int len;
533 char * result=NULL;
534 char *vf;
535 BIGNUM *N_bn = NULL, *g_bn = NULL, *s = NULL, *v = NULL;
536 unsigned char tmp[MAX_LEN];
537 unsigned char tmp2[MAX_LEN];
538 char * defgNid = NULL;
539
540 if ((user == NULL)||
541 (pass == NULL)||
542 (salt == NULL)||
543 (verifier == NULL))
544 goto err;
545
546 if (N)
547 {
548 if (!(len = t_fromb64(tmp, N))) goto err;
549 N_bn = BN_bin2bn(tmp, len, NULL);
550 if (!(len = t_fromb64(tmp, g))) goto err;
551 g_bn = BN_bin2bn(tmp, len, NULL);
552 defgNid = "*";
553 }
554 else
555 {
556 SRP_gN * gN = SRP_get_gN_by_id(g, NULL) ;
557 if (gN == NULL)
558 goto err;
559 N_bn = gN->N;
560 g_bn = gN->g;
561 defgNid = gN->id;
562 }
563
564 if (*salt == NULL)
565 {
566 RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN);
567
568 s = BN_bin2bn(tmp2, SRP_RANDOM_SALT_LEN, NULL);
569 }
570 else
571 {
572 if (!(len = t_fromb64(tmp2, *salt)))
573 goto err;
574 s = BN_bin2bn(tmp2, len, NULL);
575 }
576
577
578 if(!SRP_create_verifier_BN(user, pass, &s, &v, N_bn, g_bn)) goto err;
579
580 BN_bn2bin(v,tmp);
581 if (((vf = reallocarray(NULL, BN_num_bytes(v), 2)) == NULL))
582 goto err;
583 t_tob64(vf, tmp, BN_num_bytes(v));
584
585 *verifier = vf;
586 if (*salt == NULL)
587 {
588 char *tmp_salt;
589
590 if ((tmp_salt = reallocarray(NULL, SRP_RANDOM_SALT_LEN, 2)) == NULL)
591 {
592 free(vf);
593 goto err;
594 }
595 t_tob64(tmp_salt, tmp2, SRP_RANDOM_SALT_LEN);
596 *salt = tmp_salt;
597 }
598
599 result=defgNid;
600
601err:
602 if(N)
603 {
604 BN_free(N_bn);
605 BN_free(g_bn);
606 }
607 return result;
608 }
609
610/*
611 create a verifier (*salt,*verifier,g and N are BIGNUMs)
612*/
613int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g)
614 {
615 int result=0;
616 BIGNUM *x = NULL;
617 BN_CTX *bn_ctx = BN_CTX_new();
618 unsigned char tmp2[MAX_LEN];
619
620 if ((user == NULL)||
621 (pass == NULL)||
622 (salt == NULL)||
623 (verifier == NULL)||
624 (N == NULL)||
625 (g == NULL)||
626 (bn_ctx == NULL))
627 goto err;
628
629 srp_bn_print(N);
630 srp_bn_print(g);
631
632 if (*salt == NULL)
633 {
634 RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN);
635
636 *salt = BN_bin2bn(tmp2,SRP_RANDOM_SALT_LEN,NULL);
637 }
638
639 x = SRP_Calc_x(*salt,user,pass);
640
641 *verifier = BN_new();
642 if(*verifier == NULL) goto err;
643
644 if (!BN_mod_exp(*verifier,g,x,N,bn_ctx))
645 {
646 BN_clear_free(*verifier);
647 goto err;
648 }
649
650 srp_bn_print(*verifier);
651
652 result=1;
653
654err:
655
656 BN_clear_free(x);
657 BN_CTX_free(bn_ctx);
658 return result;
659 }
660
661
662
663#endif