SQL Server
SQL Server
Ed25519ph Sign and Verify
See more Ed25519 Examples
Demonstrates how to create an Ed25519ph signature, and then to verify it.Note: This example requires Chilkat v9.5.0.91 or greater.
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
-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- Use the following test vector from https://www.rfc-editor.org/rfc/rfc8032#page-30
-- -----TEST abc
--
-- ALGORITHM:
-- Ed25519ph
--
-- SECRET KEY:
-- 833fe62409237b9d62ec77587520911e
-- 9a759cec1d19755b7da901b96dca3d42
--
-- PUBLIC KEY:
-- ec172b93ad5e563bf4932c70e1245034
-- c35467ef2efd4d64ebf819683467e2bf
--
-- MESSAGE (length 3 bytes):
-- 616263
--
-- SIGNATURE:
-- 98a70222f0b8121aa9d30f813d683f80
-- 9e462b469c7ff87639499bb94e6dae41
-- 31f85042463c2a355a2003d062adf5aa
-- a10b8c61e636062aaad11c2a26083406
DECLARE @privKeyHex nvarchar(4000)
SELECT @privKeyHex = '833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42'
DECLARE @pubKeyHex nvarchar(4000)
SELECT @pubKeyHex = 'ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf'
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, 'LoadEd25519', @success OUT, @privKeyHex, @pubKeyHex
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @privKey
RETURN
END
-- The data to be signed...
DECLARE @bd int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @bd OUT
EXEC sp_OAMethod @bd, 'AppendEncoded', @success OUT, '616263', 'hex'
DECLARE @eddsa int
EXEC @hr = sp_OACreate 'Chilkat.EdDSA', @eddsa OUT
-- Indicate we want the Ed25519ph instance.
EXEC sp_OASetProperty @eddsa, 'Algorithm', 'Ed25519ph'
DECLARE @hexSig nvarchar(4000)
EXEC sp_OAMethod @eddsa, 'SignBdENC', @hexSig OUT, @bd, 'hexlower', @privKey
PRINT 'signature = ' + @hexSig
-- The expected output is: 98a70222f0b8121aa9d30f813d683f80....
-- Verify the signature..
DECLARE @pubKey int
EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT
EXEC sp_OAMethod @pubKey, 'LoadEd25519', @success OUT, @pubKeyHex
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @pubKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @bd
EXEC @hr = sp_OADestroy @eddsa
EXEC @hr = sp_OADestroy @pubKey
RETURN
END
DECLARE @bVerified int
EXEC sp_OAMethod @eddsa, 'VerifyBdENC', @bVerified OUT, @bd, @hexSig, 'hexlower', @pubKey
IF @bVerified = 0
BEGIN
EXEC sp_OAGetProperty @eddsa, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
PRINT 'Failed to verify the signature.'
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @bd
EXEC @hr = sp_OADestroy @eddsa
EXEC @hr = sp_OADestroy @pubKey
RETURN
END
PRINT 'The Ed25519ph signature is verified!'
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @bd
EXEC @hr = sp_OADestroy @eddsa
EXEC @hr = sp_OADestroy @pubKey
END
GO