@objcpublicfuncsign(source:Data,padding:SecPadding=SecPadding.PKCS1SHA1)->Data?{guardsource.count>0&&self.privateSecKey!=nilelse{returnnil}lethashData:NSData?switchpadding{caseSecPadding.PKCS1SHA1:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha1)breakcaseSecPadding.PKCS1SHA224:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha224)breakcaseSecPadding.PKCS1SHA256:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha256)breakcaseSecPadding.PKCS1SHA384:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha384)breakcaseSecPadding.PKCS1SHA512:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha512)breakdefault:do{print("not support this type sign!")returnnil}}letblockLen=SecKeyGetBlockSize(self.privateSecKey!)varoutBuf=[UInt8](repeating:0,count:blockLen)varoutBufLen:Int=blockLenletstatus:OSStatus=SecKeyRawSign(self.privateSecKey!,padding,hashData!.bytes.assumingMemoryBound(to:UInt8.self),hashData!.length,&outBuf,&outBufLen)ifstatus==noErr{returnData(bytes:outBuf,count:outBufLen)}else{print("sign status = \(status)")returnnil}}
@objcpublicfuncverify(source:Data,signData:Data,padding:SecPadding=SecPadding.PKCS1SHA1)->Bool{guardsource.count>0&&signData.count>0&&self.publicSecKey!=nilelse{returnfalse}lethashData:NSData?switchpadding{caseSecPadding.PKCS1SHA1:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha1)breakcaseSecPadding.PKCS1SHA224:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha224)breakcaseSecPadding.PKCS1SHA256:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha256)breakcaseSecPadding.PKCS1SHA384:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha384)breakcaseSecPadding.PKCS1SHA512:hashData=(sourceasNSData).shaWithType(shaType:YKShaType.sha512)breakdefault:do{print("not support this type sign!")returnfalse}}letsignBuf:UnsafePointer<UInt8>=(signDataasNSData).bytes.assumingMemoryBound(to:UInt8.self)letblockLen=SecKeyGetBlockSize(self.publicSecKey!)letstatus:OSStatus=SecKeyRawVerify(self.publicSecKey!,padding,hashData!.bytes.assumingMemoryBound(to:UInt8.self),hashData!.length,signBuf,blockLen)ifstatus==noErr{returntrue}else{print("sign status = \(status)")}returnfalse}