xref: /netbsd-src/external/bsd/libfido2/dist/tools/fido2-assert.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 assertion challenge | openssl sha256 -binary | base64 > assert_param
12ba9bdd8bSchristos  * $ echo relying party >> assert_param
13ba9bdd8bSchristos  * $ head -1 cred >> assert_param # credential id
14ba9bdd8bSchristos  * $ tail -n +2 cred > pubkey # credential pubkey
15ba9bdd8bSchristos  * $ fido2-assert -G -i assert_param /dev/hidraw5 | fido2-assert -V pubkey rs256
16ba9bdd8bSchristos  *
17ba9bdd8bSchristos  * See blurb in fido2-cred.c on how to obtain cred.
18ba9bdd8bSchristos  */
19ba9bdd8bSchristos 
20ba9bdd8bSchristos #include <fido.h>
21ba9bdd8bSchristos #include <stdio.h>
22ba9bdd8bSchristos #include <stdlib.h>
23ba9bdd8bSchristos #include <string.h>
24ba9bdd8bSchristos 
25ba9bdd8bSchristos #include "../openbsd-compat/openbsd-compat.h"
26ba9bdd8bSchristos #include "extern.h"
27ba9bdd8bSchristos 
28ba9bdd8bSchristos void
usage(void)29ba9bdd8bSchristos usage(void)
30ba9bdd8bSchristos {
31ba9bdd8bSchristos 	fprintf(stderr,
3295dbdf32Schristos "usage: fido2-assert -G [-bdhpruv] [-t option] [-i input_file] [-o output_file] device\n"
33ba9bdd8bSchristos "       fido2-assert -V [-dhpv] [-i input_file] key_file [type]\n"
34ba9bdd8bSchristos 	);
35ba9bdd8bSchristos 
36ba9bdd8bSchristos 	exit(1);
37ba9bdd8bSchristos }
38ba9bdd8bSchristos 
39ba9bdd8bSchristos int
main(int argc,char ** argv)40ba9bdd8bSchristos main(int argc, char **argv)
41ba9bdd8bSchristos {
42ba9bdd8bSchristos 	if (argc < 2 || strlen(argv[1]) != 2 || argv[1][0] != '-')
43ba9bdd8bSchristos 		usage();
44ba9bdd8bSchristos 
45ba9bdd8bSchristos 	switch (argv[1][1]) {
46ba9bdd8bSchristos 	case 'G':
47ba9bdd8bSchristos 		return (assert_get(--argc, ++argv));
48ba9bdd8bSchristos 	case 'V':
49ba9bdd8bSchristos 		return (assert_verify(--argc, ++argv));
50ba9bdd8bSchristos 	}
51ba9bdd8bSchristos 
52ba9bdd8bSchristos 	usage();
53ba9bdd8bSchristos 
54ba9bdd8bSchristos 	/* NOTREACHED */
55ba9bdd8bSchristos }
56