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

tsec.cipher.asymmetric.libsodium.libsodium.scala Maven / Gradle / Ivy

package tsec.cipher.asymmetric

package object libsodium {

  type PrivateKey[A] = PrivateKey.Type[A]

  //Todo: Check keyLen for building.
  object PrivateKey {
    type Type[A] <: Array[Byte]

    def apply[A](value: Array[Byte]): PrivateKey[A] = value.asInstanceOf[PrivateKey[A]]
    def subst[A]: PartiallyApplied[A]               = new PartiallyApplied[A]

    private[tsec] final class PartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[Array[Byte]]): F[PrivateKey[A]] = value.asInstanceOf[F[PrivateKey[A]]]
    }

    def unsubst[A]: PartiallyUnapplied[A] = new PartiallyUnapplied[A]

    private[tsec] final class PartiallyUnapplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[PrivateKey[A]]): F[Array[Byte]] = value.asInstanceOf[F[Array[Byte]]]
    }
  }

  type PublicKey[A] = PublicKey.Type[A]

  object PublicKey {
    type Type[A] <: Array[Byte]

    def apply[A](value: Array[Byte]): PublicKey[A] = value.asInstanceOf[PublicKey[A]]
    def subst[A]: PartiallyApplied[A]               = new PartiallyApplied[A]

    private[tsec] final class PartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[Array[Byte]]): F[PublicKey[A]] = value.asInstanceOf[F[PublicKey[A]]]
    }

    def unsubst[A]: PartiallyUnapplied[A] = new PartiallyUnapplied[A]

    private[tsec] final class PartiallyUnapplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[PublicKey[A]]): F[Array[Byte]] = value.asInstanceOf[F[Array[Byte]]]
    }
  }

  final case class SodiumKeyPair[A](pubKey: PublicKey[A], privKey: PrivateKey[A])

  type PKAuthTag[A] = PKAuthTag.Type[A]

  object PKAuthTag {
    type Type[A] <: Array[Byte]

    def apply[A](bytes: Array[Byte]): PKAuthTag[A] = bytes.asInstanceOf[PKAuthTag[A]]

    def subst[A]: PKAuthPartiallyApplied[A] = new PKAuthPartiallyApplied[A]

    private[tsec] final class PKAuthPartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[Array[Byte]]): F[PKAuthTag[A]] = value.asInstanceOf[F[PKAuthTag[A]]]
    }

    def unsubst[A]: PartiallyUnapplied[A] = new PartiallyUnapplied[A]

    private[tsec] final class PartiallyUnapplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[PKAuthTag[A]]): F[Array[Byte]] = value.asInstanceOf[F[Array[Byte]]]
    }
  }

  type SharedKey[A] = SharedKey.Type[A]

  object SharedKey {
    type Type[A] <: Array[Byte]

    def apply[A](bytes: Array[Byte]): SharedKey[A] = bytes.asInstanceOf[SharedKey[A]]

    def subst[A]: PartiallyApplied[A] = new PartiallyApplied[A]

    private[tsec] final class PartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[Array[Byte]]): F[SharedKey[A]] = value.asInstanceOf[F[SharedKey[A]]]
    }

    def unsubst[A]: PartiallyUnapplied[A] = new PartiallyUnapplied[A]

    private[tsec] final class PartiallyUnapplied[A](val dummy: Boolean = true) extends AnyVal {
      def apply[F[_]](value: F[SharedKey[A]]): F[Array[Byte]] = value.asInstanceOf[F[Array[Byte]]]
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy