Sample code for 30+ languages & platforms
Objective-C

RSA Sign an Encoded Hash

See more RSA Examples

Demonstrates signing a hash (e.g., SHA256) provided as an encoded string (e.g., base64 or hex).

Chilkat Objective-C Downloads

Objective-C
#import <CkoCert.h>
#import <CkoBinData.h>
#import <CkoRsa.h>
#import <NSString.h>

BOOL success = NO;

// Assuming the smartcard/USB token is installed with the correct drivers from the manufacturer,
// this code can work on multiple platforms including Windows, MacOS, Linux, and iOS.

// Chilkat automatically detects and determines the way in which the HSM is used,
// which can be by PKCS11, Apple Keychain, Microsoft CNG / Crypto API, or ScMinidriver.

CkoCert *cert = [[CkoCert alloc] init];

// Set the token/smartcard PIN prior to loading.
cert.SmartCardPin = @"123456";

// Specify the certificate by its common name.
success = [cert LoadFromSmartcard: @"cn=chilkat-rsa-2048"];
if (success == NO) {
    NSLog(@"%@",cert.LastErrorText);
    return;
}

NSLog(@"%@%@",@"Signing with the private key for this cert: ",cert.SubjectCN);

// Create data to be hashed and signed.
CkoBinData *bd = [[CkoBinData alloc] init];
int i;
for (i = 0; i <= 100; i++) {
    [bd AppendEncoded: @"000102030405060708090A0B0C0D0E0F" encoding: @"hex"];
}

CkoRsa *rsa = [[CkoRsa alloc] init];

// Use the certificate's private key for signing.
success = [rsa SetX509Cert: cert usePrivateKey: YES];
if (success == NO) {
    NSLog(@"%@",rsa.LastErrorText);
    return;
}

// We'll first compute the hash and then pass the encoded hash to be signed.
NSString *sha256_base64 = [bd GetHash: @"sha256" encoding: @"base64"];
NSLog(@"%@%@",@"sha256 hash in base64 format: ",sha256_base64);

// Pass in the base64 hash and return a base64 signature.
rsa.EncodingMode = @"base64";
NSString *rsaSig_base64 = [rsa SignHashENC: sha256_base64 hashAlg: @"sha256"];
if (success == NO) {
    NSLog(@"%@",rsa.LastErrorText);
    return;
}

NSLog(@"%@%@",@"RSA signature as base64: ",rsaSig_base64);