Files
google-apis-rs/webpki/struct.EndEntityCert.html
2024-03-05 21:06:01 +01:00

137 lines
35 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="An end-entity certificate."><title>EndEntityCert in webpki - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="webpki" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../webpki/index.html">webpki</a><span class="version">0.101.6</span></h2></div><h2 class="location"><a href="#">EndEntityCert</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.dns_names">dns_names</a></li><li><a href="#method.verify_for_usage">verify_for_usage</a></li><li><a href="#method.verify_is_valid_for_subject_name">verify_is_valid_for_subject_name</a></li><li><a href="#method.verify_is_valid_tls_client_cert">verify_is_valid_tls_client_cert</a></li><li><a href="#method.verify_is_valid_tls_server_cert">verify_is_valid_tls_server_cert</a></li><li><a href="#method.verify_signature">verify_signature</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-TryFrom%3C%26%5Bu8%5D%3E-for-EndEntityCert%3C'a%3E">TryFrom&lt;&amp;&#x27;a [u8]&gt;</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-RefUnwindSafe-for-EndEntityCert%3C'a%3E">RefUnwindSafe</a></li><li><a href="#impl-Send-for-EndEntityCert%3C'a%3E">Send</a></li><li><a href="#impl-Sync-for-EndEntityCert%3C'a%3E">Sync</a></li><li><a href="#impl-Unpin-for-EndEntityCert%3C'a%3E">Unpin</a></li><li><a href="#impl-UnwindSafe-for-EndEntityCert%3C'a%3E">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Any-for-T">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-T">From&lt;T&gt;</a></li><li><a href="#impl-Into%3CU%3E-for-T">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-T">TryInto&lt;U&gt;</a></li></ul></section><h2><a href="index.html">In crate webpki</a></h2></div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../webpki/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Struct <a href="index.html">webpki</a>::<wbr><a class="struct" href="#">EndEntityCert</a><button id="copy-path" title="Copy item path to clipboard"><img src="../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../src/webpki/end_entity.rs.html#55-57">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>pub struct EndEntityCert&lt;'a&gt; { <span class="comment">/* private fields */</span> }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>An end-entity certificate.</p>
<p>Server certificate processing in a TLS connection consists of several
steps. All of these steps are necessary:</p>
<ul>
<li>
<p><code>EndEntityCert.verify_is_valid_tls_server_cert</code>: Verify that the servers
certificate is currently valid <em>for use by a TLS server</em>.</p>
</li>
<li>
<p><code>EndEntityCert.verify_is_valid_for_subject_name</code>: Verify that the servers
certificate is valid for the host or IP address that is being connected to.</p>
</li>
<li>
<p><code>EndEntityCert.verify_signature</code>: Verify that the signature of servers
<code>ServerKeyExchange</code> message is valid for the servers certificate.</p>
</li>
</ul>
<p>Client certificate processing in a TLS connection consists of analogous
steps. All of these steps are necessary:</p>
<ul>
<li><code>EndEntityCert.verify_is_valid_tls_client_cert</code>: Verify that the clients
certificate is currently valid <em>for use by a TLS client</em>.</li>
<li><code>EndEntityCert.verify_signature</code>: Verify that the clients signature in
its <code>CertificateVerify</code> message is valid using the public key from the
clients certificate.</li>
</ul>
<p>Although it would be less error-prone to combine all these steps into a
single function call, some significant optimizations are possible if the
three steps are processed separately (in parallel). It does not matter much
which order the steps are done in, but <strong>all of these steps must completed
before application data is sent and before received application data is
processed</strong>. <code>EndEntityCert::from</code> is an inexpensive operation and is
deterministic, so if these tasks are done in multiple threads, it is
probably best to just call <code>EndEntityCert::from</code> multiple times (before each
operation) for the same DER-encoded ASN.1 certificate bytes.</p>
</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-EndEntityCert%3C'a%3E" class="impl"><a class="src rightside" href="../src/webpki/end_entity.rs.html#74-259">source</a><a href="#impl-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.verify_for_usage" class="method"><a class="src rightside" href="../src/webpki/end_entity.rs.html#116-133">source</a><h4 class="code-header">pub fn <a href="#method.verify_for_usage" class="fn">verify_for_usage</a>(
&amp;self,
supported_sig_algs: &amp;[&amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>],
trust_anchors: &amp;[<a class="struct" href="struct.TrustAnchor.html" title="struct webpki::TrustAnchor">TrustAnchor</a>&lt;'_&gt;],
intermediate_certs: &amp;[&amp;[<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]],
time: <a class="struct" href="struct.Time.html" title="struct webpki::Time">Time</a>,
usage: <a class="struct" href="struct.KeyUsage.html" title="struct webpki::KeyUsage">KeyUsage</a>,
crls: &amp;[&amp;dyn <a class="trait" href="trait.CertRevocationList.html" title="trait webpki::CertRevocationList">CertRevocationList</a>]
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;</h4></section></summary><div class="docblock"><p>Verifies that the end-entity certificate is valid for use against the
specified Extended Key Usage (EKU).</p>
<ul>
<li><code>supported_sig_algs</code> is the list of signature algorithms that are
trusted for use in certificate signatures; the end-entity certificates
public key is not validated against this list.</li>
<li><code>trust_anchors</code> is the list of root CAs to trust</li>
<li><code>intermediate_certs</code> is the sequence of intermediate certificates that
the server sent in the TLS handshake.</li>
<li><code>time</code> is the time for which the validation is effective (usually the
current time).</li>
<li><code>usage</code> is the intended usage of the certificate, indicating what kind
of usage were verifying the certificate for.</li>
<li><code>crls</code> is the list of certificate revocation lists to check
the certificate against.</li>
</ul>
</div></details><details class="toggle method-toggle" open><summary><section id="method.verify_is_valid_tls_server_cert" class="method"><a class="src rightside" href="../src/webpki/end_entity.rs.html#153-168">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_tls_server_cert" class="fn">verify_is_valid_tls_server_cert</a>(
&amp;self,
supported_sig_algs: &amp;[&amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>],
TlsServerTrustAnchors: &amp;<a class="struct" href="struct.TlsServerTrustAnchors.html" title="struct webpki::TlsServerTrustAnchors">TlsServerTrustAnchors</a>&lt;'_&gt;,
intermediate_certs: &amp;[&amp;[<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]],
time: <a class="struct" href="struct.Time.html" title="struct webpki::Time">Time</a>
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;</h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.101.2: The per-usage trust anchor representations and verification functions are deprecated in favor of the general-purpose <code>TrustAnchor</code> type and <code>EndEntity::verify_for_usage</code> function. The new <code>verify_for_usage</code> function expresses trust anchor and end entity purpose with the key usage argument.</span></div></span></summary><div class="docblock"><p>Verifies that the end-entity certificate is valid for use by a TLS
server.</p>
<p><code>supported_sig_algs</code> is the list of signature algorithms that are
trusted for use in certificate signatures; the end-entity certificates
public key is not validated against this list. <code>trust_anchors</code> is the
list of root CAs to trust. <code>intermediate_certs</code> is the sequence of
intermediate certificates that the server sent in the TLS handshake.
<code>time</code> is the time for which the validation is effective (usually the
current time).</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.verify_is_valid_tls_client_cert" class="method"><a class="src rightside" href="../src/webpki/end_entity.rs.html#189-205">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_tls_client_cert" class="fn">verify_is_valid_tls_client_cert</a>(
&amp;self,
supported_sig_algs: &amp;[&amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>],
TlsClientTrustAnchors: &amp;<a class="struct" href="struct.TlsClientTrustAnchors.html" title="struct webpki::TlsClientTrustAnchors">TlsClientTrustAnchors</a>&lt;'_&gt;,
intermediate_certs: &amp;[&amp;[<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]],
time: <a class="struct" href="struct.Time.html" title="struct webpki::Time">Time</a>,
crls: &amp;[&amp;dyn <a class="trait" href="trait.CertRevocationList.html" title="trait webpki::CertRevocationList">CertRevocationList</a>]
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;</h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.101.2: The per-usage trust anchor representations and verification functions are deprecated in favor of the general-purpose <code>TrustAnchor</code> type and <code>EndEntity::verify_for_usage</code> function. The new <code>verify_for_usage</code> function expresses trust anchor and end entity purpose with the key usage argument.</span></div></span></summary><div class="docblock"><p>Verifies that the end-entity certificate is valid for use by a TLS
client.</p>
<p><code>supported_sig_algs</code> is the list of signature algorithms that are
trusted for use in certificate signatures; the end-entity certificates
public key is not validated against this list. <code>trust_anchors</code> is the
list of root CAs to trust. <code>intermediate_certs</code> is the sequence of
intermediate certificates that the client sent in the TLS handshake.
<code>cert</code> is the purported end-entity certificate of the client. <code>time</code> is
the time for which the validation is effective (usually the current
time).</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.verify_is_valid_for_subject_name" class="method"><a class="src rightside" href="../src/webpki/end_entity.rs.html#208-213">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_for_subject_name" class="fn">verify_is_valid_for_subject_name</a>(
&amp;self,
subject_name: <a class="enum" href="enum.SubjectNameRef.html" title="enum webpki::SubjectNameRef">SubjectNameRef</a>&lt;'_&gt;
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;</h4></section></summary><div class="docblock"><p>Verifies that the certificate is valid for the given Subject Name.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.verify_signature" class="method"><a class="src rightside" href="../src/webpki/end_entity.rs.html#235-247">source</a><h4 class="code-header">pub fn <a href="#method.verify_signature" class="fn">verify_signature</a>(
&amp;self,
signature_alg: &amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>,
msg: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>],
signature: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;</h4></section></summary><div class="docblock"><p>Verifies the signature <code>signature</code> of message <code>msg</code> using the
certificates public key.</p>
<p><code>signature_alg</code> is the algorithm to use to
verify the signature; the certificates public key is verified to be
compatible with this algorithm.</p>
<p>For TLS 1.2, <code>signature</code> corresponds to TLSs
<code>DigitallySigned.signature</code> and <code>signature_alg</code> corresponds to TLSs
<code>DigitallySigned.algorithm</code> of TLS type <code>SignatureAndHashAlgorithm</code>. In
TLS 1.2 a single <code>SignatureAndHashAlgorithm</code> may map to multiple
<code>SignatureAlgorithm</code>s. For example, a TLS 1.2
<code>SignatureAndHashAlgorithm</code> of (ECDSA, SHA-256) may map to any or all
of {<code>ECDSA_P256_SHA256</code>, <code>ECDSA_P384_SHA256</code>}, depending on how the TLS
implementation is configured.</p>
<p>For current TLS 1.3 drafts, <code>signature_alg</code> corresponds to TLSs
<code>algorithm</code> fields of type <code>SignatureScheme</code>. There is (currently) a
one-to-one correspondence between TLS 1.3s <code>SignatureScheme</code> and
<code>SignatureAlgorithm</code>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.dns_names" class="method"><a class="src rightside" href="../src/webpki/end_entity.rs.html#256-258">source</a><h4 class="code-header">pub fn <a href="#method.dns_names" class="fn">dns_names</a>(
&amp;'a self
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;impl <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a>&lt;Item = GeneralDnsNameRef&lt;'a&gt;&gt;, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;</h4></section></summary><div class="docblock"><p>Returns a list of the DNS names provided in the subject alternative names extension</p>
<p>This function must not be used to implement custom DNS name verification.
Verification functions are already provided as <code>verify_is_valid_for_dns_name</code>
and <code>verify_is_valid_for_at_least_one_dns_name</code>.</p>
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3C%26%5Bu8%5D%3E-for-EndEntityCert%3C'a%3E" class="impl"><a class="src rightside" href="../src/webpki/end_entity.rs.html#59-72">source</a><a href="#impl-TryFrom%3C%26%5Bu8%5D%3E-for-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;&amp;'a [<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]&gt; for <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="../src/webpki/end_entity.rs.html#64-71">source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(cert_der: &amp;'a [<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.u8.html">u8</a>]) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;Self, Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class="docblock"><p>Parse the ASN.1 DER-encoded X.509 encoding of the certificate
<code>cert_der</code>.</p>
</div></details><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-EndEntityCert%3C'a%3E" class="impl"><a href="#impl-RefUnwindSafe-for-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section><section id="impl-Send-for-EndEntityCert%3C'a%3E" class="impl"><a href="#impl-Send-for-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section><section id="impl-Sync-for-EndEntityCert%3C'a%3E" class="impl"><a href="#impl-Sync-for-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section><section id="impl-Unpin-for-EndEntityCert%3C'a%3E" class="impl"><a href="#impl-Unpin-for-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section><section id="impl-UnwindSafe-for-EndEntityCert%3C'a%3E" class="impl"><a href="#impl-UnwindSafe-for-EndEntityCert%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.EndEntityCert.html" title="struct webpki::EndEntityCert">EndEntityCert</a>&lt;'a&gt;</h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/any.rs.html#140">source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.76.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.76.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#208">source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&amp;T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#216">source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.76.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#763">source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#766">source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#747-749">source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#756">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<p>That is, this conversion is whatever the implementation of
<code><a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#803-805">source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-2" class="associatedtype trait-impl"><a href="#associatedtype.Error-2" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from-1" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#810">source</a><a href="#method.try_from-1" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#788-790">source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#795">source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>