From cff083af1ba5fc31355421639a37403cd0e0900e Mon Sep 17 00:00:00 2001 From: usbharu Date: Mon, 23 Sep 2024 14:45:57 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BD=B2=E5=90=8D=E3=82=92=E7=94=9F?= =?UTF-8?q?=E6=88=90=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/EcdsaP256Sha256SignatureSigner.kt | 14 +++++++++++++ .../v2/HttpMessageSignatureSigner.kt | 8 ++++++++ .../dev/usbharu/httpsignature/v2/Material.kt | 9 +++++++++ .../v2/RsaPssSha512SignatureSigner.kt | 7 +++++++ .../httpsignature/v2/RsaPssSignatureSigner.kt | 16 +++++++++++++++ .../v2/RsaV1_5Sha256SignatureSigner.kt | 20 +++++++++++++++++++ .../httpsignature/v2/SignatureSigner.kt | 7 +++++++ 7 files changed, 81 insertions(+) create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/EcdsaP256Sha256SignatureSigner.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/HttpMessageSignatureSigner.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/Material.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSha512SignatureSigner.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSignatureSigner.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/RsaV1_5Sha256SignatureSigner.kt create mode 100644 src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureSigner.kt diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/EcdsaP256Sha256SignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/EcdsaP256Sha256SignatureSigner.kt new file mode 100644 index 0000000..29217b0 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/EcdsaP256Sha256SignatureSigner.kt @@ -0,0 +1,14 @@ +package dev.usbharu.httpsignature.v2 + +import java.security.PrivateKey +import java.security.Signature +import java.util.* + +class EcdsaP256Sha256SignatureSigner : SignatureSigner { + override fun sign(byteArray: ByteArray, privateKey: PrivateKey): String { + val signature = Signature.getInstance("SHA256withECDSA") + signature.initSign(privateKey) + signature.update(byteArray) + return Base64.getEncoder().encodeToString(signature.sign()) + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/HttpMessageSignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/HttpMessageSignatureSigner.kt new file mode 100644 index 0000000..d93fd0f --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/HttpMessageSignatureSigner.kt @@ -0,0 +1,8 @@ +package dev.usbharu.httpsignature.v2 + +import dev.usbharu.httpsignature.common.HttpRequest +import java.security.PrivateKey + +class HttpMessageSignatureSigner { + fun sign(httpRequest: HttpRequest,privateKey: PrivateKey) +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/Material.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/Material.kt new file mode 100644 index 0000000..141b172 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/Material.kt @@ -0,0 +1,9 @@ +package dev.usbharu.httpsignature.v2 + +import java.security.PrivateKey + +data class Material( + val signatureBase: SignatureBase, + val privateKey: PrivateKey, + val label: String +) diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSha512SignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSha512SignatureSigner.kt new file mode 100644 index 0000000..cec24fe --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSha512SignatureSigner.kt @@ -0,0 +1,7 @@ +package dev.usbharu.httpsignature.v2 + +import java.security.spec.MGF1ParameterSpec +import java.security.spec.PSSParameterSpec + +class RsaPssSha512SignatureSigner(salt: Int = 64) : + RsaPssSignatureSigner(PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, salt, 1)) \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSignatureSigner.kt new file mode 100644 index 0000000..5acbeb5 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaPssSignatureSigner.kt @@ -0,0 +1,16 @@ +package dev.usbharu.httpsignature.v2 + +import java.security.PrivateKey +import java.security.Signature +import java.security.spec.PSSParameterSpec +import java.util.* + +open class RsaPssSignatureSigner(private val pssParameterSpec: PSSParameterSpec) : SignatureSigner { + override fun sign(byteArray: ByteArray, privateKey: PrivateKey): String { + val signature = Signature.getInstance("RSASSA-PSS") + signature.setParameter(pssParameterSpec) + signature.initSign(privateKey) + signature.update(byteArray) + return Base64.getEncoder().encodeToString(signature.sign()) + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaV1_5Sha256SignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaV1_5Sha256SignatureSigner.kt new file mode 100644 index 0000000..6ec4715 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/RsaV1_5Sha256SignatureSigner.kt @@ -0,0 +1,20 @@ +package dev.usbharu.httpsignature.v2 + +import java.security.PrivateKey +import java.security.Signature +import java.util.* + +/** + * RSASSA-PKCS1-v1.5 + */ + +class RsaV1_5Sha256SignatureSigner : SignatureSigner { + override fun sign(byteArray: ByteArray, privateKey: PrivateKey): String { + val signature = Signature.getInstance("SHA256withRSA") + signature.initSign(privateKey) + signature.update(byteArray) + val bytes = signature.sign() + + return Base64.getEncoder().encodeToString(bytes) + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureSigner.kt b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureSigner.kt new file mode 100644 index 0000000..a17e0b9 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/httpsignature/v2/SignatureSigner.kt @@ -0,0 +1,7 @@ +package dev.usbharu.httpsignature.v2 + +import java.security.PrivateKey + +interface SignatureSigner { + fun sign(byteArray: ByteArray,privateKey: PrivateKey): String +} \ No newline at end of file