sse.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package s3
  2. import (
  3. "crypto/md5"
  4. "encoding/base64"
  5. "github.com/aws/aws-sdk-go/aws/awserr"
  6. "github.com/aws/aws-sdk-go/aws/awsutil"
  7. "github.com/aws/aws-sdk-go/aws/request"
  8. )
  9. var errSSERequiresSSL = awserr.New("ConfigError", "cannot send SSE keys over HTTP.", nil)
  10. func validateSSERequiresSSL(r *request.Request) {
  11. if r.HTTPRequest.URL.Scheme != "https" {
  12. p := awsutil.ValuesAtPath(r.Params, "SSECustomerKey||CopySourceSSECustomerKey")
  13. if len(p) > 0 {
  14. r.Error = errSSERequiresSSL
  15. }
  16. }
  17. }
  18. func computeSSEKeys(r *request.Request) {
  19. headers := []string{
  20. "x-amz-server-side-encryption-customer-key",
  21. "x-amz-copy-source-server-side-encryption-customer-key",
  22. }
  23. for _, h := range headers {
  24. md5h := h + "-md5"
  25. if key := r.HTTPRequest.Header.Get(h); key != "" {
  26. // Base64-encode the value
  27. b64v := base64.StdEncoding.EncodeToString([]byte(key))
  28. r.HTTPRequest.Header.Set(h, b64v)
  29. // Add MD5 if it wasn't computed
  30. if r.HTTPRequest.Header.Get(md5h) == "" {
  31. sum := md5.Sum([]byte(key))
  32. b64sum := base64.StdEncoding.EncodeToString(sum[:])
  33. r.HTTPRequest.Header.Set(md5h, b64sum)
  34. }
  35. }
  36. }
  37. }