Mbedtls.hx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package sys.ssl;
  2. import eval.vm.NativeSocket;
  3. import mbedtls.Ssl;
  4. import mbedtls.Entropy;
  5. import mbedtls.CtrDrbg;
  6. import mbedtls.X509Crt;
  7. class Mbedtls {
  8. static var entropy:Null<Entropy>;
  9. static var ctr:Null<CtrDrbg>;
  10. static public function getDefaultEntropy() {
  11. if (entropy == null) {
  12. entropy = new Entropy();
  13. }
  14. return entropy;
  15. }
  16. static public function getDefaultCtrDrbg() {
  17. if (ctr == null) {
  18. ctr = new CtrDrbg();
  19. ctr.seed(getDefaultEntropy());
  20. }
  21. return ctr;
  22. }
  23. static public function loadDefaultCertificates(certificate:X509Crt) {
  24. if (loadDefaults(certificate) == 0) {
  25. return;
  26. }
  27. var defPaths = switch (Sys.systemName()) {
  28. case "Linux":
  29. [
  30. "/etc/ssl/certs/ca-certificates.crt", // Debian/Ubuntu/Gentoo etc.
  31. "/etc/pki/tls/certs/ca-bundle.crt", // Fedora/RHEL
  32. "/etc/ssl/ca-bundle.pem", // OpenSUSE
  33. "/etc/pki/tls/cacert.pem", // OpenELEC
  34. "/etc/ssl/certs", // SLES10/SLES11
  35. "/system/etc/security/cacerts" // Android
  36. ];
  37. case "BSD":
  38. [
  39. "/usr/local/share/certs/ca-root-nss.crt", // FreeBSD/DragonFly
  40. "/etc/ssl/cert.pem", // OpenBSD
  41. "/etc/openssl/certs/ca-certificates.crt", // NetBSD
  42. ];
  43. case "Android":
  44. ["/system/etc/security/cacerts"];
  45. default:
  46. [];
  47. }
  48. for (path in defPaths) {
  49. if (sys.FileSystem.exists(path)) {
  50. if (sys.FileSystem.isDirectory(path))
  51. certificate.parse_path(path);
  52. else
  53. certificate.parse_file(path);
  54. }
  55. }
  56. }
  57. extern static public function setSocket(ssl:Ssl, socket:NativeSocket):Int;
  58. extern static function loadDefaults(certificate:X509Crt):Int;
  59. }