Guest User

Untitled

a guest
May 23rd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. import Foundation
  2.  
  3. extension NSData {
  4.  
  5. func encryptAES128(key: NSString, iv: NSString) -> NSData? {
  6. return aes128(method: CCOperation(kCCEncrypt), key: key, iv: iv)
  7. }
  8.  
  9. func decryptAES128(key: NSString, iv: NSString) -> NSData? {
  10. return aes128(method: CCOperation(kCCDecrypt), key: key, iv: iv)
  11. }
  12.  
  13. private func aes128(method: CCOperation, key: NSString, iv: NSString) -> NSData? {
  14. let keyPtr = UnsafeMutablePointer<CChar>.allocate(capacity: Int(kCCKeySizeAES128) + 1)
  15.  
  16. defer {
  17. keyPtr.deallocate()
  18. }
  19.  
  20. let ivPtr = iv.utf8String
  21. bzero(keyPtr, 0)
  22. key.getCString(keyPtr, maxLength: Int(kCCKeySizeAES128) + 1, encoding: String.Encoding.utf8.rawValue)
  23.  
  24. let bufferSize = self.length + kCCBlockSizeAES128
  25. let buffer = UnsafeMutableRawPointer.allocate(byteCount: bufferSize, alignment: MemoryLayout.alignment(ofValue: CChar.self))
  26.  
  27. var numBytesEncrypted = 0
  28.  
  29. let cryptStatus = CCCrypt(method, CCAlgorithm(kCCAlgorithmAES128), CCOptions(kCCOptionPKCS7Padding), keyPtr, kCCKeySizeAES128, ivPtr, self.bytes, self.length, buffer, bufferSize, &numBytesEncrypted)
  30.  
  31. if cryptStatus == kCCSuccess {
  32. return NSData(bytesNoCopy: buffer, length: numBytesEncrypted, freeWhenDone: true)
  33. }
  34.  
  35. buffer.deallocate()
  36. return nil
  37. }
  38.  
  39. }
Add Comment
Please, Sign In to add comment