1 /*
2  * Copyright (c) 2021-2022, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <string.h>
8 #include <service/attestation/claims/claim.h>
9 #include "implementation_id_claim_source.h"
10 
11 static bool get_claim(void *context, struct claim *claim);
12 
implementation_id_claim_source_init(struct implementation_id_claim_source * instance,const char * id_string)13 struct claim_source *implementation_id_claim_source_init(
14 	struct implementation_id_claim_source *instance,
15 	const char *id_string)
16 {
17 	instance->base.get_claim = get_claim;
18 	instance->base.context = instance;
19 
20 	instance->id_string = id_string;
21 
22 	return &instance->base;
23 }
24 
get_claim(void * context,struct claim * claim)25 static bool get_claim(void *context, struct claim *claim)
26 {
27 	struct implementation_id_claim_source *instance = (struct implementation_id_claim_source*)context;
28 
29 	if (instance->id_string) {
30 
31 		claim->category = CLAIM_CATEGORY_DEVICE;
32 		claim->subject_id = CLAIM_SUBJECT_ID_IMPLEMENTATION_ID;
33 		claim->variant_id = CLAIM_VARIANT_ID_BYTE_STRING;
34 		claim->raw_data = NULL;
35 
36 		claim->variant.byte_string.bytes = (const uint8_t*)instance->id_string;
37 		claim->variant.byte_string.len = strlen(instance->id_string);
38 	}
39 
40 	return instance->id_string;
41 }
42