') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Add rand_core::RngCore implementation to chacha20 by dhardy · Pull Request #63 · RustCrypto/stream-ciphers · GitHub
Skip to content

Add rand_core::RngCore implementation to chacha20 - #63

Merged
tarcieri merged 1 commit into
RustCrypto:masterfrom
dhardy:master
Oct 23, 2019
Merged

Add rand_core::RngCore implementation to chacha20#63
tarcieri merged 1 commit into
RustCrypto:masterfrom
dhardy:master

Conversation

@dhardy

Copy link
Copy Markdown
Contributor

This is a quick-and-dirty implementation for testing (could do with seek implementation and better doc at least).

@tarcieri

Copy link
Copy Markdown
Member

I think I'd like to cut another release of chacha20 with the SSE impl then merge this

@tarcieri
tarcieri merged commit 46afd2b into RustCrypto:masterOct 23, 2019
@tarcieri

Copy link
Copy Markdown
Member

@dhardy thanks!

tarcieri added a commit that referenced this pull request Mar 16, 2021
Removes `derive(Clone)` on `ChaCha*Rng*`.
They date back to the original PR which added RNG support (#63).
Allowing `Clone` on an RNG is problematic because the cloned RNG will
have the same internal state, duplicating outputs which can be
catastrophic in a cryptographic context.
Instead, the `SeedableRng::from_rng` method can be used to "fork" one
RNG from another, seeing a new RNG with an output from another:
https://docs.rs/rand_core/0.6.2/rand_core/trait.SeedableRng.html#method.from_rng
tarcieri added a commit that referenced this pull request Mar 16, 2021
Removes `derive(Clone)` on `ChaCha*Rng*`.
They date back to the original PR which added RNG support (#63).
Allowing `Clone` on an RNG is problematic because the cloned RNG will
have the same internal state, duplicating outputs which can be
catastrophic in a cryptographic context.
Instead, the `SeedableRng::from_rng` method can be used to "fork" one
RNG from another, seeing a new RNG with an output from another:
https://docs.rs/rand_core/0.6.2/rand_core/trait.SeedableRng.html#method.from_rng
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dhardy@tarcieri