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