1*e582193eSAndroid Build Coastguard Worker /*
2*e582193eSAndroid Build Coastguard Worker * Copyright 2015 The Android Open Source Project
3*e582193eSAndroid Build Coastguard Worker *
4*e582193eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*e582193eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*e582193eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*e582193eSAndroid Build Coastguard Worker *
8*e582193eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*e582193eSAndroid Build Coastguard Worker *
10*e582193eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*e582193eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*e582193eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e582193eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*e582193eSAndroid Build Coastguard Worker * limitations under the License.
15*e582193eSAndroid Build Coastguard Worker *
16*e582193eSAndroid Build Coastguard Worker */
17*e582193eSAndroid Build Coastguard Worker
18*e582193eSAndroid Build Coastguard Worker #include <gatekeeper/gatekeeper_messages.h>
19*e582193eSAndroid Build Coastguard Worker
20*e582193eSAndroid Build Coastguard Worker #include <string.h>
21*e582193eSAndroid Build Coastguard Worker
22*e582193eSAndroid Build Coastguard Worker namespace gatekeeper {
23*e582193eSAndroid Build Coastguard Worker
24*e582193eSAndroid Build Coastguard Worker /**
25*e582193eSAndroid Build Coastguard Worker * Methods for serializing/deserializing SizedBuffers
26*e582193eSAndroid Build Coastguard Worker */
27*e582193eSAndroid Build Coastguard Worker
28*e582193eSAndroid Build Coastguard Worker struct __attribute__((__packed__)) serial_header_t {
29*e582193eSAndroid Build Coastguard Worker uint32_t error;
30*e582193eSAndroid Build Coastguard Worker uint32_t user_id;
31*e582193eSAndroid Build Coastguard Worker };
32*e582193eSAndroid Build Coastguard Worker
fitsBuffer(const uint8_t * begin,const uint8_t * end,uint32_t field_size)33*e582193eSAndroid Build Coastguard Worker static inline bool fitsBuffer(const uint8_t* begin, const uint8_t* end, uint32_t field_size) {
34*e582193eSAndroid Build Coastguard Worker uintptr_t dummy;
35*e582193eSAndroid Build Coastguard Worker return !__builtin_add_overflow(reinterpret_cast<uintptr_t>(begin), field_size, &dummy)
36*e582193eSAndroid Build Coastguard Worker && dummy <= reinterpret_cast<uintptr_t>(end);
37*e582193eSAndroid Build Coastguard Worker }
38*e582193eSAndroid Build Coastguard Worker
serialized_buffer_size(const SizedBuffer & buf)39*e582193eSAndroid Build Coastguard Worker static inline uint32_t serialized_buffer_size(const SizedBuffer &buf) {
40*e582193eSAndroid Build Coastguard Worker return sizeof(decltype(buf.size())) + buf.size();
41*e582193eSAndroid Build Coastguard Worker }
42*e582193eSAndroid Build Coastguard Worker
append_to_buffer(uint8_t ** buffer,const SizedBuffer & to_append)43*e582193eSAndroid Build Coastguard Worker static inline void append_to_buffer(uint8_t **buffer, const SizedBuffer &to_append) {
44*e582193eSAndroid Build Coastguard Worker uint32_t length = to_append.size();
45*e582193eSAndroid Build Coastguard Worker memcpy(*buffer, &length, sizeof(length));
46*e582193eSAndroid Build Coastguard Worker *buffer += sizeof(length);
47*e582193eSAndroid Build Coastguard Worker if (length != 0 && to_append.Data<uint8_t>() != nullptr) {
48*e582193eSAndroid Build Coastguard Worker memcpy(*buffer, to_append.Data<uint8_t>(), length);
49*e582193eSAndroid Build Coastguard Worker *buffer += length;
50*e582193eSAndroid Build Coastguard Worker }
51*e582193eSAndroid Build Coastguard Worker }
52*e582193eSAndroid Build Coastguard Worker
readError(uint32_t code)53*e582193eSAndroid Build Coastguard Worker static inline gatekeeper_error_t readError(uint32_t code) {
54*e582193eSAndroid Build Coastguard Worker switch (code) {
55*e582193eSAndroid Build Coastguard Worker case ERROR_NONE:
56*e582193eSAndroid Build Coastguard Worker return ERROR_NONE;
57*e582193eSAndroid Build Coastguard Worker case ERROR_INVALID:
58*e582193eSAndroid Build Coastguard Worker return ERROR_INVALID;
59*e582193eSAndroid Build Coastguard Worker case ERROR_RETRY:
60*e582193eSAndroid Build Coastguard Worker return ERROR_RETRY;
61*e582193eSAndroid Build Coastguard Worker case ERROR_MEMORY_ALLOCATION_FAILED:
62*e582193eSAndroid Build Coastguard Worker return ERROR_MEMORY_ALLOCATION_FAILED;
63*e582193eSAndroid Build Coastguard Worker case ERROR_UNKNOWN:
64*e582193eSAndroid Build Coastguard Worker default:
65*e582193eSAndroid Build Coastguard Worker return ERROR_UNKNOWN;
66*e582193eSAndroid Build Coastguard Worker }
67*e582193eSAndroid Build Coastguard Worker }
68*e582193eSAndroid Build Coastguard Worker
read_from_buffer(const uint8_t ** buffer,const uint8_t * end,SizedBuffer * target)69*e582193eSAndroid Build Coastguard Worker static inline gatekeeper_error_t read_from_buffer(const uint8_t **buffer, const uint8_t *end,
70*e582193eSAndroid Build Coastguard Worker SizedBuffer *target) {
71*e582193eSAndroid Build Coastguard Worker if (target == nullptr) return ERROR_INVALID;
72*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(*buffer, end, sizeof(uint32_t))) return ERROR_INVALID;
73*e582193eSAndroid Build Coastguard Worker
74*e582193eSAndroid Build Coastguard Worker // read length from incomming buffer
75*e582193eSAndroid Build Coastguard Worker uint32_t length;
76*e582193eSAndroid Build Coastguard Worker memcpy(&length, *buffer, sizeof(length));
77*e582193eSAndroid Build Coastguard Worker // advance out buffer
78*e582193eSAndroid Build Coastguard Worker *buffer += sizeof(length);
79*e582193eSAndroid Build Coastguard Worker
80*e582193eSAndroid Build Coastguard Worker if (length == 0) {
81*e582193eSAndroid Build Coastguard Worker *target = {};
82*e582193eSAndroid Build Coastguard Worker } else {
83*e582193eSAndroid Build Coastguard Worker // sanitize incoming buffer size
84*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(*buffer, end, length)) return ERROR_INVALID;
85*e582193eSAndroid Build Coastguard Worker
86*e582193eSAndroid Build Coastguard Worker uint8_t *target_buffer = new(std::nothrow) uint8_t[length];
87*e582193eSAndroid Build Coastguard Worker if (target_buffer == nullptr) return ERROR_MEMORY_ALLOCATION_FAILED;
88*e582193eSAndroid Build Coastguard Worker
89*e582193eSAndroid Build Coastguard Worker memcpy(target_buffer, *buffer, length);
90*e582193eSAndroid Build Coastguard Worker *buffer += length;
91*e582193eSAndroid Build Coastguard Worker *target = { target_buffer, length };
92*e582193eSAndroid Build Coastguard Worker }
93*e582193eSAndroid Build Coastguard Worker return ERROR_NONE;
94*e582193eSAndroid Build Coastguard Worker }
95*e582193eSAndroid Build Coastguard Worker
96*e582193eSAndroid Build Coastguard Worker
GetSerializedSize() const97*e582193eSAndroid Build Coastguard Worker uint32_t GateKeeperMessage::GetSerializedSize() const {
98*e582193eSAndroid Build Coastguard Worker if (error == ERROR_NONE) {
99*e582193eSAndroid Build Coastguard Worker uint32_t size = sizeof(serial_header_t) + nonErrorSerializedSize();
100*e582193eSAndroid Build Coastguard Worker return size;
101*e582193eSAndroid Build Coastguard Worker } else {
102*e582193eSAndroid Build Coastguard Worker uint32_t size = sizeof(serial_header_t);
103*e582193eSAndroid Build Coastguard Worker if (error == ERROR_RETRY) {
104*e582193eSAndroid Build Coastguard Worker size += sizeof(retry_timeout);
105*e582193eSAndroid Build Coastguard Worker }
106*e582193eSAndroid Build Coastguard Worker return size;
107*e582193eSAndroid Build Coastguard Worker }
108*e582193eSAndroid Build Coastguard Worker }
109*e582193eSAndroid Build Coastguard Worker
Serialize(uint8_t * buffer,const uint8_t * end) const110*e582193eSAndroid Build Coastguard Worker uint32_t GateKeeperMessage::Serialize(uint8_t *buffer, const uint8_t *end) const {
111*e582193eSAndroid Build Coastguard Worker uint32_t bytes_written = 0;
112*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(buffer, end, GetSerializedSize())) {
113*e582193eSAndroid Build Coastguard Worker return 0;
114*e582193eSAndroid Build Coastguard Worker }
115*e582193eSAndroid Build Coastguard Worker
116*e582193eSAndroid Build Coastguard Worker serial_header_t *header = reinterpret_cast<serial_header_t *>(buffer);
117*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(buffer, end, sizeof(serial_header_t))) return 0;
118*e582193eSAndroid Build Coastguard Worker header->error = error;
119*e582193eSAndroid Build Coastguard Worker header->user_id = user_id;
120*e582193eSAndroid Build Coastguard Worker bytes_written += sizeof(*header);
121*e582193eSAndroid Build Coastguard Worker buffer += sizeof(*header);
122*e582193eSAndroid Build Coastguard Worker if (error == ERROR_RETRY) {
123*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(buffer, end, sizeof(retry_timeout))) return 0;
124*e582193eSAndroid Build Coastguard Worker memcpy(buffer, &retry_timeout, sizeof(retry_timeout));
125*e582193eSAndroid Build Coastguard Worker bytes_written += sizeof(retry_timeout);
126*e582193eSAndroid Build Coastguard Worker } else if (error == ERROR_NONE) {
127*e582193eSAndroid Build Coastguard Worker uint32_t serialized_size = nonErrorSerializedSize();
128*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(buffer, end, serialized_size)) return 0;
129*e582193eSAndroid Build Coastguard Worker nonErrorSerialize(buffer);
130*e582193eSAndroid Build Coastguard Worker bytes_written += serialized_size;
131*e582193eSAndroid Build Coastguard Worker }
132*e582193eSAndroid Build Coastguard Worker return bytes_written;
133*e582193eSAndroid Build Coastguard Worker }
134*e582193eSAndroid Build Coastguard Worker
Deserialize(const uint8_t * payload,const uint8_t * end)135*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t GateKeeperMessage::Deserialize(const uint8_t *payload, const uint8_t *end) {
136*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(payload, end, sizeof(serial_header_t))) return ERROR_INVALID;
137*e582193eSAndroid Build Coastguard Worker const serial_header_t *header = reinterpret_cast<const serial_header_t *>(payload);
138*e582193eSAndroid Build Coastguard Worker error = readError(header->error);
139*e582193eSAndroid Build Coastguard Worker user_id = header->user_id;
140*e582193eSAndroid Build Coastguard Worker payload += sizeof(*header);
141*e582193eSAndroid Build Coastguard Worker if (error == ERROR_NONE) {
142*e582193eSAndroid Build Coastguard Worker return nonErrorDeserialize(payload, end);
143*e582193eSAndroid Build Coastguard Worker } else {
144*e582193eSAndroid Build Coastguard Worker retry_timeout = 0;
145*e582193eSAndroid Build Coastguard Worker if (error == ERROR_RETRY) {
146*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(payload, end, sizeof(retry_timeout))) {
147*e582193eSAndroid Build Coastguard Worker return ERROR_INVALID;
148*e582193eSAndroid Build Coastguard Worker }
149*e582193eSAndroid Build Coastguard Worker memcpy(&retry_timeout, payload, sizeof(retry_timeout));
150*e582193eSAndroid Build Coastguard Worker }
151*e582193eSAndroid Build Coastguard Worker }
152*e582193eSAndroid Build Coastguard Worker
153*e582193eSAndroid Build Coastguard Worker return ERROR_NONE;
154*e582193eSAndroid Build Coastguard Worker }
155*e582193eSAndroid Build Coastguard Worker
SetRetryTimeout(uint32_t retry_timeout)156*e582193eSAndroid Build Coastguard Worker void GateKeeperMessage::SetRetryTimeout(uint32_t retry_timeout) {
157*e582193eSAndroid Build Coastguard Worker this->retry_timeout = retry_timeout;
158*e582193eSAndroid Build Coastguard Worker this->error = ERROR_RETRY;
159*e582193eSAndroid Build Coastguard Worker }
160*e582193eSAndroid Build Coastguard Worker
VerifyRequest(uint32_t user_id,uint64_t challenge,SizedBuffer enrolled_password_handle,SizedBuffer provided_password_payload)161*e582193eSAndroid Build Coastguard Worker VerifyRequest::VerifyRequest(uint32_t user_id, uint64_t challenge,
162*e582193eSAndroid Build Coastguard Worker SizedBuffer enrolled_password_handle, SizedBuffer provided_password_payload) {
163*e582193eSAndroid Build Coastguard Worker this->user_id = user_id;
164*e582193eSAndroid Build Coastguard Worker this->challenge = challenge;
165*e582193eSAndroid Build Coastguard Worker this->password_handle = move(enrolled_password_handle);
166*e582193eSAndroid Build Coastguard Worker this->provided_password = move(provided_password_payload);
167*e582193eSAndroid Build Coastguard Worker }
168*e582193eSAndroid Build Coastguard Worker
nonErrorSerializedSize() const169*e582193eSAndroid Build Coastguard Worker uint32_t VerifyRequest::nonErrorSerializedSize() const {
170*e582193eSAndroid Build Coastguard Worker return sizeof(challenge) + serialized_buffer_size(password_handle)
171*e582193eSAndroid Build Coastguard Worker + serialized_buffer_size(provided_password);
172*e582193eSAndroid Build Coastguard Worker }
173*e582193eSAndroid Build Coastguard Worker
nonErrorSerialize(uint8_t * buffer) const174*e582193eSAndroid Build Coastguard Worker void VerifyRequest::nonErrorSerialize(uint8_t *buffer) const {
175*e582193eSAndroid Build Coastguard Worker memcpy(buffer, &challenge, sizeof(challenge));
176*e582193eSAndroid Build Coastguard Worker buffer += sizeof(challenge);
177*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, password_handle);
178*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, provided_password);
179*e582193eSAndroid Build Coastguard Worker }
180*e582193eSAndroid Build Coastguard Worker
nonErrorDeserialize(const uint8_t * payload,const uint8_t * end)181*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t VerifyRequest::nonErrorDeserialize(const uint8_t *payload, const uint8_t *end) {
182*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t error = ERROR_NONE;
183*e582193eSAndroid Build Coastguard Worker
184*e582193eSAndroid Build Coastguard Worker password_handle = {};
185*e582193eSAndroid Build Coastguard Worker provided_password = {};
186*e582193eSAndroid Build Coastguard Worker
187*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(payload, end, sizeof(challenge))) return ERROR_INVALID;
188*e582193eSAndroid Build Coastguard Worker
189*e582193eSAndroid Build Coastguard Worker memcpy(&challenge, payload, sizeof(challenge));
190*e582193eSAndroid Build Coastguard Worker payload += sizeof(challenge);
191*e582193eSAndroid Build Coastguard Worker
192*e582193eSAndroid Build Coastguard Worker error = read_from_buffer(&payload, end, &password_handle);
193*e582193eSAndroid Build Coastguard Worker if (error != ERROR_NONE) return error;
194*e582193eSAndroid Build Coastguard Worker
195*e582193eSAndroid Build Coastguard Worker return read_from_buffer(&payload, end, &provided_password);
196*e582193eSAndroid Build Coastguard Worker
197*e582193eSAndroid Build Coastguard Worker }
198*e582193eSAndroid Build Coastguard Worker
VerifyResponse(uint32_t user_id,SizedBuffer auth_token)199*e582193eSAndroid Build Coastguard Worker VerifyResponse::VerifyResponse(uint32_t user_id, SizedBuffer auth_token) {
200*e582193eSAndroid Build Coastguard Worker this->user_id = user_id;
201*e582193eSAndroid Build Coastguard Worker this->auth_token = move(auth_token);
202*e582193eSAndroid Build Coastguard Worker this->request_reenroll = false;
203*e582193eSAndroid Build Coastguard Worker }
204*e582193eSAndroid Build Coastguard Worker
VerifyResponse()205*e582193eSAndroid Build Coastguard Worker VerifyResponse::VerifyResponse() {
206*e582193eSAndroid Build Coastguard Worker request_reenroll = false;
207*e582193eSAndroid Build Coastguard Worker };
208*e582193eSAndroid Build Coastguard Worker
SetVerificationToken(SizedBuffer auth_token)209*e582193eSAndroid Build Coastguard Worker void VerifyResponse::SetVerificationToken(SizedBuffer auth_token) {
210*e582193eSAndroid Build Coastguard Worker this->auth_token = move(auth_token);
211*e582193eSAndroid Build Coastguard Worker }
212*e582193eSAndroid Build Coastguard Worker
nonErrorSerializedSize() const213*e582193eSAndroid Build Coastguard Worker uint32_t VerifyResponse::nonErrorSerializedSize() const {
214*e582193eSAndroid Build Coastguard Worker return serialized_buffer_size(auth_token) + sizeof(request_reenroll);
215*e582193eSAndroid Build Coastguard Worker }
216*e582193eSAndroid Build Coastguard Worker
nonErrorSerialize(uint8_t * buffer) const217*e582193eSAndroid Build Coastguard Worker void VerifyResponse::nonErrorSerialize(uint8_t *buffer) const {
218*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, auth_token);
219*e582193eSAndroid Build Coastguard Worker memcpy(buffer, &request_reenroll, sizeof(request_reenroll));
220*e582193eSAndroid Build Coastguard Worker }
221*e582193eSAndroid Build Coastguard Worker
nonErrorDeserialize(const uint8_t * payload,const uint8_t * end)222*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t VerifyResponse::nonErrorDeserialize(const uint8_t *payload, const uint8_t *end) {
223*e582193eSAndroid Build Coastguard Worker
224*e582193eSAndroid Build Coastguard Worker auth_token = {};
225*e582193eSAndroid Build Coastguard Worker
226*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t err = read_from_buffer(&payload, end, &auth_token);
227*e582193eSAndroid Build Coastguard Worker if (err != ERROR_NONE) {
228*e582193eSAndroid Build Coastguard Worker return err;
229*e582193eSAndroid Build Coastguard Worker }
230*e582193eSAndroid Build Coastguard Worker
231*e582193eSAndroid Build Coastguard Worker if (!fitsBuffer(payload, end, sizeof(request_reenroll))) return ERROR_INVALID;
232*e582193eSAndroid Build Coastguard Worker memcpy(&request_reenroll, payload, sizeof(request_reenroll));
233*e582193eSAndroid Build Coastguard Worker return ERROR_NONE;
234*e582193eSAndroid Build Coastguard Worker }
235*e582193eSAndroid Build Coastguard Worker
EnrollRequest(uint32_t user_id,SizedBuffer password_handle,SizedBuffer provided_password,SizedBuffer enrolled_password)236*e582193eSAndroid Build Coastguard Worker EnrollRequest::EnrollRequest(uint32_t user_id, SizedBuffer password_handle,
237*e582193eSAndroid Build Coastguard Worker SizedBuffer provided_password, SizedBuffer enrolled_password) {
238*e582193eSAndroid Build Coastguard Worker this->user_id = user_id;
239*e582193eSAndroid Build Coastguard Worker
240*e582193eSAndroid Build Coastguard Worker this->provided_password = move(provided_password);
241*e582193eSAndroid Build Coastguard Worker this->enrolled_password = move(enrolled_password);
242*e582193eSAndroid Build Coastguard Worker this->password_handle = move(password_handle);
243*e582193eSAndroid Build Coastguard Worker }
244*e582193eSAndroid Build Coastguard Worker
nonErrorSerializedSize() const245*e582193eSAndroid Build Coastguard Worker uint32_t EnrollRequest::nonErrorSerializedSize() const {
246*e582193eSAndroid Build Coastguard Worker return serialized_buffer_size(provided_password) + serialized_buffer_size(enrolled_password)
247*e582193eSAndroid Build Coastguard Worker + serialized_buffer_size(password_handle);
248*e582193eSAndroid Build Coastguard Worker }
249*e582193eSAndroid Build Coastguard Worker
nonErrorSerialize(uint8_t * buffer) const250*e582193eSAndroid Build Coastguard Worker void EnrollRequest::nonErrorSerialize(uint8_t *buffer) const {
251*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, provided_password);
252*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, enrolled_password);
253*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, password_handle);
254*e582193eSAndroid Build Coastguard Worker }
255*e582193eSAndroid Build Coastguard Worker
nonErrorDeserialize(const uint8_t * payload,const uint8_t * end)256*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t EnrollRequest::nonErrorDeserialize(const uint8_t *payload, const uint8_t *end) {
257*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t ret;
258*e582193eSAndroid Build Coastguard Worker
259*e582193eSAndroid Build Coastguard Worker provided_password = {};
260*e582193eSAndroid Build Coastguard Worker enrolled_password = {};
261*e582193eSAndroid Build Coastguard Worker password_handle = {};
262*e582193eSAndroid Build Coastguard Worker
263*e582193eSAndroid Build Coastguard Worker ret = read_from_buffer(&payload, end, &provided_password);
264*e582193eSAndroid Build Coastguard Worker if (ret != ERROR_NONE) {
265*e582193eSAndroid Build Coastguard Worker return ret;
266*e582193eSAndroid Build Coastguard Worker }
267*e582193eSAndroid Build Coastguard Worker
268*e582193eSAndroid Build Coastguard Worker ret = read_from_buffer(&payload, end, &enrolled_password);
269*e582193eSAndroid Build Coastguard Worker if (ret != ERROR_NONE) {
270*e582193eSAndroid Build Coastguard Worker return ret;
271*e582193eSAndroid Build Coastguard Worker }
272*e582193eSAndroid Build Coastguard Worker
273*e582193eSAndroid Build Coastguard Worker return read_from_buffer(&payload, end, &password_handle);
274*e582193eSAndroid Build Coastguard Worker }
275*e582193eSAndroid Build Coastguard Worker
EnrollResponse(uint32_t user_id,SizedBuffer enrolled_password_handle)276*e582193eSAndroid Build Coastguard Worker EnrollResponse::EnrollResponse(uint32_t user_id, SizedBuffer enrolled_password_handle) {
277*e582193eSAndroid Build Coastguard Worker this->user_id = user_id;
278*e582193eSAndroid Build Coastguard Worker this->enrolled_password_handle = move(enrolled_password_handle);
279*e582193eSAndroid Build Coastguard Worker }
280*e582193eSAndroid Build Coastguard Worker
SetEnrolledPasswordHandle(SizedBuffer enrolled_password_handle)281*e582193eSAndroid Build Coastguard Worker void EnrollResponse::SetEnrolledPasswordHandle(SizedBuffer enrolled_password_handle) {
282*e582193eSAndroid Build Coastguard Worker this->enrolled_password_handle = move(enrolled_password_handle);
283*e582193eSAndroid Build Coastguard Worker }
284*e582193eSAndroid Build Coastguard Worker
nonErrorSerializedSize() const285*e582193eSAndroid Build Coastguard Worker uint32_t EnrollResponse::nonErrorSerializedSize() const {
286*e582193eSAndroid Build Coastguard Worker return serialized_buffer_size(enrolled_password_handle);
287*e582193eSAndroid Build Coastguard Worker }
288*e582193eSAndroid Build Coastguard Worker
nonErrorSerialize(uint8_t * buffer) const289*e582193eSAndroid Build Coastguard Worker void EnrollResponse::nonErrorSerialize(uint8_t *buffer) const {
290*e582193eSAndroid Build Coastguard Worker append_to_buffer(&buffer, enrolled_password_handle);
291*e582193eSAndroid Build Coastguard Worker }
292*e582193eSAndroid Build Coastguard Worker
nonErrorDeserialize(const uint8_t * payload,const uint8_t * end)293*e582193eSAndroid Build Coastguard Worker gatekeeper_error_t EnrollResponse::nonErrorDeserialize(const uint8_t *payload, const uint8_t *end) {
294*e582193eSAndroid Build Coastguard Worker enrolled_password_handle = {};
295*e582193eSAndroid Build Coastguard Worker
296*e582193eSAndroid Build Coastguard Worker return read_from_buffer(&payload, end, &enrolled_password_handle);
297*e582193eSAndroid Build Coastguard Worker }
298*e582193eSAndroid Build Coastguard Worker
DeleteUserRequest(uint32_t user_id)299*e582193eSAndroid Build Coastguard Worker DeleteUserRequest::DeleteUserRequest(uint32_t user_id) {
300*e582193eSAndroid Build Coastguard Worker this->user_id = user_id;
301*e582193eSAndroid Build Coastguard Worker }
302*e582193eSAndroid Build Coastguard Worker };
303*e582193eSAndroid Build Coastguard Worker
304