summaryrefslogtreecommitdiff
path: root/vendor/github.com/minio/minio-go/v7/utils.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/minio/minio-go/v7/utils.go')
-rw-r--r--vendor/github.com/minio/minio-go/v7/utils.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/vendor/github.com/minio/minio-go/v7/utils.go b/vendor/github.com/minio/minio-go/v7/utils.go
index f32f84ab0..a8a45b1a8 100644
--- a/vendor/github.com/minio/minio-go/v7/utils.go
+++ b/vendor/github.com/minio/minio-go/v7/utils.go
@@ -20,6 +20,7 @@ package minio
import (
"context"
"crypto/md5"
+ fipssha256 "crypto/sha256"
"encoding/base64"
"encoding/hex"
"encoding/xml"
@@ -39,6 +40,7 @@ import (
"time"
md5simd "github.com/minio/md5-simd"
+ "github.com/minio/minio-go/v7/pkg/encrypt"
"github.com/minio/minio-go/v7/pkg/s3utils"
"github.com/minio/sha256-simd"
)
@@ -520,6 +522,9 @@ func newMd5Hasher() md5simd.Hasher {
}
func newSHA256Hasher() md5simd.Hasher {
+ if encrypt.FIPS {
+ return &hashWrapper{Hash: fipssha256.New(), isSHA256: true}
+ }
return &hashWrapper{Hash: sha256Pool.Get().(hash.Hash), isSHA256: true}
}
@@ -627,3 +632,38 @@ func IsNetworkOrHostDown(err error, expectTimeouts bool) bool {
}
return false
}
+
+// newHashReaderWrapper will hash all reads done through r.
+// When r returns io.EOF the done function will be called with the sum.
+func newHashReaderWrapper(r io.Reader, h hash.Hash, done func(hash []byte)) *hashReaderWrapper {
+ return &hashReaderWrapper{
+ r: r,
+ h: h,
+ done: done,
+ }
+}
+
+type hashReaderWrapper struct {
+ r io.Reader
+ h hash.Hash
+ done func(hash []byte)
+}
+
+// Read implements the io.Reader interface.
+func (h *hashReaderWrapper) Read(p []byte) (n int, err error) {
+ n, err = h.r.Read(p)
+ if n > 0 {
+ n2, err := h.h.Write(p[:n])
+ if err != nil {
+ return 0, err
+ }
+ if n2 != n {
+ return 0, io.ErrShortWrite
+ }
+ }
+ if err == io.EOF {
+ // Call back
+ h.done(h.h.Sum(nil))
+ }
+ return n, err
+}