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