Sample code for 30+ languages & platforms
Swift

ECDSA Sign and Verify Data using Different Hash Algorithms

See more ECC Examples

Demonstrates how to create ECDSA signatures on data using different hash algorithms.

Note: This example requires Chilkat v9.5.0.85 or greater because the SignBd and VerifyBd methods were added in v9.5.0.85.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

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

    // First load an ECDSA private key to be used for signing.
    let privKey = CkoPrivateKey()!
    success = privKey.loadEncryptedPemFile(path: "qa_data/ecc/secp256r1-key-pkcs8-secret.pem", password: "secret")
    if success == false {
        print("\(privKey.lastErrorText!)")
        return
    }

    // Load some data to be signed.
    let bd = CkoBinData()!
    success = bd.loadFile(path: "qa_data/hamlet.xml")
    if success == false {
        print("Failed to load file to be hashed.")
        return
    }

    let ecdsa = CkoEcc()!
    let prng = CkoPrng()!

    // Sign the sha256 hash of the data.  Return the ECDSA signature in the base64 encoding.
    print("ECDSA signing the sha256 hash of the data...")
    var sig: String? = ecdsa.signBd(bdData: bd, hashAlg: "sha256", encoding: "base64", privKey: privKey, prng: prng)
    print("sig = \(sig!)")

    // Verify the signature against the original data.
    // (We must use the same hash algorithm that was used when signing.)

    // Load the public key that corresponds to the private key used for signing.
    let pubKey = CkoPublicKey()!
    success = pubKey.load(fromFile: "qa_data/ecc/secp256r1-pub.pem")
    if success == false {
        print("\(pubKey.lastErrorText!)")
        return
    }

    let ecc2 = CkoEcc()!
    var result: Int = ecc2.verifyBd(bdData: bd, hashAlg: "sha256", encodedSig: sig, encoding: "base64", pubkey: pubKey).intValue
    if result != 1 {
        print("\(ecc2.lastErrorText!)")
        return
    }

    print("Verified!")

    // ----------------------------------------------------------------------------------------
    // Let's do the same thing, but with sha384 hashing...

    print("--------------------------------------------")
    print("ECDSA signing the sha384 hash of the data...")

    sig = ecdsa.signBd(bdData: bd, hashAlg: "sha384", encoding: "base64", privKey: privKey, prng: prng)
    print("sig = \(sig!)")

    result = ecc2.verifyBd(bdData: bd, hashAlg: "sha384", encodedSig: sig, encoding: "base64", pubkey: pubKey).intValue
    if result != 1 {
        print("\(ecc2.lastErrorText!)")
        return
    }

    print("Verified!")

}