|
|
|
@ -22,8 +22,8 @@ |
|
|
|
|
#include "clamav-config.h" |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#include "crtmgr.h" |
|
|
|
|
#include "others.h" |
|
|
|
|
#include "crtmgr.h" |
|
|
|
|
|
|
|
|
|
int cli_crt_init(cli_crt *x509) { |
|
|
|
|
int ret; |
|
|
|
@ -418,57 +418,77 @@ static const uint8_t VER_MOD[] = "\ |
|
|
|
|
static const uint8_t VER_EXP[] = "\x01\x00\x01"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int crtmgr_add_roots(crtmgr *m) { |
|
|
|
|
int crtmgr_add_roots(struct cl_engine *engine, crtmgr *m) { |
|
|
|
|
cli_crt ca; |
|
|
|
|
if(cli_crt_init(&ca)) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
do { |
|
|
|
|
memset(ca.issuer, '\xca', sizeof(ca.issuer)); |
|
|
|
|
memcpy(ca.subject, MSCA_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
memset(ca.serial, '\xca', sizeof(ca.serial)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, MSCA_MOD, sizeof(MSCA_MOD)-1) || mp_read_unsigned_bin(&ca.e, MSCA_EXP, sizeof(MSCA_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read MSCA key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ca.not_before = 0; |
|
|
|
|
ca.not_after = (-1U)>>1; |
|
|
|
|
ca.certSign = 1; |
|
|
|
|
ca.codeSign = 1; |
|
|
|
|
ca.timeSign = 1; |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
memcpy(ca.subject, MSA_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, MSA_MOD, sizeof(MSA_MOD)-1) || mp_read_unsigned_bin(&ca.e, MSA_EXP, sizeof(MSA_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read MSA key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
memcpy(ca.subject, VER_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, VER_MOD, sizeof(VER_MOD)-1) || mp_read_unsigned_bin(&ca.e, VER_EXP, sizeof(VER_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read VER key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ca.timeSign = 0; |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
memcpy(ca.subject, THAW_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, THAW_MOD, sizeof(THAW_MOD)-1) || mp_read_unsigned_bin(&ca.e, THAW_EXP, sizeof(THAW_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read THAW key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ca.codeSign = 0; |
|
|
|
|
ca.timeSign = 1; |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
return 0; |
|
|
|
|
} while(0); |
|
|
|
|
cli_crt *crt, *new_crt; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Only add trusted (and revoked) root certs once. Copy certs |
|
|
|
|
* from engine's root certs list. |
|
|
|
|
*/ |
|
|
|
|
if (m == &(engine->cmgr)) { |
|
|
|
|
do { |
|
|
|
|
if(cli_crt_init(&ca)) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
memset(ca.issuer, '\xca', sizeof(ca.issuer)); |
|
|
|
|
memcpy(ca.subject, MSCA_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
memset(ca.serial, '\xca', sizeof(ca.serial)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, MSCA_MOD, sizeof(MSCA_MOD)-1) || mp_read_unsigned_bin(&ca.e, MSCA_EXP, sizeof(MSCA_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read MSCA key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ca.not_before = 0; |
|
|
|
|
ca.not_after = (-1U)>>1; |
|
|
|
|
ca.certSign = 1; |
|
|
|
|
ca.codeSign = 1; |
|
|
|
|
ca.timeSign = 1; |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
memcpy(ca.subject, MSA_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, MSA_MOD, sizeof(MSA_MOD)-1) || mp_read_unsigned_bin(&ca.e, MSA_EXP, sizeof(MSA_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read MSA key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
memcpy(ca.subject, VER_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, VER_MOD, sizeof(VER_MOD)-1) || mp_read_unsigned_bin(&ca.e, VER_EXP, sizeof(VER_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read VER key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ca.timeSign = 0; |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
memcpy(ca.subject, THAW_SUBJECT, sizeof(ca.subject)); |
|
|
|
|
if(mp_read_unsigned_bin(&ca.n, THAW_MOD, sizeof(THAW_MOD)-1) || mp_read_unsigned_bin(&ca.e, THAW_EXP, sizeof(THAW_EXP)-1)) { |
|
|
|
|
cli_errmsg("crtmgr_add_roots: failed to read THAW key\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ca.codeSign = 0; |
|
|
|
|
ca.timeSign = 1; |
|
|
|
|
if(crtmgr_add(m, &ca)) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} while(0); |
|
|
|
|
|
|
|
|
|
cli_crt_clear(&ca); |
|
|
|
|
crtmgr_free(m); |
|
|
|
|
return 1; |
|
|
|
|
} else { |
|
|
|
|
for (crt = engine->cmgr.crts; crt != NULL; crt = crt->next) { |
|
|
|
|
if (crtmgr_add(m, crt)) { |
|
|
|
|
crtmgr_free(m); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cli_crt_clear(&ca); |
|
|
|
|
crtmgr_free(m); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|