文件
JGZYES 3e8a5442fa 实现 TLS 1.3 PSK 会话恢复,构建输出移至 bin/ 并新增 standalone/psftp 命令
TLS 1.3 PSK 会话恢复: NewSessionTicket 签发/解析、ticket+binder 校验、selected_identity 回选、恢复握手免证书(pazessl -sess_in/-sess_out 端到端验证); 构建脚本输出 bin/ 并支持独立命令与 psftp; 修复 SFTP 二进制传输与 copy_id -P; 补充 tests/ 调试与 verify_tls
2026-08-13 19:30:07 +08:00

85 行
2.4 KiB
C

/* dbg_divmod.c —— divmod/mod 针对性测试 */
#include "paze/p256.h"
#include "paze/bignum.h"
#include <stdio.h>
#include <string.h>
static void chk(const char *tag, int cond) {
printf("%s: %s\n", tag, cond ? "PASS" : "FAIL");
}
int main(void) {
paze_bn_t p, pm1, t, r, q;
paze_p256_load_p(&p);
paze_bn_set_u32(&pm1, 1);
paze_bn_sub(&pm1, &p, &pm1);
/* mod(p, p) == 0 */
paze_bn_mod(&r, &p, &p);
chk("p mod p == 0", paze_bn_is_zero(&r));
/* mod(p+1, p) == 1 */
paze_bn_t p1;
paze_bn_add(&p1, &p, &pm1); /* p + (p-1) 太大,换个: p+1 */
paze_bn_t one; paze_bn_set_u32(&one, 1);
paze_bn_add(&p1, &p, &one);
paze_bn_mod(&r, &p1, &p);
chk("(p+1) mod p == 1", paze_bn_is_one(&r));
/* mod(p^2, p) == 0 */
paze_bn_t p2;
paze_bn_mul(&p2, &p, &p);
paze_bn_mod(&r, &p2, &p);
chk("p^2 mod p == 0", paze_bn_is_zero(&r));
/* mod((p-1)^2, p) == 1 */
paze_bn_t pm1sq;
paze_bn_mul(&pm1sq, &pm1, &pm1);
paze_bn_mod(&r, &pm1sq, &p);
chk("(p-1)^2 mod p == 1", paze_bn_is_one(&r));
{
char h[300];
paze_bn_to_hex(&r, h, sizeof(h));
printf(" (p-1)^2 mod p = %s\n", h);
}
/* mod((p-1)^3, p) == p-1 */
paze_bn_t pm1cb;
paze_bn_mul(&pm1cb, &pm1sq, &pm1);
paze_bn_mod(&r, &pm1cb, &p);
chk("(p-1)^3 mod p == p-1", paze_bn_cmp(&r, &pm1) == 0);
/* divmod 商: (p^2) / p == p */
paze_bn_divmod(&q, &r, &p2, &p);
chk("p^2 / p == p", paze_bn_cmp(&q, &p) == 0);
/* (p-1)^2 / (p-1) == p-1 */
paze_bn_divmod(&q, &r, &pm1sq, &pm1);
chk("(p-1)^2 / (p-1) == p-1", paze_bn_cmp(&q, &pm1) == 0);
/* 随机大数乘法取模一致性 */
int fails = 0;
uint32_t xr = 7;
for (int i = 0; i < 50 && !fails; i++) {
paze_bn_t a, b;
uint8_t ab[32], bb[32];
for (int k = 0; k < 32; k++) {
xr ^= xr << 13; xr ^= xr >> 17; xr ^= xr << 5;
ab[k] = (uint8_t)xr;
xr ^= xr << 13; xr ^= xr >> 17; xr ^= xr << 5;
bb[k] = (uint8_t)xr;
}
ab[0] &= 0x7F; bb[0] &= 0x7F;
paze_bn_from_bytes(&a, ab, 32);
paze_bn_from_bytes(&b, bb, 32);
paze_bn_modmul(&r, &a, &b, &p);
paze_bn_modmul(&t, &b, &a, &p);
if (paze_bn_cmp(&r, &t) != 0) {
printf("modmul FAIL iter=%d\n", i);
fails++;
}
}
chk("random modmul commutative", fails == 0);
return 0;
}