@@ -24,6 +24,7 @@ extension ChecksumAlgorithm {
2424 switch string. lowercased ( ) {
2525 case " crc32 " : return . crc32
2626 case " crc32c " : return . crc32c
27+ case " crc64nvme " : return . crc64nvme
2728 case " sha1 " : return . sha1
2829 case " sha256 " : return . sha256
2930 case " md5 " : return . md5 // md5 is not a valid flexible checksum algorithm
@@ -44,7 +45,7 @@ extension ChecksumAlgorithm {
4445
4546 public var isFlexibleChecksum : Bool {
4647 switch self {
47- case . crc32, . crc32c, . sha256, . sha1:
48+ case . crc32, . crc32c, . crc64nvme , . sha256, . sha1:
4849 return true
4950 default :
5051 return false
@@ -57,6 +58,8 @@ extension ChecksumAlgorithm {
5758 return CRC32 ( )
5859 case . crc32c:
5960 return CRC32C ( )
61+ case . crc64nvme:
62+ return CRC64NVME ( )
6063 case . sha1:
6164 return SHA1 ( )
6265 case . sha256:
@@ -69,12 +72,12 @@ extension ChecksumAlgorithm {
6972
7073extension ChecksumAlgorithm : Comparable {
7174 /*
72- * Priority-order for validating checksum = [ CRC32C, CRC32, SHA1, SHA256 ]
75+ * Priority-order for validating checksum = [ CRC32C, CRC32, CRC64NVME, SHA1, SHA256 ]
7376 * Order is determined by speed of the algorithm's implementation
7477 * MD5 is not supported by list ordering
7578 */
7679 public static func < ( lhs: ChecksumAlgorithm , rhs: ChecksumAlgorithm ) -> Bool {
77- let order : [ ChecksumAlgorithm ] = [ . crc32c, . crc32, . sha1, . sha256]
80+ let order : [ ChecksumAlgorithm ] = [ . crc32c, . crc32, . crc64nvme , . sha1, . sha256]
7881
7982 let lhsIndex = order. firstIndex ( of: lhs) ?? Int . max
8083 let rhsIndex = order. firstIndex ( of: rhs) ?? Int . max
@@ -102,6 +105,18 @@ extension UInt32 {
102105 }
103106}
104107
108+ extension UInt64 {
109+ public func toBase64EncodedString( ) -> String {
110+ // Create a Data instance from the UInt64 value
111+ let value = self
112+ var bigEndianValue = value. bigEndian
113+ let data = Data ( bytes: & bigEndianValue, count: MemoryLayout< UInt64> . size)
114+
115+ // Base64 encode the data
116+ return data. base64EncodedString ( )
117+ }
118+ }
119+
105120extension HashResult {
106121
107122 // Convert a HashResult to a hexadecimal String
@@ -111,6 +126,8 @@ extension HashResult {
111126 return data. map { String ( format: " %02x " , $0) } . joined ( )
112127 case . integer( let integer) :
113128 return String ( format: " %08x " , integer)
129+ case . integer64( let integer64) :
130+ return String ( format: " %016x " , integer64)
114131 }
115132 }
116133
@@ -121,6 +138,8 @@ extension HashResult {
121138 return data. base64EncodedString ( )
122139 case . integer( let integer) :
123140 return integer. toBase64EncodedString ( )
141+ case . integer64( let integer64) :
142+ return integer64. toBase64EncodedString ( )
124143 }
125144 }
126145}
0 commit comments