Changeset 464 for azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/src/bio.c
- Timestamp:
- Jun 22, 2021, 9:00:19 PM (3 years ago)
- Location:
- azure_iot_hub_f767zi/trunk/wolfssl-4.7.0
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/src/bio.c
r457 r464 160 160 static int wolfSSL_BIO_MD_read(WOLFSSL_BIO* bio, void* buf, int sz) 161 161 { 162 int ret = sz;163 164 162 if (wolfSSL_EVP_MD_CTX_type((WOLFSSL_EVP_MD_CTX*)bio->ptr) == NID_hmac) { 165 163 if (wolfSSL_EVP_DigestSignUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, buf, 166 164 sz) != WOLFSSL_SUCCESS) 167 165 { 168 ret =WOLFSSL_FATAL_ERROR;166 return WOLFSSL_FATAL_ERROR; 169 167 } 170 168 } 171 169 else { 172 if (wolfSSL_EVP_DigestUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, buf, ret)170 if (wolfSSL_EVP_DigestUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, buf, sz) 173 171 != WOLFSSL_SUCCESS) { 174 ret =WOLFSSL_FATAL_ERROR;175 } 176 } 177 return ret;172 return WOLFSSL_FATAL_ERROR; 173 } 174 } 175 return sz; 178 176 } 179 177 #endif /* WOLFCRYPT_ONLY */ … … 232 230 #ifndef NO_FILESYSTEM 233 231 if (bio && bio->type == WOLFSSL_BIO_FILE) { 234 ret = (int)XFREAD(buf, 1, len, (XFILE)bio->ptr); 232 if (bio->ptr) 233 ret = (int)XFREAD(buf, 1, len, (XFILE)bio->ptr); 234 #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR)\ 235 && !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2) 236 else 237 ret = (int)XREAD(bio->num, buf, len); 238 #endif 235 239 } 236 240 #endif … … 574 578 575 579 /* write bios */ 576 if (bio && bio->type == WOLFSSL_BIO_BIO) {580 if (bio->type == WOLFSSL_BIO_BIO) { 577 581 ret = wolfSSL_BIO_BIO_write(bio, data, len); 578 582 } 579 583 580 if (bio && bio->type == WOLFSSL_BIO_MEMORY) {584 if (bio->type == WOLFSSL_BIO_MEMORY) { 581 585 ret = wolfSSL_BIO_MEMORY_write(bio, data, len); 582 586 } … … 584 588 #ifndef NO_FILESYSTEM 585 589 if (bio && bio->type == WOLFSSL_BIO_FILE) { 586 ret = (int)XFWRITE(data, 1, len, (XFILE)bio->ptr); 590 if (bio->ptr) 591 ret = (int)XFWRITE(data, 1, len, (XFILE)bio->ptr); 592 #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR)\ 593 && !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2) 594 else 595 ret = (int)XWRITE(bio->num, data, len); 596 #endif 587 597 } 588 598 #endif 589 599 590 600 #ifndef WOLFCRYPT_ONLY 591 if (bio && bio->type == WOLFSSL_BIO_SSL) {601 if (bio->type == WOLFSSL_BIO_SSL) { 592 602 /* already got eof, again is error */ 593 603 if (front->eof) { … … 599 609 } 600 610 601 if (bio && bio->type == WOLFSSL_BIO_MD) {611 if (bio->type == WOLFSSL_BIO_MD) { 602 612 if (bio->next != NULL) { /* data passing through MD BIO */ 603 613 ret = wolfSSL_BIO_MD_write(bio, data, len); … … 608 618 /* advance to the next bio in list */ 609 619 bio = bio->next; 610 }611 612 if (frmt != NULL) {613 XFREE(frmt, front->heap, DYNAMIC_TYPE_TMP_BUFFER);614 620 } 615 621 … … 619 625 WOLFSSL_BIO_CB_WRITE | WOLFSSL_BIO_CB_RETURN, 620 626 (const char*)data, 0, 0, ret); 627 } 628 629 if (frmt != NULL) { 630 XFREE(frmt, front->heap, DYNAMIC_TYPE_TMP_BUFFER); 621 631 } 622 632 … … 943 953 } 944 954 945 if (bio->type == WOLFSSL_BIO_MD) { 946 /* MD is a wrapper only get next bio */ 955 if (bio->type == WOLFSSL_BIO_MD || 956 bio->type == WOLFSSL_BIO_BASE64) { 957 /* these are wrappers only, get next bio */ 947 958 while (bio->next != NULL) { 948 959 bio = bio->next; 949 if (bio->type != WOLFSSL_BIO_MD) { 960 if (bio->type == WOLFSSL_BIO_MD || 961 bio->type == WOLFSSL_BIO_BASE64) { 950 962 break; 951 963 } … … 1308 1320 const WOLFSSL_EVP_MD* md = 1309 1321 wolfSSL_EVP_MD_CTX_md((WOLFSSL_EVP_MD_CTX*)bio->ptr); 1322 wolfSSL_EVP_MD_CTX_cleanup((WOLFSSL_EVP_MD_CTX*)bio->ptr); 1310 1323 wolfSSL_EVP_MD_CTX_init((WOLFSSL_EVP_MD_CTX*)bio->ptr); 1311 1324 wolfSSL_EVP_DigestInit((WOLFSSL_EVP_MD_CTX*)bio->ptr, md); … … 1322 1335 1323 1336 #ifndef NO_FILESYSTEM 1337 /** 1338 * Creates a new file BIO object 1339 * @param fd file descriptor for to use for the new object 1340 * @param close_flag BIO_NOCLOSE or BIO_CLOSE 1341 * @return New BIO object or NULL on failure 1342 */ 1343 WOLFSSL_BIO *wolfSSL_BIO_new_fd(int fd, int close_flag) 1344 { 1345 WOLFSSL_BIO* bio; 1346 1347 bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file()); 1348 if (!bio) { 1349 WOLFSSL_MSG("wolfSSL_BIO_new error"); 1350 return NULL; 1351 } 1352 1353 if (wolfSSL_BIO_set_fd(bio, fd, close_flag) != WOLFSSL_SUCCESS) { 1354 wolfSSL_BIO_free(bio); 1355 WOLFSSL_MSG("wolfSSL_BIO_set_fp error"); 1356 return NULL; 1357 } 1358 1359 return bio; 1360 } 1361 1324 1362 long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c) 1325 1363 { … … 1528 1566 long wolfSSL_BIO_set_nbio(WOLFSSL_BIO* bio, long on) 1529 1567 { 1568 int ret = 0; 1530 1569 #ifndef WOLFSSL_DTLS 1531 1570 (void)on; … … 1539 1578 int flag = XFCNTL(bio->num, F_GETFL, 0); 1540 1579 if (on) 1541 XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK);1580 ret = XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK); 1542 1581 else 1543 XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK);1582 ret = XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK); 1544 1583 } 1545 1584 #endif … … 1555 1594 break; 1556 1595 } 1557 1558 return 1; 1596 if (ret != -1) 1597 return 1; 1598 else 1599 return 0; 1559 1600 } 1560 1601 … … 1678 1719 int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO* bio, void* p) 1679 1720 { 1721 WOLFSSL_BIO* mem_bio; 1680 1722 WOLFSSL_ENTER("wolfSSL_BIO_get_mem_data"); 1681 1723 … … 1683 1725 return WOLFSSL_FATAL_ERROR; 1684 1726 1727 mem_bio = bio; 1728 /* Return pointer from last memory BIO in chain */ 1729 while (bio->next) { 1730 bio = bio->next; 1731 if (bio->type == WOLFSSL_BIO_MEMORY) 1732 mem_bio = bio; 1733 } 1734 1685 1735 if (p) { 1686 *(byte**)p = (byte*) bio->ptr;1687 } 1688 1689 return bio->num;1736 *(byte**)p = (byte*)mem_bio->ptr; 1737 } 1738 1739 return mem_bio->num; 1690 1740 } 1691 1741
Note:
See TracChangeset
for help on using the changeset viewer.