diff options
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.go | 64 |
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 | |||
3 | import ( | 3 | import ( |
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 | ||
33 | func computeSSEKeys(r *request.Request) { | 34 | const ( |
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 | |||
39 | func 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 | |||
48 | const ( | ||
49 | copySrcSSEKeyHeader = "x-amz-copy-source-server-side-encryption-customer-key" | ||
50 | copySrcSSEKeyMD5Header = copySrcSSEKeyHeader + "-md5" | ||
51 | ) | ||
52 | |||
53 | func 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 | 62 | func 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 | } |