2 * Copyright (c) 1995-1999 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40 static int count
= 10;
42 static char* alg_string
;
43 static int version_flag
;
46 struct getargs args
[] = {
47 { "extended", 'e', arg_flag
, &extendedp
, "print keys in extended format" },
48 { "count", 'n', arg_integer
, &count
, "number of keys to print" },
49 { "hexadecimal", 'h', arg_flag
, &hexp
, "output in hexadecimal" },
50 { "hash", 'f', arg_string
, &alg_string
,
51 "hash algorithm (md4, md5, or sha)", "algorithm"},
52 { "version", 0, arg_flag
, &version_flag
},
53 { "help", 0, arg_flag
, &help_flag
}
56 int num_args
= sizeof(args
) / sizeof(args
[0]);
61 arg_printusage(args
, num_args
, NULL
, "num seed");
70 void (*print_fn
)(OtpKey
, char *, size_t))
82 if (UI_UTIL_read_pw_string (pw
, sizeof(pw
), "Pass-phrase: ", 0))
84 alg
->init (key
, pw
, seed
);
85 for (i
= 0; i
< n
; ++i
) {
90 (*print_fn
)(key
, s
, sizeof(s
));
91 printf ("%d: %s\n", i
+ 1, s
);
98 main (int argc
, char **argv
)
101 void (*fn
)(OtpKey
, char *, size_t);
102 OtpAlgorithm
*alg
= otp_find_alg (OTP_ALG_DEFAULT
);
104 setprogname (argv
[0]);
105 if(getarg(args
, num_args
, argc
, argv
, &optind
))
115 alg
= otp_find_alg (alg_string
);
117 errx(1, "Unknown algorithm: %s", alg_string
);
124 fn
= otp_print_hex_extended
;
129 fn
= otp_print_stddict_extended
;
131 fn
= otp_print_stddict
;
134 return print (argc
, argv
, count
, alg
, fn
);