xrtSshPacketCodecInit

初始化双向 plain codec;零上限使用 XSSH_PACKET_MAX_DEFAULT。

xsshcode xrtSshPacketCodecInit( xsshpacketcodec* pCodec, uint32 iMaxPacketSize );
参数说明
xsshpacketcodec* pCodec编解码器
uint32 iMaxPacketSizeMaxPacketSze 参数
返回:初始化双向 plain codec;零上限使用 XSSH_PACKET_MAX_DEFAULT。

示例已编译验证

sshpacketcodecinit obj;
xrtSshPacketCodecInit(&obj, pCodec, iMaxPacketSize);

xrtSshPacketCodecClear

清除双向 cipher、nonce、序列号和状态标记。

void xrtSshPacketCodecClear(xsshpacketcodec* pCodec);
参数说明
xsshpacketcodec* pCodec编解码器
返回:清除双向 cipher、nonce、序列号和状态标记。

示例已编译验证

/* 清除双向 cipher、nonce、序列号和状态标记。 */
result = xrtSshPacketCodecClear(pCodec);

xrtSshPacketCodecSetReadAesGcm

在收到 peer NEWKEYS 后原子切换读取方向,不修改读取序列号。

xsshcode xrtSshPacketCodecSetReadAesGcm( xsshpacketcodec* pCodec, xbytesview Key, xbytesview InitialIV );
参数说明
xsshpacketcodec* pCodec编解码器
xbytesview Key键
xbytesview InitialIVIntalIV 参数
返回:在收到 peer NEWKEYS 后原子切换读取方向,不修改读取序列号。

示例已编译验证

/* 在收到 peer NEWKEYS 后原子切换读取方向,不修改读取序列号。 */
result = xrtSshPacketCodecSetReadAesGcm(pCodec, Key, InitialIV);

xrtSshPacketCodecSetWriteAesGcm

在发送本端 NEWKEYS 后原子切换写入方向,不修改写入序列号。

xsshcode xrtSshPacketCodecSetWriteAesGcm( xsshpacketcodec* pCodec, xbytesview Key, xbytesview InitialIV );
参数说明
xsshpacketcodec* pCodec编解码器
xbytesview Key键
xbytesview InitialIVIntalIV 参数
返回:在发送本端 NEWKEYS 后原子切换写入方向,不修改写入序列号。

示例已编译验证

/* 在发送本端 NEWKEYS 后原子切换写入方向,不修改写入序列号。 */
result = xrtSshPacketCodecSetWriteAesGcm(pCodec, Key, InitialIV);

xrtSshPacketCodecResetReadSequence

仅供协商 strict-kex 后在对应方向 NEWKEYS 边界重置序列号。

xsshcode xrtSshPacketCodecResetReadSequence( xsshpacketcodec* pCodec );
参数说明
xsshpacketcodec* pCodec编解码器
返回:仅供协商 strict-kex 后在对应方向 NEWKEYS 边界重置序列号。

示例已编译验证

/* 仅供协商 strict-kex 后在对应方向 NEWKEYS 边界重置序列号。 */
result = xrtSshPacketCodecResetReadSequence(pCodec);

xrtSshPacketCodecResetWriteSequence

XRT_API xsshcode xrtSshPacketCodecResetWriteSequence( xsshpacketcodec* pCodec );

;
返回:XRT_API xsshcode xrtSshPacketCodecResetWriteSequence( xsshpacketcodec* pCodec );

示例已编译验证

/* XRT_API xsshcode xrtSshPacketCodecResetWriteSequence( xsshpacketcodec* pCodec ); */
result = xrtSshPacketCodecResetWriteSequence();

xrtSshPacketCodecInspect

探测 reader 当前 packet 的完整线长和所需解密工作区。

xsshcode xrtSshPacketCodecInspect( const xsshpacketcodec* pCodec, const xsshreader* pReader, xsshpacketneed* pNeed );
参数说明
const xsshpacketcodec* pCodec编解码器
const xsshreader* pReader读取器
xsshpacketneed* pNeedNeed 参数
返回:探测 reader 当前 packet 的完整线长和所需解密工作区。

示例已编译验证

