From 667e41d4ecbb140b6495c70698716bf5fc02680b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Wed, 8 Mar 2023 13:56:27 +0000 Subject: [PATCH] moved 'message_type' from 'ContractMessageContent' to 'SignableMessage' --- .../contracts-common/src/signing/mod.rs | 25 +++++++++++++------ .../contracts-common/src/signing/verifier.rs | 4 +-- contracts/mixnet/src/support/tests/mod.rs | 4 +-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/common/cosmwasm-smart-contracts/contracts-common/src/signing/mod.rs b/common/cosmwasm-smart-contracts/contracts-common/src/signing/mod.rs index 1abf94457d..206152957b 100644 --- a/common/cosmwasm-smart-contracts/contracts-common/src/signing/mod.rs +++ b/common/cosmwasm-smart-contracts/contracts-common/src/signing/mod.rs @@ -98,7 +98,7 @@ pub trait SigningPurpose { fn message_type() -> MessageType; } -#[derive(Serialize)] +#[derive(Serialize, Deserialize)] #[serde(transparent)] pub struct MessageType(String); @@ -137,15 +137,20 @@ impl SigningAlgorithm { pub struct SignableMessage { pub nonce: u32, pub algorithm: SigningAlgorithm, + pub message_type: MessageType, pub content: T, } -impl SignableMessage { +impl SignableMessage +where + T: SigningPurpose, +{ pub fn new(nonce: u32, content: T) -> Self { SignableMessage { nonce, algorithm: SigningAlgorithm::Ed25519, + message_type: T::message_type(), content, } } @@ -162,7 +167,10 @@ impl SignableMessage { to_vec(self) } - pub fn to_sha256_plaintext_digest(&self) -> StdResult> { + pub fn to_sha256_plaintext_digest(&self) -> StdResult> + where + T: Serialize, + { unimplemented!() } @@ -209,20 +217,24 @@ impl SignableMessage { #[derive(Serialize)] pub struct ContractMessageContent { - pub message_type: MessageType, pub sender: Addr, pub proxy: Option, pub funds: Vec, pub data: T, } -impl ContractMessageContent +impl SigningPurpose for ContractMessageContent where T: SigningPurpose, { + fn message_type() -> MessageType { + T::message_type() + } +} + +impl ContractMessageContent { pub fn new(sender: Addr, proxy: Option, funds: Vec, data: T) -> Self { ContractMessageContent { - message_type: T::message_type(), sender, proxy, funds, @@ -238,7 +250,6 @@ where }; ContractMessageContent { - message_type: T::message_type(), sender: signer, proxy, funds: info.funds, diff --git a/common/cosmwasm-smart-contracts/contracts-common/src/signing/verifier.rs b/common/cosmwasm-smart-contracts/contracts-common/src/signing/verifier.rs index 3bb82ccb5c..6663703d42 100644 --- a/common/cosmwasm-smart-contracts/contracts-common/src/signing/verifier.rs +++ b/common/cosmwasm-smart-contracts/contracts-common/src/signing/verifier.rs @@ -1,7 +1,7 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::signing::{MessageSignature, SignableMessage, SigningAlgorithm}; +use crate::signing::{MessageSignature, SignableMessage, SigningAlgorithm, SigningPurpose}; use cosmwasm_std::{Api, StdError, VerificationError}; use serde::Serialize; use thiserror::Error; @@ -9,7 +9,7 @@ use thiserror::Error; pub trait Verifier { type Error: From; - fn verify_message( + fn verify_message( &self, message: SignableMessage, signature: MessageSignature, diff --git a/contracts/mixnet/src/support/tests/mod.rs b/contracts/mixnet/src/support/tests/mod.rs index 26b9639a05..71a2d96437 100644 --- a/contracts/mixnet/src/support/tests/mod.rs +++ b/contracts/mixnet/src/support/tests/mod.rs @@ -67,7 +67,7 @@ pub mod test_helpers { SignableMixNodeBondingMsg, }; use nym_contracts_common::signing::{ - ContractMessageContent, MessageSignature, SignableMessage, SigningAlgorithm, + ContractMessageContent, MessageSignature, SignableMessage, SigningAlgorithm, SigningPurpose, }; use nym_crypto::asymmetric::identity; use nym_crypto::asymmetric::identity::KeyPair; @@ -860,7 +860,7 @@ pub mod test_helpers { } } - pub fn ed25519_sign_message( + pub fn ed25519_sign_message( message: SignableMessage, private_key: &identity::PrivateKey, ) -> MessageSignature {