Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Build StatusCoverage StatusDocumentation StatusPyPIPyPi versionPyPi downloads

csodium

csodium is a Python 2/3 standalone interface for libsodium.

Rationale

csodium was started as the result of a disagreement with pysodium maintainers. They wanted the library to remain a simple wrapper (using ctypes to dynamically load libsodium at runtime, mainly to always use the latest system available libsodium) while we wanted it to be a standalone package that would work out of the box, especially for Windows/Mac OSX wheel users.

The goal being users should not need to install/compile libsodium and could just do pip install to get things started.

Another point of conflict is the support of Python 3.

As an attempt to make the best out of those two opinions, csodium was initiated, which aims at providing an out-of-the-box, ready-to-use libsodium Python interface while still giving the ability to Linux and OSX users to recompile and/or use the latest available libsodium if they want to.

csodium aims to be compatible with pysodium, but there is no syncing of any kind between the two projects as of now, so their APIs might diverge in the future.

API

csodium aims at offering the whole libsodium API through its Python's bindings. However, it only offers a subset at the moment (crypto_box and crypto_secretbox family functions). I'm the sole contributor which explains why this API support improves slowly. If you are interested in making things faster, adding new functions is actually really simple and pull requests are most welcome ! Here is the guide:

  1. Find the exact C prototype of the function you wish to add support for and add it to the _build.py module.
  2. Implement a meaningful Python version of that function in the __init__.py module. You can get your inspiration from already defined function.
  3. Make sure you handle well incorrect input value and that you raise appropriately on errors. See the _raise_on_error helper function.
  4. Write tests that cover input failures as well as at least a successful run. Coverage should remain at 100%. Also remember that the goal is not to test libsodium but the Python binding.
  5. Submit your pull request !

Python 2 support on Windows

Sadly, libsodium hasn't been supporting Visual Studio 2008 for a while and this is required to make binary packages for Python 2.7 on Windows. If you know of a simple way to compile libsodium using Visual Studio for Python that doesn't prevent upgrading libsodium, please contribute !

Installation

You may install it by using pip:

pip install csodium

About

A standalone libsodium interface.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages