]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/TlsDxe/TlsConfigProtocol.c
NetworkPkg: Replace BSD License with BSD+Patent License
[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
ecf98fbc 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7618784b
HW
7\r
8**/\r
9\r
10#include "TlsImpl.h"\r
11\r
12EFI_TLS_CONFIGURATION_PROTOCOL mTlsConfigurationProtocol = {\r
13 TlsConfigurationSetData,\r
14 TlsConfigurationGetData\r
15};\r
16\r
17/**\r
18 Set TLS configuration data.\r
19\r
20 The SetData() function sets TLS configuration to non-volatile storage or volatile\r
21 storage.\r
22\r
23 @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.\r
24 @param[in] DataType Configuration data type.\r
25 @param[in] Data Pointer to configuration data.\r
26 @param[in] DataSize Total size of configuration data.\r
27\r
28 @retval EFI_SUCCESS The TLS configuration data is set successfully.\r
29 @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
30 This is NULL.\r
31 Data is NULL.\r
32 DataSize is 0.\r
33 @retval EFI_UNSUPPORTED The DataType is unsupported.\r
34 @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.\r
35\r
36**/\r
37EFI_STATUS\r
38EFIAPI\r
39TlsConfigurationSetData (\r
40 IN EFI_TLS_CONFIGURATION_PROTOCOL *This,\r
41 IN EFI_TLS_CONFIG_DATA_TYPE DataType,\r
42 IN VOID *Data,\r
43 IN UINTN DataSize\r
44 )\r
45{\r
46 EFI_STATUS Status;\r
47 TLS_INSTANCE *Instance;\r
48 EFI_TPL OldTpl;\r
49\r
50 Status = EFI_SUCCESS;\r
51\r
52 if (This == NULL || Data == NULL || DataSize == 0) {\r
53 return EFI_INVALID_PARAMETER;\r
54 }\r
55\r
56 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
57\r
58 Instance = TLS_INSTANCE_FROM_CONFIGURATION (This);\r
59\r
60 switch (DataType) {\r
61 case EfiTlsConfigDataTypeCACertificate:\r
62 Status = TlsSetCaCertificate (Instance->TlsConn, Data, DataSize);\r
63 break;\r
64 case EfiTlsConfigDataTypeHostPublicCert:\r
65 Status = TlsSetHostPublicCert (Instance->TlsConn, Data, DataSize);\r
66 break;\r
67 case EfiTlsConfigDataTypeHostPrivateKey:\r
68 Status = TlsSetHostPrivateKey (Instance->TlsConn, Data, DataSize);\r
69 break;\r
70 case EfiTlsConfigDataTypeCertRevocationList:\r
71 Status = TlsSetCertRevocationList (Data, DataSize);\r
72 break;\r
73 default:\r
74 Status = EFI_UNSUPPORTED;\r
75 }\r
76\r
77 gBS->RestoreTPL (OldTpl);\r
78 return Status;\r
79}\r
80\r
81/**\r
82 Get TLS configuration data.\r
83\r
84 The GetData() function gets TLS configuration.\r
85\r
86 @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.\r
87 @param[in] DataType Configuration data type.\r
88 @param[in, out] Data Pointer to configuration data.\r
89 @param[in, out] DataSize Total size of configuration data. On input, it means\r
90 the size of Data buffer. On output, it means the size\r
91 of copied Data buffer if EFI_SUCCESS, and means the\r
92 size of desired Data buffer if EFI_BUFFER_TOO_SMALL.\r
93\r
94 @retval EFI_SUCCESS The TLS configuration data is got successfully.\r
95 @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
96 This is NULL.\r
97 DataSize is NULL.\r
98 Data is NULL if *DataSize is not zero.\r
99 @retval EFI_UNSUPPORTED The DataType is unsupported.\r
100 @retval EFI_NOT_FOUND The TLS configuration data is not found.\r
101 @retval EFI_BUFFER_TOO_SMALL The buffer is too small to hold the data.\r
102**/\r
103EFI_STATUS\r
104EFIAPI\r
105TlsConfigurationGetData (\r
106 IN EFI_TLS_CONFIGURATION_PROTOCOL *This,\r
107 IN EFI_TLS_CONFIG_DATA_TYPE DataType,\r
108 IN OUT VOID *Data, OPTIONAL\r
109 IN OUT UINTN *DataSize\r
110 )\r
111{\r
112 EFI_STATUS Status;\r
113 TLS_INSTANCE *Instance;\r
114\r
115 EFI_TPL OldTpl;\r
116\r
117 Status = EFI_SUCCESS;\r
118\r
119 if (This == NULL || DataSize == NULL || (Data == NULL && *DataSize != 0)) {\r
120 return EFI_INVALID_PARAMETER;\r
121 }\r
122\r
123 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
124\r
125 Instance = TLS_INSTANCE_FROM_CONFIGURATION (This);\r
126\r
127 switch (DataType) {\r
128 case EfiTlsConfigDataTypeCACertificate:\r
129 Status = TlsGetCaCertificate (Instance->TlsConn, Data, DataSize);\r
130 break;\r
131 case EfiTlsConfigDataTypeHostPublicCert:\r
132 Status = TlsGetHostPublicCert (Instance->TlsConn, Data, DataSize);\r
133 break;\r
134 case EfiTlsConfigDataTypeHostPrivateKey:\r
135 Status = TlsGetHostPrivateKey (Instance->TlsConn, Data, DataSize);\r
136 break;\r
137 case EfiTlsConfigDataTypeCertRevocationList:\r
138 Status = TlsGetCertRevocationList (Data, DataSize);\r
139 break;\r
140 default:\r
141 Status = EFI_UNSUPPORTED;\r
142 }\r
143\r
144 gBS->RestoreTPL (OldTpl);\r
145 return Status;\r
146}\r
147\r