|
1 | 1 | /** @file
|
2 | 2 | Implementation of EFI TLS Protocol Interfaces.
|
3 | 3 |
|
4 |
| - Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR> |
| 4 | + Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR> |
5 | 5 |
|
6 | 6 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
7 | 7 |
|
@@ -56,12 +56,16 @@ TlsSetSessionData (
|
56 | 56 | UINT16 *CipherId;
|
57 | 57 | CONST EFI_TLS_CIPHER *TlsCipherList;
|
58 | 58 | UINTN CipherCount;
|
| 59 | + CONST EFI_TLS_VERIFY_HOST *TlsVerifyHost; |
| 60 | + EFI_TLS_VERIFY VerifyMethod; |
| 61 | + UINTN VerifyMethodSize; |
59 | 62 | UINTN Index;
|
60 | 63 |
|
61 | 64 | EFI_TPL OldTpl;
|
62 | 65 |
|
63 |
| - Status = EFI_SUCCESS; |
64 |
| - CipherId = NULL; |
| 66 | + Status = EFI_SUCCESS; |
| 67 | + CipherId = NULL; |
| 68 | + VerifyMethodSize = sizeof (EFI_TLS_VERIFY); |
65 | 69 |
|
66 | 70 | if (This == NULL || Data == NULL || DataSize == 0) {
|
67 | 71 | return EFI_INVALID_PARAMETER;
|
@@ -148,6 +152,40 @@ TlsSetSessionData (
|
148 | 152 | }
|
149 | 153 |
|
150 | 154 | TlsSetVerify (Instance->TlsConn, *((UINT32 *) Data));
|
| 155 | + break; |
| 156 | + case EfiTlsVerifyHost: |
| 157 | + if (DataSize != sizeof (EFI_TLS_VERIFY_HOST)) { |
| 158 | + Status = EFI_INVALID_PARAMETER; |
| 159 | + goto ON_EXIT; |
| 160 | + } |
| 161 | + |
| 162 | + TlsVerifyHost = (CONST EFI_TLS_VERIFY_HOST *) Data; |
| 163 | + |
| 164 | + if ((TlsVerifyHost->Flags & EFI_TLS_VERIFY_FLAG_ALWAYS_CHECK_SUBJECT) != 0 && |
| 165 | + (TlsVerifyHost->Flags & EFI_TLS_VERIFY_FLAG_NEVER_CHECK_SUBJECT) != 0) { |
| 166 | + Status = EFI_INVALID_PARAMETER; |
| 167 | + goto ON_EXIT; |
| 168 | + } |
| 169 | + |
| 170 | + if ((TlsVerifyHost->Flags & EFI_TLS_VERIFY_FLAG_NO_WILDCARDS) != 0 && |
| 171 | + ((TlsVerifyHost->Flags & EFI_TLS_VERIFY_FLAG_NO_PARTIAL_WILDCARDS) != 0 || |
| 172 | + (TlsVerifyHost->Flags & EFI_TLS_VERIFY_FLAG_MULTI_LABEL_WILDCARDS) != 0)) { |
| 173 | + Status = EFI_INVALID_PARAMETER; |
| 174 | + goto ON_EXIT; |
| 175 | + } |
| 176 | + |
| 177 | + Status = This->GetSessionData (This, EfiTlsVerifyMethod, &VerifyMethod, &VerifyMethodSize); |
| 178 | + if (EFI_ERROR (Status)) { |
| 179 | + goto ON_EXIT; |
| 180 | + } |
| 181 | + |
| 182 | + if ((VerifyMethod & EFI_TLS_VERIFY_PEER) == 0) { |
| 183 | + Status = EFI_INVALID_PARAMETER; |
| 184 | + goto ON_EXIT; |
| 185 | + } |
| 186 | + |
| 187 | + Status = TlsSetVerifyHost (Instance->TlsConn, TlsVerifyHost->Flags, TlsVerifyHost->HostName); |
| 188 | + |
151 | 189 | break;
|
152 | 190 | case EfiTlsSessionID:
|
153 | 191 | if (DataSize != sizeof (EFI_TLS_SESSION_ID)) {
|
|
0 commit comments