@ -18,7 +18,6 @@ package cmd
import (
"bytes"
"encoding/base64"
"net/http"
"testing"
@ -107,228 +106,6 @@ func TesthasSSECustomerHeader(t *testing.T) {
}
}
var parseSSECustomerRequestTests = [ ] struct {
headers map [ string ] string
useTLS bool
err error
} {
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 0
crypto . SSECKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
useTLS : true , err : nil ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 1
crypto . SSECKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
useTLS : false , err : errInsecureSSERequest ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES 256" ,
crypto . SSECKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 2
crypto . SSECKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
useTLS : true , err : crypto . ErrInvalidCustomerAlgorithm ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "NjE0SL87s+ZhYtaTrg5eI5cjhCQLGPVMKenPG2bCJFw=" , // 3
crypto . SSECKeyMD5 : "H+jq/LwEOEO90YtiTuNFVw==" ,
} ,
useTLS : true , err : crypto . ErrCustomerKeyMD5Mismatch ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : " jE0SL87s+ZhYtaTrg5eI5cjhCQLGPVMKenPG2bCJFw=" , // 4
crypto . SSECKeyMD5 : "H+jq/LwEOEO90YtiTuNFVw==" ,
} ,
useTLS : true , err : crypto . ErrInvalidCustomerKey ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "NjE0SL87s+ZhYtaTrg5eI5cjhCQLGPVMKenPG2bCJFw=" , // 5
crypto . SSECKeyMD5 : " +jq/LwEOEO90YtiTuNFVw==" ,
} ,
useTLS : true , err : crypto . ErrCustomerKeyMD5Mismatch ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "vFQ9ScFOF6Tu/BfzMS+rVMvlZGJHi5HmGJenJfrfKI45" , // 6
crypto . SSECKeyMD5 : "9KPgDdZNTHimuYCwnJTp5g==" ,
} ,
useTLS : true , err : crypto . ErrInvalidCustomerKey ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "" , // 7
crypto . SSECKeyMD5 : "9KPgDdZNTHimuYCwnJTp5g==" ,
} ,
useTLS : true , err : crypto . ErrMissingCustomerKey ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "vFQ9ScFOF6Tu/BfzMS+rVMvlZGJHi5HmGJenJfrfKI45" , // 8
crypto . SSECKeyMD5 : "" ,
} ,
useTLS : true , err : crypto . ErrMissingCustomerKeyMD5 ,
} ,
{
headers : map [ string ] string {
crypto . SSECAlgorithm : "AES256" ,
crypto . SSECKey : "vFQ9ScFOF6Tu/BfzMS+rVMvlZGJHi5HmGJenJfrfKI45" , // 8
crypto . SSECKeyMD5 : "" ,
crypto . SSEHeader : "" ,
} ,
useTLS : true , err : crypto . ErrIncompatibleEncryptionMethod ,
} ,
}
func TestParseSSECustomerRequest ( t * testing . T ) {
defer func ( flag bool ) { globalIsSSL = flag } ( globalIsSSL )
for i , test := range parseSSECustomerRequestTests {
headers := http . Header { }
for k , v := range test . headers {
headers . Set ( k , v )
}
request := & http . Request { }
request . Header = headers
globalIsSSL = test . useTLS
_ , err := ParseSSECustomerRequest ( request )
if err != test . err {
t . Errorf ( "Test %d: Parse returned: %v want: %v" , i , err , test . err )
}
}
}
var parseSSECopyCustomerRequestTests = [ ] struct {
headers map [ string ] string
metadata map [ string ] string
useTLS bool
err error
} {
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 0
crypto . SSECopyKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : nil ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 0
crypto . SSECopyKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
metadata : map [ string ] string { "X-Minio-Internal-Server-Side-Encryption-S3-Sealed-Key" : base64 . StdEncoding . EncodeToString ( make ( [ ] byte , 64 ) ) } ,
useTLS : true , err : crypto . ErrIncompatibleEncryptionMethod ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 1
crypto . SSECopyKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : false , err : errInsecureSSERequest ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES 256" ,
crypto . SSECopyKey : "XAm0dRrJsEsyPb1UuFNezv1bl9hxuYsgUVC/MUctE2k=" , // 2
crypto . SSECopyKeyMD5 : "bY4wkxQejw9mUJfo72k53A==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrInvalidCustomerAlgorithm ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "NjE0SL87s+ZhYtaTrg5eI5cjhCQLGPVMKenPG2bCJFw=" , // 3
crypto . SSECopyKeyMD5 : "H+jq/LwEOEO90YtiTuNFVw==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrCustomerKeyMD5Mismatch ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : " jE0SL87s+ZhYtaTrg5eI5cjhCQLGPVMKenPG2bCJFw=" , // 4
crypto . SSECopyKeyMD5 : "H+jq/LwEOEO90YtiTuNFVw==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrInvalidCustomerKey ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "NjE0SL87s+ZhYtaTrg5eI5cjhCQLGPVMKenPG2bCJFw=" , // 5
crypto . SSECopyKeyMD5 : " +jq/LwEOEO90YtiTuNFVw==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrCustomerKeyMD5Mismatch ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "vFQ9ScFOF6Tu/BfzMS+rVMvlZGJHi5HmGJenJfrfKI45" , // 6
crypto . SSECopyKeyMD5 : "9KPgDdZNTHimuYCwnJTp5g==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrInvalidCustomerKey ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "" , // 7
crypto . SSECopyKeyMD5 : "9KPgDdZNTHimuYCwnJTp5g==" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrMissingCustomerKey ,
} ,
{
headers : map [ string ] string {
crypto . SSECopyAlgorithm : "AES256" ,
crypto . SSECopyKey : "vFQ9ScFOF6Tu/BfzMS+rVMvlZGJHi5HmGJenJfrfKI45" , // 8
crypto . SSECopyKeyMD5 : "" ,
} ,
metadata : map [ string ] string { } ,
useTLS : true , err : crypto . ErrMissingCustomerKeyMD5 ,
} ,
}
func TestParseSSECopyCustomerRequest ( t * testing . T ) {
defer func ( flag bool ) { globalIsSSL = flag } ( globalIsSSL )
for i , test := range parseSSECopyCustomerRequestTests {
headers := http . Header { }
for k , v := range test . headers {
headers . Set ( k , v )
}
request := & http . Request { }
request . Header = headers
globalIsSSL = test . useTLS
_ , err := ParseSSECopyCustomerRequest ( request . Header , test . metadata )
if err != test . err {
t . Errorf ( "Test %d: Parse returned: %v want: %v" , i , err , test . err )
}
}
}
var encryptRequestTests = [ ] struct {
header map [ string ] string
metadata map [ string ] string