1 /*
2    Copyright (c) 2021 Fraunhofer AISEC. See the COPYRIGHT
3    file at the top-level directory of this distribution.
4 
5    Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6    http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7    <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8    option. This file may not be copied, modified, or distributed
9    except according to those terms.
10 */
11 
12 #include <stdint.h>
13 
14 #include "edhoc/retrieve_cred.h"
15 #include "edhoc/signature_or_mac_msg.h"
16 #include "edhoc/plaintext.h"
17 #include "edhoc/bstr_encode_decode.h"
18 
19 #include "common/oscore_edhoc_error.h"
20 #include "common/memcpy_s.h"
21 #include "common/print_util.h"
22 
23 #include "cbor/edhoc_decode_id_cred_x.h"
24 #include "cbor/edhoc_encode_int_type.h"
25 
id_cred2kid(const struct byte_array * id_cred,struct byte_array * kid)26 enum err id_cred2kid(const struct byte_array *id_cred, struct byte_array *kid)
27 {
28 	struct id_cred_x_map map = { 0 };
29 	size_t payload_len_out;
30 	size_t decode_len = 0;
31 	TRY_EXPECT(cbor_decode_id_cred_x_map(id_cred->ptr, id_cred->len, &map,
32 					     &decode_len),
33 		   0);
34 
35 	if (map.id_cred_x_map_kid_present) {
36 		TRY_EXPECT(
37 			cbor_encode_int_type_i(
38 				kid->ptr, kid->len,
39 				&map.id_cred_x_map_kid.id_cred_x_map_kid_int,
40 				&payload_len_out),
41 			ZCBOR_SUCCESS);
42 		kid->len = (uint32_t)payload_len_out;
43 	} else {
44 		kid->len = 0;
45 	}
46 
47 	return ok;
48 }
49