⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ans1.h

📁 对数据进行base64编码
💻 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 + -