Sample code for 30+ languages & platforms
SQL Server

Verify an RSA Signature Against the Signed String

See more Apple Keychain Examples

Demonstrates how to validate an RSA Signature against the string that was signed.

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

    -- Create the same string we previously signed in this example: 
    -- RSA Sign utf-8 Bytes of String to get Base64 RSA Signature

    DECLARE @sb int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sb OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @crlfLineEnding int
    SELECT @crlfLineEnding = 1
    DECLARE @i int

    SELECT @i = 0
    WHILE @i <= 10
      BEGIN
        EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'This is a test.', @crlfLineEnding
        SELECT @i = @i + 1
      END

    DECLARE @base64_rsa_sig nvarchar(4000)
    SELECT @base64_rsa_sig = 'gWgpEXQqvXN6wh0MuFXPiw2xCb8cnmdizBT1TD1Tpm2GlJ8gnD59DGSj35GGXk1tM+mCOvMa2uW/9gmz8p6A90JLbn918i/2wKGvcde4wXnzPO7JADSNn2UwYzf3rp4/q/JrHv1GZETRJhABSFqTxOgdmdbEJQE/zijOSctCtQAM2CTb6t2BO8uHKSSUAwPH2cbeWxqsaVRLT4ruk5nZOxhoLgLMSjupiSzbE8zSTkkFOEHD+Mbb2xwg85AI0E4DsUnp+hLwwtS0blesgSyvtBY8oJODJeFcJsR7JDOTPdzHQHgJRl/2A4ij5xT91TpXy7ok43jhT6O9j7Q3qrafIQ=='

    -- Get the public key to be used for signature verification.
    DECLARE @pubKey int
    EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT

    EXEC sp_OAMethod @pubKey, 'LoadFromFile', @success OUT, 'rsaKeys/chilkat-rsa-2048.pem'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pubKey, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sb
        EXEC @hr = sp_OADestroy @pubKey
        RETURN
      END

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

    EXEC sp_OAMethod @rsa, 'UsePublicKey', @success OUT, @pubKey
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sb
        EXEC @hr = sp_OADestroy @pubKey
        EXEC @hr = sp_OADestroy @rsa
        RETURN
      END

    -- Verify the string against the signature.
    -- We signed the utf-8 byte representation of the string, so we must indicate
    -- to also validate against the utf-8 byte representation.
    EXEC sp_OASetProperty @rsa, 'Charset', 'utf-8'
    EXEC sp_OASetProperty @rsa, 'EncodingMode', 'base64'
    DECLARE @signedString nvarchar(4000)
    EXEC sp_OAMethod @sb, 'GetAsString', @signedString OUT
    EXEC sp_OAMethod @rsa, 'VerifyStringENC', @success OUT, @signedString, 'sha256', @base64_rsa_sig

    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0

        PRINT 'Signature invalid.'
      END
    ELSE
      BEGIN

        PRINT 'Signature valid.'
      END

    EXEC @hr = sp_OADestroy @sb
    EXEC @hr = sp_OADestroy @pubKey
    EXEC @hr = sp_OADestroy @rsa


END
GO