gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] branch master updated: Backup/restore keys using base64.


From: gnunet
Subject: [libeufin] branch master updated: Backup/restore keys using base64.
Date: Wed, 29 Jan 2020 15:47:36 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new c207d93  Backup/restore keys using base64.
c207d93 is described below

commit c207d9340e3ab75f2706c5fdceb03640aec6f0b2
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Jan 29 15:47:08 2020 +0100

    Backup/restore keys using base64.
---
 nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt |  6 ++--
 nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt | 41 +++++------------------
 util/src/main/kotlin/hex.kt                       |  7 ----
 util/src/main/kotlin/strings.kt                   | 16 +++++++++
 4 files changed, 28 insertions(+), 42 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt
index 6eb65ba..9cd9651 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/JSON.kt
@@ -22,9 +22,9 @@ data class EbicsDateRange(
  * the client must provide the passphrase.
  */
 data class EbicsKeysBackup(
-    val authBlob: ByteArray,
-    val encBlob: ByteArray,
-    val sigBlob: ByteArray,
+    val authBlob: String,
+    val encBlob: String,
+    val sigBlob: String,
     val passphrase: String? = null
 )
 
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
index 1439754..44bcc48 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
@@ -453,7 +453,6 @@ fun main() {
             }
 
             get("/ebics/subscribers") {
-
                 var ret = EbicsSubscribersResponse()
                 transaction {
                     EbicsSubscriberEntity.all().forEach {
@@ -534,7 +533,6 @@ fun main() {
                     call.respond(NexusError("Could not store the new account 
into database"))
                     return@post
                 }
-
                 call.respondText(
                     "Subscriber registered, ID: ${row.id.value}",
                     ContentType.Text.Plain,
@@ -575,13 +573,13 @@ fun main() {
                 val (authKey, encKey, sigKey) = try {
                     Triple(
                         CryptoUtil.decryptKey(
-                            EncryptedPrivateKeyInfo(body.authBlob), 
body.passphrase!!
+                            
EncryptedPrivateKeyInfo(base64ToBytes(body.authBlob)), body.passphrase!!
                         ),
                         CryptoUtil.decryptKey(
-                            EncryptedPrivateKeyInfo(body.encBlob), 
body.passphrase
+                            
EncryptedPrivateKeyInfo(base64ToBytes(body.encBlob)), body.passphrase
                         ),
                         CryptoUtil.decryptKey(
-                            EncryptedPrivateKeyInfo(body.sigBlob), 
body.passphrase
+                            
EncryptedPrivateKeyInfo(base64ToBytes(body.sigBlob)), body.passphrase
                         )
                     )
                 } catch (e: Exception) {
@@ -606,24 +604,23 @@ fun main() {
 
                 val id = expectId(call.parameters["id"])
                 val body = call.receive<EbicsBackupRequest>()
-
                 val content = transaction {
                     val subscriber = EbicsSubscriberEntity.findById(id) ?: 
throw SubscriberNotFoundError(
                         HttpStatusCode.NotFound
                     )
                     EbicsKeysBackup(
-                        authBlob = CryptoUtil.encryptKey(
+                        authBlob = bytesToBase64(CryptoUtil.encryptKey(
                             subscriber.authenticationPrivateKey.toByteArray(),
                             body.passphrase
-                        ),
-                        encBlob = CryptoUtil.encryptKey(
+                        )),
+                        encBlob = bytesToBase64(CryptoUtil.encryptKey(
                             subscriber.encryptionPrivateKey.toByteArray(),
                             body.passphrase
-                        ),
-                        sigBlob = CryptoUtil.encryptKey(
+                        )),
+                        sigBlob = bytesToBase64(CryptoUtil.encryptKey(
                             subscriber.signaturePrivateKey.toByteArray(),
                             body.passphrase
-                        )
+                        ))
                     )
                 }
                 call.response.headers.append("Content-Disposition", 
"attachment")
@@ -654,8 +651,6 @@ fun main() {
                     )
                     return@post
                 }
-
-
                 val usd_encrypted = CryptoUtil.encryptEbicsE002(
                     EbicsOrderUtil.encodeOrderDataXml(
 
@@ -668,7 +663,6 @@ fun main() {
                     ),
                     subscriberData.bankEncPub!!
                 )
-
                 val response = client.postToBankSignedAndVerify<EbicsRequest, 
EbicsResponse>(
                     subscriberData.ebicsUrl,
                     createUploadInitializationPhase(
@@ -679,43 +673,35 @@ fun main() {
                     subscriberData.bankAuthPub!!,
                     subscriberData.customerEncPriv
                 )
-
                 if (response.value.body.returnCode.value != "000000") {
                     throw EbicsError(response.value.body.returnCode.value)
                 }
-
                 logger.debug("INIT phase passed!")
-
                 /* now send actual payload */
                 val compressedInnerPayload = DeflaterInputStream(
                     payload.toByteArray().inputStream()
 
                 ).use { it.readAllBytes() }
-
                 val encryptedPayload = 
CryptoUtil.encryptEbicsE002withTransactionKey(
                     compressedInnerPayload,
                     subscriberData.bankEncPub!!,
                     usd_encrypted.plainTransactionKey!!
                 )
-
                 val tmp = EbicsRequest.createForUploadTransferPhase(
                     subscriberData.hostId,
                     response.value.header._static.transactionID!!,
                     BigInteger.ONE,
                     encryptedPayload.encryptedData
                 )
-
                 val responseTransaction = 
client.postToBankSignedAndVerify<EbicsRequest, EbicsResponse>(
                     subscriberData.ebicsUrl,
                     tmp,
                     subscriberData.bankAuthPub!!,
                     subscriberData.customerAuthPriv
                 )
-
                 if (responseTransaction.value.body.returnCode.value != 
"000000") {
                     throw EbicsError(response.value.body.returnCode.value)
                 }
-
                 call.respondText(
                     "TST INITIALIZATION & TRANSACTION phases succeeded\n",
                     ContentType.Text.Plain,
@@ -744,24 +730,20 @@ fun main() {
                     ),
                     bundle.customerAuthPriv
                 )
-
                 if (response.value.body.returnCode.value != "000000") {
                     throw EbicsError(response.value.body.returnCode.value)
                 }
-
                 val er = CryptoUtil.EncryptionResult(
                     
response.value.body.dataTransfer!!.dataEncryptionInfo!!.transactionKey,
                     (response.value.body.dataTransfer!!.dataEncryptionInfo as 
EbicsTypes.DataEncryptionInfo)
                         .encryptionPubKeyDigest.value,
                     response.value.body.dataTransfer!!.orderData.value
                 )
-
                 val dataCompr = CryptoUtil.decryptEbicsE002(
                     er,
                     bundle.customerEncPriv
                 )
                 val data = 
EbicsOrderUtil.decodeOrderDataXml<HPBResponseOrderData>(dataCompr)
-
                 // put bank's keys into database.
                 transaction {
                     val subscriber = EbicsSubscriberEntity.findById(id)
@@ -773,7 +755,6 @@ fun main() {
                             
data.authenticationPubKeyInfo.pubKeyValue.rsaKeyValue.exponent
                         ).encoded
                     )
-
                     subscriber.bankEncryptionPublicKey = SerialBlob(
                         CryptoUtil.loadRsaPublicKeyFromComponents(
                             
data.encryptionPubKeyInfo.pubKeyValue.rsaKeyValue.modulus,
@@ -798,7 +779,6 @@ fun main() {
                             )
                     )
                 }
-
                 val responseJaxb = 
client.postToBankUnsigned<EbicsUnsecuredRequest, EbicsKeyManagementResponse>(
                     subscriberData.ebicsUrl,
                     EbicsUnsecuredRequest.createHia(
@@ -809,17 +789,14 @@ fun main() {
                         subscriberData.customerEncPriv
                     )
                 )
-
                 if (responseJaxb.value.body.returnCode.value != "000000") {
                     throw EbicsError(responseJaxb.value.body.returnCode.value)
                 }
-
                 call.respondText(
                     "Bank accepted authentication and encryption keys\n",
                     ContentType.Text.Plain,
                     HttpStatusCode.OK
                 )
-
                 return@post
             }
         }
diff --git a/util/src/main/kotlin/hex.kt b/util/src/main/kotlin/hex.kt
deleted file mode 100644
index b14d730..0000000
--- a/util/src/main/kotlin/hex.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package tech.libeufin.util
-
-fun ByteArray.toHexString() : String {
-    return this.joinToString("") {
-        java.lang.String.format("%02x", it)
-    }
-}
diff --git a/util/src/main/kotlin/strings.kt b/util/src/main/kotlin/strings.kt
new file mode 100644
index 0000000..6fdcfd3
--- /dev/null
+++ b/util/src/main/kotlin/strings.kt
@@ -0,0 +1,16 @@
+package tech.libeufin.util
+import java.util.*
+
+fun ByteArray.toHexString() : String {
+    return this.joinToString("") {
+        java.lang.String.format("%02x", it)
+    }
+}
+
+fun bytesToBase64(bytes: ByteArray): String {
+    return Base64.getEncoder().encodeToString(bytes)
+}
+
+fun base64ToBytes(encoding: String): ByteArray {
+    return Base64.getDecoder().decode(encoding)
+}

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]