xref: /netbsd-src/external/bsd/libfido2/dist/tools/fido2-cred.c (revision 2d40c4512a84c0d064ec30a492c5e2a14d230bc3)
1ba9bdd8bSchristos /*
2ba9bdd8bSchristos  * Copyright (c) 2018 Yubico AB. All rights reserved.
3ba9bdd8bSchristos  * Use of this source code is governed by a BSD-style
4ba9bdd8bSchristos  * license that can be found in the LICENSE file.
5*2d40c451Schristos  * SPDX-License-Identifier: BSD-2-Clause
6ba9bdd8bSchristos  */
7ba9bdd8bSchristos 
8ba9bdd8bSchristos /*
9ba9bdd8bSchristos  * Example usage:
10ba9bdd8bSchristos  *
11ba9bdd8bSchristos  * $ echo credential challenge | openssl sha256 -binary | base64 > cred_param
12ba9bdd8bSchristos  * $ echo relying party >> cred_param
13ba9bdd8bSchristos  * $ echo user name >> cred_param
14ba9bdd8bSchristos  * $ dd if=/dev/urandom bs=1 count=32 | base64 >> cred_param
15ba9bdd8bSchristos  * $ fido2-cred -M -i cred_param /dev/hidraw5 | fido2-cred -V -o cred
16ba9bdd8bSchristos  */
17ba9bdd8bSchristos 
18ba9bdd8bSchristos #include <fido.h>
19ba9bdd8bSchristos #include <stdio.h>
20ba9bdd8bSchristos #include <stdlib.h>
21ba9bdd8bSchristos #include <string.h>
22ba9bdd8bSchristos 
23ba9bdd8bSchristos #include "../openbsd-compat/openbsd-compat.h"
24ba9bdd8bSchristos #include "extern.h"
25ba9bdd8bSchristos 
26ba9bdd8bSchristos void
usage(void)27ba9bdd8bSchristos usage(void)
28ba9bdd8bSchristos {
29ba9bdd8bSchristos 	fprintf(stderr,
3095dbdf32Schristos "usage: fido2-cred -M [-bdhqruv] [-c cred_protect] [-i input_file] [-o output_file] device [type]\n"
311fc1e710Schristos "       fido2-cred -V [-dhv] [-c cred_protect] [-i input_file] [-o output_file] [type]\n"
32ba9bdd8bSchristos 	);
33ba9bdd8bSchristos 
34ba9bdd8bSchristos 	exit(1);
35ba9bdd8bSchristos }
36ba9bdd8bSchristos 
37ba9bdd8bSchristos int
main(int argc,char ** argv)38ba9bdd8bSchristos main(int argc, char **argv)
39ba9bdd8bSchristos {
40ba9bdd8bSchristos 	if (argc < 2 || strlen(argv[1]) != 2 || argv[1][0] != '-')
41ba9bdd8bSchristos 		usage();
42ba9bdd8bSchristos 
43ba9bdd8bSchristos 	switch (argv[1][1]) {
44ba9bdd8bSchristos 	case 'M':
45ba9bdd8bSchristos 		return (cred_make(--argc, ++argv));
46ba9bdd8bSchristos 	case 'V':
47ba9bdd8bSchristos 		return (cred_verify(--argc, ++argv));
48ba9bdd8bSchristos 	}
49ba9bdd8bSchristos 
50ba9bdd8bSchristos 	usage();
51ba9bdd8bSchristos 
52ba9bdd8bSchristos 	/* NOTREACHED */
53ba9bdd8bSchristos }
54