Crypto.kt
- package com.hexagonkt.core.security
- import java.security.MessageDigest
- import javax.crypto.Mac
- import javax.crypto.spec.SecretKeySpec
- fun hmac(algorithm: String, data: ByteArray, key: ByteArray): ByteArray {
- val mac = Mac.getInstance(algorithm)
- mac.init(SecretKeySpec(key, algorithm))
- return mac.doFinal(data)
- }
- fun chainHmac(algorithm: String, vararg fields: String): ByteArray =
- fields
- .map(String::toByteArray)
- .reduce { data, field -> hmac(algorithm, field, data) }
- fun hash(algorithm: String, data: ByteArray): ByteArray {
- val messageDigest = MessageDigest.getInstance(algorithm)
- messageDigest.update(data)
- return messageDigest.digest()
- }
- fun hash(algorithm: String, data: String): ByteArray =
- hash(algorithm, data.toByteArray())
- fun sign(algorithm: String, data: String, key: ByteArray): ByteArray =
- hmac(algorithm, data.toByteArray(), key)