/* 探测 reader 当前 packet 的完整线长和所需解密工作区。 */
result = xrtSshPacketCodecInspect(pCodec, pReader, pNeed);

xrtSshPacketCodecWriteMeasure

按当前写方向精确计算 packet_length 和最终线路长度。

xsshcode xrtSshPacketCodecWriteMeasure( const xsshpacketcodec* pCodec, size_t iPayloadSize, xsshpacketneed* pNeed );
参数说明
const xsshpacketcodec* pCodec编解码器
size_t iPayloadSizePayloadSze 参数
xsshpacketneed* pNeedNeed 参数
返回:按当前写方向精确计算 packet_length 和最终线路长度。

示例已编译验证

/* 按当前写方向精确计算 packet_length 和最终线路长度。 */
result = xrtSshPacketCodecWriteMeasure(pCodec, iPayloadSize, pNeed);

xrtSshPacketCodecWritePrepareWithPadding

XRT_API xsshcode xrtSshPacketCodecWritePrepareWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData );

;
返回:XRT_API xsshcode xrtSshPacketCodecWritePrepareWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData );

示例已编译验证

/* XRT_API xsshcode xrtSshPacketCodecWritePrepareWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData ); */
result = xrtSshPacketCodecWritePrepareWithPadding();

xrtSshPacketCodecWriteCommit

提交唯一一个已可靠入队的写事务,并推进 sequence 与 cipher nonce。

xsshcode xrtSshPacketCodecWriteCommit(xsshpacketcodec* pCodec);
参数说明
xsshpacketcodec* pCodec编解码器
返回:提交唯一一个已可靠入队的写事务,并推进 sequence 与 cipher nonce。

示例已编译验证

/* 提交唯一一个已可靠入队的写事务,并推进 sequence 与 cipher nonce。 */
result = xrtSshPacketCodecWriteCommit(pCodec);

xrtSshPacketCodecWriteAbort

放弃尚未发送的写事务;调用方负责丢弃已生成的线路字节。

xsshcode xrtSshPacketCodecWriteAbort(xsshpacketcodec* pCodec);
参数说明
xsshpacketcodec* pCodec编解码器
返回:放弃尚未发送的写事务;调用方负责丢弃已生成的线路字节。

示例已编译验证

/* 放弃尚未发送的写事务;调用方负责丢弃已生成的线路字节。 */
result = xrtSshPacketCodecWriteAbort(pCodec);

xrtSshPacketCodecWriteWithPadding

使用调用方 padding 源一次性准备并提交,适用于无需背压重试的路径。

xsshcode xrtSshPacketCodecWriteWithPadding( xsshpacketcodec* pCodec, xsshwriter* pWriter, xbytesview Payload, xsshpaddingproc pPadding, ptr pUserData );
参数说明
xsshpacketcodec* pCodec编解码器
xsshwriter* pWriter写入器
xbytesview Payload负载
xsshpaddingproc pPaddingPaddng 参数
ptr pUserData透传用户数据
返回:使用调用方 padding 源一次性准备并提交,适用于无需背压重试的路径。

示例已编译验证

/* 使用调用方 padding 源一次性准备并提交,适用于无需背压重试的路径。 */
result = xrtSshPacketCodecWriteWithPadding(pCodec, pWriter, Payload, pPadding, pUserData);

xrtSshPacketCodecRead

从当前方向增量读取;AES-GCM 模式把明文写入调用方工作区。

xsshcode xrtSshPacketCodecRead( xsshpacketcodec* pCodec, xsshreader* pReader, xsshpacketview* pPacket, void* pPlain, size_t iPlainCapacity );
参数说明
xsshpacketcodec* pCodec编解码器
xsshreader* pReader读取器
xsshpacketview* pPacket数据包
void* pPlain明文
size_t iPlainCapacityPlanCaacty 参数
返回:从当前方向增量读取;AES-GCM 模式把明文写入调用方工作区。

示例已编译验证

/* 从当前方向增量读取;AES-GCM 模式把明文写入调用方工作区。 */
result = xrtSshPacketCodecRead(pCodec, pReader, pPacket, pPlain, iPlainCapacity);