ssinatura gerada em Python para S3 Post

Acho que li quase tudo o que há para ler na codificação base-64 de uma assinatura para postagem no navegador, baseada em formulário no S3: documentos antigos e novos documentos. Por exemplo

http: //doc.s3.amazonaws.com/proposals/post.htm

E até encontrou isso:

http: //s3.amazonaws.com/doc/s3-example-code/post/post_sample.htm

Em vez de usar o gerador de políticas acima ou mais recente da Amazon, ou mexer com o Boto, estou tentando redigir um script .py mais simples que extraia a JSON da política de um arquivo de texto sem formatação (policy.txt) e gera a base necessária Assinatura codificada em 64 para me ajudar a redigir o formulário HTML.

A assinatura em si (que depende da política codificada) NÃO está sendo codificada corretamente ... talvez devido a algum tipo de problema utf-8 vs. ascii ou \ n (nova linha)?

O script com o qual estou trabalhando está abaixo, a política e a chave secreta da AWSprivate_key são de um caso de teste da AWS que estou usando para verificar se esse script funciona. A assinatura codificada corretamente - conforme citada pela Amazon - está incluída no script abaixo para referência.

Alguém pode me dizer por que a assinatura calculada abaixo não corresponde à assinatura de referência fornecida pela Amazo

Em outras palavras

Por que isso está codificado corretamente:

policy_encoded = base64.b64encode(policy)

mas este NÃO é:

signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())

alculadora de assinatura @PYTHON ...

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import base64, hmac, sha
from sys import argv

script, policy = argv

private_key = 'uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o'
input = open("..Desktop/policy.txt", "rb")
policy = input.read()
policy_encoded = base64.b64encode(policy)
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
print "Your policy base-64 encoded is %s." % (policy_encoded)
print "Your signature base-64 encoded is %s." % (signature)
print "Your signature encoded should be 2qCp0odXe7A9IYyUVqn0w2adtCA="

olítica @JSON (policy.txt - UTF-8)

{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}

questionAnswers(2)

yourAnswerToTheQuestion