1
1
from __future__ import annotations
2
2
3
- import datetime as _dt
4
- import hashlib as _hashlib
5
- import hmac as _hmac
6
- import urllib .parse as _urlparse
3
+ import datetime
4
+ import hashlib
5
+ import hmac
6
+ import urllib .parse as urlparse
7
7
8
8
_ALGORITHM : str = "AWS4-HMAC-SHA256"
9
- _EMPTY_PAYLOAD_SHA256 : str = _hashlib .sha256 (b"" ).hexdigest ()
9
+ _EMPTY_PAYLOAD_SHA256 : str = hashlib .sha256 (b"" ).hexdigest ()
10
10
_SAFE_CHARS : str = "-_.~"
11
11
12
12
13
13
def _sign (key : bytes , msg : str ) -> bytes :
14
14
"""Return an HMAC-SHA256 of *msg* keyed with *key*."""
15
- return _hmac .new (key , msg .encode (), _hashlib .sha256 ).digest ()
15
+ return hmac .new (key , msg .encode (), hashlib .sha256 ).digest ()
16
16
17
17
18
18
def _canonical_query_string (query : str ) -> str :
19
19
"""Return the query string in canonical (sorted & URL-escaped) form."""
20
- pairs = _urlparse .parse_qsl (query , keep_blank_values = True )
20
+ pairs = urlparse .parse_qsl (query , keep_blank_values = True )
21
21
pairs .sort ()
22
22
return "&" .join (
23
- f"{ _urlparse .quote (k , _SAFE_CHARS )} ={ _urlparse .quote (v , _SAFE_CHARS )} "
23
+ f"{ urlparse .quote (k , _SAFE_CHARS )} ={ urlparse .quote (v , _SAFE_CHARS )} "
24
24
for k , v in pairs
25
25
)
26
26
@@ -50,12 +50,12 @@ def sign_get_caller_identity(
50
50
session_token
51
51
(Optional) session token for temporary credentials.
52
52
"""
53
- timestamp = _dt .datetime .utcnow ()
53
+ timestamp = datetime .datetime .utcnow ()
54
54
amz_date = timestamp .strftime ("%Y%m%dT%H%M%SZ" )
55
55
short_date = timestamp .strftime ("%Y%m%d" )
56
56
service = "sts"
57
57
58
- parsed = _urlparse .urlparse (url )
58
+ parsed = urlparse .urlparse (url )
59
59
60
60
headers : dict [str , str ] = {
61
61
"host" : parsed .netloc .lower (),
@@ -70,14 +70,14 @@ def sign_get_caller_identity(
70
70
canonical_request = "\n " .join (
71
71
(
72
72
"POST" ,
73
- _urlparse .quote (parsed .path or "/" , safe = "/" ),
73
+ urlparse .quote (parsed .path or "/" , safe = "/" ),
74
74
_canonical_query_string (parsed .query ),
75
75
"" .join (f"{ k } :{ headers [k ]} \n " for k in sorted (headers )),
76
76
signed_headers ,
77
77
_EMPTY_PAYLOAD_SHA256 ,
78
78
)
79
79
)
80
- canonical_request_hash = _hashlib .sha256 (canonical_request .encode ()).hexdigest ()
80
+ canonical_request_hash = hashlib .sha256 (canonical_request .encode ()).hexdigest ()
81
81
82
82
# String to sign
83
83
credential_scope = f"{ short_date } /{ region } /{ service } /aws4_request"
@@ -90,8 +90,8 @@ def sign_get_caller_identity(
90
90
key_region = _sign (key_date , region )
91
91
key_service = _sign (key_region , service )
92
92
key_signing = _sign (key_service , "aws4_request" )
93
- signature = _hmac .new (
94
- key_signing , string_to_sign .encode (), _hashlib .sha256
93
+ signature = hmac .new (
94
+ key_signing , string_to_sign .encode (), hashlib .sha256
95
95
).hexdigest ()
96
96
97
97
# Final Authorization header
0 commit comments