Swift
Swift
Sign PDF using USB Token or Smartcard on iOS iPhone
Demonstrates how to sign a PDF using an HSM (USB token or smart card) connected to an iPhone.Note: This example requires Chilkat v10.0.0 or greater.
Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// When signing with a USB token or smartcard, the only coding difference is how the certificate
// gets loaded. To load the default certificate from the connected USB token or smartcard, just call
// LoadFromSmartcard with an empty string argument.
//
// This requires Chilkat v10.0.0 or later.
//
// ------------------------------------------------------------------------------------------------------------------------------------------------------
// Important: In your Xcode project, you'll need to add the "com.apple.token" entitlement.
// Also, adding the com.apple.token in the "Project > Signing & Capabilities" will actually add $(AppIdentifierPrefix)com.apple.token, which does not work.
// Edit the entitlements file directly and add only com.apple.token
// If using a Yubikey, you'll only find the certificate if it is added in the Yubikey app as Public.
// ------------------------------------------------------------------------------------------------------------------------------------------------------
let cert = CkoCert()!
success = cert.load(fromSmartcard: "")
if success == false {
print("\(cert.lastErrorText!)")
return
}
let pdf = CkoPdf()!
// Wherever the PDF file is located..
// Modify to specify the actual path to the PDF.
var pdfFilePath: String? = "...."
// Load a PDF to be signed.
success = pdf.loadFile(filePath: pdfFilePath)
if success == false {
print("\(pdf.lastErrorText!)")
return
}
// Options for signing are specified in JSON.
let json = CkoJsonObject()!
// Optionally create an LTV-enabled signature
json.updateBool(jsonPath: "ltvOcsp", value: true)
// Define the appearance of the signature.
json.updateInt(jsonPath: "page", value: 1)
json.updateString(jsonPath: "appearance.y", value: "top")
json.updateString(jsonPath: "appearance.x", value: "left")
json.updateString(jsonPath: "appearance.fontScale", value: "10.0")
json.updateString(jsonPath: "appearance.text[0]", value: "Digitally signed by: cert_cn")
json.updateString(jsonPath: "appearance.text[1]", value: "current_dt")
json.updateString(jsonPath: "appearance.text[2]", value: "This is an LTV-enabled signature.")
// Tell the pdf object to use the certificate (on the USB token) for signing
success = pdf.setSigningCert(cert: cert)
if success == false {
print("\(pdf.lastErrorText!)")
return
}
// Modify to specify the actual path to the output file (i.e. the signed PDF).
var signedPdfOutputFilePath: String? = "...."
success = pdf.sign(jsonOptions: json, outFilePath: signedPdfOutputFilePath)
if success == false {
print("\(pdf.lastErrorText!)")
return
}
print("PDF successfully signed using USB token on iOS")
}