') + ')', '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); } })(); })(); x509-cert: make key storage a parameter for `Certificate` by baloo · Pull Request #803 · RustCrypto/formats · GitHub
Skip to content

x509-cert: make key storage a parameter for Certificate - #803

Closed
baloo wants to merge 21 commits into
RustCrypto:masterfrom
baloo:baloo/owned-api/parameterized-cert
Closed

x509-cert: make key storage a parameter for Certificate#803
baloo wants to merge 21 commits into
RustCrypto:masterfrom
baloo:baloo/owned-api/parameterized-cert

Conversation

@baloo

@baloobaloo commented Dec 18, 2022

Copy link
Copy Markdown
Member

This introduces the owned api for x509 certificates.

@baloo
balooforce-pushed the baloo/owned-api/parameterized-cert branch from fd3ead8 to 37c874aCompareDecember 18, 2022 05:37
@baloo
balooforce-pushed the baloo/owned-api/parameterized-cert branch from 37c874a to 89aff8fCompareDecember 18, 2022 05:37
@baloo

baloo commented Dec 18, 2022

Copy link
Copy Markdown
MemberAuthor

I am not very happy with those changes on the derive crate. The management of lifetimes is a hack.
(at that point, might as well fix the TODO for managing multiple lifetimes)

}

impl<'a> TbsCertificate<'a> {
impl<SignParams, KeyParams, Key> TbsCertificate<SignParams, KeyParams, Key> {

@tarcieritarcieriDec 18, 2022

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather than making these generic, I think they can just be fixed to Any, Any, and BitString respectively, at least for now.

That will give you a fully owned representation of TbsCertificate and Certificate which can also handle any kind of signature algorithm, without the additional complexity of generics and variadic representations.

If you really do want to make it generic, I would suggest adding something like pub trait Profile to be impl'd on ZSTs which can act as a carrier for families of type parameters (and potentially constant values as well), rather than using a large number of generic parameters.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's go with fully own for now, but I'll resubmit another PR to follow up on the profile idea.
I think it will ease things a lot on the derive as I can encode bounds on the trait instead. It could very much help with bringing non-owned extensions back as well.

@baloo

baloo commented Dec 18, 2022

Copy link
Copy Markdown
MemberAuthor

replaced by #803

@baloobaloo closed this Dec 18, 2022
tarcieri pushed a commit that referenced this pull request Dec 30, 2022
As discussed in #803 let's make `Certificate` an owned type
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

@baloo@tarcieri