Compare commits

...
1 Commits
Author SHA1 Message Date
Sergio R. Caprile 9e9693db6f make padding strict 2026-11-10 12:51:25 -03:00
2 changed files with 24 additions and 24 deletions

No files matched your search

+12 -12
View File
@@ -19571,25 +19571,25 @@ static bool mg_tls_send_cert_verify(struct mg_connection *c, bool is_client) {
// EC certificate verify packet // EC certificate verify packet
uint8_t verify[82] = {0x0f, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00}; uint8_t verify[82] = {0x0f, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00};
size_t sigsz, verifysz = 0; size_t sigsz, verifysz = 0;
int neg1, neg2; int adj1, adj2;
uint8_t sig[64] = {0}; uint8_t sig[64] = {0};
if (!mg_p256_sign(tls->ec_key, hash, sizeof(hash), sig)) { if (!mg_p256_sign(tls->ec_key, hash, sizeof(hash), sig)) {
mg_error(c, "P-256 sign"); mg_error(c, "P-256 sign");
return false; return false;
} }
adj1 = sig[0] == 0 && !(sig[1] & 0x80) ? -1 : !!(sig[0] & 0x80);
neg1 = !!(sig[0] & 0x80); adj2 = sig[32] == 0 && !(sig[33] & 0x80) ? -1 : !!(sig[32] & 0x80);
neg2 = !!(sig[32] & 0x80);
verify[8] = 0x30; // ASN.1 SEQUENCE verify[8] = 0x30; // ASN.1 SEQUENCE
verify[9] = (uint8_t) (68 + neg1 + neg2); verify[9] = (uint8_t) (68 + adj1 + adj2);
verify[10] = 0x02; // ASN.1 INTEGER verify[10] = 0x02; // ASN.1 INTEGER
verify[11] = (uint8_t) (32 + neg1); verify[11] = (uint8_t) (32 + adj1);
memmove(verify + 12 + neg1, sig, 32); memmove(verify + (size_t) (12 + (adj1 > 0)), sig + (size_t) (adj1 < 0),
verify[12 + 32 + neg1] = 0x02; // ASN.1 INTEGER (size_t) (32 + (adj1 < 0)));
verify[13 + 32 + neg1] = (uint8_t) (32 + neg2); verify[12 + 32 + adj1] = 0x02; // ASN.1 INTEGER
memmove(verify + 14 + 32 + neg1 + neg2, sig + 32, 32); verify[13 + 32 + adj1] = (uint8_t) (32 + adj2);
memmove(verify + (size_t) (14 + 32 + adj1 + (adj2 > 0)),
sigsz = (size_t) (70 + neg1 + neg2); sig + (size_t) (32 + (adj2 < 0)), (size_t) (32 + (adj2 < 0)));
sigsz = (size_t) (70 + adj1 + adj2);
verifysz = 8U + sigsz; verifysz = 8U + sigsz;
verify[3] = (uint8_t) (sigsz + 4); verify[3] = (uint8_t) (sigsz + 4);
verify[7] = (uint8_t) sigsz; verify[7] = (uint8_t) sigsz;
+12 -12
View File
@@ -1175,25 +1175,25 @@ static bool mg_tls_send_cert_verify(struct mg_connection *c, bool is_client) {
// EC certificate verify packet // EC certificate verify packet
uint8_t verify[82] = {0x0f, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00}; uint8_t verify[82] = {0x0f, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00};
size_t sigsz, verifysz = 0; size_t sigsz, verifysz = 0;
int neg1, neg2; int adj1, adj2;
uint8_t sig[64] = {0}; uint8_t sig[64] = {0};
if (!mg_p256_sign(tls->ec_key, hash, sizeof(hash), sig)) { if (!mg_p256_sign(tls->ec_key, hash, sizeof(hash), sig)) {
mg_error(c, "P-256 sign"); mg_error(c, "P-256 sign");
return false; return false;
} }
adj1 = sig[0] == 0 && !(sig[1] & 0x80) ? -1 : !!(sig[0] & 0x80);
neg1 = !!(sig[0] & 0x80); adj2 = sig[32] == 0 && !(sig[33] & 0x80) ? -1 : !!(sig[32] & 0x80);
neg2 = !!(sig[32] & 0x80);
verify[8] = 0x30; // ASN.1 SEQUENCE verify[8] = 0x30; // ASN.1 SEQUENCE
verify[9] = (uint8_t) (68 + neg1 + neg2); verify[9] = (uint8_t) (68 + adj1 + adj2);
verify[10] = 0x02; // ASN.1 INTEGER verify[10] = 0x02; // ASN.1 INTEGER
verify[11] = (uint8_t) (32 + neg1); verify[11] = (uint8_t) (32 + adj1);
memmove(verify + 12 + neg1, sig, 32); memmove(verify + (size_t) (12 + (adj1 > 0)), sig + (size_t) (adj1 < 0),
verify[12 + 32 + neg1] = 0x02; // ASN.1 INTEGER (size_t) (32 + (adj1 < 0)));
verify[13 + 32 + neg1] = (uint8_t) (32 + neg2); verify[12 + 32 + adj1] = 0x02; // ASN.1 INTEGER
memmove(verify + 14 + 32 + neg1 + neg2, sig + 32, 32); verify[13 + 32 + adj1] = (uint8_t) (32 + adj2);
memmove(verify + (size_t) (14 + 32 + adj1 + (adj2 > 0)),
sigsz = (size_t) (70 + neg1 + neg2); sig + (size_t) (32 + (adj2 < 0)), (size_t) (32 + (adj2 < 0)));
sigsz = (size_t) (70 + adj1 + adj2);
verifysz = 8U + sigsz; verifysz = 8U + sigsz;
verify[3] = (uint8_t) (sigsz + 4); verify[3] = (uint8_t) (sigsz + 4);
verify[7] = (uint8_t) sigsz; verify[7] = (uint8_t) sigsz;