Sample code for 30+ languages & platforms
Objective-C

Sign a PDF using IDPrime MD T=1 SmartCard

See more PDF Signatures Examples

This example demonstrates how to a sign a PDF using a IDPrime MD T=1 smart card, which requires more specific PIN roles.

Chilkat Objective-C Downloads

Objective-C
#import <CkoPdf.h>
#import <CkoJsonObject.h>
#import <CkoCert.h>

BOOL success = NO;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

CkoPdf *pdf = [[CkoPdf alloc] init];

//  Load a PDF to be signed.
//  The "hello.pdf" is available at https://chilkatsoft.com/hello.pdf
success = [pdf LoadFile: @"qa_data/pdf/hello.pdf"];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

//  Options for signing are specified in JSON.
CkoJsonObject *json = [[CkoJsonObject alloc] init];

//  In most cases, the signingCertificateV2 and signingTime attributes are required.
[json UpdateInt: @"signingCertificateV2" value: [NSNumber numberWithInt: 1]];
[json UpdateInt: @"signingTime" value: [NSNumber numberWithInt: 1]];

//  Put the signature on page 1, top left
[json UpdateInt: @"page" value: [NSNumber numberWithInt: 1]];
[json UpdateString: @"appearance.y" value: @"top"];
[json UpdateString: @"appearance.x" value: @"left"];

//  Use a font scale of 10.0
[json UpdateString: @"appearance.fontScale" value: @"10.0"];

//  In this example, the appearance of the digital signature will contain three lines:
//  1) The signing certificate's common name
//  2) The current date/time
//  3) Some arbitrary text.
//  The keyword "cert_cn" is replaced with the Certificate's Subject Common Name.
//  The keyword "current_dt" is replaced with the current date/time.
//  Any number of appearance text lines can be added.
[json UpdateString: @"appearance.text[0]" value: @"Digitally signed by: cert_cn"];
[json UpdateString: @"appearance.text[1]" value: @"current_dt"];
[json UpdateString: @"appearance.text[2]" value: @"The crazy brown fox jumps over the lazy dog."];

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

//  Provide the smart card PIN's for both the "user" and the signing PIN, which is role "3".
//  These PINs may be the same.

//  If the PIN is not explicitly provided here, the Windows OS should
//  display a dialog for the PIN.
cert.SmartCardPin = @"{ \"user\":\"0000\", \"3\":\"12345678\" }";

//  Use a certificate on an IDPrime MD T=1 smart card.
success = [cert LoadFromSmartcard: @""];
if (success == NO) {
    NSLog(@"%@",cert.LastErrorText);
    return;
}

//  Tell the pdf object to use the certificate for signing.
success = [pdf SetSigningCert: cert];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

success = [pdf SignPdf: json outFilePath: @"qa_output/hello_signed_hsm.pdf"];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

NSLog(@"%@",@"The PDF has been successfully cryptographically signed using an HSM.");