1. 程式人生 > >關於mbed TLS的想法

關於mbed TLS的想法

最近想弄https,有兩個選擇,用openssl或者mbed TLS,前者過於龐大,後者簡單很多,功能也很全。
但發現不好整合到corelooper
問題在於mbed TLS做的太多,包括建立socket,協商溝通,收發資料等
最精簡的情況下面,我們需要的是mbed TLS只提供兩個核心介面,input和output

class MbedTls;
class MbedTlsCB
{
public:
    void Output(void *data, int bytes) = 0;
};

class MbedTls
{
public:
    int Input(void *data, int bytes)
    {
        return -1;
    }

    MbedTlsCB *mCB = nullptr;
};

即mbed TLS只負責處理資料,不用管資料是怎麼來的和怎麼發出去的,更加不要直接/間接呼叫socket api

目前還沒有找到解決辦法
 

https://tls.mbed.org上的帖子全部過了一遍,發現已有使用者提出類似的問題

https://tls.mbed.org/discussions/generic/adding-asynchronous-api-on-mbedtls

https://tls.mbed.org/discussions/generic/problems-with-handshake-implementation

https://tls.mbed.org/discussions/generic/handshake-with-asynchronous-io

另外也看了mbedtls提供的demo

ssl_server和ssl_server2

發現它只能依次逐個的響應使用者連線,或者用多執行緒來處理,每個執行緒響應一個使用者連線

沒法做到在一個執行緒中響應多個連線

感覺這樣很不好,現在還不清楚mbedtls內部細節,但如果是我來設計,肯定會用分層的概念,至少可分為兩層

libtls資料處理做成一個lib,只輸入和輸出資料,不做網路操作

libnet處理網路連線,收發

這兩個庫合起來完成目前mbedtls的功能,而第三方可以用自己的網路庫來替換libnet,只需要使用libtls即可