#define NX_SERVICE_ASSUME_NON_DOMAIN
#include "service_guard.h"
#include "services/csrng.h"

static Service g_csrngSrv;

NX_GENERATE_SERVICE_GUARD(csrng);

Result _csrngInitialize(void) {
    return smGetService(&g_csrngSrv, "csrng");
}

void _csrngCleanup(void) {
    serviceClose(&g_csrngSrv);
}

Service* csrngGetServiceSession(void) {
    return &g_csrngSrv;
}

Result csrngGetRandomBytes(void *out, size_t out_size) {
    return serviceDispatch(&g_csrngSrv, 0,
        .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
        .buffers = { { out, out_size } },
    );
}