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