File: Checksum.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (45 lines) | stat: -rw-r--r-- 1,525 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import Foundation
import Crypto

/// A checksum generator.
public struct Checksum {
    
    /// Computes the SHA512 checksum of the given data as a lowercased hex string.
    ///
    /// - Parameter data: The data to compute the checksum for.
    /// - Returns: The SHA512 checksum as a hex string.
    public static func sha512(of data: Data) -> String {
        return SHA512.hash(data: data).hexString()
    }
    
    /// Computes the MD5 checksum of the given data as a lowercased hex string.
    ///
    /// - Important: This hash algorithm isn’t considered cryptographically secure.
    ///
    /// - Parameter data: The data to compute the checksum for.
    /// - Returns: The MD5 checksum as a hex string.
    public static func md5(of data: Data) -> String {
        return Insecure.MD5.hash(data: data).hexString()
    }
}

/// Note: this extension is private because it's not meant for general use.
private extension Sequence<UInt8> {
    
    /// Creates a lowercase hex string from a sequence of 8-bit unsigned integers.
    func hexString() -> String {
        return reduce(into: "") { accumulator, byte in
            accumulator += String(format: "%02x", byte)
        }
    }
}