@@ -35,6 +35,7 @@ using ncrypto::MarkPopErrorOnReturn;
35
35
using ncrypto::SSLPointer;
36
36
using ncrypto::StackOfX509;
37
37
using ncrypto::X509Pointer;
38
+ using ncrypto::X509View;
38
39
using v8::Array;
39
40
using v8::ArrayBufferView;
40
41
using v8::Boolean;
@@ -255,6 +256,31 @@ bool isSelfIssued(X509* cert) {
255
256
return X509_NAME_cmp (subject, issuer) == 0 ;
256
257
}
257
258
259
+ void X509VectorToPEMVector (const std::vector<X509Pointer>& src,
260
+ std::vector<std::string>* dest) {
261
+ for (size_t i = 0 ; i < src.size (); i++) {
262
+ X509View x509_view (src[i].get ());
263
+
264
+ auto pem_bio = x509_view.toPEM ();
265
+ if (!pem_bio) {
266
+ fprintf (stderr,
267
+ " Warning: converting system certificate to PEM format failed\n " );
268
+ continue ;
269
+ }
270
+
271
+ char * pem_data = nullptr ;
272
+ auto pem_size = BIO_get_mem_data (pem_bio.get (), &pem_data);
273
+ if (pem_size <= 0 || !pem_data) {
274
+ fprintf (
275
+ stderr,
276
+ " Warning: cannot read PEM-encoded data from system certificate\n " );
277
+ continue ;
278
+ }
279
+
280
+ dest->emplace_back (pem_data, pem_size);
281
+ }
282
+ }
283
+
258
284
#ifdef __APPLE__
259
285
// This code is loosely based on
260
286
// https://github.com/chromium/chromium/blob/54bd8e3/net/cert/internal/trust_store_mac.cc
@@ -467,7 +493,7 @@ void ReadMacOSKeychainCertificates(
467
493
468
494
CFIndex count = CFArrayGetCount (curr_anchors);
469
495
470
- std::vector<X509* > system_root_certificates_X509;
496
+ std::vector<X509Pointer > system_root_certificates_X509;
471
497
for (int i = 0 ; i < count; ++i) {
472
498
SecCertificateRef cert_ref = reinterpret_cast <SecCertificateRef>(
473
499
const_cast <void *>(CFArrayGetValueAtIndex (curr_anchors, i)));
@@ -489,28 +515,8 @@ void ReadMacOSKeychainCertificates(
489
515
}
490
516
CFRelease (curr_anchors);
491
517
492
- for (size_t i = 0 ; i < system_root_certificates_X509.size (); i++) {
493
- ncrypto::X509View x509_view (system_root_certificates_X509[i]);
494
-
495
- auto pem_bio = x509_view.toPEM ();
496
- if (!pem_bio) {
497
- fprintf (stderr,
498
- " Warning: converting system certificate to PEM format failed\n " );
499
- continue ;
500
- }
501
-
502
- char * pem_data = nullptr ;
503
- auto pem_size = BIO_get_mem_data (pem_bio.get (), &pem_data);
504
- if (pem_size <= 0 || !pem_data) {
505
- fprintf (
506
- stderr,
507
- " Warning: cannot read PEM-encoded data from system certificate\n " );
508
- continue ;
509
- }
510
- std::string certificate_string_pem (pem_data, pem_size);
511
-
512
- system_root_certificates->emplace_back (certificate_string_pem);
513
- }
518
+ X509VectorToPEMVector (system_root_certificates_X509,
519
+ system_root_certificates);
514
520
}
515
521
#endif // __APPLE__
516
522
0 commit comments