接口参数说明
KSL_ASN1库函数接口定义中,为不同的格式提供了针对特定数据类型的编解码接口,其中DER类型编解码与BER类型编解码使用同一接口,通过AsnCtx中的method字段区分。
API命名遵照AsnBerEncodexx或AsnBerDecodexx(xx表示数据类型),返回值均为void,接口参数描述如下,下文不再赘述。
- desc:描述符结构体(输入)。
- stru:用户结构体(在编码接口中为输入,在解码接口中为输出)。
- ctx:上下文结构体(输入/输出)。
同时,KSL_ASN1提供了统一的编解码接口AsnEncode与AsnDecode,接口内部通过ctx.method判断编码模式,具体接口定义如下:
/** * @ingroup hiasn1 * @brief Hiasn1编码接口 * @attention 用户结构体stru的内存结构合法性(包括结构体内指针所指向的内存空间)由用户保证 * @attention 描述符desc为只读数据结构,用户须保证不通过任何方式修改其内部成员的值,否则将导致不可预测的运行时错误 * @attention 编解码之前必须调用初始化函数AsnInit * @param desc [IN] 描述符结构体 * @param stru [IN] 用户结构体 * @param ctx [IN/OUT] 上下文结构体 * @retval ≥0 编码成功,返回已编码数据长度(单位:PER为比特,其他为字节) * @retval <0 编码失败,错误码为返回值的绝对值 */ ssize_t AsnEncode(const AsnDesc *desc, const void *stru, AsnCtx *ctx); /** * @ingroup hiasn1 * @brief Hiasn1解码接口 * @attention 用户结构体stru的内存结构合法性(包括结构体内指针所指向的内存空间)由用户保证 * @attention 描述符desc为只读数据结构,用户须保证不通过任何方式修改其内部成员的值,否则将导致不可预测的运行时错误 * @attention 编解码之前必须调用初始化函数AsnInit * @param desc [IN] 描述符结构体 * @param stru [OUT] 用户结构体 * @param ctx [IN/OUT] 上下文结构体 * @retval ≥0 解码成功,返回已解码数据长度(单位:PER为比特,其他为字节) * @retval <0 解码失败,错误码为返回值的绝对值 */ ssize_t AsnDecode(const AsnDesc *desc, void *stru, AsnCtx *ctx);
父主题: 函数定义