#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) - [CRC32](http://en.wikipedia.org/wiki/Cyclic_redundancy_check) (not hash) - [CRC16](http://en.wikipedia.org/wiki/Cyclic_redundancy_check) (not hash) #####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)) - Cipher feedback ([CFB](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_.28CFB.29)) - Counter ([CTR](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29)) #####Data padding - [PKCS#7](http://tools.ietf.org/html/rfc5652#section-6.3) ##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). - 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. ####CryptoSwift.framework Alternatively, you can build the Universal Framework and link it in your Xcode project. To do that please run `build.sh` script and find resulting frameworks in `Framework` directory. Looking for version for Swift 1.2? check branch **swift12**, it's there. ####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 ``` 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