53 lines
1.6 KiB
C
53 lines
1.6 KiB
C
/*
|
|
* Copyright (c) The mlkem-native project authors
|
|
* SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
|
|
*/
|
|
#ifndef MLK_RANDOMBYTES_H
|
|
#define MLK_RANDOMBYTES_H
|
|
|
|
|
|
#include "cbmc.h"
|
|
#include "common.h"
|
|
|
|
#if !defined(MLK_CONFIG_NO_RANDOMIZED_API)
|
|
#if !defined(MLK_CONFIG_CUSTOM_RANDOMBYTES)
|
|
/**
|
|
* Fill a buffer with cryptographically secure random bytes.
|
|
*
|
|
* mlkem-native does not provide an implementation of this function.
|
|
* It must be provided by the consumer.
|
|
*
|
|
* To use a custom random byte source with a different name or signature,
|
|
* set MLK_CONFIG_CUSTOM_RANDOMBYTES and define mlk_randombytes directly.
|
|
*
|
|
* @param[out] out Output buffer.
|
|
* @param outlen Number of random bytes to write.
|
|
*
|
|
* @retval 0 Success.
|
|
* @retval other Failure; top-level APIs propagate this as MLK_ERR_RNG_FAIL.
|
|
*/
|
|
int randombytes(uint8_t *out, size_t outlen);
|
|
|
|
/**
|
|
* Internal wrapper around randombytes().
|
|
*
|
|
* Fills a buffer with cryptographically secure random bytes.
|
|
*
|
|
* This function can be replaced by setting MLK_CONFIG_CUSTOM_RANDOMBYTES
|
|
* and defining mlk_randombytes directly.
|
|
*
|
|
* @param[out] out Output buffer.
|
|
* @param outlen Number of random bytes to write.
|
|
*
|
|
* @retval 0 Success.
|
|
* @retval other Failure; top-level APIs propagate this as MLK_ERR_RNG_FAIL.
|
|
*/
|
|
MLK_MUST_CHECK_RETURN_VALUE
|
|
static MLK_INLINE int mlk_randombytes(uint8_t *out, size_t outlen)
|
|
__contract__(
|
|
requires(memory_no_alias(out, outlen))
|
|
assigns(memory_slice(out, outlen))) { return randombytes(out, outlen); }
|
|
#endif /* !MLK_CONFIG_CUSTOM_RANDOMBYTES */
|
|
#endif /* !MLK_CONFIG_NO_RANDOMIZED_API */
|
|
#endif /* !MLK_RANDOMBYTES_H */
|