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