use Crypt::OpenSSL::RSA; use MIME::Base64; use strict; use warnings; my $req_data = qq[Method:GET Hashed Path:1DfW7438O+6WjXaWOV69lrPO5z0= X-Ops-Content-Hash:2jmj7l5rSw0yVb/vlWAYkK/YBwk= X-Ops-Timestamp:2015-08-07T19:32:19Z X-Ops-UserId:asalvo13]; my $keyfile = "$ENV{HOME}/.chef/asalvo13.pem"; my $keystr; open(KEYFILE, "<$keyfile") || die "Cannot open $keyfile: $!\n"; { undef $/; $keystr = ; close KEYFILE; } my $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($keystr); my $pure_perl = encode_base64($rsa_priv->sign($req_data)); my $shell_cmds = `printf "$req_data" | openssl rsautl -sign -inkey $keyfile | openssl enc -base64`; print "=" x 20,"BEGIN PURE PERL","=" x 20,"\n"; print $pure_perl; print "=" x 20,"END PURE PERL","=" x 20,"\n\n"; print "=" x 20,"BEGIN SHELL COMMANDS","=" x 20,"\n"; print $shell_cmds; print "=" x 20,"END SHELL COMMANDS","=" x 20,"\n";