From fdfa06d7d381e83be6a8c5e39a5bd7af714ac656 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 26 Apr 2023 12:40:13 -0400 Subject: [PATCH] Vendor import of libfido2 0.12.0 --- CMakeLists.txt | 12 +- LICENSE | 2 + NEWS | 22 +++ README.adoc | 2 +- examples/CMakeLists.txt | 1 + examples/README.adoc | 8 +- examples/assert.c | 33 +++- examples/cred.c | 29 +++- examples/extern.h | 8 +- examples/info.c | 86 +++++++++- examples/manifest.c | 1 + examples/reset.c | 1 + examples/retries.c | 3 +- examples/select.c | 1 + examples/setpin.c | 1 + examples/util.c | 65 ++++++- fuzz/CMakeLists.txt | 1 + fuzz/Dockerfile | 16 +- fuzz/Makefile | 16 +- fuzz/README | 7 + fuzz/build-coverage | 1 + fuzz/clock.c | 1 + fuzz/dummy.h | 1 + fuzz/export.gnu | 18 +- fuzz/functions.txt | 236 ++++++++++++++----------- fuzz/fuzz_assert.c | 41 ++++- fuzz/fuzz_bio.c | 3 +- fuzz/fuzz_cred.c | 8 +- fuzz/fuzz_credman.c | 3 +- fuzz/fuzz_hid.c | 3 +- fuzz/fuzz_largeblob.c | 3 +- fuzz/fuzz_mgmt.c | 29 +++- fuzz/fuzz_netlink.c | 3 +- fuzz/fuzz_pcsc.c | 5 +- fuzz/libfuzzer.c | 61 ++++++- fuzz/mutator_aux.c | 12 +- fuzz/mutator_aux.h | 10 +- fuzz/pcsc.c | 1 + fuzz/preload-fuzz.c | 1 + fuzz/preload-snoop.c | 1 + fuzz/report.tgz | Bin 341098 -> 357005 bytes fuzz/summary.txt | 57 +++--- fuzz/udev.c | 3 +- fuzz/wiredata_fido2.h | 1 + fuzz/wiredata_u2f.h | 1 + fuzz/wrap.c | 22 ++- fuzz/wrapped.sym | 1 + man/CMakeLists.txt | 18 +- man/check.sh | 1 + man/eddsa_pk_new.3 | 32 +++- man/es256_pk_new.3 | 32 +++- man/es384_pk_new.3 | 164 ++++++++++++++++++ man/fido2-assert.1 | 27 ++- man/fido2-cred.1 | 27 ++- man/fido2-token.1 | 27 ++- man/fido_assert_allow_cred.3 | 27 ++- man/fido_assert_new.3 | 31 +++- man/fido_assert_set_authdata.3 | 27 ++- man/fido_assert_verify.3 | 33 +++- man/fido_bio_dev_get_info.3 | 27 ++- man/fido_bio_enroll_new.3 | 27 ++- man/fido_bio_info_new.3 | 27 ++- man/fido_bio_template.3 | 27 ++- man/fido_cbor_info_new.3 | 156 ++++++++++++++++- man/fido_cred_exclude.3 | 27 ++- man/fido_cred_new.3 | 29 +++- man/fido_cred_set_authdata.3 | 46 ++++- man/fido_cred_verify.3 | 27 ++- man/fido_credman_metadata_new.3 | 27 ++- man/fido_dev_enable_entattest.3 | 34 +++- man/fido_dev_get_assert.3 | 27 ++- man/fido_dev_get_touch_begin.3 | 27 ++- man/fido_dev_info_manifest.3 | 27 ++- man/fido_dev_largeblob_get.3 | 34 +++- man/fido_dev_make_cred.3 | 27 ++- man/fido_dev_open.3 | 27 ++- man/fido_dev_set_io_functions.3 | 27 ++- man/fido_dev_set_pin.3 | 29 +++- man/fido_init.3 | 27 ++- man/fido_strerr.3 | 27 ++- man/rs256_pk_new.3 | 32 +++- openbsd-compat/clock_gettime.c | 1 + openbsd-compat/endian_win32.c | 1 + openbsd-compat/openbsd-compat.h | 1 + regress/CMakeLists.txt | 30 +++- regress/assert.c | 1 + regress/compress.c | 1 + regress/cred.c | 1 + regress/dev.c | 1 + regress/eddsa.c | 1 + regress/es256.c | 1 + regress/es384.c | 213 +++++++++++++++++++++++ regress/rs256.c | 1 + src/CMakeLists.txt | 9 +- src/aes256.c | 1 + src/assert.c | 195 ++++++++++++++------- src/authkey.c | 28 ++- src/bio.c | 130 +++++++++----- src/blob.c | 1 + src/blob.h | 1 + src/buf.c | 1 + src/cbor.c | 52 ++++-- src/compress.c | 1 + src/config.c | 28 +-- src/cred.c | 33 +++- src/credman.c | 164 +++++++++++------- src/dev.c | 1 + src/diff_exports.sh | 1 + src/ecdh.c | 1 + src/eddsa.c | 1 + src/err.c | 1 + src/es256.c | 1 + src/es384.c | 296 ++++++++++++++++++++++++++++++++ src/export.gnu | 17 +- src/export.llvm | 17 +- src/export.msvc | 17 +- src/extern.h | 8 + src/fallthrough.h | 21 +++ src/fido.h | 39 ++++- src/fido/bio.h | 26 ++- src/fido/config.h | 26 ++- src/fido/credman.h | 26 ++- src/fido/eddsa.h | 26 ++- src/fido/err.h | 26 ++- src/fido/es256.h | 26 ++- src/fido/es384.h | 59 +++++++ src/fido/param.h | 57 +++++- src/fido/rs256.h | 26 ++- src/fido/types.h | 47 ++++- src/hid.c | 1 + src/hid_freebsd.c | 90 +++++++++- src/hid_hidapi.c | 13 +- src/hid_linux.c | 48 ++++-- src/hid_netbsd.c | 1 + src/hid_openbsd.c | 1 + src/hid_osx.c | 1 + src/hid_unix.c | 1 + src/hid_win.c | 5 +- src/info.c | 165 ++++++++++++++++-- src/io.c | 28 ++- src/iso7816.c | 1 + src/iso7816.h | 1 + src/largeblob.c | 34 ++-- src/log.c | 1 + src/netlink.c | 1 + src/netlink.h | 1 + src/nfc.c | 30 ++++ src/nfc_linux.c | 13 +- src/packed.h | 1 + src/pcsc.c | 5 + src/pin.c | 81 ++++++--- src/random.c | 1 + src/reset.c | 1 + src/rs1.c | 1 + src/rs256.c | 1 + src/time.c | 1 + src/touch.c | 1 + src/tpm.c | 1 + src/types.c | 17 +- src/u2f.c | 93 +++++++--- src/util.c | 1 + src/winhello.c | 4 + tools/CMakeLists.txt | 5 +- tools/assert_get.c | 7 +- tools/assert_verify.c | 30 +++- tools/base64.c | 1 + tools/bio.c | 1 + tools/config.c | 1 + tools/cred_make.c | 7 +- tools/cred_verify.c | 1 + tools/credman.c | 1 + tools/extern.h | 4 +- tools/fido2-assert.c | 1 + tools/fido2-attach.sh | 1 + tools/fido2-cred.c | 1 + tools/fido2-detach.sh | 1 + tools/fido2-token.c | 1 + tools/fido2-unprot.sh | 1 + tools/include_check.sh | 1 + tools/largeblob.c | 1 + tools/pin.c | 26 ++- tools/test.sh | 46 +++-- tools/token.c | 150 +++++++++++++++- tools/util.c | 70 +++++++- udev/70-u2f.rules | 31 +++- udev/CMakeLists.txt | 1 + udev/check.sh | 1 + udev/fidodevs | 1 + udev/genrules.awk | 32 +++- windows/build.ps1 | 1 + windows/const.ps1 | 3 +- windows/cygwin.ps1 | 1 + windows/release.ps1 | 1 + 193 files changed, 4068 insertions(+), 722 deletions(-) create mode 100644 man/es384_pk_new.3 create mode 100644 regress/es384.c create mode 100644 src/es384.c create mode 100644 src/fallthrough.h create mode 100644 src/fido/es384.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f10727d40e..dc31cc0d480 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright (c) 2018-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause # detect AppleClang; needs to come before project() cmake_policy(SET CMP0025 NEW) @@ -28,7 +29,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_COLOR_MAKEFILE OFF) set(CMAKE_VERBOSE_MAKEFILE ON) set(FIDO_MAJOR "1") -set(FIDO_MINOR "11") +set(FIDO_MINOR "12") set(FIDO_PATCH "0") set(FIDO_VERSION ${FIDO_MAJOR}.${FIDO_MINOR}.${FIDO_PATCH}) @@ -67,7 +68,7 @@ if(NOT MSVC) if(APPLE) set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_DARWIN_C_SOURCE") set(FIDO_CFLAGS "${FIDO_CFLAGS} -D__STDC_WANT_LIB_EXT1__=1") - elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + elseif((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR MINGW OR CYGWIN) set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_GNU_SOURCE") set(FIDO_CFLAGS "${FIDO_CFLAGS} -D_DEFAULT_SOURCE") elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR @@ -277,16 +278,21 @@ else() add_compile_options(-Wwrite-strings) add_compile_options(-Wmissing-prototypes) add_compile_options(-Wbad-function-cast) + add_compile_options(-Wimplicit-fallthrough) add_compile_options(-pedantic) add_compile_options(-pedantic-errors) + set(EXTRA_CFLAGS "-Wconversion -Wsign-conversion") + if(WIN32) add_compile_options(-Wno-type-limits) add_compile_options(-Wno-cast-function-type) endif() + if(HAVE_SHORTEN_64_TO_32) add_compile_options(-Wshorten-64-to-32) endif() + if(HAVE_STACK_PROTECTOR_ALL) add_compile_options(-fstack-protector-all) endif() @@ -301,6 +307,8 @@ else() if(LIBFUZZER) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=fuzzer-no-link") + else() + set(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wframe-larger-than=2047") endif() endif() diff --git a/LICENSE b/LICENSE index 75a03f87e3a..359c853fb44 100644 --- a/LICENSE +++ b/LICENSE @@ -22,3 +22,5 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +SPDX-License-Identifier: BSD-2-Clause diff --git a/NEWS b/NEWS index f5bd414297d..a5353cfb952 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,25 @@ +* Version 1.12.0 (2022-09-22) + ** Support for COSE_ES384. + ** Support for hidraw(4) on FreeBSD; gh#597. + ** Improved support for FIDO 2.1 authenticators. + ** New API calls: + - es384_pk_free; + - es384_pk_from_EC_KEY; + - es384_pk_from_EVP_PKEY; + - es384_pk_from_ptr; + - es384_pk_new; + - es384_pk_to_EVP_PKEY; + - fido_cbor_info_certs_len; + - fido_cbor_info_certs_name_ptr; + - fido_cbor_info_certs_value_ptr; + - fido_cbor_info_maxrpid_minpinlen; + - fido_cbor_info_minpinlen; + - fido_cbor_info_new_pin_required; + - fido_cbor_info_rk_remaining; + - fido_cbor_info_uv_attempts; + - fido_cbor_info_uv_modality. + ** Documentation and reliability fixes. + * Version 1.11.0 (2022-05-03) ** Experimental PCSC support; enable with -DUSE_PCSC. ** Improved OpenSSL 3.0 compatibility. diff --git a/README.adoc b/README.adoc index c9cdafb5fea..6d6a96eb171 100644 --- a/README.adoc +++ b/README.adoc @@ -38,7 +38,7 @@ is also available. === Releases -The current release of *libfido2* is 1.11.0. Signed release tarballs are +The current release of *libfido2* is 1.12.0. Signed release tarballs are available at Yubico's https://developers.yubico.com/libfido2/Releases[release page]. diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index e558b620fd6..f013df4e71e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright (c) 2018 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause list(APPEND COMPAT_SOURCES ../openbsd-compat/clock_gettime.c diff --git a/examples/README.adoc b/examples/README.adoc index 44ee52743a0..6853757acad 100644 --- a/examples/README.adoc +++ b/examples/README.adoc @@ -48,8 +48,8 @@ The following examples are provided: Configures as the new PIN of . If [oldpin] is provided, the device's PIN is changed from [oldpin] to . -- cred [-t ecdsa|rsa|eddsa] [-k pubkey] [-ei cred_id] [-P pin] [-T seconds] - [-b blobkey] [-hruv] +- cred [-t es256|es384|rs256|eddsa] [-k pubkey] [-ei cred_id] [-P pin] + [-T seconds] [-b blobkey] [-hruv] Creates a new credential on and verify that the credential was signed by the authenticator. The device's attestation certificate @@ -66,8 +66,8 @@ The following examples are provided: option -b is specified, the credential's "largeBlob" key is stored in . -- assert [-t ecdsa|rsa|eddsa] [-a cred_id] [-h hmac_secret] [-s hmac_salt] - [-P pin] [-T seconds] [-b blobkey] [-puv] +- assert [-t es256|es384|rs256|eddsa] [-a cred_id] [-h hmac_secret] [-P pin] + [-s hmac_salt] [-T seconds] [-b blobkey] [-puv] Asks for a FIDO2 assertion corresponding to [cred_id], which may be omitted for resident keys. The obtained assertion diff --git a/examples/assert.c b/examples/assert.c index 8b0dbd9f6eb..32ba97b2fca 100644 --- a/examples/assert.c +++ b/examples/assert.c @@ -1,11 +1,13 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include #include +#include #include #include @@ -30,9 +32,9 @@ static const unsigned char cd[32] = { static void usage(void) { - fprintf(stderr, "usage: assert [-t ecdsa|rsa|eddsa] [-a cred_id] " - "[-h hmac_secret] [-s hmac_salt] [-P pin] [-T seconds] " - "[-b blobkey] [-puv] \n"); + fprintf(stderr, "usage: assert [-t es256|es384|rs256|eddsa] " + "[-a cred_id] [-h hmac_secret] [-s hmac_salt] [-P pin] " + "[-T seconds] [-b blobkey] [-puv] \n"); exit(EXIT_FAILURE); } @@ -46,6 +48,7 @@ verify_assert(int type, const unsigned char *authdata_ptr, size_t authdata_len, RSA *rsa = NULL; EVP_PKEY *eddsa = NULL; es256_pk_t *es256_pk = NULL; + es384_pk_t *es384_pk = NULL; rs256_pk_t *rs256_pk = NULL; eddsa_pk_t *eddsa_pk = NULL; void *pk; @@ -67,6 +70,21 @@ verify_assert(int type, const unsigned char *authdata_ptr, size_t authdata_len, EC_KEY_free(ec); ec = NULL; + break; + case COSE_ES384: + if ((ec = read_ec_pubkey(key)) == NULL) + errx(1, "read_ec_pubkey"); + + if ((es384_pk = es384_pk_new()) == NULL) + errx(1, "es384_pk_new"); + + if (es384_pk_from_EC_KEY(es384_pk, ec) != FIDO_OK) + errx(1, "es384_pk_from_EC_KEY"); + + pk = es384_pk; + EC_KEY_free(ec); + ec = NULL; + break; case COSE_RS256: if ((rsa = read_rsa_pubkey(key)) == NULL) @@ -147,6 +165,7 @@ verify_assert(int type, const unsigned char *authdata_ptr, size_t authdata_len, errx(1, "fido_assert_verify: %s (0x%x)", fido_strerr(r), r); es256_pk_free(&es256_pk); + es384_pk_free(&es384_pk); rs256_pk_free(&rs256_pk); eddsa_pk_free(&eddsa_pk); @@ -219,9 +238,11 @@ main(int argc, char **argv) body = NULL; break; case 't': - if (strcmp(optarg, "ecdsa") == 0) + if (strcmp(optarg, "es256") == 0) type = COSE_ES256; - else if (strcmp(optarg, "rsa") == 0) + else if (strcmp(optarg, "es384") == 0) + type = COSE_ES384; + else if (strcmp(optarg, "rs256") == 0) type = COSE_RS256; else if (strcmp(optarg, "eddsa") == 0) type = COSE_EDDSA; diff --git a/examples/cred.c b/examples/cred.c index 4a9d8bf4b25..576900d9778 100644 --- a/examples/cred.c +++ b/examples/cred.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -34,7 +35,7 @@ static const unsigned char user_id[32] = { static void usage(void) { - fprintf(stderr, "usage: cred [-t ecdsa|rsa|eddsa] [-k pubkey] " + fprintf(stderr, "usage: cred [-t es256|es384|rs256|eddsa] [-k pubkey] " "[-ei cred_id] [-P pin] [-T seconds] [-b blobkey] [-hruv] " "\n"); exit(EXIT_FAILURE); @@ -107,15 +108,23 @@ out: if (key_out != NULL) { /* extract the credential pubkey */ if (type == COSE_ES256) { - if (write_ec_pubkey(key_out, fido_cred_pubkey_ptr(cred), + if (write_es256_pubkey(key_out, + fido_cred_pubkey_ptr(cred), fido_cred_pubkey_len(cred)) < 0) - errx(1, "write_ec_pubkey"); + errx(1, "write_es256_pubkey"); + } else if (type == COSE_ES384) { + if (write_es384_pubkey(key_out, + fido_cred_pubkey_ptr(cred), + fido_cred_pubkey_len(cred)) < 0) + errx(1, "write_es384_pubkey"); } else if (type == COSE_RS256) { - if (write_rsa_pubkey(key_out, fido_cred_pubkey_ptr(cred), + if (write_rs256_pubkey(key_out, + fido_cred_pubkey_ptr(cred), fido_cred_pubkey_len(cred)) < 0) - errx(1, "write_rsa_pubkey"); + errx(1, "write_rs256_pubkey"); } else if (type == COSE_EDDSA) { - if (write_eddsa_pubkey(key_out, fido_cred_pubkey_ptr(cred), + if (write_eddsa_pubkey(key_out, + fido_cred_pubkey_ptr(cred), fido_cred_pubkey_len(cred)) < 0) errx(1, "write_eddsa_pubkey"); } @@ -193,9 +202,11 @@ main(int argc, char **argv) rk = true; break; case 't': - if (strcmp(optarg, "ecdsa") == 0) + if (strcmp(optarg, "es256") == 0) type = COSE_ES256; - else if (strcmp(optarg, "rsa") == 0) + else if (strcmp(optarg, "es384") == 0) + type = COSE_ES384; + else if (strcmp(optarg, "rs256") == 0) type = COSE_RS256; else if (strcmp(optarg, "eddsa") == 0) type = COSE_EDDSA; diff --git a/examples/extern.h b/examples/extern.h index 5633b23d200..5cffd7fbf88 100644 --- a/examples/extern.h +++ b/examples/extern.h @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _EXTERN_H_ @@ -18,8 +19,9 @@ EVP_PKEY *read_eddsa_pubkey(const char *); int base10(const char *, long long *); int read_blob(const char *, unsigned char **, size_t *); int write_blob(const char *, const unsigned char *, size_t); -int write_ec_pubkey(const char *, const void *, size_t); -int write_rsa_pubkey(const char *, const void *, size_t); +int write_es256_pubkey(const char *, const void *, size_t); +int write_es384_pubkey(const char *, const void *, size_t); +int write_rs256_pubkey(const char *, const void *, size_t); int write_eddsa_pubkey(const char *, const void *, size_t); #endif /* _EXTERN_H_ */ diff --git a/examples/info.c b/examples/info.c index 1098580eec6..a10a50cffb3 100644 --- a/examples/info.c +++ b/examples/info.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -103,6 +104,25 @@ print_opt_array(const char *label, char * const *name, const bool *value, printf("\n"); } +/* + * Auxiliary function to print (char *, uint64_t) pairs on stdout. + */ +static void +print_cert_array(const char *label, char * const *name, const uint64_t *value, + size_t len) +{ + if (len == 0) + return; + + printf("%s: ", label); + + for (size_t i = 0; i < len; i++) + printf("%s%s %llu", i > 0 ? ", " : "", name[i], + (unsigned long long)value[i]); + + printf("\n"); +} + /* * Auxiliary function to print a list of supported COSE algorithms on stdout. */ @@ -120,15 +140,18 @@ print_algorithms(const fido_cbor_info_t *ci) for (size_t i = 0; i < len; i++) { cose = type = "unknown"; switch (fido_cbor_info_algorithm_cose(ci, i)) { - case COSE_EDDSA: - cose = "eddsa"; - break; case COSE_ES256: cose = "es256"; break; + case COSE_ES384: + cose = "es384"; + break; case COSE_RS256: cose = "rs256"; break; + case COSE_EDDSA: + cose = "eddsa"; + break; } if (fido_cbor_info_algorithm_type(ci, i) != NULL) type = fido_cbor_info_algorithm_type(ci, i); @@ -192,6 +215,41 @@ print_maxlargeblob(uint64_t maxlargeblob) printf("maxlargeblob: %d\n", (int)maxlargeblob); } +/* + * Auxiliary function to print the authenticator's estimated number of + * remaining resident credentials. + */ +static void +print_rk_remaining(int64_t rk_remaining) +{ + printf("remaining rk(s): "); + + if (rk_remaining == -1) + printf("undefined\n"); + else + printf("%d\n", (int)rk_remaining); +} + +/* + * Auxiliary function to print the minimum pin length observed by the + * authenticator. + */ +static void +print_minpinlen(uint64_t minpinlen) +{ + printf("minpinlen: %d\n", (int)minpinlen); +} + +/* + * Auxiliary function to print the authenticator's preferred (platform) + * UV attempts. + */ +static void +print_uv_attempts(uint64_t uv_attempts) +{ + printf("platform uv attempt(s): %d\n", (int)uv_attempts); +} + /* * Auxiliary function to print an authenticator's firmware version on stdout. */ @@ -265,6 +323,14 @@ getinfo(const char *path) fido_cbor_info_options_value_ptr(ci), fido_cbor_info_options_len(ci)); + /* print certifications */ + print_cert_array("certifications", fido_cbor_info_certs_name_ptr(ci), + fido_cbor_info_certs_value_ptr(ci), + fido_cbor_info_certs_len(ci)); + + /* print firmware version */ + print_fwversion(fido_cbor_info_fwversion(ci)); + /* print maximum message size */ print_maxmsgsiz(fido_cbor_info_maxmsgsiz(ci)); @@ -277,13 +343,23 @@ getinfo(const char *path) /* print maximum length of largeBlob array */ print_maxlargeblob(fido_cbor_info_maxlargeblob(ci)); - /* print firmware version */ - print_fwversion(fido_cbor_info_fwversion(ci)); + /* print number of remaining resident credentials */ + print_rk_remaining(fido_cbor_info_rk_remaining(ci)); + + /* print minimum pin length */ + print_minpinlen(fido_cbor_info_minpinlen(ci)); /* print supported pin protocols */ print_byte_array("pin protocols", fido_cbor_info_protocols_ptr(ci), fido_cbor_info_protocols_len(ci)); + /* print whether a new pin is required */ + printf("pin change required: %s\n", + fido_cbor_info_new_pin_required(ci) ? "true" : "false"); + + /* print platform uv attempts */ + print_uv_attempts(fido_cbor_info_uv_attempts(ci)); + fido_cbor_info_free(&ci); end: if ((r = fido_dev_close(dev)) != FIDO_OK) diff --git a/examples/manifest.c b/examples/manifest.c index d38166a9fea..c2b3bf19137 100644 --- a/examples/manifest.c +++ b/examples/manifest.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/examples/reset.c b/examples/reset.c index b429d05f0fe..767a162b6f6 100644 --- a/examples/reset.c +++ b/examples/reset.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/examples/retries.c b/examples/retries.c index b96118b1e15..a0610fe1390 100644 --- a/examples/retries.c +++ b/examples/retries.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* @@ -35,7 +36,7 @@ main(int argc, char **argv) errx(1, "fido_open: %s (0x%x)", fido_strerr(r), r); if ((r = fido_dev_get_retry_count(dev, &n)) != FIDO_OK) - errx(1, "fido_get_retries: %s (0x%x)", fido_strerr(r), r); + errx(1, "fido_dev_get_retry_count: %s (0x%x)", fido_strerr(r), r); if ((r = fido_dev_close(dev)) != FIDO_OK) errx(1, "fido_close: %s (0x%x)", fido_strerr(r), r); diff --git a/examples/select.c b/examples/select.c index 05f6a331fd4..008eb2e99b8 100644 --- a/examples/select.c +++ b/examples/select.c @@ -2,6 +2,7 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/examples/setpin.c b/examples/setpin.c index 7fa0dcc764f..72e08e4b908 100644 --- a/examples/setpin.c +++ b/examples/setpin.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/examples/util.c b/examples/util.c index 8b360af21c7..0c0c77a9400 100644 --- a/examples/util.c +++ b/examples/util.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -13,6 +14,7 @@ #include #include +#include #include #include @@ -158,7 +160,7 @@ fail: } int -write_ec_pubkey(const char *path, const void *ptr, size_t len) +write_es256_pubkey(const char *path, const void *ptr, size_t len) { FILE *fp = NULL; EVP_PKEY *pkey = NULL; @@ -214,6 +216,63 @@ fail: return (ok); } +int +write_es384_pubkey(const char *path, const void *ptr, size_t len) +{ + FILE *fp = NULL; + EVP_PKEY *pkey = NULL; + es384_pk_t *pk = NULL; + int fd = -1; + int ok = -1; + + if ((pk = es384_pk_new()) == NULL) { + warnx("es384_pk_new"); + goto fail; + } + + if (es384_pk_from_ptr(pk, ptr, len) != FIDO_OK) { + warnx("es384_pk_from_ptr"); + goto fail; + } + + if ((fd = open(path, O_WRONLY | O_CREAT, 0644)) < 0) { + warn("open %s", path); + goto fail; + } + + if ((fp = fdopen(fd, "w")) == NULL) { + warn("fdopen"); + goto fail; + } + fd = -1; /* owned by fp now */ + + if ((pkey = es384_pk_to_EVP_PKEY(pk)) == NULL) { + warnx("es384_pk_to_EVP_PKEY"); + goto fail; + } + + if (PEM_write_PUBKEY(fp, pkey) == 0) { + warnx("PEM_write_PUBKEY"); + goto fail; + } + + ok = 0; +fail: + es384_pk_free(&pk); + + if (fp != NULL) { + fclose(fp); + } + if (fd != -1) { + close(fd); + } + if (pkey != NULL) { + EVP_PKEY_free(pkey); + } + + return (ok); +} + RSA * read_rsa_pubkey(const char *path) { @@ -247,7 +306,7 @@ fail: } int -write_rsa_pubkey(const char *path, const void *ptr, size_t len) +write_rs256_pubkey(const char *path, const void *ptr, size_t len) { FILE *fp = NULL; EVP_PKEY *pkey = NULL; diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index 4b6fdfbfca4..52355c1ab6b 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright (c) 2019 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause list(APPEND COMPAT_SOURCES ../openbsd-compat/strlcpy.c diff --git a/fuzz/Dockerfile b/fuzz/Dockerfile index a899df2c3dd..0c99f2c95aa 100644 --- a/fuzz/Dockerfile +++ b/fuzz/Dockerfile @@ -1,16 +1,16 @@ # Copyright (c) 2019-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause -FROM ubuntu:focal -ENV DEBIAN_FRONTEND=noninteractive -ENV CC=clang-14 -ENV CXX=clang++-14 -RUN apt-get update -RUN apt-get install -y cmake git libssl-dev libudev-dev make pkg-config -RUN apt-get install -y libpcsclite-dev zlib1g-dev software-properties-common +FROM alpine:latest +ENV CC=clang +ENV CXX=clang++ +RUN apk -q update +RUN apk add build-base clang clang-analyzer cmake compiler-rt coreutils +RUN apk add eudev-dev git linux-headers llvm openssl-dev pcsc-lite-dev +RUN apk add sudo tar zlib-dev RUN git clone --branch v0.9.0 --depth=1 https://github.com/PJK/libcbor RUN git clone --depth=1 https://github.com/yubico/libfido2 WORKDIR /libfido2 -RUN ./.actions/setup_clang "${CC}" RUN ./fuzz/build-coverage /libcbor /libfido2 diff --git a/fuzz/Makefile b/fuzz/Makefile index 6abf59c3e69..857c89ee074 100644 --- a/fuzz/Makefile +++ b/fuzz/Makefile @@ -1,11 +1,12 @@ # Copyright (c) 2019-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause -IMAGE := libfido2-coverage:1.11.2 +IMAGE := libfido2-coverage:1.12.2 RUNNER := libfido2-runner -PROFDATA := llvm-profdata-14 -COV := llvm-cov-14 +PROFDATA := llvm-profdata +COV := llvm-cov TARGETS := fuzz_assert fuzz_bio fuzz_cred fuzz_credman fuzz_hid \ fuzz_largeblob fuzz_netlink fuzz_mgmt fuzz_pcsc CORPORA := $(foreach f,${TARGETS},${f}/corpus) @@ -75,8 +76,15 @@ ${CORPORA}: -mkdir -p $@ gsutil -q -m rsync -d -r ${REMOTE}/libFuzzer/libfido2_$(@:/corpus=) $@ -corpus.tgz: ${CORPORA} +fetch-oss-fuzz: ${CORPORA} + find ${TARGETS} -type f -size +8192c -print0 | xargs -0 rm + +fetch-franz: + ssh franz tar -C corpus -cf- . | tar -xf- + +corpus.tgz: tar zcf $@ ${TARGETS} .PHONY: build run sync corpus ${TARGETS} ${CORPORA} .PHONY: report.tgz summary.txt functions.txt +.PHONY: fetch-oss-fuzz fetch-franz corpus.tgz diff --git a/fuzz/README b/fuzz/README index 28fc7f8f51b..2e88db74975 100644 --- a/fuzz/README +++ b/fuzz/README @@ -10,6 +10,13 @@ libFuzzer is better suited for bespoke fuzzers; see fuzz_cred.c, fuzz_credman.c, fuzz_assert.c, fuzz_hid.c, and fuzz_mgmt.c for examples. To build these harnesses, use -DFUZZ=ON -DLIBFUZZER=ON. +If -DFUZZ=ON is enabled, symbols listed in wrapped.sym are wrapped in the +resulting shared object. The wrapper functions simulate failure according to a +deterministic RNG and probabilities defined in wrap.c. Harnesses wishing to +use this functionality should call prng_init() with a seed obtained from the +corpus. To mutate only the seed part of a libFuzzer harness's corpora, +use '-reduce_inputs=0 --fido-mutate=seed'. + To run under ASAN/MSAN/UBSAN, libfido2 needs to be linked against flavours of libcbor and OpenSSL built with the respective sanitiser. In order to keep memory utilisation at a manageable level, you can either enforce limits at diff --git a/fuzz/build-coverage b/fuzz/build-coverage index e0e90da02b5..8c989fc0cb6 100755 --- a/fuzz/build-coverage +++ b/fuzz/build-coverage @@ -3,6 +3,7 @@ # Copyright (c) 2019 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause LIBCBOR="$1" LIBFIDO2="$2" diff --git a/fuzz/clock.c b/fuzz/clock.c index 23803c2ee3e..bd758ea1a49 100644 --- a/fuzz/clock.c +++ b/fuzz/clock.c @@ -2,6 +2,7 @@ * Copyright (c) 2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/fuzz/dummy.h b/fuzz/dummy.h index b0225440e5d..fc4bfc5ada4 100644 --- a/fuzz/dummy.h +++ b/fuzz/dummy.h @@ -2,6 +2,7 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _DUMMY_H diff --git a/fuzz/export.gnu b/fuzz/export.gnu index 0ce72434fbd..f0fb840dd68 100644 --- a/fuzz/export.gnu +++ b/fuzz/export.gnu @@ -11,6 +11,12 @@ es256_pk_from_ptr; es256_pk_new; es256_pk_to_EVP_PKEY; + es384_pk_free; + es384_pk_from_EC_KEY; + es384_pk_from_EVP_PKEY; + es384_pk_from_ptr; + es384_pk_new; + es384_pk_to_EVP_PKEY; fido_assert_allow_cred; fido_assert_authdata_len; fido_assert_authdata_ptr; @@ -82,23 +88,32 @@ fido_cbor_info_algorithm_cose; fido_cbor_info_algorithm_count; fido_cbor_info_algorithm_type; + fido_cbor_info_certs_len; + fido_cbor_info_certs_name_ptr; + fido_cbor_info_certs_value_ptr; fido_cbor_info_extensions_len; fido_cbor_info_extensions_ptr; fido_cbor_info_free; + fido_cbor_info_fwversion; fido_cbor_info_maxcredbloblen; fido_cbor_info_maxcredcntlst; fido_cbor_info_maxcredidlen; fido_cbor_info_maxlargeblob; fido_cbor_info_maxmsgsiz; - fido_cbor_info_fwversion; + fido_cbor_info_maxrpid_minpinlen; + fido_cbor_info_minpinlen; fido_cbor_info_new; + fido_cbor_info_new_pin_required; fido_cbor_info_options_len; fido_cbor_info_options_name_ptr; fido_cbor_info_options_value_ptr; fido_cbor_info_protocols_len; fido_cbor_info_protocols_ptr; + fido_cbor_info_rk_remaining; fido_cbor_info_transports_len; fido_cbor_info_transports_ptr; + fido_cbor_info_uv_attempts; + fido_cbor_info_uv_modality; fido_cbor_info_versions_len; fido_cbor_info_versions_ptr; fido_cred_attstmt_len; @@ -257,6 +272,7 @@ prng_init; prng_up; fuzz_clock_reset; + fuzz_save_corpus; set_netlink_io_functions; set_pcsc_parameters; set_pcsc_io_functions; diff --git a/fuzz/functions.txt b/fuzz/functions.txt index 9c1a03cffb0..da7f058d6c0 100644 --- a/fuzz/functions.txt +++ b/fuzz/functions.txt @@ -5,20 +5,20 @@ aes256_cbc_enc 4 0 100.00% 4 0 100.00% aes256_cbc_dec 4 0 100.00% 4 0 100.00% aes256_gcm_enc 1 0 100.00% 3 0 100.00% aes256_gcm_dec 1 0 100.00% 3 0 100.00% -aes256.c:aes256_cbc_fips 26 2 92.31% 42 7 83.33% +aes256.c:aes256_cbc_fips 26 1 96.15% 42 4 90.48% aes256.c:aes256_cbc 29 1 96.55% 36 3 91.67% aes256.c:aes256_cbc_proto1 1 0 100.00% 5 0 100.00% aes256.c:aes256_gcm 52 1 98.08% 60 4 93.33% -------------------------------------------------------------------------------------------------------- -TOTAL 118 4 96.61% 157 14 91.08% +TOTAL 118 3 97.46% 157 11 92.99% File '/libfido2/src/assert.c': Name Regions Miss Cover Lines Miss Cover ----------------------------------------------------------------------------------------------------------------- fido_dev_get_assert 40 0 100.00% 35 0 100.00% fido_check_flags 13 0 100.00% 15 0 100.00% -fido_get_signed_hash 36 0 100.00% 46 0 100.00% -fido_assert_verify 48 4 91.67% 67 7 89.55% +fido_get_signed_hash 20 1 95.00% 34 3 91.18% +fido_assert_verify 50 4 92.00% 70 7 90.00% fido_assert_set_clientdata 12 12 0.00% 11 11 0.00% fido_assert_set_clientdata_hash 8 0 100.00% 6 0 100.00% fido_assert_set_hmac_salt 10 0 100.00% 6 0 100.00% @@ -62,17 +62,20 @@ fido_assert_set_sig 14 0 100.00% 7 0 fido_assert_set_count 10 0 100.00% 17 0 100.00% assert.c:fido_dev_get_assert_wait 21 0 100.00% 14 0 100.00% assert.c:fido_dev_get_assert_tx 56 2 96.43% 62 5 91.94% -assert.c:fido_dev_get_assert_rx 19 0 100.00% 27 0 100.00% +assert.c:fido_dev_get_assert_rx 27 0 100.00% 36 0 100.00% assert.c:adjust_assert_count 24 0 100.00% 26 0 100.00% assert.c:parse_assert_reply 12 0 100.00% 24 0 100.00% assert.c:fido_get_next_assert_tx 8 0 100.00% 8 0 100.00% -assert.c:fido_get_next_assert_rx 15 2 86.67% 21 4 80.95% +assert.c:fido_get_next_assert_rx 23 2 91.30% 29 5 82.76% assert.c:decrypt_hmac_secrets 9 0 100.00% 15 0 100.00% +assert.c:get_es256_hash 16 0 100.00% 17 0 100.00% +assert.c:get_es384_hash 16 0 100.00% 17 0 100.00% +assert.c:get_eddsa_hash 6 0 100.00% 9 0 100.00% assert.c:check_extensions 5 0 100.00% 9 0 100.00% assert.c:fido_assert_reset_extattr 1 0 100.00% 5 0 100.00% assert.c:fido_assert_clean_authdata 1 0 100.00% 5 0 100.00% ----------------------------------------------------------------------------------------------------------------- -TOTAL 565 42 92.57% 694 42 93.95% +TOTAL 605 43 92.89% 745 46 93.83% File '/libfido2/src/authkey.c': Name Regions Miss Cover Lines Miss Cover @@ -80,10 +83,10 @@ Name Regions Miss Cover Lines Miss fido_dev_authkey 1 0 100.00% 3 0 100.00% authkey.c:fido_dev_authkey_wait 10 0 100.00% 7 0 100.00% authkey.c:fido_dev_authkey_tx 19 0 100.00% 25 0 100.00% -authkey.c:fido_dev_authkey_rx 6 0 100.00% 14 0 100.00% +authkey.c:fido_dev_authkey_rx 14 0 100.00% 21 0 100.00% authkey.c:parse_authkey 8 0 100.00% 10 0 100.00% ----------------------------------------------------------------------------------------------------------------- -TOTAL 44 0 100.00% 59 0 100.00% +TOTAL 52 0 100.00% 66 0 100.00% File '/libfido2/src/bio.c': Name Regions Miss Cover Lines Miss Cover @@ -117,28 +120,28 @@ fido_bio_enroll_last_status 1 0 100.00% 3 0 bio.c:bio_get_template_array_wait 11 0 100.00% 7 0 100.00% bio.c:bio_tx 43 0 100.00% 55 0 100.00% bio.c:bio_prepare_hmac 18 0 100.00% 29 0 100.00% -bio.c:bio_rx_template_array 11 0 100.00% 17 0 100.00% +bio.c:bio_rx_template_array 19 0 100.00% 24 0 100.00% bio.c:bio_parse_template_array 26 1 96.15% 27 4 85.19% bio.c:decode_template_array 12 1 91.67% 18 3 83.33% bio.c:decode_template 9 0 100.00% 15 0 100.00% bio.c:bio_set_template_name_wait 19 0 100.00% 20 0 100.00% bio.c:bio_enroll_begin_wait 17 0 100.00% 19 0 100.00% -bio.c:bio_rx_enroll_begin 15 0 100.00% 24 0 100.00% +bio.c:bio_rx_enroll_begin 23 0 100.00% 31 0 100.00% bio.c:bio_parse_enroll_status 20 0 100.00% 28 0 100.00% bio.c:bio_parse_template_id 8 0 100.00% 10 0 100.00% bio.c:bio_enroll_continue_wait 19 0 100.00% 20 0 100.00% -bio.c:bio_rx_enroll_continue 11 0 100.00% 18 0 100.00% +bio.c:bio_rx_enroll_continue 19 0 100.00% 25 0 100.00% bio.c:bio_enroll_cancel_wait 11 11 0.00% 10 10 0.00% bio.c:bio_enroll_remove_wait 17 0 100.00% 19 0 100.00% bio.c:bio_get_info_wait 11 0 100.00% 10 0 100.00% -bio.c:bio_rx_info 11 0 100.00% 17 0 100.00% +bio.c:bio_rx_info 19 0 100.00% 24 0 100.00% bio.c:bio_reset_info 1 0 100.00% 4 0 100.00% bio.c:bio_parse_info 20 0 100.00% 28 0 100.00% bio.c:bio_reset_template_array 4 0 100.00% 7 0 100.00% bio.c:bio_reset_template 1 0 100.00% 5 0 100.00% bio.c:bio_reset_enroll 3 0 100.00% 6 0 100.00% ----------------------------------------------------------------------------------------------------------------- -TOTAL 419 20 95.23% 559 24 95.71% +TOTAL 451 20 95.57% 587 24 95.91% File '/libfido2/src/blob.c': Name Regions Miss Cover Lines Miss Cover @@ -192,7 +195,7 @@ cbor_encode_pin_opt 4 0 100.00% 8 0 cbor_encode_change_pin_auth 32 1 96.88% 36 3 91.67% cbor_encode_assert_ext 33 0 100.00% 32 0 100.00% cbor_decode_fmt 13 0 100.00% 15 0 100.00% -cbor_decode_pubkey 21 1 95.24% 30 2 93.33% +cbor_decode_pubkey 26 1 96.15% 36 2 94.44% cbor_decode_cred_authdata 31 1 96.77% 35 3 91.43% cbor_decode_assert_authdata 21 0 100.00% 32 0 100.00% cbor_decode_attstmt 13 0 100.00% 16 0 100.00% @@ -200,38 +203,39 @@ cbor_decode_uint64 4 0 100.00% 8 0 cbor_decode_cred_id 8 0 100.00% 9 0 100.00% cbor_decode_user 8 0 100.00% 9 0 100.00% cbor_decode_rp_entity 8 0 100.00% 9 0 100.00% +cbor_decode_bool 10 0 100.00% 11 0 100.00% cbor_build_uint 10 1 90.00% 9 1 88.89% cbor_array_append 17 0 100.00% 21 0 100.00% -cbor_array_drop 18 2 88.89% 17 3 82.35% +cbor_array_drop 18 0 100.00% 17 0 100.00% cbor.c:ctap_check_cbor 28 0 100.00% 26 0 100.00% cbor.c:check_key_type 8 0 100.00% 7 0 100.00% cbor.c:cbor_add_arg 13 0 100.00% 21 0 100.00% cbor.c:cbor_add_uint8 14 0 100.00% 21 0 100.00% cbor.c:cbor_encode_largeblob_key_ext 6 0 100.00% 6 0 100.00% cbor.c:cbor_encode_hmac_secret_param 59 4 93.22% 66 8 87.88% -cbor.c:get_cose_alg 36 0 100.00% 38 0 100.00% +cbor.c:get_cose_alg 46 1 97.83% 45 3 93.33% cbor.c:find_cose_alg 35 0 100.00% 33 0 100.00% cbor.c:decode_attcred 25 0 100.00% 44 0 100.00% cbor.c:decode_cred_extensions 14 0 100.00% 24 0 100.00% -cbor.c:decode_cred_extension 49 10 79.59% 49 17 65.31% +cbor.c:decode_cred_extension 41 1 97.56% 45 3 93.33% cbor.c:decode_assert_extensions 14 0 100.00% 23 0 100.00% cbor.c:decode_assert_extension 19 0 100.00% 27 0 100.00% -cbor.c:decode_attstmt_entry 52 0 100.00% 50 0 100.00% +cbor.c:decode_attstmt_entry 56 0 100.00% 51 0 100.00% cbor.c:decode_x5c 4 0 100.00% 6 0 100.00% cbor.c:decode_cred_id_entry 10 0 100.00% 19 0 100.00% cbor.c:decode_user_entry 25 0 100.00% 35 0 100.00% cbor.c:decode_rp_entity_entry 15 0 100.00% 25 0 100.00% ------------------------------------------------------------------------------------------------------------------ -TOTAL 1049 23 97.81% 1237 45 96.36% +TOTAL 1070 13 98.79% 1258 31 97.54% File '/libfido2/src/compress.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------ fido_compress 1 0 100.00% 3 0 100.00% fido_uncompress 6 0 100.00% 5 0 100.00% -compress.c:rfc1951_deflate 33 2 93.94% 47 3 93.62% +compress.c:rfc1951_deflate 33 4 87.88% 47 6 87.23% compress.c:rfc1950_inflate 27 2 92.59% 22 4 81.82% -compress.c:rfc1951_inflate 38 10 73.68% 45 17 62.22% +compress.c:rfc1951_inflate 38 8 78.95% 45 14 68.89% ------------------------------------------------------------------------------------------------------------------ TOTAL 105 14 86.67% 122 24 80.33% @@ -244,21 +248,21 @@ fido_dev_set_pin_minlen 1 0 100.00% 4 fido_dev_force_pin_change 1 0 100.00% 4 0 100.00% fido_dev_set_pin_minlen_rpid 6 0 100.00% 15 0 100.00% config.c:config_enable_entattest_wait 6 0 100.00% 7 0 100.00% -config.c:config_tx 37 0 100.00% 48 0 100.00% +config.c:config_tx 41 0 100.00% 49 0 100.00% config.c:config_prepare_hmac 8 0 100.00% 19 0 100.00% config.c:config_toggle_always_uv_wait 6 0 100.00% 7 0 100.00% config.c:config_pin_minlen 5 0 100.00% 7 0 100.00% config.c:config_pin_minlen_tx 36 0 100.00% 32 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 108 0 100.00% 151 0 100.00% +TOTAL 112 0 100.00% 152 0 100.00% File '/libfido2/src/cred.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- fido_dev_make_cred 12 0 100.00% 10 0 100.00% fido_check_rp_id 4 0 100.00% 11 0 100.00% -fido_cred_verify 56 2 96.43% 72 4 94.44% -fido_cred_verify_self 58 4 93.10% 83 7 91.57% +fido_cred_verify 59 2 96.61% 75 4 94.67% +fido_cred_verify_self 60 6 90.00% 87 11 87.36% fido_cred_new 1 0 100.00% 3 0 100.00% fido_cred_reset_tx 1 0 100.00% 19 0 100.00% fido_cred_reset_rx 1 0 100.00% 7 0 100.00% @@ -280,9 +284,9 @@ fido_cred_set_rk 2 0 100.00% 4 fido_cred_set_uv 2 0 100.00% 4 0 100.00% fido_cred_set_prot 21 0 100.00% 14 0 100.00% fido_cred_set_pin_minlen 7 0 100.00% 8 0 100.00% -fido_cred_set_blob 13 2 84.62% 8 1 87.50% +fido_cred_set_blob 13 0 100.00% 8 0 100.00% fido_cred_set_fmt 20 4 80.00% 12 2 83.33% -fido_cred_set_type 17 0 100.00% 7 0 100.00% +fido_cred_set_type 23 2 91.30% 9 1 88.89% fido_cred_type 1 0 100.00% 3 0 100.00% fido_cred_flags 1 0 100.00% 3 0 100.00% fido_cred_sigcount 1 0 100.00% 3 0 100.00% @@ -298,8 +302,8 @@ fido_cred_authdata_raw_ptr 1 0 100.00% 3 fido_cred_authdata_raw_len 1 0 100.00% 3 0 100.00% fido_cred_attstmt_ptr 1 0 100.00% 3 0 100.00% fido_cred_attstmt_len 1 0 100.00% 3 0 100.00% -fido_cred_pubkey_ptr 9 0 100.00% 18 0 100.00% -fido_cred_pubkey_len 9 0 100.00% 18 0 100.00% +fido_cred_pubkey_ptr 11 0 100.00% 21 0 100.00% +fido_cred_pubkey_len 11 0 100.00% 21 0 100.00% fido_cred_id_ptr 1 0 100.00% 3 0 100.00% fido_cred_id_len 1 0 100.00% 3 0 100.00% fido_cred_aaguid_ptr 1 0 100.00% 3 0 100.00% @@ -320,12 +324,12 @@ cred.c:fido_dev_make_cred_tx 64 0 100.00% 70 cred.c:fido_dev_make_cred_rx 29 0 100.00% 32 0 100.00% cred.c:parse_makecred_reply 14 0 100.00% 27 0 100.00% cred.c:check_extensions 2 0 100.00% 6 0 100.00% -cred.c:get_signed_hash_u2f 27 0 100.00% 26 0 100.00% -cred.c:verify_attstmt 23 2 91.30% 40 6 85.00% +cred.c:get_signed_hash_u2f 27 0 100.00% 27 0 100.00% +cred.c:verify_attstmt 25 2 92.00% 43 6 86.05% cred.c:fido_cred_clean_authdata 1 0 100.00% 8 0 100.00% cred.c:fido_cred_clean_attstmt 1 0 100.00% 8 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 634 36 94.32% 830 39 95.30% +TOTAL 651 38 94.16% 849 43 94.94% File '/libfido2/src/credman.c': Name Regions Miss Cover Lines Miss Cover @@ -353,32 +357,32 @@ fido_credman_rp_id_hash_ptr 4 0 100.00% 5 credman.c:credman_get_metadata_wait 11 0 100.00% 8 0 100.00% credman.c:credman_tx 36 0 100.00% 50 0 100.00% credman.c:credman_prepare_hmac 31 1 96.77% 50 2 96.00% -credman.c:credman_rx_metadata 11 0 100.00% 17 0 100.00% +credman.c:credman_rx_metadata 19 0 100.00% 24 0 100.00% credman.c:credman_parse_metadata 9 0 100.00% 17 0 100.00% credman.c:credman_get_rk_wait 27 0 100.00% 23 0 100.00% -credman.c:credman_rx_rk 19 0 100.00% 27 0 100.00% +credman.c:credman_rx_rk 27 0 100.00% 35 0 100.00% credman.c:credman_parse_rk_count 16 0 100.00% 20 0 100.00% credman.c:credman_grow_array 17 2 88.24% 21 5 76.19% credman.c:credman_parse_rk 23 0 100.00% 31 0 100.00% -credman.c:credman_rx_next_rk 15 2 86.67% 21 4 80.95% +credman.c:credman_rx_next_rk 23 2 91.30% 29 5 82.76% credman.c:credman_del_rk_wait 16 0 100.00% 15 0 100.00% credman.c:credman_get_rp_wait 23 0 100.00% 15 0 100.00% -credman.c:credman_rx_rp 19 0 100.00% 27 0 100.00% +credman.c:credman_rx_rp 27 0 100.00% 35 0 100.00% credman.c:credman_parse_rp_count 16 0 100.00% 20 0 100.00% credman.c:credman_parse_rp 9 0 100.00% 17 0 100.00% -credman.c:credman_rx_next_rp 15 2 86.67% 21 4 80.95% +credman.c:credman_rx_next_rp 23 2 91.30% 29 5 82.76% credman.c:credman_set_dev_rk_wait 11 0 100.00% 8 0 100.00% credman.c:credman_reset_rk 4 0 100.00% 9 0 100.00% credman.c:credman_reset_rp 4 0 100.00% 12 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 382 10 97.38% 518 18 96.53% +TOTAL 422 10 97.63% 557 20 96.41% File '/libfido2/src/dev.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- fido_dev_info_manifest 2 0 100.00% 11 0 100.00% fido_dev_open_with_info 5 5 0.00% 6 6 0.00% -fido_dev_open 13 6 53.85% 16 6 62.50% +fido_dev_open 13 4 69.23% 16 6 62.50% fido_dev_close 9 2 77.78% 8 1 87.50% fido_dev_set_sigmask 18 18 0.00% 11 11 0.00% fido_dev_cancel 11 0 100.00% 8 0 100.00% @@ -410,7 +414,7 @@ fido_dev_maxmsgsize 1 0 100.00% 3 fido_dev_set_timeout 6 2 66.67% 6 1 83.33% dev.c:run_manifest 10 0 100.00% 13 0 100.00% dev.c:fido_dev_open_wait 10 0 100.00% 7 0 100.00% -dev.c:fido_dev_open_tx 56 15 73.21% 56 26 53.57% +dev.c:fido_dev_open_tx 56 11 80.36% 56 20 64.29% dev.c:set_random_report_len 11 0 100.00% 6 0 100.00% dev.c:fido_dev_open_rx 36 1 97.22% 53 1 98.11% dev.c:fido_dev_set_flags 1 0 100.00% 5 0 100.00% @@ -418,7 +422,7 @@ dev.c:fido_dev_set_extension_flags 7 0 100.00% 7 dev.c:fido_dev_set_option_flags 31 0 100.00% 20 0 100.00% dev.c:fido_dev_set_protocol_flags 11 0 100.00% 17 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 332 71 78.61% 378 86 77.25% +TOTAL 332 65 80.42% 378 80 78.84% File '/libfido2/src/ecdh.c': Name Regions Miss Cover Lines Miss Cover @@ -478,10 +482,31 @@ es256.c:decode_coord 8 0 100.00% 10 ------------------------------------------------------------------------------------------------------------------- TOTAL 315 7 97.78% 372 12 96.77% +File '/libfido2/src/es384.c': +Name Regions Miss Cover Lines Miss Cover +------------------------------------------------------------------------------------------------------------------- +es384_pk_decode 8 0 100.00% 9 0 100.00% +es384_pk_new 1 0 100.00% 3 0 100.00% +es384_pk_free 6 0 100.00% 7 0 100.00% +es384_pk_from_ptr 15 0 100.00% 17 0 100.00% +es384_pk_to_EVP_PKEY 42 0 100.00% 53 0 100.00% +es384_pk_from_EC_KEY 42 2 95.24% 47 4 91.49% +es384_pk_from_EVP_PKEY 8 2 75.00% 7 1 85.71% +es384_verify_sig 12 2 83.33% 19 5 73.68% +es384_pk_verify_sig 7 1 85.71% 13 2 84.62% +es384.c:decode_pubkey_point 9 0 100.00% 13 0 100.00% +es384.c:decode_coord 8 1 87.50% 10 3 70.00% +------------------------------------------------------------------------------------------------------------------- +TOTAL 158 8 94.94% 198 15 92.42% + File '/libfido2/src/extern.h': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- +File '/libfido2/src/fallthrough.h': +Name Regions Miss Cover Lines Miss Cover +------------------------------------------------------------------------------------------------------------------- + File '/libfido2/src/fido.h': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- @@ -510,7 +535,7 @@ File '/libfido2/src/hid_linux.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- fido_hid_manifest 35 4 88.57% 41 2 95.12% -fido_hid_open 27 27 0.00% 40 40 0.00% +fido_hid_open 33 33 0.00% 51 51 0.00% fido_hid_close 3 3 0.00% 6 6 0.00% fido_hid_set_sigmask 2 2 0.00% 6 6 0.00% fido_hid_read 15 15 0.00% 21 21 0.00% @@ -518,13 +543,13 @@ fido_hid_write 12 12 0.00% 17 1 fido_hid_report_in_len 1 1 0.00% 4 4 0.00% fido_hid_report_out_len 1 1 0.00% 4 4 0.00% hid_linux.c:copy_info 34 0 100.00% 44 0 100.00% -hid_linux.c:is_fido 10 2 80.00% 14 2 85.71% +hid_linux.c:is_fido 15 1 93.33% 16 1 93.75% hid_linux.c:get_parent_attr 6 0 100.00% 9 0 100.00% hid_linux.c:parse_uevent 12 0 100.00% 24 0 100.00% hid_linux.c:get_usb_attr 1 0 100.00% 3 0 100.00% hid_linux.c:get_report_descriptor 14 1 92.86% 17 3 82.35% ------------------------------------------------------------------------------------------------------------------- -TOTAL 173 68 60.69% 250 105 58.00% +TOTAL 184 73 60.33% 263 115 56.27% File '/libfido2/src/hid_unix.c': Name Regions Miss Cover Lines Miss Cover @@ -539,8 +564,8 @@ Name Regions Miss Cover Lines Mis ------------------------------------------------------------------------------------------------------------------- fido_dev_get_cbor_info_wait 10 0 100.00% 7 0 100.00% fido_dev_get_cbor_info 1 0 100.00% 4 0 100.00% -fido_cbor_info_new 1 0 100.00% 3 0 100.00% -fido_cbor_info_reset 1 0 100.00% 8 0 100.00% +fido_cbor_info_new 4 0 100.00% 7 0 100.00% +fido_cbor_info_reset 1 0 100.00% 10 0 100.00% fido_cbor_info_free 6 0 100.00% 8 0 100.00% fido_cbor_info_versions_ptr 1 0 100.00% 3 0 100.00% fido_cbor_info_versions_len 1 0 100.00% 3 0 100.00% @@ -559,33 +584,44 @@ fido_cbor_info_maxcredcntlst 1 0 100.00% 3 fido_cbor_info_maxcredidlen 1 0 100.00% 3 0 100.00% fido_cbor_info_maxlargeblob 1 0 100.00% 3 0 100.00% fido_cbor_info_fwversion 1 0 100.00% 3 0 100.00% +fido_cbor_info_minpinlen 1 0 100.00% 3 0 100.00% +fido_cbor_info_maxrpid_minpinlen 1 0 100.00% 3 0 100.00% +fido_cbor_info_uv_attempts 1 0 100.00% 3 0 100.00% +fido_cbor_info_uv_modality 1 0 100.00% 3 0 100.00% +fido_cbor_info_rk_remaining 1 0 100.00% 3 0 100.00% fido_cbor_info_protocols_ptr 1 0 100.00% 3 0 100.00% fido_cbor_info_protocols_len 1 0 100.00% 3 0 100.00% fido_cbor_info_algorithm_count 1 0 100.00% 3 0 100.00% fido_cbor_info_algorithm_type 4 0 100.00% 5 0 100.00% fido_cbor_info_algorithm_cose 4 0 100.00% 5 0 100.00% +fido_cbor_info_new_pin_required 1 0 100.00% 3 0 100.00% +fido_cbor_info_certs_name_ptr 1 0 100.00% 3 0 100.00% +fido_cbor_info_certs_value_ptr 1 0 100.00% 3 0 100.00% +fido_cbor_info_certs_len 1 0 100.00% 3 0 100.00% info.c:fido_dev_get_cbor_info_tx 8 0 100.00% 9 0 100.00% -info.c:fido_dev_get_cbor_info_rx 6 0 100.00% 14 0 100.00% -info.c:parse_reply_element 20 0 100.00% 39 0 100.00% +info.c:fido_dev_get_cbor_info_rx 14 0 100.00% 21 0 100.00% +info.c:parse_reply_element 32 0 100.00% 59 0 100.00% info.c:decode_string_array 12 0 100.00% 17 0 100.00% info.c:decode_string 4 0 100.00% 10 0 100.00% info.c:decode_aaguid 8 0 100.00% 10 0 100.00% info.c:decode_options 11 0 100.00% 15 0 100.00% -info.c:decode_option 11 0 100.00% 17 0 100.00% +info.c:decode_option 7 0 100.00% 15 0 100.00% info.c:decode_protocols 12 0 100.00% 17 0 100.00% info.c:decode_protocol 6 0 100.00% 12 0 100.00% info.c:decode_algorithms 12 0 100.00% 17 0 100.00% info.c:decode_algorithm 9 0 100.00% 17 0 100.00% info.c:decode_algorithm_entry 20 0 100.00% 27 0 100.00% +info.c:decode_certs 11 0 100.00% 15 0 100.00% +info.c:decode_cert 7 0 100.00% 15 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 186 0 100.00% 321 0 100.00% +TOTAL 232 0 100.00% 409 0 100.00% File '/libfido2/src/io.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- fido_tx 14 0 100.00% 11 0 100.00% fido_rx 13 1 92.31% 14 3 78.57% -fido_rx_cbor_status 8 0 100.00% 10 0 100.00% +fido_rx_cbor_status 16 0 100.00% 19 0 100.00% io.c:transport_tx 7 0 100.00% 10 0 100.00% io.c:tx_empty 9 0 100.00% 14 0 100.00% io.c:tx_pkt 7 0 100.00% 10 0 100.00% @@ -597,7 +633,7 @@ io.c:rx 40 2 95.00% 52 io.c:rx_preamble 23 2 91.30% 22 5 77.27% io.c:rx_frame 11 0 100.00% 11 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 185 7 96.22% 221 12 94.57% +TOTAL 193 7 96.37% 230 12 94.78% File '/libfido2/src/iso7816.c': Name Regions Miss Cover Lines Miss Cover @@ -621,7 +657,7 @@ fido_dev_largeblob_set_array 14 0 100.00% 19 largeblob.c:largeblob_get_array 32 0 100.00% 36 0 100.00% largeblob.c:get_chunklen 10 1 90.00% 9 1 88.89% largeblob.c:largeblob_get_tx 19 0 100.00% 24 0 100.00% -largeblob.c:largeblob_get_rx 15 0 100.00% 21 0 100.00% +largeblob.c:largeblob_get_rx 26 0 100.00% 30 0 100.00% largeblob.c:parse_largeblob_reply 8 0 100.00% 9 0 100.00% largeblob.c:largeblob_array_check 7 0 100.00% 16 0 100.00% largeblob.c:largeblob_array_digest 10 0 100.00% 9 0 100.00% @@ -635,7 +671,7 @@ largeblob.c:largeblob_reset 1 0 100.00% 5 largeblob.c:largeblob_encode 16 0 100.00% 21 0 100.00% largeblob.c:largeblob_new 1 0 100.00% 3 0 100.00% largeblob.c:largeblob_seal 20 0 100.00% 32 0 100.00% -largeblob.c:largeblob_get_nonce 8 1 87.50% 16 3 81.25% +largeblob.c:largeblob_get_nonce 8 0 100.00% 16 0 100.00% largeblob.c:largeblob_free 6 0 100.00% 8 0 100.00% largeblob.c:largeblob_add 27 2 92.59% 35 3 91.43% largeblob.c:largeblob_drop 21 0 100.00% 27 0 100.00% @@ -644,7 +680,7 @@ largeblob.c:largeblob_get_uv_token 19 0 100.00% 23 largeblob.c:largeblob_set_tx 35 0 100.00% 36 0 100.00% largeblob.c:prepare_hmac 13 2 84.62% 23 7 69.57% ------------------------------------------------------------------------------------------------------------------- -TOTAL 514 19 96.30% 684 46 93.27% +TOTAL 525 18 96.57% 693 43 93.80% File '/libfido2/src/log.c': Name Regions Miss Cover Lines Miss Cover @@ -662,8 +698,8 @@ TOTAL 39 5 87.18% 63 File '/libfido2/src/netlink.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- -fido_nl_power_nfc 18 1 94.44% 24 3 87.50% -fido_nl_get_nfc_target 17 1 94.12% 31 3 90.32% +fido_nl_power_nfc 18 0 100.00% 24 0 100.00% +fido_nl_get_nfc_target 17 0 100.00% 31 0 100.00% fido_nl_free 10 2 80.00% 9 2 77.78% fido_nl_new 16 1 93.75% 26 3 88.46% set_netlink_io_functions 1 0 100.00% 4 0 100.00% @@ -675,7 +711,7 @@ netlink.c:nlmsg_setattr 15 1 93.33% 17 netlink.c:nlmsg_tx 10 1 90.00% 13 3 76.92% netlink.c:nlmsg_ptr 1 0 100.00% 3 0 100.00% netlink.c:nlmsg_len 1 0 100.00% 3 0 100.00% -netlink.c:nlmsg_rx 11 3 72.73% 17 9 47.06% +netlink.c:nlmsg_rx 11 2 81.82% 17 6 64.71% netlink.c:nl_parse_reply 20 0 100.00% 28 0 100.00% netlink.c:nlmsg_from_buf 15 0 100.00% 17 0 100.00% netlink.c:nlmsg_type 1 0 100.00% 3 0 100.00% @@ -685,14 +721,14 @@ netlink.c:nlmsg_get_genl 6 0 100.00% 7 netlink.c:nlmsg_iter 6 0 100.00% 13 0 100.00% netlink.c:nlmsg_getattr 1 0 100.00% 3 0 100.00% netlink.c:nla_from_buf 17 0 100.00% 21 0 100.00% -netlink.c:nl_nfc_poll 18 1 94.44% 25 3 88.00% +netlink.c:nl_nfc_poll 18 0 100.00% 25 0 100.00% netlink.c:parse_nfc_event 10 0 100.00% 17 0 100.00% netlink.c:nla_type 1 0 100.00% 3 0 100.00% netlink.c:nla_get_u32 1 0 100.00% 3 0 100.00% netlink.c:nla_read 6 0 100.00% 7 0 100.00% -netlink.c:nl_dump_nfc_target 19 1 94.74% 31 3 90.32% +netlink.c:nl_dump_nfc_target 19 0 100.00% 31 0 100.00% netlink.c:parse_target 9 0 100.00% 13 0 100.00% -netlink.c:nl_get_nfc_family 23 1 95.65% 33 3 90.91% +netlink.c:nl_get_nfc_family 23 0 100.00% 33 0 100.00% netlink.c:nlmsg_set_u16 1 0 100.00% 3 0 100.00% netlink.c:nlmsg_set_str 1 0 100.00% 3 0 100.00% netlink.c:parse_family 10 0 100.00% 17 0 100.00% @@ -703,15 +739,16 @@ netlink.c:parse_mcastgrps 1 0 100.00% 3 netlink.c:parse_mcastgrp 15 0 100.00% 24 0 100.00% netlink.c:nla_get_str 10 0 100.00% 11 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 329 14 95.74% 498 33 93.37% +TOTAL 329 8 97.57% 498 15 96.99% File '/libfido2/src/nfc.c': Name Regions Miss Cover Lines Miss Cover ------------------------------------------------------------------------------------------------------------------- fido_nfc_tx 28 0 100.00% 43 0 100.00% fido_nfc_rx 8 0 100.00% 13 0 100.00% +nfc_is_fido 13 1 92.31% 21 3 85.71% fido_is_nfc 3 0 100.00% 3 0 100.00% -fido_dev_set_nfc 4 4 0.00% 18 18 0.00% +fido_dev_set_nfc 4 1 75.00% 18 3 83.33% nfc.c:nfc_do_tx 20 0 100.00% 25 0 100.00% nfc.c:tx_short_apdu 14 0 100.00% 32 0 100.00% nfc.c:rx_init 25 0 100.00% 27 0 100.00% @@ -720,7 +757,7 @@ nfc.c:rx_msg 18 2 88.89% 23 nfc.c:rx_apdu 14 1 92.86% 22 3 86.36% nfc.c:tx_get_response 4 0 100.00% 11 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 142 7 95.07% 223 27 87.89% +TOTAL 155 5 96.77% 244 15 93.85% File '/libfido2/src/nfc_linux.c': Name Regions Miss Cover Lines Miss Cover @@ -731,15 +768,15 @@ fido_nfc_close 1 1 0.00% 4 fido_nfc_set_sigmask 2 2 0.00% 6 6 0.00% fido_nfc_read 14 14 0.00% 30 30 0.00% fido_nfc_write 12 12 0.00% 18 18 0.00% -nfc_linux.c:copy_info 41 8 80.49% 47 5 89.36% -nfc_linux.c:get_usb_attr 1 0 100.00% 3 0 100.00% -nfc_linux.c:get_parent_attr 6 0 100.00% 9 0 100.00% +nfc_linux.c:copy_info 39 22 43.59% 44 16 63.64% +nfc_linux.c:get_usb_attr 1 1 0.00% 3 3 0.00% +nfc_linux.c:get_parent_attr 6 6 0.00% 9 9 0.00% nfc_linux.c:sysnum_from_syspath 15 0 100.00% 17 0 100.00% nfc_linux.c:nfc_new 6 0 100.00% 11 0 100.00% nfc_linux.c:nfc_target_connect 9 9 0.00% 21 21 0.00% nfc_linux.c:nfc_free 12 0 100.00% 11 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 174 56 67.82% 245 103 57.96% +TOTAL 172 77 55.23% 242 126 47.93% File '/libfido2/src/pcsc.c': Name Regions Miss Cover Lines Miss Cover @@ -754,11 +791,11 @@ fido_pcsc_rx 1 0 100.00% 3 fido_is_pcsc 3 0 100.00% 3 0 100.00% fido_dev_set_pcsc 4 1 75.00% 18 3 83.33% pcsc.c:list_readers 24 0 100.00% 24 0 100.00% -pcsc.c:copy_info 27 0 100.00% 37 0 100.00% +pcsc.c:copy_info 30 0 100.00% 41 0 100.00% pcsc.c:get_reader 25 0 100.00% 28 0 100.00% pcsc.c:prepare_io_request 11 0 100.00% 17 0 100.00% ------------------------------------------------------------------------------------------------------------------- -TOTAL 201 1 99.50% 278 3 98.92% +TOTAL 204 1 99.51% 282 3 98.94% File '/libfido2/src/pin.c': Name Regions Miss Cover Lines Miss Cover @@ -774,30 +811,30 @@ pin.c:ctap21_uv_token_tx 49 0 100.00% 53 pin.c:pin_sha256_enc 19 0 100.00% 24 0 100.00% pin.c:encode_uv_permission 20 1 95.00% 19 3 84.21% pin.c:ctap20_uv_token_tx 37 0 100.00% 45 0 100.00% -pin.c:uv_token_rx 20 0 100.00% 30 0 100.00% +pin.c:uv_token_rx 27 0 100.00% 34 0 100.00% pin.c:parse_uv_token 8 0 100.00% 10 0 100.00% pin.c:fido_dev_set_pin_wait 21 0 100.00% 24 0 100.00% pin.c:fido_dev_change_pin_tx 45 0 100.00% 56 0 100.00% pin.c:pin_pad64_enc 15 0 100.00% 21 0 100.00% -pin.c:pad64 18 0 100.00% 19 0 100.00% +pin.c:pad64 18 0 100.00% 20 0 100.00% pin.c:fido_dev_set_pin_tx 33 0 100.00% 41 0 100.00% pin.c:fido_dev_get_pin_retry_count_wait 10 0 100.00% 7 0 100.00% pin.c:fido_dev_get_retry_count_tx 19 0 100.00% 23 0 100.00% -pin.c:fido_dev_get_pin_retry_count_rx 11 0 100.00% 17 0 100.00% +pin.c:fido_dev_get_pin_retry_count_rx 19 0 100.00% 24 0 100.00% pin.c:parse_pin_retry_count 1 0 100.00% 3 0 100.00% pin.c:parse_retry_count 13 0 100.00% 16 0 100.00% pin.c:fido_dev_get_uv_retry_count_wait 10 0 100.00% 7 0 100.00% -pin.c:fido_dev_get_uv_retry_count_rx 11 0 100.00% 17 0 100.00% +pin.c:fido_dev_get_uv_retry_count_rx 19 0 100.00% 24 0 100.00% pin.c:parse_uv_retry_count 1 0 100.00% 3 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 403 3 99.26% 495 4 99.19% +TOTAL 426 3 99.30% 514 4 99.22% File '/libfido2/src/random.c': Name Regions Miss Cover Lines Miss Cover --------------------------------------------------------------------------------------------------------------------- -fido_get_random 6 1 83.33% 6 1 83.33% +fido_get_random 6 0 100.00% 6 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 6 1 83.33% 6 1 83.33% +TOTAL 6 0 100.00% 6 0 100.00% File '/libfido2/src/reset.c': Name Regions Miss Cover Lines Miss Cover @@ -812,10 +849,10 @@ File '/libfido2/src/rs1.c': Name Regions Miss Cover Lines Miss Cover --------------------------------------------------------------------------------------------------------------------- rs1_verify_sig 20 1 95.00% 30 3 90.00% -rs1.c:rs1_get_EVP_MD 4 1 75.00% 6 1 83.33% +rs1.c:rs1_get_EVP_MD 4 0 100.00% 6 0 100.00% rs1.c:rs1_free_EVP_MD 1 0 100.00% 3 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 25 2 92.00% 39 4 89.74% +TOTAL 25 1 96.00% 39 3 92.31% File '/libfido2/src/rs256.c': Name Regions Miss Cover Lines Miss Cover @@ -823,10 +860,10 @@ Name Regions Miss Cover Lines M rs256_pk_decode 8 0 100.00% 9 0 100.00% rs256_pk_new 1 0 100.00% 3 0 100.00% rs256_pk_free 6 0 100.00% 7 0 100.00% -rs256_pk_from_ptr 6 0 100.00% 6 0 100.00% -rs256_pk_to_EVP_PKEY 32 0 100.00% 39 0 100.00% -rs256_pk_from_RSA 32 4 87.50% 26 6 76.92% -rs256_pk_from_EVP_PKEY 7 2 71.43% 7 1 85.71% +rs256_pk_from_ptr 10 0 100.00% 12 0 100.00% +rs256_pk_to_EVP_PKEY 35 0 100.00% 43 0 100.00% +rs256_pk_from_RSA 32 6 81.25% 26 9 65.38% +rs256_pk_from_EVP_PKEY 8 2 75.00% 7 1 85.71% rs256_verify_sig 20 1 95.00% 30 2 93.33% rs256_pk_verify_sig 7 1 85.71% 13 2 84.62% rs256.c:decode_rsa_pubkey 9 0 100.00% 13 0 100.00% @@ -834,7 +871,7 @@ rs256.c:decode_bignum 8 0 100.00% 10 rs256.c:rs256_get_EVP_MD 4 0 100.00% 6 0 100.00% rs256.c:rs256_free_EVP_MD 1 0 100.00% 3 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 141 8 94.33% 172 11 93.60% +TOTAL 149 10 93.29% 182 14 92.31% File '/libfido2/src/time.c': Name Regions Miss Cover Lines Miss Cover @@ -856,39 +893,40 @@ TOTAL 67 0 100.00% 79 File '/libfido2/src/tpm.c': Name Regions Miss Cover Lines Miss Cover --------------------------------------------------------------------------------------------------------------------- -fido_get_signed_hash_tpm 25 1 96.00% 39 3 92.31% -tpm.c:check_es256_pubarea 19 1 94.74% 30 3 90.00% +fido_get_signed_hash_tpm 25 0 100.00% 39 0 100.00% +tpm.c:check_es256_pubarea 19 0 100.00% 30 0 100.00% tpm.c:bswap_es256_pubarea 1 0 100.00% 12 0 100.00% -tpm.c:check_rs256_pubarea 17 1 94.12% 28 3 89.29% +tpm.c:check_rs256_pubarea 17 0 100.00% 28 0 100.00% tpm.c:bswap_rs256_pubarea 1 0 100.00% 10 0 100.00% tpm.c:check_sha1_certinfo 15 0 100.00% 38 0 100.00% tpm.c:get_signed_sha1 17 0 100.00% 19 0 100.00% tpm.c:get_signed_name 7 0 100.00% 10 0 100.00% tpm.c:bswap_sha1_certinfo 1 0 100.00% 8 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 103 3 97.09% 194 9 95.36% +TOTAL 103 0 100.00% 194 0 100.00% File '/libfido2/src/types.c': Name Regions Miss Cover Lines Miss Cover --------------------------------------------------------------------------------------------------------------------- fido_str_array_free 4 0 100.00% 7 0 100.00% -fido_opt_array_free 4 0 100.00% 8 0 100.00% +fido_opt_array_free 4 0 100.00% 9 0 100.00% fido_byte_array_free 1 0 100.00% 5 0 100.00% fido_algo_free 1 0 100.00% 5 0 100.00% fido_algo_array_free 4 0 100.00% 7 0 100.00% +fido_cert_array_free 4 0 100.00% 9 0 100.00% fido_str_array_pack 11 0 100.00% 14 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 25 0 100.00% 46 0 100.00% +TOTAL 29 0 100.00% 56 0 100.00% File '/libfido2/src/u2f.c': Name Regions Miss Cover Lines Miss Cover --------------------------------------------------------------------------------------------------------------------- -u2f_register 69 0 100.00% 75 0 100.00% -u2f_authenticate 32 0 100.00% 36 0 100.00% -u2f_get_touch_begin 30 0 100.00% 39 0 100.00% -u2f_get_touch_status 18 0 100.00% 26 0 100.00% -u2f.c:key_lookup 44 0 100.00% 59 0 100.00% -u2f.c:send_dummy_register 30 0 100.00% 39 0 100.00% +u2f_register 76 0 100.00% 81 0 100.00% +u2f_authenticate 33 0 100.00% 37 0 100.00% +u2f_get_touch_begin 37 0 100.00% 45 0 100.00% +u2f_get_touch_status 26 0 100.00% 36 0 100.00% +u2f.c:key_lookup 51 0 100.00% 65 0 100.00% +u2f.c:send_dummy_register 37 0 100.00% 45 0 100.00% u2f.c:delay_ms 13 1 92.31% 15 3 80.00% u2f.c:parse_register_reply 49 0 100.00% 62 0 100.00% u2f.c:x5c_get 21 1 95.24% 26 3 88.46% @@ -897,11 +935,11 @@ u2f.c:encode_cred_attstmt 45 0 100.00% 52 u2f.c:encode_cred_authdata 33 2 93.94% 61 6 90.16% u2f.c:cbor_blob_from_ec_point 22 0 100.00% 31 0 100.00% u2f.c:u2f_authenticate_single 32 0 100.00% 43 0 100.00% -u2f.c:do_auth 49 0 100.00% 61 0 100.00% +u2f.c:do_auth 56 0 100.00% 67 0 100.00% u2f.c:parse_auth_reply 23 0 100.00% 23 0 100.00% u2f.c:authdata_fake 12 0 100.00% 27 0 100.00% --------------------------------------------------------------------------------------------------------------------- -TOTAL 528 4 99.24% 685 12 98.25% +TOTAL 572 4 99.30% 726 12 98.35% File '/libfido2/src/util.c': Name Regions Miss Cover Lines Miss Cover diff --git a/fuzz/fuzz_assert.c b/fuzz/fuzz_assert.c index 4331148b5e0..603957ec2ba 100644 --- a/fuzz/fuzz_assert.c +++ b/fuzz/fuzz_assert.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -163,7 +164,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); @@ -313,6 +314,27 @@ out: EVP_PKEY_free(pkey); } +/* + * Do a dummy conversion to exercise es384_pk_from_EVP_PKEY(). + */ +static void +es384_convert(const es384_pk_t *k) +{ + EVP_PKEY *pkey = NULL; + es384_pk_t *pk = NULL; + int r; + + if ((pkey = es384_pk_to_EVP_PKEY(k)) == NULL || + (pk = es384_pk_new()) == NULL) + goto out; + + r = es384_pk_from_EVP_PKEY(pk, pkey); + consume(&r, sizeof(r)); +out: + es384_pk_free(&pk); + EVP_PKEY_free(pkey); +} + /* * Do a dummy conversion to exercise rs256_pk_from_EVP_PKEY(). */ @@ -362,6 +384,7 @@ test(const struct param *p) { fido_assert_t *assert = NULL; es256_pk_t *es256_pk = NULL; + es384_pk_t *es384_pk = NULL; rs256_pk_t *rs256_pk = NULL; eddsa_pk_t *eddsa_pk = NULL; uint8_t flags; @@ -398,6 +421,19 @@ test(const struct param *p) rs256_convert(pk); + break; + case 2: + cose_alg = COSE_ES384; + + if ((es384_pk = es384_pk_new()) == NULL) + return; + + /* XXX reuse p->es256 as es384 */ + es384_pk_from_ptr(es384_pk, p->es256.body, p->es256.len); + pk = es384_pk; + + es384_convert(pk); + break; default: cose_alg = COSE_EDDSA; @@ -452,6 +488,7 @@ test(const struct param *p) out: es256_pk_free(&es256_pk); + es384_pk_free(&es384_pk); rs256_pk_free(&rs256_pk); eddsa_pk_free(&eddsa_pk); diff --git a/fuzz/fuzz_bio.c b/fuzz/fuzz_bio.c index 49a50932a54..6ebfd151a3d 100644 --- a/fuzz/fuzz_bio.c +++ b/fuzz/fuzz_bio.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -177,7 +178,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); diff --git a/fuzz/fuzz_cred.c b/fuzz/fuzz_cred.c index d7b63022405..a0866dc6e13 100644 --- a/fuzz/fuzz_cred.c +++ b/fuzz/fuzz_cred.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019-2021 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -173,7 +174,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); @@ -361,6 +362,9 @@ test_cred(const struct param *p) case 1: cose_alg = COSE_RS256; break; + case 2: + cose_alg = COSE_ES384; + break; default: cose_alg = COSE_EDDSA; break; diff --git a/fuzz/fuzz_credman.c b/fuzz/fuzz_credman.c index fb34f22f814..1cb95dce3fa 100644 --- a/fuzz/fuzz_credman.c +++ b/fuzz/fuzz_credman.c @@ -2,6 +2,7 @@ * Copyright (c) 2019-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -164,7 +165,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); diff --git a/fuzz/fuzz_hid.c b/fuzz/fuzz_hid.c index eaf00dc92de..27ccb2feadf 100644 --- a/fuzz/fuzz_hid.c +++ b/fuzz/fuzz_hid.c @@ -2,6 +2,7 @@ * Copyright (c) 2020-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -127,7 +128,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); diff --git a/fuzz/fuzz_largeblob.c b/fuzz/fuzz_largeblob.c index 3289ed46e2a..432629681e5 100644 --- a/fuzz/fuzz_largeblob.c +++ b/fuzz/fuzz_largeblob.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -141,7 +142,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); diff --git a/fuzz/fuzz_mgmt.c b/fuzz/fuzz_mgmt.c index 41077e23766..6a5e7b66795 100644 --- a/fuzz/fuzz_mgmt.c +++ b/fuzz/fuzz_mgmt.c @@ -2,6 +2,7 @@ * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -161,7 +162,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); @@ -223,6 +224,7 @@ dev_get_cbor_info(const struct param *p) fido_cbor_info_t *ci; uint64_t n; uint8_t proto, major, minor, build, flags; + bool v; set_wire_data(p->info_wire_data.body, p->info_wire_data.len); @@ -276,28 +278,43 @@ dev_get_cbor_info(const struct param *p) consume(&cose, sizeof(cose)); } + for (size_t i = 0; i < fido_cbor_info_certs_len(ci); i++) { + char * const *na = fido_cbor_info_certs_name_ptr(ci); + const uint64_t *va = fido_cbor_info_certs_value_ptr(ci); + consume(na[i], strlen(na[i])); + consume(&va[i], sizeof(va[i])); + } + n = fido_cbor_info_maxmsgsiz(ci); consume(&n, sizeof(n)); - n = fido_cbor_info_maxcredbloblen(ci); consume(&n, sizeof(n)); - n = fido_cbor_info_maxcredcntlst(ci); consume(&n, sizeof(n)); - n = fido_cbor_info_maxcredidlen(ci); consume(&n, sizeof(n)); - n = fido_cbor_info_maxlargeblob(ci); consume(&n, sizeof(n)); - n = fido_cbor_info_fwversion(ci); consume(&n, sizeof(n)); + n = fido_cbor_info_minpinlen(ci); + consume(&n, sizeof(n)); + n = fido_cbor_info_maxrpid_minpinlen(ci); + consume(&n, sizeof(n)); + n = fido_cbor_info_uv_attempts(ci); + consume(&n, sizeof(n)); + n = fido_cbor_info_uv_modality(ci); + consume(&n, sizeof(n)); + n = (uint64_t)fido_cbor_info_rk_remaining(ci); + consume(&n, sizeof(n)); consume(fido_cbor_info_aaguid_ptr(ci), fido_cbor_info_aaguid_len(ci)); consume(fido_cbor_info_protocols_ptr(ci), fido_cbor_info_protocols_len(ci)); + v = fido_cbor_info_new_pin_required(ci); + consume(&v, sizeof(v)); + out: fido_dev_close(dev); fido_dev_free(&dev); diff --git a/fuzz/fuzz_netlink.c b/fuzz/fuzz_netlink.c index 2447215a247..2fa897e46fe 100644 --- a/fuzz/fuzz_netlink.c +++ b/fuzz/fuzz_netlink.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -98,7 +99,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); diff --git a/fuzz/fuzz_pcsc.c b/fuzz/fuzz_pcsc.c index 4a066ec32e1..f0f6ccaad13 100644 --- a/fuzz/fuzz_pcsc.c +++ b/fuzz/fuzz_pcsc.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #define _FIDO_INTERNAL @@ -116,7 +117,7 @@ size_t pack_dummy(uint8_t *ptr, size_t len) { struct param dummy; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&dummy, 0, sizeof(dummy)); @@ -231,7 +232,9 @@ test(const struct param *p) set_pcsc_parameters(&p->pcsc_list); set_pcsc_io_functions(nfc_read, nfc_write, consume); + set_wire_data(p->wiredata_init.body, p->wiredata_init.len); test_manifest(); + test_misc(); set_wire_data(p->wiredata_init.body, p->wiredata_init.len); diff --git a/fuzz/libfuzzer.c b/fuzz/libfuzzer.c index 09aec4ea2b6..073ebe655cf 100644 --- a/fuzz/libfuzzer.c +++ b/fuzz/libfuzzer.c @@ -1,9 +1,12 @@ /* - * Copyright (c) 2019 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ +#include + #include #include #include @@ -15,6 +18,8 @@ #include "mutator_aux.h" +extern int fuzz_save_corpus; + static bool debug; static unsigned int flags = MUTATE_ALL; static unsigned long long test_fail; @@ -32,7 +37,7 @@ save_seed(const char *opt) const char *path; int fd = -1, status = 1; void *buf = NULL; - const size_t buflen = 4096; + const size_t buflen = MAXCORPUS; size_t n; struct param *p = NULL; @@ -73,6 +78,50 @@ fail: return status; } +static int +save_corpus(const struct param *p) +{ + uint8_t blob[MAXCORPUS], dgst[SHA256_DIGEST_LENGTH]; + size_t blob_len; + char path[PATH_MAX]; + int r, fd; + + if ((blob_len = pack(blob, sizeof(blob), p)) == 0 || + blob_len > sizeof(blob)) { + warnx("pack"); + return -1; + } + + if (SHA256(blob, blob_len, dgst) != dgst) { + warnx("sha256"); + return -1; + } + + if ((r = snprintf(path, sizeof(path), "saved_corpus_%02x%02x%02x%02x" + "%02x%02x%02x%02x", dgst[0], dgst[1], dgst[2], dgst[3], dgst[4], + dgst[5], dgst[6], dgst[7])) < 0 || (size_t)r >= sizeof(path)) { + warnx("snprintf"); + return -1; + } + + if ((fd = open(path, O_CREAT|O_TRUNC|O_WRONLY, 0644)) == -1) { + warn("open %s", path); + return -1; + } + + if (write(fd, blob, blob_len) != (ssize_t)blob_len) { + warn("write"); + r = -1; + } else { + warnx("wrote %s", path); + r = 0; + } + + close(fd); + + return r; +} + static void parse_mutate_flags(const char *opt, unsigned int *mutate_flags) { @@ -116,7 +165,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { struct param *p; - if (size > 4096) + if (size > MAXCORPUS) return 0; if (++test_total % 100000 == 0 && debug) { @@ -128,7 +177,11 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) if ((p = unpack(data, size)) == NULL) test_fail++; else { + fuzz_save_corpus = 0; test(p); + if (fuzz_save_corpus && save_corpus(p) < 0) + fprintf(stderr, "%s: failed to save corpus\n", + __func__); free(p); } @@ -140,7 +193,7 @@ LLVMFuzzerCustomMutator(uint8_t *data, size_t size, size_t maxsize, unsigned int seed) NO_MSAN { struct param *p; - uint8_t blob[4096]; + uint8_t blob[MAXCORPUS]; size_t blob_len; memset(&p, 0, sizeof(p)); diff --git a/fuzz/mutator_aux.c b/fuzz/mutator_aux.c index 660fbe4e67e..64c633f15f9 100644 --- a/fuzz/mutator_aux.c +++ b/fuzz/mutator_aux.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -19,6 +20,7 @@ int fido_nfc_rx(fido_dev_t *, uint8_t, unsigned char *, size_t, int); int fido_nfc_tx(fido_dev_t *, uint8_t, const unsigned char *, size_t); size_t LLVMFuzzerMutate(uint8_t *, size_t, size_t); +extern int prng_up; static const uint8_t *wire_data_ptr = NULL; static size_t wire_data_len = 0; @@ -157,7 +159,6 @@ mutate_string(char *s) s[n] = '\0'; } -/* XXX should fail, but doesn't */ static int buf_read(unsigned char *ptr, size_t len, int ms) { @@ -165,6 +166,11 @@ buf_read(unsigned char *ptr, size_t len, int ms) (void)ms; + if (prng_up && uniform_random(400) < 1) { + errno = EIO; + return -1; + } + if (wire_data_len < len) n = wire_data_len; else @@ -183,7 +189,7 @@ buf_write(const unsigned char *ptr, size_t len) { consume(ptr, len); - if (uniform_random(400) < 1) { + if (prng_up && uniform_random(400) < 1) { errno = EIO; return -1; } diff --git a/fuzz/mutator_aux.h b/fuzz/mutator_aux.h index 730f58635b1..5ad566140a8 100644 --- a/fuzz/mutator_aux.h +++ b/fuzz/mutator_aux.h @@ -2,11 +2,14 @@ * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _MUTATOR_AUX_H #define _MUTATOR_AUX_H +#include + #include #include #include @@ -17,7 +20,7 @@ #include "../src/fido/credman.h" #include "../src/fido/eddsa.h" #include "../src/fido/es256.h" -#include "../src/fido/es256.h" +#include "../src/fido/es384.h" #include "../src/fido/rs256.h" #include "../src/netlink.h" @@ -48,8 +51,9 @@ #define MUTATE_WIREDATA 0x04 #define MUTATE_ALL (MUTATE_SEED | MUTATE_PARAM | MUTATE_WIREDATA) -#define MAXSTR 1024 -#define MAXBLOB 3600 +#define MAXSTR 1024 +#define MAXBLOB 3600 +#define MAXCORPUS 8192 #define HID_DEV_HANDLE 0x68696421 #define NFC_DEV_HANDLE 0x6e666321 diff --git a/fuzz/pcsc.c b/fuzz/pcsc.c index f8400a5e766..f6a3e9bdd77 100644 --- a/fuzz/pcsc.c +++ b/fuzz/pcsc.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/fuzz/preload-fuzz.c b/fuzz/preload-fuzz.c index efcb8c63260..f18848dda34 100644 --- a/fuzz/preload-fuzz.c +++ b/fuzz/preload-fuzz.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/fuzz/preload-snoop.c b/fuzz/preload-snoop.c index 373acc560a6..34d57ade82f 100644 --- a/fuzz/preload-snoop.c +++ b/fuzz/preload-snoop.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/fuzz/report.tgz b/fuzz/report.tgz index 1b44addb69823f8b265165a0b3c92bc4ebc61283..e984ee9dc7653ddbfe64154abce4412c528ef49f 100644 GIT binary patch literal 357005 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%0D9YDz)=N5Zzq;;nGDiA)!lRB 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 z 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 arKqXC&Htw>yM9Ezwxc7-bmg(am45>Bi@C!9 literal 341098 zcmV)6K*+xziwFP!000001MFRUbKEwP&)@zONV#q$yF7e=Z(CNCVmq5uDbAJcZ1(Ev zYKk+&Xc%+ISw8geZod090D=R~LmGpSCaH*tZ4o4hMg!fy?gr2*$+9SG^PBs;EVu&C zWBN8fsBe4kuIGQ!tK{Qf)i)V2 zrd4$xZO{SsU3b^`yFuWrjXw@N=Nn|*2Qll{Uwr(Hk|gNgPY{~K)6W-W(d5Z!T4Y7} z5MP83)@gmJ`UZPRFTxMic-BdMMyg*f) zSEGuQ>5NucmW0(<#N|brkLqIi5?RY@^liGJvog->SF5L!qOOa@<_kbwRW#+4jPiIv zMs-?e{Hx12Nz(k{CGwz#4b|w!CPkT$viq0~kE$X|6ZABh(Ena-X9XdIKFQLYjOHZ0 znAb0n}qbD=>tH@_u;zaZ3 zKyVf>D*_X%{fYH5qs@=XV!eZGn$qiz_T^6i+1dJ}-}gK1^uB860R0l514Y&>@)690 zl1o8NuIo_@ZRTRo*WOxDvE_^V)W0EF*79TXNl5-R6eQMmCa@3PL4(!tfN6rfSxnlu<;Iz)(AGu0IF8%)E~%av z(aLw%vaHaWF+FKC`PWsQ%^b(#gw{oo)#;LJ#G*=T&=gREWO1EdGX2zPtTd-z-@&$t zLwqhBtmTAEi!$aP%Zr@!+NwY!i5vI;Xve%>BOsoDU^O*s?J7;`IY^t;S3+Ddjl8y0 z5b`~{Uad(4r__!k1B+C*=AiilT_Y z#{31Ux#9sD>U0`sVl<)muVnPcK!4Z+|7{Sn&Kuri3IGE8draAUyiH#Ng~G&H6SC1H zE2f|MJ1=KxS=FQIJQb)Uw(bC8F!6&y~yst#=PDB zcWvz0Yxchb??2lA4{@D*n-tUfW=Rko{L_>6ZxSb`Cks-?h#J+ekEm%$C(4mfXRnW# z4tkxC%M?s+cJm_5LA8M-Rv?b#wSClnVmgn@ia?cLK7Bt5p%f(GGlihnN6hc6=7hkP zDHX4es2rK#h#sMNNoMUE)H8*8CZ~&f8bBjHeM2XDd_m9$HjCjohI04xO-bS!3<`uT zj7OF`!U3|~myQE(xThz}(>GZ<{ftiHwvBmRFJGGGG>h{KBg-xqMp0gvz?jPX$Xtu> z;)*11iiC(3nW#KXDQPMsg)o&(jL= zn#PH_JUvO$O9XUO)$1eSRzSy@l??xs@F(e>uN#v`r{AX;p#yee*2!J3f=$7w5?$J( z&N($czT*84B^`SJw@3Y4cYWrJ{Z zDi=|{10U%(ZX=J`dPlr53cCg%FFJNj_t_qmxwR~6qbM+J7iv4M>3AyjJtK6WK6Xsp zZ(jqameXq5XB00P#HY{<75W*vyteO{!CrjY-nbW;UZkB(B?x|>O{`=Po3M!=VmfVa z+_6o^*3G5{w0)mVykroY?7*}G6-L|){CO9#+=p=EeJ7ivcZH$rSg4u@!0C&sQZs;bLu z8rQq{*gZZ3c6bJ+Mhdn}tQUK`i5__dFPt89qQ&*RgtppbE_@dlUwWLx`t21%yUdn$-s4t z$fJniVbhP4oLg*oR8T!kN$_+ttf}Xp$xWYQqHNFv^GvNS=GTcK$f0gQoTNpMOYB~8 zQh7#%DVc%k?$yi9`poY49ANT(eAn#aNRSlRmFl!7!a}frF^lQ=4k6 zATq~JrswG9Q#0$ciQXR~;NchnRZ`TASF*+e!{gAYTc1xSMcHE!FBqnn zT+>rh#J=J947nlk3pGbnVzj= z{s)Fb!PE(`>4ZAnM#>#IwB6mSO|B3o2UQwiAh~;q5ntrvm4m>*9t%!DFN3}K)T}xMBJ#d1Jm6rz93h|;5bJt7>jj#f^^qYk43!TVGPe5%fA>5qWu;tc1V8+ zs1W+PIkm>8!7Gc7X)8sVTpsAfR%BweH67o;n9W7-{zBc_Jgtf#wEO7Sl^r0mK%EhW zegXI*YW#NHc4vTYdn${|3$hUgl}d;0qX4*9vOyibU&nXA;SE(|U`!K4FlM%HmpLo? zp%`|r>;P`v8nb8Z&{bhJZZKAZNrHQRst1P;1kP^e9-YqDB&3vTeo+>xN>#- zH^7=LmZ(&!V2S#+;knGn*$)@iX;1a1wf1gKNa=;C$j=7&k-%;Jwd-#Cyq_X=w zqW2HMq4jwXwfOF>+e7<@1qF+ByEWxTNUzip(o@yrj^VTVKFF(DNYCXmXFEWG*3FTW zH+8xoJ!bKO1I#J9{zq47Tzk*J%OJEF>%RbDp`#~IvOx2ZSW@Lt7QmgIJ3k-`#Jn8C?_Stl^B>f#7ZOI^B4co)+oBOT! z?U>1)em&mc{$?t6f0$!YAzwfC1IP43RST2tIt8P^!@7f0O`T?aRVhy^dW#}Z&9)V&Z7+5Wn}S#nxQ-cOyhTNu z?a5^`NiU%qJD^;lt9d$|vy(iPt z<%zcQ4gK4Wj62@CUz(Unwu2J>Omq8e9sC-`Ht(91i|(N{`ctnhUT{w>vF#A+t?|P9 zYH=Bt@nW;hws?E1eMz5tr++6oe7^>X1p%c=6<`)zqS1)`OtZGooMp&%4a=}kOsH^T z^281%%RzDI#29~(tIhw?O@{kugXjO;$oqIp{!i?C?qmMXhq%_qzf%Sp+xYtNcOCaJ z|LcQXJI9~dGJ4wh`tkQ1_fh^IxlrqayXu46w(jccLk4Oghkn%axJJ`BM-zf(G!rFC za~7{T|MAVc_aEP}Adcb~cq{t7wq;Kf{iYg4{)!^M{g$tVA~kY?6*)osp+E~cPt#eR zkQo~P^vkESPd|ScpZ)UB@egW5hASe&_Vb}0B7s7hu}}w*(Td2Z{d{!5fwe73v0Fm3 zTbjl;pJolHo4;lCtEx_bi^lwK7xgPeQe_P4Ku8Y?t&^JO^&nCubg~6J*?RD)M=Co= zK7>#SeQW_gwjTUZq)5UNTY!nJ2TfM2`&U!cuc$591zmZOBFz$h*aARoJqWU!W|q5S z7~K-e*aBv3Jveg<-R;@*VWdllWD7{Lbz#zO(%YlY!)TX)$`(jvYl5oXwDWVL!zh=~ z%NFou>%p(vC}&%l22qYBoWla=ux^~Y7s@5r!vglOZrIzPywpIs?4xx~nr;-7DHkUQ zhLJ5{A{Lm44~dCb!bB`E5$nN3W&c~kJS;E|>++h=Sw$V!^YefFglx-z|6ZVE!$7%NJ6js~FtdIt7=UTrWwPE=XR-nW8Uyu^C&5_-kP z=8BHMEQ>EtleZDPv?2*ANu0oN=4e3{MR|jk#j?q|1zj3CLDHdRg^?)gK>?7!z zcEo7ZBrjmH-OwSU6OpDP5?!z7G$(&aF8FFS8^6hKWLhhBOF~*KkQVDfTId#w0v&@8 zwL56yilCdKK?@f30&%(`G{8kB4gDn{lB7XDS&yH+P>gm-IP3@;-RGEcs!oR)p$nYx+%%F zO@I5)Dq*lAFxb)LcOoDb^{71N`g>f(RJnsXP$gSJSVthNqsi?=s29o+q?!x(am;>Y z$}FCeAu$t2f>K97siVpDMC}AY?|&XMWZ~C%9M^T3PMVsG$H&Kc(G9{eH+A{Y@SmSO zQymxyOC5owjwZ*n>)EeAe)?h6H(QZZ2_GGSkB%l!6p=hhXNpT962Q3v;9O0P<`B9h zm~sV7xq4tqks=9@TmeX~F86STz7?vrn{bL^;YuLo3XpR3fYj49c~_)RUV!UX;532O zkVz*2lq&$r)dNt96iL|Q3hZ$;VNW}hY?bKU_~W~GZ<&g-t}R6^=SooH3aD{4K~109 z|33S0_ESqOR-{&f4_Cm4t9J>mrS{h!KfHT;_UVjL>nc(!A&4sw#MOi#eQM9n&pC`A z%Twb&eb)bHy>E)z%98-d69DAt0U$++B1V^5L zBTo|?t*HF&{O9kG<6D*@l@b>40 zLv9iAB&_lTR(X1`s;bLoS|gft3jJG=JPDjU0ZyK#IAMD=;9rJgptDGB{b`&gwwMX>f;_r5ElrD3-myoB1ICa z1p?IqJ*WmEjW}|QsY!ZFcVUjxnk-uNC0VQL9F;II5EvNf!9bb*8_;BH^mm$AnRW^P z0)c;l9{iJNhacBTr%%<%mhdhRco*owJBe(V9%+8DPWeFjlQ-yhJM{Hno+3pOb_D{v z0zKH(W1S?1GLQ|FJ_*MHfn$Ll9NR)Y6~b2PR4EQ6oC^icg?eyqlVU1*0}Pu`!naW1 zTc`)$Hi;Dirvc|e3FktAbKxOzE|hRC6gU^^!8ys=?ak2v{F6{E6sQ*JK{c7$c76^Z zRD!TjKv<{;!g_3_ic5>i3MKRk1$u>g&`YLRNYgMmlJF`NcoiNJuR{6sSa*C(4_;NR zw>wM5bT8yFa}f1-3ZVp4p#Z8-4^T;DUzMOyIo&$_oJaz#NPt#!$hE3SLZ(O{Q=|u( zs6wJi$k`ka4D8|rT%cBwoB{9}NhlQwl#2AAl;{MX5uz7u0Bw6;l)E88TO^<@I%Hrn zlHe;6@D=HSFM8@?oRCWjuQc5m{dtIu6-fvd2?UEYB3MQ0@l{%qaT3?D?htAup;;u* zEIQ=+RwO}IBp@r&7*?b^eaF+R0E?An0cXOc%s&avA^~TS#?axi%rC}tm;Z4m^;wZ$ zDAOySi|!6a>%p-eft+wUPaQmn!?x8sI=wnOeMtDSE%}hN)t!>I^dJ~#+n8$lbXJs$ zG0*9LEXvh+DIb`&x)amZAw4VGk`G5)-RWpcqjN=dDE)mKV-|NOH7P5dVGP@nPg7gn zacWDW$JKQqEyi8?RpxvhKYz9|bH>~38^uE;wk039wz?D7mZsxp2%&ZQTXrZKq56SwbHZejfa~ zJ^!2ZONIutaeMwZ-w%RdE&pHOI>BT9w}-eM^S`wUO+)@S@f*0f&eN6n4IOtWoB7eU z-LnFx0{CYnND~}%0cP5 z?k`cC-ZWzOmMdwB8lw`UB>P>vw`J=G__W`U577 zYrD|~;jY_ltviBof56mniWJ>rO1Sf%-~Szr$5&;%9DjTRu<)*;er#IJ-%yABx;}pU z>(3wFzCh>y&)(TLr;Q{H{Hx6Vu~&v*tbsU&-SyoOti;sv;ztsBsjVC(gKTRJh>{?V z@7aAm`_nUe8$c#ZOJip@rs~!<#+UAyp6=<<^sg`4?*^UqZ_IYfIBO63mj1y)54S>U z+?H}(a4`n=Ho<`?JlD#!46ao8g{zHLN+DBjODV&dI(Fd1^Hs>CC?wEr$q$0ho$>O4 z35m=vu|oc-u&fgKI6*1O4qka}MC&rmll797B?UVpUEwxbe12d~J?vjyjJ=Qb~eq&ehSmqJDyGZ&;(3OR3I zkGEuUXO6vvlZ0Ec_-sT+iWJM@Q%Qv5es5FK+U6#KEMhgW$SPTYTt+4Tt7^0H^-6wZ z-MKVR4lQ6@)g7LX9Yh90PERB6VYUYs`pEofT6z!bEb3*F+f}$%ayES+4wfcNe=st2<6Wn%Bke;PPnSI#doW_u&W0?!E^9XG zMa)L8WmxP-?0m>F?lR}2(R}LpkVWEU%}1kv`RM7rf$Ha5g;>lm5jYGQ;(#K)JYDN$YMOciQdHWC<|ci)%RLfSTdX} zN)IjIMoyRp0mx#o*vl|M3T@>h)f4)}*?=^5Fl%aR1$^SGwVDG48il`>TN znU#%sbFx_Z3omf+7pnjI{KDLWUT9J+O)^A>24qtGeUS_CNwrEI;hvY5NX}=)(pWd2A}i<%6<9}1V}&Rd2a{uh1IHb3o9Zh{hhw*6+R*o85$ z2JJz2)arjkE0!CYh*B(c_Ic0m^TQHx!f!^V+fXrL|;*@}?|HGaw zm{F5|ZTfRdBR_4uhgMi2o)ISz2EUkl7L+`8!Y~`NG@;VYCDW)jOvY%v|K6dFxy`1~ zQy~n~5gk~O2SbVhjaZ?SG8OU1LyEbIUoY<@(Wyy%&H|rWc!A4Eo@k#YvJ12XUZAOn zk;o$xs)=9%Eg=(VvN@)VD@YQ4z5&UR?b9{rPD5-svOuEncNH zI8RFFdCDuUbdAH4f_Qe3c)qcKu?FW!={&peJZKHD0b>o;4a6BoGryw8?^Ij2Afh;bWsIOO7SLws1F@LY?%&(U>Sy%(m z&v3?{bLc1HdT7Gyp#=eZLj5B3n540K>4kazcBmnC_ap*-XhQg*yAVH_*F^W}P>V=Bb9hzWw z=#z4Hs0iMn33-R^Lhs~vf;*2?$sd1UbrC~o!t0^CfIYc&VXp&7iOH9+&0n|z#9cyp zZF^85hqP2;wseR-JQg87G@E0U5jBk!S>Ky+@9PcTkH{rNbR8swukQG_MlfY_6S4d^3Vj#L!Xq) zLq#+XP1rnC3eNMeP;3j16-*3(34ezc1mM}Tua;0rGFmKstPd8!Jv1TrP)T%8^W^Ir zM{KetGI?kM<)M;Po_!=t*S}CtNj3%=>jp$74^5yvRFcZGj~ZAfAmVmt!rP&{fIE+X zLSJK{r!e&5y1-!t69ZF1!=bxyI2b38(V31JxG5LlZs@-37=&^{3;RmZ-)< zZR)Ukh#@Tj94g7nk&>HRI|v?GJz8=x7A71Wx(lR}SMtcbLH5MZ(b9_{Fk$Y{ zUC^DvLg22Zi@W>(@wUdf8vyR^|5txmdqp?<{~g0y&;9=%;q~1AFIqqa^#6-iOT7M+ zGyr5^tmg)Rd3P`w4FKtL1HcCXfdU^e`q!Tu0EY5EHvrrzPQi`!9;X4|(w#ZqWcxp) zTYr=;e+73`Q`qhg`{Yl2@E1!|OgO^EN0r_Cz%{qXB5+m{?=XD6M`qsKTY7WW`;BdM z$ep{qf#9<6y-WMjWoLx&s|mlUymaR)cX)q9zJTb^qp~$1QX+*-|Dwy9?AUGL&#yVdaZYfv4X5I{eSXcdxKJT9v)@kP<0wfyZ9xlOKi6?UI{NWn#Ls z)zn@(u#1h))Hb($#$DRf$Y>_AEWw8?>*oIHSTCd>7TTLhIWaZko z$IjJiI=v@1u&JMh+ugA}oib9VcZJkSVT(OMtMyF;c2lmpdtN9ka&ulpTRbV}mT`@< zAymebC+wa_t2GIPNc>9oHPz+k5rjcg3c$wv%3A+Jtut zAFF*{Zn2SfiSl>VD>~9kx6I4*D#!be9N#E0oDVbDGNGELb-UyRIY{S<(ZeFvN-7+3hWTuF2kl=+y+MCq4f>rncEEEt z1!N!G{}yZf`XyMv)-3uQzv&j$dOh%rCNwl|SL`qUiS4siKp#Qr`70duS46WxT74<8 zBaL6tBpqTAkog-87Vgt!TLx9?k!rjqaMw{UONVWe2vl9;>yT`XQ9s6EI%DGiSyIl{XPchq^+vghH0S zi-wRD(Z+5+wd5*RpI=43cGv&1W3b%izh9~UJ+9H0$D8%PFYCw8^}mntdanPC+))Ab zzu{_$otcvIU)CV*uUGy{a1yDj|0SeF+J_6@yY}rFfy9#ZEZS_=Pb%Ss&&ZJ7|JwWl zr8|R!SHHWY?*=#SY~|YoQfAV#Z#}S?p1llK zGx!dvfU;6x@zC**ll+-1hI8kC_FLcL8_9zIrR< zfu^zoW0qQY6Zgs;bH7(1w(pRID0S(=hx|N^8gur z6jmvNT1*kxi~NKX?z<{S=8KpZs znXJZ6fi|SD!np_=ipVBN68yU;~)(NJftyQ z#mUC56NOdQNQo5IN%O(3SBV9K$No9)V%;S#-3mw2^8*<2duDE|d<%9L6PEco^9lUM zVH*jU2H1f**bGZy)pTr4;ra%xCSW-%iMj%jV`$OU@{Wb(XgfsMT{gD;fIo8CF3D#b zk2zL3g_YHba%^)H1bB=8zRIX!#H{mwU}634DKH4BmCl^fU7MBm7b)?ZL%I zqx1IMBIkqdnQoY*)jxxG`L**cEvH|%)9Y9ux;3cqY1&qW z4Bn8QZnV$g$JXmkw_|Vz5R zS;uU5Tb-VM23c~a4^u<*cY5C<=6S2z-7wa{`@U`vw2BJL!`WGeuzJXA9VWB&x~sDp z;TC$cSW{F!tI zCSQF+Q?G#5R;z+GM8y^Apcc3T5E`Y&4*uf8%^wz6HlM6%WClCge% zPp%wia%qom87CF~@}Ar|)3G-Bls^zNrRdw|e9H9(&4Q zAFitQxcd9z=>KMi@Y|!Fb>z&J{CPc68HL5`po}xK-RVz+3rqe@9#)7P_|A--1qBOx z>>!_LO4q$hDD!C5>B?7}bTv7at7`LZe0j*K(q-X!P_7*ALDIZ}U%S#thXVo$tS8Khm-sX&FzfWG(ULu8+EwIiI zw*IQx*k9NlsW(rM!WK|KO`Fvd31M51N`4r%i1ww~)EbxCQfbR92-%SAZ?hbu&$sU!U z)swBl&aGZ|@IF=VP;PcL%+P*$rfF!zo{i#KrL4p7}K4}DY~phWubJ0k4@?W zIa+A8{H_0q^ON|aZ{N51gK_>7`vWIl#CS81t+bX`iH-ei>7MpqP_7F5p8ddh>hmDf zktN#f31)Ju5=H>6l591$`kGgTb=EMT>7d1<8FBXmC&w^KmtsqnB(3dL57zBIz*cM) zP>xMc6cz$W*JGmvv3nrLxuAS@P2={d!Df@-tU=z}y8m z4*0^7**^d7#S1h|O}f-Omj=-+fXJU9?jR*DpwwGVV)i0$B_a{W3RLMn^YOnaRnXRTvcQJJxACFj6SxGLa)Cn(#!n>bcZ^aMX*=?Di zLVD)wAZ%aegt5%Nx`O={2E~v!oS~Pm3 zHKPmQVI|2{okJli6;SPt^U*v|o)!@)rAy#()56v|bHDW(O9#o!9^b%UB zR!JSer$d*OeSWs5_%$V4CNH7Odfv2loSuiM&=BHeBaV{|xwGK?PArkz_=XVm8gbNX zNCK|+5|Fuo^-;dZ_NElVS|bi?4Hd`0Oy=wZCHq>VztujS{;&2$8+I$nLGhnhorEyg zh{If?xG=}gi@3~RSOWD05|QL+o5#K{r&@)gS7t+qc8xgNHJ#F2OB2VYeIfPzy1z5y!xWBx1T=tw~Tm=Sy;n zMI$zZh}eiDV&h56RK+^gq)=6oMkY0YHouL*4de%~ju#ZmiD?J{un`Bq##5fiHih`s zjN@BV5=mBV?77U6v#i_OQ|;&5TYivr*n{tK9Aq_x2-u7xU{fvvf(m;)t`$?dd+@^S z^yl{W6VH{>Cvv4f!uMa$@HgqhEUeiyg?QPF<7HD4dM2%5s2r#nYSZKAUH9oZ7cIdX zVNAMD4p!-~`w6S15J8)91Z_&P(xkLRCJ9X;ST^He*_2ETPh_%kzGjm3LUXPcA+k2( z$l8=n8YRydA9cM5A+{NZ*rs%vDXHPcdO7GF_Djmwj1Zlhadd7eb5r_gH{~)0kUVynJpZj@f@(JGSx(agO(s1G|2$B z_c6dd`OoRPBSoirR1^6OS^{X$Bw?rWvcn#c)4oqiiR*7pYUATq4GsMehiW3*K}+Bc znk3^CuMIs;)p4%IufhwDSasGAN-0BW7euLG!)l-nYn`x^B9@+%v9tzRN-0abFiW`x zG~#k&PoU`L37qBGY-TdF$ab2sg^M7mfSgSqre;?!Z z%>RvCTLJvv&D9dSNF^lT`d^X+j1x#52)Ha_UdJVN5voxkXZFl>=A`FNr;g9JYm?t+ z|MnKn{4$tSJ^vbCZK;j`j2v5KL|?)S*djU>v(i=IR5;tO5?(TcudI+U!NxfoP%w5t zY|rm;YN;awm&sz~FTB9ngt;=X04sH1t*3i*e&Gwt}=#jnY`~<=fu$8whYEs+9bZktQ)RICPfUJ&MPDcmv@oPst>@yqKRAM zZDCV8bpT?}jnR8z%2x&q>_MbIqX`@^4=JO-ZnIg zsT1+3)(}puK2kH4EMu6oHsfV64N}Hb2C9i8raFV68T~;e!8V1gCZui(fySWQAZBOv z^-xRhQWB~Z%#&`wV(PWHrf=3=43<5sl8B5xEmp`fMoOd*K)l6ZndidAsH6!O3}I1; z8Aj$@3emtJ1!Tlh*0rvl@%z|gWR=9<^{ci5%p|;tjg|Pj!vCW4f0gLoGHKh>@oLKM z#M-e%PVa@hbh1%JFm-}}C3ADKf-J}%U3#lIvI(P7Xm6R=%r@E6%80+@O;%HnT)K7; zzJY~Ss|505ZA2wOw@ikiUAW78mg2KQEa!7rBo|$%W}`fJ?$%8u0DD@xQ=asDb7ab| zl%QLVo;tCn)dBHV%fOw4y%<1|YloG~kXpH1uaO@`YcEv^v2I*svlpf8+%mad+5GIq z38LcCsWaYQ#dq#>%Aor0oT-dF%~MIsEtB6eMn0O361lr^$2VkVF9O18mP?OMmN-dB zrBrfq!6#iUVf5kCt1<5{5jiD6ZY+pXB?cF}fmaE!jkilk$rRFPAK2FwVVttW+Q+V4 zlLpx4x-!7)*W%IjD`e)*u@5E`Vr-ET$+Bp3k0h&@5=@lmcBJ-X^jY@7{ciP%uU~=% z>`bH2@h6&bzxQ8`*suPHWo~{~G!rnG=?EAv`D9DqY71<-p?8cQdan{k;ni)OuZCiHMWaZ@L zLy?fgZHnY3Az!kR^VwfCKopA<)k0MlNRcr!u`P<0s~X+)?@QIMzj{|)=5)SE_APR1 zQe+x>t)tL8_&hcl552BAQofnp6uw<_bC=RApItsG?kX&%{bpI#WxCZMA{V(eUyhW^ z5VZ38oaXCEbACJn`l% zQV0cTy0qwBR?GdsE|8Nz>e4K(UQ<)E1UtKUN=X%PV8A_ma zdG=SY^J&`U7SBtNb7|Hy3x4(hg6rIL^Qr$-WU5CdK0C=f`;dD6W{ky+{H?1#0I}Wr?xx3@k zwAl5Y)VTg<$&-`UA6~6=G1I&JFm7F3Fg# z#pkY@-eugo^}BIj)b?MBTM;{4lIPbdZn52wHV?y^o8r#&wjM^}GII*0=>= zouiAOw{Um8qpRVO>n=4Pc#XU9QIhc7E!ArI$*y-7>l)Y926Kd&7B!gPJHK_RHy)Yf z>#Oe6dwi3A;!j_j%<)~abw2SvACAwx$7RY>J^`Qgrh`c~o^sRSs7b)h=ND3we3@Ir zk2{^u)9$2GEM!LMXD0*#Ih)sQ3A7m?3PQk4W27 zbB3LF;g^~p-Y&-ZQlqmyqNWkM?~~r)k{S1lPjLr165Oy7+)%Ed=8lKNZhfS=VWqjD z`0?SLt-pA`X#P?9C1W;xg!DJ6^f!__X}rrDZp%kVouf*fBN=tZk>(D8%L8XO%ch-A z-Qi7ouvR*lejx#mDglp#QZYsr<4Ut*8O=6}P;bqsz8U5Jpy+^(k&?%ilE*Sie#?tRue$As zKzE9fddHP|$1>`D%a>aoIM|I8J+2fzmQnP=?pZDdh0&AlH2){FbUHg&x3pf`TVi{I zbUdzfJl^JAZ4|9@t#>sT_L&+Rqq%F$9r73na9jy+Og*#qTa5v`Vx*^WrKd6ZD7uD$E2k0ow4&%D>>JpTs3w)D zCKORMAFNNBG9{0l;rKG|;O94&2W5Ko@8?L-Ll3&qqaO@D>DOO>ExJ>#RP2JO1PN|Z z32s88SJ0l(Jw8@rLe4`Z!$~E>3GJwx=AmI(6y2^kvM!@qb*Rl8>j~22q|)Ss2(~zi zIFON&bFk_UcR(REPAWA{Xb01gj_TjQYo5jJhw;oa(57+kK;?sK@Q-wSaqxKcLysOk zGKmH*4-E-@QVD%RBq|<7etmCO9-6V8`=F5gCzbpsw3FsY2lY)~ZGN2Yar;o2>lM=c zq|*Fkn}^B?uDgW7OPYw2+F5u!BZ*HciBD(}Uu!&bFOo+B-mV0^z0H&4HWJ)+CAe+* zy=ta)NG#ixShi)>tnA%$^aXRS-$wG;uH>^VcU-(Q*Dw8HYDOCgWV;f`HccS)k#09O zsc$1uYgeMyre<8#G0-xpM?Hc&wQnPVYgYo-rU@L)kAi`_jBgHFtw$vbS8@9bQnYrZ zXl-H!_EAKbQOV6Q+DQA_mG-sCN!P?j@Y_7Z^sXld^Kp7u)wOm)!$nWTOK)J5tHRowH5vKg$xE@8^POjBP;smpMZV&=8T1T+4TE zR9qqtEzm>;jESOpi5AtB0;+$o`2LJTb!Lqd=ta=Nnl^>B4LZa&5hl}lKn1((PM zCR)FXTVp!H4V6ngq6Lu1MkHd}SVfq7_G#F`5{vDEWF&+#;u?kJa)Bzcv5K7A7uO7$ zcIC?t*3kvkh=esVACx=9oDWE@Ll}dkfP zC**bW)7;0W|466R#yQtjtd>BVQa0Qa*Hvy1^p~i&3+(MywGX4E6tJa~5L`+i2x5$s z0*;gt0!h&eZ3JQGp_z*LGzrXqPl zj)AIW{@1|nAx2p#U|A_5%&M02+^C2dRSF)_XG8JN84u$_v;gMdCJ@57IB^zL=(|xHnjR0r{kC%qQ1J z#TFv0l|Xz_B;*sV;a3}+-O8BuqyYD%sF%Jrx&?&!PYM7~N{9f(H44iq0G^aQ;fcNc z!I&lmoF*j%YFf+6;#!J@5=cync>8J?)}W1Yg(F5Mowo%n4zQqqNIc4RxoNsNziI; z27$3c3b;bb1{Px5xMm80y9s>F4hmT0fIp;!07P7)uyg@JNZA-d&J8Skg!pyq>W_tDv#*B5Vh7M3Wux{qleGN(8uSv^ zC#-kC@KHpF4^LWbXZcS~PGA4!*c|7#*sfvK1gwuDa((K###J5+<5584Q8pY;^U8xM zI|?v6%EsB*i1J`gjsjGD2RxPG+y8TpgJU0CB*&IbR_3u~96^T{XYIrshC*L8ir*SN29KLJr1I9gpIVla zR2H5())9ysk7-bkX_7mYd#xT$vkj(I=LT2jM!wB>lG<1{&1NARH7@h4*aZ2$!SJUR zzNPyOT6MdmID(|O4>^xszk2FD?J-YOF+S2(b~r=)IAd($x0>Bp9Kl%Jhdv*PAB0M- zhH$lx7n76Rl8kn~V%EOZ2%p6-F7MVKI?R(fAVwHQb0MR-Zta;mJ8ohQn~v6-f7BRc zSMnvX530tNSKIqq1#7+zS#uH@5yN4})i;YkFlpFjh*KHzWVUC?( z%@J60Wc@+j$ggVmGmhYA99_tou={JzyVFkE^L?oKJ_+95{CHk5t`$e*iX)rZ{c&|# z#&5o2IA1Z!FUnqcod(0D!L?7Vdtlpf9}<0EpB3h6tytVs;47&Ew)-R!;!P973Rz4Y zgO_sMv{@GK*Q^qaKhoalLv8e_JkiTlS7prg70dRmCTke@{KPgpjvzbk1H@Y*HFdp!=Q(wZkxNpHf27hi+F0jZwDPE(wR`$dJ$)R` z9#8{og#v7!BB2+N$gQus2XI!ZWsX891`na{!?oZgk z<0tfILws@tOBW5d?wdWX;vOO5SI2$rQz6&=bT>CWf~i2bQ4OzAjrvHuM!SUIq`*Q7Vuyw$>*uirQ**^mS!?7eH>`g- zveJ=*0n8fL*e7uw>%x?3pG|-2(_D`qz~nYJ?wZY9DGcdTqmGn#>+^ZBo=WfnW%o9g z;B71yo7=9wh7|8R%cV!sjQ+i!Me)NXl`F;|scO`9VzLwqCmDJ)BYxT?eW;Q?3ESAJ zt%*8vf>B3c)R8rT3`}?4KxLlQP4KX}bH{A1nT}Zu_VW-EB89w3}F>^S5o$i>K+)s_U*I2HL|(x1#I4u5JZ3 zACnqh)p;|UM$uoDS2nOR^_#EObb|S@Uqr;>-1&$y#Yci^o02osM4!ZL+@P{|)YY_a zxxwFZZ(Y4M7J5AA+Rtn>-5b=&az3ahR4@6BKb~>n&O{`1Vb^hH*O93pVyVN8!kDFF zasAP*y*}^n$r$;#)-3fQ(jJ$ z#bC=7a8wvmJ8}BLDe_qz@3Z>&j9i((O{C?)yVuBeuL-Db+^X6}d-rE7Tv(^*-Y2Xzum5aTeWN44n+*~h zDbI+NH^=_D&96)Bzj*s_2YhJIKfr~+QFi9qXY04|1aITH*a8O=_g~38{;I)3rop14 zaty{~Vk7(Mc6x(o-KIEm)AyL!TsIn)`#TTHw}(q&U%zg8PC$dyc?%4AE&K34P517N zSjae^xqV)2cJ{mRuKmb2g|mfm7q9a7T5@!W|Ik`?D}Q*U73 zF}->oYkVFRl6@!_Bye%fg*l>hx)60DZS`is>LNdH7Kwd2SJV8t`m=j?X3gT6gY>og zA9^Pb&X@zwwmzPD3Y|#bYOq~B^E`JM>mhU&tTn1V6w^?66}L^ue&6hxZr0hao$Rc; zaF{JCz z=rJJK|K4`HApcH%eYU8f+U=A%^soX;e1z@?!Qj_?ckBlphK9ekU$+#TO!+cnEMd3& zv!kDL-PqoVS}AF7ColBHJ1tm3r{NW5bJ0DPxMzaN1_F*O;}hCeyfS6{&yBNZQG3T+ zE9q|a>piKT$)Z1|NeB%Y8A&|Y)3CiR)bL(I?S8+|k$He2hpA3}Zr67*8ULr(ZOTO- z7S}CkE&fVY6=nQpnJkon#Hm#bns2tf`dYE^vM2GDbjIUJr%H0M#{{F+vgt2t*0X;G zh|uy(p58H;)N`0mv-GE*{F<;tE$@lJBfQer5!h)`dG~>+)`R0YZu_x1-$~}!{_9=> zpA3cY2}wmezgd149Mbv<`6@9YU28y0oENtI_UVY8&~~ri#oqeiTCmxVYjhXRQ=A2< zH(pS@2wWzoXqe>?y>OG34>G(uc-p9Kl0d9jmsDyVbxk4KZSwKa$i~zA=aWsTEXF&w zGcDfuk<>{>qeVqO%d`j9E6hwbTd%FIQo5AJh0Hv4>|~~BJIRu{`_PN@I&0G1(W0`S zaYoP5J73p5@xSP6$UH@#K9s~;%w{l%&xX{-u?2@42-b|bms@1_GRgvBVW91=+8poJHNy&Kz1Mfms_LPLatHsAN4-5IlR=$&W zc$4>#XMc_{y=&ZC$LkMdwC7oIP4@9;$;*pyzXdWSRbu@@{wWoL?YWgqzH&{#C&|dtLvK8`q467u z#PQGfEd|q-ZyH~z?-HfGrh0PyHbAOe3xU$6LqUMF_;(9 zlsdRoxLj-WvhJJc{6?Wq+h*QzrSSV$_nZ(+(_P%=RU?R)< zJXKMqU2@K+5*>9&jT(`X~{0rH{H5E4E)xy

