nym_noise_keys/
lib.rs

1// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
2// SPDX-License-Identifier: GPL-3.0-only
3
4use nym_crypto::asymmetric::x25519;
5use nym_crypto::asymmetric::x25519::serde_helpers::bs58_x25519_pubkey;
6use serde::{Deserialize, Serialize};
7
8#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq)]
9#[serde(from = "u8", into = "u8")]
10pub enum NoiseVersion {
11    V1,
12    Unknown(u8), //Implies a newer version we don't know
13}
14
15impl From<u8> for NoiseVersion {
16    fn from(value: u8) -> Self {
17        match value {
18            1 => NoiseVersion::V1,
19            other => NoiseVersion::Unknown(other),
20        }
21    }
22}
23
24impl From<NoiseVersion> for u8 {
25    fn from(version: NoiseVersion) -> Self {
26        match version {
27            NoiseVersion::V1 => 1,
28            NoiseVersion::Unknown(other) => other,
29        }
30    }
31}
32
33#[derive(Copy, Clone, Debug, Serialize, Deserialize, schemars::JsonSchema, utoipa::ToSchema)]
34pub struct VersionedNoiseKey {
35    #[schemars(with = "u8")]
36    #[schema(value_type = u8)]
37    pub supported_version: NoiseVersion,
38
39    #[schemars(with = "String")]
40    #[serde(with = "bs58_x25519_pubkey")]
41    #[schema(value_type = String)]
42    pub x25519_pubkey: x25519::PublicKey,
43}