summaryrefslogtreecommitdiff
path: root/vendor/github.com/minio/minio-go/v7/utils.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2025-02-03 10:39:40 +0000
committerLibravatar GitHub <noreply@github.com>2025-02-03 10:39:40 +0000
commitacd3e80ae153bbdfc11b196689d71e3ec1bb3eed (patch)
tree498713061d806a43cb4e2ccbf662873d3b415668 /vendor/github.com/minio/minio-go/v7/utils.go
parent[feature] Implement Web Push notification policy (#3721) (diff)
downloadgotosocial-acd3e80ae153bbdfc11b196689d71e3ec1bb3eed.tar.xz
[chore]: Bump github.com/minio/minio-go/v7 from 7.0.81 to 7.0.84 (#3728)
Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.81 to 7.0.84. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.81...v7.0.84) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/minio/minio-go/v7/utils.go')
-rw-r--r--vendor/github.com/minio/minio-go/v7/utils.go152
1 files changed, 148 insertions, 4 deletions
diff --git a/vendor/github.com/minio/minio-go/v7/utils.go b/vendor/github.com/minio/minio-go/v7/utils.go
index a5beb371f..cd7d2c27e 100644
--- a/vendor/github.com/minio/minio-go/v7/utils.go
+++ b/vendor/github.com/minio/minio-go/v7/utils.go
@@ -378,10 +378,11 @@ func ToObjectInfo(bucketName, objectName string, h http.Header) (ObjectInfo, err
Restore: restore,
// Checksum values
- ChecksumCRC32: h.Get("x-amz-checksum-crc32"),
- ChecksumCRC32C: h.Get("x-amz-checksum-crc32c"),
- ChecksumSHA1: h.Get("x-amz-checksum-sha1"),
- ChecksumSHA256: h.Get("x-amz-checksum-sha256"),
+ ChecksumCRC32: h.Get(ChecksumCRC32.Key()),
+ ChecksumCRC32C: h.Get(ChecksumCRC32C.Key()),
+ ChecksumSHA1: h.Get(ChecksumSHA1.Key()),
+ ChecksumSHA256: h.Get(ChecksumSHA256.Key()),
+ ChecksumCRC64NVME: h.Get(ChecksumCRC64NVME.Key()),
}, nil
}
@@ -698,3 +699,146 @@ func (h *hashReaderWrapper) Read(p []byte) (n int, err error) {
}
return n, err
}
+
+// Following is ported from C to Go in 2016 by Justin Ruggles, with minimal alteration.
+// Used uint for unsigned long. Used uint32 for input arguments in order to match
+// the Go hash/crc32 package. zlib CRC32 combine (https://github.com/madler/zlib)
+// Modified for hash/crc64 by Klaus Post, 2024.
+func gf2MatrixTimes(mat []uint64, vec uint64) uint64 {
+ var sum uint64
+
+ for vec != 0 {
+ if vec&1 != 0 {
+ sum ^= mat[0]
+ }
+ vec >>= 1
+ mat = mat[1:]
+ }
+ return sum
+}
+
+func gf2MatrixSquare(square, mat []uint64) {
+ if len(square) != len(mat) {
+ panic("square matrix size mismatch")
+ }
+ for n := range mat {
+ square[n] = gf2MatrixTimes(mat, mat[n])
+ }
+}
+
+// crc32Combine returns the combined CRC-32 hash value of the two passed CRC-32
+// hash values crc1 and crc2. poly represents the generator polynomial
+// and len2 specifies the byte length that the crc2 hash covers.
+func crc32Combine(poly uint32, crc1, crc2 uint32, len2 int64) uint32 {
+ // degenerate case (also disallow negative lengths)
+ if len2 <= 0 {
+ return crc1
+ }
+
+ even := make([]uint64, 32) // even-power-of-two zeros operator
+ odd := make([]uint64, 32) // odd-power-of-two zeros operator
+
+ // put operator for one zero bit in odd
+ odd[0] = uint64(poly) // CRC-32 polynomial
+ row := uint64(1)
+ for n := 1; n < 32; n++ {
+ odd[n] = row
+ row <<= 1
+ }
+
+ // put operator for two zero bits in even
+ gf2MatrixSquare(even, odd)
+
+ // put operator for four zero bits in odd
+ gf2MatrixSquare(odd, even)
+
+ // apply len2 zeros to crc1 (first square will put the operator for one
+ // zero byte, eight zero bits, in even)
+ crc1n := uint64(crc1)
+ for {
+ // apply zeros operator for this bit of len2
+ gf2MatrixSquare(even, odd)
+ if len2&1 != 0 {
+ crc1n = gf2MatrixTimes(even, crc1n)
+ }
+ len2 >>= 1
+
+ // if no more bits set, then done
+ if len2 == 0 {
+ break
+ }
+
+ // another iteration of the loop with odd and even swapped
+ gf2MatrixSquare(odd, even)
+ if len2&1 != 0 {
+ crc1n = gf2MatrixTimes(odd, crc1n)
+ }
+ len2 >>= 1
+
+ // if no more bits set, then done
+ if len2 == 0 {
+ break
+ }
+ }
+
+ // return combined crc
+ crc1n ^= uint64(crc2)
+ return uint32(crc1n)
+}
+
+func crc64Combine(poly uint64, crc1, crc2 uint64, len2 int64) uint64 {
+ // degenerate case (also disallow negative lengths)
+ if len2 <= 0 {
+ return crc1
+ }
+
+ even := make([]uint64, 64) // even-power-of-two zeros operator
+ odd := make([]uint64, 64) // odd-power-of-two zeros operator
+
+ // put operator for one zero bit in odd
+ odd[0] = poly // CRC-64 polynomial
+ row := uint64(1)
+ for n := 1; n < 64; n++ {
+ odd[n] = row
+ row <<= 1
+ }
+
+ // put operator for two zero bits in even
+ gf2MatrixSquare(even, odd)
+
+ // put operator for four zero bits in odd
+ gf2MatrixSquare(odd, even)
+
+ // apply len2 zeros to crc1 (first square will put the operator for one
+ // zero byte, eight zero bits, in even)
+ crc1n := crc1
+ for {
+ // apply zeros operator for this bit of len2
+ gf2MatrixSquare(even, odd)
+ if len2&1 != 0 {
+ crc1n = gf2MatrixTimes(even, crc1n)
+ }
+ len2 >>= 1
+
+ // if no more bits set, then done
+ if len2 == 0 {
+ break
+ }
+
+ // another iteration of the loop with odd and even swapped
+ gf2MatrixSquare(odd, even)
+ if len2&1 != 0 {
+ crc1n = gf2MatrixTimes(odd, crc1n)
+ }
+ len2 >>= 1
+
+ // if no more bits set, then done
+ if len2 == 0 {
+ break
+ }
+ }
+
+ // return combined crc
+ crc1n ^= crc2
+ return crc1n
+}