Browse Source

* Crypto is available in web workers

Michaël Van Canneyt 3 years ago
parent
commit
902300d69a
3 changed files with 346 additions and 304 deletions
  1. 40 290
      packages/rtl/web.pas
  2. 301 11
      packages/rtl/weborworker.pas
  3. 5 3
      packages/wasi/wasienv.pas

+ 40 - 290
packages/rtl/web.pas

@@ -994,298 +994,48 @@ TEventListenerEvent = class external name 'EventListener_Event' (TJSObject)
 //  TJSTypedArray = class external name 'TypedArray' end;
 //  TJSTypedArray = class external name 'TypedArray' end;
 
 
   // Forward class definitions
   // Forward class definitions
-  TJSCryptoKey = Class;
-  TJSSubtleCrypto = Class;
-  KeyType = String;
-  KeyUsage = String;
-  NamedCurve = String;
-  BigInteger = TJSUint8Array;
-  KeyFormat = String;
+  KeyType = weborworker.TJSCryptoKeyType;
+  KeyUsage = weborworker.TJSCryptoKeyUsage;
+
+  NamedCurve = weborworker.TJSCryptoNamedCurve;
+  BigInteger = weborworker.TJSCryptoBigInteger;
+
+  KeyFormat = weborworker.TJSCryptoKeyFormat;
   // Union of object, DOMString
   // Union of object, DOMString
