authHeaderContent method

  1. @visibleForTesting
String authHeaderContent({
  1. required DateTime now,
  2. required String bucket,
  3. required String path,
  4. required String accessKeyId,
  5. required String secretAccessKey,
})

The Authentication header content.

This builds the Authorization header content format used by AWS.

Implementation

@visibleForTesting
String authHeaderContent({
  required DateTime now,
  required String bucket,
  required String path,
  required String accessKeyId,
  required String secretAccessKey,
}) {
  // https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationExamples
  String toSign = [
    'GET',
    '',
    '',
    now.toIso8601String(),
    '/$bucket/$path',
  ].join('\n');

  final utf8AKey = utf8.encode(secretAccessKey);
  final utf8ToSign = utf8.encode(toSign);

  final signature =
      base64Encode(Hmac(sha1, utf8AKey).convert(utf8ToSign).bytes);
  return 'AWS $accessKeyId:$signature';
}