Ignore:
Timestamp:
Jun 22, 2021, 9:00:19 PM (3 years ago)
Author:
coas-nagasima
Message:

WolfSSLとAzure IoT SDKを更新

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  
    160160static int wolfSSL_BIO_MD_read(WOLFSSL_BIO* bio, void* buf, int sz)
    161161{
    162     int ret = sz;
    163 
    164162    if (wolfSSL_EVP_MD_CTX_type((WOLFSSL_EVP_MD_CTX*)bio->ptr) == NID_hmac) {
    165163        if (wolfSSL_EVP_DigestSignUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, buf,
    166164                        sz) != WOLFSSL_SUCCESS)
    167165        {
    168             ret = WOLFSSL_FATAL_ERROR;
     166            return WOLFSSL_FATAL_ERROR;
    169167        }
    170168    }
    171169    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)
    173171                != WOLFSSL_SUCCESS) {
    174             ret = WOLFSSL_FATAL_ERROR;
    175         }
    176     }
    177     return ret;
     172            return WOLFSSL_FATAL_ERROR;
     173        }
     174    }
     175    return sz;
    178176}
    179177#endif /* WOLFCRYPT_ONLY */
     
    232230    #ifndef NO_FILESYSTEM
    233231        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
    235239        }
    236240    #endif
     
    574578
    575579        /* write bios */
    576         if (bio && bio->type == WOLFSSL_BIO_BIO) {
     580        if (bio->type == WOLFSSL_BIO_BIO) {
    577581            ret = wolfSSL_BIO_BIO_write(bio, data, len);
    578582        }
    579583
    580         if (bio && bio->type == WOLFSSL_BIO_MEMORY) {
     584        if (bio->type == WOLFSSL_BIO_MEMORY) {
    581585            ret = wolfSSL_BIO_MEMORY_write(bio, data, len);
    582586        }
     
    584588    #ifndef NO_FILESYSTEM
    585589        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
    587597        }
    588598    #endif
    589599
    590600    #ifndef WOLFCRYPT_ONLY
    591         if (bio && bio->type == WOLFSSL_BIO_SSL) {
     601        if (bio->type == WOLFSSL_BIO_SSL) {
    592602            /* already got eof, again is error */
    593603            if (front->eof) {
     
    599609        }
    600610
    601         if (bio && bio->type == WOLFSSL_BIO_MD) {
     611        if (bio->type == WOLFSSL_BIO_MD) {
    602612            if (bio->next != NULL) { /* data passing through MD BIO */
    603613                ret = wolfSSL_BIO_MD_write(bio, data, len);
     
    608618        /* advance to the next bio in list */
    609619        bio = bio->next;
    610     }
    611 
    612     if (frmt != NULL) {
    613         XFREE(frmt, front->heap, DYNAMIC_TYPE_TMP_BUFFER);
    614620    }
    615621
     
    619625                                 WOLFSSL_BIO_CB_WRITE | WOLFSSL_BIO_CB_RETURN,
    620626                                 (const char*)data, 0, 0, ret);
     627    }
     628
     629    if (frmt != NULL) {
     630        XFREE(frmt, front->heap, DYNAMIC_TYPE_TMP_BUFFER);
    621631    }
    622632
     
    943953    }
    944954
    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 */
    947958        while (bio->next != NULL) {
    948959            bio = bio->next;
    949             if (bio->type != WOLFSSL_BIO_MD) {
     960            if (bio->type == WOLFSSL_BIO_MD ||
     961                    bio->type == WOLFSSL_BIO_BASE64) {
    950962                break;
    951963            }
     
    13081320                const WOLFSSL_EVP_MD* md =
    13091321                    wolfSSL_EVP_MD_CTX_md((WOLFSSL_EVP_MD_CTX*)bio->ptr);
     1322                wolfSSL_EVP_MD_CTX_cleanup((WOLFSSL_EVP_MD_CTX*)bio->ptr);
    13101323                wolfSSL_EVP_MD_CTX_init((WOLFSSL_EVP_MD_CTX*)bio->ptr);
    13111324                wolfSSL_EVP_DigestInit((WOLFSSL_EVP_MD_CTX*)bio->ptr, md);
     
    13221335
    13231336#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 */
     1343WOLFSSL_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
    13241362long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c)
    13251363{
     
    15281566long wolfSSL_BIO_set_nbio(WOLFSSL_BIO* bio, long on)
    15291567{
     1568    int ret = 0;
    15301569    #ifndef WOLFSSL_DTLS
    15311570    (void)on;
     
    15391578                int flag = XFCNTL(bio->num, F_GETFL, 0);
    15401579                if (on)
    1541                     XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK);
     1580                    ret = XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK);
    15421581                else
    1543                     XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK);
     1582                    ret = XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK);
    15441583            }
    15451584        #endif
     
    15551594            break;
    15561595    }
    1557 
    1558     return 1;
     1596    if (ret != -1)
     1597        return 1;
     1598    else
     1599        return 0;
    15591600}
    15601601
     
    16781719int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO* bio, void* p)
    16791720{
     1721    WOLFSSL_BIO* mem_bio;
    16801722    WOLFSSL_ENTER("wolfSSL_BIO_get_mem_data");
    16811723
     
    16831725        return WOLFSSL_FATAL_ERROR;
    16841726
     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
    16851735    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;
    16901740}
    16911741
Note: See TracChangeset for help on using the changeset viewer.