File indexing completed on 2024-09-15 04:16:15
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 }