GNU Libtasn1 4.19.0版
目录
利比塔斯1
本手册适用于GNU Libtasn1(版本4.19.02022年8月17日),它是抽象语法符号一(ASN.1)和区分编码规则(DER)操作。
版权所有©2001–2022 Free Software Foundation,Inc。
授予复制、分发和/或修改本文件的权限根据GNU免费文档许可证1.3版的条款或自由软件基金会发布的任何更新版本;没有不变的节,没有前覆盖文本,也没有后覆盖文本。A类许可证副本包含在标题为“GNU Free”的部分中文档许可”。
1引言
本文档描述了提供以下功能的Libtasn1库抽象语法表示法一(ASN.1,按照X.680 ITU-T的规定建议)解析和结构管理,和区分编码规则(DER,根据X.690)编码和解码功能。
该库的主要功能有:
- 在线ASN.1结构管理,不需要任何C代码文件生成。
- 使用C代码文件生成进行离线ASN.1结构管理包含数组。
- 区分编码规则(DER)编码支持。
- INTEGER和ENUMERATED值没有限制。
- 这是自由软件。任何人都可以根据条款使用、修改和重新分发库GNU Lesser General Public License 2.1或更高版本。这个命令行工具、自检和构建基础设施都已获得许可在GNU通用公共许可证3.0或更高版本下。
- 螺纹安全。不使用全局变量,而是使用多个库句柄和会话手柄可以并联使用。
- 便携性。该代码应适用于所有类Unix操作系统和Windows。库本身应该可移植到任何C89系统,甚至POSIX是必需的。
2 ASN.1结构处理
2.1 ASN.1语法
解析器区分大小写。评论以开头--
和以另一个结尾--
,或在各自的末尾行,以先到者为准。C风格/*
,*/
不支持评论。
有关语法示例,请检查pkix.asn软件文件随图书馆分发。
ASN.1定义必须遵循以下语法:
definitions_name{<对象定义>}定义标签:=开始<类型和常量定义>结束
这个::=
标记必须与其他元素分开,因此以下声明无效:
正确的形式是:
以下是解析器可以管理的类型列表:
-
整数
; -
列举的
; -
布尔(BOOLEAN)
; -
对象标识符
; -
无效的
; -
钻头串
; -
八位字节字符串
; -
UTC时间
; -
通用时间
; -
通用字符串
; -
数字字符串
; -
IA5字符串
; -
Teletex字符串
; -
可打印字符串
; -
通用字符串
; -
BMPString(BMP字符串)
; -
UTF8字符串
; -
可见字符串
; -
序列
; -
序列
; -
SET(设置)
; -
第套,共套
; -
选择
; -
任何
; -
任何定义
.
此版本不处理真实
类型。它不支持这个自动标签
选项,以及出口
和IMPORT(导入)
部分。
这个尺寸
允许使用约束,但不对其进行检查。
2.2命名
考虑这个定义:
示例{1 2 3 4}定义明确标签:=开始组::=序列{id对象标识符,value值}值::=序列{值1整数,value2布尔值}结束
访问“”的符号集团'类型'例子’上面的定义是'例子。集团'(作为以NUL结尾的字符串。)这些字符串用于下面描述的函数。
其他示例:
- 字段'身份证件'的'集团'类型:'例子。组.id’;
- 字段'值1'的'价值'字段'集团’类型:'例子。组.值.值1’.
各定义未命名的结构化类型的元素接收姓名?1
,?2
等等。
这个?最后
name表示第套,共套
或序列
.
2.3简单解析
对于简单类型,如八位字节字符串
列出了简单的解析函数可以使用下面的。
2.4图书馆注释
此库的头文件是利巴斯1.h.
其中使用的主要类型是asn1_节点
,用于存储ASN.1定义和结构(实例)。
这个无效的
常量可用于变量初始化。例如:
某些函数需要错误描述
类型的参数字符*
,指向至少为ASN1_MAX_ERROR_DESCRIPTION_SIZE(ASN1_最大_错误_描述_大小)
字节大小(例如‘字符描述[ASN1_MAX_ERROR_description_SIZE];’).
ASN1_最大_名称_尺寸
是允许的最大字符数用于ASN.1标识符。
2.5未来发展
- 为包含等效项的C代码文件生成添加函数数据结构(不像现在这样是单个数组)。
- 这个
真实
类型。
3公用设施
3.1调用asn1Parser
asn1处理器
读取ASN.1定义的单个文件,并生成带有数组的文件,用于libtasn1函数。
用法:asn1Parser[OPTION]FILE使用ASN.1定义读取FILE并生成与libtasn1函数一起使用的C数组。长选项的强制参数对于短选项也是强制的。-c、 --check仅检查语法-o、 --output=FILE输出文件-n、 --name=name数组名-h、 --help显示此帮助并退出-v、 --版本输出版本信息并退出向以下人员报告错误:help-libtasn1@gnu.orgGNU Libtasn1主页:<https://www.gnu.org/software/libtasn1/>使用GNU软件的一般帮助:<https://www.gnu.org/gethelp/>
3.2调用asn1编码
asn1编码
从ASN.1文件生成DER编码定义和另一个带有赋值的定义。
具有赋值的文件必须具有以下语法:
实例名称Asn1定义nameString值nameString值。。。
要指定选择
要使用,请指定其名称作为的值选择
元素本身。使用''
到表示根元素本身。(如下例所示。)
输出文件是带有DER编码的二进制文件。
用法:asn1Coding[OPTION]DEFINITIONS ASSIGNMENTS生成ASN.1 DEFINITIONS文件的DER编码和赋值的ASSIGNMENTS文件。长选项的强制参数对于短选项也是强制的。-c、 --check仅检查语法-o、 --output=FILE输出文件-h、 --帮助显示此帮助并退出-v、 --版本输出版本信息并退出将错误报告给:help-libtasn1@gnu.orgGNU Libtasn1主页:<https://www.gnu.org/software/libtasn1/>使用GNU软件的一般帮助:<https://www.gnu.org/gethelp网址/>
例如,考虑ASN.1定义文件,如下所示:
MYPKIX1{}定义隐式标记::=开始OtherStruct:=序列{x整数,y选择{y1整数,y2八位字节字符串},}Dss-Sig-Value::=序列{r整数,s整数,其他OtherStructz整数可选,}结束
以及如下分配文件:
dp MYPKIX1.Dss-高值第42页第47节其他.x 66其他.y y1其他yy1 15z(空)
运行以下命令将生成分配(assign.out)文件,包含的DER编码PKIX1.Dss-大值
.
$asn1编码pkix.asn分配.asn1
如果根元素是选择
类型,分配文件可能类似于(使用中定义的类型pkix.asn软件):
elt PKIX1Implicit88通用名称“”dNSNamedNSName示例.org
3.3调用asn1解码
asn1编码
从具有的文件生成ASN.1结构ASN.1号定义和带有DER编码的二进制文件。
用法:asn1Decoding[OPTION]DEFINITIONS ENCODED ASN1TYPE解码ASN1TYPE元素的ENCODED文件中的DER数据在ASN.1 DEFINITIONS文件中描述,并打印解码的结构。-b、 --benchmark对解码执行基准测试-s、 --严格使用严格的DER解码-t、 --无时间限制使用严格的DER解码,但不在时间字段中-h、 --帮助显示此帮助并退出-v、 --版本输出版本信息并退出将错误报告给:help-libtasn1@gnu.orgGNU Libtasn1主页:<https://www.gnu.org/software/libtasn1/>使用GNU软件的一般帮助:<https://www.gnu.org/gethelp/>
例如,在生成分配(assign.out)文件来自的示例部分asn1编码
上面的命令下列的调用将解码DER数据。
$asn1编码pkix.asn赋值.out PKIX1.Dss-大值
4功能参考
4.1 ASN.1模式功能
asn1_parser2树
- 功能:整数 asn1_parser2树 (常量字符*文件,作为n1_节点*定义,字符*错误描述)
文件:指定包含ASN.1声明。
定义:返回指向从中创建的结构的指针“文件”ASN.1声明。
错误_描述:返回错误描述或空如果成功,则使用字符串。
用于启动解析算法的函数。创建结构需要管理中包含的定义文件
文件。
退货: ASN1_成功
如果文件有正确的语法并且每个标识符已知,ASN1_ELEMENT_NOT_EMPTY公司
如果定义
不无效的
,ASN1_FILE_NOT_FOUND文件
如果发生错误开放文件
,ASN1_语法错误
如果语法不是对的,ASN1_识别器_NOT_FOUND
如果文件中有未定义的标识符,ASN1_名称_ OO_LONG
如果在文件中的标识符超过ASN1_最大_名称_尺寸
字符。
asn1_parser2数组
- 功能:整数 asn1_parser2数组 (常量字符*输入文件名,常量字符*输出文件名,常量字符*矢量名称,字符*错误描述)
输入文件名:指定文件的路径和名称包含ASN.1声明。
输出文件名:指定要包含C向量定义。
矢量名称:指定C矢量的名称。
错误_描述:返回错误描述或空如果成功,则使用字符串。
从ASN1文件生成C结构的函数。创建一个包含用于管理定义的C向量的文件包含在中输入文件名
文件。如果输入文件名
是“/aa/bb/xx.yy”和输出文件名
是无效的
,创建的文件为“/aa/bb/xx_asn1_tab.c”。如果矢量名称
是无效的
向量名称将为“xx_asn1_tab”。
退货: ASN1_成功
如果文件有正确的语法并且每个标识符已知,ASN1_FILE_NOT_FOUND文件
如果发生错误打开时输入文件名
,ASN1_语法错误
如果语法是不正确,ASN1_识别器_NOT_FOUND
如果文件中有未定义的标识符,ASN1_名称_ OO_LONG
如果在文件中的标识符超过ASN1_MAX_名称_大小
字符。
4.2 ASN.1现场功能
asn1_array2树
- 功能:整数 asn1_array2树 (常量asn1_static_node*阵列,asn1_节点*定义,字符*错误描述)
阵列:指定包含ASN.1声明的数组
定义:返回指向由创建的结构的指针*ARRAY ASN.1声明
错误描述:返回错误描述。
创建管理ASN.1定义所需的结构。阵列
是由创建的向量asn1_分析器阵列()
.
退货: ASN1_成功
如果结构创建正确,ASN1_ELEMENT_NOT_EMPTY公司
如果*定义
不为空,ASN1_识别器_NOT_FOUND
如果文件中有标识符未定义的(参见错误描述
更多信息),ASN1_错误_错误
如果数组指向阵列
是错误的。
asn1_delete_structure(删除结构)
- 功能:整数 asn1_delete_structure(删除结构) (asn1_节点*结构)
结构:指向要删除的结构的指针。
删除结构*结构
最后*结构
已设置设置为NULL。
退货: ASN1_成功
如果成功,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果*结构
为NULL。
asn1_删除结构2
- 功能:整数 asn1_删除结构2 (作为节点*结构,无符号int旗帜)
结构:指向要删除的结构的指针。
旗帜:其他标志(请参见ASN1_DELETE_FLAG_归零
)
删除结构*结构
最后*结构
已设置设置为NULL。
退货: ASN1_成功
如果成功,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果*结构
为空。
asn1_delete_element(删除元素)
- 功能:整数 asn1_delete_element(删除元素) (asn1_节点结构,常量字符*元素名称)
结构:指向包含元素的结构的指针要删除。
元素名称:要删除的元素的名称。
删除名为的元素*元素名称
内部*结构
.
退货: ASN1_成功
如果成功,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果这个元素名称
找不到。
asn1_create_element(创建元素)
- 功能:整数 asn1_create_element(创建元素) (asn1_节点_常量定义,常量字符*资源名称,asn1_节点*要素)
定义:指向“parser_asn1”函数返回的结构的指针
源名称:新结构类型的名称(必须是在p_structure内部)。
要素:指向创建的结构的指针。
创建类型为的结构源名称
。使用示例“pkix.asn”:
rc=asn1_create_element(cert_def,“PKIX1.Certificate”,certptr);
退货: ASN1_成功
如果创建正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果源名称
未知。
asn1_打印结构
- 功能:空隙 asn1_打印结构 (文件*外面的,asn1_node_const结构,常量字符*名称,整数模式)
外面的:指向输出文件的指针(例如stdout)。
结构:指向要访问的结构的指针。
名称:结构的一个元素
模式:指定可以打印多少结构ASN1_打印名
,ASN1_打印名称类型
,ASN1_打印名称类型值
,或ASN1_打印_全部
.
打印在外面的
文件描述符结构的树开始来自名称
结构内部的元素结构
.
asn1 _元素数量
- 功能:整数 asn1 _元素数量 (asn1_节点_常量要素,常量字符*名称,整数*号码)
要素:指向ASN1结构根的指针。
名称:根的子结构的名称。
号码:指向将存储结果的整数的指针
使用名称等于“?1”、“?2”、。。。
退货: asn_成功
如果成功,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果名称
未知,ASN1_通用_错误
if指针号码
是无效的
.
asn1查找结构源ID
- 功能:常量字符* asn1查找结构源ID (asn1_节点_常量定义,常量字符*oid值)
定义:ASN1定义
oid值:要搜索的OID的值(例如“1.2.3.4”)。
搜索OID定义之后定义的结构。
退货: 无效的
什么时候oid值
找不到,否则指向包含紧跟其后定义的元素名称的常量字符串OID。
asn1_copy_node(asn1_copy_node)
- 功能:整数 asn1_copy_node(asn1_copy_node) (asn1_节点数据传输系统,常量字符*dst名称,asn1_node_const型钢混凝土,常量字符*src_name(服务器名称))
数据传输系统:目标asn1节点。
dst名称:目标节点中的字段名。
型钢混凝土:源asn1节点。
src名称:源节点中的字段名。
创建一个asn1_node变量的深度副本。那个函数需要数据传输系统
使用扩展asn1_create_element()
.
退货:返回ASN1_成功
成功。
asn1_dup_node(asn1_dup_node)
- 功能:asn1_节点 asn1_dup_node(asn1_dup_node) (asn1_节点_常量型钢混凝土,常量字符*src_name(服务器名称))
型钢混凝土:源asn1节点。
src_name(服务器名称):源节点中的字段名。
创建asn1_node变量的深层副本。此函数将返回所提供结构的精确副本。
退货:返回无效的
失败时。
asn1_write_value(asn1_写入值)
- 功能:整数 asn1_write_value(asn1_写入值) (asn1_节点节点_根,常量字符*名称,常量void*1.n.[希神]伊瓦鲁(人名),整数伦恩)
节点_根:指向结构的指针
名称:要设置的结构内元素的名称。
1.n.[希神]伊瓦鲁(人名):用于指定要设置的值的向量。如果len>0,VALUE必须是二的补码形式的整数。如果len=0*VALUE必须是以null结尾的字符串,并且具有整数值。
伦恩:用于设置值的*value字节数:值[0]。。value[len-1]或0,如果value是以null结尾的字符串
设置结构中一个元素的值。
如果某个元素是OPTIONAL,并且要删除它,则必须使用值为NULL,长度为0。使用“pkix.asn”:
result=asn1_write_value(证书,“tbsCertificate.sissuerUniqueID”,空,0);
每种类型的说明:
整数:VALUE必须包含二的补码形式的整数。
值[0]=0xFF,长度=1->整数=-1。值[0]=0xFF值[1]=0xFF,长度=2->整数=-1。值[0]=0x01,长度=1->整数=1。值[0]=0x00值[1]=0x01,长度=2->整数=1。value=“123”,len=0->integer=123。
列举:作为整数(但仅限于非负数)。
布尔安:VALUE必须是以null结尾的字符串“TRUE”或“FALSE”和LEN!=0
value=“TRUE”,len=1->布尔值=TRUE。value=“FALSE”,len=1->布尔值=FALSE。
OBJECT IDENTIFIER:VALUE必须是以null结尾的字符串每个数字由一个点分隔(例如“1.2.3.543.1”)。长度!=0
value=“1 2 840 10040 4 3”,len=1->OID=dsa-with-sha。
UTC时间:VALUE必须是其中一个中以null结尾的字符串格式:“YYMMDDhhmmssZ”,“YYmmDDhhmssZ”,“YYMMDDhhmmss+hh'mm'”,“YYmmDDhhmmmss-hh'mm`”,“YYMMDDhhmm+hh'mm'”或“YYMMDDhhmm-hh'mm”。长度!=0
value=“9801011200Z”,len=1->时间=1998年1月1日格林威治标准时间12h 00m
通用时间:VALUE必须采用以下格式之一:“YYYYMMDDhhmmss.sZ”,“YYY-MMDDh2mmss.sZ”,“YYYYMMDDhhmmss.s+hh'mm'”,“YYY-MMDDhhammss.s-hh'mm”,“YYYYMMDhhmm+hh'mm'”,或“YYYYMMDhhmm-hh'mm'”,其中ss.s指示秒数,精度如“10.1”或“01.02”。LEN!=0
value=“20010112001.12-0700”,len=1->时间=1月2001年1月12日12时00分01.12s太平洋夏令时
八位字节字符串:VALUE包含八位字节字符串,LEN是八位字节数。
value=“$\backslash$x01$\反斜杠$x02$\反斜杠$x03”,len=3->三字节八位字节字符串
通用字符串:VALUE包含通用字符串,LEN是八位字节数。
value=“$\backslash$x01$\反斜杠$x02$\反斜杠$x03”,len=3->三字节通用字符串
位字符串:VALUE包含由字节和LEN是位数。
value=“$\反斜杠$xCF”,len=6->位字符串=“110011”(六个位)
选择:如果NAME指示选择类型,VALUE必须指定其中之一字符串以null结尾的替代项。LEN!=0.使用“pkix.asn”\:
结果=asn1_write_value(证书,“certificate1.tbsCertificate.subject”,“rdnSequence”,1);
任何:VALUE表示结构的顺序编码。长度!=0
SEQUENCE OF:VALUE必须是以null结尾的字符串“NEW”,并且长度!=0。使用此指令,在中追加了另一个元素顺序。如果它是第一个,第二个用“?2”,依此类推。
使用“pkix.asn”\:
结果=asn1_write_value(证书,“certificate1.tbsCertificate.subject.rdnSequence”,“新”,1);
集合:与序列相同。使用“pkix.asn”:
result=asn1_ write_value(cert,“tbsCertificate.subject.rdnSequence.?LAST”,“NEW”,1);
退货: asn_成功
如果设置了该值,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果名称
不是有效的元素,并且ASN1值非有效
如果1.n.[希神]伊瓦鲁(人名)
格式错误。
asn1_读取值
- 功能:整数 asn1_读取值 (asn1_节点_常量根,常量字符*名称,无效*1.n.[希神]伊瓦鲁(人名),整数*伦恩)
根:指向结构的指针。
名称:要读取的结构中元素的名称。
1.n.[希神]伊瓦鲁(人名):将包含元素内容的向量必须是指向已分配的内存单元的指针(可能是无效的
).
伦恩:*value的字节数:value[0]。。值[len-1]。缩写保存sizeof值。
返回结构中一个元素的值。如果元素为OPTIONAL,则返回ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
,这意味着此元素不存在在创建结构的der编码中。第一个元素SEQUENCE_of或SET_of的名称为“?1”。第二个“?2”和依此类推。如果根
提供了特定序列元素的节点,则关键字“?CURRENT”也可以接受,并指示此节点的当前序列元素。
请注意,可能存在长度为零的有效值。在这种情况下此功能将成功,并且伦恩
将为零。
整数:VALUE将包含一个二的补码形式的整数。
integer=-1->值[0]=0xFF,len=1。整数=1->值[0]=0x01,长度=1。
列举:作为整数(但仅限于非负数)。
布尔安:VALUE将是以null结尾的字符串“TRUE”或“FALSE”和LEN=5或LEN=6。
OBJECT IDENTIFIER:VALUE将是以null结尾的字符串每个数字由一个点分隔(即“1.2.3.543.1”)。
LEN=字符串(值)+1
UTC时间:VALUE将是其中一个中以null结尾的字符串格式:“YYMMDDhhmmss+hh'mm'”或“YYmmDDhhmss-hh'mm`”。LEN=字符串(值)+1。
通用时间:VALUE将是用于设置值的相同格式。
八位字节字符串:VALUE将包含八位字节串,LEN将为八位字节的数量。
通用字符串:VALUE将包含通用字符串,LEN将是八位字节的数目。
位字符串:VALUE将包含按字节组织的位字符串LEN将是位数。
选择:如果NAME指示选择类型,VALUE将指定已选择备选方案。
任何:如果NAME指示任何类型,VALUE将指示DER实际使用的结构的编码。
退货: ASN1_成功
如果返回值,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果名称
不是有效元素,ASN1 _值_无_源
如果元素没有任何值选择,和ASN1_ME_错误
如果值向量不够大存储结果,在本例中伦恩
将包含需要个字节。在存储的数据长度为零的情况下此函数可能返回ASN1_成功
即使提供了伦恩
为零。
asn1_读取值类型
- 功能:整数 asn1_读取值类型 (asn1_节点_常量根,常量字符*名称,无效*1.n.[希神]伊瓦鲁(人名),整数*伦恩,无符号int*etype类型)
根:指向结构的指针。
名称:要读取的结构中元素的名称。
1.n.[希神]伊瓦鲁(人名):将包含元素内容的向量必须是指向已分配的内存单元的指针(可能是无效的
).
伦恩:*value的字节数:value[0]。。值[len-1]。缩写保存sizeof值。
etype类型:读取值的类型(ASN1_ETYPE)
返回结构中一个元素的类型和值。如果元素为OPTIONAL,则返回ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
,这意味着此元素不存在在创建结构的der编码中。第一个元素SEQUENCE_of或SET_of的名称为“?1”。第二个“?2”和依此类推。如果根
提供了特定序列元素的节点,则关键字“?CURRENT”也是可以接受的,并且表示此节点的当前序列元素。
请注意,可能存在长度为零的有效值。在这种情况下此功能将成功,并且伦恩
将为零。
整数:VALUE将包含一个二的补码形式的整数。
整数=-1->值[0]=0xFF,长度=1。整数=1->值[0]=0x01,长度=1。
列举:作为整数(但仅限于非负数)。
布尔安:VALUE将是以null结尾的字符串“TRUE”或“FALSE”和LEN=5或LEN=6。
OBJECT IDENTIFIER:VALUE将是以null结尾的字符串每个数字由一个点分隔(即“1.2.3.543.1”)。
LEN=字符串(值)+1
UTC时间:VALUE将是其中一个中以null结尾的字符串格式:“YYMMDDhhmmss+hh'mm'”或“YYmmDDhhmss-hh'mm`”。LEN=字符串(值)+1。
通用时间:VALUE将是用于设置值的相同格式。
八位字节字符串:VALUE将包含八位字节串,LEN将为八位字节的数量。
通用字符串:VALUE将包含通用字符串,LEN将是八位字节的数目。
位字符串:VALUE将包含按字节组织的位字符串LEN将是位数。
选择:如果NAME表示选择类型,则VALUE将指定已选择备选方案。
任何:如果NAME指示任何类型,VALUE将指示DER实际使用的结构的编码。
退货: asn_成功
如果返回值,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果名称
不是有效的元素,ASN1 _值_无_源
如果元素没有任何值选择,和ASN1_ME_错误
如果值向量不够大存储结果,在本例中伦恩
将包含需要个字节。在存储的数据长度为零的情况下此函数可能返回ASN1_成功
即使提供了伦恩
为零。
asn1_read标签
- 功能:整数 asn1_read标签 (asn1_节点_常量根,常量字符*名称,整数*标记值,整数*classValue(类值))
根:指向结构的指针
名称:结构内元素的名称。
标记值:将包含TAG值的变量。
classValue(类值):变量,用于指定TAG类型。
返回结构中一个元素的TAG和CLASS。CLASS可以具有以下常量之一:ASN1_CLASS_应用程序
,ASN1_CLASS_UNIVERSAL公司
,ASN1_分类_私有
或ASN1_CLASS_CONTEXT_特定
.
退货: ASN1_成功
如果成功,作为n1_ELEMENT_NOT_FOUND
如果名称
不是有效的元素。
asn1_读取模式值
- 功能:整数 asn1_读取模式值 (asn1_节点_常量节点,asn1_data_node_st*数据)
节点:指向节点的指针。
数据:指向asn1_data_node_st的点
返回asn1_node结构中数据节点的值。返回的数据应作为常量值处理。
退货: ASN1_成功
如果节点存在。
4.3 DER功能
asn1_length_der
- 功能:空隙 asn1_length_der (无符号长整型伦恩,无符号字符*命令,整数*der_len(德伦))
伦恩:要转换的值。
命令:buffer以保存返回的编码(可能是无效的
).
der_len(德伦):ANS的有意义字节数(der[0]..der[der_len-1])。
创建所提供长度值的DER编码。这个命令
缓冲器必须有足够的输出空间。最大值此函数将编码的长度为ASN1_MAX_长度_尺寸
.
要知道DER编码的大小,请使用无效的
的值命令
.
asn1_octet_der
- 功能:空隙 asn1_octet_der (常量无符号字符*字符串,整数str_len(字符串_伦),无符号字符*命令,整数*der_len(德伦))
字符串:输入数据。
str_len(字符串_伦):STR长度(STR[0]..STR[*STR_len-1])。
命令:返回编码字符串。
der_len(德伦):DER的有意义字节数(DER[0]..DER[DER_len-1])。
为输入数据创建长度值DER编码。输入数据的DER编码将放在命令
变量。
请注意,输出中不包括OCTET STRING标记。
此函数不返回任何值,因为它是预期的那个der_len(德伦)
将包含足够的字节来存储字符串加上DER编码。DER编码大小可以使用asn1_length_der()
.
asn1_encode_简单
- 功能:整数 asn1_encode_简单 (无符号intetype类型,const无符号字符*字符串,无符号intstr_len(字符串_伦),无符号字符*热释光,无符号int*tl_伦)
etype类型:要编码的字符串类型(ASN1_ETYPE_)
字符串:字符串数据。
str_len(字符串_伦):字符串长度
热释光:编码的标签和长度
tl_伦:的字节热释光
领域
为各种简单的ASN.1类型(如字符串等)创建DER编码。它将标签和长度存储在热释光
,应该至少有空间ASN1_最大_尺寸
字节。最初tl_伦
应包含的大小热释光
.
完整的DER编码应包含热释光
附加提供了字符串
.
退货: ASN1_成功
如果成功或错误值。
asn1_对象标识符
- 功能:整数 asn1_对象标识符 (常量字符*字符串,无符号字符*命令,整数*der_len(德伦),未签名旗帜)
字符串:数字、点格式的对象标识符。
命令:buffer以保存返回的编码(可能是无效的
).
der_len(德伦):初始大小为命令
;将保持最终尺寸。
旗帜:必须为零
创建所提供对象标识符的DER编码。
退货: ASN1_成功
如果DER编码正常,ASN1值非有效
如果字符串
不是有效的OID,ASN1_ME_错误
如果命令
矢量不够大,在这种情况下der_len(德伦)
将包含所需长度。
asn1_bit_der
- 功能:空隙 asn1_bit_der (常量无符号字符*字符串,整数位_ len,无符号字符*命令,整数*德语(_len))
字符串:BIT字符串。
位_ len:STR中有意义的位数。
命令:返回字符串。
der_len(德伦):DER的有意义字节数(序号[0]..序号[ans_len-1])。
为输入数据创建长度值DER编码就像比特串一样。DER编码数据将复制到命令
.
请注意,输出中不包括BIT STRING标记。
此函数不返回任何值,因为它是预期的那个der_len(德伦)
将包含足够的字节来存储字符串加上DER编码。DER编码大小可以使用asn1_length_der()
.
asn1_der_code编码
- 功能:整数 asn1_der_code编码 (asn1_节点_常量要素,常量字符*名称,无效*标识符,整数*伦恩,字符*错误描述)
要素:指向ASN1元素的指针
名称:要编码的结构的名称(必须是内部*指针)。
标识符:将包含DER编码的向量。DER必须是指向已分配内存单元的指针。
伦恩:的字节数*标识符
:国际开发署
[0]..国际开发署
[len-1],缩写保存der向量的sizeof。
错误描述:返回错误描述或空如果成功,则使用字符串。
为NAME结构创建DER编码(在*POINTER内结构)。
退货: ASN1_成功
如果DER编码正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果名称
不是有效的元素,ASN1 _值_无_源
如果有是没有值的元素,ASN1_ME_错误
如果标识符
矢量不够大,在这种情况下伦恩
将包含所需长度。
asn1获取长度
- 功能:长的 asn1获取长度 (常量无符号字符*命令,整数der_len(德伦),整数*伦恩)
命令:要解码的DER数据。
der_len(德伦):要解码的DER数据的长度。
伦恩:包含DER长度字段长度的输出变量。
从DER数据中提取长度字段。
退货:返回解码后的长度值,如果不确定,返回-1长度,如果值太大而无法放入int,则为-2,或者为-4当解码长度值加上伦恩
将超过der_len(德伦)
.
asn1获取标签
- 功能:整数 asn1获取标签 (常量无符号字符*命令,整数der_len(德伦),无符号字符*cls公司,整数*伦恩,unsigned long*标签)
命令:要解码的DER数据。
der_len(德伦):要解码的DER数据长度。
cls公司:包含解码类的输出变量。
伦恩:包含DER TAG数据长度的输出变量。
标签:包含解码标记的输出变量(可以是无效的
).
从DER代码中解码类和TAG。
退货:退换商品ASN1_成功
成功或错误。
asn1_get_length_ber
- 功能:长的 asn1_get_length_ber (常量无符号字符*错误率,整数贝伦,整数*伦恩)
错误率:要解码的BER数据。
贝伦:要解码的BER数据长度。
伦恩:包含BER长度字段长度的输出变量。
从BER数据中提取长度字段。与asn1_get_length_der()
这个函数将返回一个长度即使值具有不定编码。
退货:返回解码长度值,或当这个值太大了。
自:2
asn1获取ctet_der
- 功能:整数 asn1获取ctet_der (常量无符号字符*命令,整数der_len(德伦),整数*重试(_L),无符号字符*字符串,整数字符串大小(_S),整数*str_len(字符串_伦))
命令:要解码的包含八位字节序列的DER数据。
der_len(德伦):的长度命令
要解码的数据。
重试(_L):包含DER数据编码长度的输出变量。
字符串:预先分配的输出缓冲区,用于将解码的OCTET SEQUENCE放入。
字符串大小(_S):预先分配的输出缓冲区的长度。
str_len(字符串_伦):包含OCTET SEQUENCE内容长度的输出变量。
从DER数据中提取OCTET序列。请注意,此函数期望DER数据超过标记字段,即长度和内容八位字节。
退货:退换商品ASN1_成功
成功或错误。
asn1获取对象id
- 功能:整数 asn1获取对象id (常量无符号字符*命令,整数der_len(德伦),整数*重试(_L),字符*字符串,整数字符串大小(_S))
命令:要解码的DER数据包含OBJECT IDENTIFIER
der_len(德伦):要解码的DER数据长度。
重试(_L):包含DER数据长度的输出变量。
字符串:预先分配的输出缓冲区,用于放入文本对象id。
字符串大小(_S):预先分配的输出缓冲区的长度。
将DER编码的对象标识符转换为其文本形式。此函数需要不带标记的DER对象标识符。
退货: ASN1_成功
成功或错误。
asn1 _获取_比特_der
- 功能:整数 作为n1_get_bit_der (常量无符号字符*命令,整数der_len(德伦),整数*重试(_L),无符号字符*字符串,整数字符串大小(_S),整数*位_ len)
命令:要解码的DER数据包含位序列。
der_len(德伦):要解码的DER数据的长度。
重试(_L):包含DER数据长度的输出变量。
字符串:预先分配的输出缓冲区,用于放入解码的BIT SEQUENCE。
字符串大小(_S):预先分配的输出缓冲区的长度。
位_ len:包含BIT SEQUENCE大小的输出变量。
从DER数据中提取位序列。
退货: ASN1_成功
成功或错误。
asn1_der_decoding2
- 功能:整数 asn1_der_decoding2 (asn1_节点*要素,常量void*标识符,整数*最大值(_ider_len),无符号int旗帜,字符*错误描述)
要素:指向ASN1结构的指针。
标识符:包含DER编码的向量。
最大值(_ider_len):指向提供有关占用的最大字节数*标识符
.DER的实际大小编码通过该指针返回。
旗帜:控制函数行为的标志。
错误描述:以null结尾的字符串包含当发生错误。
填充结构*要素
使用DER编码字符串的值必须使用函数创建结构asn1_create_element()
.
如果ASN1_DECODE_FLAG_ALLOW_PADDING(ASN1\DECODE_警报_低_添加)
设置标志,则函数将忽略在解码的DER数据后填充。成功返回后*最大值(_ider_len)
将设置为解码的字节数。
如果ASN1_DECODE_FLAG_STRICT_DER
标志设置后,函数将不解码任何BER编码元素。
退货: ASN1_成功
如果DER编码正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果元素
是无效的
、和ASN1_TAG错误
或ASN1_DER错误
如果der编码与结构不匹配姓名(*元素
删除)。
asn1_der_decoding(asn1_der_decodeing)
- 功能:整数 asn1_der_decoding(asn1_der_decodeing) (asn1_节点*要素,常量void*标识符,整数标识_长度,字符*错误描述)
要素:指向ASN1结构的指针。
国际开发署:包含DER编码的向量。
ider_len公司:的字节数*标识符
:国际开发署
[0]..标识符
[透镜1]。
错误描述:null终止的字符串包含详细信息发生错误。
填充结构*要素
使用DER编码的值字符串。必须使用函数创建结构asn1_create_element()
.
请注意*要素
变量作为指针提供给历史原因。
退货: ASN1_成功
如果DER编码正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果元素
是无效的
、和ASN1_TAG错误
或ASN1_DER错误
如果der编码与结构不匹配姓名(*元素
删除)。
asn1_der_decoding_element(asn1_der_decodeing_elements)
- 功能:整数 asn1_der_decoding_element(asn1_der_decodeing_elements) (asn1_节点*结构,常量字符*元素名称,常量void*标识符,整数伦恩,字符*错误描述)
结构:指向ASN1结构的指针
元素名称:要填充的元素的名称
标识符:包含整个结构的DER编码的向量。
伦恩:*der:der[0]..的字节数。。der[len-1]
错误描述:以null结尾的字符串包含当发生错误。
填充名为的元素元素名称
使用DER编码的值字符串。必须使用函数创建结构asn1_create_element()
。DER向量必须包含编码整个字符串结构
。如果在解码过程*结构
被删除并设置为等于无效的
.
此函数已弃用,可能只是asn1_der_decoding的别名在未来版本中。使用asn1_der_decoding()
而不是。
退货: ASN1_成功
如果DER编码正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果ELEMENT为无效的
或元素名称
==空,以及ASN1_TAG错误
或ASN1_DER错误
如果der编码没有与结构匹配结构
(*删除了ELEMENT)。
asn1_der_decoding_startEnd
- 功能:整数 asn1_der_decoding_startEnd (asn1_节点要素,常量void*标识符,整数标识_长度,常量字符*名称元素,整数*开始,整数*结束)
要素:指向ASN1元素的指针
标识符:包含DER编码的矢量。
标识_长度:的字节数*标识符
:标识符
[0]..标识符
[透镜1]
名称元素(_E):NAME结构的元素。
开始:NAME_ELEMENT解码的第一个字节的位置(标识符
[*开始])
结束:NAME_ELEMENT解码的最后一个字节的位置(标识符
[*结束])
在DER编码中查找元素的起点和终点字符串。我的意思是,如果你有一个der编码并且你已经有了使用了函数asn1_der_decoding()
要填充结构,可以碰巧你想找到一条关于结构的元素。
一个例子是X509中的序列“tbsCertificate”证书。
注意,由于libtasn13.7标识符
和标识_长度
参数如果已使用对元素进行解码,则可以省略asn1_der_decoding()
.
退货: ASN1_成功
如果DER编码正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果ELEMENT为asn1_节点
空的或名称元素(_E)
不是有效的元素,ASN1_TAG错误
或ASN1_错误
如果der编码与结构ELEMENT不匹配。
asn1_展开任何定义
- 功能:整数 asn1_展开任何定义 (asn1_节点_常量定义,asn1_节点*要素)
定义:ASN1定义
要素:指向ASN1结构的指针
展开从创建的结构的每个“ANY DEFINED BY”元素DER解码过程(asn1_DER_decoding函数)。元素ANY必须由对象标识符定义。用于的类型展开元素ANY是以下定义的第一个元素对象标识符的实际值。
退货: ASN1_成功
如果替换正常,ASN1_错误_类型_任何
如果由于OBJECT_ID->TYPE关联中的问题,或其他错误代码取决于DER解码。
asn1扩展ctet字符串
- 功能:整数 asn1扩展ctet字符串 (asn1_节点_常量定义,asn1_节点*要素,常量字符*八位字节名称,常量字符*对象名称)
定义:ASN1定义
要素:指向ASN1结构的指针
八位字节名称:要展开的OCECT STRING字段的名称。
对象名称:用于定义的OBJECT IDENTIFIER字段的名称用于扩展的类型。
展开从DER创建的结构的“八进制字符串”元素解码过程(asn1_der_decoding()
功能)。使用的类型for expansion是遵循由OBJECTNAME指示的OBJECT IDENTIFIER的实际值。
退货: ASN1_成功
如果替换正常,ASN1_ELEMENT_NOT_FOUND(ASN1_元素_非声音)
如果对象名称
或八位字节名称
不正确,ASN1值非有效
如果找不到类型用于扩展或其他错误,具体取决于DER解码。
asn1_decode_simple_der
- 功能:整数 asn1_decode_simple_der (无符号intetype类型,const无符号字符*命令,无符号int_der_len(德伦),const无符号字符**字符串,无符号int*str_len(字符串_伦))
etype类型:要编码的字符串类型(ASN1_ETYPE_)
命令:编码字符串
_der_len(德伦):编码字符串的字节
字符串:指向数据的指针
str_len(字符串_伦):数据的长度
解码一个简单的DER编码类型(例如,未构造的字符串)。输出是命令
.
退货: asn_成功
如果成功或错误值。
asn1解码简单
- 功能:整数 asn1_decode_simple_ber (无符号intetype类型,const无符号字符*命令,无符号int_der_len(德伦),无符号字符**字符串,无符号int*str_len(字符串_伦),无符号int*贝伦)
etype类型:要编码的字符串类型(ASN1_ETYPE_)
命令:编码字符串
_der_len(德伦):编码字符串的字节
字符串:指向数据的指针
str_len(字符串_伦):数据的长度
贝伦:BER占用的总长度(可以是无效的
)
解码BER编码类型。输出是一个分配值数据的。这仅解码BER字符串。其他类型包括解码为DER。
退货: ASN1_成功
如果成功或错误值。
4.4错误处理功能
asn1-错误
- 功能:空隙 asn1_错误 (整数错误)
错误:是libtasn1函数返回的错误。
将字符串打印到stderr,并附带错误描述。这个函数类似perror()
唯一的区别是它接受libtasn1函数返回的错误。
自:1.6
asn1_stre错误
- 功能:常量字符* asn1_stre错误 (整数错误)
错误:是libtasn1函数返回的错误。
返回包含错误描述的字符串。此函数是类似于strerror。唯一的区别是它接受libtasn1函数返回的错误(数字)。
退货:指向描述错误的以零结尾的静态字符串的指针代码。
自:1.6
4.5辅助功能
asn1查找节点
- 功能:asn1_节点 asn1查找节点 (asn1_节点_常量指针,常量字符*名称)
指针:NODE_ASN元素指针。
名称:以null结尾的字符串,其中包含要查找的元素名称。
搜索名为的元素名称
从开始指针
. The名称由由点分隔的不同标识符组成。什么时候?*指针
具有名称,则第一个标识符必须是的名称*指针
,否则它必须是*指针
.
退货:搜索结果,或无效的
如果没有找到。
asn1_check_version(检查版本)
- 功能:常量字符* asn_检查版本 (常量字符*请求版本(_V))
请求版本:所需版本号,或无效的
.
检查库的版本是否至少为请求一个并返回版本字符串;返回无效的
如果条件不满足。如果无效的
传递给此函数,没有进行任何检查,但只返回了版本字符串。
请参见ASN1_版本
适用于请求版本
字符串。
退货:运行时库的版本字符串,或无效的
如果运行时库不符合所需的版本号。
附录A复印信息
A.1 GNU免费文档许可
版本1.3,2008年11月3日
版权所有©2000、2001、2002、2007、2008 Free Software Foundation,Inc。网址:http://fsf.org/每个人都可以复制和分发原稿但不允许更改它。
- 序言
本许可证的目的是制作手册、教科书或其他实用文档自由的在自由的意义上:确保每个人都有复制和再版的有效自由,无论是否进行商业或非商业修改。其次,本许可证为作者和出版商保留了一种方式在不被视为负责任的情况下,为自己的工作赢得荣誉其他人进行的修改。
本许可证是一种“copyleft”,即衍生产品文件的作品本身必须在同样的意义上是自由的。它补充了GNU通用公共许可证,这是一个版权为自由软件设计的许可证。
我们设计此许可证是为了将其免费用于手册软件,因为自由软件需要免费文档:免费程序应随附手册,提供与软件确实如此。但本许可证不限于软件手册;它可以用于任何文本作品,无论主题或是否以印刷书的形式出版。我们推荐此许可证主要用于以指导或参考为目的的作品。
- 适用性和定义
本许可证适用于任何介质中的任何手册或其他工作包含版权所有者发布的通知,表示可以根据本许可条款分发。此类通知授予全球范围的免版税许可证,无限期使用在此处规定的条件下工作。下面的“文档”,指任何此类手册或作品。任何公众成员都是被许可人,并被称为“您”。如果您接受许可证以需要许可的方式复制、修改或分发作品根据版权法。
文件的“修改版本”是指包含文档或其一部分,可以逐字复制,也可以与修改和/或翻译成另一种语言。
“次要部分”是一个命名的附录或重要部分专门处理文档的出版商或作者主题(或相关事项)且不包含任何可能坠落的内容直接在整个主题中。(因此,如果文件在数学教科书的第二部分可能无法解释任何数学。)这种关系可能是历史问题与主题或相关事项或法律的联系,商业、哲学、道德或政治立场他们。
“不变部分”是某些次要部分,其标题为在通知中被指定为不变量节说明文件是根据本许可证发布的。如果第节不符合上述二级定义,则不符合允许指定为不变量。文件可能包含零不变节。如果文档没有识别任何不变量那么就没有节了。
“封面文本”是列出的某些文本短文,作为封面文本或封底文本,在说明中文件根据本许可证发布。正面文字可能最多为5个单词,背越文本最多为25个单词。
文件的“透明”副本是指机器可读副本,以其规范可用于适用于修订文件的公众直接使用通用文本编辑器或(对于由像素)通用绘图程序或(用于绘图)一些广泛可用的绘图编辑器,适合输入到文本格式化程序或用于自动转换为各种适合输入的格式到文本格式化程序。在其他透明文件中制作的副本其标记或无标记已被安排阻止的格式或阻止读者进行后续修改是不透明的。如果大量使用图像格式,则图像格式不是透明的文本的。不“透明”的副本称为“不透明”。
适用于透明副本的格式示例包括普通格式无标记ASCII、Texinfo输入格式、LaTeX输入格式、SGML或XMLDTD和符合标准的简单HTML,PostScript或PDF设计用于人工修改。示例透明图像格式包括PNG、XCF和JPG公司。不透明格式包括可以只能由专用文字处理器、SGML或DTD和/或处理工具用于的XML通常不可用,以及机器生成的HTML,某些文字处理器为生成的PostScript或PDF仅用于输出目的。
“扉页”对于印刷书籍而言,是指扉页本身,加上以下这些页面,以便清晰地保存材料此许可证要求显示在标题页中。对于中的工程没有任何标题页的格式,“标题页”是指靠近作品标题最显著外观的文本,在正文开头之前。
“出版商”是指发行副本的任何个人或实体向公众公布文件。
“标题XYZ”部分是指文件的命名子单元,其标题要么是精确的XYZ,要么在后面的括号中包含XYZ用另一种语言翻译XYZ的文本。(这里XYZ代表下面提到的特定节名称,例如“确认”,“专用”、“背书”或“历史”。)“保留标题”当您修改文档时,这意味着它仍然是根据此定义,“授权XYZ”部分。
该文件可能在通知旁边包括保修免责声明声明本许可证适用于文档。这些保证免责声明被视为包含在本文件中许可,但仅限于免责保证:任何其他这些保证免责声明可能具有的含义是无效的不影响本许可的含义。
- 口头复制
您可以在任何介质中复制和分发文档商业或非商业,前提是本许可版权声明,以及说明本许可证适用的许可声明文件的所有副本均已复制,并且您没有添加其他副本本许可的任何条件。您不能使用阻碍或控制读数或进一步读数的技术措施复制您制作或分发的副本。然而,您可以接受补偿以换取副本。如果你分配的数量足够大副本数量还必须遵循第3节中的条件。
您也可以在上述相同条件下借出副本,以及你可以公开展示副本。
- 复制数量
如果您发布打印副本(或在通常具有印刷封面),编号超过100,以及文档的许可证通知需要封面文本,您必须将封面上的副本清晰易读地载有所有这些封面文本:封面上的封面文本,以及封面上的封底文本封底。两个封盖也必须清楚易读地标识你是这些副本的出版商。前盖必须存在完整的标题,标题的所有单词都同样突出,并且可见。您还可以在盖子上添加其他材料。复制时更改仅限于封面,只要保留文件标题,并满足这些条件,则可以进行处理在其他方面进行逐字复制。
如果任一封面所需的文本太长而无法容纳你应该清楚地列出第一个(尽可能多)合理),并将其余部分继续放置在相邻的页。
如果您发布或分发文件编号的不透明副本超过100,则必须包含机器可读的透明副本连同每个不透明副本,或在每个不透明拷贝中声明通用网络使用的计算机网络位置public可以使用公共标准网络协议进行下载文件的完整透明副本,无附加材料。如果您使用后一种方法,您必须采取合理谨慎的步骤,当您开始大量分发不透明副本时,以确保此透明副本将在规定的位置,直到您上次分发不透明的副本(直接或通过您的代理或零售商)向公众发布。
我们要求您联系在重新分发大量副本之前,要做好文档准备他们有机会为您提供文档的更新版本。
- 修改
您可以复制和分发文档的修改版本上述第2节和第3节的条件,前提是您发布此许可证下的修改版本版本填充了文档的角色,从而许可分发并向拥有副本的人修改修改版本此外,您必须在修改版本中执行以下操作:
- 在标题页(以及封面,如果有)中使用不同的标题本文件和以前版本的文件(如果有,应在历史记录部分列出)。您可以使用与以前版本相同的标题如果该版本的原始发布者给予许可。
- 标题页上的列表,作为作者、一个或多个个人或实体负责修改后的版本,以及至少五位主要作者文件(所有主要作者,如果少于五名),除非他们解除你的这个要求。
- 在标题页上注明修改版本,作为发布者。
- 保留文档的所有版权声明。
- 为您的修改添加适当的版权声明与其他版权声明相邻。
- 在版权声明之后立即包括许可声明授予公众使用修改版本的权限本许可证条款,格式见下文附录。
- 在该许可证通知中保留不变部分的完整列表以及文件许可通知中规定的封面文本。
- 包括本许可证的未更改副本。
- 保留标题为“历史”的部分,保留其标题,并添加至少说明标题、年份、新作者和标题页上给出的修改版本的发布者。如果文档中没有标题为“历史”的部分,请创建一个说明文档的标题、年份、作者和出版商然后添加一个描述修改的上句所述版本。
- 保留文档中给定的网络位置(如果有)公开访问文档的透明副本,同样文档中给出的早期版本的网络位置它是基于的。这些可以放在“历史”部分。您可以省略发布于的作品的网络位置文件本身之前至少四年,或如果原件它所指版本的发布者授予权限。
- 对于任何标题为“确认”或“奉献”的部分,保留节的标题,并在节中保留所有每个贡献者致谢的内容和语气和/或其中给出的献词。
- 保留文档的所有不变部分,他们的文字和标题都没有改变。章节编号或同等内容不被视为章节标题的一部分。
- 删除任何标题为“背书”的部分。这样一个部分可能不包括在修改版本中。
- 不要将任何现有章节重新命名为“背书”或与任何固定节的标题冲突。
- 保留任何保修免责声明。
如果修改版包含新的正面内容部分或符合次要章节要求且不包含任何材料的附录从文件中复制,您可以选择指定部分或全部作为不变量。为此,请将其标题添加到修改版本的许可证通知中的不变部分列表。这些标题必须与任何其他章节标题不同。
您可以添加一个名为“背书”的部分,前提是它包含只不过是各种人对修改版本的背书例如,各方、同行评审声明或文本被组织批准为标准。
您可以添加最多五个单词的段落作为Front-Cover Text,以及将多达25个单词作为背景文本传递到列表末尾修订版封面文本。只有一条通道正面覆盖文本和背面覆盖文本之一可以通过(或)添加通过任何一个实体作出的安排。如果文档已经包含同一封面的封面文本,该文本是您或通过您所代表的同一实体作出的安排,您不能再添加一个;但您可以在显式添加旧版本的前一个发布者的许可。
文档的作者和出版商不受本许可的约束允许使用他们的名字进行宣传或断言或暗示对任何修改版本的认可。
- 合并文档
您可以将该文件与根据本协议发布的其他文件合并许可证,根据上文第4节中定义的条款进行修改版本,前提是在组合中包含所有所有原始文档的不变节,未修改,以及在它的许可证通知,并且您保留其所有保修免责声明。
合并作品只需包含本许可证的一份副本,并且多个相同的不变部分可以替换为单个副本。如果有多个名称相同但不同的内容,通过在末尾加上括号中的原始名称该部分的作者或出版商(如果已知),或者一个唯一的数字。对列表中的章节标题进行相同的调整组合作品的许可证通知中的不变部分。
在组合中,必须组合任何标题为“历史”的部分在各种原始文件中,形成一个标题为“历史”;同样,将标题为“确认”的任何部分合并,以及任何标题为“奉献”的章节。您必须删除所有标题为“背书”的章节
- 文件的收集
您可以制作一个由文档和其他文档组成的集合根据本许可证发布,并替换本各种文件中的许可证,其中包含一份副本集合,前提是您遵守本许可证的规则在所有其他方面逐字复制每个文件。
您可以从这样的集合中提取单个文档,然后分发如果您插入本许可证的副本将许可证放入提取的文档中,并完全遵循此许可证有关该文件逐字复制的其他方面。
- 独立工程聚合
文件或其衍生文件与其他单独文件的汇编以及独立的文件或作品,在存储或如果版权汇编产生的结果不用于限制合法权利超出个人作品允许的范围。当文档包含在集合中时,本许可证不会适用于不属于其自身的其他工程本文件的衍生作品。
如果第3节的封面文本要求适用于文件副本,如果文件少于文件封面文本可以放在整个集合上涵盖将文档置于聚合范围内,或如果文件为电子形式,则等同于保险单的电子版本。否则,它们必须出现在印刷封面上骨料。
- 翻译
翻译被认为是一种修改,所以你可以根据第4节的条款分发文件的译文。用翻译替换不变节需要特殊的版权所有者的许可,但您可以包括除这些不变节的原始版本。您可以包括本许可证的翻译,以及文件和任何保修免责声明,前提是您还包括本许可证的英文原件和原件这些通知和免责声明。如果双方意见不一致本许可证或通知的译文和原始版本或免责声明,以原始版本为准。
如果文件中的一节标题为“确认”,“奉献”或“历史”,保存要求(第4节)其标题(第1节)通常需要更改实际标题。
- 终止
您不得复制、修改、再授权或分发文档除非本许可证明确规定。任何尝试否则,对其进行复制、修改、再许可或分发是无效的,并且将自动终止您在本许可证下的权利。
但是,如果您停止所有违反本许可证的行为,那么您的许可证从特定版权持有人处恢复(a)暂时恢复,除非版权持有人明确且最终终止您的许可,以及(b)如果版权持有人未能在停止后60天。
此外,您从特定版权持有人处获得的许可是如果版权持有人通知您以某种合理的方式违规,这是你第一次收到违反本许可证(任何工作)的通知版权所有者,并且您在30天内纠正了违规行为你收到通知了。
终止您在本节项下的权利并不终止根据以下规定从您处收到副本或权利的各方的许可本许可证。如果您的权利已终止且不是永久性的恢复,收到部分或全部相同材料的副本没有给你任何使用它的权利。
- 本许可证的未来修订
自由软件基金会可能会发布新的修订版本GNU Free Documentation许可证。这么新的版本在精神上与当前版本相似,但可能在细节上有所不同,以解决新的问题或关注点。请参见http://www.gnu.org/copyleft/.
许可证的每个版本都有一个不同的版本号。如果文件规定许可证“或任何更高版本”适用于它,您可以选择遵循指定版本或由自由软件基金会。如果文档未指定版本此许可证的编号,您可以选择任何已发布的版本(不作为草案)。如果文件指定代理可以决定此的未来版本可以使用许可证,该代理人公开声明接受版本永久授权您为文件。
- 释放
“大规模多作者协作网站”(或“MMC网站”)指任何发布可受版权保护的作品的万维网服务器为任何人编辑这些作品提供了显著的工具。A类任何人都可以编辑的公共wiki就是这样一个服务器的例子。A类“大规模多作者合作”(或“MMC”)包含在网站是指在MMC上发布的任何受版权保护的作品现场。
“CC-BY-SA”是指知识共享署名共享3.0非营利组织Creative Commons Corporation发布的许可主要营业地位于旧金山的公司,加利福尼亚州以及该许可证的未来版权版本由同一组织发布。
“合并”是指发布或重新发布文件,全部或作为另一文件的一部分。
如果MMC根据本条获得许可,则其“有资格重新许可”许可证,以及根据本许可证首次发布的所有作品除MMC之外的其他地方,并随后并入整体(1)没有覆盖文本或不变部分,和(2)因此在2008年11月1日之前合并。
MMC站点的运营商可以重新发布站点中包含的MMC在2009年8月1日之前的任何时候,在同一地点根据CC-BY-SA,前提是MMC有资格重新获得许可。
附录:如何将此许可证用于您的文档
要在您编写的文档中使用本许可证,请包括文件中的许可,并将以下版权和标题页后面的许可证通知:
版权(C)年 你的名字.授予复制、分发和/或修改本文件的权限根据GNU免费文档许可证1.3版的条款或自由软件基金会发布的任何更新版本;没有不变节,没有前覆盖文本,也没有后覆盖文本。许可证副本包含在标题为“GNU”的部分中免费文档许可证“”。
如果有固定节、前覆盖文本和后覆盖文本,将“with…Texts.”行替换为:
不变部分为列出他们的标题,使用Front-Cover文本正在列表、和背面文本存在列表.
如果你有没有封面文字的不变部分,或其他一些三者的结合,将这两个备选方案合并以适应情况。
如果您的文档包含程序代码的重要示例,我们建议根据您的选择并行发布这些示例自由软件许可,如GNU通用公共许可,允许在自由软件中使用它们。
概念索引
功能和数据索引