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 "oscore.h"
13 
14 #include "oscore/aad.h"
15 #include "oscore/option.h"
16 
17 #include "common/print_util.h"
18 #include "common/oscore_edhoc_error.h"
19 #include "common/memcpy_s.h"
20 
21 #include "cbor/oscore_aad_array.h"
22 
create_aad(struct o_coap_option * options,uint16_t opt_num,enum AEAD_algorithm aead_alg,struct byte_array * kid,struct byte_array * piv,struct byte_array * out)23 enum err create_aad(struct o_coap_option *options, uint16_t opt_num,
24 		    enum AEAD_algorithm aead_alg, struct byte_array *kid,
25 		    struct byte_array *piv, struct byte_array *out)
26 {
27 	struct aad_array aad_array;
28 
29 	aad_array._aad_array_oscore_version = 1;
30 	aad_array._aad_array_algorithms_alg_aead_choice =
31 		_aad_array_algorithms_alg_aead_int;
32 	aad_array._aad_array_algorithms_alg_aead_int = (int32_t)aead_alg;
33 	aad_array._aad_array_request_kid.value = kid->ptr;
34 	aad_array._aad_array_request_kid.len = kid->len;
35 	aad_array._aad_array_request_piv.value = piv->ptr;
36 	aad_array._aad_array_request_piv.len = piv->len;
37 
38 	PRINT_ARRAY("request_piv", piv->ptr, piv->len);
39 	PRINT_ARRAY("request_kid", kid->ptr, kid->len);
40 
41 	/*
42 	 * Currently there are no I options defined.
43 	 * If at some later time I options are defined this implementation
44 	 * must  be extended here.
45 	 */
46 	aad_array._aad_array_options.len = 0;
47 	aad_array._aad_array_options.value = NULL;
48 
49 	size_t payload_len_out;
50 	TRY_EXPECT(cbor_encode_aad_array(out->ptr, out->len, &aad_array,
51 					 &payload_len_out),
52 		   true);
53 
54 	out->len = (uint32_t)payload_len_out;
55 	PRINT_ARRAY("AAD", out->ptr, out->len);
56 	return ok;
57 }
58