Deleted Added
sdiff udiff text old ( 325335 ) new ( 325337 )
full compact
1/* apps/srp.c */
2/*
3 * Written by Peter Sylvester (peter.sylvester@edelweb.fr) for the EdelKey
4 * project and contributed to the OpenSSL project 2004.
5 */
6/* ====================================================================
7 * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
8 *

--- 109 unchanged lines hidden (view full) ---

118int MAIN(int, char **);
119
120static int get_index(CA_DB *db, char *id, char type)
121{
122 char **pp;
123 int i;
124 if (id == NULL)
125 return -1;
126 if (type == DB_SRP_INDEX)
127 for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
128 pp = sk_OPENSSL_PSTRING_value(db->db->data, i);
129 if (pp[DB_srptype][0] == DB_SRP_INDEX
130 && !strcmp(id, pp[DB_srpid]))
131 return i;
132 } else
133 for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) {
134 pp = sk_OPENSSL_PSTRING_value(db->db->data, i);
135
136 if (pp[DB_srptype][0] != DB_SRP_INDEX
137 && !strcmp(id, pp[DB_srpid]))
138 return i;
139 }
140
141 return -1;
142}
143
144static void print_entry(CA_DB *db, BIO *bio, int indx, int verbose, char *s)
145{
146 if (indx >= 0 && verbose) {
147 int j;

--- 24 unchanged lines hidden (view full) ---

172 }
173}
174
175static int update_index(CA_DB *db, BIO *bio, char **row)
176{
177 char **irow;
178 int i;
179
180 if ((irow =
181 (char **)OPENSSL_malloc(sizeof(char *) * (DB_NUMBER + 1))) == NULL) {
182 BIO_printf(bio_err, "Memory allocation failure\n");
183 return 0;
184 }
185
186 for (i = 0; i < DB_NUMBER; i++)
187 irow[i] = row[i];
188 irow[DB_NUMBER] = NULL;
189

--- 10 unchanged lines hidden (view full) ---

200{
201 BIO_printf(bio_err, "variable lookup failed for %s::%s\n", name, tag);
202}
203
204static char *srp_verify_user(const char *user, const char *srp_verifier,
205 char *srp_usersalt, const char *g, const char *N,
206 const char *passin, BIO *bio, int verbose)
207{
208 char password[1024];
209 PW_CB_DATA cb_tmp;
210 char *verifier = NULL;
211 char *gNid = NULL;
212
213 cb_tmp.prompt_info = user;
214 cb_tmp.password = passin;
215
216 if (password_callback(password, 1024, 0, &cb_tmp) > 0) {
217 VERBOSE BIO_printf(bio,
218 "Validating\n user=\"%s\"\n srp_verifier=\"%s\"\n srp_usersalt=\"%s\"\n g=\"%s\"\n N=\"%s\"\n",
219 user, srp_verifier, srp_usersalt, g, N);
220 BIO_printf(bio, "Pass %s\n", password);
221
222 if (!
223 (gNid =
224 SRP_create_verifier(user, password, &srp_usersalt, &verifier, N,
225 g))) {
226 BIO_printf(bio, "Internal error validating SRP verifier\n");
227 } else {
228 if (strcmp(verifier, srp_verifier))
229 gNid = NULL;
230 OPENSSL_free(verifier);
231 }
232 }
233 return gNid;
234}
235
236static char *srp_create_user(char *user, char **srp_verifier,
237 char **srp_usersalt, char *g, char *N,
238 char *passout, BIO *bio, int verbose)
239{
240 char password[1024];
241 PW_CB_DATA cb_tmp;
242 char *gNid = NULL;
243 char *salt = NULL;
244 cb_tmp.prompt_info = user;
245 cb_tmp.password = passout;
246
247 if (password_callback(password, 1024, 1, &cb_tmp) > 0) {
248 VERBOSE BIO_printf(bio,
249 "Creating\n user=\"%s\"\n g=\"%s\"\n N=\"%s\"\n",
250 user, g, N);
251 if (!
252 (gNid =
253 SRP_create_verifier(user, password, &salt, srp_verifier, N,
254 g))) {
255 BIO_printf(bio, "Internal error creating SRP verifier\n");
256 } else
257 *srp_usersalt = salt;
258 VVERBOSE BIO_printf(bio, "gNid=%s salt =\"%s\"\n verifier =\"%s\"\n",
259 gNid, salt, *srp_verifier);
260
261 }
262 return gNid;
263}
264
265int MAIN(int argc, char **argv)

--- 43 unchanged lines hidden (view full) ---

309
310 if (bio_err == NULL)
311 if ((bio_err = BIO_new(BIO_s_file())) != NULL)
312 BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
313
314 argc--;
315 argv++;
316 while (argc >= 1 && badops == 0) {
317 if (strcmp(*argv, "-verbose") == 0)
318 verbose++;
319 else if (strcmp(*argv, "-config") == 0) {
320 if (--argc < 1)
321 goto bad;
322 configfile = *(++argv);
323 } else if (strcmp(*argv, "-name") == 0) {
324 if (--argc < 1)
325 goto bad;
326 section = *(++argv);
327 } else if (strcmp(*argv, "-srpvfile") == 0) {
328 if (--argc < 1)
329 goto bad;
330 dbfile = *(++argv);
331 } else if (strcmp(*argv, "-add") == 0)
332 add_user = 1;
333 else if (strcmp(*argv, "-delete") == 0)
334 delete_user = 1;
335 else if (strcmp(*argv, "-modify") == 0)
336 modify_user = 1;
337 else if (strcmp(*argv, "-list") == 0)
338 list_user = 1;
339 else if (strcmp(*argv, "-gn") == 0) {
340 if (--argc < 1)
341 goto bad;
342 gN = *(++argv);
343 } else if (strcmp(*argv, "-userinfo") == 0) {
344 if (--argc < 1)
345 goto bad;
346 userinfo = *(++argv);
347 } else if (strcmp(*argv, "-passin") == 0) {

--- 13 unchanged lines hidden (view full) ---

361 }
362# endif
363
364 else if (**argv == '-') {
365 bad:
366 BIO_printf(bio_err, "unknown option %s\n", *argv);
367 badops = 1;
368 break;
369 } else
370 break;
371
372 argc--;
373 argv++;
374 }
375
376 if (dbfile && configfile) {
377 BIO_printf(bio_err,
378 "-dbfile and -configfile cannot be specified together.\n");

--- 4 unchanged lines hidden (view full) ---

383 "Exactly one of the options -add, -delete, -modify -list must be specified.\n");
384 badops = 1;
385 }
386 if (delete_user + modify_user + delete_user == 1 && argc <= 0) {
387 BIO_printf(bio_err,
388 "Need at least one user for options -add, -delete, -modify. \n");
389 badops = 1;
390 }
391 if ((passin || passout) && argc != 1) {
392 BIO_printf(bio_err,
393 "-passin, -passout arguments only valid with one user.\n");
394 badops = 1;
395 }
396
397 if (badops) {
398 for (pp = srp_usage; (*pp != NULL); pp++)
399 BIO_printf(bio_err, "%s", *pp);

--- 301 unchanged lines hidden (view full) ---

701 sk_OPENSSL_PSTRING_value(db->db->data, userindex);
702 BIO_printf(bio_err, "user \"%s\" revoked. t\n", user);
703
704 xpp[DB_srptype][0] = 'R';
705
706 doupdatedb = 1;
707 }
708 }
709 if (--argc > 0)
710 user = *(argv++);
711 else {
712 user = NULL;
713 list_user = 0;
714 }
715 }
716
717 VERBOSE BIO_printf(bio_err, "User procession done.\n");
718
719 if (doupdatedb) {

--- 47 unchanged lines hidden ---