-  AlgorithmIdentifier = JSValue; 
-  
-  { --------------------------------------------------------------------
-    Algorithm
-    --------------------------------------------------------------------}
-  
-  Algorithm = record
-    name : String;
-  end;
-  
-  { --------------------------------------------------------------------
-    AesCbcParams
-    --------------------------------------------------------------------}
-  
-  AesCbcParams = record
-    iv : TJSBufferSource;
-  end;
-  
-  { --------------------------------------------------------------------
-    AesCtrParams
-    --------------------------------------------------------------------}
-  
-  AesCtrParams = record
-    counter : TJSBufferSource;
-    length_ : Byte;external name 'length';
-  end;
-  
-  { --------------------------------------------------------------------
-    AesGcmParams
-    --------------------------------------------------------------------}
-  
-  AesGcmParams = record
-    iv : TJSBufferSource;
-    additionalData : TJSBufferSource;
-    tagLength : Byte;
-  end;
-  
-  { --------------------------------------------------------------------
-    HmacImportParams
-    --------------------------------------------------------------------}
-  
-  HmacImportParams = record
-    hash : AlgorithmIdentifier;
-  end;
-  
-  { --------------------------------------------------------------------
-    Pbkdf2Params
-    --------------------------------------------------------------------}
-  
-  Pbkdf2Params = record
-    salt : TJSBufferSource;
-    iterations : NativeInt;
-    hash : AlgorithmIdentifier;
-  end;
-  
-  { --------------------------------------------------------------------
-    RsaHashedImportParams
-    --------------------------------------------------------------------}
-  
-  RsaHashedImportParams = record
-    hash : AlgorithmIdentifier;
-  end;
-  
-  { --------------------------------------------------------------------
-    AesKeyGenParams
-    --------------------------------------------------------------------}
-  
-  AesKeyGenParams = record
-    length_ : Integer;external name 'length';
-  end;
-  
-  { --------------------------------------------------------------------
-    HmacKeyGenParams
-    --------------------------------------------------------------------}
-  
-  HmacKeyGenParams = record
-    hash : AlgorithmIdentifier;
-    length_ : Integer;external name 'length';
-  end;
-  
-  { --------------------------------------------------------------------
-    RsaHashedKeyGenParams
-    --------------------------------------------------------------------}
-  
-  RsaHashedKeyGenParams = record
-    modulusLength : Integer;
-    publicExponent : BigInteger;
-    hash : AlgorithmIdentifier;
-  end;
-  
-  { --------------------------------------------------------------------
-    RsaOaepParams
-    --------------------------------------------------------------------}
-  
-  RsaOaepParams = record
-    label_ : TJSBufferSource;external name 'label';
-  end;
-  
-  { --------------------------------------------------------------------
-    RsaPssParams
-    --------------------------------------------------------------------}
-  
-  RsaPssParams = record
-    saltLength : Integer;
-  end;
-  
-  { --------------------------------------------------------------------
-    DhKeyGenParams
-    --------------------------------------------------------------------}
-  
-  DhKeyGenParams = record
-    prime : BigInteger;
-    generator : BigInteger;
-  end;
-  
-  { --------------------------------------------------------------------
-    EcKeyGenParams
-    --------------------------------------------------------------------}
-  
-  EcKeyGenParams = record
-    _namedCurve : NamedCurve;external name 'namedCurve';
-  end;
-  
-  { --------------------------------------------------------------------
-    AesDerivedKeyParams
-    --------------------------------------------------------------------}
-  
-  AesDerivedKeyParams = record
-    length_ : Integer;external name 'length';
-  end;
-  
-  { --------------------------------------------------------------------
-    HmacDerivedKeyParams
-    --------------------------------------------------------------------}
-  
-  HmacDerivedKeyParams = record
-    length_ : Integer;external name 'length';
-  end;
-  
-  { --------------------------------------------------------------------
-    EcdhKeyDeriveParams
-    --------------------------------------------------------------------}
-  
-  EcdhKeyDeriveParams = record
-    public_ : TJSCryptoKey; external name 'public';
-  end;
-  
-  { --------------------------------------------------------------------
-    DhKeyDeriveParams
-    --------------------------------------------------------------------}
-  
-  DhKeyDeriveParams = record
-    public_ : TJSCryptoKey;  external name 'public';
-  end;
-  
-  { --------------------------------------------------------------------
-    DhImportKeyParams
-    --------------------------------------------------------------------}
-  
-  DhImportKeyParams = record
-    prime : BigInteger;
-    generator : BigInteger;
-  end;
-  
-  { --------------------------------------------------------------------
-    EcdsaParams
-    --------------------------------------------------------------------}
-  
-  EcdsaParams = record
-    hash : AlgorithmIdentifier;
-  end;
-  
-  { --------------------------------------------------------------------
-    EcKeyImportParams
-    --------------------------------------------------------------------}
-  
-  EcKeyImportParams = record
-    _namedCurve : NamedCurve;external name 'namedCurve';
-  end;
-  
-  { --------------------------------------------------------------------
-    HkdfParams
-    --------------------------------------------------------------------}
-  
-  HkdfParams = record
-    hash : AlgorithmIdentifier;
-    salt : TJSBufferSource;
-    info : TJSBufferSource;
-  end;
-  
-  { --------------------------------------------------------------------
-    RsaOtherPrimesInfo
-    --------------------------------------------------------------------}
-  
-  RsaOtherPrimesInfo = record
-    r : String;
-    d : String;
-    t : String;
-  end;
-  
-  { --------------------------------------------------------------------
-    JsonWebKey
-    --------------------------------------------------------------------}
-  
-  TRsaOtherPrimesInfoDynArray = Array of RsaOtherPrimesInfo;
-  JsonWebKey = record
-    kty : String;
-    use : String;
-    key_ops : TStringDynArray;
-    alg : String;
-    ext : boolean;
-    crv : String;
-    x : String;
-    y : String;
-    d : String;
-    n : String;
-    e : String;
-    p : String;
-    q : String;
-    dp : String;
-    dq : String;
-    qi : String;
-    oth : TRsaOtherPrimesInfoDynArray;
-    k : String;
-  end;
-  
-  { --------------------------------------------------------------------
-    CryptoKeyPair
-    --------------------------------------------------------------------}
-  
-  CryptoKeyPair = record
-    publicKey : TJSCryptoKey;
-    privateKey : TJSCryptoKey;
-  end;
-  
-  { --------------------------------------------------------------------
-    TJSCryptoKey
-    --------------------------------------------------------------------}
-  
-  TKeyUsageDynArray = Array of KeyUsage;
-  TJSCryptoKey = class external name 'CryptoKey' 
-  Private
-    Ftype_ : KeyType; external name 'type'; 
-    Fextractable : boolean; external name 'extractable'; 
-    Falgorithm : TJSObject; external name 'algorithm'; 
-    Fusages : TKeyUsageDynArray; external name 'usages'; 
-  Public
-    
-    Property type_ : KeyType Read Ftype_; 
-    Property extractable : boolean Read Fextractable; 
-    Property algorithm : TJSObject Read Falgorithm; 
-    Property usages : TKeyUsageDynArray Read Fusages; 
-  end;
-  
-  { --------------------------------------------------------------------
-    TJSSubtleCrypto
-    --------------------------------------------------------------------}
-  
-  TJSSubtleCrypto = class external name 'SubtleCrypto' 
-  Private
-  Public
-    function encrypt(algorithm : AlgorithmIdentifier; key : TJSCryptoKey; data : TJSBufferSource): TJSPromise;
-    function decrypt(algorithm : AlgorithmIdentifier; key : TJSCryptoKey; data : TJSBufferSource): TJSPromise;
-    function sign(algorithm : AlgorithmIdentifier; key : TJSCryptoKey; data : TJSBufferSource): TJSPromise;
-    function verify(algorithm : AlgorithmIdentifier; key : TJSCryptoKey; signature : TJSBufferSource; data : TJSBufferSource): TJSPromise;
-    function digest(algorithm : AlgorithmIdentifier; data : TJSBufferSource): TJSPromise;
-    function generateKey(algorithm : AlgorithmIdentifier; extractable : boolean; keyUsages : TKeyUsageDynArray): TJSPromise;
-    function deriveKey(algorithm : AlgorithmIdentifier; baseKey : TJSCryptoKey; derivedKeyType : AlgorithmIdentifier; extractable : boolean; keyUsages : TKeyUsageDynArray): TJSPromise;
-    function deriveBits(algorithm : AlgorithmIdentifier; baseKey : TJSCryptoKey; length_ : NativeInt): TJSPromise;
-    function importKey(format : KeyFormat; keyData : TJSObject; algorithm : AlgorithmIdentifier; extractable : boolean; keyUsages : TKeyUsageDynArray): TJSPromise;
-    function exportKey(format : KeyFormat; key : TJSCryptoKey): TJSPromise;
-    function wrapKey(format : KeyFormat; key : TJSCryptoKey; wrappingKey : TJSCryptoKey; wrapAlgorithm : AlgorithmIdentifier): TJSPromise;
-    function unwrapKey(format : KeyFormat; wrappedKey : TJSBufferSource; unwrappingKey : TJSCryptoKey; unwrapAlgorithm : AlgorithmIdentifier; unwrappedKeyAlgorithm : AlgorithmIdentifier; extractable : boolean; keyUsages : TKeyUsageDynArray): TJSPromise;
-  end;
-  { TJSCrypto }
 
 
-  TJSCrypto = class external name 'Crypto'  (TJSObject)
-  private
-    Fsubtle: TJSSubtleCrypto; external name 'subtle';
-  Public
-    procedure getRandomValues (anArray : TJSTypedArray);
-    property subtle : TJSSubtleCrypto Read Fsubtle;
-  end;
-  
+
+  Algorithm = weborworker.TJSCryptoAlgorithm;
+  AesCbcParams = weborworker.TJSCryptoAesCbcParams;
+  AesCtrParams = weborworker.TJSCryptoAesCtrParams;
+  AesGcmParams = weborworker.TJSCryptoAesGcmParams;
+  HmacImportParams = weborworker.TJSCryptoHmacImportParams;
+  Pbkdf2Params = weborworker.TJSCryptoPbkdf2Params;
+  RsaHashedImportParams = weborworker.TJSCryptoRsaHashedImportParams;
+  AesKeyGenParams = weborworker.TJSCryptoAesKeyGenParams;
+  HmacKeyGenParams = weborworker.TJSCryptoHmacKeyGenParams;
+  RsaHashedKeyGenParams = weborworker.TJSCryptoRsaHashedKeyGenParams;
+  RsaOaepParams = weborworker.TJSCryptoRsaOaepParams;
+  RsaPssParams = weborworker.TJSCryptoRsaPssParams;
+  DhKeyGenParams = weborworker.TJSCryptoDhKeyGenParams;
+  EcKeyGenParams = weborworker.TJSCryptoEcKeyGenParams;
+  AesDerivedKeyParams = weborworker.TJSCryptoAesDerivedKeyParams;
+  HmacDerivedKeyParams = weborworker.TJSCryptoHmacDerivedKeyParams;
+  EcdhKeyDeriveParams = weborworker.TJSCryptoEcdhKeyDeriveParams;
+  DhKeyDeriveParams = weborworker.TJSCryptoDhKeyDeriveParams;
+  DhImportKeyParams = weborworker.TJSCryptoDhImportKeyParams;
+
+  EcdsaParams = weborworker.TJSCryptoEcdsaParams;
+  EcKeyImportParams = weborworker.TJSCryptoEcKeyImportParams;
+
+  CryptoKeyPair = weborworker.TJSCryptoKeyPair;
+  HkdfParams = weborworker.TJSCryptoHkdfParams;
+  RsaOtherPrimesInfo = weborworker.TJSCryptoRsaOtherPrimesInfo;
+  TRsaOtherPrimesInfoDynArray = weborworker.TJSCryptoRsaOtherPrimesInfoDynArray;
+  TKeyUsageDynArray = weborworker.TJSCryptoKeyUsageDynArray;
+  TJSCryptoKey = weborworker.TJSCryptoKey;
+  TJSSubtleCrypto = weborworker.TJSSubtleCrypto;
+  TJSCrypto = weborworker.TJSCrypto;
+
   { TJSHistory }
   { TJSHistory }
 
 
   TJSHistory = class external name 'History'  (TJSObject)
   TJSHistory = class external name 'History'  (TJSObject)

