nsIRandomGenerator.idl (1318B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "nsISupports.idl" 6 7 %{C++ 8 #include <type_traits> 9 %} 10 11 /** 12 * Interface used to generate random data. 13 * 14 * @threadsafe 15 */ 16 [scriptable, uuid(2362d97a-747a-4576-8863-697667309209)] 17 interface nsIRandomGenerator : nsISupports { 18 /** 19 * Generates the specified amount of random bytes. 20 * 21 * @param aLength 22 * The length of the data to generate. 23 * @param aBuffer 24 * A buffer that contains random bytes of size aLength. 25 */ 26 void generateRandomBytes(in unsigned long aLength, 27 [retval, array, size_is(aLength)] out octet aBuffer); 28 29 /** 30 * Fills aBuffer with random bytes. 31 * 32 * @param aBuffer 33 * A buffer to fill with random bytes. 34 * @param aLength 35 * Length of aBuffer. 36 */ 37 void generateRandomBytesInto([array, size_is(aLength)] in octet aBuffer, 38 in unsigned long aLength); 39 40 %{C++ 41 template<typename T> 42 std::enable_if_t<!std::is_pointer_v<T>, nsresult> GenerateRandomBytesInto(T& aResult) { 43 return GenerateRandomBytesInto(reinterpret_cast<uint8_t*>(&aResult), sizeof(T)); 44 } 45 %} 46 };