38 signature_version = parameters.get(
'SignatureVersion')
40 if signature_version ==
'1':
41 sign_parameters = _sign_parameters_ver1
42 elif signature_version ==
'2':
43 sign_parameters = _sign_parameters_ver2
45 raise Exception(
"Unknown SignatureVersion: %s." % signature_version)
47 correct_signature = sign_parameters(
50 endpoint = parameters.get(
'Endpoint', endpoint),
51 method = parameters.get(
'Method', method),
53 request_signature = parameters.get(
'Signature')
54 return correct_signature == request_signature
59 def _sign_parameters_ver1(parameters, aws_secret_key, **kwargs):
62 for key
in sorted(parameters.iterkeys(), key=str.lower):
63 if key ==
'Signature' or key ==
'Method' or key ==
'Endpoint':
67 params += str(parameters.get(key))
68 h = hmac.new(aws_secret_key, params, hashlib.sha1)
69 signature = h.digest()
70 signature = base64.b64encode(signature)
79 def _sign_parameters_ver2_milosz(parameters, aws_secret_key, **kwargs):
81 'Action': parameters.get(
'Action'),
82 'AWSAccessKeyId': parameters.get(
'AWSAccessKeyId'),
83 'Timestamp': parameters.get(
'Timestamp'),
84 'Version': parameters.get(
'Version'),
85 'SignatureMethod': parameters.get(
'SignatureMethod'),
86 'SignatureVersion': parameters.get(
'SignatureVersion')
88 string_to_sign =
'%s\n%s\n/\n' % (
89 parameters.get(
'Method'), parameters.get(
'Endpoint')
95 val = params[key].encode(
'utf-8')
97 urllib.quote(key, safe=
'') +
'=' + urllib.quote(val, safe=
'-_~')
101 h = hmac.new(aws_secret_key, string_to_sign, hashlib.sha256)
102 b64 = base64.b64encode(h.digest())
112 def _sign_parameters_ver2(parameters, aws_secret_key, endpoint=None,
114 toSign =
'%s\n%s\n/\n' % (
115 parameters.get(
'Method', method),
116 parameters.get(
'Endpoint', endpoint).lower(),
118 keys = parameters.keys()
122 val = parameters[key].encode(
'utf-8')
123 if key ==
'Signature' or key ==
'Method' or key ==
'Endpoint':
125 pairs.append(urllib.quote(key, safe=
'') +
'=' + urllib.quote(val, safe=
'-_~'))
128 h = hmac.new(aws_secret_key, toSign, hashlib.sha256)
129 b64 = base64.b64encode(h.digest())