| /** @file | |
| Implementation of EFI TLS Configuration Protocol Interfaces. | |
| Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include "TlsImpl.h" | |
| EFI_TLS_CONFIGURATION_PROTOCOL mTlsConfigurationProtocol = { | |
| TlsConfigurationSetData, | |
| TlsConfigurationGetData | |
| }; | |
| /** | |
| Set TLS configuration data. | |
| The SetData() function sets TLS configuration to non-volatile storage or volatile | |
| storage. | |
| @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance. | |
| @param[in] DataType Configuration data type. | |
| @param[in] Data Pointer to configuration data. | |
| @param[in] DataSize Total size of configuration data. | |
| @retval EFI_SUCCESS The TLS configuration data is set successfully. | |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: | |
| This is NULL. | |
| Data is NULL. | |
| DataSize is 0. | |
| @retval EFI_UNSUPPORTED The DataType is unsupported. | |
| @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| TlsConfigurationSetData ( | |
| IN EFI_TLS_CONFIGURATION_PROTOCOL *This, | |
| IN EFI_TLS_CONFIG_DATA_TYPE DataType, | |
| IN VOID *Data, | |
| IN UINTN DataSize | |
| ) | |
| { | |
| EFI_STATUS Status; | |
| TLS_INSTANCE *Instance; | |
| EFI_TPL OldTpl; | |
| Status = EFI_SUCCESS; | |
| if ((This == NULL) || (Data == NULL) || (DataSize == 0)) { | |
| return EFI_INVALID_PARAMETER; | |
| } | |
| OldTpl = gBS->RaiseTPL (TPL_CALLBACK); | |
| Instance = TLS_INSTANCE_FROM_CONFIGURATION (This); | |
| switch (DataType) { | |
| case EfiTlsConfigDataTypeCACertificate: | |
| Status = TlsSetCaCertificate (Instance->TlsConn, Data, DataSize); | |
| break; | |
| case EfiTlsConfigDataTypeHostPublicCert: | |
| Status = TlsSetHostPublicCert (Instance->TlsConn, Data, DataSize); | |
| break; | |
| case EfiTlsConfigDataTypeHostPrivateKey: | |
| Status = TlsSetHostPrivateKey (Instance->TlsConn, Data, DataSize); | |
| break; | |
| case EfiTlsConfigDataTypeCertRevocationList: | |
| Status = TlsSetCertRevocationList (Data, DataSize); | |
| break; | |
| default: | |
| Status = EFI_UNSUPPORTED; | |
| } | |
| gBS->RestoreTPL (OldTpl); | |
| return Status; | |
| } | |
| /** | |
| Get TLS configuration data. | |
| The GetData() function gets TLS configuration. | |
| @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance. | |
| @param[in] DataType Configuration data type. | |
| @param[in, out] Data Pointer to configuration data. | |
| @param[in, out] DataSize Total size of configuration data. On input, it means | |
| the size of Data buffer. On output, it means the size | |
| of copied Data buffer if EFI_SUCCESS, and means the | |
| size of desired Data buffer if EFI_BUFFER_TOO_SMALL. | |
| @retval EFI_SUCCESS The TLS configuration data is got successfully. | |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: | |
| This is NULL. | |
| DataSize is NULL. | |
| Data is NULL if *DataSize is not zero. | |
| @retval EFI_UNSUPPORTED The DataType is unsupported. | |
| @retval EFI_NOT_FOUND The TLS configuration data is not found. | |
| @retval EFI_BUFFER_TOO_SMALL The buffer is too small to hold the data. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| TlsConfigurationGetData ( | |
| IN EFI_TLS_CONFIGURATION_PROTOCOL *This, | |
| IN EFI_TLS_CONFIG_DATA_TYPE DataType, | |
| IN OUT VOID *Data OPTIONAL, | |
| IN OUT UINTN *DataSize | |
| ) | |
| { | |
| EFI_STATUS Status; | |
| TLS_INSTANCE *Instance; | |
| EFI_TPL OldTpl; | |
| Status = EFI_SUCCESS; | |
| if ((This == NULL) || (DataSize == NULL) || ((Data == NULL) && (*DataSize != 0))) { | |
| return EFI_INVALID_PARAMETER; | |
| } | |
| OldTpl = gBS->RaiseTPL (TPL_CALLBACK); | |
| Instance = TLS_INSTANCE_FROM_CONFIGURATION (This); | |
| switch (DataType) { | |
| case EfiTlsConfigDataTypeCACertificate: | |
| Status = TlsGetCaCertificate (Instance->TlsConn, Data, DataSize); | |
| break; | |
| case EfiTlsConfigDataTypeHostPublicCert: | |
| Status = TlsGetHostPublicCert (Instance->TlsConn, Data, DataSize); | |
| break; | |
| case EfiTlsConfigDataTypeHostPrivateKey: | |
| Status = TlsGetHostPrivateKey (Instance->TlsConn, Data, DataSize); | |
| break; | |
| case EfiTlsConfigDataTypeCertRevocationList: | |
| Status = TlsGetCertRevocationList (Data, DataSize); | |
| break; | |
| default: | |
| Status = EFI_UNSUPPORTED; | |
| } | |
| gBS->RestoreTPL (OldTpl); | |
| return Status; | |
| } |