/* 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 "nsISupports.idl" %{C++ #include %} /** * Interface used to generate random data. * * @threadsafe */ [scriptable, uuid(2362d97a-747a-4576-8863-697667309209)] interface nsIRandomGenerator : nsISupports { /** * Generates the specified amount of random bytes. * * @param aLength * The length of the data to generate. * @param aBuffer * A buffer that contains random bytes of size aLength. */ void generateRandomBytes(in unsigned long aLength, [retval, array, size_is(aLength)] out octet aBuffer); /** * Fills aBuffer with random bytes. * * @param aBuffer * A buffer to fill with random bytes. * @param aLength * Length of aBuffer. */ void generateRandomBytesInto([array, size_is(aLength)] in octet aBuffer, in unsigned long aLength); %{C++ template std::enable_if_t, nsresult> GenerateRandomBytesInto(T& aResult) { return GenerateRandomBytesInto(reinterpret_cast(&aResult), sizeof(T)); } %} };