Sample code for 30+ languages & platforms
SQL Server

RSA Hash Binary Data and Sign (and Verify)

See more RSA Examples

Demonstrates how to sign the hash of binary data. Also demonstrates how to verify the RSA signature.

Chilkat SQL Server Downloads

SQL Server
-- 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)
    DECLARE @success int
    SELECT @success = 0

    -- This example requires the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    -- Load an RSA private key for signing.
    DECLARE @privKey int
    EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OAMethod @privKey, 'LoadEncryptedPemFile', @success OUT, 'qa_data/pem/rsa_passwd.pem', 'passwd'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @privKey
        RETURN
      END

    DECLARE @rsa int
    EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa OUT

    EXEC sp_OAMethod @rsa, 'UsePrivateKey', @success OUT, @privKey

    -- We have some binary data (in hex) to sign
    DECLARE @originalData nvarchar(4000)
    SELECT @originalData = '0102030405060708090A'
    DECLARE @bdData int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdData OUT

    EXEC sp_OAMethod @bdData, 'AppendEncoded', @success OUT, @originalData, 'hex'

    -- Hash (SHA-256) and sign the hash:
    DECLARE @bdSignature int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdSignature OUT

    EXEC sp_OAMethod @rsa, 'SignBd', @success OUT, @bdData, 'sha256', @bdSignature
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @privKey
        EXEC @hr = sp_OADestroy @rsa
        EXEC @hr = sp_OADestroy @bdData
        EXEC @hr = sp_OADestroy @bdSignature
        RETURN
      END

    -- Show the RSA signature in base64
    EXEC sp_OAMethod @bdSignature, 'GetEncoded', @sTmp0 OUT, 'base64'
    PRINT @sTmp0

    -- ------------------------------------------
    -- Get the public key from the private key
    DECLARE @pubKey int
    EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT

    EXEC sp_OAMethod @privKey, 'ToPublicKey', @success OUT, @pubKey

    -- Verify the signature..
    DECLARE @rsa2 int
    EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa2 OUT

    EXEC sp_OAMethod @rsa2, 'UsePublicKey', @success OUT, @pubKey

    DECLARE @bVerified int
    EXEC sp_OAMethod @rsa2, 'VerifyBd', @bVerified OUT, @bdData, 'sha256', @bdSignature

    PRINT 'signature verified: ' + @bVerified

    EXEC @hr = sp_OADestroy @privKey
    EXEC @hr = sp_OADestroy @rsa
    EXEC @hr = sp_OADestroy @bdData
    EXEC @hr = sp_OADestroy @bdSignature
    EXEC @hr = sp_OADestroy @pubKey
    EXEC @hr = sp_OADestroy @rsa2


END
GO