2018-12-28 02:45:53 +08:00
|
|
|
/*
|
|
|
|
* (c) 2015-2017 Marcos Del Sol Vives
|
|
|
|
* (c) 2016 javiMaD
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef HAVE_NFC3D_DRBG_H
|
|
|
|
#define HAVE_NFC3D_DRBG_H
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "mbedtls/md.h"
|
|
|
|
|
2019-03-10 06:35:06 +08:00
|
|
|
#define NFC3D_DRBG_MAX_SEED_SIZE 480 /* Hardcoded max size in 3DS NFC module */
|
|
|
|
#define NFC3D_DRBG_OUTPUT_SIZE 32 /* Every iteration generates 32 bytes */
|
2018-12-28 02:45:53 +08:00
|
|
|
|
|
|
|
typedef struct {
|
2019-03-10 06:35:06 +08:00
|
|
|
mbedtls_md_context_t hmacCtx;
|
|
|
|
bool used;
|
|
|
|
uint16_t iteration;
|
2018-12-28 02:45:53 +08:00
|
|
|
|
2019-03-10 06:35:06 +08:00
|
|
|
uint8_t buffer[sizeof(uint16_t) + NFC3D_DRBG_MAX_SEED_SIZE];
|
|
|
|
size_t bufferSize;
|
2018-12-28 02:45:53 +08:00
|
|
|
} nfc3d_drbg_ctx;
|
|
|
|
|
2019-03-10 07:00:59 +08:00
|
|
|
void nfc3d_drbg_init(nfc3d_drbg_ctx *ctx, const uint8_t *hmacKey, size_t hmacKeySize, const uint8_t *seed, size_t seedSize);
|
|
|
|
void nfc3d_drbg_step(nfc3d_drbg_ctx *ctx, uint8_t *output);
|
|
|
|
void nfc3d_drbg_cleanup(nfc3d_drbg_ctx *ctx);
|
|
|
|
void nfc3d_drbg_generate_bytes(const uint8_t *hmacKey, size_t hmacKeySize, const uint8_t *seed, size_t seedSize, uint8_t *output, size_t outputSize);
|
2018-12-28 02:45:53 +08:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|