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

tsec.signature.jca.JCASigner.scala Maven / Gradle / Ivy

The newest version!
package tsec.signature.jca

import cats.Monad
import tsec.signature.{CertificateSigner, CryptoSignature}
import cats.syntax.functor._
import cats.syntax.flatMap._

abstract class JCASigner[F[_]: Monad, A](
    algebra: JCASigAlgebra[F, A, SigPublicKey, SigPrivateKey, SigCertificate]
) extends CertificateSigner[F, A, SigPublicKey, SigPrivateKey, SigCertificate] {

  def sign(content: Array[Byte], p: SigPrivateKey[A]): F[CryptoSignature[A]] =
    for {
      instance <- algebra.genSignatureInstance
      _        <- algebra.initSign(instance, p)
      _        <- algebra.loadBytes(content, instance)
      signed   <- algebra.sign(instance)
    } yield CryptoSignature[A](signed)

  def verifyBool(toSign: Array[Byte], signed: CryptoSignature[A], k: SigPublicKey[A]): F[Boolean] =
    for {
      instance <- algebra.genSignatureInstance
      _        <- algebra.initVerifyK(instance, k)
      _        <- algebra.loadBytes(toSign, instance)
      verified <- algebra.verify(signed, instance)
    } yield verified

  def verifyCert(toSign: Array[Byte], signed: CryptoSignature[A], c: SigCertificate[A]): F[Boolean] =
    for {
      instance <- algebra.genSignatureInstance
      _        <- algebra.initVerifyC(instance, c)
      _        <- algebra.loadBytes(toSign, instance)
      verified <- algebra.verify(signed, instance)
    } yield verified

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy