openssl之BIO系列之1---抽象的IO接口
生活随笔
收集整理的這篇文章主要介紹了
openssl之BIO系列之1---抽象的IO接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
BIO-抽象的IO接口
????http://blog.csdn.net/gdwzh/article/details/19194
????(作者:DragonKing Mail:wzhah@263.net 發布于:http://gdwzh.126.com openssl專業論壇)
????
????
????其實包含了很多種接口,用通用的函數接口,主要控制在BIO_METHOD中的不通實現函數控制,
????我初步估計了一下,大概有14種,包括6種filter型和8種source/sink型。
????
????BIO是在底層覆蓋了許多類型I/O接口細節的一種應用接口,如果你在程序中使用BIO,那么就可以和SSL連接、非加密的網絡連接以及文件IO進行透明的連接。
????有兩種不通的BIO接口,一種是source/sink型,一種是fileter型的。
????顧名思義,source/sink類型的BIO是數據源或數據目標(我不知道sink該怎么翻譯,據水木liaojzh說,一般是destination(目標、宿)的同義詞,大家自己理解吧,呵呵),例如,sokect BIO和文件BIO。
????而filter BIO就是把數據從一個BIO轉換到另外一個BIO或應用接口,在轉換過程中,這些數據可以不修改(如信息摘要BIO),也可以進行轉換。例如在加密BIO中,如果寫操作,數據就會被加密,如果是讀操作,數據就會被解密。
????
????BIO可以連接在一起成為一個BIO鏈(單個的BIO就是一個環節的BIO鏈的特例),如下是BIO的結構定義,可以看到它有上下環節的:
????struct bio_st
???? {
???? BIO_METHOD *method;
???? /* bio, mode, argp, argi, argl, ret */
???? long (*callback)(struct bio_st *,int,const char *,int, long,long);
???? char *cb_arg; /* first argument for the callback */
????
???? int init;
???? int shutdown;
???? int flags; /* extra storage */
???? int retry_reason;
???? int num;
???? void *ptr;
???? struct bio_st *next_bio; /* used by filter BIOs */BIO下聯
???? struct bio_st *prev_bio; /* used by filter BIOs */BIO上聯
???? int references;
???? unsigned long num_read;
???? unsigned long num_write;
????
???? CRYPTO_EX_DATA ex_data;
???? };
????一個BIO鏈通常包括一個source BIO和一個或多個filter BIO,數據從第一個BIO讀出或寫入,然后經過一系列BIO變化到輸出(通常是一個source/sink BIO)。
????
????http://blog.csdn.net/gdwzh/article/details/19194
????(作者:DragonKing Mail:wzhah@263.net 發布于:http://gdwzh.126.com openssl專業論壇)
????
????
????其實包含了很多種接口,用通用的函數接口,主要控制在BIO_METHOD中的不通實現函數控制,
????我初步估計了一下,大概有14種,包括6種filter型和8種source/sink型。
????
????BIO是在底層覆蓋了許多類型I/O接口細節的一種應用接口,如果你在程序中使用BIO,那么就可以和SSL連接、非加密的網絡連接以及文件IO進行透明的連接。
????有兩種不通的BIO接口,一種是source/sink型,一種是fileter型的。
????顧名思義,source/sink類型的BIO是數據源或數據目標(我不知道sink該怎么翻譯,據水木liaojzh說,一般是destination(目標、宿)的同義詞,大家自己理解吧,呵呵),例如,sokect BIO和文件BIO。
????而filter BIO就是把數據從一個BIO轉換到另外一個BIO或應用接口,在轉換過程中,這些數據可以不修改(如信息摘要BIO),也可以進行轉換。例如在加密BIO中,如果寫操作,數據就會被加密,如果是讀操作,數據就會被解密。
????
????BIO可以連接在一起成為一個BIO鏈(單個的BIO就是一個環節的BIO鏈的特例),如下是BIO的結構定義,可以看到它有上下環節的:
????struct bio_st
???? {
???? BIO_METHOD *method;
???? /* bio, mode, argp, argi, argl, ret */
???? long (*callback)(struct bio_st *,int,const char *,int, long,long);
???? char *cb_arg; /* first argument for the callback */
????
???? int init;
???? int shutdown;
???? int flags; /* extra storage */
???? int retry_reason;
???? int num;
???? void *ptr;
???? struct bio_st *next_bio; /* used by filter BIOs */BIO下聯
???? struct bio_st *prev_bio; /* used by filter BIOs */BIO上聯
???? int references;
???? unsigned long num_read;
???? unsigned long num_write;
????
???? CRYPTO_EX_DATA ex_data;
???? };
????一個BIO鏈通常包括一個source BIO和一個或多個filter BIO,數據從第一個BIO讀出或寫入,然后經過一系列BIO變化到輸出(通常是一個source/sink BIO)。
????
????注:這是根據openssl的BIO.pod翻譯和根據我自己的理解添加的,以后我會慢慢將BIO的細節說出來,希望大家一起努力。
總結
以上是生活随笔為你收集整理的openssl之BIO系列之1---抽象的IO接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于信任模型与交叉认证
- 下一篇: WinForm界面开发之布局控件Weif