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

me.saro.jwt.core.JwtAlgorithmKeyPair.kt Maven / Gradle / Ivy

package me.saro.jwt.core

import me.saro.jwt.exception.JwtException
import me.saro.jwt.exception.JwtExceptionCode
import java.security.Signature

interface JwtAlgorithmKeyPair : JwtAlgorithm {
    companion object {
        private val DOT = ".".toByteArray()
    }

    fun toJwtKey(publicKey: String, privateKey: String): JwtKey

    override fun toJwtKey(stringify: String): JwtKey = stringify.let {
        val iof = it.indexOf(' ')
        if (iof == -1) throw JwtException(JwtExceptionCode.INVALID_KEY, "invalid jwt key format")
        toJwtKey(it.substring(0, iof), it.substring(iof + 1))
    }

    fun getSignature(): Signature

    override fun verifySignature(jwtToken: List, jwtKey: JwtKey): Boolean =
        try {
            val signature = getSignature()
            signature.initVerify(jwtKey.public)
            signature.update(jwtToken[0].toByteArray())
            signature.update(DOT)
            signature.update(jwtToken[1].toByteArray())
            jwtToken[2].isNotBlank() && signature.verify(JwtUtils.decodeBase64Url(jwtToken[2]))
        } catch (_: Exception) {
            false
        }

    override fun signature(payload: String, jwtKey: JwtKey): String {
        val signature = getSignature()
        signature.initSign(jwtKey.private)
        signature.update(payload.toByteArray())
        return JwtUtils.encodeToBase64UrlWopString(signature.sign())
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy