ASN1对象与OID之间转换的函数,经常会用到.

Name

OBJ_nid2obj, OBJ_nid2ln, OBJ_nid2sn, OBJ_obj2nid, OBJ_txt2nid, OBJ_ln2nid, OBJ_sn2nid, OBJ_cmp, OBJ_dup, OBJ_txt2obj, OBJ_obj2txt, OBJ_create, OBJ_cleanup - ASN1 object utility functions

//OBJ_nid2obj, OBJ_nid2ln, OBJ_nid2sn, OBJ_obj2nid, OBJ_txt2nid, OBJ_ln2nid, OBJ_sn2nid, OBJ_cmp, OBJ_dup, OBJ_txt2obj, OBJ_obj2txt, OBJ_create, OBJ_cleanup这些是ASN1对象的工具函数.

Synopsis

//函数定义如下:

  • ASN1_OBJECT * OBJ_nid2obj(int n);
  • const char *  OBJ_nid2ln(int n);
  • const char *  OBJ_nid2sn(int n);
  • int OBJ_obj2nid(const ASN1_OBJECT *o);
  • int OBJ_ln2nid(const char *ln);
  • int OBJ_sn2nid(const char *sn);
  • int OBJ_txt2nid(const char *s);
  • ASN1_OBJECT * OBJ_txt2obj(const char *s, int no_name);
  • int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name);
  • int OBJ_cmp(const ASN1_OBJECT *a,const ASN1_OBJECT *b);
  • ASN1_OBJECT * OBJ_dup(const ASN1_OBJECT *o);
  • int OBJ_create(const char *oid,const char *sn,const char *ln);
  • void OBJ_cleanup(void);

Description

//ASN1对象工具函数可将ASN1对象处理表现成一个OID的类型

The ASN1 object utility functions process ASN1_OBJECT structures which are a representation of the ASN1 OBJECT IDENTIFIER ( OID ) type.

  • OBJ_nid2obj(), OBJ_nid2ln() and OBJ_nid2sn() convert the NID n to an ASN1_OBJECT structure, its long name and its short name respectively, or NULL is an error occurred. 
  • OBJ_obj2nid(), OBJ_ln2nid(), OBJ_sn2nid() return the corresponding NID for the object o, the long name <ln> or the short name <sn> respectively or NID_undef if an error occurred.
  • OBJ_txt2nid() returns NID corresponding to text string <s>. s can be a long name, a short name or the numerical respresentation of an object.
  • OBJ_txt2obj() converts the text string s into an ASN1_OBJECT structure. If no_name is 0 then long names and short names will be interpreted as well as numerical forms. If no_name is 1 only the numerical form is acceptable.
  • OBJ_obj2txt() converts the ASN1_OBJECT a into a textual representation. The representation is written as a null terminated string to buf at most buf_len bytes are written, truncating the result if necessary. The total amount of space required is returned. If no_name is 0 then if the object has a long or short name then that will be used, otherwise the numerical form will be used. If no_name is 1 then the numerical form will always be used.
  • OBJ_cmp() compares a to b. If the two are identical 0 is returned.
  • OBJ_dup() returns a copy of o.
  • OBJ_create() adds a new object to the internal table. oid is the numerical form of the object, sn the short name and ln the long name. A new NID is returned for the created object.
  • OBJ_cleanup() cleans up OpenSSLs internal object table: this should be called before an application exits if any new objects were added using OBJ_create().

Notes

Objects in OpenSSL can have a short name, a long name and a numerical identifier ( NID ) associated with them. A standard set of objects is represented in an internal table. The appropriate values are defined in the header file objects.h.

//Openssl的ASN1对象均是有个简称,全称以及一个数字类型的标识.一个标准的对象集合在以一个内部表形式存在,具体定义在头文件objects.h中.

For example 
the OID for commonName has the following definitions:

#define SN_commonName                   "CN"

#define LN_commonName                   "commonName"

#define NID_commonName                  13

New objects can be added by calling OBJ_create().

Table objects have certain advantages over other objects: for example their NIDs can be used in a C language switch statement. They are also static constant structures which are shared: that is there is only a single constant structure for each table object.

Objects which are not in the table have the NID value NID_undef.

Objects do not need to be in the internal tables to be processed, the functions OBJ_txt2obj() and OBJ_obj2txt() can process the numerical form of an OID .

Examples

Create an object for commonName:

ASN1_OBJECT *o;

o = OBJ_nid2obj(NID_commonName);

Check if an object is commonName

if (OBJ_obj2nid(obj) == NID_commonName)

/* Do something */

Create a new NID and initialize an object from it:

int new_nid;

ASN1_OBJECT *obj;

new_nid = OBJ_create("1.2.3.4", "NewOID", "New Object Identifier");

//这样我们就可以通过OBJ_create函数,创建自己的ASN1对象了.

obj = OBJ_nid2obj(new_nid);

Create a new object directly:

obj = OBJ_txt2obj("1.2.3.4", 1);

Bugs

OBJ_obj2txt() is awkward and messy to use: it doesn't follow the convention of other OpenSSL functions where the buffer can be set to NULL to determine the amount of data that should be written. Instead buf must point to a valid buffer and buf_len should be set to a positive value. A buffer length of 80 should be more than enough to handle any OID encountered in practice.

Return Values

OBJ_nid2obj() returns an ASN1_OBJECT structure or NULL is an error occurred.

OBJ_nid2ln() and OBJ_nid2sn() returns a valid string or NULL on error.

OBJ_obj2nid(), OBJ_ln2nid(), OBJ_sn2nid() and OBJ_txt2nid() return a NID or NID_undef on error.

See Also

err_get_error(3)

History

TBA

更详细的英文说明地址:http://linux.die.net/man/3/obj_ln2nid

本文转自风车车  博客园博客,原文链接:http://www.cnblogs.com/xray2005/archive/2009/07/29/1534157.html,如需转载请自行联系原作者

ASN1对象与OID之间转换的函数相关推荐

  1. JAXB实现java对象与xml之间转换

    一.Jaxb处理java对象和xml之间转换常用的annotation有: 1. @XmlType 2. @XmlElement 3. @XmlRootElement 4. @XmlAttribute ...

  2. jdk安装教程_使用JDK 8流在包装对象的集合和包装对象的集合之间转换

    jdk安装教程 我发现使用基于Java的应用程序时,装饰器和适配器有时会很有用. 这些"包装器"在各种情况下都可以很好地工作,并且相当容易理解和实现,但是当需要包装对象的层次结构而 ...

  3. jdk 8 集合对象排序_使用JDK 8流在包装对象的集合和包装对象的集合之间转换

    jdk 8 集合对象排序 我发现使用基于Java的应用程序时, 装饰器和适配器有时会很有用. 这些"包装器"在各种情况下都能很好地工作,并且相当容易理解和实现,但是当需要包装对象的 ...

  4. 使用JDK 8流在包装对象的集合和包装对象的集合之间转换

    我发现使用基于Java的应用程序时, 装饰器和适配器有时会很有用. 这些"包装器"在各种情况下都能很好地工作,并且相当容易理解和实现,但是当需要包装对象的层次结构而不是单个对象时, ...

  5. 对象和String之间转换(包含基本类型转换)

    开发过程中,一般将对象转换成String 或String 转对象 大部分通过fastjson的方式,但是各种json框架在处理基本类型的时候,会显得力不从心.这里最优秀的还是jackson的转换方式. ...

  6. 对象转数组_fastJson中java对象 jsonObject jsonArray之间转换

    一.介绍 简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 二.使用 1.java对象转jsonObject User u = new User(); ...

  7. Java 中,类、类对象、泛型之间的转换

    Java 中,类.类对象.泛型之间的转换 R 为非泛型 获得类 通过类型名来获得类 通过对象来获得类 通过类名字符串来获得类 通过类来获得类名字符串 通过类来获得对象 使用 R 的无参数构造器来创建对 ...

  8. js解析json字符串、对象与json之间的转换

    前言 在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. js解析json字符串 // JSON字符串 'v ...

  9. java 类之间转换,java中类对象之间的类型转换

    类似于基本数据类型之间的强制类型转换. 存在继承关系的父类对象和子类对象之间也可以 在一定条件之下相互转换. 这种转换需要遵守以下原则: 1.子类对象可以被视为是其父类的一个对象 2.父类对象不能被当 ...

最新文章

  1. python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...
  2. C++中有string类,string是一个类不是一种类型,c语言中没有
  3. Judge Route Circle
  4. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器
  5. 算法-排序-k排序(算法导论第三版第八章思考题8-5)
  6. python 去除nan inf_Python实现半自动评分卡建模(附代码)
  7. IT结合测试时,准备数据的注意事项(之二:表之间的关系)。
  8. 使用python制作ArcGIS插件(2)代码编写
  9. 历时3个月终克2.1大礼包
  10. php mysql delimiter,MySql delimiter的作用是什么_MySQL
  11. java ognl 值栈_ognl-值栈基本操作
  12. :root选择器的妙用【2021.11.14】
  13. 计算机硕士论文解读,计算机专业硕士论文提纲范文大全 计算机专业硕士论文提纲如何写...
  14. JS实现最美的3D宇宙特效
  15. StoneTab标签页CAD插件 2.6.0
  16. parsec(The parsec benchmark suit )使用教程
  17. 流利阅读 2019.1.5 Gatekeeper at Japan’s ‘Suicide Forest’ hopes music can save lives
  18. 帧服务器支持会声会影哪个版本,会声会影哪个版本好用
  19. 【小组专题四点五:素数】素数的分布,素数定理,素数猜想与兰道问题
  20. Windows下误删EFI分区重建引导简单教程

热门文章

  1. php html小项目,使用PHP把HTML生成PDF文件的几个开源项目介绍
  2. Javascript堆排序
  3. Spring MVC前后台交互(前台ajax传递数据,后台controller接收数据返回json对象)
  4. php 分页类 bootstrap,ThinkPHP分页使用bootstrap样式
  5. Zigbee学习计划暂停
  6. 流程建设过程中个人和团队可能面临的问题
  7. 谈用VB无窗口透明Usercontrol编写透明浮动按钮
  8. Uber无人车为何危险:长期忽视模拟器,只在意路测 | 内部声音
  9. 被AI改变的风投模式:数据驱动使效率提高10倍
  10. 小鹏汽车又有高管加盟,这次是前一汽技术研发院副院长刘明辉