SQL Server
SQL Server
Create PKCS7 Signed File (.p7m)
See more Encryption Examples
Demonstrates how to sign a file to create a .p7m that contains both the file contents and the signature.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 requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @crypt int
EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @certStore int
EXEC @hr = sp_OACreate 'Chilkat.CertStore', @certStore OUT
-- Load a PFX file into a certificate store object.
EXEC sp_OAMethod @certStore, 'LoadPfxFile', @success OUT, 'myPfx.pfx', 'pfxPassword'
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @certStore, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @crypt
EXEC @hr = sp_OADestroy @certStore
RETURN
END
-- Get the certificate by subject common name.
-- This should be the cert within the PFX that also
-- has a private key (also stored within the PFX).
DECLARE @jsonCN int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonCN OUT
EXEC sp_OAMethod @jsonCN, 'UpdateString', @success OUT, 'CN', 'myCert'
DECLARE @cert int
EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT
EXEC sp_OAMethod @certStore, 'FindCert', @success OUT, @jsonCN, @cert
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @certStore, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @crypt
EXEC @hr = sp_OADestroy @certStore
EXEC @hr = sp_OADestroy @jsonCN
EXEC @hr = sp_OADestroy @cert
RETURN
END
-- Tell the crypt object to use the certificate for signing:
EXEC sp_OAMethod @crypt, 'SetSigningCert', @success OUT, @cert
-- Sign a file, producing a .p7m as output.
-- The input file is unchanged, the test.p7m contains the
-- contents of the input file and the signature.
DECLARE @inFile nvarchar(4000)
SELECT @inFile = 'test.txt'
DECLARE @outFile nvarchar(4000)
SELECT @outFile = 'testp7m'
EXEC sp_OAMethod @crypt, 'CreateP7M', @success OUT, @inFile, @outFile
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @crypt, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @crypt
EXEC @hr = sp_OADestroy @certStore
EXEC @hr = sp_OADestroy @jsonCN
EXEC @hr = sp_OADestroy @cert
RETURN
END
PRINT 'Success!'
EXEC @hr = sp_OADestroy @crypt
EXEC @hr = sp_OADestroy @certStore
EXEC @hr = sp_OADestroy @jsonCN
EXEC @hr = sp_OADestroy @cert
END
GO