+ 301 - 11
packages/rtl/weborworker.pas

@@ -9,6 +9,8 @@ uses
   JS, types;
   JS, types;
 
 
 type
 type
+  TJSCryptoKey = Class;
+  TJSSubtleCrypto = Class;
   TJSEventTarget = class;
   TJSEventTarget = class;
   TIDBDatabase = class;
   TIDBDatabase = class;
   TJSIDBObjectStore = class;
   TJSIDBObjectStore = class;
@@ -658,10 +660,305 @@ type
     resizeQuality : String;
     resizeQuality : String;
   end;
   end;
 
 
+  { ----------------------------------------------------------------------
+    Crypto
+    ----------------------------------------------------------------------}
 
 
+  TJSCryptoAlgorithmIdentifier = JSValue;
+  TJSCryptoNamedCurve = JSValue;
+  TJSCryptoBigInteger = TJSUint8Array;
+  TJSCryptoKeyUsage = string;
+  TJSCryptoKeyType = string;
+  TJSCryptoKeyFormat = string;
+
+    { --------------------------------------------------------------------
+      Algorithm
+      --------------------------------------------------------------------}
+
+  TJSCryptoAlgorithm = record
+    name : String;
+  end;
+
+    { --------------------------------------------------------------------
+      AesCbcParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoAesCbcParams = record
+      iv : TJSBufferSource;
+    end;
+
+    { --------------------------------------------------------------------
+      AesCtrParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoAesCtrParams = record
+      counter : TJSBufferSource;
+      length_ : Byte;external name 'length';
+    end;
+
+    { --------------------------------------------------------------------
+      AesGcmParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoAesGcmParams = record
+      iv : TJSBufferSource;
+      additionalData : TJSBufferSource;
+      tagLength : Byte;
+    end;
+
+    { --------------------------------------------------------------------
+      HmacImportParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoHmacImportParams = record
+      hash : TJSCryptoAlgorithmIdentifier;
+    end;
+
+    { --------------------------------------------------------------------
+      Pbkdf2Params
+      --------------------------------------------------------------------}
+
+    TJSCryptoPbkdf2Params = record
+      salt : TJSBufferSource;
+      iterations : NativeInt;
+      hash : TJSCryptoAlgorithmIdentifier;
+    end;
+
+    { --------------------------------------------------------------------
+      RsaHashedImportParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoRsaHashedImportParams = record
+      hash : TJSCryptoAlgorithmIdentifier;
+    end;
+
+    { --------------------------------------------------------------------
+      AesKeyGenParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoAesKeyGenParams = record
+      length_ : Integer;external name 'length';
+    end;
+
+    { --------------------------------------------------------------------
+      HmacKeyGenParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoHmacKeyGenParams = record
+      hash : TJSCryptoAlgorithmIdentifier;
+      length_ : Integer;external name 'length';
+    end;
+
+    { --------------------------------------------------------------------
+      RsaHashedKeyGenParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoRsaHashedKeyGenParams = record
+      modulusLength : Integer;
+      publicExponent : TJSCryptoBigInteger;
+      hash : TJSCryptoAlgorithmIdentifier;
+    end;
+
+    { --------------------------------------------------------------------
+      RsaOaepParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoRsaOaepParams = record
+      label_ : TJSBufferSource;external name 'label';
+    end;
+
+    { --------------------------------------------------------------------
+      RsaPssParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoRsaPssParams = record
+      saltLength : Integer;
+    end;
+
+    { --------------------------------------------------------------------
+      DhKeyGenParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoDhKeyGenParams = record
+      prime : TJSCryptoBigInteger;
+      generator : TJSCryptoBigInteger;
+    end;
+
+    { --------------------------------------------------------------------
+      EcKeyGenParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoEcKeyGenParams = record
+      _namedCurve : TJSCryptoNamedCurve;external name 'namedCurve';
+    end;
+
+    { --------------------------------------------------------------------
+      AesDerivedKeyParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoAesDerivedKeyParams = record
+      length_ : Integer;external name 'length';
+    end;
+
+    { --------------------------------------------------------------------
+      HmacDerivedKeyParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoHmacDerivedKeyParams = record
+      length_ : Integer;external name 'length';
+    end;
+
+    { --------------------------------------------------------------------
+      EcdhKeyDeriveParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoEcdhKeyDeriveParams = record
+      public_ : TJSCryptoKey; external name 'public';
+    end;
+
+    { --------------------------------------------------------------------
+      DhKeyDeriveParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoDhKeyDeriveParams = record
+      public_ : TJSCryptoKey;  external name 'public';
+    end;
+
+    { --------------------------------------------------------------------
+      DhImportKeyParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoDhImportKeyParams = record
+      prime : TJSCryptoBigInteger;
+      generator : TJSCryptoBigInteger;
+    end;
+
+    { --------------------------------------------------------------------
+      EcdsaParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoEcdsaParams = record
+      hash : TJSCryptoAlgorithmIdentifier;
+    end;
+
+    { --------------------------------------------------------------------
+      EcKeyImportParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoEcKeyImportParams = record
+      _namedCurve : TJSCryptoNamedCurve;external name 'namedCurve';
+    end;
+
+    { --------------------------------------------------------------------
+      HkdfParams
+      --------------------------------------------------------------------}
+
+    TJSCryptoHkdfParams = record
+      hash : TJSCryptoAlgorithmIdentifier;
+      salt : TJSBufferSource;
+      info : TJSBufferSource;
+    end;
+
+    { --------------------------------------------------------------------
+      RsaOtherPrimesInfo
+      --------------------------------------------------------------------}
+
+    TJSCryptoRsaOtherPrimesInfo = record
+      r : String;
+      d : String;
+      t : String;
+    end;
+
+    { --------------------------------------------------------------------
+      JsonWebKey
+      --------------------------------------------------------------------}
+
+    TJSCryptoRsaOtherPrimesInfoDynArray = Array of TJSCryptoRsaOtherPrimesInfo;
+    TJSCryptoJsonWebKey = record
+      kty : String;
+      use : String;
+      key_ops : TStringDynArray;
+      alg : String;
+      ext : boolean;
+      crv : String;
+      x : String;
+      y : String;
+      d : String;
+      n : String;
+      e : String;
+      p : String;
+      q : String;
+      dp : String;
+      dq : String;
+      qi : String;
+      oth : TJSCryptoRsaOtherPrimesInfoDynArray;
+      k : String;
+    end;
+
+    { --------------------------------------------------------------------
+      CryptoKeyPair
+      --------------------------------------------------------------------}
+
+    TJSCryptoKeyPair = record
+      publicKey : TJSCryptoKey;
+      privateKey : TJSCryptoKey;
+    end;
+
+    { --------------------------------------------------------------------
+      TJSCryptoKey
+      --------------------------------------------------------------------}
+
+    TJSCryptoKeyUsageDynArray = Array of TJSCryptoKeyUsage;
+    TJSCryptoKey = class external name 'CryptoKey'
+    Private
+      Ftype_ : TJSCryptoKeyType; external name 'type';
+      Fextractable : boolean; external name 'extractable';
+      Falgorithm : TJSObject; external name 'algorithm';
+      Fusages : TJSCryptoKeyUsageDynArray; external name 'usages';
+    Public
+      Property type_ : TJSCryptoKeyType Read Ftype_;
+      Property extractable : boolean Read Fextractable;
+      Property algorithm : TJSObject Read Falgorithm;
+      Property usages : TJSCryptoKeyUsageDynArray Read Fusages;
+    end;
+
+    { --------------------------------------------------------------------
+      TJSSubtleCrypto
+      --------------------------------------------------------------------}
+
+    TJSSubtleCrypto = class external name 'SubtleCrypto'
+    Private
+    Public
+      function encrypt(algorithm :  TJSCryptoAlgorithmIdentifier; key : TJSCryptoKey; data : TJSBufferSource): TJSPromise;
+      function decrypt(algorithm : TJSCryptoAlgorithmIdentifier; key : TJSCryptoKey; data : TJSBufferSource): TJSPromise;
+      function sign(algorithm : TJSCryptoAlgorithmIdentifier; key : TJSCryptoKey; data : TJSBufferSource): TJSPromise;
+      function verify(algorithm : TJSCryptoAlgorithmIdentifier; key : TJSCryptoKey; signature : TJSBufferSource; data : TJSBufferSource): TJSPromise;
+      function digest(algorithm : TJSCryptoAlgorithmIdentifier; data : TJSBufferSource): TJSPromise;
+      function generateKey(algorithm : TJSCryptoAlgorithmIdentifier; extractable : boolean; keyUsages : TJSCryptoKeyUsageDynArray): TJSPromise;
+      function deriveKey(algorithm : TJSCryptoAlgorithmIdentifier; baseKey : TJSCryptoKey; derivedKeyType : TJSCryptoAlgorithmIdentifier; extractable : boolean; keyUsages : TJSCryptoKeyUsageDynArray): TJSPromise;
+      function deriveBits(algorithm : TJSCryptoAlgorithmIdentifier; baseKey : TJSCryptoKey; length_ : NativeInt): TJSPromise;
+      function importKey(format : TJSCryptoKeyFormat; keyData : TJSObject; algorithm : TJSCryptoAlgorithmIdentifier; extractable : boolean; keyUsages : TJSCryptoKeyUsageDynArray): TJSPromise;
+      function exportKey(format : TJSCryptoKeyFormat; key : TJSCryptoKey): TJSPromise;
+      function wrapKey(format : TJSCryptoKeyFormat; key : TJSCryptoKey; wrappingKey : TJSCryptoKey; wrapAlgorithm : TJSCryptoAlgorithmIdentifier): TJSPromise;
+      function unwrapKey(format : TJSCryptoKeyFormat; wrappedKey : TJSBufferSource; unwrappingKey : TJSCryptoKey; unwrapAlgorithm : TJSCryptoAlgorithmIdentifier; unwrappedKeyAlgorithm : TJSCryptoAlgorithmIdentifier; extractable : boolean; keyUsages : TJSCryptoKeyUsageDynArray): TJSPromise;
+    end;
+    { TJSCrypto }
+
+    TJSCrypto = class external name 'Crypto'  (TJSObject)
+    private
+      Fsubtle: TJSSubtleCrypto; external name 'subtle';
+    Public
+      procedure getRandomValues (anArray : TJSTypedArray);
+      property subtle : TJSSubtleCrypto Read Fsubtle;
+    end;
+
+
+
+  { TWindowOrWorkerGlobalScope }
 
 
   TWindowOrWorkerGlobalScope = Class external name 'Object' (TJSObject)
   TWindowOrWorkerGlobalScope = Class external name 'Object' (TJSObject)
   Private
   Private
+    FCrypto: TJSCrypto; external name 'crypto';
     FisSecureContext : boolean; external name 'isSecureContext';
     FisSecureContext : boolean; external name 'isSecureContext';
     FIDBFactory : TJSIDBFactory; external name 'IDBFactory';
     FIDBFactory : TJSIDBFactory; external name 'IDBFactory';
     fcaches : TJSCacheStorage; external name 'caches';
     fcaches : TJSCacheStorage; external name 'caches';
@@ -685,20 +982,13 @@ type
     property isSecureContext : Boolean Read FisSecureContext;
     property isSecureContext : Boolean Read FisSecureContext;
     property IDBFactory : TJSIDBFactory Read FIDBFactory;
     property IDBFactory : TJSIDBFactory Read FIDBFactory;
     property caches : TJSCacheStorage read fcaches;
     property caches : TJSCacheStorage read fcaches;
+    property crypto : TJSCrypto Read FCrypto;
   end;
   end;
 
 
 
 
-
-
-(*
-
-
-// https://wicg.github.io/scheduling-apis/#ref-for-windoworworkerglobalscope-scheduler
-partial interface mixin WindowOrWorkerGlobalScope {
-  [Replaceable, Pref="dom.enable_web_task_scheduling", SameObject]
-  readonly attribute Scheduler scheduler;
-};
-*)
+var
+  Console : TJSConsole; external name 'console';
+  Crypto: TJSCrypto; external name 'crypto';
 
 
 implementation
 implementation
 
 

+ 5 - 3
packages/wasi/wasienv.pas

@@ -178,7 +178,7 @@ Const
   RIGHTS_BLOCK_DEVICE_BASE = RIGHTS_ALL;
   RIGHTS_BLOCK_DEVICE_BASE = RIGHTS_ALL;
   RIGHTS_BLOCK_DEVICE_INHERITING = RIGHTS_ALL;
   RIGHTS_BLOCK_DEVICE_INHERITING = RIGHTS_ALL;
 
 
-  RIGHTS_CHARACTER_DEVICE_BASE = RIGHTS_ALL;
+  RIGHTS_CHARaACTER_DEVICE_BASE = RIGHTS_ALL;
   RIGHTS_CHARACTER_DEVICE_INHERITING = RIGHTS_ALL;
   RIGHTS_CHARACTER_DEVICE_INHERITING = RIGHTS_ALL;
 
 
   RIGHTS_REGULAR_FILE_BASE = WASI_RIGHT_FD_DATASYNC or WASI_RIGHT_FD_READ
   RIGHTS_REGULAR_FILE_BASE = WASI_RIGHT_FD_DATASYNC or WASI_RIGHT_FD_READ
@@ -427,7 +427,7 @@ type
 
 
 implementation
 implementation
 
 
-uses web;
+uses weborworker;
 
 
 function TImportExtension.getModuleMemoryDataView : TJSDataView;  
 function TImportExtension.getModuleMemoryDataView : TJSDataView;  
 
 
@@ -809,7 +809,9 @@ var
   View : TJSDataView;
   View : TJSDataView;
 begin
 begin
   arr:=TJSUint8Array.new(BufLen);
   arr:=TJSUint8Array.new(BufLen);
-  window.crypto.getRandomValues(arr);
+
+  crypto.getRandomValues(arr);
+
   view:=getModuleMemoryDataView;
   view:=getModuleMemoryDataView;
   For I:=0 to arr.length-1 do
   For I:=0 to arr.length-1 do
     view.setInt8(bufptr+i,arr[i]);
     view.setInt8(bufptr+i,arr[i]);