Perl Requires Chilkat v11.0.0+
Chilkat2 Perl
RSA Sign with PKCS8 Encrypted Key
See more RSA Examples
Demonstrates how to load a private key from an encrypted PKCS8 file and create an RSA digital signature (and then verify it).Chilkat Perl Downloads
use strict;
use warnings;
use Chilkat2;
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
my $privKey = Chilkat2::PrivateKey->new;
# Load the private key from an RSA PEM file:
my $success = $privKey->LoadAnyFormatFile('raul_privateKey.key', 'a0123456789');
if (!$success) {
print $privKey->LastErrorText, "\n";
exit;
}
my $rsa = Chilkat2::Rsa->new;
# Import the private key into the RSA component:
$success = $rsa->UsePrivateKey($privKey);
if (!$success) {
print $rsa->LastErrorText, "\n";
exit;
}
# This example will sign a string, and receive the signature
# in a hex-encoded string. Therefore, set the encoding mode
# to "hex":
$rsa->EncodingMode('hex');
my $strData = 'This is the string to be signed.';
# Sign the string using the sha256 hash algorithm.
# Other valid choices are sha1, sha384, sha512 and others.
my $hexSig = $rsa->SignStringENC($strData, 'sha256');
if (!$rsa->LastMethodSuccess) {
print $rsa->LastErrorText, "\n";
exit;
}
print $hexSig, "\n";
# Now verify with the public key.
# This example shows how to use the public key from
# a digital certificate (.cer file)
my $cert = Chilkat2::Cert->new;
$success = $cert->LoadFromFile('raul_publicKey.cer');
if (!$success) {
print $cert->LastErrorText, "\n";
exit;
}
my $pubKey = Chilkat2::PublicKey->new;
$cert->GetPublicKey($pubKey);
my $rsa2 = Chilkat2::Rsa->new;
$success = $rsa2->UsePublicKey($pubKey);
if (!$success) {
print $rsa2->LastErrorText, "\n";
exit;
}
# Verify the signature against the original data:
$rsa2->EncodingMode('hex');
$success = $rsa2->VerifyStringENC($strData, 'sha256', $hexSig);
if (!$success) {
print $rsa2->LastErrorText, "\n";
exit;
}
print "Signature verified!\n";
# Verify with incorrect data:
$success = $rsa2->VerifyStringENC('something else', 'sha256', $hexSig);
if (!$success) {
print "Signature not verified! (which was expected in this case)\n";
} else {
print "Hmmm... that's not right...\n";
}