package identifier

import "encoding/asn1"

type ObjectIdentifier = asn1.ObjectIdentifier

var (
	// GBT 33560
	OIDISOMember = asn1.ObjectIdentifier{1, 2}                //国际标准化组织成员标识
	_            = asn1.ObjectIdentifier{1, 2, 156}           //中国
	_            = asn1.ObjectIdentifier{1, 2, 156, 197}      //国家密码管理局
	_            = asn1.ObjectIdentifier{1, 2, 156, 10197}    //国家密码行业标准化技术委员会
	_            = asn1.ObjectIdentifier{1, 2, 156, 10197, 1} //密码算法

	// 分组密码算法对象标识符
	OIDBlock = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 100} //分组密码算法
	OIDSM1   = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 102} //SM1分组密码算法
	OIDSSF33 = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 103} //SSF33分组密码算法
	OIDSM4   = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 104} //SM4分组密码算法

	// 序列密码算法对象标识符
	OIDStream = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 200} //序列密码算法
	OIDZUC    = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 201} //祖冲之序列密码算法

	// 公钥密码算法对象标识符
	OIDPublic         = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 300}    //公钥密码算法
	OIDSM2            = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 301}    //SM2椭圆曲线公钥密码算法
	OIDSM2Signature   = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 301, 1} //SM2-1数字签名算法
	OIDSM2KeyExchange = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 301, 2} //SM2-2密钥交换协议
	OIDSM2Encryption  = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 301, 3} //SM2-3公钥加密算法

	OIDSM9               = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302}       //SM9 IBC密码算法
	OIDSM9Signature      = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 1}    //SM9 IBC签名算法
	OIDSM9KeyExchange    = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 2}    //SM9 IBC密钥交换协议
	OIDSM9Encryption     = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 3}    //SM9 IBC加密算法
	OIDSM9EncryptionKDF  = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 3, 0} //基于KDF加密模式的SM9 IBC加密
	OIDSM9EncryptionECB  = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 3, 1} //基于SM4_ECB加密模式的SM9 IBC加密
	OIDSM9EncryptionCBC  = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 3, 2} //基于SM4_CBC加密模式的SM9 IBC加密
	OIDSM9EncryptionCFB  = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 3, 3} //基于SM4_CFB加密模式的SM9 IBC加密
	OIDSM9EncryptionOFB  = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 3, 4} //基于SM4_OFB加密模式的SM9 IBC加密
	OIDSM9KeyEncupsulate = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 302, 4}    //SM9 IBC密钥封装机制

	// 杂凑算法对象标识符
	OIDHash          = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 400}    //杂凑算法
	OIDSM3           = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 401}    //SM3密码杂凑算法
	OIDSM3WithoutKey = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 401, 1} //SM3密码杂凑算法，无密钥使用
	OIDSM3WithKey    = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 401, 2} //SM3密码杂凑算法，有密钥使用

	// 组合运算算法对象标识符
	_                       = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 500} //组合运算机制
	OIDSM3WithSM2Encryption = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 501} //基于SM2算法和SM3算法的签名, name IdSm3WithSm2Encryption is from GB/T 20518-2018 appendix E
	OIDSM3WithRSAEncryption = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 504} //基于RSA算法和SM3算法的签名

	// CA代码对象标识符
	OIDCA = asn1.ObjectIdentifier{1, 2, 156, 10197, 4, 3} //CA代码

	// 标准体系对象标识符
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6}          //标准体系
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1}       //基础类
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 1}    //算法类
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 1, 1} //《祖冲之序列密码算法》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 1, 2} //《SM4分组密码算法》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 1, 3} //《SM2椭圆曲线公钥密码算法》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 1, 4} //《SM3密码杂凑算法》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 2}    //标识类
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 2, 1} //《密码应用标识规范》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 3}    //工作模式
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 4}    //安全机制
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 4, 1} //《SM2密码使用规范》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 4, 2} //《SM2加密签名消息语法规范》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 2}       //设备类
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 3}       //服务类
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 4}       //基础设施
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 5}       //检测类
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 5, 1}    //《随机性检测规范》
	_ = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 6}       //管理类

	// defined in GMT 0091 附录
	// hmac_sm3 是哪个
	// OIDHMacWithSM3 = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 401, 3, 1}     // hmac_sm3
	OIDHMacWithSM3 = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 401, 2}        //SM3密码杂凑算法，有密钥使用
	OIDSM4ECB      = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 104, 1}        // sm4_ecb
	OIDSM4CBC      = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 104, 2}        // sm4_cbc
	OIDSM4GCM      = asn1.ObjectIdentifier{1, 2, 156, 10197, 1, 104, 10}       // sm4_gcm
	OIDPBKDF       = asn1.ObjectIdentifier{1, 2, 156, 10197, 6, 1, 4, 1, 5, 1} // PBKDF
)
