1 // Copyright 2022-present 650 Industries. All rights reserved.
2 
3 import CommonCrypto
4 import ABI47_0_0ExpoModulesCore
5 
6 typealias DigestFunction = (
7   _ data: UnsafeRawPointer?,
8   _ len: UInt32,
9   _ md: UnsafeMutablePointer<UInt8>?
10 ) -> UnsafeMutablePointer<UInt8>?
11 
12 internal enum DigestAlgorithm: String, EnumArgument {
13   case md2 = "MD2"
14   case md4 = "MD4"
15   case md5 = "MD5"
16   case sha1 = "SHA-1"
17   case sha224 = "SHA-224"
18   case sha256 = "SHA-256"
19   case sha384 = "SHA-384"
20   case sha512 = "SHA-512"
21 
22   var digestLength: Int32 {
23     switch self {
24     case .md2:
25       return CC_MD2_DIGEST_LENGTH
26     case .md4:
27       return CC_MD4_DIGEST_LENGTH
28     case .md5:
29       return CC_MD5_DIGEST_LENGTH
30     case .sha1:
31       return CC_SHA1_DIGEST_LENGTH
32     case .sha224:
33       return CC_SHA224_DIGEST_LENGTH
34     case .sha256:
35       return CC_SHA256_DIGEST_LENGTH
36     case .sha384:
37       return CC_SHA384_DIGEST_LENGTH
38     case .sha512:
39       return CC_SHA512_DIGEST_LENGTH
40     }
41   }
42 
43   var digest: DigestFunction {
44     switch self {
45     case .md2:
46       return CC_MD2
47     case .md4:
48       return CC_MD4
49     case .md5:
50       return CC_MD5
51     case .sha1:
52       return CC_SHA1
53     case .sha224:
54       return CC_SHA224
55     case .sha256:
56       return CC_SHA256
57     case .sha384:
58       return CC_SHA384
59     case .sha512:
60       return CC_SHA512
61     }
62   }
63 }
64