Programming Examples

ChilkatHOMEAndroid™ASPVisual BasicVB.NETC#iOS (IPhone)Objective-CC++CMFCDelphiFoxProJavaPerl
PHP ExtensionPHP ActiveXPythonPowerShellRubySQL ServerVBScript

C Examples

Bounced Mail
Bz2
Certificates/Keys
Charset
CSV
DKIM / DomainKey
Diffie-Hellman
DSA
Email Object
Encryption
FileAccess
FTP
HTML Conversion
HTTP
IMAP
MHT / HTML Email
MIME
NTLM
POP3
RSA
SMTP
Socket
Spider
SSH Key
SSH
SSH Tunnel
SFTP
Tar
Upload
XML
Zip
Amazon S3

 

 

 

 

 

 

 

 

RSA Signature/Verify with .key and .cer

Demonstrates how to use a .key file (private key) and digital certificate (.cer, public key) to create and verify an RSA signature.

Downloads:

MS Windows Visual C/C++ Libraries
Linux/CentOS C/C++ Libraries
MAC OS X C/C++ Libraries
Solaris C/C++ Libraries
C++ Builder Libraries
#include <C_CkPrivateKey.h>
#include <C_CkRsa.h>
#include <C_CkCert.h>
#include <C_CkPublicKey.h>

void ChilkatSample(void)
    {
    HCkPrivateKey privKey;
    BOOL success;
    const char * privKeyXml;
    HCkRsa rsa;
    const char * strData;
    const char * hexSig;
    HCkCert cert;
    HCkPublicKey pubKey;
    HCkRsa rsa2;

    privKey = CkPrivateKey_Create();

    //  Load the private key from an RSA .key file:
    success = CkPrivateKey_LoadPemFile(privKey,"privateKey.key");
    if (success != TRUE) {
        printf("%s\n",CkPrivateKey_lastErrorText(privKey));
        return;
    }

    //  Get the private key in XML format:
    privKeyXml = CkPrivateKey_getXml(privKey);

    rsa = CkRsa_Create();

    //  Any string argument automatically begins the 30-day trial.

    success = CkRsa_UnlockComponent(rsa,"30-day trial");
    if (success != TRUE) {
        printf("%s\n",CkRsa_lastErrorText(rsa));
        return;
    }

    //  Import the private key into the RSA component:
    success = CkRsa_ImportPrivateKey(rsa,privKeyXml);
    if (success != TRUE) {
        printf("%s\n",CkRsa_lastErrorText(rsa));
        return;
    }

    //  Create the signature as a hex string:
    CkRsa_putEncodingMode(rsa,"hex");

    //  If some other non-Chilkat application or web service is going to be verifying
    //  the signature, it is important to match the byte-ordering.
    //  The LittleEndian property may be set to TRUE
    //  for little-endian byte ordering,
    //  or FALSE  for big-endian byte ordering.
    //  Microsoft apps typically use little-endian, while
    //  OpenSSL and other services (such as Amazon CloudFront)
    //  use big-endian.
    CkRsa_putLittleEndian(rsa,FALSE);

    strData = "This is the string to be signed.";

    //  Sign the string using the sha-1 hash algorithm.
    //  Other valid choices are "md2", "sha256", "sha384",
    //  "sha512", and "md5".

    hexSig = CkRsa_signStringENC(rsa,strData,"sha-1");

    printf("%s\n",hexSig);

    //  Load a digital certificate from a .cer file:
    cert = CkCert_Create();

    success = CkCert_LoadFromFile(cert,"myCert.cer");
    if (success != TRUE) {
        printf("%s\n",CkCert_lastErrorText(cert));
        return;
    }

    pubKey = CkCert_ExportPublicKey(cert);

    //  Now verify using a separate instance of the RSA object:
    rsa2 = CkRsa_Create();

    //  Import the public key into the RSA object:
    success = CkRsa_ImportPublicKey(rsa2,CkPublicKey_getXml(pubKey));
    if (success != TRUE) {
        printf("%s\n",CkRsa_lastErrorText(rsa2));
        return;
    }

    CkPublicKey_Dispose(pubKey);

    //  The signature is a hex string, so make sure the EncodingMode is correct:
    CkRsa_putEncodingMode(rsa2,"hex");

    //  Verify the signature:
    success = CkRsa_VerifyStringENC(rsa2,strData,"sha-1",hexSig);
    if (success != TRUE) {
        printf("%s\n",CkRsa_lastErrorText(rsa2));
        return;
    }

    printf("Success.\n");

    CkPrivateKey_Dispose(privKey);
    CkRsa_Dispose(rsa);
    CkCert_Dispose(cert);
    CkRsa_Dispose(rsa2);

    }

Need a specific example? Send a request to support@chilkatsoft.com

© 2000-2010 Chilkat Software, Inc. All Rights Reserved.