| /** @file | |
| Implementation of EFI TLS Configuration Protocol Interfaces. | |
| Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #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; | |
| } | |