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",
49 { "count", 'n', arg_integer
, &count
, "number of keys to print", NULL
},
50 { "hexadecimal", 'h', arg_flag
, &hexp
, "output in hexadecimal", NULL
},
51 { "hash", 'f', arg_string
, &alg_string
,
52 "hash algorithm (md4, md5, or sha)", "algorithm"},
53 { "version", 0, arg_flag
, &version_flag
, NULL
, NULL
},
54 { "help", 0, arg_flag
, &help_flag
, NULL
, NULL
}
57 int num_args
= sizeof(args
) / sizeof(args
[0]);
62 arg_printusage(args
, num_args
, NULL
, "num seed");
71 void (*print_fn
)(OtpKey
, char *, size_t))
83 if (UI_UTIL_read_pw_string (pw
, sizeof(pw
), "Pass-phrase: ", 0))
85 alg
->init (key
, pw
, seed
);
86 for (i
= 0; i
< n
; ++i
) {
90 if (i
>= n
- incount
) {
91 (*print_fn
)(key
, s
, sizeof(s
));
92 printf ("%d: %s\n", i
+ 1, s
);
99 main (int argc
, char **argv
)
102 void (*fn
)(OtpKey
, char *, size_t);
103 OtpAlgorithm
*alg
= otp_find_alg (OTP_ALG_DEFAULT
);
105 setprogname (argv
[0]);
106 if(getarg(args
, num_args
, argc
, argv
, &optidx
))
116 alg
= otp_find_alg (alg_string
);
118 errx(1, "Unknown algorithm: %s", alg_string
);
125 fn
= otp_print_hex_extended
;
130 fn
= otp_print_stddict_extended
;
132 fn
= otp_print_stddict
;
135 return print (argc
, argv
, count
, alg
, fn
);