aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/service/s3/sse.go')
-rw-r--r--vendor/github.com/aws/aws-sdk-go/service/s3/sse.go64
1 files changed, 47 insertions, 17 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go b/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go
index 8010c4f..b71c835 100644
--- a/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go
+++ b/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go
@@ -3,6 +3,7 @@ package s3
3import ( 3import (
4 "crypto/md5" 4 "crypto/md5"
5 "encoding/base64" 5 "encoding/base64"
6 "net/http"
6 7
7 "github.com/aws/aws-sdk-go/aws/awserr" 8 "github.com/aws/aws-sdk-go/aws/awserr"
8 "github.com/aws/aws-sdk-go/aws/request" 9 "github.com/aws/aws-sdk-go/aws/request"
@@ -30,25 +31,54 @@ func validateSSERequiresSSL(r *request.Request) {
30 } 31 }
31} 32}
32 33
33func computeSSEKeys(r *request.Request) { 34const (
34 headers := []string{ 35 sseKeyHeader = "x-amz-server-side-encryption-customer-key"
35 "x-amz-server-side-encryption-customer-key", 36 sseKeyMD5Header = sseKeyHeader + "-md5"
36 "x-amz-copy-source-server-side-encryption-customer-key", 37)
38
39func computeSSEKeyMD5(r *request.Request) {
40 var key string
41 if g, ok := r.Params.(sseCustomerKeyGetter); ok {
42 key = g.getSSECustomerKey()
43 }
44
45 computeKeyMD5(sseKeyHeader, sseKeyMD5Header, key, r.HTTPRequest)
46}
47
48const (
49 copySrcSSEKeyHeader = "x-amz-copy-source-server-side-encryption-customer-key"
50 copySrcSSEKeyMD5Header = copySrcSSEKeyHeader + "-md5"
51)
52
53func computeCopySourceSSEKeyMD5(r *request.Request) {
54 var key string
55 if g, ok := r.Params.(copySourceSSECustomerKeyGetter); ok {
56 key = g.getCopySourceSSECustomerKey()
37 } 57 }
38 58
39 for _, h := range headers { 59 computeKeyMD5(copySrcSSEKeyHeader, copySrcSSEKeyMD5Header, key, r.HTTPRequest)
40 md5h := h + "-md5" 60}
41 if key := r.HTTPRequest.Header.Get(h); key != "" { 61
42 // Base64-encode the value 62func computeKeyMD5(keyHeader, keyMD5Header, key string, r *http.Request) {
43 b64v := base64.StdEncoding.EncodeToString([]byte(key)) 63 if len(key) == 0 {
44 r.HTTPRequest.Header.Set(h, b64v) 64 // Backwards compatiablity where user just set the header value instead
45 65 // of using the API parameter, or setting the header value for an
46 // Add MD5 if it wasn't computed 66 // operation without the parameters modeled.
47 if r.HTTPRequest.Header.Get(md5h) == "" { 67 key = r.Header.Get(keyHeader)
48 sum := md5.Sum([]byte(key)) 68 if len(key) == 0 {
49 b64sum := base64.StdEncoding.EncodeToString(sum[:]) 69 return
50 r.HTTPRequest.Header.Set(md5h, b64sum)
51 }
52 } 70 }
71
72 // In backwards compatiable, the header's value is not base64 encoded,
73 // and needs to be encoded and updated by the SDK's customizations.
74 b64Key := base64.StdEncoding.EncodeToString([]byte(key))
75 r.Header.Set(keyHeader, b64Key)
76 }
77
78 // Only update Key's MD5 if not already set.
79 if len(r.Header.Get(keyMD5Header)) == 0 {
80 sum := md5.Sum([]byte(key))
81 keyMD5 := base64.StdEncoding.EncodeToString(sum[:])
82 r.Header.Set(keyMD5Header, keyMD5)
53 } 83 }
54} 84}