[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] branch master updated: EBICS VEU crypto WIP
From: |
gnunet |
Subject: |
[libeufin] branch master updated: EBICS VEU crypto WIP |
Date: |
Tue, 12 Nov 2019 15:18:20 +0100 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository libeufin.
The following commit(s) were added to refs/heads/master by this push:
new cc867f9 EBICS VEU crypto WIP
cc867f9 is described below
commit cc867f98a0f7034be6485d5b57dfda34ed5194e3
Author: Florian Dold <address@hidden>
AuthorDate: Tue Nov 12 15:17:34 2019 +0100
EBICS VEU crypto WIP
---
nexus/src/main/kotlin/Main.kt | 10 ++++------
.../kotlin/tech/libeufin/sandbox/CryptoUtil.kt | 21 ++++++++++++++++++---
.../tech/libeufin/sandbox/EbicsProtocolBackend.kt | 5 +++++
.../schema/ebics_s001/UserSignatureData.kt | 22 +++++++++++++++++++---
sandbox/src/test/kotlin/CryptoUtilTest.kt | 8 ++++++++
5 files changed, 54 insertions(+), 12 deletions(-)
diff --git a/nexus/src/main/kotlin/Main.kt b/nexus/src/main/kotlin/Main.kt
index 3fd2f90..6c5adc5 100644
--- a/nexus/src/main/kotlin/Main.kt
+++ b/nexus/src/main/kotlin/Main.kt
@@ -46,13 +46,11 @@ import org.jetbrains.exposed.sql.transactions.transaction
import org.slf4j.LoggerFactory
import tech.libeufin.sandbox.*
import tech.libeufin.schema.ebics_h004.*
-import tech.libeufin.schema.ebics_s001.SignatureTypes.SignaturePubKeyInfoType
-import tech.libeufin.schema.ebics_s001.SignatureTypes.SignaturePubKeyOrderData
-import tech.libeufin.schema.ebics_s001.SignatureTypes.PubKeyValueType
import java.text.DateFormat
import javax.sql.rowset.serial.SerialBlob
import javax.xml.bind.JAXBElement
import org.w3c.dom.Document
+import tech.libeufin.schema.ebics_s001.SignatureTypes
import java.security.SecureRandom
import java.util.*
import java.util.zip.InflaterInputStream
@@ -514,10 +512,10 @@ fun main() {
dataTransfer =
EbicsUnsecuredRequest.UnsecuredDataTransfer().apply {
orderData =
EbicsUnsecuredRequest.OrderData().apply {
value = EbicsOrderUtil.encodeOrderDataXml(
- SignaturePubKeyOrderData().apply {
- signaturePubKeyInfo =
SignaturePubKeyInfoType().apply {
+
SignatureTypes.SignaturePubKeyOrderData().apply {
+ signaturePubKeyInfo =
SignatureTypes.SignaturePubKeyInfoType().apply {
signatureVersion = "A006"
- pubKeyValue =
PubKeyValueType().apply {
+ pubKeyValue =
SignatureTypes.PubKeyValueType().apply {
rsaKeyValue =
org.apache.xml.security.binding.xmldsig.RSAKeyValueType().apply {
exponent =
tmpKey.publicExponent.toByteArray()
modulus =
tmpKey.modulus.toByteArray()
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt
index 5843356..3d09983 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt
@@ -25,11 +25,10 @@ import java.math.BigInteger
import java.security.KeyFactory
import java.security.KeyPairGenerator
import java.security.MessageDigest
+import java.security.Signature
import java.security.interfaces.RSAPrivateCrtKey
import java.security.interfaces.RSAPublicKey
-import java.security.spec.PKCS8EncodedKeySpec
-import java.security.spec.RSAPublicKeySpec
-import java.security.spec.X509EncodedKeySpec
+import java.security.spec.*
import javax.crypto.Cipher
import javax.crypto.KeyGenerator
import javax.crypto.spec.IvParameterSpec
@@ -165,4 +164,20 @@ object CryptoUtil {
val data = symmetricCipher.doFinal(encryptedData)
return data
}
+
+ fun signEbicsA006(data: ByteArray, privateKey: RSAPrivateCrtKey):
ByteArray {
+ val signature = Signature.getInstance("SHA256withRSA/PSS",
bouncyCastleProvider)
+ signature.setParameter(PSSParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA256, 32, 1))
+ signature.initSign(privateKey)
+ signature.update(data)
+ return signature.sign()
+ }
+
+ fun verifyEbicsA006(sig: ByteArray, data: ByteArray, publicKey:
RSAPublicKey): Boolean {
+ val signature = Signature.getInstance("SHA256withRSA/PSS",
bouncyCastleProvider)
+ signature.setParameter(PSSParameterSpec("SHA-256", "MGF1",
MGF1ParameterSpec.SHA256, 32, 1))
+ signature.initVerify(publicKey)
+ signature.update(data)
+ return signature.verify(sig)
+ }
}
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
index 9de8119..4b90592 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
@@ -34,6 +34,7 @@ import tech.libeufin.schema.ebics_h004.*
import tech.libeufin.schema.ebics_hev.HEVResponse
import tech.libeufin.schema.ebics_hev.SystemReturnCodeType
import tech.libeufin.schema.ebics_s001.SignatureTypes
+import tech.libeufin.schema.ebics_s001.UserSignatureData
import java.security.interfaces.RSAPrivateCrtKey
import java.util.*
import java.util.zip.DeflaterInputStream
@@ -603,6 +604,10 @@ suspend fun ApplicationCall.ebicsweb() {
}
//val sigDataObject =
XMLUtil.convertStringToJaxb<OrderSignatureData>(plainSigData)
println("signature data:
${plainSigData.toString(Charsets.UTF_8)}")
+
+ val sig =
XMLUtil.convertStringToJaxb<UserSignatureData>(plainSigData.toString(Charsets.UTF_8))
+ val sigVal =
sig.value.orderSignatureList?.get(0)?.signatureValue
+
println("creating upload transaction for
transactionID $transactionID")
EbicsUploadTransactionEntity.new(transactionID) {
this.host = ebicsHost
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt
index bdd1e66..615bf1f 100644
---
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt
@@ -1,11 +1,27 @@
package tech.libeufin.schema.ebics_s001
-import javax.xml.bind.annotation.XmlAccessType
-import javax.xml.bind.annotation.XmlAccessorType
-import javax.xml.bind.annotation.XmlRootElement
+import javax.xml.bind.annotation.*
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "UserSignatureData")
+@XmlType(name = "", propOrder = ["orderSignatureList"])
class UserSignatureData {
+ @XmlElement(name = "OrderSignature", type = OrderSignatureData::class)
+ var orderSignatureList: List<OrderSignatureData>? = null
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["signatureVersion", "signatureValue",
"partnerID", "customerID"])
+ class OrderSignatureData {
+ @XmlElement(name = "SignatureVersion")
+ lateinit var signatureVersion: String
+
+ @XmlElement(name = "SignatureValue")
+ lateinit var signatureValue: ByteArray
+
+ @XmlElement(name = "PartnerID")
+ lateinit var partnerID: String
+
+ @XmlElement(name = "CustomerID")
+ lateinit var customerID: String
+ }
}
\ No newline at end of file
diff --git a/sandbox/src/test/kotlin/CryptoUtilTest.kt
b/sandbox/src/test/kotlin/CryptoUtilTest.kt
index 0846836..c34f4b7 100644
--- a/sandbox/src/test/kotlin/CryptoUtilTest.kt
+++ b/sandbox/src/test/kotlin/CryptoUtilTest.kt
@@ -66,4 +66,12 @@ class CryptoUtilTest {
val dec = CryptoUtil.decryptEbicsE002(enc, keyPair.private)
assertTrue(data.contentEquals(dec))
}
+
+ @Test
+ fun testEbicsE006() {
+ val keyPair = CryptoUtil.generateRsaKeyPair(1024)
+ val data = "Hello, World".toByteArray(Charsets.UTF_8)
+ val sig = CryptoUtil.signEbicsA006(data, keyPair.private)
+ assertTrue(CryptoUtil.verifyEbicsA006(sig, data, keyPair.public))
+ }
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
address@hidden.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libeufin] branch master updated: EBICS VEU crypto WIP,
gnunet <=