/**
 * Cryptographic functions
 */

#pragma once

#include <stdbool.h>
#include <stddef.h>

#ifdef __cplusplus
extern "C"
{
#endif

    /**
     * Generate device private key, if required
     *
     * @returns true if a key was generated, false otherwise
     */
    bool crypto_gen_priv_key();

    /**
     * Print current device private key
     */
    void crypto_print_priv_key();

    /**
     * Get CSR
     *
     * @return NULL in case of failure or a buffer that must be
     * freed in case of success
     */
    char *crypto_get_csr();

    /**
     * Encode buffer to base64 safe URL string
     *
     * @return A buffer that needs to be freed or NULL in case of failure
     */
    char *crypto_encode_base64_safe_url(const char *src, size_t srclen);

    /**
     * Sign some data using sha256
     */
    char *crypto_sign_sha256_payload(const char *src, const size_t src_len, size_t *dstlen);

#ifdef __cplusplus
}
#endif