From c75feffbdb06113274a9a25b31501618a37f4e0f Mon Sep 17 00:00:00 2001
From: librelois <c@elo.tf>
Date: Wed, 17 Mar 2021 17:33:20 +0100
Subject: [PATCH] =?UTF-8?q?[feat]=20gva:bca:=C2=A0add=20req=20ProofServerP?=
 =?UTF-8?q?ubkey?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 rust-libs/modules/gva/bca/src/exec_req_type.rs | 10 ++++++++++
 rust-libs/modules/gva/bca/src/lib.rs           |  2 +-
 rust-libs/modules/gva/bca/types/src/lib.rs     |  8 +++++++-
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/rust-libs/modules/gva/bca/src/exec_req_type.rs b/rust-libs/modules/gva/bca/src/exec_req_type.rs
index ea3a3a193..3134f3d3e 100644
--- a/rust-libs/modules/gva/bca/src/exec_req_type.rs
+++ b/rust-libs/modules/gva/bca/src/exec_req_type.rs
@@ -16,6 +16,8 @@
 mod members_count;
 mod prepare_simple_payment;
 
+use dubp::crypto::keys::KeyPair;
+
 use crate::*;
 
 #[derive(Debug, PartialEq)]
@@ -40,6 +42,14 @@ pub(super) async fn execute_req_type(
         BcaReqTypeV0::PrepareSimplePayment(params) => {
             prepare_simple_payment::exec_req_prepare_simple_payment(bca_executor, params).await
         }
+        BcaReqTypeV0::ProofServerPubkey { challenge } => Ok(BcaRespTypeV0::ProofServerPubkey {
+            challenge,
+            server_pubkey: bca_executor.self_keypair.public_key(),
+            sig: bca_executor
+                .self_keypair
+                .generate_signator()
+                .sign(&challenge),
+        }),
         BcaReqTypeV0::Ping => Ok(BcaRespTypeV0::Pong),
     }
 }
diff --git a/rust-libs/modules/gva/bca/src/lib.rs b/rust-libs/modules/gva/bca/src/lib.rs
index 45119cfdc..414872e77 100644
--- a/rust-libs/modules/gva/bca/src/lib.rs
+++ b/rust-libs/modules/gva/bca/src/lib.rs
@@ -32,7 +32,7 @@ use crate::exec_req_type::ExecReqTypeError;
 use crate::utils::AsyncReader;
 use async_bincode::AsyncBincodeReader;
 use bincode::Options as _;
-use dubp::crypto::keys::ed25519::Ed25519KeyPair;
+use dubp::crypto::keys::{ed25519::Ed25519KeyPair, Signator};
 use duniter_bca_types::{BcaReq, BcaReqTypeV0, BcaResp, BcaRespTypeV0, BcaRespV0, ReqExecError};
 use duniter_dbs::{FileBackend, SharedDbs};
 use futures::{prelude::stream::FuturesUnordered, StreamExt, TryStream, TryStreamExt};
diff --git a/rust-libs/modules/gva/bca/types/src/lib.rs b/rust-libs/modules/gva/bca/types/src/lib.rs
index b9cef49b3..7b870f839 100644
--- a/rust-libs/modules/gva/bca/types/src/lib.rs
+++ b/rust-libs/modules/gva/bca/types/src/lib.rs
@@ -26,7 +26,7 @@ pub mod prepare_payment;
 
 use crate::prepare_payment::{PrepareSimplePayment, PrepareSimplePaymentResp};
 use dubp::crypto::hashs::Hash;
-use dubp::crypto::keys::ed25519::PublicKey;
+use dubp::crypto::keys::ed25519::{PublicKey, Signature};
 use dubp::wallet::prelude::*;
 use serde::{Deserialize, Serialize};
 //use smallvec::SmallVec;
@@ -47,6 +47,7 @@ pub struct BcaReqV0 {
 pub enum BcaReqTypeV0 {
     MembersCount,
     PrepareSimplePayment(PrepareSimplePayment),
+    ProofServerPubkey { challenge: [u8; 16] },
     Ping,
 }
 
@@ -65,6 +66,11 @@ pub struct BcaRespV0 {
 #[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]
 pub enum BcaRespTypeV0 {
     Error(String),
+    ProofServerPubkey {
+        challenge: [u8; 16],
+        server_pubkey: PublicKey,
+        sig: Signature,
+    },
     MembersCount(u64),
     PrepareSimplePayment(PrepareSimplePaymentResp),
     Pong,
-- 
GitLab