ptBo&w&PKg;5qTyp3)4%E32Vv5 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

C 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

Kx_3s7h^KxA;g4E?%s@nWE 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

n+2JC~>VsMOt1)ZCOlW3O#~bZ+1ZYT#ljw7)0| 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 g3zur|EvdgSAt-lr1-cdu#M5?N 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 pQ4$rl-8?Zlzqs~f>q4laaeR7f$N#JJ @@ -241,7 +242,7 @@ __wrap_ioctl(int fd, unsigned long request, ...) va_start(ap, request); - switch (request) { + switch (IOCTL_REQ(request)) { case IOCTL_REQ(HIDIOCGRDESCSIZE): *va_arg(ap, int *) = (int)report_descriptor->len; break; diff --git a/fuzz/wiredata_fido2.h b/fuzz/wiredata_fido2.h index 68504325450..6c66c545b23 100644 --- a/fuzz/wiredata_fido2.h +++ b/fuzz/wiredata_fido2.h @@ -2,6 +2,7 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _WIREDATA_FIDO2_H diff --git a/fuzz/wiredata_u2f.h b/fuzz/wiredata_u2f.h index afe418fe9d9..3be22d34b6c 100644 --- a/fuzz/wiredata_u2f.h +++ b/fuzz/wiredata_u2f.h @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _WIREDATA_U2F_H diff --git a/fuzz/wrap.c b/fuzz/wrap.c index 4d6ac77a98b..6f40ea1d079 100644 --- a/fuzz/wrap.c +++ b/fuzz/wrap.c @@ -2,9 +2,11 @@ * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include +#include #include #include @@ -22,9 +24,13 @@ extern int prng_up; +int fuzz_save_corpus; + /* * Build wrappers around functions of interest, and have them fail - * in a pseudo-random manner. + * in a pseudo-random manner. A uniform probability of 0.25% (1/400) + * allows for a depth of log(0.5)/log(399/400) > 276 operations + * before simulated errors become statistically more likely. */ #define WRAP(type, name, args, retval, param, prob) \ @@ -70,6 +76,14 @@ WRAP(char *, 1 ) +WRAP(ssize_t, + getrandom, + (void *buf, size_t buflen, unsigned int flags), + -1, + (buf, buflen, flags), + 1 +) + WRAP(int, EVP_Cipher, (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, @@ -653,11 +667,11 @@ int __real_deflate(z_streamp, int); int __wrap_deflate(z_streamp strm, int flush) { - if (uniform_random(400) < 1) { + if (prng_up && uniform_random(400) < 1) { return Z_BUF_ERROR; } /* should never happen, but we check for it */ - if (uniform_random(400) < 1) { + if (prng_up && uniform_random(400) < 1) { strm->avail_out = UINT_MAX; return Z_STREAM_END; } @@ -673,7 +687,7 @@ __wrap_asprintf(char **strp, const char *fmt, ...) va_list ap; int r; - if (uniform_random(400) < 1) { + if (prng_up && uniform_random(400) < 1) { *strp = (void *)0xdeadbeef; return -1; } diff --git a/fuzz/wrapped.sym b/fuzz/wrapped.sym index 59224565ee0..219a0d8b8f4 100644 --- a/fuzz/wrapped.sym +++ b/fuzz/wrapped.sym @@ -63,6 +63,7 @@ EVP_PKEY_verify_init EVP_sha1 EVP_sha256 fido_tx +getrandom HMAC HMAC_CTX_new HMAC_Final diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 910ee684e9f..cf32a3a9420 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright (c) 2018-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause find_program(MANDOC_PATH mandoc) find_program(GZIP_PATH gzip) @@ -11,6 +12,7 @@ message(STATUS "GZIP_PATH: ${GZIP_PATH}") list(APPEND MAN_SOURCES eddsa_pk_new.3 es256_pk_new.3 + es384_pk_new.3 fido2-assert.1 fido2-cred.1 fido2-token.1 @@ -52,6 +54,11 @@ list(APPEND MAN_ALIAS es256_pk_new es256_pk_from_EVP_PKEY es256_pk_new es256_pk_from_ptr es256_pk_new es256_pk_to_EVP_PKEY + es384_pk_new es384_pk_free + es384_pk_new es384_pk_from_EC_KEY + es384_pk_new es384_pk_from_EVP_PKEY + es384_pk_new es384_pk_from_ptr + es384_pk_new es384_pk_to_EVP_PKEY fido_assert_new fido_assert_authdata_len fido_assert_new fido_assert_authdata_ptr fido_assert_new fido_assert_blob_len @@ -114,22 +121,31 @@ list(APPEND MAN_ALIAS fido_cbor_info_new fido_cbor_info_algorithm_cose fido_cbor_info_new fido_cbor_info_algorithm_count fido_cbor_info_new fido_cbor_info_algorithm_type + fido_cbor_info_new fido_cbor_info_certs_len + fido_cbor_info_new fido_cbor_info_certs_name_ptr + fido_cbor_info_new fido_cbor_info_certs_value_ptr fido_cbor_info_new fido_cbor_info_extensions_len fido_cbor_info_new fido_cbor_info_extensions_ptr fido_cbor_info_new fido_cbor_info_free + fido_cbor_info_new fido_cbor_info_fwversion fido_cbor_info_new fido_cbor_info_maxcredbloblen fido_cbor_info_new fido_cbor_info_maxcredcntlst fido_cbor_info_new fido_cbor_info_maxcredidlen fido_cbor_info_new fido_cbor_info_maxlargeblob fido_cbor_info_new fido_cbor_info_maxmsgsiz - fido_cbor_info_new fido_cbor_info_fwversion + fido_cbor_info_new fido_cbor_info_maxrpid_minpinlen + fido_cbor_info_new fido_cbor_info_minpinlen + fido_cbor_info_new fido_cbor_info_new_pin_required fido_cbor_info_new fido_cbor_info_options_len fido_cbor_info_new fido_cbor_info_options_name_ptr fido_cbor_info_new fido_cbor_info_options_value_ptr fido_cbor_info_new fido_cbor_info_protocols_len fido_cbor_info_new fido_cbor_info_protocols_ptr + fido_cbor_info_new fido_cbor_info_rk_remaining fido_cbor_info_new fido_cbor_info_transports_len fido_cbor_info_new fido_cbor_info_transports_ptr + fido_cbor_info_new fido_cbor_info_uv_attempts + fido_cbor_info_new fido_cbor_info_uv_modality fido_cbor_info_new fido_cbor_info_versions_len fido_cbor_info_new fido_cbor_info_versions_ptr fido_cbor_info_new fido_dev_get_cbor_info diff --git a/man/check.sh b/man/check.sh index 951afeb88e0..d969a7afb66 100755 --- a/man/check.sh +++ b/man/check.sh @@ -3,6 +3,7 @@ # Copyright (c) 2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause T=$(mktemp -d) || exit 1 find . -maxdepth 1 -type f -name '*.3' -print0 > "$T/files" diff --git a/man/eddsa_pk_new.3 b/man/eddsa_pk_new.3 index 998def48479..428d724a45e 100644 --- a/man/eddsa_pk_new.3 +++ b/man/eddsa_pk_new.3 @@ -1,8 +1,31 @@ -.\" Copyright (c) 2019 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" Copyright (c) 2019-2022 Yubico AB. All rights reserved. .\" -.Dd $Mdocdate: May 15 2019 $ +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd $Mdocdate: July 15 2022 $ .Dt EDDSA_PK_NEW 3 .Os .Sh NAME @@ -117,6 +140,7 @@ On error, a different error code defined in is returned. .Sh SEE ALSO .Xr es256_pk_new 3 , +.Xr es384_pk_new 3 , .Xr fido_assert_verify 3 , .Xr fido_cred_pubkey_ptr 3 , .Xr rs256_pk_new 3 diff --git a/man/es256_pk_new.3 b/man/es256_pk_new.3 index 5e184340a57..7d6be4d6223 100644 --- a/man/es256_pk_new.3 +++ b/man/es256_pk_new.3 @@ -1,8 +1,31 @@ -.\" Copyright (c) 2018-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. .\" -.Dd $Mdocdate: May 24 2018 $ +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd $Mdocdate: July 15 2022 $ .Dt ES256_PK_NEW 3 .Os .Sh NAME @@ -135,6 +158,7 @@ On error, a different error code defined in is returned. .Sh SEE ALSO .Xr eddsa_pk_new 3 , +.Xr es384_pk_new 3 , .Xr fido_assert_verify 3 , .Xr fido_cred_pubkey_ptr 3 , .Xr rs256_pk_new 3 diff --git a/man/es384_pk_new.3 b/man/es384_pk_new.3 new file mode 100644 index 00000000000..e865913b780 --- /dev/null +++ b/man/es384_pk_new.3 @@ -0,0 +1,164 @@ +.\" Copyright (c) 2022 Yubico AB. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd $Mdocdate: July 15 2022 $ +.Dt ES384_PK_NEW 3 +.Os +.Sh NAME +.Nm es384_pk_new , +.Nm es384_pk_free , +.Nm es384_pk_from_EC_KEY , +.Nm es384_pk_from_EVP_PKEY , +.Nm es384_pk_from_ptr , +.Nm es384_pk_to_EVP_PKEY +.Nd FIDO2 COSE ES384 API +.Sh SYNOPSIS +.In openssl/ec.h +.In fido/es384.h +.Ft es384_pk_t * +.Fn es384_pk_new "void" +.Ft void +.Fn es384_pk_free "es384_pk_t **pkp" +.Ft int +.Fn es384_pk_from_EC_KEY "es384_pk_t *pk" "const EC_KEY *ec" +.Ft int +.Fn es384_pk_from_EVP_PKEY "es384_pk_t *pk" "const EVP_PKEY *pkey" +.Ft int +.Fn es384_pk_from_ptr "es384_pk_t *pk" "const void *ptr" "size_t len" +.Ft EVP_PKEY * +.Fn es384_pk_to_EVP_PKEY "const es384_pk_t *pk" +.Sh DESCRIPTION +ES384 is the name given in the CBOR Object Signing and Encryption +(COSE) RFC to ECDSA over P-384 with SHA-384. +The COSE ES384 API of +.Em libfido2 +is an auxiliary API with routines to convert between the different +ECDSA public key types used in +.Em libfido2 +and +.Em OpenSSL . +.Pp +In +.Em libfido2 , +ES384 public keys are abstracted by the +.Vt es384_pk_t +type. +.Pp +The +.Fn es384_pk_new +function returns a pointer to a newly allocated, empty +.Vt es384_pk_t +type. +If memory cannot be allocated, NULL is returned. +.Pp +The +.Fn es384_pk_free +function releases the memory backing +.Fa *pkp , +where +.Fa *pkp +must have been previously allocated by +.Fn es384_pk_new . +On return, +.Fa *pkp +is set to NULL. +Either +.Fa pkp +or +.Fa *pkp +may be NULL, in which case +.Fn es384_pk_free +is a NOP. +.Pp +The +.Fn es384_pk_from_EC_KEY +function fills +.Fa pk +with the contents of +.Fa ec . +No references to +.Fa ec +are kept. +.Pp +The +.Fn es384_pk_from_EVP_PKEY +function fills +.Fa pk +with the contents of +.Fa pkey . +No references to +.Fa pkey +are kept. +.Pp +The +.Fn es384_pk_from_ptr +function fills +.Fa pk +with the contents of +.Fa ptr , +where +.Fa ptr +points to +.Fa len +bytes. +The +.Fa ptr +pointer may point to an uncompressed point, or to the +concatenation of the x and y coordinates. +No references to +.Fa ptr +are kept. +.Pp +The +.Fn es384_pk_to_EVP_PKEY +function converts +.Fa pk +to a newly allocated +.Fa EVP_PKEY +type with a reference count of 1. +No internal references to the returned pointer are kept. +If an error occurs, +.Fn es384_pk_to_EVP_PKEY +returns NULL. +.Sh RETURN VALUES +The +.Fn es384_pk_from_EC_KEY , +.Fn es384_pk_from_EVP_PKEY , +and +.Fn es384_pk_from_ptr +functions return +.Dv FIDO_OK +on success. +On error, a different error code defined in +.In fido/err.h +is returned. +.Sh SEE ALSO +.Xr eddsa_pk_new 3 , +.Xr es256_pk_new 3 , +.Xr fido_assert_verify 3 , +.Xr fido_cred_pubkey_ptr 3 , +.Xr rs256_pk_new 3 diff --git a/man/fido2-assert.1 b/man/fido2-assert.1 index ee8135c1848..0ee6e0942ba 100644 --- a/man/fido2-assert.1 +++ b/man/fido2-assert.1 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: November 5 2019 $ .Dt FIDO2-ASSERT 1 diff --git a/man/fido2-cred.1 b/man/fido2-cred.1 index 0b10e74a050..bd82499acac 100644 --- a/man/fido2-cred.1 +++ b/man/fido2-cred.1 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: November 5 2019 $ .Dt FIDO2-CRED 1 diff --git a/man/fido2-token.1 b/man/fido2-token.1 index 4f8b8d08efe..65a228cb1a3 100644 --- a/man/fido2-token.1 +++ b/man/fido2-token.1 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: April 11 2022 $ .Dt FIDO2-TOKEN 1 diff --git a/man/fido_assert_allow_cred.3 b/man/fido_assert_allow_cred.3 index 7fd730c3f63..0690efcff4b 100644 --- a/man/fido_assert_allow_cred.3 +++ b/man/fido_assert_allow_cred.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 23 2018 $ .Dt FIDO_ASSERT_ALLOW_CRED 3 diff --git a/man/fido_assert_new.3 b/man/fido_assert_new.3 index 413b7a7ba2e..192625e3263 100644 --- a/man/fido_assert_new.3 +++ b/man/fido_assert_new.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: April 27 2022 $ .Dt FIDO_ASSERT_NEW 3 @@ -154,6 +177,10 @@ in .Fa assert . If not NULL, the values returned by these functions point to NUL-terminated UTF-8 strings. +The user display name, icon, and name attributes will typically +only be returned by the authenticator if user verification was +performed by the authenticator and multiple resident/discoverable +credentials were involved in the assertion. .Pp The .Fn fido_assert_authdata_ptr , diff --git a/man/fido_assert_set_authdata.3 b/man/fido_assert_set_authdata.3 index 0d512b65501..f3a307fd05b 100644 --- a/man/fido_assert_set_authdata.3 +++ b/man/fido_assert_set_authdata.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: April 27 2022 $ .Dt FIDO_ASSERT_SET_AUTHDATA 3 diff --git a/man/fido_assert_verify.3 b/man/fido_assert_verify.3 index 8c082370343..1b79448b6c3 100644 --- a/man/fido_assert_verify.3 +++ b/man/fido_assert_verify.3 @@ -1,8 +1,31 @@ -.\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. .\" -.Dd $Mdocdate: May 24 2018 $ +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd $Mdocdate: July 15 2022 $ .Dt FIDO_ASSERT_VERIFY 3 .Os .Sh NAME @@ -42,6 +65,7 @@ where .Fa cose_alg is .Dv COSE_ES256 , +.Dv COSE_ES384 , .Dv COSE_RS256 , or .Dv COSE_EDDSA , @@ -49,6 +73,7 @@ and .Fa pk points to a .Vt es256_pk_t , +.Vt es384_pk_t , .Vt rs256_pk_t , or .Vt eddsa_pk_t diff --git a/man/fido_bio_dev_get_info.3 b/man/fido_bio_dev_get_info.3 index 7f1696fc12a..b8fc1043c23 100644 --- a/man/fido_bio_dev_get_info.3 +++ b/man/fido_bio_dev_get_info.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2019 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: September 13 2019 $ .Dt FIDO_BIO_DEV_GET_INFO 3 diff --git a/man/fido_bio_enroll_new.3 b/man/fido_bio_enroll_new.3 index 37b842e644f..536ba9af9f9 100644 --- a/man/fido_bio_enroll_new.3 +++ b/man/fido_bio_enroll_new.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2019 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: September 13 2019 $ .Dt FIDO_BIO_ENROLL_NEW 3 diff --git a/man/fido_bio_info_new.3 b/man/fido_bio_info_new.3 index a7435fd615e..41343068b16 100644 --- a/man/fido_bio_info_new.3 +++ b/man/fido_bio_info_new.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2019 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: September 13 2019 $ .Dt FIDO_BIO_INFO_NEW 3 diff --git a/man/fido_bio_template.3 b/man/fido_bio_template.3 index 232f3ead2ab..a8ff8bc38dc 100644 --- a/man/fido_bio_template.3 +++ b/man/fido_bio_template.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2019 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: September 13 2019 $ .Dt FIDO_BIO_TEMPLATE 3 diff --git a/man/fido_cbor_info_new.3 b/man/fido_cbor_info_new.3 index 45c143f5df6..a8168c05c91 100644 --- a/man/fido_cbor_info_new.3 +++ b/man/fido_cbor_info_new.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: April 22 2022 $ .Dt FIDO_CBOR_INFO_NEW 3 @@ -19,6 +42,9 @@ .Nm fido_cbor_info_algorithm_type , .Nm fido_cbor_info_algorithm_cose , .Nm fido_cbor_info_algorithm_count , +.Nm fido_cbor_info_certs_name_ptr , +.Nm fido_cbor_info_certs_value_ptr , +.Nm fido_cbor_info_certs_len , .Nm fido_cbor_info_aaguid_len , .Nm fido_cbor_info_extensions_len , .Nm fido_cbor_info_protocols_len , @@ -30,7 +56,13 @@ .Nm fido_cbor_info_maxcredcntlst , .Nm fido_cbor_info_maxcredidlen , .Nm fido_cbor_info_maxlargeblob , -.Nm fido_cbor_info_fwversion +.Nm fido_cbor_info_maxrpid_minpinlen , +.Nm fido_cbor_info_minpinlen , +.Nm fido_cbor_info_fwversion , +.Nm fido_cbor_info_uv_attempts , +.Nm fido_cbor_info_uv_modality , +.Nm fido_cbor_info_rk_remaining , +.Nm fido_cbor_info_new_pin_required .Nd FIDO2 CBOR Info API .Sh SYNOPSIS .In fido.h @@ -60,6 +92,12 @@ .Fn fido_cbor_info_algorithm_cose "const fido_cbor_info_t *ci" "size_t idx" .Ft size_t .Fn fido_cbor_info_algorithm_count "const fido_cbor_info_t *ci" +.Ft char ** +.Fn fido_cbor_info_certs_name_ptr "const fido_cbor_info_t *ci" +.Ft const uint64_t * +.Fn fido_cbor_info_certs_value_ptr "const fido_cbor_info_t *ci" +.Ft size_t +.Fn fido_cbor_info_certs_len "const fido_cbor_info_t *ci" .Ft size_t .Fn fido_cbor_info_aaguid_len "const fido_cbor_info_t *ci" .Ft size_t @@ -83,7 +121,19 @@ .Ft uint64_t .Fn fido_cbor_info_maxlargeblob "const fido_cbor_info_t *ci" .Ft uint64_t +.Fn fido_cbor_info_maxrpid_minpinlen "const fido_cbor_info_t *ci" +.Ft uint64_t +.Fn fido_cbor_info_minpinlen "const fido_cbor_info_t *ci" +.Ft uint64_t .Fn fido_cbor_info_fwversion "const fido_cbor_info_t *ci" +.Ft uint64_t +.Fn fido_cbor_info_uv_attempts "const fido_cbor_info_t *ci" +.Ft uint64_t +.Fn fido_cbor_info_uv_modality "const fido_cbor_info_t *ci" +.Ft int64_t +.Fn fido_cbor_info_rk_remaining "const fido_cbor_info_t *ci" +.Ft bool +.Fn fido_cbor_info_new_pin_required "const fido_cbor_info_t *ci" .Sh DESCRIPTION The .Fn fido_cbor_info_new @@ -180,6 +230,17 @@ has an (index) value of 0. .Pp The +.Fn fido_cbor_info_certs_name_ptr +and +.Fn fido_cbor_info_certs_value_ptr +functions return pointers to the array of certification names and their +respective values +in +.Fa ci . +The length of the certifications array is returned by +.Fn fido_cbor_info_certs_len . +.Pp +The .Fn fido_cbor_info_maxmsgsiz function returns the maximum message size attribute of .Fa ci . @@ -204,16 +265,93 @@ as reported in .Fa ci . .Pp The +.Fn fido_cbor_info_maxrpid_minpinlen +function returns the maximum number of RP IDs that may be passed to +.Xr fido_dev_set_pin_minlen_rpid 3 , +as reported in +.Fa ci . +The minimum PIN length attribute is a CTAP 2.1 addition. +If the attribute is not advertised by the authenticator, the +.Fn fido_cbor_info_maxrpid_minpinlen +function returns zero. +.Pp +The .Fn fido_cbor_info_maxlargeblob function returns the maximum length in bytes of an authenticator's serialized largeBlob array as reported in .Fa ci . .Pp The +.Fn fido_cbor_info_minpinlen +function returns the minimum PIN length enforced by the +authenticator as reported in +.Fa ci . +The minimum PIN length attribute is a CTAP 2.1 addition. +If the attribute is not advertised by the authenticator, the +.Fn fido_cbor_info_minpinlen +function returns zero. +.Pp +The .Fn fido_cbor_info_fwversion function returns the firmware version attribute of .Fa ci . .Pp +The +.Fn fido_cbor_info_uv_attempts +function returns the number of UV attempts that the platform may +attempt before falling back to PIN authentication. +If 1, then all +.Xr fido_dev_get_uv_retry_count 3 +retries are handled internally by the authenticator and the +platform may only attempt non-PIN UV once. +The UV attempts attribute is a CTAP 2.1 addition. +If the attribute is not advertised by the authenticator, +the +.Fn fido_cbor_info_uv_attempts +function returns zero. +.Pp +The +.Fn fido_cbor_info_uv_modality +function returns a bitmask representing different UV modes +supported by the authenticator, as defined in the FIDO Registry of +Predefined Values and reported in +.Fa ci . +See the +.Em FIDO_UV_MODE_* +definitions in +.In fido/param.h +for the set of values defined by libfido2 and a brief description +of each. +The UV modality attribute is a CTAP 2.1 addition. +If the attribute is not advertised by the authenticator, the +.Fn fido_cbor_info_uv_modality +function returns zero. +.Pp +The +.Fn fido_cbor_info_rk_remaining +function returns the estimated number of additional +resident/discoverable credentials that can be stored on the +authenticator as reported in +.Fa ci . +The estimated number of remaining resident credentials is a +CTAP 2.1 addition. +If the attribute is not advertised by the authenticator, the +.Fn fido_cbor_info_rk_remaining +function returns -1. +.Pp +The +.Fn fido_cbor_info_new_pin_required +function returns whether a new PIN is required by the authenticator +as reported in +.Fa ci . +If +.Fn fido_cbor_info_new_pin_required +returns true, operations requiring PIN authentication will fail +until a new PIN is set on the authenticator. +The +.Xr fido_dev_set_pin 3 +function can be used to set a new PIN. +.Pp A complete example of how to use these functions can be found in the .Pa example/info.c file shipped with @@ -238,4 +376,14 @@ without the .Em const qualifier is invoked. .Sh SEE ALSO -.Xr fido_dev_open 3 +.Xr fido_dev_get_uv_retry_count 3 , +.Xr fido_dev_open 3 , +.Xr fido_dev_set_pin 3 , +.Xr fido_dev_set_pin_minlen_rpid 3 +.Rs +.%D 2021-05-25 +.%O Review Draft, Version 2.2 +.%Q FIDO Alliance +.%R FIDO Registry of Predefined Values +.%U https://fidoalliance.org/specs/common-specs/fido-registry-v2.2-rd-20210525.html +.Re diff --git a/man/fido_cred_exclude.3 b/man/fido_cred_exclude.3 index 2aa87f28976..0d4ba75ecbe 100644 --- a/man/fido_cred_exclude.3 +++ b/man/fido_cred_exclude.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 23 2018 $ .Dt FIDO_CRED_EXCLUDE 3 diff --git a/man/fido_cred_new.3 b/man/fido_cred_new.3 index ee7ac96a6b0..4f8b1be7bc4 100644 --- a/man/fido_cred_new.3 +++ b/man/fido_cred_new.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 23 2018 $ .Dt FIDO_CRED_NEW 3 @@ -189,7 +212,7 @@ for the protection policies understood by The .Fn fido_cred_fmt function returns a pointer to a NUL-terminated string containing -the format of +the attestation statement format identifier of .Fa cred , or NULL if .Fa cred diff --git a/man/fido_cred_set_authdata.3 b/man/fido_cred_set_authdata.3 index 921a682f8f9..e4538325b29 100644 --- a/man/fido_cred_set_authdata.3 +++ b/man/fido_cred_set_authdata.3 @@ -1,8 +1,31 @@ -.\" Copyright (c) 2018-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. .\" -.Dd $Mdocdate: May 23 2018 $ +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd $Mdocdate: July 15 2022 $ .Dt FIDO_CRED_SET_AUTHDATA 3 .Os .Sh NAME @@ -287,7 +310,7 @@ by default, allowing the authenticator to use its default settings. .Pp The .Fn fido_cred_set_fmt -function sets the attestation format of +function sets the attestation statement format identifier of .Fa cred to .Fa fmt , @@ -297,15 +320,18 @@ must be .Vt "packed" .Pq the format used in FIDO2 , .Vt "fido-u2f" -.Pq the format used by U2F , +.Pq the format used in U2F , +.Vt "tpm" +.Pq the format used by TPM-based authenticators , or .Vt "none" . A copy of .Fa fmt is made, and no references to the passed pointer are kept. -Note that not all authenticators support FIDO2 and therefore may not +Note that not all authenticators support FIDO2 and therefore may only be able to generate -.Vt "packed" . +.Vt fido-u2f +attestation statements. .Pp The .Fn fido_cred_set_type @@ -316,11 +342,13 @@ where .Fa cose_alg is .Dv COSE_ES256 , +.Dv COSE_ES384 , .Dv COSE_RS256 , or .Dv COSE_EDDSA . The type of a credential may only be set once. -Note that not all authenticators support COSE_RS256 or COSE_EDDSA. +Note that not all authenticators support COSE_RS256, COSE_ES384, or +COSE_EDDSA. .Pp Use of the .Nm diff --git a/man/fido_cred_verify.3 b/man/fido_cred_verify.3 index 696dec293e4..9548870204c 100644 --- a/man/fido_cred_verify.3 +++ b/man/fido_cred_verify.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 23 2018 $ .Dt FIDO_CRED_VERIFY 3 diff --git a/man/fido_credman_metadata_new.3 b/man/fido_credman_metadata_new.3 index cd6722e24aa..122020bd68b 100644 --- a/man/fido_credman_metadata_new.3 +++ b/man/fido_credman_metadata_new.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2019-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: June 28 2019 $ .Dt FIDO_CREDMAN_METADATA_NEW 3 diff --git a/man/fido_dev_enable_entattest.3 b/man/fido_dev_enable_entattest.3 index a06746b6131..7617f22389e 100644 --- a/man/fido_dev_enable_entattest.3 +++ b/man/fido_dev_enable_entattest.3 @@ -1,6 +1,29 @@ -.\" Copyright (c) 2020 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" Copyright (c) 2020-2022 Yubico AB. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: March 30 2022 $ .Dt FIDO_DEV_ENABLE_ENTATTEST 3 @@ -97,6 +120,10 @@ NUL-terminated UTF-8 strings. A copy of .Fa rpid is made, and no reference to it or its contents is kept. +The maximum value of +.Fa n +supported by the authenticator can be obtained using +.Xr fido_cbor_info_maxrpid_minpinlen 3 . .Pp Configuration settings are reflected in the payload returned by the authenticator in response to a @@ -116,6 +143,7 @@ On success, .Dv FIDO_OK is returned. .Sh SEE ALSO +.Xr fido_cbor_info_maxrpid_minpinlen 3 , .Xr fido_cred_pin_minlen 3 , .Xr fido_dev_get_cbor_info 3 , .Xr fido_dev_reset 3 diff --git a/man/fido_dev_get_assert.3 b/man/fido_dev_get_assert.3 index bc67e441cca..bb2fc43b8b2 100644 --- a/man/fido_dev_get_assert.3 +++ b/man/fido_dev_get_assert.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 24 2018 $ .Dt FIDO_DEV_GET_ASSERT 3 diff --git a/man/fido_dev_get_touch_begin.3 b/man/fido_dev_get_touch_begin.3 index f3b8335cec1..f015eff2cb3 100644 --- a/man/fido_dev_get_touch_begin.3 +++ b/man/fido_dev_get_touch_begin.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2020 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: August 5 2020 $ .Dt FIDO_DEV_GET_TOUCH_BEGIN 3 diff --git a/man/fido_dev_info_manifest.3 b/man/fido_dev_info_manifest.3 index 4be7e3a6049..a70a3cb299a 100644 --- a/man/fido_dev_info_manifest.3 +++ b/man/fido_dev_info_manifest.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: March 30 2022 $ .Dt FIDO_DEV_INFO_MANIFEST 3 diff --git a/man/fido_dev_largeblob_get.3 b/man/fido_dev_largeblob_get.3 index c42208158c5..12dd319485e 100644 --- a/man/fido_dev_largeblob_get.3 +++ b/man/fido_dev_largeblob_get.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2020 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: October 26 2020 $ .Dt FIDO_LARGEBLOB_GET 3 @@ -68,8 +91,7 @@ function retrieves the authenticator's .Dq largeBlobs CBOR array and, on success, returns the first blob .Pq iterating from array index zero -that can be -decrypted by +that can be decrypted by .Fa key_ptr , where .Fa key_ptr @@ -179,8 +201,8 @@ is returned. .Xr fido_cred_largeblob_key_len 3 , .Xr fido_cred_largeblob_key_ptr 3 , .Xr fido_cred_set_extensions 3 , -.Xr fido_credman_dev_get_rk 3 , -.Xr fido_credman_dev_get_rp 3 , +.Xr fido_credman_get_dev_rk 3 , +.Xr fido_credman_get_dev_rp 3 , .Xr fido_dev_get_assert 3 , .Xr fido_dev_make_cred 3 .Sh CAVEATS diff --git a/man/fido_dev_make_cred.3 b/man/fido_dev_make_cred.3 index 60b77fb9c01..b13f9a14bc8 100644 --- a/man/fido_dev_make_cred.3 +++ b/man/fido_dev_make_cred.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 23 2018 $ .Dt FIDO_DEV_MAKE_CRED 3 diff --git a/man/fido_dev_open.3 b/man/fido_dev_open.3 index cdb148fe8b1..f839e26787b 100644 --- a/man/fido_dev_open.3 +++ b/man/fido_dev_open.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 25 2018 $ .Dt FIDO_DEV_OPEN 3 diff --git a/man/fido_dev_set_io_functions.3 b/man/fido_dev_set_io_functions.3 index 8c2067c41f6..e3e10bae5aa 100644 --- a/man/fido_dev_set_io_functions.3 +++ b/man/fido_dev_set_io_functions.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 25 2018 $ .Dt FIDO_DEV_SET_IO_FUNCTIONS 3 diff --git a/man/fido_dev_set_pin.3 b/man/fido_dev_set_pin.3 index b58ba6c86f8..eec062dda1c 100644 --- a/man/fido_dev_set_pin.3 +++ b/man/fido_dev_set_pin.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 25 2018 $ .Dt FIDO_DEV_SET_PIN 3 @@ -89,6 +112,8 @@ are defined in On success, .Dv FIDO_OK is returned. +.Sh SEE ALSO +.Xr fido_cbor_info_uv_attempts 3 .Sh CAVEATS Regarding .Fn fido_dev_reset , diff --git a/man/fido_init.3 b/man/fido_init.3 index 1254f934b73..12437e1b1a7 100644 --- a/man/fido_init.3 +++ b/man/fido_init.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 25 2018 $ .Dt FIDO_INIT 3 diff --git a/man/fido_strerr.3 b/man/fido_strerr.3 index 9d4ef35aa40..94b48bd621d 100644 --- a/man/fido_strerr.3 +++ b/man/fido_strerr.3 @@ -1,6 +1,29 @@ .\" Copyright (c) 2018 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause .\" .Dd $Mdocdate: May 25 2018 $ .Dt FIDO_STRERR 3 diff --git a/man/rs256_pk_new.3 b/man/rs256_pk_new.3 index 24a27bf8cda..0c0ab78b507 100644 --- a/man/rs256_pk_new.3 +++ b/man/rs256_pk_new.3 @@ -1,8 +1,31 @@ -.\" Copyright (c) 2018-2021 Yubico AB. All rights reserved. -.\" Use of this source code is governed by a BSD-style -.\" license that can be found in the LICENSE file. +.\" Copyright (c) 2018-2022 Yubico AB. All rights reserved. .\" -.Dd $Mdocdate: May 24 2018 $ +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are +.\" met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd $Mdocdate: July 15 2022 $ .Dt RS256_PK_NEW 3 .Os .Sh NAME @@ -132,5 +155,6 @@ is returned. .Sh SEE ALSO .Xr eddsa_pk_new 3 , .Xr es256_pk_new 3 , +.Xr es384_pk_new 3 , .Xr fido_assert_verify 3 , .Xr fido_cred_pubkey_ptr 3 diff --git a/openbsd-compat/clock_gettime.c b/openbsd-compat/clock_gettime.c index ca261a65e7f..bbf978c4289 100644 --- a/openbsd-compat/clock_gettime.c +++ b/openbsd-compat/clock_gettime.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "openbsd-compat.h" diff --git a/openbsd-compat/endian_win32.c b/openbsd-compat/endian_win32.c index 9981dfafbae..756c0cbdc83 100644 --- a/openbsd-compat/endian_win32.c +++ b/openbsd-compat/endian_win32.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "openbsd-compat.h" diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index 1518ff755b9..9f1ea3e7cf5 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h @@ -2,6 +2,7 @@ * Copyright (c) 2018-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _OPENBSD_COMPAT_H diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt index 87482ef3536..246bffa175c 100644 --- a/regress/CMakeLists.txt +++ b/regress/CMakeLists.txt @@ -1,14 +1,15 @@ # Copyright (c) 2018-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause add_custom_target(regress) -macro(add_regress_test NAME SOURCES) +macro(add_regress_test NAME SOURCES LIB) add_executable(${NAME} ${SOURCES}) - target_link_libraries(${NAME} fido2) add_test(${NAME} ${NAME}) add_dependencies(regress ${NAME}) + target_link_libraries(${NAME} ${LIB}) endmacro() if(MSVC AND BUILD_SHARED_LIBS) @@ -17,6 +18,14 @@ if(MSVC AND BUILD_SHARED_LIBS) "${CBOR_BIN_DIRS}/${CBOR_LIBRARIES}.dll" "${CRYPTO_BIN_DIRS}/${CRYPTO_LIBRARIES}.dll" "${ZLIB_BIN_DIRS}/${ZLIB_LIBRARIES}.dll" + "$" + "${CMAKE_CURRENT_BINARY_DIR}") +endif() + +if(CYGWIN AND BUILD_SHARED_LIBS) + add_custom_command(TARGET regress POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy + "$" "${CMAKE_CURRENT_BINARY_DIR}") endif() @@ -31,13 +40,16 @@ else() WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) endif() -add_regress_test(regress_assert assert.c) -add_regress_test(regress_compress compress.c) -add_regress_test(regress_cred cred.c) -add_regress_test(regress_dev dev.c) -add_regress_test(regress_eddsa eddsa.c) -add_regress_test(regress_es256 es256.c) -add_regress_test(regress_rs256 rs256.c) +add_regress_test(regress_assert assert.c ${_FIDO2_LIBRARY}) +add_regress_test(regress_cred cred.c ${_FIDO2_LIBRARY}) +add_regress_test(regress_dev dev.c ${_FIDO2_LIBRARY}) +add_regress_test(regress_eddsa eddsa.c ${_FIDO2_LIBRARY}) +add_regress_test(regress_es256 es256.c ${_FIDO2_LIBRARY}) +add_regress_test(regress_es384 es384.c ${_FIDO2_LIBRARY}) +add_regress_test(regress_rs256 rs256.c ${_FIDO2_LIBRARY}) +if(BUILD_STATIC_LIBS) + add_regress_test(regress_compress compress.c fido2) +endif() if(MINGW) # needed for nanosleep() in mingw diff --git a/regress/assert.c b/regress/assert.c index 695a3b78edc..98609257b8b 100644 --- a/regress/assert.c +++ b/regress/assert.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/regress/compress.c b/regress/compress.c index 5d537838bde..7afc8bb339a 100644 --- a/regress/compress.c +++ b/regress/compress.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/regress/cred.c b/regress/cred.c index c62ff8e4dcb..e4dc76ac1f0 100644 --- a/regress/cred.c +++ b/regress/cred.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/regress/dev.c b/regress/dev.c index 92031e17066..0ba552b7055 100644 --- a/regress/dev.c +++ b/regress/dev.c @@ -2,6 +2,7 @@ * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/regress/eddsa.c b/regress/eddsa.c index 42236ea58ad..06236987ed1 100644 --- a/regress/eddsa.c +++ b/regress/eddsa.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/regress/es256.c b/regress/es256.c index 17ef27fd4c9..3a62a415977 100644 --- a/regress/es256.c +++ b/regress/es256.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/regress/es384.c b/regress/es384.c new file mode 100644 index 00000000000..b55ce015e17 --- /dev/null +++ b/regress/es384.c @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2022 Yubico AB. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + */ + +#undef NDEBUG + +#include +#include + +#define _FIDO_INTERNAL + +#include +#include + +#include +#include + +#define ASSERT_NOT_NULL(e) assert((e) != NULL) +#define ASSERT_NULL(e) assert((e) == NULL) +#define ASSERT_INVAL(e) assert((e) == FIDO_ERR_INVALID_ARGUMENT) +#define ASSERT_OK(e) assert((e) == FIDO_OK) + +static const char short_x[] = \ +"-----BEGIN PUBLIC KEY-----\n" +"MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAZ/VVCUmFU6aH9kJdDnUHCCglkatFTX\n" +"onMwIvNYyS8BW/HOoZiOQLs2Hg+qifwaP1pHKILzCVfFmWuZMhxhtmjNXFuOPDnS\n" +"Wa1PMdkCoWXA2BbXxnqL9v36gIOcFBil\n" +"-----END PUBLIC KEY-----"; + +static const char short_y[] = \ +"-----BEGIN PUBLIC KEY-----\n" +"MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuDpRBAg87cnWVhxbWnaWlnj100w9pm5k\n" +"6T4eYToISaIhEK70TnGwULHX0+qHCYEGACOM7B/ZJbqjo6I7MIXaKZLemGi+tqvy\n" +"ajBAsTVSyrYBLQjTMMcaFmYmsxvFx7pK\n" +"-----END PUBLIC KEY-----\n"; + +static const char brainpoolP384r1[] = \ +"-----BEGIN PUBLIC KEY-----\n" +"MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABFKswbBzqqyZ4h1zz8rivqHzJxAO\n" +"XC2aLyC9x5gwBM7GVu8k6jkX7VypRpg3yyCneiIQ+vVCNXgbDchJ0cPVuhwm3Zru\n" +"AK49dezUPahWF0YiJRFVeV+KyB/MEaaZvinzqw==\n" +"-----END PUBLIC KEY-----\n"; + +static const char secp384r1[] = \ +"-----BEGIN PUBLIC KEY-----\n" +"MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdJN9DoqPtTNAOmjnECHBIqnJgyBW0rct\n" +"tbUSqQjb6UG2lldmrQJbgCP/ywuXvkkJl4yfXxOr0UP3rgcnqTVA1/46s2TG+R5u\n" +"NSQbCM1JPQuvTyFlAn5mdR8ZJJ8yPBQm\n" +"-----END PUBLIC KEY-----\n"; + +static const unsigned char brainpoolP384r1_raw[] = { + 0x04, 0x52, 0xac, 0xc1, 0xb0, 0x73, 0xaa, 0xac, + 0x99, 0xe2, 0x1d, 0x73, 0xcf, 0xca, 0xe2, 0xbe, + 0xa1, 0xf3, 0x27, 0x10, 0x0e, 0x5c, 0x2d, 0x9a, + 0x2f, 0x20, 0xbd, 0xc7, 0x98, 0x30, 0x04, 0xce, + 0xc6, 0x56, 0xef, 0x24, 0xea, 0x39, 0x17, 0xed, + 0x5c, 0xa9, 0x46, 0x98, 0x37, 0xcb, 0x20, 0xa7, + 0x7a, 0x22, 0x10, 0xfa, 0xf5, 0x42, 0x35, 0x78, + 0x1b, 0x0d, 0xc8, 0x49, 0xd1, 0xc3, 0xd5, 0xba, + 0x1c, 0x26, 0xdd, 0x9a, 0xee, 0x00, 0xae, 0x3d, + 0x75, 0xec, 0xd4, 0x3d, 0xa8, 0x56, 0x17, 0x46, + 0x22, 0x25, 0x11, 0x55, 0x79, 0x5f, 0x8a, 0xc8, + 0x1f, 0xcc, 0x11, 0xa6, 0x99, 0xbe, 0x29, 0xf3, + 0xab, +}; + +static const unsigned char secp384r1_raw[] = { + 0x04, 0x74, 0x93, 0x7d, 0x0e, 0x8a, 0x8f, 0xb5, + 0x33, 0x40, 0x3a, 0x68, 0xe7, 0x10, 0x21, 0xc1, + 0x22, 0xa9, 0xc9, 0x83, 0x20, 0x56, 0xd2, 0xb7, + 0x2d, 0xb5, 0xb5, 0x12, 0xa9, 0x08, 0xdb, 0xe9, + 0x41, 0xb6, 0x96, 0x57, 0x66, 0xad, 0x02, 0x5b, + 0x80, 0x23, 0xff, 0xcb, 0x0b, 0x97, 0xbe, 0x49, + 0x09, 0x97, 0x8c, 0x9f, 0x5f, 0x13, 0xab, 0xd1, + 0x43, 0xf7, 0xae, 0x07, 0x27, 0xa9, 0x35, 0x40, + 0xd7, 0xfe, 0x3a, 0xb3, 0x64, 0xc6, 0xf9, 0x1e, + 0x6e, 0x35, 0x24, 0x1b, 0x08, 0xcd, 0x49, 0x3d, + 0x0b, 0xaf, 0x4f, 0x21, 0x65, 0x02, 0x7e, 0x66, + 0x75, 0x1f, 0x19, 0x24, 0x9f, 0x32, 0x3c, 0x14, + 0x26, +}; + +static EVP_PKEY * +EVP_PKEY_from_PEM(const char *ptr, size_t len) +{ + BIO *bio = NULL; + EVP_PKEY *pkey = NULL; + + if ((bio = BIO_new(BIO_s_mem())) == NULL) { + warnx("BIO_new"); + goto out; + } + if (len > INT_MAX || BIO_write(bio, ptr, (int)len) != (int)len) { + warnx("BIO_write"); + goto out; + } + if ((pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL)) == NULL) + warnx("PEM_read_bio_PUBKEY"); +out: + BIO_free(bio); + + return pkey; +} + +static int +es384_pk_cmp(const char *ptr, size_t len) +{ + EVP_PKEY *pkA = NULL; + EVP_PKEY *pkB = NULL; + es384_pk_t *k = NULL; + int r, ok = -1; + + if ((pkA = EVP_PKEY_from_PEM(ptr, len)) == NULL) { + warnx("EVP_PKEY_from_PEM"); + goto out; + } + if ((k = es384_pk_new()) == NULL) { + warnx("es384_pk_new"); + goto out; + } + if ((r = es384_pk_from_EVP_PKEY(k, pkA)) != FIDO_OK) { + warnx("es384_pk_from_EVP_PKEY: 0x%x", r); + goto out; + } + if ((pkB = es384_pk_to_EVP_PKEY(k)) == NULL) { + warnx("es384_pk_to_EVP_PKEY"); + goto out; + } + if ((r = EVP_PKEY_cmp(pkA, pkB)) != 1) { + warnx("EVP_PKEY_cmp: %d", r); + goto out; + } + + ok = 0; +out: + EVP_PKEY_free(pkA); + EVP_PKEY_free(pkB); + es384_pk_free(&k); + + return ok; +} + +static void +short_coord(void) +{ + assert(es384_pk_cmp(short_x, sizeof(short_x)) == 0); + assert(es384_pk_cmp(short_y, sizeof(short_y)) == 0); +} + +static void +invalid_curve(const unsigned char *raw, size_t raw_len) +{ + EVP_PKEY *pkey; + es384_pk_t *pk; + + pkey = EVP_PKEY_from_PEM(brainpoolP384r1, sizeof(brainpoolP384r1)); + if (pkey == NULL) + return; /* assume no brainpool support in libcrypto */ + ASSERT_NOT_NULL((pk = es384_pk_new())); + ASSERT_INVAL(es384_pk_from_EVP_PKEY(pk, pkey)); + ASSERT_INVAL(es384_pk_from_ptr(pk, raw, raw_len)); + ASSERT_NULL(es384_pk_to_EVP_PKEY((const es384_pk_t *)raw)); + + EVP_PKEY_free(pkey); + es384_pk_free(&pk); +} + +static void +full_coord(void) +{ + assert(es384_pk_cmp(secp384r1, sizeof(secp384r1)) == 0); +} + +static void +valid_curve(const unsigned char *raw, size_t raw_len) +{ + EVP_PKEY *pkeyA; + EVP_PKEY *pkeyB; + es384_pk_t *pkA; + es384_pk_t *pkB; + + ASSERT_NOT_NULL((pkeyA = EVP_PKEY_from_PEM(secp384r1, sizeof(secp384r1)))); + ASSERT_NOT_NULL((pkA = es384_pk_new())); + ASSERT_NOT_NULL((pkB = es384_pk_new())); + ASSERT_OK(es384_pk_from_EVP_PKEY(pkA, pkeyA)); + ASSERT_OK(es384_pk_from_ptr(pkB, raw, raw_len)); + ASSERT_NOT_NULL((pkeyB = es384_pk_to_EVP_PKEY(pkB))); + assert(EVP_PKEY_cmp(pkeyA, pkeyB) == 1); + + EVP_PKEY_free(pkeyA); + EVP_PKEY_free(pkeyB); + es384_pk_free(&pkA); + es384_pk_free(&pkB); +} + +int +main(void) +{ + fido_init(0); + + short_coord(); + full_coord(); + + invalid_curve(brainpoolP384r1_raw, sizeof(brainpoolP384r1_raw)); /* uncompressed */ + invalid_curve(brainpoolP384r1_raw + 1, sizeof(brainpoolP384r1_raw) - 1); /* libfido2 */ + valid_curve(secp384r1_raw, sizeof(secp384r1_raw)); /* uncompressed */ + valid_curve(secp384r1_raw + 1, sizeof(secp384r1_raw) - 1); /* libfido2 */ + + exit(0); +} diff --git a/regress/rs256.c b/regress/rs256.c index f6e685a11da..799396f07a0 100644 --- a/regress/rs256.c +++ b/regress/rs256.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef NDEBUG diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 44a87282869..73493b1ea8e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ -# Copyright (c) 2018-2021 Yubico AB. All rights reserved. +# Copyright (c) 2018-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause add_definitions(-D_FIDO_INTERNAL) @@ -21,6 +22,7 @@ list(APPEND FIDO_SOURCES eddsa.c err.c es256.c + es384.c hid.c info.c io.c @@ -83,11 +85,12 @@ else() endif() if(NOT MSVC) - set_source_files_properties(${FIDO_SOURCES} PROPERTIES COMPILE_FLAGS - "-Wconversion -Wsign-conversion") + set_source_files_properties(${FIDO_SOURCES} + PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS}") endif() list(APPEND COMPAT_SOURCES + ../openbsd-compat/bsd-asprintf.c ../openbsd-compat/bsd-getpagesize.c ../openbsd-compat/clock_gettime.c ../openbsd-compat/endian_win32.c diff --git a/src/aes256.c b/src/aes256.c index f093b7ce0bd..dcf716d65ab 100644 --- a/src/aes256.c +++ b/src/aes256.c @@ -2,6 +2,7 @@ * Copyright (c) 2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/assert.c b/src/assert.c index 949af919d25..a690f46dc88 100644 --- a/src/assert.c +++ b/src/assert.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -160,42 +161,51 @@ fail: static int fido_dev_get_assert_rx(fido_dev_t *dev, fido_assert_t *assert, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; fido_assert_reset_rx(assert); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } /* start with room for a single assertion */ - if ((assert->stmt = calloc(1, sizeof(fido_assert_stmt))) == NULL) - return (FIDO_ERR_INTERNAL); - + if ((assert->stmt = calloc(1, sizeof(fido_assert_stmt))) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } assert->stmt_len = 0; assert->stmt_cnt = 1; /* adjust as needed */ - if ((r = cbor_parse_reply(reply, (size_t)reply_len, assert, + if ((r = cbor_parse_reply(msg, (size_t)msglen, assert, adjust_assert_count)) != FIDO_OK) { fido_log_debug("%s: adjust_assert_count", __func__); - return (r); + goto out; } /* parse the first assertion */ - if ((r = cbor_parse_reply(reply, (size_t)reply_len, - &assert->stmt[assert->stmt_len], parse_assert_reply)) != FIDO_OK) { + if ((r = cbor_parse_reply(msg, (size_t)msglen, &assert->stmt[0], + parse_assert_reply)) != FIDO_OK) { fido_log_debug("%s: parse_assert_reply", __func__); - return (r); + goto out; } + assert->stmt_len = 1; - assert->stmt_len++; + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); - return (FIDO_OK); + return (r); } static int @@ -214,30 +224,40 @@ fido_get_next_assert_tx(fido_dev_t *dev, int *ms) static int fido_get_next_assert_rx(fido_dev_t *dev, fido_assert_t *assert, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } /* sanity check */ if (assert->stmt_len >= assert->stmt_cnt) { fido_log_debug("%s: stmt_len=%zu, stmt_cnt=%zu", __func__, assert->stmt_len, assert->stmt_cnt); - return (FIDO_ERR_INTERNAL); + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, + if ((r = cbor_parse_reply(msg, (size_t)msglen, &assert->stmt[assert->stmt_len], parse_assert_reply)) != FIDO_OK) { fido_log_debug("%s: parse_assert_reply", __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -365,59 +385,108 @@ check_extensions(int authdata_ext, int ext) return (0); } +static int +get_es256_hash(fido_blob_t *dgst, const fido_blob_t *clientdata, + const fido_blob_t *authdata) +{ + const EVP_MD *md; + EVP_MD_CTX *ctx = NULL; + + if (dgst->len < SHA256_DIGEST_LENGTH || + (md = EVP_sha256()) == NULL || + (ctx = EVP_MD_CTX_new()) == NULL || + EVP_DigestInit_ex(ctx, md, NULL) != 1 || + EVP_DigestUpdate(ctx, authdata->ptr, authdata->len) != 1 || + EVP_DigestUpdate(ctx, clientdata->ptr, clientdata->len) != 1 || + EVP_DigestFinal_ex(ctx, dgst->ptr, NULL) != 1) { + EVP_MD_CTX_free(ctx); + return (-1); + } + dgst->len = SHA256_DIGEST_LENGTH; + + EVP_MD_CTX_free(ctx); + + return (0); +} + +static int +get_es384_hash(fido_blob_t *dgst, const fido_blob_t *clientdata, + const fido_blob_t *authdata) +{ + const EVP_MD *md; + EVP_MD_CTX *ctx = NULL; + + if (dgst->len < SHA384_DIGEST_LENGTH || + (md = EVP_sha384()) == NULL || + (ctx = EVP_MD_CTX_new()) == NULL || + EVP_DigestInit_ex(ctx, md, NULL) != 1 || + EVP_DigestUpdate(ctx, authdata->ptr, authdata->len) != 1 || + EVP_DigestUpdate(ctx, clientdata->ptr, clientdata->len) != 1 || + EVP_DigestFinal_ex(ctx, dgst->ptr, NULL) != 1) { + EVP_MD_CTX_free(ctx); + return (-1); + } + dgst->len = SHA384_DIGEST_LENGTH; + + EVP_MD_CTX_free(ctx); + + return (0); +} + +static int +get_eddsa_hash(fido_blob_t *dgst, const fido_blob_t *clientdata, + const fido_blob_t *authdata) +{ + if (SIZE_MAX - authdata->len < clientdata->len || + dgst->len < authdata->len + clientdata->len) + return (-1); + + memcpy(dgst->ptr, authdata->ptr, authdata->len); + memcpy(dgst->ptr + authdata->len, clientdata->ptr, clientdata->len); + dgst->len = authdata->len + clientdata->len; + + return (0); +} + int fido_get_signed_hash(int cose_alg, fido_blob_t *dgst, const fido_blob_t *clientdata, const fido_blob_t *authdata_cbor) { cbor_item_t *item = NULL; - unsigned char *authdata_ptr = NULL; - size_t authdata_len; + fido_blob_t authdata; struct cbor_load_result cbor; - const EVP_MD *md = NULL; - EVP_MD_CTX *ctx = NULL; int ok = -1; + fido_log_debug("%s: cose_alg=%d", __func__, cose_alg); + if ((item = cbor_load(authdata_cbor->ptr, authdata_cbor->len, &cbor)) == NULL || cbor_isa_bytestring(item) == false || cbor_bytestring_is_definite(item) == false) { fido_log_debug("%s: authdata", __func__); goto fail; } + authdata.ptr = cbor_bytestring_handle(item); + authdata.len = cbor_bytestring_length(item); - authdata_ptr = cbor_bytestring_handle(item); - authdata_len = cbor_bytestring_length(item); - - if (cose_alg != COSE_EDDSA) { - if (dgst->len < SHA256_DIGEST_LENGTH || - (md = EVP_sha256()) == NULL || - (ctx = EVP_MD_CTX_new()) == NULL || - EVP_DigestInit_ex(ctx, md, NULL) != 1 || - EVP_DigestUpdate(ctx, authdata_ptr, authdata_len) != 1 || - EVP_DigestUpdate(ctx, clientdata->ptr, clientdata->len) != 1 || - EVP_DigestFinal_ex(ctx, dgst->ptr, NULL) != 1) { - fido_log_debug("%s: sha256", __func__); - goto fail; - } - dgst->len = SHA256_DIGEST_LENGTH; - } else { - if (SIZE_MAX - authdata_len < clientdata->len || - dgst->len < authdata_len + clientdata->len) { - fido_log_debug("%s: memcpy", __func__); - goto fail; - } - memcpy(dgst->ptr, authdata_ptr, authdata_len); - memcpy(dgst->ptr + authdata_len, clientdata->ptr, - clientdata->len); - dgst->len = authdata_len + clientdata->len; + switch (cose_alg) { + case COSE_ES256: + case COSE_RS256: + ok = get_es256_hash(dgst, clientdata, &authdata); + break; + case COSE_ES384: + ok = get_es384_hash(dgst, clientdata, &authdata); + break; + case COSE_EDDSA: + ok = get_eddsa_hash(dgst, clientdata, &authdata); + break; + default: + fido_log_debug("%s: unknown cose_alg", __func__); + break; } - - ok = 0; fail: if (item != NULL) cbor_decref(&item); - EVP_MD_CTX_free(ctx); - return (ok); } @@ -481,6 +550,9 @@ fido_assert_verify(const fido_assert_t *assert, size_t idx, int cose_alg, case COSE_ES256: ok = es256_pk_verify_sig(&dgst, pk, &stmt->sig); break; + case COSE_ES384: + ok = es384_pk_verify_sig(&dgst, pk, &stmt->sig); + break; case COSE_RS256: ok = rs256_pk_verify_sig(&dgst, pk, &stmt->sig); break; @@ -676,7 +748,8 @@ fido_assert_reset_tx(fido_assert_t *assert) assert->uv = FIDO_OPT_OMIT; } -static void fido_assert_reset_extattr(fido_assert_extattr_t *ext) +static void +fido_assert_reset_extattr(fido_assert_extattr_t *ext) { fido_blob_reset(&ext->hmac_secret_enc); fido_blob_reset(&ext->blob); diff --git a/src/authkey.c b/src/authkey.c index 33e0a8d44bd..761562b26a1 100644 --- a/src/authkey.c +++ b/src/authkey.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" @@ -60,22 +61,31 @@ fail: static int fido_dev_authkey_rx(fido_dev_t *dev, es256_pk_t *authkey, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; + unsigned char *msg; + int msglen; + int r; fido_log_debug("%s: dev=%p, authkey=%p, ms=%d", __func__, (void *)dev, (void *)authkey, *ms); memset(authkey, 0, sizeof(*authkey)); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - return (cbor_parse_reply(reply, (size_t)reply_len, authkey, - parse_authkey)); + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + r = cbor_parse_reply(msg, (size_t)msglen, authkey, parse_authkey); +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int diff --git a/src/bio.c b/src/bio.c index 8c52de5d76c..57db85f53b2 100644 --- a/src/bio.c +++ b/src/bio.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" @@ -233,25 +234,34 @@ bio_parse_template_array(const cbor_item_t *key, const cbor_item_t *val, static int bio_rx_template_array(fido_dev_t *dev, fido_bio_template_array_t *ta, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; bio_reset_template_array(ta); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, ta, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, ta, bio_parse_template_array)) != FIDO_OK) { fido_log_debug("%s: bio_parse_template_array" , __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -385,33 +395,43 @@ static int bio_rx_enroll_begin(fido_dev_t *dev, fido_bio_template_t *t, fido_bio_enroll_t *e, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; bio_reset_template(t); e->remaining_samples = 0; e->last_status = 0; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, e, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, e, bio_parse_enroll_status)) != FIDO_OK) { fido_log_debug("%s: bio_parse_enroll_status", __func__); - return (r); - } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, &t->id, - bio_parse_template_id)) != FIDO_OK) { - fido_log_debug("%s: bio_parse_template_id", __func__); - return (r); + goto out; } - return (FIDO_OK); + if ((r = cbor_parse_reply(msg, (size_t)msglen, &t->id, + bio_parse_template_id)) != FIDO_OK) { + fido_log_debug("%s: bio_parse_template_id", __func__); + goto out; + } + + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -487,26 +507,35 @@ fail: static int bio_rx_enroll_continue(fido_dev_t *dev, fido_bio_enroll_t *e, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; e->remaining_samples = 0; e->last_status = 0; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, e, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, e, bio_parse_enroll_status)) != FIDO_OK) { fido_log_debug("%s: bio_parse_enroll_status", __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -654,25 +683,34 @@ bio_parse_info(const cbor_item_t *key, const cbor_item_t *val, void *arg) static int bio_rx_info(fido_dev_t *dev, fido_bio_info_t *i, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; bio_reset_info(i); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, i, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, i, bio_parse_info)) != FIDO_OK) { fido_log_debug("%s: bio_parse_info" , __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int diff --git a/src/blob.c b/src/blob.c index 31e4cab0edc..b431f49a00f 100644 --- a/src/blob.c +++ b/src/blob.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/blob.h b/src/blob.h index 76a8dd994f2..72471859551 100644 --- a/src/blob.h +++ b/src/blob.h @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _BLOB_H diff --git a/src/buf.c b/src/buf.c index f7161e64a9c..42b6df1c24f 100644 --- a/src/buf.c +++ b/src/buf.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/cbor.c b/src/cbor.c index 8b7edece3d8..ab99b34da08 100644 --- a/src/cbor.c +++ b/src/cbor.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -998,7 +999,13 @@ get_cose_alg(const cbor_item_t *item, int *cose_alg) fido_log_debug("%s: invalid kty/crv", __func__); return (-1); } - + break; + case COSE_ES384: + if (cose_key.kty != COSE_KTY_EC2 || + cose_key.crv != COSE_P384) { + fido_log_debug("%s: invalid kty/crv", __func__); + return (-1); + } break; case COSE_EDDSA: if (cose_key.kty != COSE_KTY_OKP || @@ -1006,14 +1013,12 @@ get_cose_alg(const cbor_item_t *item, int *cose_alg) fido_log_debug("%s: invalid kty/crv", __func__); return (-1); } - break; case COSE_RS256: if (cose_key.kty != COSE_KTY_RSA) { fido_log_debug("%s: invalid kty/crv", __func__); return (-1); } - break; default: fido_log_debug("%s: unknown alg %d", __func__, cose_key.alg); @@ -1041,6 +1046,12 @@ cbor_decode_pubkey(const cbor_item_t *item, int *type, void *key) return (-1); } break; + case COSE_ES384: + if (es384_pk_decode(item, key) < 0) { + fido_log_debug("%s: es384_pk_decode", __func__); + return (-1); + } + break; case COSE_RS256: if (rs256_pk_decode(item, key) < 0) { fido_log_debug("%s: rs256_pk_decode", __func__); @@ -1135,10 +1146,8 @@ decode_cred_extension(const cbor_item_t *key, const cbor_item_t *val, void *arg) } if (strcmp(type, "hmac-secret") == 0) { - if (cbor_isa_float_ctrl(val) == false || - cbor_float_get_width(val) != CBOR_FLOAT_0 || - cbor_is_bool(val) == false) { - fido_log_debug("%s: cbor type", __func__); + if (cbor_decode_bool(val, NULL) < 0) { + fido_log_debug("%s: cbor_decode_bool", __func__); goto out; } if (cbor_ctrl_value(val) == CBOR_CTRL_TRUE) @@ -1152,10 +1161,8 @@ decode_cred_extension(const cbor_item_t *key, const cbor_item_t *val, void *arg) authdata_ext->mask |= FIDO_EXT_CRED_PROTECT; authdata_ext->prot = cbor_get_uint8(val); } else if (strcmp(type, "credBlob") == 0) { - if (cbor_isa_float_ctrl(val) == false || - cbor_float_get_width(val) != CBOR_FLOAT_0 || - cbor_is_bool(val) == false) { - fido_log_debug("%s: cbor type", __func__); + if (cbor_decode_bool(val, NULL) < 0) { + fido_log_debug("%s: cbor_decode_bool", __func__); goto out; } if (cbor_ctrl_value(val) == CBOR_CTRL_TRUE) @@ -1407,8 +1414,9 @@ decode_attstmt_entry(const cbor_item_t *key, const cbor_item_t *val, void *arg) goto out; } attstmt->alg = -(int)cbor_get_int(val) - 1; - if (attstmt->alg != COSE_ES256 && attstmt->alg != COSE_RS256 && - attstmt->alg != COSE_EDDSA && attstmt->alg != COSE_RS1) { + if (attstmt->alg != COSE_ES256 && attstmt->alg != COSE_ES384 && + attstmt->alg != COSE_RS256 && attstmt->alg != COSE_EDDSA && + attstmt->alg != COSE_RS1) { fido_log_debug("%s: unsupported attstmt->alg=%d", __func__, attstmt->alg); goto out; @@ -1619,6 +1627,22 @@ cbor_decode_rp_entity(const cbor_item_t *item, fido_rp_t *rp) return (0); } +int +cbor_decode_bool(const cbor_item_t *item, bool *v) +{ + if (cbor_isa_float_ctrl(item) == false || + cbor_float_get_width(item) != CBOR_FLOAT_0 || + cbor_is_bool(item) == false) { + fido_log_debug("%s: cbor type", __func__); + return (-1); + } + + if (v != NULL) + *v = cbor_ctrl_value(item) == CBOR_CTRL_TRUE; + + return (0); +} + cbor_item_t * cbor_build_uint(const uint64_t value) { diff --git a/src/compress.c b/src/compress.c index 074bca87648..3be6fd52fc3 100644 --- a/src/compress.c +++ b/src/compress.c @@ -2,6 +2,7 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/config.c b/src/config.c index 2baaab0fd62..5302e118b63 100644 --- a/src/config.c +++ b/src/config.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2020 Yubico AB. All rights reserved. + * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" @@ -16,15 +17,17 @@ static int config_prepare_hmac(uint8_t subcmd, const cbor_item_t *item, fido_blob_t *hmac) { uint8_t prefix[32 + 2 * sizeof(uint8_t)], cbor[128]; - size_t cbor_len; + size_t cbor_len = 0; memset(prefix, 0xff, sizeof(prefix)); prefix[sizeof(prefix) - 2] = CTAP_CBOR_CONFIG; prefix[sizeof(prefix) - 1] = subcmd; - if ((cbor_len = cbor_serialize(item, cbor, sizeof(cbor))) == 0) { - fido_log_debug("%s: cbor_serialize", __func__); - return -1; + if (item != NULL) { + if ((cbor_len = cbor_serialize(item, cbor, sizeof(cbor))) == 0) { + fido_log_debug("%s: cbor_serialize", __func__); + return -1; + } } if ((hmac->ptr = malloc(cbor_len + sizeof(prefix))) == NULL) { fido_log_debug("%s: malloc", __func__); @@ -57,13 +60,16 @@ config_tx(fido_dev_t *dev, uint8_t subcmd, cbor_item_t **paramv, size_t paramc, goto fail; } + /* subCommandParams */ + if (paramc != 0 && + (argv[1] = cbor_flatten_vector(paramv, paramc)) == NULL) { + fido_log_debug("%s: cbor_flatten_vector", __func__); + goto fail; + } + /* pinProtocol, pinAuth */ - if (pin != NULL || (fido_dev_supports_permissions(dev) && - fido_dev_has_uv(dev))) { - if ((argv[1] = cbor_flatten_vector(paramv, paramc)) == NULL) { - fido_log_debug("%s: cbor_flatten_vector", __func__); - goto fail; - } + if (pin != NULL || + (fido_dev_supports_permissions(dev) && fido_dev_has_uv(dev))) { if (config_prepare_hmac(subcmd, argv[1], &hmac) < 0) { fido_log_debug("%s: config_prepare_hmac", __func__); goto fail; diff --git a/src/cred.c b/src/cred.c index 6da502c8d90..188afe4e64a 100644 --- a/src/cred.c +++ b/src/cred.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -251,7 +252,7 @@ get_signed_hash_u2f(fido_blob_t *dgst, const unsigned char *rp_id, EVP_MD_CTX *ctx = NULL; int ok = -1; - if (dgst->len != SHA256_DIGEST_LENGTH || + if (dgst->len < SHA256_DIGEST_LENGTH || (md = EVP_sha256()) == NULL || (ctx = EVP_MD_CTX_new()) == NULL || EVP_DigestInit_ex(ctx, md, NULL) != 1 || @@ -266,6 +267,7 @@ get_signed_hash_u2f(fido_blob_t *dgst, const unsigned char *rp_id, fido_log_debug("%s: sha256", __func__); goto fail; } + dgst->len = SHA256_DIGEST_LENGTH; ok = 0; fail: @@ -302,6 +304,9 @@ verify_attstmt(const fido_blob_t *dgst, const fido_attstmt_t *attstmt) case COSE_ES256: ok = es256_verify_sig(dgst, pkey, &attstmt->sig); break; + case COSE_ES384: + ok = es384_verify_sig(dgst, pkey, &attstmt->sig); + break; case COSE_RS256: ok = rs256_verify_sig(dgst, pkey, &attstmt->sig); break; @@ -327,8 +332,9 @@ fail: int fido_cred_verify(const fido_cred_t *cred) { - unsigned char buf[SHA256_DIGEST_LENGTH]; + unsigned char buf[1024]; /* XXX */ fido_blob_t dgst; + int cose_alg; int r; dgst.ptr = buf; @@ -368,8 +374,11 @@ fido_cred_verify(const fido_cred_t *cred) goto out; } + if ((cose_alg = cred->attstmt.alg) == COSE_UNSPEC) + cose_alg = COSE_ES256; /* backwards compat */ + if (!strcmp(cred->fmt, "packed")) { - if (fido_get_signed_hash(COSE_ES256, &dgst, &cred->cdh, + if (fido_get_signed_hash(cose_alg, &dgst, &cred->cdh, &cred->authdata_cbor) < 0) { fido_log_debug("%s: fido_get_signed_hash", __func__); r = FIDO_ERR_INTERNAL; @@ -480,6 +489,10 @@ fido_cred_verify_self(const fido_cred_t *cred) ok = es256_pk_verify_sig(&dgst, &cred->attcred.pubkey.es256, &cred->attstmt.sig); break; + case COSE_ES384: + ok = es384_pk_verify_sig(&dgst, &cred->attcred.pubkey.es384, + &cred->attstmt.sig); + break; case COSE_RS256: ok = rs256_pk_verify_sig(&dgst, &cred->attcred.pubkey.rs256, &cred->attstmt.sig); @@ -965,8 +978,10 @@ fido_cred_set_fmt(fido_cred_t *cred, const char *fmt) int fido_cred_set_type(fido_cred_t *cred, int cose_alg) { - if ((cose_alg != COSE_ES256 && cose_alg != COSE_RS256 && - cose_alg != COSE_EDDSA) || cred->type != 0) + if (cred->type != 0) + return (FIDO_ERR_INVALID_ARGUMENT); + if (cose_alg != COSE_ES256 && cose_alg != COSE_ES384 && + cose_alg != COSE_RS256 && cose_alg != COSE_EDDSA) return (FIDO_ERR_INVALID_ARGUMENT); cred->type = cose_alg; @@ -1073,6 +1088,9 @@ fido_cred_pubkey_ptr(const fido_cred_t *cred) case COSE_ES256: ptr = &cred->attcred.pubkey.es256; break; + case COSE_ES384: + ptr = &cred->attcred.pubkey.es384; + break; case COSE_RS256: ptr = &cred->attcred.pubkey.rs256; break; @@ -1096,6 +1114,9 @@ fido_cred_pubkey_len(const fido_cred_t *cred) case COSE_ES256: len = sizeof(cred->attcred.pubkey.es256); break; + case COSE_ES384: + len = sizeof(cred->attcred.pubkey.es384); + break; case COSE_RS256: len = sizeof(cred->attcred.pubkey.rs256); break; diff --git a/src/credman.c b/src/credman.c index 8d2649a144f..c3642423381 100644 --- a/src/credman.c +++ b/src/credman.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019-2021 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -19,7 +20,7 @@ #define CMD_UPDATE_CRED 0x07 static int -credman_grow_array(void **ptr, size_t *n_alloc, size_t *n_rx, size_t n, +credman_grow_array(void **ptr, size_t *n_alloc, const size_t *n_rx, size_t n, size_t size) { void *new_ptr; @@ -200,25 +201,34 @@ credman_parse_metadata(const cbor_item_t *key, const cbor_item_t *val, static int credman_rx_metadata(fido_dev_t *dev, fido_credman_metadata_t *metadata, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; memset(metadata, 0, sizeof(*metadata)); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, metadata, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, metadata, credman_parse_metadata)) != FIDO_OK) { fido_log_debug("%s: credman_parse_metadata", __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -325,69 +335,88 @@ credman_parse_rk_count(const cbor_item_t *key, const cbor_item_t *val, static int credman_rx_rk(fido_dev_t *dev, fido_credman_rk_t *rk, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; credman_reset_rk(rk); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } /* adjust as needed */ - if ((r = cbor_parse_reply(reply, (size_t)reply_len, rk, + if ((r = cbor_parse_reply(msg, (size_t)msglen, rk, credman_parse_rk_count)) != FIDO_OK) { fido_log_debug("%s: credman_parse_rk_count", __func__); - return (r); + goto out; } if (rk->n_alloc == 0) { fido_log_debug("%s: n_alloc=0", __func__); - return (FIDO_OK); + r = FIDO_OK; + goto out; } /* parse the first rk */ - if ((r = cbor_parse_reply(reply, (size_t)reply_len, &rk->ptr[0], + if ((r = cbor_parse_reply(msg, (size_t)msglen, &rk->ptr[0], credman_parse_rk)) != FIDO_OK) { fido_log_debug("%s: credman_parse_rk", __func__); - return (r); + goto out; } + rk->n_rx = 1; - rk->n_rx++; + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); - return (FIDO_OK); + return (r); } static int credman_rx_next_rk(fido_dev_t *dev, fido_credman_rk_t *rk, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } /* sanity check */ if (rk->n_rx >= rk->n_alloc) { fido_log_debug("%s: n_rx=%zu, n_alloc=%zu", __func__, rk->n_rx, rk->n_alloc); - return (FIDO_ERR_INTERNAL); + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, &rk->ptr[rk->n_rx], + if ((r = cbor_parse_reply(msg, (size_t)msglen, &rk->ptr[rk->n_rx], credman_parse_rk)) != FIDO_OK) { fido_log_debug("%s: credman_parse_rk", __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -534,69 +563,88 @@ credman_parse_rp_count(const cbor_item_t *key, const cbor_item_t *val, static int credman_rx_rp(fido_dev_t *dev, fido_credman_rp_t *rp, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; credman_reset_rp(rp); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } /* adjust as needed */ - if ((r = cbor_parse_reply(reply, (size_t)reply_len, rp, + if ((r = cbor_parse_reply(msg, (size_t)msglen, rp, credman_parse_rp_count)) != FIDO_OK) { fido_log_debug("%s: credman_parse_rp_count", __func__); - return (r); + goto out; } if (rp->n_alloc == 0) { fido_log_debug("%s: n_alloc=0", __func__); - return (FIDO_OK); + r = FIDO_OK; + goto out; } /* parse the first rp */ - if ((r = cbor_parse_reply(reply, (size_t)reply_len, &rp->ptr[0], + if ((r = cbor_parse_reply(msg, (size_t)msglen, &rp->ptr[0], credman_parse_rp)) != FIDO_OK) { fido_log_debug("%s: credman_parse_rp", __func__); - return (r); + goto out; } + rp->n_rx = 1; - rp->n_rx++; + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); - return (FIDO_OK); + return (r); } static int credman_rx_next_rp(fido_dev_t *dev, fido_credman_rp_t *rp, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } /* sanity check */ if (rp->n_rx >= rp->n_alloc) { fido_log_debug("%s: n_rx=%zu, n_alloc=%zu", __func__, rp->n_rx, rp->n_alloc); - return (FIDO_ERR_INTERNAL); + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, &rp->ptr[rp->n_rx], + if ((r = cbor_parse_reply(msg, (size_t)msglen, &rp->ptr[rp->n_rx], credman_parse_rp)) != FIDO_OK) { fido_log_debug("%s: credman_parse_rp", __func__); - return (r); + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int diff --git a/src/dev.c b/src/dev.c index 635e4171475..2d662a6cc48 100644 --- a/src/dev.c +++ b/src/dev.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/diff_exports.sh b/src/diff_exports.sh index 9cff0095a20..2e15cd0c5b9 100755 --- a/src/diff_exports.sh +++ b/src/diff_exports.sh @@ -3,6 +3,7 @@ # Copyright (c) 2018 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause for f in export.gnu export.llvm export.msvc; do if [ ! -f "${f}" ]; then diff --git a/src/ecdh.c b/src/ecdh.c index 9c4f2b99e1a..878f97615e3 100644 --- a/src/ecdh.c +++ b/src/ecdh.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/eddsa.c b/src/eddsa.c index a94ae302391..d043f89f9f3 100644 --- a/src/eddsa.c +++ b/src/eddsa.c @@ -2,6 +2,7 @@ * Copyright (c) 2019-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/err.c b/src/err.c index 8c2ae5ff417..3a6f3e0a612 100644 --- a/src/err.c +++ b/src/err.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido/err.h" diff --git a/src/es256.c b/src/es256.c index 4d6e86f8a26..17efb0ad2c1 100644 --- a/src/es256.c +++ b/src/es256.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/es384.c b/src/es384.c new file mode 100644 index 00000000000..013d285ef7f --- /dev/null +++ b/src/es384.c @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2022 Yubico AB. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +#include "fido.h" +#include "fido/es384.h" + +#if OPENSSL_VERSION_NUMBER >= 0x30000000 +#define get0_EC_KEY(x) EVP_PKEY_get0_EC_KEY((x)) +#else +#define get0_EC_KEY(x) EVP_PKEY_get0((x)) +#endif + +static int +decode_coord(const cbor_item_t *item, void *xy, size_t xy_len) +{ + if (cbor_isa_bytestring(item) == false || + cbor_bytestring_is_definite(item) == false || + cbor_bytestring_length(item) != xy_len) { + fido_log_debug("%s: cbor type", __func__); + return (-1); + } + + memcpy(xy, cbor_bytestring_handle(item), xy_len); + + return (0); +} + +static int +decode_pubkey_point(const cbor_item_t *key, const cbor_item_t *val, void *arg) +{ + es384_pk_t *k = arg; + + if (cbor_isa_negint(key) == false || + cbor_int_get_width(key) != CBOR_INT_8) + return (0); /* ignore */ + + switch (cbor_get_uint8(key)) { + case 1: /* x coordinate */ + return (decode_coord(val, &k->x, sizeof(k->x))); + case 2: /* y coordinate */ + return (decode_coord(val, &k->y, sizeof(k->y))); + } + + return (0); /* ignore */ +} + +int +es384_pk_decode(const cbor_item_t *item, es384_pk_t *k) +{ + if (cbor_isa_map(item) == false || + cbor_map_is_definite(item) == false || + cbor_map_iter(item, k, decode_pubkey_point) < 0) { + fido_log_debug("%s: cbor type", __func__); + return (-1); + } + + return (0); +} + +es384_pk_t * +es384_pk_new(void) +{ + return (calloc(1, sizeof(es384_pk_t))); +} + +void +es384_pk_free(es384_pk_t **pkp) +{ + es384_pk_t *pk; + + if (pkp == NULL || (pk = *pkp) == NULL) + return; + + freezero(pk, sizeof(*pk)); + *pkp = NULL; +} + +int +es384_pk_from_ptr(es384_pk_t *pk, const void *ptr, size_t len) +{ + const uint8_t *p = ptr; + EVP_PKEY *pkey; + + if (len < sizeof(*pk)) + return (FIDO_ERR_INVALID_ARGUMENT); + + if (len == sizeof(*pk) + 1 && *p == 0x04) + memcpy(pk, ++p, sizeof(*pk)); /* uncompressed format */ + else + memcpy(pk, ptr, sizeof(*pk)); /* libfido2 x||y format */ + + if ((pkey = es384_pk_to_EVP_PKEY(pk)) == NULL) { + fido_log_debug("%s: es384_pk_to_EVP_PKEY", __func__); + explicit_bzero(pk, sizeof(*pk)); + return (FIDO_ERR_INVALID_ARGUMENT); + } + + EVP_PKEY_free(pkey); + + return (FIDO_OK); +} + +EVP_PKEY * +es384_pk_to_EVP_PKEY(const es384_pk_t *k) +{ + BN_CTX *bnctx = NULL; + EC_KEY *ec = NULL; + EC_POINT *q = NULL; + EVP_PKEY *pkey = NULL; + BIGNUM *x = NULL; + BIGNUM *y = NULL; + const EC_GROUP *g = NULL; + int ok = -1; + + if ((bnctx = BN_CTX_new()) == NULL) + goto fail; + + BN_CTX_start(bnctx); + + if ((x = BN_CTX_get(bnctx)) == NULL || + (y = BN_CTX_get(bnctx)) == NULL) + goto fail; + + if (BN_bin2bn(k->x, sizeof(k->x), x) == NULL || + BN_bin2bn(k->y, sizeof(k->y), y) == NULL) { + fido_log_debug("%s: BN_bin2bn", __func__); + goto fail; + } + + if ((ec = EC_KEY_new_by_curve_name(NID_secp384r1)) == NULL || + (g = EC_KEY_get0_group(ec)) == NULL) { + fido_log_debug("%s: EC_KEY init", __func__); + goto fail; + } + + if ((q = EC_POINT_new(g)) == NULL || + EC_POINT_set_affine_coordinates_GFp(g, q, x, y, bnctx) == 0 || + EC_KEY_set_public_key(ec, q) == 0) { + fido_log_debug("%s: EC_KEY_set_public_key", __func__); + goto fail; + } + + if ((pkey = EVP_PKEY_new()) == NULL || + EVP_PKEY_assign_EC_KEY(pkey, ec) == 0) { + fido_log_debug("%s: EVP_PKEY_assign_EC_KEY", __func__); + goto fail; + } + + ec = NULL; /* at this point, ec belongs to evp */ + + ok = 0; +fail: + if (bnctx != NULL) { + BN_CTX_end(bnctx); + BN_CTX_free(bnctx); + } + + if (ec != NULL) + EC_KEY_free(ec); + if (q != NULL) + EC_POINT_free(q); + + if (ok < 0 && pkey != NULL) { + EVP_PKEY_free(pkey); + pkey = NULL; + } + + return (pkey); +} + +int +es384_pk_from_EC_KEY(es384_pk_t *pk, const EC_KEY *ec) +{ + BN_CTX *bnctx = NULL; + BIGNUM *x = NULL; + BIGNUM *y = NULL; + const EC_POINT *q = NULL; + EC_GROUP *g = NULL; + size_t dx; + size_t dy; + int ok = FIDO_ERR_INTERNAL; + int nx; + int ny; + + if ((q = EC_KEY_get0_public_key(ec)) == NULL || + (g = EC_GROUP_new_by_curve_name(NID_secp384r1)) == NULL || + (bnctx = BN_CTX_new()) == NULL) + goto fail; + + BN_CTX_start(bnctx); + + if ((x = BN_CTX_get(bnctx)) == NULL || + (y = BN_CTX_get(bnctx)) == NULL) + goto fail; + + if (EC_POINT_is_on_curve(g, q, bnctx) != 1) { + fido_log_debug("%s: EC_POINT_is_on_curve", __func__); + ok = FIDO_ERR_INVALID_ARGUMENT; + goto fail; + } + + if (EC_POINT_get_affine_coordinates_GFp(g, q, x, y, bnctx) == 0 || + (nx = BN_num_bytes(x)) < 0 || (size_t)nx > sizeof(pk->x) || + (ny = BN_num_bytes(y)) < 0 || (size_t)ny > sizeof(pk->y)) { + fido_log_debug("%s: EC_POINT_get_affine_coordinates_GFp", + __func__); + goto fail; + } + + dx = sizeof(pk->x) - (size_t)nx; + dy = sizeof(pk->y) - (size_t)ny; + + if ((nx = BN_bn2bin(x, pk->x + dx)) < 0 || (size_t)nx > sizeof(pk->x) || + (ny = BN_bn2bin(y, pk->y + dy)) < 0 || (size_t)ny > sizeof(pk->y)) { + fido_log_debug("%s: BN_bn2bin", __func__); + goto fail; + } + + ok = FIDO_OK; +fail: + EC_GROUP_free(g); + + if (bnctx != NULL) { + BN_CTX_end(bnctx); + BN_CTX_free(bnctx); + } + + return (ok); +} + +int +es384_pk_from_EVP_PKEY(es384_pk_t *pk, const EVP_PKEY *pkey) +{ + const EC_KEY *ec; + + if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC || + (ec = get0_EC_KEY(pkey)) == NULL) + return (FIDO_ERR_INVALID_ARGUMENT); + + return (es384_pk_from_EC_KEY(pk, ec)); +} + +int +es384_verify_sig(const fido_blob_t *dgst, EVP_PKEY *pkey, + const fido_blob_t *sig) +{ + EVP_PKEY_CTX *pctx = NULL; + int ok = -1; + + if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) { + fido_log_debug("%s: EVP_PKEY_base_id", __func__); + goto fail; + } + + if ((pctx = EVP_PKEY_CTX_new(pkey, NULL)) == NULL || + EVP_PKEY_verify_init(pctx) != 1 || + EVP_PKEY_verify(pctx, sig->ptr, sig->len, dgst->ptr, + dgst->len) != 1) { + fido_log_debug("%s: EVP_PKEY_verify", __func__); + goto fail; + } + + ok = 0; +fail: + EVP_PKEY_CTX_free(pctx); + + return (ok); +} + +int +es384_pk_verify_sig(const fido_blob_t *dgst, const es384_pk_t *pk, + const fido_blob_t *sig) +{ + EVP_PKEY *pkey; + int ok = -1; + + if ((pkey = es384_pk_to_EVP_PKEY(pk)) == NULL || + es384_verify_sig(dgst, pkey, sig) < 0) { + fido_log_debug("%s: es384_verify_sig", __func__); + goto fail; + } + + ok = 0; +fail: + EVP_PKEY_free(pkey); + + return (ok); +} diff --git a/src/export.gnu b/src/export.gnu index 8fc94af31c9..6916837ecbc 100644 --- a/src/export.gnu +++ b/src/export.gnu @@ -11,6 +11,12 @@ es256_pk_from_ptr; es256_pk_new; es256_pk_to_EVP_PKEY; + es384_pk_free; + es384_pk_from_EC_KEY; + es384_pk_from_EVP_PKEY; + es384_pk_from_ptr; + es384_pk_new; + es384_pk_to_EVP_PKEY; fido_assert_allow_cred; fido_assert_authdata_len; fido_assert_authdata_ptr; @@ -82,23 +88,32 @@ fido_cbor_info_algorithm_cose; fido_cbor_info_algorithm_count; fido_cbor_info_algorithm_type; + fido_cbor_info_certs_len; + fido_cbor_info_certs_name_ptr; + fido_cbor_info_certs_value_ptr; fido_cbor_info_extensions_len; fido_cbor_info_extensions_ptr; fido_cbor_info_free; + fido_cbor_info_fwversion; fido_cbor_info_maxcredbloblen; fido_cbor_info_maxcredcntlst; fido_cbor_info_maxcredidlen; fido_cbor_info_maxlargeblob; fido_cbor_info_maxmsgsiz; - fido_cbor_info_fwversion; + fido_cbor_info_maxrpid_minpinlen; + fido_cbor_info_minpinlen; fido_cbor_info_new; + fido_cbor_info_new_pin_required; fido_cbor_info_options_len; fido_cbor_info_options_name_ptr; fido_cbor_info_options_value_ptr; fido_cbor_info_protocols_len; fido_cbor_info_protocols_ptr; + fido_cbor_info_rk_remaining; fido_cbor_info_transports_len; fido_cbor_info_transports_ptr; + fido_cbor_info_uv_attempts; + fido_cbor_info_uv_modality; fido_cbor_info_versions_len; fido_cbor_info_versions_ptr; fido_cred_attstmt_len; diff --git a/src/export.llvm b/src/export.llvm index df9a667f747..bd21fb4a54f 100644 --- a/src/export.llvm +++ b/src/export.llvm @@ -9,6 +9,12 @@ _es256_pk_from_EVP_PKEY _es256_pk_from_ptr _es256_pk_new _es256_pk_to_EVP_PKEY +_es384_pk_free +_es384_pk_from_EC_KEY +_es384_pk_from_EVP_PKEY +_es384_pk_from_ptr +_es384_pk_new +_es384_pk_to_EVP_PKEY _fido_assert_allow_cred _fido_assert_authdata_len _fido_assert_authdata_ptr @@ -80,23 +86,32 @@ _fido_cbor_info_aaguid_ptr _fido_cbor_info_algorithm_cose _fido_cbor_info_algorithm_count _fido_cbor_info_algorithm_type +_fido_cbor_info_certs_len +_fido_cbor_info_certs_name_ptr +_fido_cbor_info_certs_value_ptr _fido_cbor_info_extensions_len _fido_cbor_info_extensions_ptr _fido_cbor_info_free +_fido_cbor_info_fwversion _fido_cbor_info_maxcredbloblen _fido_cbor_info_maxcredcntlst _fido_cbor_info_maxcredidlen _fido_cbor_info_maxlargeblob _fido_cbor_info_maxmsgsiz -_fido_cbor_info_fwversion +_fido_cbor_info_maxrpid_minpinlen +_fido_cbor_info_minpinlen _fido_cbor_info_new +_fido_cbor_info_new_pin_required _fido_cbor_info_options_len _fido_cbor_info_options_name_ptr _fido_cbor_info_options_value_ptr _fido_cbor_info_protocols_len _fido_cbor_info_protocols_ptr +_fido_cbor_info_rk_remaining _fido_cbor_info_transports_len _fido_cbor_info_transports_ptr +_fido_cbor_info_uv_attempts +_fido_cbor_info_uv_modality _fido_cbor_info_versions_len _fido_cbor_info_versions_ptr _fido_cred_attstmt_len diff --git a/src/export.msvc b/src/export.msvc index a9082152f5c..55147f99e67 100644 --- a/src/export.msvc +++ b/src/export.msvc @@ -10,6 +10,12 @@ es256_pk_from_EVP_PKEY es256_pk_from_ptr es256_pk_new es256_pk_to_EVP_PKEY +es384_pk_free +es384_pk_from_EC_KEY +es384_pk_from_EVP_PKEY +es384_pk_from_ptr +es384_pk_new +es384_pk_to_EVP_PKEY fido_assert_allow_cred fido_assert_authdata_len fido_assert_authdata_ptr @@ -81,23 +87,32 @@ fido_cbor_info_aaguid_ptr fido_cbor_info_algorithm_cose fido_cbor_info_algorithm_count fido_cbor_info_algorithm_type +fido_cbor_info_certs_len +fido_cbor_info_certs_name_ptr +fido_cbor_info_certs_value_ptr fido_cbor_info_extensions_len fido_cbor_info_extensions_ptr fido_cbor_info_free +fido_cbor_info_fwversion fido_cbor_info_maxcredbloblen fido_cbor_info_maxcredcntlst fido_cbor_info_maxcredidlen fido_cbor_info_maxlargeblob fido_cbor_info_maxmsgsiz -fido_cbor_info_fwversion +fido_cbor_info_maxrpid_minpinlen +fido_cbor_info_minpinlen fido_cbor_info_new +fido_cbor_info_new_pin_required fido_cbor_info_options_len fido_cbor_info_options_name_ptr fido_cbor_info_options_value_ptr fido_cbor_info_protocols_len fido_cbor_info_protocols_ptr +fido_cbor_info_rk_remaining fido_cbor_info_transports_len fido_cbor_info_transports_ptr +fido_cbor_info_uv_attempts +fido_cbor_info_uv_modality fido_cbor_info_versions_len fido_cbor_info_versions_ptr fido_cred_attstmt_len diff --git a/src/extern.h b/src/extern.h index 84536d58b6f..1bc95b27805 100644 --- a/src/extern.h +++ b/src/extern.h @@ -2,6 +2,7 @@ * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _EXTERN_H @@ -57,6 +58,7 @@ cbor_item_t *es256_pk_encode(const es256_pk_t *, int); /* cbor decoding functions */ int cbor_decode_attstmt(const cbor_item_t *, fido_attstmt_t *); +int cbor_decode_bool(const cbor_item_t *, bool *); int cbor_decode_cred_authdata(const cbor_item_t *, int, fido_blob_t *, fido_authdata_t *, fido_attcred_t *, fido_cred_ext_t *); int cbor_decode_assert_authdata(const cbor_item_t *, fido_blob_t *, @@ -68,6 +70,7 @@ int cbor_decode_rp_entity(const cbor_item_t *, fido_rp_t *); int cbor_decode_uint64(const cbor_item_t *, uint64_t *); int cbor_decode_user(const cbor_item_t *, fido_user_t *); int es256_pk_decode(const cbor_item_t *, es256_pk_t *); +int es384_pk_decode(const cbor_item_t *, es384_pk_t *); int rs256_pk_decode(const cbor_item_t *, rs256_pk_t *); int eddsa_pk_decode(const cbor_item_t *, eddsa_pk_t *); @@ -119,6 +122,7 @@ size_t fido_hid_report_out_len(void *); /* nfc i/o */ bool fido_is_nfc(const char *); +bool nfc_is_fido(const char *); void *fido_nfc_open(const char *); void fido_nfc_close(void *); int fido_nfc_read(void *, unsigned char *, size_t, int); @@ -194,6 +198,7 @@ int fido_do_ecdh(fido_dev_t *, es256_pk_t **, fido_blob_t **, int *); /* types */ void fido_algo_array_free(fido_algo_array_t *); void fido_byte_array_free(fido_byte_array_t *); +void fido_cert_array_free(fido_cert_array_t *); void fido_opt_array_free(fido_opt_array_t *); void fido_str_array_free(fido_str_array_t *); void fido_algo_free(fido_algo_t *); @@ -216,11 +221,14 @@ int fido_to_uint64(const char *, int, uint64_t *); /* crypto */ int es256_verify_sig(const fido_blob_t *, EVP_PKEY *, const fido_blob_t *); +int es384_verify_sig(const fido_blob_t *, EVP_PKEY *, const fido_blob_t *); int rs256_verify_sig(const fido_blob_t *, EVP_PKEY *, const fido_blob_t *); int eddsa_verify_sig(const fido_blob_t *, EVP_PKEY *, const fido_blob_t *); int rs1_verify_sig(const fido_blob_t *, EVP_PKEY *, const fido_blob_t *); int es256_pk_verify_sig(const fido_blob_t *, const es256_pk_t *, const fido_blob_t *); +int es384_pk_verify_sig(const fido_blob_t *, const es384_pk_t *, + const fido_blob_t *); int rs256_pk_verify_sig(const fido_blob_t *, const rs256_pk_t *, const fido_blob_t *); int eddsa_pk_verify_sig(const fido_blob_t *, const eddsa_pk_t *, diff --git a/src/fallthrough.h b/src/fallthrough.h new file mode 100644 index 00000000000..bdfd30fd63e --- /dev/null +++ b/src/fallthrough.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 Yubico AB. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef _FALLTHROUGH_H +#define _FALLTHROUGH_H + +#if defined(__GNUC__) +#if __has_attribute(fallthrough) +#define FALLTHROUGH __attribute__((fallthrough)); +#endif +#endif /* __GNUC__ */ + +#ifndef FALLTHROUGH +#define FALLTHROUGH /* FALLTHROUGH */ +#endif + +#endif /* !_FALLTHROUGH_H */ diff --git a/src/fido.h b/src/fido.h index 63d6de87b5a..ce7da160619 100644 --- a/src/fido.h +++ b/src/fido.h @@ -1,7 +1,29 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_H @@ -66,6 +88,7 @@ const unsigned char *fido_assert_sig_ptr(const fido_assert_t *, size_t); const unsigned char *fido_assert_user_id_ptr(const fido_assert_t *, size_t); const unsigned char *fido_assert_blob_ptr(const fido_assert_t *, size_t); +char **fido_cbor_info_certs_name_ptr(const fido_cbor_info_t *); char **fido_cbor_info_extensions_ptr(const fido_cbor_info_t *); char **fido_cbor_info_options_name_ptr(const fido_cbor_info_t *); char **fido_cbor_info_transports_ptr(const fido_cbor_info_t *); @@ -86,6 +109,7 @@ const char *fido_dev_info_path(const fido_dev_info_t *); const char *fido_dev_info_product_string(const fido_dev_info_t *); const fido_dev_info_t *fido_dev_info_ptr(const fido_dev_info_t *, size_t); const uint8_t *fido_cbor_info_protocols_ptr(const fido_cbor_info_t *); +const uint64_t *fido_cbor_info_certs_value_ptr(const fido_cbor_info_t *); const unsigned char *fido_cbor_info_aaguid_ptr(const fido_cbor_info_t *); const unsigned char *fido_cred_aaguid_ptr(const fido_cred_t *); const unsigned char *fido_cred_attstmt_ptr(const fido_cred_t *); @@ -178,6 +202,7 @@ size_t fido_assert_user_id_len(const fido_assert_t *, size_t); size_t fido_assert_blob_len(const fido_assert_t *, size_t); size_t fido_cbor_info_aaguid_len(const fido_cbor_info_t *); size_t fido_cbor_info_algorithm_count(const fido_cbor_info_t *); +size_t fido_cbor_info_certs_len(const fido_cbor_info_t *); size_t fido_cbor_info_extensions_len(const fido_cbor_info_t *); size_t fido_cbor_info_options_len(const fido_cbor_info_t *); size_t fido_cbor_info_protocols_len(const fido_cbor_info_t *); @@ -207,12 +232,17 @@ uint8_t fido_dev_build(const fido_dev_t *); uint8_t fido_dev_flags(const fido_dev_t *); int16_t fido_dev_info_vendor(const fido_dev_info_t *); int16_t fido_dev_info_product(const fido_dev_info_t *); +uint64_t fido_cbor_info_fwversion(const fido_cbor_info_t *); uint64_t fido_cbor_info_maxcredbloblen(const fido_cbor_info_t *); uint64_t fido_cbor_info_maxcredcntlst(const fido_cbor_info_t *); uint64_t fido_cbor_info_maxcredidlen(const fido_cbor_info_t *); uint64_t fido_cbor_info_maxlargeblob(const fido_cbor_info_t *); uint64_t fido_cbor_info_maxmsgsiz(const fido_cbor_info_t *); -uint64_t fido_cbor_info_fwversion(const fido_cbor_info_t *); +uint64_t fido_cbor_info_maxrpid_minpinlen(const fido_cbor_info_t *); +uint64_t fido_cbor_info_minpinlen(const fido_cbor_info_t *); +uint64_t fido_cbor_info_uv_attempts(const fido_cbor_info_t *); +uint64_t fido_cbor_info_uv_modality(const fido_cbor_info_t *); +int64_t fido_cbor_info_rk_remaining(const fido_cbor_info_t *); bool fido_dev_has_pin(const fido_dev_t *); bool fido_dev_has_uv(const fido_dev_t *); @@ -223,6 +253,7 @@ bool fido_dev_supports_cred_prot(const fido_dev_t *); bool fido_dev_supports_permissions(const fido_dev_t *); bool fido_dev_supports_pin(const fido_dev_t *); bool fido_dev_supports_uv(const fido_dev_t *); +bool fido_cbor_info_new_pin_required(const fido_cbor_info_t *); int fido_dev_largeblob_get(fido_dev_t *, const unsigned char *, size_t, unsigned char **, size_t *); diff --git a/src/fido/bio.h b/src/fido/bio.h index afe9ca4752b..f5039e03dc9 100644 --- a/src/fido/bio.h +++ b/src/fido/bio.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2019 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_BIO_H diff --git a/src/fido/config.h b/src/fido/config.h index d8134a3c7b6..cba286f08f8 100644 --- a/src/fido/config.h +++ b/src/fido/config.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2020 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_CONFIG_H diff --git a/src/fido/credman.h b/src/fido/credman.h index 66a96697050..9f9dff1d5f0 100644 --- a/src/fido/credman.h +++ b/src/fido/credman.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2019-2021 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_CREDMAN_H diff --git a/src/fido/eddsa.h b/src/fido/eddsa.h index 083721cc3d3..7981a6f8bae 100644 --- a/src/fido/eddsa.h +++ b/src/fido/eddsa.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2019 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_EDDSA_H diff --git a/src/fido/err.h b/src/fido/err.h index 74fdf9d2bfe..7db25f26912 100644 --- a/src/fido/err.h +++ b/src/fido/err.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2018 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_ERR_H diff --git a/src/fido/es256.h b/src/fido/es256.h index 683494dadfe..0450de29e83 100644 --- a/src/fido/es256.h +++ b/src/fido/es256.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2018-2021 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_ES256_H diff --git a/src/fido/es384.h b/src/fido/es384.h new file mode 100644 index 00000000000..b4b4ca71ccb --- /dev/null +++ b/src/fido/es384.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Yubico AB. All rights reserved. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FIDO_ES384_H +#define _FIDO_ES384_H + +#include + +#include +#include + +#ifdef _FIDO_INTERNAL +#include "types.h" +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +es384_pk_t *es384_pk_new(void); +void es384_pk_free(es384_pk_t **); +EVP_PKEY *es384_pk_to_EVP_PKEY(const es384_pk_t *); + +int es384_pk_from_EC_KEY(es384_pk_t *, const EC_KEY *); +int es384_pk_from_EVP_PKEY(es384_pk_t *, const EVP_PKEY *); +int es384_pk_from_ptr(es384_pk_t *, const void *, size_t); + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* !_FIDO_ES384_H */ diff --git a/src/fido/param.h b/src/fido/param.h index 7c6db98cfd5..511370bca27 100644 --- a/src/fido/param.h +++ b/src/fido/param.h @@ -1,7 +1,29 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_PARAM_H @@ -82,12 +104,13 @@ #define FIDO_CAP_NMSG 0x08 /* if set, device doesn't support CTAP_CMD_MSG */ /* Supported COSE algorithms. */ -#define COSE_UNSPEC 0 -#define COSE_ES256 -7 -#define COSE_EDDSA -8 -#define COSE_ECDH_ES256 -25 -#define COSE_RS256 -257 -#define COSE_RS1 -65535 +#define COSE_UNSPEC 0 +#define COSE_ES256 -7 +#define COSE_EDDSA -8 +#define COSE_ECDH_ES256 -25 +#define COSE_ES384 -35 +#define COSE_RS256 -257 +#define COSE_RS1 -65535 /* Supported COSE types. */ #define COSE_KTY_OKP 1 @@ -96,6 +119,7 @@ /* Supported curves. */ #define COSE_P256 1 +#define COSE_P384 2 #define COSE_ED25519 6 /* Supported extensions. */ @@ -118,4 +142,19 @@ FIDO_EXT_MINPINLEN) #endif /* _FIDO_INTERNAL */ +/* Recognised UV modes. */ +#define FIDO_UV_MODE_TUP 0x0001 /* internal test of user presence */ +#define FIDO_UV_MODE_FP 0x0002 /* internal fingerprint check */ +#define FIDO_UV_MODE_PIN 0x0004 /* internal pin check */ +#define FIDO_UV_MODE_VOICE 0x0008 /* internal voice recognition */ +#define FIDO_UV_MODE_FACE 0x0010 /* internal face recognition */ +#define FIDO_UV_MODE_LOCATION 0x0020 /* internal location check */ +#define FIDO_UV_MODE_EYE 0x0040 /* internal eyeprint check */ +#define FIDO_UV_MODE_DRAWN 0x0080 /* internal drawn pattern check */ +#define FIDO_UV_MODE_HAND 0x0100 /* internal handprint verification */ +#define FIDO_UV_MODE_NONE 0x0200 /* TUP/UV not required */ +#define FIDO_UV_MODE_ALL 0x0400 /* all supported UV modes required */ +#define FIDO_UV_MODE_EXT_PIN 0x0800 /* external pin verification */ +#define FIDO_UV_MODE_EXT_DRAWN 0x1000 /* external drawn pattern check */ + #endif /* !_FIDO_PARAM_H */ diff --git a/src/fido/rs256.h b/src/fido/rs256.h index 03981619178..6f8c78195f8 100644 --- a/src/fido/rs256.h +++ b/src/fido/rs256.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2018-2021 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_RS256_H diff --git a/src/fido/types.h b/src/fido/types.h index 593a6a6b481..cfb4c7a7531 100644 --- a/src/fido/types.h +++ b/src/fido/types.h @@ -1,7 +1,29 @@ /* * Copyright (c) 2018-2022 Yubico AB. All rights reserved. - * Use of this source code is governed by a BSD-style - * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FIDO_TYPES_H @@ -73,6 +95,12 @@ typedef struct es256_sk { unsigned char d[32]; } es256_sk_t; +/* COSE ES384 (ECDSA over P-384 with SHA-384) public key */ +typedef struct es384_pk { + unsigned char x[48]; + unsigned char y[48]; +} es384_pk_t; + /* COSE RS256 (2048-bit RSA with PKCS1 padding and SHA-256) public key */ typedef struct rs256_pk { unsigned char n[256]; @@ -105,6 +133,7 @@ typedef struct fido_attcred { int type; /* credential's cose algorithm */ union { /* credential's public key */ es256_pk_t es256; + es384_pk_t es384; rs256_pk_t rs256; eddsa_pk_t eddsa; } pubkey; @@ -219,6 +248,12 @@ typedef struct fido_algo_array { size_t len; } fido_algo_array_t; +typedef struct fido_cert_array { + char **name; + uint64_t *value; + size_t len; +} fido_cert_array_t; + typedef struct fido_cbor_info { fido_str_array_t versions; /* supported versions: fido2|u2f */ fido_str_array_t extensions; /* list of supported extensions */ @@ -233,6 +268,13 @@ typedef struct fido_cbor_info { uint64_t fwversion; /* firmware version */ uint64_t maxcredbloblen; /* max credBlob length */ uint64_t maxlargeblob; /* max largeBlob array length */ + uint64_t maxrpid_minlen; /* max rpid in set_pin_minlen_rpid */ + uint64_t minpinlen; /* min pin len enforced */ + uint64_t uv_attempts; /* platform uv attempts */ + uint64_t uv_modality; /* bitmask of supported uv types */ + int64_t rk_remaining; /* remaining resident credentials */ + bool new_pin_reqd; /* new pin required */ + fido_cert_array_t certs; /* associated certifications */ } fido_cbor_info_t; typedef struct fido_dev_info { @@ -281,6 +323,7 @@ typedef struct fido_dev fido_dev_t; typedef struct fido_dev_info fido_dev_info_t; typedef struct es256_pk es256_pk_t; typedef struct es256_sk es256_sk_t; +typedef struct es384_pk es384_pk_t; typedef struct rs256_pk rs256_pk_t; typedef struct eddsa_pk eddsa_pk_t; #endif /* _FIDO_INTERNAL */ diff --git a/src/hid.c b/src/hid.c index 926272b6b3e..662bd44adfc 100644 --- a/src/hid.c +++ b/src/hid.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/hid_freebsd.c b/src/hid_freebsd.c index 21e408ffd53..2bbe80b5349 100644 --- a/src/hid_freebsd.c +++ b/src/hid_freebsd.c @@ -2,12 +2,17 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include +#if __FreeBSD_version >= 1300500 +#include +#define USE_HIDRAW /* see usbhid(4) and hidraw(4) on FreeBSD 13+ */ +#endif #include #include @@ -57,8 +62,60 @@ is_fido(int fd) return (usage_page == 0xf1d0); } +#ifdef USE_HIDRAW static int -copy_info(fido_dev_info_t *di, const char *path) +copy_info_hidraw(fido_dev_info_t *di, const char *path) +{ + int fd = -1; + int ok = -1; + struct usb_device_info udi; + struct hidraw_devinfo devinfo; + char rawname[129]; + + memset(di, 0, sizeof(*di)); + memset(&udi, 0, sizeof(udi)); + memset(&devinfo, 0, sizeof(devinfo)); + memset(rawname, 0, sizeof(rawname)); + + if ((fd = fido_hid_unix_open(path)) == -1 || is_fido(fd) == 0) + goto fail; + + if (ioctl(fd, IOCTL_REQ(USB_GET_DEVICEINFO), &udi) == -1) { + if (ioctl(fd, IOCTL_REQ(HIDIOCGRAWINFO), &devinfo) == -1 || + ioctl(fd, IOCTL_REQ(HIDIOCGRAWNAME(128)), rawname) == -1 || + (di->path = strdup(path)) == NULL || + (di->manufacturer = strdup(UHID_VENDOR)) == NULL || + (di->product = strdup(rawname)) == NULL) + goto fail; + di->vendor_id = devinfo.vendor; + di->product_id = devinfo.product; + } else { + if ((di->path = strdup(path)) == NULL || + (di->manufacturer = strdup(udi.udi_vendor)) == NULL || + (di->product = strdup(udi.udi_product)) == NULL) + goto fail; + di->vendor_id = (int16_t)udi.udi_vendorNo; + di->product_id = (int16_t)udi.udi_productNo; + } + + ok = 0; +fail: + if (fd != -1 && close(fd) == -1) + fido_log_error(errno, "%s: close %s", __func__, path); + + if (ok < 0) { + free(di->path); + free(di->manufacturer); + free(di->product); + explicit_bzero(di, sizeof(*di)); + } + + return (ok); +} +#endif /* USE_HIDRAW */ + +static int +copy_info_uhid(fido_dev_info_t *di, const char *path) { int fd = -1; int ok = -1; @@ -81,7 +138,6 @@ copy_info(fido_dev_info_t *di, const char *path) (di->manufacturer = strdup(udi.udi_vendor)) == NULL || (di->product = strdup(udi.udi_product)) == NULL) goto fail; - di->vendor_id = (int16_t)udi.udi_vendorNo; di->product_id = (int16_t)udi.udi_productNo; @@ -112,9 +168,29 @@ fido_hid_manifest(fido_dev_info_t *devlist, size_t ilen, size_t *olen) if (devlist == NULL || olen == NULL) return (FIDO_ERR_INVALID_ARGUMENT); - for (i = *olen = 0; i < MAX_UHID && *olen < ilen; i++) { + *olen = 0; + +#ifdef USE_HIDRAW + for (i = 0; i < MAX_UHID && *olen < ilen; i++) { + snprintf(path, sizeof(path), "/dev/hidraw%zu", i); + if (copy_info_hidraw(&devlist[*olen], path) == 0) { + devlist[*olen].io = (fido_dev_io_t) { + fido_hid_open, + fido_hid_close, + fido_hid_read, + fido_hid_write, + }; + ++(*olen); + } + } + /* hidraw(4) is preferred over uhid(4) */ + if (*olen != 0) + return (FIDO_OK); +#endif /* USE_HIDRAW */ + + for (i = 0; i < MAX_UHID && *olen < ilen; i++) { snprintf(path, sizeof(path), "/dev/uhid%zu", i); - if (copy_info(&devlist[*olen], path) == 0) { + if (copy_info_uhid(&devlist[*olen], path) == 0) { devlist[*olen].io = (fido_dev_io_t) { fido_hid_open, fido_hid_close, @@ -151,6 +227,10 @@ fido_hid_open(const char *path) ugd.ugd_data = buf; ugd.ugd_maxlen = sizeof(buf); + /* + * N.B. if ctx->fd is an hidraw(4) device, the ioctl() below puts it in + * uhid(4) compat mode, which we need to keep fido_hid_write() as-is. + */ if ((r = ioctl(ctx->fd, IOCTL_REQ(USB_GET_REPORT_DESC), &ugd) == -1) || ugd.ugd_actlen > sizeof(buf) || fido_hid_get_report_len(ugd.ugd_data, ugd.ugd_actlen, diff --git a/src/hid_hidapi.c b/src/hid_hidapi.c index f6d21711e15..fed6f69a223 100644 --- a/src/hid_hidapi.c +++ b/src/hid_hidapi.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Google LLC. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifdef __linux__ @@ -133,14 +134,14 @@ static bool is_fido(const struct hid_device_info *hdi) { uint32_t usage_page = 0; - struct hidraw_report_descriptor hrd; + struct hidraw_report_descriptor *hrd; - memset(&hrd, 0, sizeof(hrd)); + if ((hrd = calloc(1, sizeof(*hrd))) == NULL || + get_report_descriptor(hdi->path, hrd) < 0 || + fido_hid_get_usage(hrd->value, hrd->size, &usage_page) < 0) + usage_page = 0; - if (get_report_descriptor(hdi->path, &hrd) < 0 || - fido_hid_get_usage(hrd.value, hrd.size, &usage_page) < 0) { - return false; - } + free(hrd); return usage_page == 0xf1d0; } diff --git a/src/hid_linux.c b/src/hid_linux.c index c4ce4fd578a..841a95b08e4 100644 --- a/src/hid_linux.c +++ b/src/hid_linux.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -54,20 +55,21 @@ get_report_descriptor(int fd, struct hidraw_report_descriptor *hrd) static bool is_fido(const char *path) { - int fd; - uint32_t usage_page = 0; - struct hidraw_report_descriptor hrd; + int fd = -1; + uint32_t usage_page = 0; + struct hidraw_report_descriptor *hrd = NULL; - memset(&hrd, 0, sizeof(hrd)); - - if ((fd = fido_hid_unix_open(path)) == -1) - return (false); - - if (get_report_descriptor(fd, &hrd) < 0 || - fido_hid_get_usage(hrd.value, hrd.size, &usage_page) < 0) + if ((hrd = calloc(1, sizeof(*hrd))) == NULL || + (fd = fido_hid_unix_open(path)) == -1) + goto out; + if (get_report_descriptor(fd, hrd) < 0 || + fido_hid_get_usage(hrd->value, hrd->size, &usage_page) < 0) usage_page = 0; - if (close(fd) == -1) +out: + free(hrd); + + if (fd != -1 && close(fd) == -1) fido_log_error(errno, "%s: close", __func__); return (usage_page == 0xf1d0); @@ -240,9 +242,13 @@ void * fido_hid_open(const char *path) { struct hid_linux *ctx; - struct hidraw_report_descriptor hrd; + struct hidraw_report_descriptor *hrd; struct timespec tv_pause; long interval_ms, retries = 0; + bool looped; + +retry: + looped = false; if ((ctx = calloc(1, sizeof(*ctx))) == NULL || (ctx->fd = fido_hid_unix_open(path)) == -1) { @@ -256,7 +262,8 @@ fido_hid_open(const char *path) fido_hid_close(ctx); return (NULL); } - if (retries++ >= 15) { + looped = true; + if (retries++ >= 20) { fido_log_debug("%s: flock timeout", __func__); fido_hid_close(ctx); return (NULL); @@ -271,8 +278,15 @@ fido_hid_open(const char *path) } } - if (get_report_descriptor(ctx->fd, &hrd) < 0 || - fido_hid_get_report_len(hrd.value, hrd.size, &ctx->report_in_len, + if (looped) { + fido_log_debug("%s: retrying", __func__); + fido_hid_close(ctx); + goto retry; + } + + if ((hrd = calloc(1, sizeof(*hrd))) == NULL || + get_report_descriptor(ctx->fd, hrd) < 0 || + fido_hid_get_report_len(hrd->value, hrd->size, &ctx->report_in_len, &ctx->report_out_len) < 0 || ctx->report_in_len == 0 || ctx->report_out_len == 0) { fido_log_debug("%s: using default report sizes", __func__); @@ -280,6 +294,8 @@ fido_hid_open(const char *path) ctx->report_out_len = CTAP_MAX_REPORT_LEN; } + free(hrd); + return (ctx); } diff --git a/src/hid_netbsd.c b/src/hid_netbsd.c index c24c6de7ce2..d5b9fad3341 100644 --- a/src/hid_netbsd.c +++ b/src/hid_netbsd.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/hid_openbsd.c b/src/hid_openbsd.c index 2993d10dad9..2d08aca42ae 100644 --- a/src/hid_openbsd.c +++ b/src/hid_openbsd.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Google LLC. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/hid_osx.c b/src/hid_osx.c index a5fa8281f81..9309762f163 100644 --- a/src/hid_osx.c +++ b/src/hid_osx.c @@ -2,6 +2,7 @@ * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/hid_unix.c b/src/hid_unix.c index 946b2dc3b65..e53882d79e8 100644 --- a/src/hid_unix.c +++ b/src/hid_unix.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/hid_win.c b/src/hid_win.c index fe403bcf46f..bc98a1701b0 100644 --- a/src/hid_win.c +++ b/src/hid_win.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2019-2021 Yubico AB. All rights reserved. + * Copyright (c) 2019-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -27,7 +28,7 @@ WINSETUPAPI WINBOOL WINAPI SetupDiGetDevicePropertyW(HDEVINFO, DWORD, PDWORD, DWORD); #endif -#if defined(__MINGW32__) +#if defined(__MINGW32__) && __MINGW64_VERSION_MAJOR < 8 DEFINE_DEVPROPKEY(DEVPKEY_Device_Parent, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 8); #endif diff --git a/src/info.c b/src/info.c index ea26f22297a..cd30828d7ce 100644 --- a/src/info.c +++ b/src/info.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" @@ -68,10 +69,8 @@ decode_option(const cbor_item_t *key, const cbor_item_t *val, void *arg) fido_opt_array_t *o = arg; const size_t i = o->len; - if (cbor_isa_float_ctrl(val) == false || - cbor_float_get_width(val) != CBOR_FLOAT_0 || - cbor_is_bool(val) == false) { - fido_log_debug("%s: cbor type", __func__); + if (cbor_decode_bool(val, NULL) < 0) { + fido_log_debug("%s: cbor_decode_bool", __func__); return (0); /* ignore */ } @@ -236,10 +235,55 @@ decode_algorithms(const cbor_item_t *item, fido_algo_array_t *aa) return (0); } +static int +decode_cert(const cbor_item_t *key, const cbor_item_t *val, void *arg) +{ + fido_cert_array_t *c = arg; + const size_t i = c->len; + + if (cbor_is_int(val) == false) { + fido_log_debug("%s: cbor_is_int", __func__); + return (0); /* ignore */ + } + + if (cbor_string_copy(key, &c->name[i]) < 0) { + fido_log_debug("%s: cbor_string_copy", __func__); + return (0); /* ignore */ + } + + /* keep name/value and len consistent */ + c->value[i] = cbor_get_int(val); + c->len++; + + return (0); +} + +static int +decode_certs(const cbor_item_t *item, fido_cert_array_t *c) +{ + c->name = NULL; + c->value = NULL; + c->len = 0; + + if (cbor_isa_map(item) == false || + cbor_map_is_definite(item) == false) { + fido_log_debug("%s: cbor type", __func__); + return (-1); + } + + c->name = calloc(cbor_map_size(item), sizeof(char *)); + c->value = calloc(cbor_map_size(item), sizeof(uint64_t)); + if (c->name == NULL || c->value == NULL) + return (-1); + + return (cbor_map_iter(item, c, decode_cert)); +} + static int parse_reply_element(const cbor_item_t *key, const cbor_item_t *val, void *arg) { fido_cbor_info_t *ci = arg; + uint64_t x; if (cbor_isa_uint(key) == false || cbor_int_get_width(key) != CBOR_INT_8) { @@ -270,12 +314,31 @@ parse_reply_element(const cbor_item_t *key, const cbor_item_t *val, void *arg) return (decode_algorithms(val, &ci->algorithms)); case 11: /* maxSerializedLargeBlobArray */ return (cbor_decode_uint64(val, &ci->maxlargeblob)); + case 12: /* forcePINChange */ + return (cbor_decode_bool(val, &ci->new_pin_reqd)); + case 13: /* minPINLength */ + return (cbor_decode_uint64(val, &ci->minpinlen)); case 14: /* fwVersion */ return (cbor_decode_uint64(val, &ci->fwversion)); case 15: /* maxCredBlobLen */ return (cbor_decode_uint64(val, &ci->maxcredbloblen)); + case 16: /* maxRPIDsForSetMinPINLength */ + return (cbor_decode_uint64(val, &ci->maxrpid_minlen)); + case 17: /* preferredPlatformUvAttempts */ + return (cbor_decode_uint64(val, &ci->uv_attempts)); + case 18: /* uvModality */ + return (cbor_decode_uint64(val, &ci->uv_modality)); + case 19: /* certifications */ + return (decode_certs(val, &ci->certs)); + case 20: /* remainingDiscoverableCredentials */ + if (cbor_decode_uint64(val, &x) < 0 || x > INT64_MAX) { + fido_log_debug("%s: cbor_decode_uint64", __func__); + return (-1); + } + ci->rk_remaining = (int64_t)x; + return (0); default: /* ignore */ - fido_log_debug("%s: cbor type", __func__); + fido_log_debug("%s: cbor type: 0x%02x", __func__, cbor_get_uint8(key)); return (0); } } @@ -298,22 +361,31 @@ fido_dev_get_cbor_info_tx(fido_dev_t *dev, int *ms) static int fido_dev_get_cbor_info_rx(fido_dev_t *dev, fido_cbor_info_t *ci, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; + unsigned char *msg; + int msglen; + int r; fido_log_debug("%s: dev=%p, ci=%p, ms=%d", __func__, (void *)dev, (void *)ci, *ms); fido_cbor_info_reset(ci); - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - return (cbor_parse_reply(reply, (size_t)reply_len, ci, - parse_reply_element)); + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + r = cbor_parse_reply(msg, (size_t)msglen, ci, parse_reply_element); +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } int @@ -347,7 +419,14 @@ fido_dev_get_cbor_info(fido_dev_t *dev, fido_cbor_info_t *ci) fido_cbor_info_t * fido_cbor_info_new(void) { - return (calloc(1, sizeof(fido_cbor_info_t))); + fido_cbor_info_t *ci; + + if ((ci = calloc(1, sizeof(fido_cbor_info_t))) == NULL) + return (NULL); + + fido_cbor_info_reset(ci); + + return (ci); } void @@ -359,6 +438,8 @@ fido_cbor_info_reset(fido_cbor_info_t *ci) fido_opt_array_free(&ci->options); fido_byte_array_free(&ci->protocols); fido_algo_array_free(&ci->algorithms); + fido_cert_array_free(&ci->certs); + ci->rk_remaining = -1; } void @@ -475,6 +556,36 @@ fido_cbor_info_fwversion(const fido_cbor_info_t *ci) return (ci->fwversion); } +uint64_t +fido_cbor_info_minpinlen(const fido_cbor_info_t *ci) +{ + return (ci->minpinlen); +} + +uint64_t +fido_cbor_info_maxrpid_minpinlen(const fido_cbor_info_t *ci) +{ + return (ci->maxrpid_minlen); +} + +uint64_t +fido_cbor_info_uv_attempts(const fido_cbor_info_t *ci) +{ + return (ci->uv_attempts); +} + +uint64_t +fido_cbor_info_uv_modality(const fido_cbor_info_t *ci) +{ + return (ci->uv_modality); +} + +int64_t +fido_cbor_info_rk_remaining(const fido_cbor_info_t *ci) +{ + return (ci->rk_remaining); +} + const uint8_t * fido_cbor_info_protocols_ptr(const fido_cbor_info_t *ci) { @@ -510,3 +621,27 @@ fido_cbor_info_algorithm_cose(const fido_cbor_info_t *ci, size_t idx) return (ci->algorithms.ptr[idx].cose); } + +bool +fido_cbor_info_new_pin_required(const fido_cbor_info_t *ci) +{ + return (ci->new_pin_reqd); +} + +char ** +fido_cbor_info_certs_name_ptr(const fido_cbor_info_t *ci) +{ + return (ci->certs.name); +} + +const uint64_t * +fido_cbor_info_certs_value_ptr(const fido_cbor_info_t *ci) +{ + return (ci->certs.value); +} + +size_t +fido_cbor_info_certs_len(const fido_cbor_info_t *ci) +{ + return (ci->certs.len); +} diff --git a/src/io.c b/src/io.c index 70f777fb49a..a9715b5b4bf 100644 --- a/src/io.c +++ b/src/io.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" @@ -331,14 +332,25 @@ fido_rx(fido_dev_t *d, uint8_t cmd, void *buf, size_t count, int *ms) int fido_rx_cbor_status(fido_dev_t *d, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; + unsigned char *msg; + int msglen; + int r; - if ((reply_len = fido_rx(d, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0 || (size_t)reply_len < 1) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; } - return (reply[0]); + if ((msglen = fido_rx(d, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0 || + (size_t)msglen < 1) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto out; + } + + r = msg[0]; +out: + freezero(msg, FIDO_MAXMSG); + + return (r); } diff --git a/src/iso7816.c b/src/iso7816.c index a4902277c6d..5bba10697ee 100644 --- a/src/iso7816.c +++ b/src/iso7816.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/iso7816.h b/src/iso7816.h index 9bfad1fbab9..7545719c6f1 100644 --- a/src/iso7816.h +++ b/src/iso7816.h @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _ISO7816_H diff --git a/src/largeblob.c b/src/largeblob.c index c8173170766..c1f2e62b2a6 100644 --- a/src/largeblob.c +++ b/src/largeblob.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2020 Yubico AB. All rights reserved. + * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -200,27 +201,38 @@ parse_largeblob_reply(const cbor_item_t *key, const cbor_item_t *val, static int largeblob_get_rx(fido_dev_t *dev, fido_blob_t **chunk, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len, r; + unsigned char *msg; + int msglen, r; *chunk = NULL; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto out; + } + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); - return FIDO_ERR_RX; + r = FIDO_ERR_RX; + goto out; } if ((*chunk = fido_blob_new()) == NULL) { fido_log_debug("%s: fido_blob_new", __func__); - return FIDO_ERR_INTERNAL; + r = FIDO_ERR_INTERNAL; + goto out; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, *chunk, + if ((r = cbor_parse_reply(msg, (size_t)msglen, *chunk, parse_largeblob_reply)) != FIDO_OK) { fido_log_debug("%s: parse_largeblob_reply", __func__); - fido_blob_free(chunk); - return r; + goto out; } - return FIDO_OK; + r = FIDO_OK; +out: + if (r != FIDO_OK) + fido_blob_free(chunk); + + freezero(msg, FIDO_MAXMSG); + + return r; } static cbor_item_t * diff --git a/src/log.c b/src/log.c index ab18ae12b4f..e54f8fca6b9 100644 --- a/src/log.c +++ b/src/log.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #undef _GNU_SOURCE /* XSI strerror_r() */ diff --git a/src/netlink.c b/src/netlink.c index 8f14e2c3bac..2a9216c3905 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/netlink.h b/src/netlink.h index 9b98064ab8e..c600b522196 100644 --- a/src/netlink.h +++ b/src/netlink.h @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _FIDO_NETLINK_H diff --git a/src/nfc.c b/src/nfc.c index 8e1221bb505..2e97d5fc50d 100644 --- a/src/nfc.c +++ b/src/nfc.c @@ -2,6 +2,7 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -289,6 +290,35 @@ fido_nfc_rx(fido_dev_t *d, uint8_t cmd, unsigned char *buf, size_t count, int ms } } +bool +nfc_is_fido(const char *path) +{ + bool fido = false; + fido_dev_t *d; + int r; + + if ((d = fido_dev_new()) == NULL) { + fido_log_debug("%s: fido_dev_new", __func__); + goto fail; + } + /* fido_dev_open selects the fido applet */ + if ((r = fido_dev_open(d, path)) != FIDO_OK) { + fido_log_debug("%s: fido_dev_open: 0x%x", __func__, r); + goto fail; + } + if ((r = fido_dev_close(d)) != FIDO_OK) { + fido_log_debug("%s: fido_dev_close: 0x%x", __func__, r); + goto fail; + + } + + fido = true; +fail: + fido_dev_free(&d); + + return fido; +} + #ifdef USE_NFC bool fido_is_nfc(const char *path) diff --git a/src/nfc_linux.c b/src/nfc_linux.c index 4673dc2b7d1..4b69eb1c54c 100644 --- a/src/nfc_linux.c +++ b/src/nfc_linux.c @@ -2,6 +2,7 @@ * Copyright (c) 2020-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -59,7 +60,6 @@ copy_info(fido_dev_info_t *di, struct udev *udev, const char *name; char *str; struct udev_device *dev = NULL; - void *ctx = NULL; uint64_t id; int ok = -1; @@ -72,6 +72,10 @@ copy_info(fido_dev_info_t *di, struct udev *udev, di->path = NULL; goto fail; } + if (nfc_is_fido(di->path) == false) { + fido_log_debug("%s: nfc_is_fido: %s", __func__, di->path); + goto fail; + } if ((di->manufacturer = get_usb_attr(dev, "manufacturer")) == NULL) di->manufacturer = strdup(""); if ((di->product = get_usb_attr(dev, "product")) == NULL) @@ -88,17 +92,10 @@ copy_info(fido_dev_info_t *di, struct udev *udev, di->product_id = (int16_t)id; free(str); - if ((ctx = fido_nfc_open(di->path)) == NULL) { - fido_log_debug("%s: fido_nfc_open", __func__); - goto fail; - } - ok = 0; fail: if (dev != NULL) udev_device_unref(dev); - if (ctx != NULL) - fido_nfc_close(ctx); if (ok < 0) { free(di->path); diff --git a/src/packed.h b/src/packed.h index 3857c22dd2b..5f53ae565b7 100644 --- a/src/packed.h +++ b/src/packed.h @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _PACKED_H diff --git a/src/pcsc.c b/src/pcsc.c index c02251e9bfe..d7bd6c65ed6 100644 --- a/src/pcsc.c +++ b/src/pcsc.c @@ -3,6 +3,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #if __APPLE__ @@ -149,6 +150,10 @@ copy_info(fido_dev_info_t *di, SCARDCONTEXT ctx, const char *reader, size_t idx) fido_log_debug("%s: asprintf", __func__); goto fail; } + if (nfc_is_fido(di->path) == false) { + fido_log_debug("%s: nfc_is_fido: %s", __func__, di->path); + goto fail; + } if ((di->manufacturer = strdup("PC/SC")) == NULL || (di->product = strdup(reader)) == NULL) goto fail; diff --git a/src/pin.c b/src/pin.c index 30eeb086a6e..c3dd9271ed7 100644 --- a/src/pin.c +++ b/src/pin.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -72,7 +73,7 @@ pad64(const char *pin, fido_blob_t **ppin) size_t ppin_len; pin_len = strlen(pin); - if (pin_len < 4 || pin_len > 255) { + if (pin_len < 4 || pin_len > 63) { fido_log_debug("%s: invalid pin length", __func__); return (FIDO_ERR_PIN_POLICY_VIOLATION); } @@ -81,7 +82,8 @@ pad64(const char *pin, fido_blob_t **ppin) return (FIDO_ERR_INTERNAL); ppin_len = (pin_len + 63U) & ~63U; - if (ppin_len < pin_len || ((*ppin)->ptr = calloc(1, ppin_len)) == NULL) { + if (ppin_len < pin_len || + ((*ppin)->ptr = calloc(1, ppin_len)) == NULL) { fido_blob_free(ppin); return (FIDO_ERR_INTERNAL); } @@ -284,8 +286,8 @@ uv_token_rx(fido_dev_t *dev, const fido_blob_t *ecdh, fido_blob_t *token, int *ms) { fido_blob_t *aes_token = NULL; - unsigned char reply[FIDO_MAXMSG]; - int reply_len; + unsigned char *msg = NULL; + int msglen; int r; if ((aes_token = fido_blob_new()) == NULL) { @@ -293,14 +295,18 @@ uv_token_rx(fido_dev_t *dev, const fido_blob_t *ecdh, fido_blob_t *token, goto fail; } - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto fail; + } + + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { fido_log_debug("%s: fido_rx", __func__); r = FIDO_ERR_RX; goto fail; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, aes_token, + if ((r = cbor_parse_reply(msg, (size_t)msglen, aes_token, parse_uv_token)) != FIDO_OK) { fido_log_debug("%s: parse_uv_token", __func__); goto fail; @@ -315,6 +321,7 @@ uv_token_rx(fido_dev_t *dev, const fido_blob_t *ecdh, fido_blob_t *token, r = FIDO_OK; fail: fido_blob_free(&aes_token); + freezero(msg, FIDO_MAXMSG); return (r); } @@ -579,25 +586,34 @@ fail: static int fido_dev_get_pin_retry_count_rx(fido_dev_t *dev, int *retries, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; *retries = 0; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto fail; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, retries, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto fail; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, retries, parse_pin_retry_count)) != FIDO_OK) { fido_log_debug("%s: parse_pin_retry_count", __func__); - return (r); + goto fail; } - return (FIDO_OK); + r = FIDO_OK; +fail: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int @@ -623,25 +639,34 @@ fido_dev_get_retry_count(fido_dev_t *dev, int *retries) static int fido_dev_get_uv_retry_count_rx(fido_dev_t *dev, int *retries, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *msg; + int msglen; + int r; *retries = 0; - if ((reply_len = fido_rx(dev, CTAP_CMD_CBOR, &reply, sizeof(reply), - ms)) < 0) { - fido_log_debug("%s: fido_rx", __func__); - return (FIDO_ERR_RX); + if ((msg = malloc(FIDO_MAXMSG)) == NULL) { + r = FIDO_ERR_INTERNAL; + goto fail; } - if ((r = cbor_parse_reply(reply, (size_t)reply_len, retries, + if ((msglen = fido_rx(dev, CTAP_CMD_CBOR, msg, FIDO_MAXMSG, ms)) < 0) { + fido_log_debug("%s: fido_rx", __func__); + r = FIDO_ERR_RX; + goto fail; + } + + if ((r = cbor_parse_reply(msg, (size_t)msglen, retries, parse_uv_retry_count)) != FIDO_OK) { fido_log_debug("%s: parse_uv_retry_count", __func__); - return (r); + goto fail; } - return (FIDO_OK); + r = FIDO_OK; +fail: + freezero(msg, FIDO_MAXMSG); + + return (r); } static int diff --git a/src/random.c b/src/random.c index f13482bfddf..9688d35ca94 100644 --- a/src/random.c +++ b/src/random.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/reset.c b/src/reset.c index c5fe6dfe7ac..4e09dbbca5c 100644 --- a/src/reset.c +++ b/src/reset.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" diff --git a/src/rs1.c b/src/rs1.c index 134068b1674..03636b5cdf4 100644 --- a/src/rs1.c +++ b/src/rs1.c @@ -2,6 +2,7 @@ * Copyright (c) 2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/rs256.c b/src/rs256.c index 95bae167a17..59ceb948fa0 100644 --- a/src/rs256.c +++ b/src/rs256.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/time.c b/src/time.c index b82b6187449..fd0e4e3ca33 100644 --- a/src/time.c +++ b/src/time.c @@ -2,6 +2,7 @@ * Copyright (c) 2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/touch.c b/src/touch.c index 66b1c3478c0..6844e2c2dbc 100644 --- a/src/touch.c +++ b/src/touch.c @@ -2,6 +2,7 @@ * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/tpm.c b/src/tpm.c index 74244f8cbf0..69c48c3d4d8 100644 --- a/src/tpm.c +++ b/src/tpm.c @@ -2,6 +2,7 @@ * Copyright (c) 2021 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/src/types.c b/src/types.c index 54c0ca58286..f31f8da1295 100644 --- a/src/types.c +++ b/src/types.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include "fido.h" @@ -27,6 +28,7 @@ fido_opt_array_free(fido_opt_array_t *oa) free(oa->value); oa->name = NULL; oa->value = NULL; + oa->len = 0; } void @@ -57,6 +59,19 @@ fido_algo_array_free(fido_algo_array_t *aa) aa->len = 0; } +void +fido_cert_array_free(fido_cert_array_t *ca) +{ + for (size_t i = 0; i < ca->len; i++) + free(ca->name[i]); + + free(ca->name); + free(ca->value); + ca->name = NULL; + ca->value = NULL; + ca->len = 0; +} + int fido_str_array_pack(fido_str_array_t *sa, const char * const *v, size_t n) { diff --git a/src/u2f.c b/src/u2f.c index 6ebfcc7bb84..b1f7bce3b7a 100644 --- a/src/u2f.c +++ b/src/u2f.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -14,6 +15,7 @@ #include "fido.h" #include "fido/es256.h" +#include "fallthrough.h" #define U2F_PACE_MS (100) @@ -143,9 +145,9 @@ static int send_dummy_register(fido_dev_t *dev, int *ms) { iso7816_apdu_t *apdu = NULL; + unsigned char *reply = NULL; unsigned char challenge[SHA256_DIGEST_LENGTH]; unsigned char application[SHA256_DIGEST_LENGTH]; - unsigned char reply[FIDO_MAXMSG]; int r; /* dummy challenge & application */ @@ -161,6 +163,12 @@ send_dummy_register(fido_dev_t *dev, int *ms) goto fail; } + if ((reply = malloc(FIDO_MAXMSG)) == NULL) { + fido_log_debug("%s: malloc", __func__); + r = FIDO_ERR_INTERNAL; + goto fail; + } + do { if (fido_tx(dev, CTAP_CMD_MSG, iso7816_ptr(apdu), iso7816_len(apdu), ms) < 0) { @@ -168,7 +176,7 @@ send_dummy_register(fido_dev_t *dev, int *ms) r = FIDO_ERR_TX; goto fail; } - if (fido_rx(dev, CTAP_CMD_MSG, &reply, sizeof(reply), ms) < 2) { + if (fido_rx(dev, CTAP_CMD_MSG, reply, FIDO_MAXMSG, ms) < 2) { fido_log_debug("%s: fido_rx", __func__); r = FIDO_ERR_RX; goto fail; @@ -183,6 +191,7 @@ send_dummy_register(fido_dev_t *dev, int *ms) r = FIDO_OK; fail: iso7816_free(&apdu); + freezero(reply, FIDO_MAXMSG); return (r); } @@ -192,9 +201,9 @@ key_lookup(fido_dev_t *dev, const char *rp_id, const fido_blob_t *key_id, int *found, int *ms) { iso7816_apdu_t *apdu = NULL; + unsigned char *reply = NULL; unsigned char challenge[SHA256_DIGEST_LENGTH]; unsigned char rp_id_hash[SHA256_DIGEST_LENGTH]; - unsigned char reply[FIDO_MAXMSG]; uint8_t key_id_len; int r; @@ -228,13 +237,19 @@ key_lookup(fido_dev_t *dev, const char *rp_id, const fido_blob_t *key_id, goto fail; } + if ((reply = malloc(FIDO_MAXMSG)) == NULL) { + fido_log_debug("%s: malloc", __func__); + r = FIDO_ERR_INTERNAL; + goto fail; + } + if (fido_tx(dev, CTAP_CMD_MSG, iso7816_ptr(apdu), iso7816_len(apdu), ms) < 0) { fido_log_debug("%s: fido_tx", __func__); r = FIDO_ERR_TX; goto fail; } - if (fido_rx(dev, CTAP_CMD_MSG, &reply, sizeof(reply), ms) != 2) { + if (fido_rx(dev, CTAP_CMD_MSG, reply, FIDO_MAXMSG, ms) != 2) { fido_log_debug("%s: fido_rx", __func__); r = FIDO_ERR_RX; goto fail; @@ -256,6 +271,7 @@ key_lookup(fido_dev_t *dev, const char *rp_id, const fido_blob_t *key_id, r = FIDO_OK; fail: iso7816_free(&apdu); + freezero(reply, FIDO_MAXMSG); return (r); } @@ -298,8 +314,8 @@ do_auth(fido_dev_t *dev, const fido_blob_t *cdh, const char *rp_id, const fido_blob_t *key_id, fido_blob_t *sig, fido_blob_t *ad, int *ms) { iso7816_apdu_t *apdu = NULL; + unsigned char *reply = NULL; unsigned char rp_id_hash[SHA256_DIGEST_LENGTH]; - unsigned char reply[FIDO_MAXMSG]; int reply_len; uint8_t key_id_len; int r; @@ -336,6 +352,12 @@ do_auth(fido_dev_t *dev, const fido_blob_t *cdh, const char *rp_id, goto fail; } + if ((reply = malloc(FIDO_MAXMSG)) == NULL) { + fido_log_debug("%s: malloc", __func__); + r = FIDO_ERR_INTERNAL; + goto fail; + } + do { if (fido_tx(dev, CTAP_CMD_MSG, iso7816_ptr(apdu), iso7816_len(apdu), ms) < 0) { @@ -343,8 +365,8 @@ do_auth(fido_dev_t *dev, const fido_blob_t *cdh, const char *rp_id, r = FIDO_ERR_TX; goto fail; } - if ((reply_len = fido_rx(dev, CTAP_CMD_MSG, &reply, - sizeof(reply), ms)) < 2) { + if ((reply_len = fido_rx(dev, CTAP_CMD_MSG, reply, + FIDO_MAXMSG, ms)) < 2) { fido_log_debug("%s: fido_rx", __func__); r = FIDO_ERR_RX; goto fail; @@ -364,6 +386,7 @@ do_auth(fido_dev_t *dev, const fido_blob_t *cdh, const char *rp_id, fail: iso7816_free(&apdu); + freezero(reply, FIDO_MAXMSG); return (r); } @@ -643,7 +666,7 @@ u2f_register(fido_dev_t *dev, fido_cred_t *cred, int *ms) { iso7816_apdu_t *apdu = NULL; unsigned char rp_id_hash[SHA256_DIGEST_LENGTH]; - unsigned char reply[FIDO_MAXMSG]; + unsigned char *reply = NULL; int reply_len; int found; int r; @@ -694,6 +717,12 @@ u2f_register(fido_dev_t *dev, fido_cred_t *cred, int *ms) goto fail; } + if ((reply = malloc(FIDO_MAXMSG)) == NULL) { + fido_log_debug("%s: malloc", __func__); + r = FIDO_ERR_INTERNAL; + goto fail; + } + do { if (fido_tx(dev, CTAP_CMD_MSG, iso7816_ptr(apdu), iso7816_len(apdu), ms) < 0) { @@ -701,8 +730,8 @@ u2f_register(fido_dev_t *dev, fido_cred_t *cred, int *ms) r = FIDO_ERR_TX; goto fail; } - if ((reply_len = fido_rx(dev, CTAP_CMD_MSG, &reply, - sizeof(reply), ms)) < 2) { + if ((reply_len = fido_rx(dev, CTAP_CMD_MSG, reply, + FIDO_MAXMSG, ms)) < 2) { fido_log_debug("%s: fido_rx", __func__); r = FIDO_ERR_RX; goto fail; @@ -721,6 +750,7 @@ u2f_register(fido_dev_t *dev, fido_cred_t *cred, int *ms) } fail: iso7816_free(&apdu); + freezero(reply, FIDO_MAXMSG); return (r); } @@ -804,7 +834,7 @@ u2f_authenticate(fido_dev_t *dev, fido_assert_t *fa, int *ms) &fa->allow_list.ptr[i], fa, nfound, ms))) { case FIDO_OK: nauth_ok++; - /* FALLTHROUGH */ + FALLTHROUGH case FIDO_ERR_USER_PRESENCE_REQUIRED: nfound++; break; @@ -834,9 +864,9 @@ u2f_get_touch_begin(fido_dev_t *dev, int *ms) iso7816_apdu_t *apdu = NULL; const char *clientdata = FIDO_DUMMY_CLIENTDATA; const char *rp_id = FIDO_DUMMY_RP_ID; + unsigned char *reply = NULL; unsigned char clientdata_hash[SHA256_DIGEST_LENGTH]; unsigned char rp_id_hash[SHA256_DIGEST_LENGTH]; - unsigned char reply[FIDO_MAXMSG]; int r; memset(&clientdata_hash, 0, sizeof(clientdata_hash)); @@ -858,9 +888,15 @@ u2f_get_touch_begin(fido_dev_t *dev, int *ms) goto fail; } + if ((reply = malloc(FIDO_MAXMSG)) == NULL) { + fido_log_debug("%s: malloc", __func__); + r = FIDO_ERR_INTERNAL; + goto fail; + } + if (dev->attr.flags & FIDO_CAP_WINK) { fido_tx(dev, CTAP_CMD_WINK, NULL, 0, ms); - fido_rx(dev, CTAP_CMD_WINK, &reply, sizeof(reply), ms); + fido_rx(dev, CTAP_CMD_WINK, reply, FIDO_MAXMSG, ms); } if (fido_tx(dev, CTAP_CMD_MSG, iso7816_ptr(apdu), @@ -873,6 +909,7 @@ u2f_get_touch_begin(fido_dev_t *dev, int *ms) r = FIDO_OK; fail: iso7816_free(&apdu); + freezero(reply, FIDO_MAXMSG); return (r); } @@ -880,21 +917,28 @@ fail: int u2f_get_touch_status(fido_dev_t *dev, int *touched, int *ms) { - unsigned char reply[FIDO_MAXMSG]; - int reply_len; - int r; + unsigned char *reply; + int reply_len; + int r; - if ((reply_len = fido_rx(dev, CTAP_CMD_MSG, &reply, sizeof(reply), + if ((reply = malloc(FIDO_MAXMSG)) == NULL) { + fido_log_debug("%s: malloc", __func__); + r = FIDO_ERR_INTERNAL; + goto out; + } + + if ((reply_len = fido_rx(dev, CTAP_CMD_MSG, reply, FIDO_MAXMSG, ms)) < 2) { fido_log_debug("%s: fido_rx", __func__); - return (FIDO_OK); /* ignore */ + r = FIDO_OK; /* ignore */ + goto out; } switch ((reply[reply_len - 2] << 8) | reply[reply_len - 1]) { case SW_CONDITIONS_NOT_SATISFIED: if ((r = u2f_get_touch_begin(dev, ms)) != FIDO_OK) { fido_log_debug("%s: u2f_get_touch_begin", __func__); - return (r); + goto out; } *touched = 0; break; @@ -903,8 +947,13 @@ u2f_get_touch_status(fido_dev_t *dev, int *touched, int *ms) break; default: fido_log_debug("%s: unexpected sw", __func__); - return (FIDO_ERR_RX); + r = FIDO_ERR_RX; + goto out; } - return (FIDO_OK); + r = FIDO_OK; +out: + freezero(reply, FIDO_MAXMSG); + + return (r); } diff --git a/src/util.c b/src/util.c index 61e120cfd06..25281bb51b2 100644 --- a/src/util.c +++ b/src/util.c @@ -2,6 +2,7 @@ * Copyright (c) 2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/src/winhello.c b/src/winhello.c index f9ab6061fd6..e0453cb8c70 100644 --- a/src/winhello.c +++ b/src/winhello.c @@ -2,6 +2,7 @@ * Copyright (c) 2021-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -354,6 +355,9 @@ pack_cose(WEBAUTHN_COSE_CREDENTIAL_PARAMETER *alg, case COSE_ES256: alg->lAlg = WEBAUTHN_COSE_ALGORITHM_ECDSA_P256_WITH_SHA256; break; + case COSE_ES384: + alg->lAlg = WEBAUTHN_COSE_ALGORITHM_ECDSA_P384_WITH_SHA384; + break; case COSE_EDDSA: alg->lAlg = -8; /* XXX */; break; diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index c81397f41fb..e1f4366c4ef 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,6 +1,7 @@ -# Copyright (c) 2018 Yubico AB. All rights reserved. +# Copyright (c) 2018-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause list(APPEND COMPAT_SOURCES ../openbsd-compat/bsd-getpagesize.c @@ -31,7 +32,7 @@ if(NOT MSVC) set_source_files_properties(assert_get.c assert_verify.c base64.c bio.c config.c cred_make.c cred_verify.c credman.c fido2-assert.c fido2-cred.c fido2-token.c pin.c token.c util.c - PROPERTIES COMPILE_FLAGS "-Wconversion -Wsign-conversion") + PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS}") endif() add_executable(fido2-cred diff --git a/tools/assert_get.c b/tools/assert_get.c index c3804025352..8260fb8359f 100644 --- a/tools/assert_get.c +++ b/tools/assert_get.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -209,8 +210,8 @@ assert_get(int argc, char **argv) fido_dev_t *dev = NULL; fido_assert_t *assert = NULL; struct toggle opt; - char pin[1024]; char prompt[1024]; + char pin[128]; char *in_path = NULL; char *out_path = NULL; FILE *in_f = NULL; @@ -284,6 +285,10 @@ assert_get(int argc, char **argv) errx(1, "snprintf"); if (!readpassphrase(prompt, pin, sizeof(pin), RPP_ECHO_OFF)) errx(1, "readpassphrase"); + if (strlen(pin) < 4 || strlen(pin) > 63) { + explicit_bzero(pin, sizeof(pin)); + errx(1, "invalid PIN length"); + } r = fido_dev_get_assert(dev, assert, pin); } else r = fido_dev_get_assert(dev, assert, NULL); diff --git a/tools/assert_verify.c b/tools/assert_verify.c index 7985e95042c..4cc2e86bff1 100644 --- a/tools/assert_verify.c +++ b/tools/assert_verify.c @@ -1,11 +1,13 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include #include +#include #include #include @@ -93,40 +95,54 @@ load_pubkey(int type, const char *file) RSA *rsa = NULL; EVP_PKEY *eddsa = NULL; es256_pk_t *es256_pk = NULL; + es384_pk_t *es384_pk = NULL; rs256_pk_t *rs256_pk = NULL; eddsa_pk_t *eddsa_pk = NULL; void *pk = NULL; - if (type == COSE_ES256) { + switch (type) { + case COSE_ES256: if ((ec = read_ec_pubkey(file)) == NULL) errx(1, "read_ec_pubkey"); if ((es256_pk = es256_pk_new()) == NULL) errx(1, "es256_pk_new"); if (es256_pk_from_EC_KEY(es256_pk, ec) != FIDO_OK) errx(1, "es256_pk_from_EC_KEY"); - pk = es256_pk; EC_KEY_free(ec); - } else if (type == COSE_RS256) { + break; + case COSE_ES384: + if ((ec = read_ec_pubkey(file)) == NULL) + errx(1, "read_ec_pubkey"); + if ((es384_pk = es384_pk_new()) == NULL) + errx(1, "es384_pk_new"); + if (es384_pk_from_EC_KEY(es384_pk, ec) != FIDO_OK) + errx(1, "es384_pk_from_EC_KEY"); + pk = es384_pk; + EC_KEY_free(ec); + break; + case COSE_RS256: if ((rsa = read_rsa_pubkey(file)) == NULL) errx(1, "read_rsa_pubkey"); if ((rs256_pk = rs256_pk_new()) == NULL) errx(1, "rs256_pk_new"); if (rs256_pk_from_RSA(rs256_pk, rsa) != FIDO_OK) errx(1, "rs256_pk_from_RSA"); - pk = rs256_pk; RSA_free(rsa); - } else if (type == COSE_EDDSA) { + break; + case COSE_EDDSA: if ((eddsa = read_eddsa_pubkey(file)) == NULL) errx(1, "read_eddsa_pubkey"); if ((eddsa_pk = eddsa_pk_new()) == NULL) errx(1, "eddsa_pk_new"); if (eddsa_pk_from_EVP_PKEY(eddsa_pk, eddsa) != FIDO_OK) errx(1, "eddsa_pk_from_EVP_PKEY"); - pk = eddsa_pk; EVP_PKEY_free(eddsa); + break; + default: + errx(1, "invalid type %d", type); } return (pk); diff --git a/tools/base64.c b/tools/base64.c index e13119823c9..2cfa98ddb25 100644 --- a/tools/base64.c +++ b/tools/base64.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/bio.c b/tools/bio.c index 1ce1041c30c..7a1406d70de 100644 --- a/tools/bio.c +++ b/tools/bio.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/config.c b/tools/config.c index 3eea4c9b6cf..49253e83f3b 100644 --- a/tools/config.c +++ b/tools/config.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/cred_make.c b/tools/cred_make.c index 7955fa2b7f9..a6239ec27ae 100644 --- a/tools/cred_make.c +++ b/tools/cred_make.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -137,7 +138,7 @@ cred_make(int argc, char **argv) fido_dev_t *dev = NULL; fido_cred_t *cred = NULL; char prompt[1024]; - char pin[1024]; + char pin[128]; char *in_path = NULL; char *out_path = NULL; FILE *in_f = NULL; @@ -221,6 +222,10 @@ cred_make(int argc, char **argv) errx(1, "snprintf"); if (!readpassphrase(prompt, pin, sizeof(pin), RPP_ECHO_OFF)) errx(1, "readpassphrase"); + if (strlen(pin) < 4 || strlen(pin) > 63) { + explicit_bzero(pin, sizeof(pin)); + errx(1, "invalid PIN length"); + } r = fido_dev_make_cred(dev, cred, pin); } diff --git a/tools/cred_verify.c b/tools/cred_verify.c index d622ed7369b..3eae435899d 100644 --- a/tools/cred_verify.c +++ b/tools/cred_verify.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/credman.c b/tools/credman.c index d7fb15580f8..a0a3149d5df 100644 --- a/tools/credman.c +++ b/tools/credman.c @@ -2,6 +2,7 @@ * Copyright (c) 2019 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/extern.h b/tools/extern.h index 8b25dadd45a..ed4b348cfe4 100644 --- a/tools/extern.h +++ b/tools/extern.h @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #ifndef _EXTERN_H_ @@ -85,7 +86,8 @@ int token_info(int, char **, char *); int token_list(int, char **, char *); int token_reset(char *); int token_set(int, char **, char *); -int write_ec_pubkey(FILE *, const void *, size_t); +int write_es256_pubkey(FILE *, const void *, size_t); +int write_es384_pubkey(FILE *, const void *, size_t); int write_rsa_pubkey(FILE *, const void *, size_t); int read_file(const char *, u_char **, size_t *); int write_file(const char *, const u_char *, size_t); diff --git a/tools/fido2-assert.c b/tools/fido2-assert.c index c363d9a4992..d05c541651c 100644 --- a/tools/fido2-assert.c +++ b/tools/fido2-assert.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/tools/fido2-attach.sh b/tools/fido2-attach.sh index d4bc44989f2..ef02db6b9ff 100755 --- a/tools/fido2-attach.sh +++ b/tools/fido2-attach.sh @@ -3,6 +3,7 @@ # Copyright (c) 2020 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause DEV="" diff --git a/tools/fido2-cred.c b/tools/fido2-cred.c index 9463cd591e7..965dbf9ef1a 100644 --- a/tools/fido2-cred.c +++ b/tools/fido2-cred.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ /* diff --git a/tools/fido2-detach.sh b/tools/fido2-detach.sh index 9cd2e64bbe3..140278fc699 100755 --- a/tools/fido2-detach.sh +++ b/tools/fido2-detach.sh @@ -3,6 +3,7 @@ # Copyright (c) 2020 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause DEV="$(fido2-token -L | sed 's/^\(.*\): .*$/\1/;q')" diff --git a/tools/fido2-token.c b/tools/fido2-token.c index e6d9f9f9638..412c2f9016c 100644 --- a/tools/fido2-token.c +++ b/tools/fido2-token.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/fido2-unprot.sh b/tools/fido2-unprot.sh index 44b28b8d06b..7d8c77936ee 100755 --- a/tools/fido2-unprot.sh +++ b/tools/fido2-unprot.sh @@ -3,6 +3,7 @@ # Copyright (c) 2020 Fabian Henneke. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause if [ $(uname) != "Linux" ] ; then diff --git a/tools/include_check.sh b/tools/include_check.sh index e684d0b6f12..70abada1640 100755 --- a/tools/include_check.sh +++ b/tools/include_check.sh @@ -3,6 +3,7 @@ # Copyright (c) 2019 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause check() { for f in $(find $1 -maxdepth 1 -name '*.h'); do diff --git a/tools/largeblob.c b/tools/largeblob.c index fc2584ce8bd..00cf79ea8fe 100644 --- a/tools/largeblob.c +++ b/tools/largeblob.c @@ -2,6 +2,7 @@ * Copyright (c) 2020 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include diff --git a/tools/pin.c b/tools/pin.c index f342347d1ff..8b2697ed8e1 100644 --- a/tools/pin.c +++ b/tools/pin.c @@ -2,6 +2,7 @@ * Copyright (c) 2018 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -21,8 +22,8 @@ pin_set(char *path) { fido_dev_t *dev = NULL; char prompt[1024]; - char pin1[1024]; - char pin2[1024]; + char pin1[128]; + char pin2[128]; int r; int status = 1; @@ -55,6 +56,11 @@ pin_set(char *path) goto out; } + if (strlen(pin1) < 4 || strlen(pin1) > 63) { + fprintf(stderr, "invalid PIN length\n"); + goto out; + } + if ((r = fido_dev_set_pin(dev, pin1, NULL)) != FIDO_OK) { warnx("fido_dev_set_pin: %s", fido_strerr(r)); goto out; @@ -76,9 +82,9 @@ pin_change(char *path) { fido_dev_t *dev = NULL; char prompt[1024]; - char pin0[1024]; - char pin1[1024]; - char pin2[1024]; + char pin0[128]; + char pin1[128]; + char pin2[128]; int r; int status = 1; @@ -98,6 +104,11 @@ pin_change(char *path) goto out; } + if (strlen(pin0) < 4 || strlen(pin0) > 63) { + warnx("invalid PIN length"); + goto out; + } + r = snprintf(prompt, sizeof(prompt), "Enter new PIN for %s: ", path); if (r < 0 || (size_t)r >= sizeof(prompt)) { warnx("snprintf"); @@ -125,6 +136,11 @@ pin_change(char *path) goto out; } + if (strlen(pin1) < 4 || strlen(pin1) > 63) { + fprintf(stderr, "invalid PIN length\n"); + goto out; + } + if ((r = fido_dev_set_pin(dev, pin1, pin0)) != FIDO_OK) { warnx("fido_dev_set_pin: %s", fido_strerr(r)); goto out; diff --git a/tools/test.sh b/tools/test.sh index 02d82d5a18c..67b757e80a8 100755 --- a/tools/test.sh +++ b/tools/test.sh @@ -1,8 +1,9 @@ #!/bin/sh -ex -# Copyright (c) 2021 Yubico AB. All rights reserved. +# Copyright (c) 2021-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause # usage: ./test.sh "$(mktemp -d fido2test-XXXXXXXX)" device @@ -16,6 +17,9 @@ cd "$1" DEV="$2" +TYPE="es256" +#TYPE="es384" +#TYPE="eddsa" make_cred() { sed /^$/d > cred_param << EOF @@ -24,11 +28,11 @@ $1 some user name $(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64) EOF - fido2-cred -M $2 "${DEV}" > "$3" < cred_param + fido2-cred -M $2 "${DEV}" "${TYPE}" > "$3" < cred_param } verify_cred() { - fido2-cred -V $1 > cred_out < "$2" + fido2-cred -V $1 "${TYPE}" > cred_out < "$2" head -1 cred_out > "$3" tail -n +2 cred_out > "$4" } @@ -44,23 +48,25 @@ EOF } verify_assert() { - fido2-assert -V $1 "$2" < "$3" + fido2-assert -V $1 "$2" "${TYPE}" < "$3" } dd if=/dev/urandom bs=32 count=1 | base64 > hmac-salt # u2f -make_cred no.tld "-u" u2f -! make_cred no.tld "-ru" /dev/null -! make_cred no.tld "-uc1" /dev/null -! make_cred no.tld "-uc2" /dev/null -verify_cred "--" u2f u2f-cred u2f-pubkey -! verify_cred "-h" u2f /dev/null /dev/null -! verify_cred "-v" u2f /dev/null /dev/null -verify_cred "-c0" u2f /dev/null /dev/null -! verify_cred "-c1" u2f /dev/null /dev/null -! verify_cred "-c2" u2f /dev/null /dev/null -! verify_cred "-c3" u2f /dev/null /dev/null +if [ "x${TYPE}" = "xes256" ]; then + make_cred no.tld "-u" u2f + ! make_cred no.tld "-ru" /dev/null + ! make_cred no.tld "-uc1" /dev/null + ! make_cred no.tld "-uc2" /dev/null + verify_cred "--" u2f u2f-cred u2f-pubkey + ! verify_cred "-h" u2f /dev/null /dev/null + ! verify_cred "-v" u2f /dev/null /dev/null + verify_cred "-c0" u2f /dev/null /dev/null + ! verify_cred "-c1" u2f /dev/null /dev/null + ! verify_cred "-c2" u2f /dev/null /dev/null + ! verify_cred "-c3" u2f /dev/null /dev/null +fi # wrap (non-resident) make_cred no.tld "--" wrap @@ -105,10 +111,12 @@ verify_cred "-hc0" rk-hs /dev/null /dev/null ! verify_cred "-c3" rk-hs /dev/null /dev/null # u2f -get_assert no.tld "-u" u2f-cred /dev/null u2f-assert -! get_assert no.tld "-u -t up=false" u2f-cred /dev/null /dev/null -verify_assert "--" u2f-pubkey u2f-assert -verify_assert "-p" u2f-pubkey u2f-assert +if [ "x${TYPE}" = "xes256" ]; then + get_assert no.tld "-u" u2f-cred /dev/null u2f-assert + ! get_assert no.tld "-u -t up=false" u2f-cred /dev/null /dev/null + verify_assert "--" u2f-pubkey u2f-assert + verify_assert "-p" u2f-pubkey u2f-assert +fi # wrap (non-resident) get_assert no.tld "--" wrap-cred /dev/null wrap-assert diff --git a/tools/token.c b/tools/token.c index 9124e7b7fd2..366d5a15ab0 100644 --- a/tools/token.c +++ b/tools/token.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -94,6 +95,22 @@ print_opt_array(const char *label, char * const *name, const bool *value, printf("\n"); } +static void +print_cert_array(const char *label, char * const *name, const uint64_t *value, + size_t len) +{ + if (len == 0) + return; + + printf("%s: ", label); + + for (size_t i = 0; i < len; i++) + printf("%s%s %llu", i > 0 ? ", " : "", name[i], + (unsigned long long)value[i]); + + printf("\n"); +} + static void print_algorithms(const fido_cbor_info_t *ci) { @@ -108,15 +125,18 @@ print_algorithms(const fido_cbor_info_t *ci) for (size_t i = 0; i < len; i++) { cose = type = "unknown"; switch (fido_cbor_info_algorithm_cose(ci, i)) { - case COSE_EDDSA: - cose = "eddsa"; - break; case COSE_ES256: cose = "es256"; break; + case COSE_ES384: + cose = "es384"; + break; case COSE_RS256: cose = "rs256"; break; + case COSE_EDDSA: + cose = "eddsa"; + break; } if (fido_cbor_info_algorithm_type(ci, i) != NULL) type = fido_cbor_info_algorithm_type(ci, i); @@ -161,6 +181,101 @@ print_maxlargeblob(uint64_t maxlargeblob) printf("maxlargeblob: %d\n", (int)maxlargeblob); } +static void +print_maxrpid_minpinlen(uint64_t maxrpid) +{ + if (maxrpid > 0) + printf("maxrpids in minpinlen: %d\n", (int)maxrpid); +} + +static void +print_minpinlen(uint64_t minpinlen) +{ + if (minpinlen > 0) + printf("minpinlen: %d\n", (int)minpinlen); +} + +static void +print_uv_attempts(uint64_t uv_attempts) +{ + if (uv_attempts > 0) + printf("platform uv attempt(s): %d\n", (int)uv_attempts); +} + +static void +print_uv_modality(uint64_t uv_modality) +{ + uint64_t mode; + bool printed = false; + + if (uv_modality == 0) + return; + + printf("uv modality: 0x%x (", (int)uv_modality); + + for (size_t i = 0; i < 64; i++) { + mode = 1ULL << i; + if ((uv_modality & mode) == 0) + continue; + if (printed) + printf(", "); + switch (mode) { + case FIDO_UV_MODE_TUP: + printf("test of user presence"); + break; + case FIDO_UV_MODE_FP: + printf("fingerprint check"); + break; + case FIDO_UV_MODE_PIN: + printf("pin check"); + break; + case FIDO_UV_MODE_VOICE: + printf("voice recognition"); + break; + case FIDO_UV_MODE_FACE: + printf("face recognition"); + break; + case FIDO_UV_MODE_LOCATION: + printf("location check"); + break; + case FIDO_UV_MODE_EYE: + printf("eyeprint check"); + break; + case FIDO_UV_MODE_DRAWN: + printf("drawn pattern check"); + break; + case FIDO_UV_MODE_HAND: + printf("handprint verification"); + break; + case FIDO_UV_MODE_NONE: + printf("none"); + break; + case FIDO_UV_MODE_ALL: + printf("all required"); + break; + case FIDO_UV_MODE_EXT_PIN: + printf("external pin"); + break; + case FIDO_UV_MODE_EXT_DRAWN: + printf("external drawn pattern check"); + break; + default: + printf("unknown 0x%llx", (unsigned long long)mode); + break; + } + printed = true; + } + + printf(")\n"); +} + +static void +print_rk_remaining(int64_t rk_remaining) +{ + if (rk_remaining != -1) + printf("remaining rk(s): %d\n", (int)rk_remaining); +} + static void print_fwversion(uint64_t fwversion) { @@ -256,6 +371,14 @@ token_info(int argc, char **argv, char *path) fido_cbor_info_options_value_ptr(ci), fido_cbor_info_options_len(ci)); + /* print certifications */ + print_cert_array("certifications", fido_cbor_info_certs_name_ptr(ci), + fido_cbor_info_certs_value_ptr(ci), + fido_cbor_info_certs_len(ci)); + + /* print firmware version */ + print_fwversion(fido_cbor_info_fwversion(ci)); + /* print maximum message size */ print_maxmsgsiz(fido_cbor_info_maxmsgsiz(ci)); @@ -268,8 +391,14 @@ token_info(int argc, char **argv, char *path) /* print maximum length of serialized largeBlob array */ print_maxlargeblob(fido_cbor_info_maxlargeblob(ci)); - /* print firmware version */ - print_fwversion(fido_cbor_info_fwversion(ci)); + /* print maximum number of RP IDs in fido_dev_set_pin_minlen_rpid() */ + print_maxrpid_minpinlen(fido_cbor_info_maxrpid_minpinlen(ci)); + + /* print estimated number of resident credentials */ + print_rk_remaining(fido_cbor_info_rk_remaining(ci)); + + /* print minimum pin length */ + print_minpinlen(fido_cbor_info_minpinlen(ci)); /* print supported pin protocols */ print_byte_array("pin protocols", fido_cbor_info_protocols_ptr(ci), @@ -280,11 +409,20 @@ token_info(int argc, char **argv, char *path) else printf("pin retries: %d\n", retrycnt); + printf("pin change required: %s\n", + fido_cbor_info_new_pin_required(ci) ? "true" : "false"); + if (fido_dev_get_uv_retry_count(dev, &retrycnt) != FIDO_OK) printf("uv retries: undefined\n"); else printf("uv retries: %d\n", retrycnt); + /* print platform uv attempts */ + print_uv_attempts(fido_cbor_info_uv_attempts(ci)); + + /* print supported uv mechanisms */ + print_uv_modality(fido_cbor_info_uv_modality(ci)); + bio_info(dev); fido_cbor_info_free(&ci); diff --git a/tools/util.c b/tools/util.c index 612d81b2000..0e518bbc5ce 100644 --- a/tools/util.c +++ b/tools/util.c @@ -1,7 +1,8 @@ /* - * Copyright (c) 2018-2021 Yubico AB. All rights reserved. + * Copyright (c) 2018-2022 Yubico AB. All rights reserved. * Use of this source code is governed by a BSD-style * license that can be found in the LICENSE file. + * SPDX-License-Identifier: BSD-2-Clause */ #include @@ -13,6 +14,7 @@ #include #include +#include #include #include @@ -244,7 +246,7 @@ fail: } int -write_ec_pubkey(FILE *f, const void *ptr, size_t len) +write_es256_pubkey(FILE *f, const void *ptr, size_t len) { EVP_PKEY *pkey = NULL; es256_pk_t *pk = NULL; @@ -281,6 +283,44 @@ fail: return (ok); } +int +write_es384_pubkey(FILE *f, const void *ptr, size_t len) +{ + EVP_PKEY *pkey = NULL; + es384_pk_t *pk = NULL; + int ok = -1; + + if ((pk = es384_pk_new()) == NULL) { + warnx("es384_pk_new"); + goto fail; + } + + if (es384_pk_from_ptr(pk, ptr, len) != FIDO_OK) { + warnx("es384_pk_from_ptr"); + goto fail; + } + + if ((pkey = es384_pk_to_EVP_PKEY(pk)) == NULL) { + warnx("es384_pk_to_EVP_PKEY"); + goto fail; + } + + if (PEM_write_PUBKEY(f, pkey) == 0) { + warnx("PEM_write_PUBKEY"); + goto fail; + } + + ok = 0; +fail: + es384_pk_free(&pk); + + if (pkey != NULL) { + EVP_PKEY_free(pkey); + } + + return (ok); +} + RSA * read_rsa_pubkey(const char *path) { @@ -425,16 +465,24 @@ print_cred(FILE *out_f, int type, const fido_cred_t *cred) fprintf(out_f, "%s\n", id); - if (type == COSE_ES256) { - write_ec_pubkey(out_f, fido_cred_pubkey_ptr(cred), + switch (type) { + case COSE_ES256: + write_es256_pubkey(out_f, fido_cred_pubkey_ptr(cred), fido_cred_pubkey_len(cred)); - } else if (type == COSE_RS256) { + break; + case COSE_ES384: + write_es384_pubkey(out_f, fido_cred_pubkey_ptr(cred), + fido_cred_pubkey_len(cred)); + break; + case COSE_RS256: write_rsa_pubkey(out_f, fido_cred_pubkey_ptr(cred), fido_cred_pubkey_len(cred)); - } else if (type == COSE_EDDSA) { + break; + case COSE_EDDSA: write_eddsa_pubkey(out_f, fido_cred_pubkey_ptr(cred), fido_cred_pubkey_len(cred)); - } else { + break; + default: errx(1, "print_cred: unknown type"); } @@ -446,6 +494,8 @@ cose_type(const char *str, int *type) { if (strcmp(str, "es256") == 0) *type = COSE_ES256; + else if (strcmp(str, "es384") == 0) + *type = COSE_ES384; else if (strcmp(str, "rs256") == 0) *type = COSE_RS256; else if (strcmp(str, "eddsa") == 0) @@ -462,12 +512,14 @@ const char * cose_string(int type) { switch (type) { - case COSE_EDDSA: - return ("eddsa"); case COSE_ES256: return ("es256"); + case COSE_ES384: + return ("es384"); case COSE_RS256: return ("rs256"); + case COSE_EDDSA: + return ("eddsa"); default: return ("unknown"); } diff --git a/udev/70-u2f.rules b/udev/70-u2f.rules index 6e1f88bbd04..913bef2a993 100644 --- a/udev/70-u2f.rules +++ b/udev/70-u2f.rules @@ -1,9 +1,32 @@ # Copyright (c) 2020 Yubico AB. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# SPDX-License-Identifier: BSD-2-Clause -# This file is automatically generated, and should -# be used with udev 188 or newer. +# This file is automatically generated, and should be used with udev 188 +# or newer. ACTION!="add|change", GOTO="fido_end" diff --git a/udev/CMakeLists.txt b/udev/CMakeLists.txt index 29a9d41fe37..abddb80f4d8 100644 --- a/udev/CMakeLists.txt +++ b/udev/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright (c) 2018 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause if(UDEV_RULES_DIR) install(FILES 70-u2f.rules DESTINATION ${UDEV_RULES_DIR}) diff --git a/udev/check.sh b/udev/check.sh index 97bbb97b26c..804a8843b37 100755 --- a/udev/check.sh +++ b/udev/check.sh @@ -3,6 +3,7 @@ # Copyright (c) 2020 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause sort_by_id() { awk '{ printf "%d\n", $3 }' | sort -Cnu diff --git a/udev/fidodevs b/udev/fidodevs index d519acd2ca7..d8a80fc1a4e 100644 --- a/udev/fidodevs +++ b/udev/fidodevs @@ -1,6 +1,7 @@ # Copyright (c) 2020 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause # After modifying this file, regenerate 70-u2f.rules: # ./genrules.awk fidodevs > 70-u2f.rules diff --git a/udev/genrules.awk b/udev/genrules.awk index 2a85c7cbf98..3dad667da92 100755 --- a/udev/genrules.awk +++ b/udev/genrules.awk @@ -3,14 +3,38 @@ # Copyright (c) 2020 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause NR == 1 { print "# Copyright (c) 2020 Yubico AB. All rights reserved." - print "# Use of this source code is governed by a BSD-style" - print "# license that can be found in the LICENSE file." + print "#" + print "# Redistribution and use in source and binary forms, with or without" + print "# modification, are permitted provided that the following conditions are" + print "# met:" + print "# " + print "# 1. Redistributions of source code must retain the above copyright" + print "# notice, this list of conditions and the following disclaimer." + print "# 2. Redistributions in binary form must reproduce the above copyright" + print "# notice, this list of conditions and the following disclaimer in" + print "# the documentation and/or other materials provided with the" + print "# distribution." + print "# " + print "# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS" + print "# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" + print "# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" + print "# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" + print "# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," + print "# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" + print "# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," + print "# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" + print "# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT" + print "# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE" + print "# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + print "#" + print "# SPDX-License-Identifier: BSD-2-Clause" print "" - print "# This file is automatically generated, and should" - print "# be used with udev 188 or newer." + print "# This file is automatically generated, and should be used with udev 188" + print "# or newer." print "" print "ACTION!=\"add|change\", GOTO=\"fido_end\"" diff --git a/windows/build.ps1 b/windows/build.ps1 index bd63c7f2109..4c3a9699b07 100644 --- a/windows/build.ps1 +++ b/windows/build.ps1 @@ -1,6 +1,7 @@ # Copyright (c) 2021-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause param( [string]$CMakePath = "C:\Program Files\CMake\bin\cmake.exe", diff --git a/windows/const.ps1 b/windows/const.ps1 index 8acc2b2e829..31426e99fec 100644 --- a/windows/const.ps1 +++ b/windows/const.ps1 @@ -1,12 +1,13 @@ # Copyright (c) 2021 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause # LibreSSL coordinates. New-Variable -Name 'LIBRESSL_URL' ` -Value 'https://fastly.cdn.openbsd.org/pub/OpenBSD/LibreSSL' ` -Option Constant -New-Variable -Name 'LIBRESSL' -Value 'libressl-3.5.2' -Option Constant +New-Variable -Name 'LIBRESSL' -Value 'libressl-3.5.3' -Option Constant # libcbor coordinates. New-Variable -Name 'LIBCBOR' -Value 'libcbor-0.9.0' -Option Constant diff --git a/windows/cygwin.ps1 b/windows/cygwin.ps1 index 6e602b6d947..0681830a911 100755 --- a/windows/cygwin.ps1 +++ b/windows/cygwin.ps1 @@ -1,6 +1,7 @@ # Copyright (c) 2021 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause param( [string]$GPGPath = "C:\Program Files (x86)\GnuPG\bin\gpg.exe", diff --git a/windows/release.ps1 b/windows/release.ps1 index 6f3f4e9600d..423ec20f7e5 100644 --- a/windows/release.ps1 +++ b/windows/release.ps1 @@ -1,6 +1,7 @@ # Copyright (c) 2021-2022 Yubico AB. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# SPDX-License-Identifier: BSD-2-Clause $ErrorActionPreference = "Stop" $Architectures = @('x64', 'Win32', 'ARM64', 'ARM')