Skip to content

Instantly share code, notes, and snippets.

@asaday
Created April 26, 2016 18:15
Show Gist options
  • Save asaday/0d29f4eddf05c5c2764fdf710055f1df to your computer and use it in GitHub Desktop.
Save asaday/0d29f4eddf05c5c2764fdf710055f1df to your computer and use it in GitHub Desktop.
import Foundation
import CommonCrypto
public typealias DigestHashFunc = @convention(c)(UnsafePointer<Void>, CC_LONG, UnsafeMutablePointer<UInt8>) -> UnsafeMutablePointer<UInt8>
public extension NSData {
var md4: NSData { return digetstHash(CC_MD4, CC_MD4_DIGEST_LENGTH) }
var md5: NSData { return digetstHash(CC_MD5, CC_MD5_DIGEST_LENGTH) }
var sha1: NSData { return digetstHash(CC_SHA1, CC_SHA1_DIGEST_LENGTH) }
var sha224: NSData { return digetstHash(CC_SHA224, CC_SHA224_DIGEST_LENGTH) }
var sha256: NSData { return digetstHash(CC_SHA256, CC_SHA256_DIGEST_LENGTH) }
var sha384: NSData { return digetstHash(CC_SHA384, CC_SHA384_DIGEST_LENGTH) }
var sha512: NSData { return digetstHash(CC_SHA512, CC_SHA512_DIGEST_LENGTH) }
func digetstHash(dfunc: DigestHashFunc, _ dlength: Int32) -> NSData {
var hash = [UInt8](count: Int(dlength), repeatedValue: 0)
dfunc(bytes, CC_LONG(length), &hash)
return NSData(bytes: hash, length: hash.count)
}
}
public extension String {
var md4: String { return digetstHash(CC_MD4, CC_MD4_DIGEST_LENGTH) }
var md5: String { return digetstHash(CC_MD5, CC_MD5_DIGEST_LENGTH) }
var sha1: String { return digetstHash(CC_SHA1, CC_SHA1_DIGEST_LENGTH) }
var sha224: String { return digetstHash(CC_SHA224, CC_SHA224_DIGEST_LENGTH) }
var sha256: String { return digetstHash(CC_SHA256, CC_SHA256_DIGEST_LENGTH) }
var sha384: String { return digetstHash(CC_SHA384, CC_SHA384_DIGEST_LENGTH) }
var sha512: String { return digetstHash(CC_SHA512, CC_SHA512_DIGEST_LENGTH) }
func digetstHash(dfunc: DigestHashFunc, _ dlength: Int32) -> String {
guard let data = dataUsingEncoding(NSUTF8StringEncoding) else { return "" }
var hash = [UInt8](count: Int(dlength), repeatedValue: 0)
dfunc(data.bytes, CC_LONG(data.length), &hash)
return hash.reduce("") { $0 + String(format: "%02X", $1) }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment