jose_jwk/key/
ec.rs

1// SPDX-FileCopyrightText: 2022 Profian Inc. <opensource@profian.com>
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3
4//! JWK elliptic-curve key material.
5
6use serde::{Deserialize, Serialize};
7
8use jose_b64::serde::{Bytes, Secret};
9
10/// An elliptic-curve key.
11#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
12pub struct Ec {
13    /// The elliptic curve identifier.
14    pub crv: EcCurves,
15
16    /// The public x coordinate.
17    pub x: Bytes,
18
19    /// The public y coordinate.
20    pub y: Bytes,
21
22    /// The private key.
23    #[serde(skip_serializing_if = "Option::is_none", default)]
24    pub d: Option<Secret>,
25}
26
27/// The elliptic curve.
28#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
29#[non_exhaustive]
30pub enum EcCurves {
31    /// P-256
32    #[serde(rename = "P-256")]
33    P256,
34
35    /// P-384
36    #[serde(rename = "P-384")]
37    P384,
38
39    /// P-521
40    #[serde(rename = "P-521")]
41    P521,
42
43    /// P-256K
44    #[serde(rename = "secp256k1")]
45    P256K,
46}