SQL Server
SQL Server
Get RSA Public Key in JWK Format (JSON Web Key)
See more JSON Web Signatures (JWS) Examples
Demonstrates how to get an RSA public key in JWK (JSON Web Key) format.Note: This example requires Chilkat v9.5.0.66 or later.
Chilkat SQL Server Downloads
-- 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
-- Note: This example requires Chilkat v9.5.0.66 or later.
-- Load a PEM file into memory.
DECLARE @sbPem int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbPem OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @sbPem, 'LoadFile', @success OUT, 'qa_data/pem/rsa_public.pem', 'utf-8'
IF @success <> 1
BEGIN
PRINT 'Failed to load PEM file.'
EXEC @hr = sp_OADestroy @sbPem
RETURN
END
-- Load the PEM into a public key object.
DECLARE @pubKey int
EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT
EXEC sp_OAMethod @sbPem, 'GetAsString', @sTmp0 OUT
EXEC sp_OAMethod @pubKey, 'LoadFromString', @success OUT, @sTmp0
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @pubKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @sbPem
EXEC @hr = sp_OADestroy @pubKey
RETURN
END
-- Get the public key in JWK format:
DECLARE @jwk nvarchar(4000)
EXEC sp_OAMethod @pubKey, 'GetJwk', @jwk OUT
-- The GetJwk method will return the JWK in the most compact JSON format possible,
-- as a single line with no extra whitespace. To get a more human-readable JWK (for this example),
-- load into a Chilkat JSON object and emit non-compact:
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
EXEC sp_OAMethod @json, 'Load', @success OUT, @jwk
EXEC sp_OASetProperty @json, 'EmitCompact', 0
PRINT 'RSA Public Key in JWK format:'
EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT
PRINT @sTmp0
-- Sample output:
-- {
-- "kty": "RSA",
-- "n": "33TqqLR3eeUmDtHS89qF3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA04DDnEFGAf-kDQiNSe2ZtqC7bnIc8-KSG_qOGQIVaay4Ucr6ovDkykO5Hxn7OU7sJp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwFwnxCsU5-UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUEf0YN3_Q0auBkdbDR_ES2PbgKTJdkjc_rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1WSw",
-- "e": "AQAB"
-- }
-- Additional information can be added like this:
EXEC sp_OAMethod @json, 'AppendString', @success OUT, 'use', 'enc'
EXEC sp_OAMethod @json, 'AppendString', @success OUT, 'kid', '123ABC'
-- Now examine the JSON:
EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT
PRINT @sTmp0
-- {
-- "kty": "RSA",
-- "n": "33TqqLR3eeUmDtHS89qF3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA04DDnEFGAf-kDQiNSe2ZtqC7bnIc8-KSG_qOGQIVaay4Ucr6ovDkykO5Hxn7OU7sJp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwFwnxCsU5-UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUEf0YN3_Q0auBkdbDR_ES2PbgKTJdkjc_rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1WSw",
-- "e": "AQAB",
-- "use": "enc",
-- "kid": "123ABC"
-- }
EXEC @hr = sp_OADestroy @sbPem
EXEC @hr = sp_OADestroy @pubKey
EXEC @hr = sp_OADestroy @json
END
GO