* Fix Cyrpto.Subtle api

This commit is contained in:
michael 2019-04-23 21:20:07 +00:00
parent a751522df8
commit 1d83758b3f

View File

@ -1005,53 +1005,301 @@ Type
procedure warn(Obj1 : JSValue); varargs;
end;
{ TJSCryptoKey }
TJSCryptoKey = class external name 'CryptoKey' (TJSObject)
private
FAlgorithm: JSValue; external name 'algorithm';
FExtractable: Boolean; external name 'extractable';
FType: string; external name 'type';
FUsages: TStringDynArray; external name 'usages';
Public
property _type : string read FType;
property extractable: Boolean read FExtractable;
property algorithm : JSValue read FAlgorithm;
property usages : TStringDynArray Read FUsages;
end;
{ TJSSubtleCrypto }
// TJSBufferSource = class external name 'BufferSource' end;
// TJSTypedArray = class external name 'TypedArray' end;
TJSSubtleCrypto = class external name 'SubtleCrypto' (TJSObject)
Public
function decrypt(algorithm : JSValue; aKey : TJSCryptoKey; aData : TJSBufferSource) : TJSPromise;
function deriveKey(algorithm : JSValue; aMasterKey : TJSCryptoKey; aDerivedAlgo : JSValue; extractable : Boolean; Usages : TStringDynArray) : TJSPromise;
function digest(algorithm : string; Buffer : TJSArrayBuffer) : TJSPromise; overload;
function digest(algorithm : string; Buffer : TJSTypedArray) : TJSPromise; overload;
function encrypt(algorithm : JSValue; aKey : TJSCryptoKey; aData : TJSBufferSource) : TJSPromise;
function exportKey(algorithm : String; AKey : TJSCryptoKey) : TJSPromise;
function generateKey(algorithm : JSValue; extractable : Boolean; Usages : TStringDynArray) : TJSPromise;
function importKey(format : String; KeyData : TJSArrayBuffer; algorithm : String; extractable : Boolean; Usages : TStringDynArray) : TJSPromise;
function sign(algorithm : string; Key : TJSCryptoKey; aText : TJSArrayBuffer) : TJSPromise; overload;
function unwrapKey(algorithm : string; wrappedKey : TJSArrayBuffer; Key: TJSCryptoKey;
unwrapAlgo : string; unwrappedKeyAlgo : string;
extractable : Boolean; Usages : TStringDynArray) : TJSPromise;
function verify(algorithm : String; key : TJSCryptoKey; Signature : TJSArrayBuffer;
textToVerify : TJSArrayBuffer): TJSPromise;
function wrapKey(aFormat : string; Key,WrappingKey : TJSCryptoKey; WrapAlgorithm : String) : TJSPromise;
// Forward class definitions
TJSCryptoKey = Class;
TJSSubtleCrypto = Class;
KeyType = String;
KeyUsage = String;
NamedCurve = String;
BigInteger = TJSUint8Array;
KeyFormat = String;
// 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;
end;
{ --------------------------------------------------------------------
DhKeyDeriveParams
--------------------------------------------------------------------}
DhKeyDeriveParams = record
public : TJSCryptoKey;
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
--------------------------------------------------------------------}
TStringDynArray = Array of String;
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
FsubtleCrypto: TJSSubtleCrypto;
Fsubtle: TJSSubtleCrypto; external name 'subtle';
Public
procedure getRandomValues (anArray : TJSTypedArray);
property subtleCrypto : TJSSubtleCrypto Read FsubtleCrypto;
property subtle : TJSSubtleCrypto Read Fsubtle;
end;
{ TJSHistory }