mirror of https://github.com/acidanthera/audk.git
263 lines
8.3 KiB
C
263 lines
8.3 KiB
C
/** @file
|
|
The header files of miscellaneous routines specific to Https for HttpDxe driver.
|
|
|
|
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef __EFI_HTTPS_SUPPORT_H__
|
|
#define __EFI_HTTPS_SUPPORT_H__
|
|
|
|
#define HTTPS_DEFAULT_PORT 443
|
|
|
|
#define HTTPS_FLAG "https://"
|
|
|
|
/**
|
|
Check whether the Url is from Https.
|
|
|
|
@param[in] Url The pointer to a HTTP or HTTPS URL string.
|
|
|
|
@retval TRUE The Url is from HTTPS.
|
|
@retval FALSE The Url is from HTTP.
|
|
|
|
**/
|
|
BOOLEAN
|
|
IsHttpsUrl (
|
|
IN CHAR8 *Url
|
|
);
|
|
|
|
/**
|
|
Creates a Tls child handle, open EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.
|
|
|
|
@param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
|
|
@return EFI_SUCCESS TLS child handle is returned in HttpInstance->TlsChildHandle
|
|
with opened EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.
|
|
EFI_DEVICE_ERROR TLS service binding protocol is not found.
|
|
Otherwise Fail to create TLS chile handle.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsCreateChild (
|
|
IN HTTP_PROTOCOL *HttpInstance
|
|
);
|
|
|
|
/**
|
|
Create event for the TLS receive and transmit tokens which are used to receive and
|
|
transmit TLS related messages.
|
|
|
|
@param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
|
|
@retval EFI_SUCCESS The events are created successfully.
|
|
@retval others Other error as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsCreateTxRxEvent (
|
|
IN OUT HTTP_PROTOCOL *HttpInstance
|
|
);
|
|
|
|
/**
|
|
Close events in the TlsTxToken and TlsRxToken.
|
|
|
|
@param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
TlsCloseTxRxEvent (
|
|
IN HTTP_PROTOCOL *HttpInstance
|
|
);
|
|
|
|
/**
|
|
Read the TlsCaCertificate variable and configure it.
|
|
|
|
@param[in, out] HttpInstance The HTTP instance private data.
|
|
|
|
@retval EFI_SUCCESS TlsCaCertificate is configured.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval EFI_NOT_FOUND Fail to get "TlsCaCertificate" variable.
|
|
@retval Others Other error as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
TlsConfigCertificate (
|
|
IN OUT HTTP_PROTOCOL *HttpInstance
|
|
);
|
|
|
|
/**
|
|
Configure TLS session data.
|
|
|
|
@param[in, out] HttpInstance The HTTP instance private data.
|
|
|
|
@retval EFI_SUCCESS TLS session data is configured.
|
|
@retval Others Other error as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsConfigureSession (
|
|
IN OUT HTTP_PROTOCOL *HttpInstance
|
|
);
|
|
|
|
/**
|
|
Transmit the Packet by processing the associated HTTPS token.
|
|
|
|
@param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
@param[in] Packet The packet to transmit.
|
|
|
|
@retval EFI_SUCCESS The packet is transmitted.
|
|
@retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is NULL.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval EFI_DEVICE_ERROR An unexpected system or network error occurred.
|
|
@retval Others Other errors as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsCommonTransmit (
|
|
IN OUT HTTP_PROTOCOL *HttpInstance,
|
|
IN NET_BUF *Packet
|
|
);
|
|
|
|
/**
|
|
Receive the Packet by processing the associated HTTPS token.
|
|
|
|
@param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
@param[in] Packet The packet to transmit.
|
|
@param[in] Timeout The time to wait for connection done.
|
|
|
|
@retval EFI_SUCCESS The Packet is received.
|
|
@retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is NULL.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval EFI_TIMEOUT The operation is time out.
|
|
@retval Others Other error as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsCommonReceive (
|
|
IN OUT HTTP_PROTOCOL *HttpInstance,
|
|
IN NET_BUF *Packet,
|
|
IN EFI_EVENT Timeout
|
|
);
|
|
|
|
/**
|
|
Receive one TLS PDU. An TLS PDU contains an TLS record header and its
|
|
corresponding record data. These two parts will be put into two blocks of buffers in the
|
|
net buffer.
|
|
|
|
@param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
@param[out] Pdu The received TLS PDU.
|
|
@param[in] Timeout The time to wait for connection done.
|
|
|
|
@retval EFI_SUCCESS An TLS PDU is received.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval EFI_PROTOCOL_ERROR An unexpected TLS packet was received.
|
|
@retval Others Other errors as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsReceiveOnePdu (
|
|
IN OUT HTTP_PROTOCOL *HttpInstance,
|
|
OUT NET_BUF **Pdu,
|
|
IN EFI_EVENT Timeout
|
|
);
|
|
|
|
/**
|
|
Connect one TLS session by finishing the TLS handshake process.
|
|
|
|
@param[in] HttpInstance The HTTP instance private data.
|
|
@param[in] Timeout The time to wait for connection done.
|
|
|
|
@retval EFI_SUCCESS The TLS session is established.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval EFI_ABORTED TLS session state is incorrect.
|
|
@retval Others Other error as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsConnectSession (
|
|
IN HTTP_PROTOCOL *HttpInstance,
|
|
IN EFI_EVENT Timeout
|
|
);
|
|
|
|
/**
|
|
Close the TLS session and send out the close notification message.
|
|
|
|
@param[in] HttpInstance The HTTP instance private data.
|
|
|
|
@retval EFI_SUCCESS The TLS session is closed.
|
|
@retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is NULL.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval Others Other error as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsCloseSession (
|
|
IN HTTP_PROTOCOL *HttpInstance
|
|
);
|
|
|
|
/**
|
|
Process one message according to the CryptMode.
|
|
|
|
@param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
@param[in] Message Pointer to the message buffer needed to processed.
|
|
If ProcessMode is EfiTlsEncrypt, the message contain the TLS
|
|
header and plain text TLS APP payload.
|
|
If ProcessMode is EfiTlsDecrypt, the message contain the TLS
|
|
header and cipher text TLS APP payload.
|
|
@param[in] MessageSize Pointer to the message buffer size.
|
|
@param[in] ProcessMode Process mode.
|
|
@param[in, out] Fragment Only one Fragment returned after the Message is
|
|
processed successfully.
|
|
If ProcessMode is EfiTlsEncrypt, the fragment contain the TLS
|
|
header and cipher text TLS APP payload.
|
|
If ProcessMode is EfiTlsDecrypt, the fragment contain the TLS
|
|
header and plain text TLS APP payload.
|
|
|
|
@retval EFI_SUCCESS Message is processed successfully.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval Others Other errors as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TlsProcessMessage (
|
|
IN HTTP_PROTOCOL *HttpInstance,
|
|
IN UINT8 *Message,
|
|
IN UINTN MessageSize,
|
|
IN EFI_TLS_CRYPT_MODE ProcessMode,
|
|
IN OUT NET_FRAGMENT *Fragment
|
|
);
|
|
|
|
/**
|
|
Receive one fragment decrypted from one TLS record.
|
|
|
|
@param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
|
@param[in, out] Fragment The received Fragment.
|
|
@param[in] Timeout The time to wait for connection done.
|
|
|
|
@retval EFI_SUCCESS One fragment is received.
|
|
@retval EFI_OUT_OF_RESOURCES Can't allocate memory resources.
|
|
@retval EFI_ABORTED Something wrong decryption the message.
|
|
@retval Others Other errors as indicated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
HttpsReceive (
|
|
IN HTTP_PROTOCOL *HttpInstance,
|
|
IN OUT NET_FRAGMENT *Fragment,
|
|
IN EFI_EVENT Timeout
|
|
);
|
|
|
|
#endif
|