#include "pgsodium.h" PG_FUNCTION_INFO_V1 (pgsodium_randombytes_random); Datum pgsodium_randombytes_random (PG_FUNCTION_ARGS) { PG_RETURN_UINT32 (randombytes_random ()); } PG_FUNCTION_INFO_V1 (pgsodium_randombytes_uniform); Datum pgsodium_randombytes_uniform (PG_FUNCTION_ARGS) { uint32_t upper_bound = PG_GETARG_UINT32 (0); PG_RETURN_UINT32 (randombytes_uniform (upper_bound)); } PG_FUNCTION_INFO_V1 (pgsodium_randombytes_buf); Datum pgsodium_randombytes_buf (PG_FUNCTION_ARGS) { size_t size = PG_GETARG_UINT32 (0); size_t result_size = VARHDRSZ + size; bytea *result = _pgsodium_zalloc_bytea (result_size); randombytes_buf (VARDATA (result), size); PG_RETURN_BYTEA_P (result); } PG_FUNCTION_INFO_V1 (pgsodium_randombytes_new_seed); Datum pgsodium_randombytes_new_seed (PG_FUNCTION_ARGS) { size_t result_size = VARHDRSZ + randombytes_SEEDBYTES; bytea *result = _pgsodium_zalloc_bytea (result_size); randombytes_buf (VARDATA (result), randombytes_SEEDBYTES); PG_RETURN_BYTEA_P (result); } PG_FUNCTION_INFO_V1 (pgsodium_randombytes_buf_deterministic); Datum pgsodium_randombytes_buf_deterministic (PG_FUNCTION_ARGS) { size_t size = PG_GETARG_UINT32 (0); bytea *seed = PG_GETARG_BYTEA_P (1); size_t result_size = VARHDRSZ + size; bytea *result = _pgsodium_zalloc_bytea (result_size); randombytes_buf_deterministic (VARDATA (result), size, PGSODIUM_UCHARDATA (seed)); PG_RETURN_BYTEA_P (result); }