Sample code for 30+ languages & platforms
SQL Server

About RSA Public/Private Keys

See more RSA Examples

This example provides some additional information for understanding public/private key pairs. In demonstrates how a private key is a superset of the public key. A public key contains the modulus and exponent. The matching private key also contains the modulus and exponent, but also contains the additional private key parts.

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

    DECLARE @cert int
    EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- Load a digital certificate.
    EXEC sp_OAMethod @cert, 'LoadFromFile', @success OUT, 'digitalCert.cer'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @cert, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @cert
        RETURN
      END

    -- A .cer file does not contain the private key.  It should contain
    -- the public key...
    DECLARE @pubKey int
    EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubKey OUT

    EXEC sp_OAMethod @cert, 'GetPublicKey', @success OUT, @pubKey

    -- Let's have a look at it (in XML format).

    PRINT 'Public Key from Certificate:'
    EXEC sp_OAMethod @pubKey, 'GetXml', @sTmp0 OUT
    PRINT @sTmp0

    -- An RSA public key consists of a modulus and exponent.

    -- An RSA private key includes both the modulus and exponent,
    -- as well as other "big" numbers: P, Q, D, etc.

    -- Let's load an RSA private key from a DER-encoded file:
    DECLARE @privKey int
    EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT

    EXEC sp_OAMethod @privKey, 'LoadAnyFormatFile', @success OUT, 'PrivateKey.key', ''
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @cert
        EXEC @hr = sp_OADestroy @pubKey
        EXEC @hr = sp_OADestroy @privKey
        RETURN
      END

    -- If this private key is the matching half to the public key from
    -- the certificate, then the modulus and exponent should
    -- be identical.  (Thus, a "private key" really contains both the public part as well as the private parts...).

    PRINT 'Private Key from DER:'
    EXEC sp_OAMethod @privKey, 'GetXml', @sTmp0 OUT
    PRINT @sTmp0

    EXEC @hr = sp_OADestroy @cert
    EXEC @hr = sp_OADestroy @pubKey
    EXEC @hr = sp_OADestroy @privKey


END
GO