trussed_auth/
request.rs

1// Copyright (C) Nitrokey GmbH
2// SPDX-License-Identifier: Apache-2.0 or MIT
3
4use serde::{Deserialize, Serialize};
5use trussed_core::types::{KeyId, Message};
6
7use super::AuthRequest;
8use crate::{Pin, PinId};
9
10#[derive(Debug, Deserialize, Serialize)]
11pub struct HasPin {
12    pub id: PinId,
13}
14
15impl From<HasPin> for AuthRequest {
16    fn from(request: HasPin) -> Self {
17        Self::HasPin(request)
18    }
19}
20
21#[derive(Debug, Deserialize, Serialize)]
22pub struct CheckPin {
23    pub id: PinId,
24    pub pin: Pin,
25}
26
27impl From<CheckPin> for AuthRequest {
28    fn from(request: CheckPin) -> Self {
29        Self::CheckPin(request)
30    }
31}
32
33#[derive(Debug, Deserialize, Serialize)]
34pub struct GetPinKey {
35    pub id: PinId,
36    pub pin: Pin,
37}
38
39impl From<GetPinKey> for AuthRequest {
40    fn from(request: GetPinKey) -> Self {
41        Self::GetPinKey(request)
42    }
43}
44
45#[derive(Debug, Deserialize, Serialize)]
46pub struct GetApplicationKey {
47    pub info: Message,
48}
49
50impl From<GetApplicationKey> for AuthRequest {
51    fn from(request: GetApplicationKey) -> Self {
52        Self::GetApplicationKey(request)
53    }
54}
55
56#[derive(Debug, Deserialize, Serialize)]
57pub struct SetPin {
58    pub id: PinId,
59    pub pin: Pin,
60    pub retries: Option<u8>,
61    /// If true, the PIN can be used to wrap/unwrap a PIN key
62    pub derive_key: bool,
63}
64
65impl From<SetPin> for AuthRequest {
66    fn from(request: SetPin) -> Self {
67        Self::SetPin(request)
68    }
69}
70
71#[derive(Debug, Deserialize, Serialize)]
72pub struct SetPinWithKey {
73    pub id: PinId,
74    pub pin: Pin,
75    pub retries: Option<u8>,
76    /// This key will be wrapped. It can be obtained again via a `GetPinKey` request
77    pub key: KeyId,
78}
79
80impl From<SetPinWithKey> for AuthRequest {
81    fn from(request: SetPinWithKey) -> Self {
82        Self::SetPinWithKey(request)
83    }
84}
85
86#[derive(Debug, Deserialize, Serialize)]
87pub struct ChangePin {
88    pub id: PinId,
89    pub old_pin: Pin,
90    pub new_pin: Pin,
91}
92
93impl From<ChangePin> for AuthRequest {
94    fn from(request: ChangePin) -> Self {
95        Self::ChangePin(request)
96    }
97}
98
99#[derive(Debug, Deserialize, Serialize)]
100pub struct DeletePin {
101    pub id: PinId,
102}
103
104impl From<DeletePin> for AuthRequest {
105    fn from(request: DeletePin) -> Self {
106        Self::DeletePin(request)
107    }
108}
109
110#[derive(Debug, Deserialize, Serialize)]
111pub struct DeleteAllPins;
112
113impl From<DeleteAllPins> for AuthRequest {
114    fn from(request: DeleteAllPins) -> Self {
115        Self::DeleteAllPins(request)
116    }
117}
118
119#[derive(Debug, Deserialize, Serialize)]
120pub struct PinRetries {
121    pub id: PinId,
122}
123
124impl From<PinRetries> for AuthRequest {
125    fn from(request: PinRetries) -> Self {
126        Self::PinRetries(request)
127    }
128}
129
130#[derive(Debug, Deserialize, Serialize)]
131pub struct ResetAppKeys;
132
133impl From<ResetAppKeys> for AuthRequest {
134    fn from(request: ResetAppKeys) -> Self {
135        Self::ResetAppKeys(request)
136    }
137}
138
139#[derive(Debug, Deserialize, Serialize)]
140pub struct ResetAuthData;
141
142impl From<ResetAuthData> for AuthRequest {
143    fn from(request: ResetAuthData) -> Self {
144        Self::ResetAuthData(request)
145    }
146}