Skip to content

Instantly share code, notes, and snippets.

@caldwbr
Created January 28, 2018 05:36
Show Gist options
  • Save caldwbr/4eb39d7ec9c4304879bf87c54e527866 to your computer and use it in GitHub Desktop.
Save caldwbr/4eb39d7ec9c4304879bf87c54e527866 to your computer and use it in GitHub Desktop.
encryption
extension Data {
func encryptIt() -> Data {
let data = self
let encryptor = RNCryptor.EncryptorV3(encryptionKey: encryptKey!, hmacKey: hmacKey!)
return encryptor.encrypt(data: data as Data)
}
func decryptIt() -> Data {
do {
var data = self
let decryptor = RNCryptor.DecryptorV3(encryptionKey: encryptKey!, hmacKey: hmacKey!)
let originalData = try decryptor.decrypt(data: data)
return originalData
} catch {
print("WE HAD A FREAKING ERROR" + String(describing: error))
return self
}
}
}
extension UIImage {
func oneTenthIt() -> UIImage {
let data = UIImageJPEGRepresentation(self, 0.1)
return UIImage(data: data!)!
}
func pixelCrypt(isEncrypted: Bool) -> UIImage {
//I TRIED THIS, and THE CODE COMMENTED OUT BELOW, BUT NEITHER WORKED
let data = UIImagePNGRepresentation(self)
let cryptedData = isEncrypted ? data.decryptIt() : data.encryptIt()
return UIImage(data: cryptedData!)!
/*let imageRef = self.cgImage
let width = imageRef?.width
let height = imageRef?.height
let colorSpace = CGColorSpaceCreateDeviceRGB()
let sizeOfRawDataInBytes: Int = Int(height! * width! * 4)
let alignment = MemoryLayout<Int>.stride
let rawData = UnsafeMutableRawPointer.allocate(bytes: sizeOfRawDataInBytes, alignedTo: alignment)
guard let context = CGContext(data: rawData, width: width!,
height: height!, bitsPerComponent: 8,
bytesPerRow: width! * 4, space: colorSpace,
bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue)
else { print("What the hay"); return self }
context.draw(imageRef!, in: CGRect(x: 0, y: 0, width: CGFloat(width!), height: CGFloat(height!)))
var data = Data(bytes: rawData, count: sizeOfRawDataInBytes)
//print(data.base64EncodedString().characters.prefix(10))
data = isEncrypted ? data.decryptIt() : data.encryptIt()
//print(data.base64EncodedString().characters.prefix(10))
//rawData.deallocate(bytes: sizeOfRawDataInBytes, alignedTo: alignment)
//let nsData = NSMutableData(data: data)
//let rawPtr = nsData.mutableBytes
let uint8Ptr = UnsafeMutablePointer<UInt8>.allocate(capacity: data.count)
uint8Ptr.initialize(from: data) //<-copying the data
//You need to keep `uint8Ptr` and `data.count` for future management
let uint8PtrCount = data.count
//You can convert it to `UnsafeRawPointer`
let rawPtr = UnsafeMutableRawPointer(mutating: uint8Ptr)
guard let context2 = CGContext(data: rawPtr, width: width!, height: height!, bitsPerComponent: 8, bytesPerRow: width! * 4, space: colorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue) else { print("What the freaking"); return self }
guard let imageRef2 = context2.makeImage() else { return self }
//Deinitialize and deallocate the region
uint8Ptr.deinitialize(count: uint8PtrCount)
uint8Ptr.deallocate(capacity: uint8PtrCount)
return UIImage(cgImage: imageRef2)
*/
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment