1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/include/fido2/ctap/ctap_utils.h
2021-09-08 15:22:40 +02:00

92 lines
2.3 KiB
C

/*
* Copyright (C) 2021 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup fido2_ctap_utils FIDO2 CTAP utils
* @ingroup fido2_ctap
* @brief FIDO2 CTAP utility helper
*
* @{
*
* @file
* @brief Definition for CTAP utility functions
*
* @author Nils Ollrogge <nils.ollrogge@fu-berlin.de>
*/
#ifndef FIDO2_CTAP_CTAP_UTILS_H
#define FIDO2_CTAP_CTAP_UTILS_H
#include <stdint.h>
#include "fido2/ctap/ctap.h"
#include "periph/gpio.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief LED animation to indicate that user action is required
*/
void fido2_ctap_utils_led_animation(void);
/**
* @brief Initialize button to be used for user presence test
*
* @return @ref ctap_status_codes_t
*/
int fido2_ctap_utils_init_gpio_pin(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank);
/**
* @brief Test user presence
*
* Successful if user clicks button in less than @ref CTAP_UP_TIMEOUT
*
* @return @ref ctap_status_codes_t
*/
int fido2_ctap_utils_user_presence_test(void);
/**
* @brief Compare fido2 credentials based on creation time
*
* @param[in] k1 first resident key
* @param[in] k2 second resident key
*
* @return <0 if k2 has a bigger sign_count
* @return 0 if equal k1 and k2 have equal sign_count
* @return >0 if k1 has a bigger sign_count
*/
static inline int fido2_ctap_utils_cred_cmp(const void *k1, const void *k2)
{
ctap_resident_key_t *_k1 = (ctap_resident_key_t *)k1;
ctap_resident_key_t *_k2 = (ctap_resident_key_t *)k2;
return _k2->creation_time - _k1->creation_time;
}
/**
* @brief Check equality of resident keys based on rp_id_hash and user_id
*
* @param[in] k1 first resident key
* @param[in] k2 second resident key
*
* @return true if equal false otherwise
*/
static inline bool fido2_ctap_utils_ks_equal(const ctap_resident_key_t *k1,
const ctap_resident_key_t *k2)
{
return memcmp(k1->rp_id_hash, k2->rp_id_hash, sizeof(k1->rp_id_hash)) == 0 &&
memcmp(k1->user_id, k2->user_id, sizeof(k1->user_id)) == 0;
}
#ifdef __cplusplus
}
#endif
#endif /* FIDO2_CTAP_CTAP_UTILS_H */
/** @} */