@@ -492,6 +492,8 @@ ISC_TIMESTAMP_TZ_EX = record
492492 ICryptKeyCallback_callbackPtr = function(this: ICryptKeyCallback; dataLength: Cardinal; data: Pointer; bufferLength: Cardinal; buffer: Pointer): Cardinal; cdecl;
493493 ICryptKeyCallback_afterAttachPtr = function(this: ICryptKeyCallback; status: IStatus; dbName: PAnsiChar; attStatus: IStatus): Cardinal; cdecl;
494494 ICryptKeyCallback_disposePtr = procedure(this: ICryptKeyCallback); cdecl;
495+ ICryptKeyCallback_getHashLengthPtr = function(this: ICryptKeyCallback; status: IStatus): Integer; cdecl;
496+ ICryptKeyCallback_getHashDataPtr = procedure(this: ICryptKeyCallback; status: IStatus; hash: Pointer); cdecl;
495497 IKeyHolderPlugin_keyCallbackPtr = function(this: IKeyHolderPlugin; status: IStatus; callback: ICryptKeyCallback): Integer; cdecl;
496498 IKeyHolderPlugin_keyHandlePtr = function(this: IKeyHolderPlugin; status: IStatus; keyName: PAnsiChar): ICryptKeyCallback; cdecl;
497499 IKeyHolderPlugin_useOnlyOwnKeysPtr = function(this: IKeyHolderPlugin; status: IStatus): Boolean; cdecl;
@@ -2380,16 +2382,20 @@ CryptKeyCallbackVTable = class(VersionedVTable)
23802382 callback: ICryptKeyCallback_callbackPtr;
23812383 afterAttach: ICryptKeyCallback_afterAttachPtr;
23822384 dispose: ICryptKeyCallback_disposePtr;
2385+ getHashLength: ICryptKeyCallback_getHashLengthPtr;
2386+ getHashData: ICryptKeyCallback_getHashDataPtr;
23832387 end;
23842388
23852389 ICryptKeyCallback = class(IVersioned)
2386- const VERSION = 3 ;
2390+ const VERSION = 4 ;
23872391 const NO_RETRY = Cardinal(0);
23882392 const DO_RETRY = Cardinal(1);
23892393
23902394 function callback(dataLength: Cardinal; data: Pointer; bufferLength: Cardinal; buffer: Pointer): Cardinal;
23912395 function afterAttach(status: IStatus; dbName: PAnsiChar; attStatus: IStatus): Cardinal;
23922396 procedure dispose();
2397+ function getHashLength(status: IStatus): Integer;
2398+ procedure getHashData(status: IStatus; hash: Pointer);
23932399 end;
23942400
23952401 ICryptKeyCallbackImpl = class(ICryptKeyCallback)
@@ -2398,6 +2404,8 @@ ICryptKeyCallbackImpl = class(ICryptKeyCallback)
23982404 function callback(dataLength: Cardinal; data: Pointer; bufferLength: Cardinal; buffer: Pointer): Cardinal; virtual; abstract;
23992405 function afterAttach(status: IStatus; dbName: PAnsiChar; attStatus: IStatus): Cardinal; virtual;
24002406 procedure dispose(); virtual;
2407+ function getHashLength(status: IStatus): Integer; virtual; abstract;
2408+ procedure getHashData(status: IStatus; hash: Pointer); virtual; abstract;
24012409 end;
24022410
24032411 KeyHolderPluginVTable = class(PluginBaseVTable)
@@ -8151,6 +8159,29 @@ procedure ICryptKeyCallback.dispose();
81518159 end;
81528160end;
81538161
8162+ function ICryptKeyCallback.getHashLength(status: IStatus): Integer;
8163+ begin
8164+ if (vTable.version < 4) then begin
8165+ FbException.setVersionError(status, 'ICryptKeyCallback', vTable.version, 4);
8166+ Result := -1;
8167+ end
8168+ else begin
8169+ Result := CryptKeyCallbackVTable(vTable).getHashLength(Self, status);
8170+ end;
8171+ FbException.checkException(status);
8172+ end;
8173+
8174+ procedure ICryptKeyCallback.getHashData(status: IStatus; hash: Pointer);
8175+ begin
8176+ if (vTable.version < 4) then begin
8177+ FbException.setVersionError(status, 'ICryptKeyCallback', vTable.version, 4);
8178+ end
8179+ else begin
8180+ CryptKeyCallbackVTable(vTable).getHashData(Self, status, hash);
8181+ end;
8182+ FbException.checkException(status);
8183+ end;
8184+
81548185function IKeyHolderPlugin.keyCallback(status: IStatus; callback: ICryptKeyCallback): Integer;
81558186begin
81568187 Result := KeyHolderPluginVTable(vTable).keyCallback(Self, status, callback);
@@ -13507,6 +13538,25 @@ procedure ICryptKeyCallbackImpl.dispose();
1350713538begin
1350813539end;
1350913540
13541+ function ICryptKeyCallbackImpl_getHashLengthDispatcher(this: ICryptKeyCallback; status: IStatus): Integer; cdecl;
13542+ begin
13543+ Result := 0;
13544+ try
13545+ Result := ICryptKeyCallbackImpl(this).getHashLength(status);
13546+ except
13547+ on e: Exception do FbException.catchException(status, e);
13548+ end
13549+ end;
13550+
13551+ procedure ICryptKeyCallbackImpl_getHashDataDispatcher(this: ICryptKeyCallback; status: IStatus; hash: Pointer); cdecl;
13552+ begin
13553+ try
13554+ ICryptKeyCallbackImpl(this).getHashData(status, hash);
13555+ except
13556+ on e: Exception do FbException.catchException(status, e);
13557+ end
13558+ end;
13559+
1351013560var
1351113561 ICryptKeyCallbackImpl_vTable: CryptKeyCallbackVTable;
1351213562
@@ -17592,10 +17642,12 @@ initialization
1759217642 IWireCryptPluginImpl_vTable.setSpecificData := @IWireCryptPluginImpl_setSpecificDataDispatcher;
1759317643
1759417644 ICryptKeyCallbackImpl_vTable := CryptKeyCallbackVTable.create;
17595- ICryptKeyCallbackImpl_vTable.version := 3 ;
17645+ ICryptKeyCallbackImpl_vTable.version := 4 ;
1759617646 ICryptKeyCallbackImpl_vTable.callback := @ICryptKeyCallbackImpl_callbackDispatcher;
1759717647 ICryptKeyCallbackImpl_vTable.afterAttach := @ICryptKeyCallbackImpl_afterAttachDispatcher;
1759817648 ICryptKeyCallbackImpl_vTable.dispose := @ICryptKeyCallbackImpl_disposeDispatcher;
17649+ ICryptKeyCallbackImpl_vTable.getHashLength := @ICryptKeyCallbackImpl_getHashLengthDispatcher;
17650+ ICryptKeyCallbackImpl_vTable.getHashData := @ICryptKeyCallbackImpl_getHashDataDispatcher;
1759917651
1760017652 IKeyHolderPluginImpl_vTable := KeyHolderPluginVTable.create;
1760117653 IKeyHolderPluginImpl_vTable.version := 5;
0 commit comments