]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/TlsDxe/TlsConfigProtocol.c
MdeModulePkg/ResetUtilityLib: Add pack(1) for reset data structure
[mirror_edk2.git] / NetworkPkg / TlsDxe / TlsConfigProtocol.c
CommitLineData
7618784b
HW
1/** @file\r
2 Implementation of EFI TLS Configuration Protocol Interfaces.\r
3\r
4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
5\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php.\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "TlsImpl.h"\r
17\r
18EFI_TLS_CONFIGURATION_PROTOCOL mTlsConfigurationProtocol = {\r
19 TlsConfigurationSetData,\r
20 TlsConfigurationGetData\r
21};\r
22\r
23/**\r
24 Set TLS configuration data.\r
25\r
26 The SetData() function sets TLS configuration to non-volatile storage or volatile\r
27 storage.\r
28\r
29 @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.\r
30 @param[in] DataType Configuration data type.\r
31 @param[in] Data Pointer to configuration data.\r
32 @param[in] DataSize Total size of configuration data.\r
33\r
34 @retval EFI_SUCCESS The TLS configuration data is set successfully.\r
35 @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
36 This is NULL.\r
37 Data is NULL.\r
38 DataSize is 0.\r
39 @retval EFI_UNSUPPORTED The DataType is unsupported.\r
40 @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.\r
41\r
42**/\r
43EFI_STATUS\r
44EFIAPI\r
45TlsConfigurationSetData (\r
46 IN EFI_TLS_CONFIGURATION_PROTOCOL *This,\r
47 IN EFI_TLS_CONFIG_DATA_TYPE DataType,\r
48 IN VOID *Data,\r
49 IN UINTN DataSize\r
50 )\r
51{\r
52 EFI_STATUS Status;\r
53 TLS_INSTANCE *Instance;\r
54 EFI_TPL OldTpl;\r
55\r
56 Status = EFI_SUCCESS;\r
57\r
58 if (This == NULL || Data == NULL || DataSize == 0) {\r
59 return EFI_INVALID_PARAMETER;\r
60 }\r
61\r
62 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
63\r
64 Instance = TLS_INSTANCE_FROM_CONFIGURATION (This);\r
65\r
66 switch (DataType) {\r
67 case EfiTlsConfigDataTypeCACertificate:\r
68 Status = TlsSetCaCertificate (Instance->TlsConn, Data, DataSize);\r
69 break;\r
70 case EfiTlsConfigDataTypeHostPublicCert:\r
71 Status = TlsSetHostPublicCert (Instance->TlsConn, Data, DataSize);\r
72 break;\r
73 case EfiTlsConfigDataTypeHostPrivateKey:\r
74 Status = TlsSetHostPrivateKey (Instance->TlsConn, Data, DataSize);\r
75 break;\r
76 case EfiTlsConfigDataTypeCertRevocationList:\r
77 Status = TlsSetCertRevocationList (Data, DataSize);\r
78 break;\r
79 default:\r
80 Status = EFI_UNSUPPORTED;\r
81 }\r
82\r
83 gBS->RestoreTPL (OldTpl);\r
84 return Status;\r
85}\r
86\r
87/**\r
88 Get TLS configuration data.\r
89\r
90 The GetData() function gets TLS configuration.\r
91\r
92 @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.\r
93 @param[in] DataType Configuration data type.\r
94 @param[in, out] Data Pointer to configuration data.\r
95 @param[in, out] DataSize Total size of configuration data. On input, it means\r
96 the size of Data buffer. On output, it means the size\r
97 of copied Data buffer if EFI_SUCCESS, and means the\r
98 size of desired Data buffer if EFI_BUFFER_TOO_SMALL.\r
99\r
100 @retval EFI_SUCCESS The TLS configuration data is got successfully.\r
101 @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
102 This is NULL.\r
103 DataSize is NULL.\r
104 Data is NULL if *DataSize is not zero.\r
105 @retval EFI_UNSUPPORTED The DataType is unsupported.\r
106 @retval EFI_NOT_FOUND The TLS configuration data is not found.\r
107 @retval EFI_BUFFER_TOO_SMALL The buffer is too small to hold the data.\r
108**/\r
109EFI_STATUS\r
110EFIAPI\r
111TlsConfigurationGetData (\r
112 IN EFI_TLS_CONFIGURATION_PROTOCOL *This,\r
113 IN EFI_TLS_CONFIG_DATA_TYPE DataType,\r
114 IN OUT VOID *Data, OPTIONAL\r
115 IN OUT UINTN *DataSize\r
116 )\r
117{\r
118 EFI_STATUS Status;\r
119 TLS_INSTANCE *Instance;\r
120\r
121 EFI_TPL OldTpl;\r
122\r
123 Status = EFI_SUCCESS;\r
124\r
125 if (This == NULL || DataSize == NULL || (Data == NULL && *DataSize != 0)) {\r
126 return EFI_INVALID_PARAMETER;\r
127 }\r
128\r
129 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
130\r
131 Instance = TLS_INSTANCE_FROM_CONFIGURATION (This);\r
132\r
133 switch (DataType) {\r
134 case EfiTlsConfigDataTypeCACertificate:\r
135 Status = TlsGetCaCertificate (Instance->TlsConn, Data, DataSize);\r
136 break;\r
137 case EfiTlsConfigDataTypeHostPublicCert:\r
138 Status = TlsGetHostPublicCert (Instance->TlsConn, Data, DataSize);\r
139 break;\r
140 case EfiTlsConfigDataTypeHostPrivateKey:\r
141 Status = TlsGetHostPrivateKey (Instance->TlsConn, Data, DataSize);\r
142 break;\r
143 case EfiTlsConfigDataTypeCertRevocationList:\r
144 Status = TlsGetCertRevocationList (Data, DataSize);\r
145 break;\r
146 default:\r
147 Status = EFI_UNSUPPORTED;\r
148 }\r
149\r
150 gBS->RestoreTPL (OldTpl);\r
151 return Status;\r
152}\r
153\r