Sample code for 30+ languages & platforms
SQL Server

Everyware API RSA Encrypt JSON

See more RSA Examples

Demonstrates how to RSA encrypt JSON using everyware.com's RSA public key.

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 assumes the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    -- First build the JSON to be encrypted.
    DECLARE @json int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'provider_key', 'USER GUID HERE'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'menu_item', 'payment'
    DECLARE @dt int
    EXEC @hr = sp_OACreate 'Chilkat.CkDateTime', @dt OUT

    EXEC sp_OAMethod @dt, 'SetFromCurrentSystemTime', @success OUT
    EXEC sp_OAMethod @dt, 'GetAsUnixTimeStr', @sTmp0 OUT, 0
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'date_time', @sTmp0

    -- This build JSON like the following:

    -- {
    --     "provider_key": "USER GUID HERE",
    --     "menu_item": "payment",
    --     "date_time": "1588163411"
    -- }

    -- When we sign, we'll want to sign the most compact JSON possible
    EXEC sp_OASetProperty @json, 'EmitCompact', 1

    -- Everyware's RSA public key is at:  https://docs.everyware.com/docs/everyware-public-rsa-key
    DECLARE @sb int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sb OUT

    DECLARE @bCrlf int
    SELECT @bCrlf = 1
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, '-----BEGIN PUBLIC KEY-----', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxNbflxUSWQ3XJ1N9dAoh', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'k+uaiFsg3wkPi9LGS/mH8DtHBgZxKyz+oQBDtnDd9FDEo0ql7MMgCMsTAv27W5vk', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'Pu0rm6zhcTeYquWEuVCS7VtVsyTATr0Z9WhqNeZlIRurovJAXl2jRDX6QeY5dayC', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'ubwyG4lBWE4fCakGY6zlh+oaElK0rvblqjYoEg3dn4KPRCYGof8OFxLptHThD4cE', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'T30j+utVafhO0HRyJ4iR3Pigb4GXdWBtJEEEWddZJizMkjFQkyUAoYLOT8EJ2TW3', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'Tz8SvAuHBUEFcPWTSTMAG/bSp5wrYBTXaeEhx+wrYa60OruHuzgmhzKyQVuYlCNJ', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'HdbnassuIRjjSNo25o4AdSlWwpGfBZjAiyEInR+KGpHdhKTxSekJxiwiXUS0UfSG', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'prOpd5PzWaAR7DvjLsdmR9XffxvJCVxC735gLK7hDJKjCajDPHVDr8FSL8xMlrq0', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'nKxtsHeRl1yzoGrRr12+9MiQnHtpqROTNXcXdwe3v+Vh8V5k8v8oIrcgh1+/N7Bd', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'NiRsy1gFHBdu/he/KcDRT/9/acQFMPLQueGfZxUvU5As6pEONjtKX2MUg2fMF6Rc', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'sQVVrLzg0g7EcuHGfuPeKfD/716MvS8NU7rX+2soijCSQv/e18PJPMVDlcMXjnup', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, 'PPx1tStemesavFlj1okhS6UCAwEAAQ==', @bCrlf
    EXEC sp_OAMethod @sb, 'AppendLine', @success OUT, '-----END PUBLIC KEY-----', @bCrlf

    DECLARE @pubkey int
    EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubkey OUT

    EXEC sp_OAMethod @sb, 'GetAsString', @sTmp0 OUT
    EXEC sp_OAMethod @pubkey, 'LoadFromString', @success OUT, @sTmp0
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pubkey, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @json
        EXEC @hr = sp_OADestroy @dt
        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 @json
        EXEC @hr = sp_OADestroy @dt
        EXEC @hr = sp_OADestroy @sb
        EXEC @hr = sp_OADestroy @pubkey
        EXEC @hr = sp_OADestroy @rsa
        RETURN
      END

    -- We probably need a base64Url encoded encrypted key.
    -- Using straight-up base64 would potenially include chars that are not URL safe (i.e. have special meanings in URLs)
    EXEC sp_OASetProperty @rsa, 'EncodingMode', 'base64url'

    DECLARE @encryptedJson nvarchar(4000)
    EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT
    EXEC sp_OAMethod @rsa, 'EncryptStringENC', @encryptedJson OUT, @sTmp0, 0

    -- Build the URL
    -- Such as:  https://portal.everyware.com/Account/LoginMenu?data={Base64Url_encrypted_JSON}
    DECLARE @sbUrl int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbUrl OUT

    EXEC sp_OAMethod @sbUrl, 'Append', @success OUT, 'https://portal.everyware.com/Account/LoginMenu?data='
    EXEC sp_OAMethod @sbUrl, 'Append', @success OUT, @encryptedJson

    EXEC sp_OAMethod @sbUrl, 'GetAsString', @sTmp0 OUT
    PRINT @sTmp0

    EXEC @hr = sp_OADestroy @json
    EXEC @hr = sp_OADestroy @dt
    EXEC @hr = sp_OADestroy @sb
    EXEC @hr = sp_OADestroy @pubkey
    EXEC @hr = sp_OADestroy @rsa
    EXEC @hr = sp_OADestroy @sbUrl


END
GO