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)。

注:这是根据openssl的BIO.pod翻译和根据我自己的理解添加的,以后我会慢慢将BIO的细节说出来,希望大家一起努力。

openssl之BIO系列之1---抽象的IO接口相关推荐

  1. openssl之BIO系列之16---BIO对(pair)类型BIO

    BIO对(pair)类型BIO ---根据openssl doc\crypto\bio_s_bio.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net  ...

  2. OpenSSL之X509系列

    OpenSSL之X509系列之1---引言和X509概述 [引言]     X509是系列的函数在我们开发与PKI相关的应用的时候我们都会用到,但是OpenSSL中对X509的描述并不是很多,鉴于些, ...

  3. openssl之EVP系列之2---对称加密算法概述

    openssl之EVP系列之2---对称加密算法概述     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc ...

  4. openssl之EVP系列之1---算法封装

    openssl之EVP系列之1---算法封装     ---根据openssl doc/crypto/EVP.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah ...

  5. openssl之EVP系列之12---EVP_Seal系列函数介绍

    openssl之EVP系列之12---EVP_Seal系列函数介绍     ---根据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成     (作者:Dra ...

  6. openssl之EVP系列之5---EVP_Encrypt系列函数具体解释(二)

    openssl之EVP系列之5---EVP_Encrypt系列函数详细解释(二)     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...

  7. openssl之EVP系列之11---EVP_Verify系列函数介绍

    openssl之EVP系列之11---EVP_Verify系列函数介绍     ---根据openssl doc/crypto/EVP_VerifyInit.pod翻译和自己的理解写成     (作者 ...

  8. (转帖)对抽象编程:接口和抽象类

    [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类-王涛 [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类 Author:王涛 Date:2007-4-12 ©2007 Anytao ...

  9. php 抽象 接口类 区别,PHP 抽象類和接口區別

    php中抽象類和接口的區別 1) 概念 面向對象的三大概念:封裝,繼承,多態 把屬性和方法封裝起來就是類. 一個類的屬性和方法被另外的類復制就是繼承,PHP里面的任何類都可以被繼承,被繼承的屬性和方法 ...

最新文章

  1. CVPR 2019 | 惊艳的SiamMask:开源快速同时进行目标跟踪与分割算法
  2. java直接打开word_Java
  3. list vue 删除后页面渲染_浅谈Vue项目实战(页面渲染+事件绑定)
  4. hdu 4513(manacher+dp)
  5. 《TCP/IP Sockets 编程》笔记5
  6. 数学作图工具_科研论文作图系列-从PPT到AI (一)
  7. 酱茄企业官网多端开源小程序源码 v1.0.0
  8. Indy9的IdFTP完全使用
  9. 线性表:1.什么是线性表
  10. 缅甸是一个怎样的国家?第一次去这里有什么注意事项?
  11. python版本升级后编译_Centos6.X 编译安装升级Python版本到3.X
  12. html的table效果,html的table用法(让网页的视觉效果显示出来)
  13. 在Mac上安装ie10浏览器
  14. 安装搭建Reviewboard 实现pre-commit-review
  15. 雷达原理第五版微盘pdf下载_雷达原理电子书(雷达原理PDF格式电子书)
  16. HDU3579 Hello Kiki(CRT非互质)
  17. android商品标签,TextView首行缩进效果(商品标签)
  18. 开发团队建设与管理的一些心得
  19. ailoop2里面的1个待考察的,在ailoop3里面的操作。(先使用海巨人,不使用英雄技能召唤图腾的问题)...
  20. 【服务器数据恢复】LINUX误删除、误格式化的数据恢复

热门文章

  1. 前后端分离中使用基于jwt的token进行身份认证
  2. JDK1.8新特性:Stream流
  3. pc控制iphone的软件_如何在iPhone上下载升级最新的iOS 13公测版
  4. redis 设置连接数配置修改 java 最大连接数_Spring Boot集成mysql与Redis
  5. Linux 环境下vs2015 qt,QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015)
  6. [实验教程]网工都要会的IPv6 基础配置
  7. 学计算机的要做文档吗,我是如何学习计算机编程的
  8. 水准网测量平差matlab_【干货】史诗级测量大神分享道路测量全过程经验
  9. Postman导入和导出接口
  10. 农行计算机安全制度,制度体系之农行 数据中心计算机安全检查实施细则.doc