#CryptoSwift Crypto related functions and helpers for [Swift](https://developer.apple.com/swift/) implemented in Swift. ([#PureSwift](https://twitter.com/hashtag/pureswift)) -------
Features • Contribution • Installation • Usage • Author • Changelog
------- ##Requirements Good mood ##Features - Easy to use - Convenient extensions for String and NSData - iOS, OSX, AppleTV, watchOS, Linux support ##What implemented? #### Hash - [MD5](http://tools.ietf.org/html/rfc1321) - [SHA1](http://tools.ietf.org/html/rfc3174) - [SHA224](http://tools.ietf.org/html/rfc6234) - [SHA256](http://tools.ietf.org/html/rfc6234) - [SHA384](http://tools.ietf.org/html/rfc6234) - [SHA512](http://tools.ietf.org/html/rfc6234) #### Cyclic Redundancy Check (CRC) - [CRC32](http://en.wikipedia.org/wiki/Cyclic_redundancy_check) - [CRC16](http://en.wikipedia.org/wiki/Cyclic_redundancy_check) #####Cipher - [AES-128, AES-192, AES-256](http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf) - [ChaCha20](http://cr.yp.to/chacha/chacha-20080128.pdf) - [Rabbit](https://tools.ietf.org/html/rfc4503) #####Message authenticators - [Poly1305](http://cr.yp.to/mac/poly1305-20050329.pdf) - [HMAC](https://www.ietf.org/rfc/rfc2104.txt) MD5, SHA1, SHA256 #####Cipher block mode - Electronic codebook ([ECB](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_.28ECB.29)) - Cipher-block chaining ([CBC](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29)) - Propagating Cipher Block Chaining ([PCBC](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Propagating_Cipher_Block_Chaining_.28PCBC.29)) - Cipher feedback ([CFB](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_.28CFB.29)) - Output Feedback ([OFB](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_Feedback_.28OFB.29)) - Counter ([CTR](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29)) #####Password-Based Key Derivation Function - [PBKDF2](http://tools.ietf.org/html/rfc2898#section-5.2) (Password-Based Key Derivation Function 2) #####Data padding - [PKCS#7](http://tools.ietf.org/html/rfc5652#section-6.3) - NoPadding ##Why [Why?](https://github.com/krzyzanowskim/CryptoSwift/issues/5) [Because I can](https://github.com/krzyzanowskim/CryptoSwift/issues/5#issuecomment-53379391). ##Contribution For latest version, please check **develop** branch. This is latest development version that will be merged into **master** branch at some point. - If you want to contribute, submit a [pull request](https://github.com/krzyzanowskim/CryptoSwift/pulls) against a development `develop` branch. - If you found a bug, [open an issue](https://github.com/krzyzanowskim/CryptoSwift/issues). - If you have a feature request, [open an issue](https://github.com/krzyzanowskim/CryptoSwift/issues). ##Installation To install CryptoSwift, add it as a submodule to your project (on the top level project directory): git submodule add https://github.com/krzyzanowskim/CryptoSwift.git ####Embedded Framework Embedded frameworks require a minimum deployment target of iOS 8 or OS X Mavericks (10.9). Drag the `CryptoSwift.xcodeproj` file into your Xcode project, and add appropriate framework as a dependency to your target. Now select your App and choose the General tab for the app target. Find *Embedded Binaries* and press "+", then select `CryptoSwift.framework` (iOS, OS X, watchOS or tvOS)  #####iOS, OSX, watchOS, tvOS In the project, you'll find three targets, configured for each supported SDK: - CryptoSwift iOS - CryptoSwift OSX - CryptoSwift watchOS - CryptoSwift tvOS You may need to choose the one you need to build `CryptoSwift.framework` for your application. ####Older Swift - Swift 1.2: branch [swift12](https://github.com/krzyzanowskim/CryptoSwift/tree/swift12). - Swift 2.1: branch [swift21](https://github.com/krzyzanowskim/CryptoSwift/tree/swift21) ####CocoaPods You can use [CocoaPods](http://cocoapods.org/?q=cryptoSwift). ```ruby source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! pod 'CryptoSwift' ``` or for newest version from specified branch of code: ```ruby pod 'CryptoSwift', :git => "https://github.com/krzyzanowskim/CryptoSwift", :branch => "master" ``` ####Carthage You can use [Carthage](https://github.com/Carthage/Carthage). Specify in Cartfile: ```ruby github "krzyzanowskim/CryptoSwift" ``` Run carthage to build the framework and drag the built CryptoSwift.framework into your Xcode project. Follow [build instructions](https://github.com/Carthage/Carthage#getting-started) ####Swift Package Manager You can use [Swift Package Manager](https://swift.org/package-manager/) and specify dependency in `Package.swift` by adding this: ``` .Package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", majorVersion: 0) ``` ##Usage ```swift import CryptoSwift ``` #####Conversion between NSData and [UInt8] For you convenience CryptoSwift provide two function to easily convert array of bytes to NSData and other way around: ```swift let data: NSData = NSData(bytes: [0x01, 0x02, 0x03]) let bytes:[UInt8] = data.arrayOfBytes() ``` #####Calculate Hash For your convenience you should use extensions methods like encrypt(), decrypt(), md5(), sha1() and so on. Hashing a data or array of bytes (aka `Array