File indexing completed on 2024-02-18 04:45:05

0001 /*
0002  * Copyright (C) 2004,2005  Justin Karneges <justin@affinix.com>
0003  *
0004  * This library is free software; you can redistribute it and/or
0005  * modify it under the terms of the GNU Lesser General Public
0006  * License as published by the Free Software Foundation; either
0007  * version 2.1 of the License, or (at your option) any later version.
0008  *
0009  * This library is distributed in the hope that it will be useful,
0010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012  * Lesser General Public License for more details.
0013  *
0014  * You should have received a copy of the GNU Lesser General Public
0015  * License along with this library; if not, write to the Free Software
0016  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
0017  * 02110-1301  USA
0018  *
0019  */
0020 
0021 #include "qca_systemstore.h"
0022 
0023 #include <Security/SecCertificate.h>
0024 #include <Security/SecTrust.h>
0025 
0026 namespace QCA {
0027 
0028 bool qca_have_systemstore()
0029 {
0030     return true;
0031 }
0032 
0033 CertificateCollection qca_get_systemstore(const QString &provider)
0034 {
0035     CertificateCollection col;
0036     CFArrayRef            anchors;
0037     if (SecTrustCopyAnchorCertificates(&anchors) != 0)
0038         return col;
0039     for (int n = 0; n < CFArrayGetCount(anchors); ++n) {
0040         SecCertificateRef cr     = (SecCertificateRef)CFArrayGetValueAtIndex(anchors, n);
0041         CFDataRef         derRef = SecCertificateCopyData(cr);
0042         QByteArray        der((const char *)CFDataGetBytePtr(derRef), CFDataGetLength(derRef));
0043         CFRelease(derRef);
0044 
0045         Certificate cert = Certificate::fromDER(der, 0, provider);
0046         if (!cert.isNull())
0047             col.addCertificate(cert);
0048     }
0049     CFRelease(anchors);
0050     return col;
0051 }
0052 
0053 }