📄 ans1.h
字号:
#pragma once
//
//简单定长方法(Primitive, definite-length method)
//
//1.Identifier octets,
//四个标签类
//bit7,bit8
#define MASK_TAG_CLASS 0xc0
#define CLASS_UNIVERSAL 0x00
#define CLASS_APPLICATION 0x40
#define CLASS_CONTEXT_SPEC 0x80
#define CLASS_PRIVATE 0xc0
//bit6 是否为简单化编码,0--简单化,1--结构化
//low-tag-number form
#define MASK_TAG_IS_STRUCT 0x20
//bit5-bit1指明标签的值
#define MASK_TAG_VALUE 0x1f
//数据长度
//CLASS_UNIVERSAL的标签值
//{{-===============================
//简单类型
//简单类型没有子组件,是“原子级”的类型。ASN.1定义了几个简单类型,其中与PKCS
//标准有关的类型如下
//一个任意的整数
#define TAG_NUM_INTEGER 0x02
//由0和1任意组成的比特流
#define TAG_NUM_BITSTRING 0x03
#define TAG_NUM_OCTSTRING 0x04
#define TAG_NUM_NULL 0x05
#define TAG_NUM_OBJ_ID 0x06
//}}-===============================
//{{-===============================
//结构类型
//一个或多个类型的有序集合
#define TAG_NUM_SEQ 0x10
//0个或某个给定类型多次出现的有序集合
#define TAG_NUM_SEQ_OF TAG_NUM_SEQ
//一个或多个类型的无序集合
#define TAG_NUM_SET 0x11
//0个或某给定类型多次出现的无序集合
#define TAG_NUM_SET_OF TAG_NUM_SET
//}}-===============================
//任意可打印字符流
#define TAG_NUM_PRTSTR 0x13
#define TAG_NUM_T61STR 0x14
#define TAG_NUM_IA5STR 0x16
//"coordinated universal time"或者格林威治平均时(GMT)值
#define TAG_NUM_UTCTIME 0x17
//2.Length octets: 有两种格式:短型(长度在0至127之间)和长型长度在0至21008-1之间
//Short form: 一个字节,bit8为0,bit 7-1表示长度。
#define MAX_VALUE_LEN_SHORT_FORM 0x7f
#define MASK_LEN_SHORT_FORM 0x7f
#define BIT_LEN_LONG_FORM 0x80
#define MASK_LONG_FORM_LEN_BYTES 0x7f
/*
//for pkcs1
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
version is the version number, for compatibility with future revisions of this document. It shall be 0 for this version of the document, unless multi-prime is used, in which case it shall be 1.
Version ::= INTEGER { two-prime(0), multi(1) }
(CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
//pkcs8
PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL };
Version ::= INTEGER
PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
PrivateKey ::= OCTET STRING
Attributes ::= SET OF Attribute
//
//from x509
//
Certificate ::= SIGNED SEQUENCE{
version [0]Version DEFAULT 1988,
serialNumber SerialNumber,
signature Algorithmidentifier
issuer Name
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo}
Version ::= INTEGER { 1988(0)}
SerialNumber ::= INTEGER
Validity ::= SEQUENCE{
notBefore UTCTime,
notAfter UTCTime}
SubjectPublicKeyInfo ::=SEQUENCE{
algorithm AlgorithmIdentifier
subjectKey BIT STRING}
AlgorithmIdentifier ::=SEQUENCE{
algorithm OBJECT IDENTIFIER
parameters ANY DEFINED BY algorithm OPTIONAL}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -