package com.chameth.yaotp.algos import javax.crypto.Mac import javax.crypto.spec.SecretKeySpec typealias HmacFunc = (ByteArray, ByteArray) -> ByteArray fun getHmacFunc(name: String?): HmacFunc { return when (name?.toLowerCase()) { "sha1" -> ::hmacSha1 "sha256" -> ::hmacSha256 "sha512" -> ::hmacSha512 else -> ::hmacSha1 } } fun hmacSha1(keyMaterial: ByteArray, input: ByteArray) = hmac(keyMaterial, input, "HmacSHA1") fun hmacSha256(keyMaterial: ByteArray, input: ByteArray) = hmac(keyMaterial, input, "HmacSHA256") fun hmacSha512(keyMaterial: ByteArray, input: ByteArray) = hmac(keyMaterial, input, "HmacSHA512") private fun hmac(keyMaterial: ByteArray, input: ByteArray, algorithm: String): ByteArray { return with(Mac.getInstance(algorithm)) { init(SecretKeySpec(keyMaterial, algorithm)) doFinal(input) } }