原文:http://blog.csdn.net/dog250/article/details/24552307
作者:Bomb250
日期:2014年04月26日 20:00:02

引子

在 OpenSSL 心脏出血之后,我相信很多人都出了血,并且流了泪...网上瞬间出现了大量吐嘈 OpenSSL 的文章或段子,仿佛内心的窝火一瞬间被释放了出来,跟着这场疯闹,我也吐一下嘈,以雪这些年被 OpenSSL 蹂躏之辱,也许可以顺便展现一下我的无知与愚昧...

典型的OpenSSL代码风格

some_function(...)
{  ...  if (s->session->sess_cert != NULL)  {
#ifndef OPENSSL_NO_RSA  if (s->session->sess_cert->peer_rsa_tmp != NULL)  {  ...  }
#endif  ...  }  else  {  ...;  }  ...
#ifndef OPENSSL_NO_RSA  if (alg & SSL_kRSA)  {  ...  }
#else /* OPENSSL_NO_RSA */  if (0)  ;
#endif
#ifndef OPENSSL_NO_DH  else if (alg & SSL_kEDH)  {  ...
#ifndef OPENSSL_NO_RSA  if (alg & SSL_aRSA)  ...
#else  if (0)  ;
#endif
#ifndef OPENSSL_NO_DSA  else if (alg & SSL_aDSS)  ...;
#endif  /* else anonymous DH, so no certificate or pkey. */  ...  }  else if ((alg & SSL_kDHr) || (alg & SSL_kDHd))  {  ...  goto f_err;  }
#endif /* !OPENSSL_NO_DH */  #ifndef OPENSSL_NO_ECDH  else if (alg & SSL_kECDHE)  {  ...  if (0) ;
#ifndef OPENSSL_NO_RSA  else if (alg & SSL_aRSA)  ...;
#endif
#ifndef OPENSSL_NO_ECDSA  else if (alg & SSL_aECDSA)  ...;
#endif  /* else anonymous ECDH, so no certificate or pkey. */  ...  }  else if (alg & SSL_kECDH)  {  ...  goto f_err;  }
#endif /* !OPENSSL_NO_ECDH */  if (alg & SSL_aFZA)  {  ...  goto f_err;  }  /* p points to the next byte, there are 'n' bytes left */  /* if it was signed, check the signature */  if (pkey != NULL)  {  ...  if ((i != n) || (n > j) || (n <= 0))  {  /* wrong packet length */  ...  goto f_err;  }  #ifndef OPENSSL_NO_RSA  if (pkey->type == EVP_PKEY_RSA)  {  ...  for (num=2; num > 0; num--)  {  ...  }  ...  if (i < 0)  {  ...  goto f_err;  }  if (i == 0)  {  /* bad signature */  ...  goto f_err;  }  }  else
#endif
#ifndef OPENSSL_NO_DSA  if (pkey->type == EVP_PKEY_DSA)  {  /* lets do DSS */  ...  if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)  {  /* bad signature */  ...  goto f_err;  }  }  else
#endif
#ifndef OPENSSL_NO_ECDSA  if (pkey->type == EVP_PKEY_EC)  {  /* let's do ECDSA */  ...  if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)  {  /* bad signature */  ...  goto f_err;  }  }  else
#endif  {  ...  goto err;  }  }  else  {  /* still data left over */  if (!(alg & SSL_aNULL))  {  ...  goto err;  }  if (n != 0)  {  ...  goto f_err;  }  }  ...  return(1);
f_err:  ...;
err:  ...;
#ifndef OPENSSL_NO_RSA  if (rsa != NULL)  RSA_free(rsa);
#endif
#ifndef OPENSSL_NO_DH  if (dh != NULL)  DH_free(dh);
#endif
#ifndef OPENSSL_NO_ECDH  ...;  if (ecdh != NULL)  EC_KEY_free(ecdh);
#endif  ...;  return(-1);
}

【转载】令人作呕的OpenSSL,转自CSDN博主Bomb250相关推荐

  1. 【整理自官方公开资料】CSDN博主排名影响因素

    我们都知道旧的排名系统是根据积分排名的. 而根据CSDN官方的消息,新的积分系统是在原来积分制的基础上,加上文章的收藏,分享,点赞,评论等数据权重,形成一个新的博客总排名体系. 新排名系统参考的部分指 ...

  2. 如何增加自己的文章在csdn的曝光量-参考CSDN博主排名更新公告

    前言 不知不觉已经在CSDN上3年,但是本人也是刚刚在CSDN上创作文章,成为博主没几天,我看了这几天文章的浏览数据不尽人意,时常开始反思是不是自己的文章不够好.毕竟都是理工科出身,文采水平有限,但是 ...

  3. CSDN博主排行榜上线!

    熬过了困苦的黑夜,算法小哥哥终于迎来了黎明的曙光,在与模型的无数次亲密"调戏"之后,模型终于给出了他想要的答案,与此同时,算法小哥哥的发际线又向资深迈进了一步. 就这样,CSDN博 ...

  4. 解决树莓派鼠标延迟/迟滞问题-转CSDN博主“Deiki”-sunziren

    解决树莓派鼠标延迟/迟滞问题-转CSDN博主"Deiki"-sunziren 参考文章: (1)解决树莓派鼠标延迟/迟滞问题-转CSDN博主"Deiki"-su ...

  5. 用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)

    用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了...(附源码) 我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成pdf格式 ...

  6. csdn 博主排行榜

    没有入口,只能自己找入口 csdn 博主排行榜 https://blog.csdn.net/rank/list/total

  7. 运用爬虫给喜欢的csdn博主刷评论教程(超简单)

    每日分享: 人们看起来好像是有选择的,但这其实是一个错觉.只要你的思维及其受制约的模式控制着你的生活,你还会有什么选择?没有. 重要提示:第一天我大概刷了50个评论(用的同一句话,在同一篇文章刷的), ...

  8. 沉痛悼念CSDN博主、年仅26岁的音视频专家雷霄骅

    CSDN的老朋友.连续两届CSDN博客之星.微软MVP.博客排名52位.在中国传媒大学通信与信息系统专业攻读博士的雷霄骅,于2016年7月17日凌晨猝死在学校主楼五层,并于7月23号安葬.据相关报道称 ...

  9. CSDN博主排名更新公告

    https://blogdev.blog.csdn.net/article/details/101441371CSDN博主排名更新公告

