File: srvtest.c

package info (click to toggle)
libsrp-dev 1.1-1
  • links: PTS
  • area: main
  • in suites: potato, slink
  • size: 316 kB
  • ctags: 269
  • sloc: ansic: 2,627; sh: 274; makefile: 53
file content (106 lines) | stat: -rw-r--r-- 3,017 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
 * Copyright (c) 1997 Stanford University
 *
 * The use of this software for revenue-generating purposes may require a
 * license from the owners of the underlying intellectual property.
 * Specifically, the SRP-1 protocol may not be used for revenue-generating
 * purposes without license.
 *
 * Within that constraint, permission to use, copy, modify, and distribute
 * this software and its documentation for any purpose is hereby granted
 * without fee, provided that the above copyright notices and this permission
 * notice appear in all copies of the software and related documentation.
 *
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
 *
 * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
 * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
 * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#include <stdio.h>
#include "t_defines.h"
#include "t_pwd.h"
#include "t_server.h"

int
main(argc, argv)
     int argc;
     char * argv[];
{
  struct t_server * ts;
  struct t_pw * tpw;
  struct t_conf * tcnf;
  struct t_num * B;
  char username[MAXUSERLEN];
  char hexbuf[MAXHEXPARAMLEN];
  char buf[MAXPARAMLEN];
  struct t_num A;
  unsigned char * skey;
  unsigned char cbuf[20];
  FILE * fp;
  FILE * fp2;
  char confname[256];

  if(argc > 1) {
    fp = fopen(argv[1], "r");
    sprintf(confname, "%s.conf", argv[1]);
    fp2 = fopen(confname, "r");
  }
  else
    fp = fp2 = NULL;

  if((tpw = t_openpw(fp)) == NULL) {
    fprintf(stderr, "Unable to open password file\n");
    exit(1);
  }
  if((tcnf = t_openconf(fp2)) == NULL) {
    fprintf(stderr, "Unable to open configuration file\n");
    exit(1);
  }

  printf("Enter username: ");
  gets(username);
  ts = t_serveropen(username, tpw, tcnf);

  t_closeconf(tcnf);
  t_closepw(tpw);
  if(fp)
    fclose(fp);
  if(fp2)
    fclose(fp2);

  printf("n (to client): %s\n", t_tob64(hexbuf, ts->n.data, ts->n.len));
  printf("g (to client): %s\n", t_tob64(hexbuf, ts->g.data, ts->g.len));
  printf("salt (to client): %s\n", t_tob64(hexbuf, ts->s.data, ts->s.len));

  B = t_servergenexp(ts);
  printf("Enter A (from client): ");
  gets(hexbuf);
  A.data = buf;
  A.len = t_fromb64(A.data, hexbuf);

  printf("B (to client): %s\n", t_tob64(hexbuf, B->data, B->len));

  skey = t_servergetkey(ts, &A);
  printf("Session key: %s\n", t_tohex(hexbuf, skey, 40));

  /* printf("[Expected response: %s]\n", t_tohex(hexbuf, cbuf, 16)); */

  printf("Enter response (from client): ");
  gets(hexbuf);
  t_fromhex(cbuf, hexbuf);

  if(t_serververify(ts, cbuf) == 0)
    printf("Authentication successful.\n");
  else
    printf("Authentication failed.\n");

  t_serverclose(ts);

  return 0;
}