@@ -38,16 +38,18 @@ type S3Backend struct {
3838 accessKeySecret string
3939 accessKeyID string
4040 forcePush bool
41+ checksumAlgorithm types.ChecksumAlgorithm
4142}
4243
4344type S3Config struct {
44- AccessKeyID string `json:"access_key_id,omitempty"`
45- AccessKeySecret string `json:"access_key_secret,omitempty"`
46- Endpoint string `json:"endpoint,omitempty"`
47- Scheme string `json:"scheme,omitempty"`
48- BucketName string `json:"bucket_name,omitempty"`
49- Region string `json:"region,omitempty"`
50- ObjectPrefix string `json:"object_prefix,omitempty"`
45+ AccessKeyID string `json:"access_key_id,omitempty"`
46+ AccessKeySecret string `json:"access_key_secret,omitempty"`
47+ Endpoint string `json:"endpoint,omitempty"`
48+ Scheme string `json:"scheme,omitempty"`
49+ BucketName string `json:"bucket_name,omitempty"`
50+ Region string `json:"region,omitempty"`
51+ ObjectPrefix string `json:"object_prefix,omitempty"`
52+ ChecksumAlgorithm * string `json:"checksum_algorithm,omitempty"`
5153}
5254
5355func newS3Backend (rawConfig []byte , forcePush bool ) (* S3Backend , error ) {
@@ -67,6 +69,22 @@ func newS3Backend(rawConfig []byte, forcePush bool) (*S3Backend, error) {
6769 return nil , fmt .Errorf ("invalid S3 configuration: missing 'bucket_name' or 'region'" )
6870 }
6971
72+ var checksumAlgorithm types.ChecksumAlgorithm
73+ if cfg .ChecksumAlgorithm == nil {
74+ // Default to CRC32 checksum
75+ checksumAlgorithm = types .ChecksumAlgorithmCrc32
76+ } else if * cfg .ChecksumAlgorithm != "" {
77+ for _ , algorithm := range checksumAlgorithm .Values () {
78+ if string (algorithm ) == * cfg .ChecksumAlgorithm {
79+ checksumAlgorithm = algorithm
80+ break
81+ }
82+ }
83+ if checksumAlgorithm == "" {
84+ return nil , fmt .Errorf ("invalid checksum algorithm: %s, supported algorithms: %v" , * cfg .ChecksumAlgorithm , checksumAlgorithm .Values ())
85+ }
86+ }
87+
7088 return & S3Backend {
7189 objectPrefix : cfg .ObjectPrefix ,
7290 bucketName : cfg .BucketName ,
@@ -75,6 +93,7 @@ func newS3Backend(rawConfig []byte, forcePush bool) (*S3Backend, error) {
7593 accessKeySecret : cfg .AccessKeySecret ,
7694 accessKeyID : cfg .AccessKeyID ,
7795 forcePush : forcePush ,
96+ checksumAlgorithm : checksumAlgorithm ,
7897 }, nil
7998}
8099
@@ -144,7 +163,7 @@ func (b *S3Backend) Push(ctx context.Context, cs content.Store, desc ocispec.Des
144163 Bucket : aws .String (b .bucketName ),
145164 Key : aws .String (blobObjectKey ),
146165 Body : reader ,
147- ChecksumAlgorithm : types . ChecksumAlgorithmCrc32 ,
166+ ChecksumAlgorithm : b . checksumAlgorithm ,
148167 }); err != nil {
149168 return errors .Wrap (err , "push blob to s3 backend" )
150169 }
0 commit comments