TlsConfigProtocol.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /** @file
  2. Implementation of EFI TLS Configuration Protocol Interfaces.
  3. Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "TlsImpl.h"
  7. EFI_TLS_CONFIGURATION_PROTOCOL mTlsConfigurationProtocol = {
  8. TlsConfigurationSetData,
  9. TlsConfigurationGetData
  10. };
  11. /**
  12. Set TLS configuration data.
  13. The SetData() function sets TLS configuration to non-volatile storage or volatile
  14. storage.
  15. @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.
  16. @param[in] DataType Configuration data type.
  17. @param[in] Data Pointer to configuration data.
  18. @param[in] DataSize Total size of configuration data.
  19. @retval EFI_SUCCESS The TLS configuration data is set successfully.
  20. @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
  21. This is NULL.
  22. Data is NULL.
  23. DataSize is 0.
  24. @retval EFI_UNSUPPORTED The DataType is unsupported.
  25. @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.
  26. **/
  27. EFI_STATUS
  28. EFIAPI
  29. TlsConfigurationSetData (
  30. IN EFI_TLS_CONFIGURATION_PROTOCOL *This,
  31. IN EFI_TLS_CONFIG_DATA_TYPE DataType,
  32. IN VOID *Data,
  33. IN UINTN DataSize
  34. )
  35. {
  36. EFI_STATUS Status;
  37. TLS_INSTANCE *Instance;
  38. EFI_TPL OldTpl;
  39. Status = EFI_SUCCESS;
  40. if ((This == NULL) || (Data == NULL) || (DataSize == 0)) {
  41. return EFI_INVALID_PARAMETER;
  42. }
  43. OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
  44. Instance = TLS_INSTANCE_FROM_CONFIGURATION (This);
  45. switch (DataType) {
  46. case EfiTlsConfigDataTypeCACertificate:
  47. Status = TlsSetCaCertificate (Instance->TlsConn, Data, DataSize);
  48. break;
  49. case EfiTlsConfigDataTypeHostPublicCert:
  50. Status = TlsSetHostPublicCert (Instance->TlsConn, Data, DataSize);
  51. break;
  52. case EfiTlsConfigDataTypeHostPrivateKey:
  53. Status = TlsSetHostPrivateKey (Instance->TlsConn, Data, DataSize);
  54. break;
  55. case EfiTlsConfigDataTypeCertRevocationList:
  56. Status = TlsSetCertRevocationList (Data, DataSize);
  57. break;
  58. default:
  59. Status = EFI_UNSUPPORTED;
  60. }
  61. gBS->RestoreTPL (OldTpl);
  62. return Status;
  63. }
  64. /**
  65. Get TLS configuration data.
  66. The GetData() function gets TLS configuration.
  67. @param[in] This Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.
  68. @param[in] DataType Configuration data type.
  69. @param[in, out] Data Pointer to configuration data.
  70. @param[in, out] DataSize Total size of configuration data. On input, it means
  71. the size of Data buffer. On output, it means the size
  72. of copied Data buffer if EFI_SUCCESS, and means the
  73. size of desired Data buffer if EFI_BUFFER_TOO_SMALL.
  74. @retval EFI_SUCCESS The TLS configuration data is got successfully.
  75. @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
  76. This is NULL.
  77. DataSize is NULL.
  78. Data is NULL if *DataSize is not zero.
  79. @retval EFI_UNSUPPORTED The DataType is unsupported.
  80. @retval EFI_NOT_FOUND The TLS configuration data is not found.
  81. @retval EFI_BUFFER_TOO_SMALL The buffer is too small to hold the data.
  82. **/
  83. EFI_STATUS
  84. EFIAPI
  85. TlsConfigurationGetData (
  86. IN EFI_TLS_CONFIGURATION_PROTOCOL *This,
  87. IN EFI_TLS_CONFIG_DATA_TYPE DataType,
  88. IN OUT VOID *Data OPTIONAL,
  89. IN OUT UINTN *DataSize
  90. )
  91. {
  92. EFI_STATUS Status;
  93. TLS_INSTANCE *Instance;
  94. EFI_TPL OldTpl;
  95. Status = EFI_SUCCESS;
  96. if ((This == NULL) || (DataSize == NULL) || ((Data == NULL) && (*DataSize != 0))) {
  97. return EFI_INVALID_PARAMETER;
  98. }
  99. OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
  100. Instance = TLS_INSTANCE_FROM_CONFIGURATION (This);
  101. switch (DataType) {
  102. case EfiTlsConfigDataTypeCACertificate:
  103. Status = TlsGetCaCertificate (Instance->TlsConn, Data, DataSize);
  104. break;
  105. case EfiTlsConfigDataTypeHostPublicCert:
  106. Status = TlsGetHostPublicCert (Instance->TlsConn, Data, DataSize);
  107. break;
  108. case EfiTlsConfigDataTypeHostPrivateKey:
  109. Status = TlsGetHostPrivateKey (Instance->TlsConn, Data, DataSize);
  110. break;
  111. case EfiTlsConfigDataTypeCertRevocationList:
  112. Status = TlsGetCertRevocationList (Data, DataSize);
  113. break;
  114. default:
  115. Status = EFI_UNSUPPORTED;
  116. }
  117. gBS->RestoreTPL (OldTpl);
  118. return Status;
  119. }