|
38 | 38 |
|
39 | 39 | #include <wolfssl/ssl.h> |
40 | 40 | #include <wolfssl/ocsp.h> |
| 41 | +#include <wolfssl/wolfcrypt/error-crypt.h> |
| 42 | +#include <wolfssl/error-ssl.h> |
41 | 43 |
|
42 | 44 | #include <wolfssh/internal.h> |
43 | 45 | #include <wolfssh/certman.h> |
@@ -186,8 +188,46 @@ int wolfSSH_CERTMAN_VerifyCert_buffer(WOLFSSH_CERTMAN* cm, |
186 | 188 |
|
187 | 189 | WLOG_ENTER(); |
188 | 190 |
|
189 | | - ret = wolfSSL_CertManagerVerifyBuffer(cm->cm, cert, certSz, |
190 | | - WOLFSSL_FILETYPE_ASN1); |
| 191 | + if (ret == WS_SUCCESS) { |
| 192 | + ret = wolfSSL_CertManagerVerifyBuffer(cm->cm, cert, certSz, |
| 193 | + WOLFSSL_FILETYPE_ASN1); |
| 194 | + |
| 195 | + if (ret == WOLFSSL_SUCCESS) { |
| 196 | + ret = WS_SUCCESS; |
| 197 | + } |
| 198 | + else if (ret == ASN_NO_SIGNER_E) { |
| 199 | + WLOG(WS_LOG_CERTMAN, "cert verify: no signer"); |
| 200 | + ret = WS_CERT_NO_SIGNER_E; |
| 201 | + } |
| 202 | + else if (ret == ASN_AFTER_DATE_E) { |
| 203 | + WLOG(WS_LOG_CERTMAN, "cert verify: expired"); |
| 204 | + ret = WS_CERT_EXPIRED_E; |
| 205 | + } |
| 206 | + else if (ret == ASN_SIG_CONFIRM_E) { |
| 207 | + WLOG(WS_LOG_CERTMAN, "cert verify: bad sig"); |
| 208 | + ret = WS_CERT_SIG_CONFIRM_E; |
| 209 | + } |
| 210 | + else { |
| 211 | + WLOG(WS_LOG_CERTMAN, "cert verify: other error (%d)", ret); |
| 212 | + ret = WS_CERT_OTHER_E; |
| 213 | + } |
| 214 | + } |
| 215 | + |
| 216 | + if (ret == WS_SUCCESS) { |
| 217 | + ret = wolfSSL_CertManagerCheckOCSP(cm->cm, (byte*)cert, certSz); |
| 218 | + |
| 219 | + if (ret == WOLFSSL_SUCCESS) { |
| 220 | + ret = WS_SUCCESS; |
| 221 | + } |
| 222 | + else if (ret == OCSP_CERT_REVOKED) { |
| 223 | + WLOG(WS_LOG_CERTMAN, "ocsp lookup: ocsp revoked"); |
| 224 | + ret = WS_CERT_REVOKED_E; |
| 225 | + } |
| 226 | + else { |
| 227 | + WLOG(WS_LOG_CERTMAN, "ocsp lookup: other error (%d)", ret); |
| 228 | + ret = WS_CERT_OTHER_E; |
| 229 | + } |
| 230 | + } |
191 | 231 |
|
192 | 232 | WLOG_LEAVE(ret); |
193 | 233 | return ret; |
|
0 commit comments