summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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