Hashing data using CommonCrypto and SHA256
Looking for hashing data using CryptoKit? Please navigate to here.
In this post we will look into how to add CommonCrypto to a Xcode project and how to generate hash using SHA256.
Adding CommonCrypto as a module
Note: Since Swift 4.2, this step is not necessary and manually added CommonCrypto module must be removed.
CommonCrypto library can be added in two ways: importing it in the Objective-C bridging header or by using module maps.
The first option makes sense for projects having both Objective-C and Swift code. In this case Objective-C bridging header is already part of the project and therefore adding
#import to the bridging header is the quickest way.
The second option is more suitable for pure Swift projects as it enables to avoid adding the bridging header (although it is up for everyone’s preference).
Adding CommonCrypto as a module consists of two steps. Firstly, we need to create a folder named ‘CommonCrypto’ in the same folder as the Xcode project file is. Then we need to create a file ‘module.map’ and save it to ‘CommonCrypto’ folder.
Secondly, we need to open the project in Xcode, then navigating to ‘Build Settings’ of the target and adding
$(PROJECT_DIR)/CommonCrypto/ to ‘Import Paths’.
That’s it, now Xcode knows where the module is located and it can be imported in Swift files.
Hashing data using SHA256 algorithm
CommonCrypto contains a function named CC_SHA256(…) what takes in data, the count of bytes and gives a pointer to the hash of the data. As the function operates on the data, it makes sense to extend Data. We’ll add a function what can be later on extended for adding support for other hashing algorithms as well (see here for other algorithms).
Example project can be found on GitHub (CommonCryptoExample).