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