You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

73 lines
2.0 KiB

  1. package sns
  2. import (
  3. "crypto/hmac"
  4. "crypto/sha256"
  5. "encoding/base64"
  6. "github.com/goamz/goamz/aws"
  7. "sort"
  8. "strings"
  9. )
  10. var b64 = base64.StdEncoding
  11. /*
  12. func sign(auth aws.Auth, method, path string, params url.Values, headers http.Header) {
  13. var host string
  14. for k, v := range headers {
  15. k = strings.ToLower(k)
  16. switch k {
  17. case "host":
  18. host = v[0]
  19. }
  20. }
  21. params["AWSAccessKeyId"] = []string{auth.AccessKey}
  22. params["SignatureVersion"] = []string{"2"}
  23. params["SignatureMethod"] = []string{"HmacSHA256"}
  24. if auth.Token() != "" {
  25. params["SecurityToken"] = auth.Token()
  26. }
  27. var sarry []string
  28. for k, v := range params {
  29. sarry = append(sarry, aws.Encode(k) + "=" + aws.Encode(v[0]))
  30. }
  31. sort.StringSlice(sarry).Sort()
  32. joined := strings.Join(sarry, "&")
  33. payload := strings.Join([]string{method, host, "/", joined}, "\n")
  34. hash := hmac.NewSHA256([]byte(auth.SecretKey))
  35. hash.Write([]byte(payload))
  36. signature := make([]byte, b64.EncodedLen(hash.Size()))
  37. b64.Encode(signature, hash.Sum())
  38. params["Signature"] = []string{"AWS " + string(signature)}
  39. println("Payload:", payload)
  40. println("Signature:", strings.Join(params["Signature"], "|"))
  41. }*/
  42. func sign(auth aws.Auth, method, path string, params map[string]string, host string) {
  43. params["AWSAccessKeyId"] = auth.AccessKey
  44. if auth.Token() != "" {
  45. params["SecurityToken"] = auth.Token()
  46. }
  47. params["SignatureVersion"] = "2"
  48. params["SignatureMethod"] = "HmacSHA256"
  49. var sarray []string
  50. for k, v := range params {
  51. sarray = append(sarray, aws.Encode(k)+"="+aws.Encode(v))
  52. }
  53. sort.StringSlice(sarray).Sort()
  54. joined := strings.Join(sarray, "&")
  55. payload := method + "\n" + host + "\n" + path + "\n" + joined
  56. hash := hmac.New(sha256.New, []byte(auth.SecretKey))
  57. hash.Write([]byte(payload))
  58. signature := make([]byte, b64.EncodedLen(hash.Size()))
  59. b64.Encode(signature, hash.Sum(nil))
  60. params["Signature"] = string(signature)
  61. }