Skip to content

Instantly share code, notes, and snippets.

@azumakuniyuki
Created April 21, 2022 07:39
Show Gist options
  • Save azumakuniyuki/b3baec18e9d06e9063c62029a2991303 to your computer and use it in GitHub Desktop.
Save azumakuniyuki/b3baec18e9d06e9063c62029a2991303 to your computer and use it in GitHub Desktop.
Make an SMTP password from an access secret key and a region name for Amazon SES
#!/usr/bin/env perl
use strict;
use warnings;
use MIME::Base64;
use Digest::SHA;
my $secret = shift or die('The 1st argument should be an access secret key');
my $region = shift or die('The 2nd argument should be a valid region name');
my $params = {
'date' => '11111111',
'service' => 'ses',
'message' => 'SendRawEmail',
'terminal' => 'aws4_request',
'version' => "\x04",
};
my $digest = makedigest('AWS4'.$secret, $params->{'date'});
$digest = makedigest($digest, $region);
$digest = makedigest($digest, $params->{'service'});
$digest = makedigest($digest, $params->{'terminal'});
$digest = makedigest($digest, $params->{'message'});
printf("%s\n", MIME::Base64::encode_base64(sprintf("%s%s", $params->{'version'}, $digest), ''));
sub makedigest {
my $key = shift // return undef;
my $msg = shift // return undef;
return Digest::SHA::hmac_sha256($msg, $key);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment