mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-06 13:24:23 +02:00
CryptoPkg/TlsLib: use binary search in the TlsGetCipherMapping() function
Improve the performance of the TlsGetCipherMapping() function by adopting the binary search from DhcpFindOptionFormat() [MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Option.c]. Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Qin Long <qin.long@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Cc: Ting Ye <ting.ye@intel.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=915 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Long Qin <qin.long@intel.com> Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
This commit is contained in:
parent
ecfd37ba1b
commit
5eadb54e26
@ -30,6 +30,8 @@ typedef struct {
|
|||||||
// The mapping table between IANA/IETF Cipher Suite definitions and
|
// The mapping table between IANA/IETF Cipher Suite definitions and
|
||||||
// OpenSSL-used Cipher Suite name.
|
// OpenSSL-used Cipher Suite name.
|
||||||
//
|
//
|
||||||
|
// Keep the table uniquely sorted by the IanaCipher field, in increasing order.
|
||||||
|
//
|
||||||
STATIC CONST TLS_CIPHER_MAPPING TlsCipherMappingTable[] = {
|
STATIC CONST TLS_CIPHER_MAPPING TlsCipherMappingTable[] = {
|
||||||
{ 0x0001, "NULL-MD5" }, /// TLS_RSA_WITH_NULL_MD5
|
{ 0x0001, "NULL-MD5" }, /// TLS_RSA_WITH_NULL_MD5
|
||||||
{ 0x0002, "NULL-SHA" }, /// TLS_RSA_WITH_NULL_SHA
|
{ 0x0002, "NULL-SHA" }, /// TLS_RSA_WITH_NULL_SHA
|
||||||
@ -71,22 +73,30 @@ TlsGetCipherMapping (
|
|||||||
IN UINT16 CipherId
|
IN UINT16 CipherId
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CONST TLS_CIPHER_MAPPING *CipherEntry;
|
INTN Left;
|
||||||
UINTN TableSize;
|
INTN Right;
|
||||||
UINTN Index;
|
INTN Middle;
|
||||||
|
|
||||||
CipherEntry = TlsCipherMappingTable;
|
|
||||||
TableSize = sizeof (TlsCipherMappingTable) / sizeof (TLS_CIPHER_MAPPING);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Search Cipher Mapping Table for IANA-OpenSSL Cipher Translation
|
// Binary Search Cipher Mapping Table for IANA-OpenSSL Cipher Translation
|
||||||
//
|
//
|
||||||
for (Index = 0; Index < TableSize; Index++, CipherEntry++) {
|
Left = 0;
|
||||||
|
Right = ARRAY_SIZE (TlsCipherMappingTable) - 1;
|
||||||
|
|
||||||
|
while (Right >= Left) {
|
||||||
|
Middle = (Left + Right) / 2;
|
||||||
|
|
||||||
|
if (CipherId == TlsCipherMappingTable[Middle].IanaCipher) {
|
||||||
//
|
//
|
||||||
// Translate IANA cipher suite name to OpenSSL name.
|
// Translate IANA cipher suite ID to OpenSSL name.
|
||||||
//
|
//
|
||||||
if (CipherEntry->IanaCipher == CipherId) {
|
return &TlsCipherMappingTable[Middle];
|
||||||
return CipherEntry;
|
}
|
||||||
|
|
||||||
|
if (CipherId < TlsCipherMappingTable[Middle].IanaCipher) {
|
||||||
|
Right = Middle - 1;
|
||||||
|
} else {
|
||||||
|
Left = Middle + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user