SQL Server
SQL Server
Encrypt MIME for Multiple Recipients
See more MIME Examples
Demonstrates encrypting the current MIME entity for several recipients at once. A certificate is added for each recipient with AddEncryptCert, and EncryptN then produces a single CMS/PKCS #7 message that each recipient can independently decrypt.
The file paths are relative to the application's current working directory. Absolute paths may also be used. Supply the paths appropriate to your own environment.
Background. When a message targets more than one recipient, each recipient's certificate is added to the internal list and EncryptN wraps the message key separately for each one. Any single recipient can then decrypt with their own private key.
Chilkat SQL Server Downloads
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
DECLARE @mime int
EXEC @hr = sp_OACreate 'Chilkat.Mime', @mime OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @mime, 'SetBodyFromPlainText', @success OUT, 'This message will be encrypted.'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @mime, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
RETURN
END
-- Add a certificate for each intended recipient. Every recipient receives an independently
-- wrapped copy of the message key.
DECLARE @cert1 int
EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert1 OUT
EXEC sp_OAMethod @cert1, 'LoadFromFile', @success OUT, 'qa_data/recipient1.cer'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @cert1, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
RETURN
END
EXEC sp_OAMethod @mime, 'AddEncryptCert', @success OUT, @cert1
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @mime, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
RETURN
END
DECLARE @cert2 int
EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert2 OUT
EXEC sp_OAMethod @cert2, 'LoadFromFile', @success OUT, 'qa_data/recipient2.cer'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @cert2, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
EXEC @hr = sp_OADestroy @cert2
RETURN
END
EXEC sp_OAMethod @mime, 'AddEncryptCert', @success OUT, @cert2
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @mime, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
EXEC @hr = sp_OADestroy @cert2
RETURN
END
-- Encrypt for every added recipient at once.
EXEC sp_OAMethod @mime, 'EncryptN', @success OUT
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @mime, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
EXEC @hr = sp_OADestroy @cert2
RETURN
END
EXEC sp_OAMethod @mime, 'SaveMime', @success OUT, 'qa_output/encrypted_multi.eml'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @mime, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
EXEC @hr = sp_OADestroy @cert2
RETURN
END
PRINT 'Message encrypted for multiple recipients.'
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @cert1
EXEC @hr = sp_OADestroy @cert2
END
GO