mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-10-01 09:56:52 +00:00
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||
|
|
||
|
#include "nsRandomGenerator.h"
|
||
|
|
||
|
#include "nsNSSComponent.h"
|
||
|
#include "pk11pub.h"
|
||
|
#include "prerror.h"
|
||
|
#include "secerr.h"
|
||
|
|
||
|
NS_IMPL_ISUPPORTS(nsRandomGenerator, nsIRandomGenerator)
|
||
|
|
||
|
NS_IMETHODIMP
|
||
|
nsRandomGenerator::GenerateRandomBytes(uint32_t aLength,
|
||
|
uint8_t** aBuffer)
|
||
|
{
|
||
|
NS_ENSURE_ARG_POINTER(aBuffer);
|
||
|
*aBuffer = nullptr;
|
||
|
|
||
|
nsNSSShutDownPreventionLock locker;
|
||
|
if (isAlreadyShutDown()) {
|
||
|
return NS_ERROR_NOT_AVAILABLE;
|
||
|
}
|
||
|
|
||
|
mozilla::ScopedPK11SlotInfo slot(PK11_GetInternalSlot());
|
||
|
if (!slot) {
|
||
|
return NS_ERROR_FAILURE;
|
||
|
}
|
||
|
|
||
|
uint8_t* buf = reinterpret_cast<uint8_t*>(moz_xmalloc(aLength));
|
||
|
if (!buf) {
|
||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||
|
}
|
||
|
|
||
|
SECStatus srv = PK11_GenerateRandomOnSlot(slot, buf, aLength);
|
||
|
|
||
|
if (srv != SECSuccess) {
|
||
|
free(buf);
|
||
|
return NS_ERROR_FAILURE;
|
||
|
}
|
||
|
|
||
|
*aBuffer = buf;
|
||
|
|
||
|
return NS_OK;
|
||
|
}
|
||
|
|
||
|
nsRandomGenerator::~nsRandomGenerator()
|
||
|
{
|
||
|
nsNSSShutDownPreventionLock locker;
|
||
|
if (isAlreadyShutDown()) {
|
||
|
return;
|
||
|
}
|
||
|
shutdown(calledFromObject);
|
||
|
}
|