最新文章

  1. Glib实例学习(5)平衡二叉树
  2. python进程数上限_python-使用multiprocessing.Process并发进程数最多
  3. Class类---反射学习笔记(一)
  4. Avalonia跨平台入门第二十二篇之人脸检测
  5. 【HDU - 5605】 geometry(水,数学题,推公式)
  6. 2的次幂表示【递归算法训练】
  7. JetBrains IDEA实用快捷键
  8. java 中linux命令参数说明,java中linux命令参数说明
  9. (转)基于MVC4+EasyUI的Web开发框架形成之旅--权限控制
  10. Fiddler安装教程(图文版)
  11. Python+OpenCV:Optical Flow(光流)
  12. DTO,VO,POJO,JavaBeans之间的区别?
  13. 力扣-746. 使用最小花费爬楼梯
  14. 交换机组网最常见的8大故障以及如何解决
  15. 防火墙限制TCP流量新方法
  16. 计算机基础access2010实训,大学计算机基础access实验.doc
  17. DSP SRIO接口认识
  18. mysql 启动 spawn错误_supervisor ERROR (spawn error):错误解决
  19. 爬虫软件尝试-后羿采集器:批量免费抓取网页数据
  20. python3 cookbook中常遇问题的解答记录

热门文章

  1. Linux type stat file
  2. nft文件传输_Nancy之文件上传与下载
  3. oracle安装 插件的执行方法失败_解决 VS Code 中 golang.org 被墙导致的 Go 插件安装失败问题...
  4. Makefile:GCC CFLAGS变量和LDFLAGS变量
  5. 797. 差分(有图解)
  6. 字体图标的使用(HTML、CSS)
  7. 2018我们要赢 (5 分)
  8. Qt之QListView使用
  9. Open3d之交互式可视化
  10. Linux常用基本命令:三剑客命令之-awk内置函数用法