From 8a3e4faf9c56c2066a2ff9b5dadbd6f95469c27f Mon Sep 17 00:00:00 2001 From: sstone Date: Fri, 2 Apr 2021 14:36:08 +0200 Subject: [PATCH 1/3] Make signing payment requests faster There was a much more efficient method to compute the pukey recovery id that was not used. --- .../src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala b/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala index 8bec3b09a4..4d179b68ba 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala @@ -108,7 +108,7 @@ case class PaymentRequest(prefix: String, amount: Option[MilliSatoshi], timestam */ def sign(priv: PrivateKey): PaymentRequest = { val sig64 = Crypto.sign(hash, priv) - val (pub1, _) = Crypto.recoverPublicKey(sig64, hash) + val pub1 = Crypto.recoverPublicKey(sig64, hash, 0.toByte) val recid = if (nodeId == pub1) 0.toByte else 1.toByte val signature = sig64 :+ recid this.copy(signature = signature) From e8d35ba14dca2a8c98702c72979625e278a47cb5 Mon Sep 17 00:00:00 2001 From: Fabrice Drouin Date: Fri, 2 Apr 2021 14:57:58 +0200 Subject: [PATCH 2/3] Update eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala Co-authored-by: Pierre-Marie Padiou --- .../main/scala/fr/acinq/eclair/payment/PaymentRequest.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala b/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala index 4d179b68ba..113ceb1fa1 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala @@ -108,7 +108,8 @@ case class PaymentRequest(prefix: String, amount: Option[MilliSatoshi], timestam */ def sign(priv: PrivateKey): PaymentRequest = { val sig64 = Crypto.sign(hash, priv) - val pub1 = Crypto.recoverPublicKey(sig64, hash, 0.toByte) + // in order to tell what the recovery id is, we actually recover the pubkey ourselves and compare it to the real one + val pub0 = Crypto.recoverPublicKey(sig64, hash, 0.toByte) val recid = if (nodeId == pub1) 0.toByte else 1.toByte val signature = sig64 :+ recid this.copy(signature = signature) @@ -574,4 +575,3 @@ object PaymentRequest { Bech32.encode(hrp, int5s.toArray) } } - From 9a296ae8c7ce5429ab7f029a2275b7bc410ca9cb Mon Sep 17 00:00:00 2001 From: sstone Date: Fri, 2 Apr 2021 15:30:52 +0200 Subject: [PATCH 3/3] fix review code --- .../src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala b/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala index 113ceb1fa1..70de0216d5 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentRequest.scala @@ -110,7 +110,7 @@ case class PaymentRequest(prefix: String, amount: Option[MilliSatoshi], timestam val sig64 = Crypto.sign(hash, priv) // in order to tell what the recovery id is, we actually recover the pubkey ourselves and compare it to the real one val pub0 = Crypto.recoverPublicKey(sig64, hash, 0.toByte) - val recid = if (nodeId == pub1) 0.toByte else 1.toByte + val recid = if (nodeId == pub0) 0.toByte else 1.toByte val signature = sig64 :+ recid this.copy(signature = signature) }