Lua
Lua
DSA Signature Create and Verify
See more DSA Examples
Shows how to create a DSA (DSS) signature for the contents of a file. The first step is to create an SHA-1 hash of the file contents. The hash is signed using the Digital Signature Algorithm and the signature bytes are retrieved as a hex-encoded string.The 2nd part of the example loads the signature and verifies it against the hash.
Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
local crypt = chilkat.Crypt2.new()
crypt.encoding_mode = "hex"
crypt.hash_algorithm = "sha-1"
-- Return the SHA-1 hash of a file. The file may be any size.
-- The Chilkat Crypt component will stream the file when
-- computing the hash, keeping the memory usage constant
-- and reasonable.
-- The 20-byte SHA-1 hash is returned as a hex-encoded string.
local hashStr = crypt:hash_file_enc("hamlet.xml")
local dsa = chilkat.Dsa.new()
-- Load a DSA private key from a PEM file. Chilkat DSA
-- provides the ability to load and save DSA public and private
-- keys from encrypted or non-encrypted PEM or DER.
-- The LoadText method is for convenience only. You may
-- use any means to load the contents of a PEM file into
-- a string.
local pemPrivateKey = dsa:load_text("dsa_priv.pem")
local success = dsa:from_pem(pemPrivateKey)
if not success then
print(dsa.last_error_text)
return
end
-- You may optionally verify the key to ensure that it is a valid
-- DSA key.
success = dsa:verify_key()
if not success then
print(dsa.last_error_text)
return
end
-- Load the hash to be signed into the DSA object:
success = dsa:set_encoded_hash("hex", hashStr)
if not success then
print(dsa.last_error_text)
return
end
-- Now that the DSA object contains both the private key and hash,
-- it is ready to create the signature:
success = dsa:sign_hash()
if not success then
print(dsa.last_error_text)
return
end
-- If SignHash is successful, the DSA object contains the
-- signature. It may be accessed as a hex or base64 encoded
-- string. (It is also possible to access directly in byte array form via
-- the "Signature" property.)
local hexSig = dsa:get_encoded_signature("hex")
print("Signature:")
print(hexSig)
-- -----------------------------------------------------------
-- Step 2: Verify the DSA Signature
-- -----------------------------------------------------------
local dsa2 = chilkat.Dsa.new()
-- Load the DSA public key to be used for verification:
local pemPublicKey = dsa2:load_text("dsa_pub.pem")
success = dsa2:from_public_pem(pemPublicKey)
if not success then
print(dsa2.last_error_text)
return
end
-- Load the hash to be verified against the signature.
success = dsa2:set_encoded_hash("hex", hashStr)
if not success then
print(dsa2.last_error_text)
return
end
-- Load the signature:
success = dsa2:set_encoded_signature("hex", hexSig)
if not success then
print(dsa2.last_error_text)
return
end
-- Verify:
success = dsa2:verify()
if not success then
print(dsa2.last_error_text)
else
print("DSA Signature Verified!")
end