Crypto.kt

  1. package com.hexagonkt.core.security

  2. import java.security.MessageDigest
  3. import javax.crypto.Mac
  4. import javax.crypto.spec.SecretKeySpec

  5. fun hmac(algorithm: String, data: ByteArray, key: ByteArray): ByteArray {
  6.     val mac = Mac.getInstance(algorithm)
  7.     mac.init(SecretKeySpec(key, algorithm))
  8.     return mac.doFinal(data)
  9. }

  10. fun chainHmac(algorithm: String, vararg fields: String): ByteArray =
  11.     fields
  12.         .map(String::toByteArray)
  13.         .reduce { data, field -> hmac(algorithm, field, data) }

  14. fun hash(algorithm: String, data: ByteArray): ByteArray {
  15.     val messageDigest = MessageDigest.getInstance(algorithm)
  16.     messageDigest.update(data)
  17.     return messageDigest.digest()
  18. }

  19. fun hash(algorithm: String, data: String): ByteArray =
  20.     hash(algorithm, data.toByteArray())

  21. fun sign(algorithm: String, data: String, key: ByteArray): ByteArray =
  22.     hmac(algorithm, data.toByteArray(), key)