Programming Examples

ChilkatHOMEASPVisual BasicVB.NETC#CC++MFCDelphiFoxProJavaPerlPythonRubySQL ServerVBScript

PHP ActiveX Examples

Bounced Mail
Bz2
Certificates/Keys
Charset
CSV
DKIM / DomainKey
Diffie-Hellman
DSA
Email Object
Encryption
FileAccess
FTP
HTML Conversion
HTTP
IMAP
MHT / HTML Email
MIME
NTLM
POP3
RSA
SMTP
Socket
Spider
SSH Key
SSH
SSH Tunnel
SFTP
Tar
Upload
XML
Zip
Amazon S3


 

 

 

 

 

 

 

 

DSA Signature Create and Verify

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.

Download Chilkat DSA ActiveX

Download Chilkat Crypt ActiveX

<?php



//  Use Chilkat Crypt to hash the contents of a file.
$crypt = new COM("Chilkat.Crypt2");
$success = $crypt->UnlockComponent('Anything for 30-day trial.');
if ($success != true) {
    print $crypt->lastErrorText() . "\n";
    exit;
}

$crypt->EncodingMode = 'hex';
$crypt->HashAlgorithm = '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.
$hashStr = $crypt->hashFileENC('hamlet.xml');

$dsa = new COM("Chilkat.Dsa");

//  The Chilkat Crypt and Chilkat DSA components are separate
//  products.  To license both, it's least expensive to purchase
//  the "Chilkat Bundle" which provides licenses to all the
//  Chilkat components.
$success = $dsa->UnlockComponent('Anything for 30-day trial');
if ($success != true) {
    print $dsa->lastErrorText() . "\n";
    exit;
}

//  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.

$pemPrivateKey = $dsa->loadText('dsa_priv.pem');
$success = $dsa->FromPem($pemPrivateKey);
if ($success != true) {
    print $dsa->lastErrorText() . "\n";
    exit;
}

//  You may optionally verify the key to ensure that it is a valid
//  DSA key.
$success = $dsa->VerifyKey();
if ($success != true) {
    print $dsa->lastErrorText() . "\n";
    exit;
}

//  Load the hash to be signed into the DSA object:
$success = $dsa->SetEncodedHash('hex',$hashStr);
if ($success != true) {
    print $dsa->lastErrorText() . "\n";
    exit;
}

//  Now that the DSA object contains both the private key and hash,
//  it is ready to create the signature:
$success = $dsa->SignHash();
if ($success != true) {
    print $dsa->lastErrorText() . "\n";
    exit;
}

//  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.)

$hexSig = $dsa->getEncodedSignature('hex');
print 'Signature:' . "\n";
print $hexSig . "\n";

//  -----------------------------------------------------------
//  Step 2: Verify the DSA Signature
//  -----------------------------------------------------------

$dsa2 = new COM("Chilkat.Dsa");

//  Load the DSA public key to be used for verification:

$pemPublicKey = $dsa2->loadText('dsa_pub.pem');
$success = $dsa2->FromPublicPem($pemPublicKey);
if ($success != true) {
    print $dsa2->lastErrorText() . "\n";
    exit;
}

//  Load the hash to be verified against the signature.
$success = $dsa2->SetEncodedHash('hex',$hashStr);
if ($success != true) {
    print $dsa2->lastErrorText() . "\n";
    exit;
}

//  Load the signature:
$success = $dsa2->SetEncodedSignature('hex',$hexSig);
if ($success != true) {
    print $dsa2->lastErrorText() . "\n";
    exit;
}

//  Verify:
$success = $dsa2->Verify();
if ($success != true) {
    print $dsa2->lastErrorText() . "\n";
}
else {
    print 'DSA Signature Verified!' . "\n";
}

?>

Need a specific example? Send a request to support@chilkatsoft.com

© 2000-2010 Chilkat Software, Inc. All Rights Reserved.