Add hash and digest in swift

This commit is contained in:
Hugo Pointcheval 2020-12-19 21:44:44 +01:00
parent 1e360f16fe
commit 447d6b2c5a

65
ios/Classes/Hash.swift Normal file
View File

@ -0,0 +1,65 @@
//
// Hash.swift
//
// NativeCryptoPlugin
//
// Copyright (c) 2020
// Author: Hugo Pointcheval
//
import Foundation
import CommonCrypto
enum HashAlgorithm: String {
case SHA1 = "sha1"
case SHA224 = "sha224"
case SHA256 = "sha256"
case SHA384 = "sha384"
case SHA512 = "sha512"
var digestLength: Int {
switch self {
case .SHA1: return Int(CC_SHA1_DIGEST_LENGTH)
case .SHA224: return Int(CC_SHA224_DIGEST_LENGTH)
case .SHA256: return Int(CC_SHA256_DIGEST_LENGTH)
case .SHA384: return Int(CC_SHA384_DIGEST_LENGTH)
case .SHA512: return Int(CC_SHA512_DIGEST_LENGTH)
}
}
var pbkdf2: UInt32 {
switch self {
case .SHA1: return CCPBKDFAlgorithm(kCCPRFHmacAlgSHA1)
case .SHA224: return CCPBKDFAlgorithm(kCCPRFHmacAlgSHA224)
case .SHA256: return CCPBKDFAlgorithm(kCCPRFHmacAlgSHA256)
case .SHA384: return CCPBKDFAlgorithm(kCCPRFHmacAlgSHA384)
case .SHA512: return CCPBKDFAlgorithm(kCCPRFHmacAlgSHA512)
}
}
}
class Hash {
func digest(data: Data?, algorithm: HashAlgorithm) -> Data? {
if (data == nil) {
return nil
}
let digestData = Data(count: algorithm.digestLength)
let digestBytes = digestData.withUnsafeBytes { $0.load(as: UnsafeMutablePointer<UInt8>.self) }
let messageBytes = data!.withUnsafeBytes { $0.load(as: UnsafePointer<UInt8>.self) }
switch algorithm {
case .SHA1:
CC_SHA1(messageBytes, CC_LONG(data!.count), digestBytes)
case .SHA224:
CC_SHA224(messageBytes, CC_LONG(data!.count), digestBytes)
case .SHA256:
CC_SHA256(messageBytes, CC_LONG(data!.count), digestBytes)
case .SHA384:
CC_SHA384(messageBytes, CC_LONG(data!.count), digestBytes)
case .SHA512:
CC_SHA512(messageBytes, CC_LONG(data!.count), digestBytes)
}
return digestData
}
}