![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) RSA Sign an Encoded HashSee more RSA ExamplesDemonstrates signing a hash (e.g., SHA256) provided as an encoded string (e.g., base64 or hex).
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) -- Assuming the smartcard/USB token is installed with the correct drivers from the manufacturer, -- this code can work on multiple platforms including Windows, MacOS, Linux, and iOS. -- Chilkat automatically detects and determines the way in which the HSM is used, -- which can be by PKCS11, Apple Keychain, Microsoft CNG / Crypto API, or ScMinidriver. DECLARE @cert int -- Use "Chilkat_9_5_0.Cert" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- Set the token/smartcard PIN prior to loading. EXEC sp_OASetProperty @cert, 'SmartCardPin', '123456' -- Specify the certificate by its common name. DECLARE @success int EXEC sp_OAMethod @cert, 'LoadFromSmartcard', @success OUT, 'cn=chilkat-rsa-2048' IF @success = 0 BEGIN EXEC sp_OAGetProperty @cert, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @cert RETURN END EXEC sp_OAGetProperty @cert, 'SubjectCN', @sTmp0 OUT PRINT 'Signing with the private key for this cert: ' + @sTmp0 -- Create data to be hashed and signed. DECLARE @bd int -- Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.BinData', @bd OUT DECLARE @i int SELECT @i = 0 WHILE @i <= 100 BEGIN EXEC sp_OAMethod @bd, 'AppendEncoded', @success OUT, '000102030405060708090A0B0C0D0E0F', 'hex' SELECT @i = @i + 1 END DECLARE @rsa int -- Use "Chilkat_9_5_0.Rsa" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa OUT -- Use the certificate's private key for signing. EXEC sp_OAMethod @rsa, 'SetX509Cert', @success OUT, @cert, 1 IF @success = 0 BEGIN EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @cert EXEC @hr = sp_OADestroy @bd EXEC @hr = sp_OADestroy @rsa RETURN END -- We'll first compute the hash and then pass the encoded hash to be signed. DECLARE @sha256_base64 nvarchar(4000) EXEC sp_OAMethod @bd, 'GetHash', @sha256_base64 OUT, 'sha256', 'base64' PRINT 'sha256 hash in base64 format: ' + @sha256_base64 -- Pass in the base64 hash and return a base64 signature. EXEC sp_OASetProperty @rsa, 'EncodingMode', 'base64' DECLARE @rsaSig_base64 nvarchar(4000) EXEC sp_OAMethod @rsa, 'SignHashENC', @rsaSig_base64 OUT, @sha256_base64, 'sha256' IF @success = 0 BEGIN EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @cert EXEC @hr = sp_OADestroy @bd EXEC @hr = sp_OADestroy @rsa RETURN END PRINT 'RSA signature as base64: ' + @rsaSig_base64 EXEC @hr = sp_OADestroy @cert EXEC @hr = sp_OADestroy @bd EXEC @hr = sp_OADestroy @rsa END GO |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.