You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: byok.go
    path of file: ./repos/rclone/backend/oracleobjectstorage
    
    the code of the file until where you have to start completion: //go:build !plan9 && !solaris && !js
// +build !plan9,!solaris,!js

package oracleobjectstorage

import (
	"crypto/sha256"
	"encoding/base64"
	"errors"
	"fmt"
	"os"
	"strings"

	"github.com/oracle/oci-go-sdk/v65/common"
	"github.com/oracle/oci-go-sdk/v65/objectstorage"
)

const (
	sseDefaultAlgorithm = "AES256"
)

func getSha256(p []byte) []byte {
	h := sha256.New()
	h.Write(p)
	return h.Sum(nil)
}

func validateSSECustomerKeyOptions(opt *Options) error {
	if opt.SSEKMSKeyID != "" && (opt.SSEC
    
func validateSSECustomerKeyOptions(opt *Options) error {
	if opt.SSEKMSKeyID != "" && (opt.SSECustomerKeyFile != "" || opt.SSECustomerKey != "") {
		return errors.New("oos: can't use vault sse_kms_key_id and local sse_customer_key at the same time")
	}
	if opt.SSECustomerKey != "" && opt.SSECustomerKeyFile != "" {
		return errors.New("oos: can't use sse_customer_key and sse_customer_key_file at the same time")
	}
	if opt.SSEKMSKeyID != "" {
		return nil
	}
	err := populateSSECustomerKeys(opt)
	if err != nil {
		return err
	}
	return nil
}