source: azure_iot_hub_f767zi/trunk/azure_iot_sdk/provisioning_client/adapters/hsm_client_key.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 4.2 KB
Line 
1// Copyright (c) Microsoft. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
4#include <stdlib.h>
5#include "umock_c/umock_c_prod.h"
6#include "azure_c_shared_utility/gballoc.h"
7#include "azure_c_shared_utility/urlencode.h"
8#include "azure_c_shared_utility/xlogging.h"
9#include "azure_c_shared_utility/crt_abstractions.h"
10
11#include "hsm_client_data.h"
12#include "hsm_client_key.h"
13
14typedef struct HSM_CLIENT_KEY_INFO_TAG
15{
16 char* symmetrical_key;
17 char* registration_name;
18} HSM_CLIENT_KEY_INFO;
19
20HSM_CLIENT_HANDLE hsm_client_key_create(void)
21{
22 HSM_CLIENT_KEY_INFO* result;
23 result = malloc(sizeof(HSM_CLIENT_KEY_INFO) );
24 if (result == NULL)
25 {
26 LogError("Failure: malloc HSM_CLIENT_KEY_INFO.");
27 }
28 else
29 {
30 memset(result, 0, sizeof(HSM_CLIENT_KEY_INFO));
31 }
32 return result;
33}
34
35void hsm_client_key_destroy(HSM_CLIENT_HANDLE handle)
36{
37 if (handle != NULL)
38 {
39 HSM_CLIENT_KEY_INFO* key_client = (HSM_CLIENT_KEY_INFO*)handle;
40 if (key_client->symmetrical_key != NULL)
41 {
42 free(key_client->symmetrical_key);
43 key_client->symmetrical_key = NULL;
44 }
45 if (key_client->registration_name != NULL)
46 {
47 free(key_client->registration_name);
48 key_client->registration_name = NULL;
49 }
50 free(key_client);
51 }
52}
53
54char* hsm_client_get_symmetric_key(HSM_CLIENT_HANDLE handle)
55{
56 char* result;
57 if (handle == NULL)
58 {
59 /* Codes_SRS_HSM_CLIENT_RIOT_07_010: [ if handle is NULL, hsm_client_riot_get_certificate shall return NULL. ] */
60 LogError("Invalid handle value specified");
61 result = NULL;
62 }
63 else
64 {
65 HSM_CLIENT_KEY_INFO* key_client = (HSM_CLIENT_KEY_INFO*)handle;
66 if (mallocAndStrcpy_s(&result, key_client->symmetrical_key) != 0)
67 {
68 LogError("Failed to allocate symmetrical_key.");
69 result = NULL;
70 }
71 }
72 return result;
73}
74
75char* hsm_client_get_registration_name(HSM_CLIENT_HANDLE handle)
76{
77 char* result;
78 if (handle == NULL)
79 {
80 /* Codes_SRS_HSM_CLIENT_RIOT_07_026: [ if handle is NULL, hsm_client_riot_get_common_name shall return NULL. ] */
81 LogError("Invalid handle value specified");
82 result = NULL;
83 }
84 else
85 {
86 HSM_CLIENT_KEY_INFO* key_client = (HSM_CLIENT_KEY_INFO*)handle;
87 if (mallocAndStrcpy_s(&result, key_client->registration_name) != 0)
88 {
89 LogError("Failure allocating registration_name");
90 result = NULL;
91 }
92 }
93 return result;
94}
95
96int hsm_client_set_key_info(HSM_CLIENT_HANDLE handle, const char* reg_name, const char* symm_key)
97{
98 int result;
99 if (handle == NULL || reg_name == NULL || symm_key == NULL)
100 {
101 LogError("Invalid parameter specified handle: %p, reg_name: %p, symm_key: %p", handle, reg_name, symm_key);
102 result = MU_FAILURE;
103 }
104 else
105 {
106 HSM_CLIENT_KEY_INFO* key_client = (HSM_CLIENT_KEY_INFO*)handle;
107
108 char* temp_reg_name;
109 char* temp_key;
110 if (mallocAndStrcpy_s(&temp_reg_name, reg_name) != 0)
111 {
112 LogError("Failure allocating registration name");
113 result = MU_FAILURE;
114 }
115 else if (mallocAndStrcpy_s(&temp_key, symm_key) != 0)
116 {
117 LogError("Failure allocating symmetric key");
118 free(temp_reg_name);
119 result = MU_FAILURE;
120 }
121 else
122 {
123 if (key_client->symmetrical_key != NULL)
124 {
125 free(key_client->symmetrical_key);
126 }
127 if (key_client->registration_name != NULL)
128 {
129 free(key_client->registration_name);
130 }
131 key_client->symmetrical_key = temp_key;
132 key_client->registration_name = temp_reg_name;
133 result = 0;
134 }
135 }
136 return result;
137}
138
139static const HSM_CLIENT_KEY_INTERFACE key_interface =
140{
141 hsm_client_key_create,
142 hsm_client_key_destroy,
143 hsm_client_get_symmetric_key,
144 hsm_client_get_registration_name,
145 hsm_client_set_key_info
146};
147
148const HSM_CLIENT_KEY_INTERFACE* hsm_client_key_interface(void)
149{
150 return &key_interface;
151}
Note: See TracBrowser for help on using the repository browser.