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