From 3d92b8212595769c40da7ccfbafb3898cfaaf7bd Mon Sep 17 00:00:00 2001 From: Basilisk-Dev Date: Wed, 25 Oct 2023 13:39:53 -0400 Subject: No Issue - Implement crypto.randomUUID We already have code in the platform to generate random UUIDs. This simply exposes that functionality via the crypto.UUID function --- dom/base/Crypto.cpp | 21 +++++++++++++++++++++ dom/base/Crypto.h | 3 +++ dom/webidl/Crypto.webidl | 3 +++ 3 files changed, 27 insertions(+) diff --git a/dom/base/Crypto.cpp b/dom/base/Crypto.cpp index 863c26c902..2c72fb6692 100644 --- a/dom/base/Crypto.cpp +++ b/dom/base/Crypto.cpp @@ -115,6 +115,27 @@ Crypto::GetRandomValues(JSContext* aCx, const ArrayBufferView& aArray, aRetval.set(view); } +void Crypto::RandomUUID(nsAString& aRetVal) +{ + // NSID_LENGTH == 39 == 36 UUID chars + 2 curly braces + 1 NUL byte + static_assert(NSID_LENGTH == 39); + + nsCOMPtr uuidgen = + do_GetService("@mozilla.org/uuid-generator;1"); + + nsID uuid; + + nsresult rv = uuidgen->GenerateUUIDInPlace(&uuid); + + char uuidBuffer[NSID_LENGTH]; + uuid.ToProvidedString(uuidBuffer); + + nsCString asciiString(uuidBuffer); + + // Convert UUID chars to UTF-16 retval, omitting the curly braces and NUL + CopyASCIItoUTF16(Substring(asciiString, 1, NSID_LENGTH - 3), aRetVal); +} + SubtleCrypto* Crypto::Subtle() { diff --git a/dom/base/Crypto.h b/dom/base/Crypto.h index 318eba5592..2893d299c0 100644 --- a/dom/base/Crypto.h +++ b/dom/base/Crypto.h @@ -9,6 +9,7 @@ #include "mozilla/dom/SubtleCrypto.h" #include "nsIGlobalObject.h" +#include "nsString.h" #include "nsWrapperCache.h" #include "mozilla/dom/TypedArray.h" #define NS_DOMCRYPTO_CID \ @@ -39,6 +40,8 @@ public: JS::MutableHandle aRetval, ErrorResult& aRv); +void RandomUUID(nsAString& aRetVal); + SubtleCrypto* Subtle(); diff --git a/dom/webidl/Crypto.webidl b/dom/webidl/Crypto.webidl index 31574a219c..2ef7b5d21d 100644 --- a/dom/webidl/Crypto.webidl +++ b/dom/webidl/Crypto.webidl @@ -18,4 +18,7 @@ interface Crypto { [Throws] ArrayBufferView getRandomValues(ArrayBufferView array); + + [SecureContext] + DOMString randomUUID(); }; -- cgit v1.2.3