package errors

import "xdx.jelly/xgcl/gerrors"

//go:generate stringer -type=ErrorCode -linecomment -output=errors_string.go errors.go
type ErrorCode gerrors.ErrorCode

func (e ErrorCode) Error() string {
	return gerrors.Format(uint32(e), e.String())
}

// error codes
const (
	ErrInvalidInput         ErrorCode = 0x01009000 + iota //输入不合法
	ErrMarshalFailed                                      //Marshal失败
	ErrUnmarshalFailed                                    //Unmarshal失败
	ErrGenerateRandomFailed                               //生成随机数失败
	ErrEncodeASN1Failed                                   //ASN.1编码失败
	ErrDecodeASN1Failed                                   //ASN.1解码失败
	ErrInvalidPoint                                       //不是SM9曲线上的点
	ErrInvalidMastPublicKey                               //SM9主公钥不合法
	ErrInvalidPublicKey                                   //SM9公钥不合法
	ErrSignFailed                                         //SM9签名失败
	ErrVerifyFailed                                       //SM9签名验证失败
	ErrEncFailed                                          //SM9加密失败
	ErrDecFailed                                          //SM9解密失败
	ErrKeyExchangeFailed                                  //SM9密钥交换失败
	ErrKeyEncapsuleFailed                                 //SM9密钥封装失败
	ErrKeyUnencapsuleFailed                               //SM9密钥解封装失败
	ErrKGCRebuildKey                                      //KGC主密钥需要重新
	ErrEncUnsupportedMode                                 //SM9加密不支持的模式
)

// ERR_SM9_INVALID_MLEN_OF_SM4      //明文长度不合法
// ERR_SM9_INVALID_CLEN_OF_SM4      //密文长度不合法
// ERR_SM9_DEC_INVALID_C1           //SM9密文C1不是一个有效点
// ERR_SM9_DEC_KEY_IS_ZERO          //SM9解密中得到K1全0
// ERR_SM9_DEC_INVALID_MAC          //SM
// 解密MAC校验不通过
// ERR_SM9_KEYUE_INVALID_C1         //SM9解封装密文C1不是一个有效点
// ERR_SM9_KEYUE_KEY_IS_ZERO        //SM9解封装密文K1全0
// ERR_SM9_KEYEX_CHECK_HASH_FAIL    //SM9密钥交换验证失败
// ERR_SM9_KEYEX_INVALID_POINT      //SM9密钥交换接收到的Ra、Rb不是一个有效的点
// ERR_SM9_SIGN_VERIFY_FAIL         //SM9签名验证失败
// ERR_SM9_ENC_GET_LEN_INVALID_TYPE //SM9根据密文/明文长度、加密类型获取解密明文/加密密文,输入类型错误
// ERR_SM9_ENC_GET_LEN_INVALID_LEN  //输入长度不正确
// ERR_SM9_INVALID_CLEN             //密文长度不合法
