All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tsec.passwordhashers.libsodium.passwordhashers.scala Maven / Gradle / Ivy

package tsec.passwordhashers

import java.nio.charset.Charset

import tsec.common.TSecError
import tsec.libsodium.ScalaSodium

package object libsodium {

  final case class SodiumPasswordError(cause: String) extends TSecError

  private[passwordhashers] val asciiEncoder = Charset.forName("US-ASCII").newEncoder()

  final class PWStrengthParam[PTyp, Str](val opLimit: Int, val memLimit: Int)


  object PasswordStrength {
    object MinStrength
    object InteractiveStrength
    object ModerateStrength
    object SensitiveStrength
  }

  type MinStrength         = PasswordStrength.MinStrength.type
  type InteractiveStrength = PasswordStrength.InteractiveStrength.type
  type ModerateStrength    = PasswordStrength.ModerateStrength.type
  type SensitiveStrength   = PasswordStrength.SensitiveStrength.type

  implicit val argonMinstr: PWStrengthParam[Argon2, MinStrength] = new PWStrengthParam[Argon2, MinStrength](
    ScalaSodium.crypto_pwhash_argon2id_OPSLIMIT_MIN,
    ScalaSodium.crypto_pwhash_argon2id_MEMLIMIT_MIN
  )

  implicit val argonInteractiveStr: PWStrengthParam[Argon2, InteractiveStrength] =
    new PWStrengthParam[Argon2, InteractiveStrength](
      ScalaSodium.crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE,
      ScalaSodium.crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE
    )

  implicit val argonModerateStr: PWStrengthParam[Argon2, ModerateStrength] =
    new PWStrengthParam[Argon2, ModerateStrength](
      ScalaSodium.crypto_pwhash_argon2id_OPSLIMIT_MODERATE,
      ScalaSodium.crypto_pwhash_argon2id_MEMLIMIT_MODERATE
    )

  implicit val argonSensitiveStr: PWStrengthParam[Argon2, SensitiveStrength] =
    new PWStrengthParam[Argon2, SensitiveStrength](
      ScalaSodium.crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE,
      ScalaSodium.crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE
    )

  implicit val SodiumSCryptMinstr: PWStrengthParam[SodiumSCrypt, MinStrength] =
    new PWStrengthParam[SodiumSCrypt, MinStrength](
      ScalaSodium.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN,
      ScalaSodium.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN
    )

  implicit val SodiumSCryptInteractiveStr: PWStrengthParam[SodiumSCrypt, InteractiveStrength] =
    new PWStrengthParam[SodiumSCrypt, InteractiveStrength](
      ScalaSodium.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE,
      ScalaSodium.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE
    )

  implicit val SodiumSCryptSensitiveStr: PWStrengthParam[SodiumSCrypt, SensitiveStrength] =
    new PWStrengthParam[SodiumSCrypt, SensitiveStrength](
      ScalaSodium.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE,
      ScalaSodium.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE
    )

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy