CertificateCollection qca_get_systemstore(const QString &provider) { CertificateCollection col; HCERTSTORE hSystemStore; hSystemStore = CertOpenSystemStoreA(0, "ROOT"); if(!hSystemStore) return col; PCCERT_CONTEXT pc = NULL; while(1) { pc = CertFindCertificateInStore( hSystemStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, pc); if(!pc) break; int size = pc->cbCertEncoded; QByteArray der(size, 0); memcpy(der.data(), pc->pbCertEncoded, size); Certificate cert = Certificate::fromDER(der, 0, provider); if(!cert.isNull()) col.addCertificate(cert); } CertCloseStore(hSystemStore, 0); return col; }
bool qca_have_systemstore() { bool ok = false; HCERTSTORE hSystemStore; hSystemStore = CertOpenSystemStoreA(0, "ROOT"); if(hSystemStore) ok = true; CertCloseStore(hSystemStore, 0); return ok; }
int secure::oscerts(const char *pathname) { bool caset = false; string_t target; if(pathname[1] == ':' || pathname[0] == '/' || pathname[0] == '\\') target = pathname; else target = shell::path(shell::USER_CONFIG) + "/" + pathname; FILE *fp = fopen(*target, "wt"); if(!fp) return ENOSYS; HCERTSTORE ca = CertOpenSystemStoreA((HCRYPTPROV)NULL, "ROOT"); if(ca) { caset = true; cexport(ca, fp); CertCloseStore(ca, 0); } ca = CertOpenSystemStoreA((HCRYPTPROV)NULL, "CA"); if(ca) { caset = true; cexport(ca, fp); CertCloseStore(ca, 0); } fclose(fp); if(!caset) { fsys::erase(*target); return ENOSYS; } return 0; }