') + ')', '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); } })(); })(); GitHub - jklong/utils: Utility crates used in RustCrypto · GitHub
Skip to content

Repository files navigation

RustCrypto: Utilities Project Chatdependency status

This repository contains various utility crates used in the RustCrypto project.

Crates

Namecrates.ioDocsDescription
base64ctcrates.ioDocumentationConstant-time encoder and decoder of several Base64 variants
blobbycrates.ioDocumentationDecoder of the simple de-duplicated binary blob storage format
block-buffercrates.ioDocumentationFixed size buffer for block processing of data
block‑paddingcrates.ioDocumentationPadding and unpadding of messages divided into blocks
collectablecrates.ioDocumentationFallible, no_std-friendly collection traits
const-oidcrates.ioDocumentationConst-friendly implementation of the ISO/IEC Object Identifier (OID) standard as defined in ITU X.660
cpufeaturescrates.ioDocumentationLightweight and efficient alternative to the is_x86_feature_detected! macro
crypto‑bigintcrates.ioDocumentationBig integer library for cryptographic applciations
dblcrates.ioDocumentationDouble operation in Galois Field (GF)
dercrates.ioDocumentationDecoder and encoder of the Distinguished Encoding Rules (DER) for Abstract Syntax Notation One (ASN.1) as described in ITU X.690
hex-literalcrates.ioDocumentationProcedural macro for converting hexadecimal string to byte array at compile time
opaque-debugcrates.ioDocumentationMacro for opaque Debug trait implementation
pem-rfc7468crates.ioDocumentationStrict PEM encoding for PKIX/PKCS/CMS objects
pkcs1crates.ioDocumentationImplementation of PKCS#1: RSA Cryptography Specifications Version 2.2 (RFC 8017)
pkcs5crates.ioDocumentationImplementation of PKCS#5: Password-Based Cryptography Specification Version 2.1 (RFC 8018)
pkcs8crates.ioDocumentationImplementation of PKCS#8(v2): Private-Key Information Syntax Specification (RFC 5208) and asymmetric key packages (RFC 5958)
spkicrates.ioDocumentationX.509 Subject Public Key Info (RFC 5280 Section 4.1) describing public keys as well as their associated AlgorithmIdentifiers (i.e. OIDs)
x509crates.ioDocumentationImplementation of the X.509 Public Key Infrastructure Certificate format as described in RFC 5280

License

All crates licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Utility crates used in RustCrypto

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages