blob: 9e72dc874839194f27874dfba6e231ca20c1d5be [file] [log] [blame]
<!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."><meta name="keywords" content="rust, rustlang, rust-lang, EndEntityCert"><title>EndEntityCert in webpki - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.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><a class="sidebar-logo" href="../webpki/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../webpki/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">EndEntityCert</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.from">from</a></li><li><a href="#method.verify_is_valid_for_at_least_one_dns_name">verify_is_valid_for_at_least_one_dns_name</a></li><li><a href="#method.verify_is_valid_for_dns_name">verify_is_valid_for_dns_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="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block"><li><a href="#impl-RefUnwindSafe-for-EndEntityCert%3C%27a%3E">RefUnwindSafe</a></li><li><a href="#impl-Send-for-EndEntityCert%3C%27a%3E">Send</a></li><li><a href="#impl-Sync-for-EndEntityCert%3C%27a%3E">Sync</a></li><li><a href="#impl-Unpin-for-EndEntityCert%3C%27a%3E">Unpin</a></li><li><a href="#impl-UnwindSafe-for-EndEntityCert%3C%27a%3E">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block"><li><a href="#impl-Any-for-EndEntityCert%3C%27a%3E">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-EndEntityCert%3C%27a%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-EndEntityCert%3C%27a%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E-for-EndEntityCert%3C%27a%3E">From&lt;T&gt;</a></li><li><a href="#impl-Into%3CU%3E-for-EndEntityCert%3C%27a%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E-for-EndEntityCert%3C%27a%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E-for-EndEntityCert%3C%27a%3E">TryInto&lt;U&gt;</a></li></ul></section><h2><a href="index.html">In webpki</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Struct <a href="index.html">webpki</a>::<wbr><a class="struct" href="#">EndEntityCert</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/webpki/webpki.rs.html#110-112">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust struct"><code>pub struct EndEntityCert&lt;'a&gt; { /* private fields */ }</code></pre></div><details class="rustdoc-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><code>EndEntityCert.verify_is_valid_tls_server_cert</code>: Verify that the server’s
certificate is currently valid <em>for use by a TLS server</em>.</li>
<li><code>EndEntityCert.verify_is_valid_for_dns_name</code>: Verify that the server’s
certificate is valid for the host that is being connected to.</li>
<li><code>EndEntityCert.verify_signature</code>: Verify that the signature of server’s
<code>ServerKeyExchange</code> message is valid for the server’s certificate.</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 client’s
certificate is currently valid <em>for use by a TLS client</em>.</li>
<li><code>EndEntityCert.verify_is_valid_for_dns_name</code> or
<code>EndEntityCert.verify_is_valid_for_at_least_one_dns_name</code>: Verify that the
client’s certificate is valid for the identity or identities used to
identify the client. (Currently client authentication only works when the
client is identified by one or more DNS hostnames.)</li>
<li><code>EndEntityCert.verify_signature</code>: Verify that the client’s signature in
its <code>CertificateVerify</code> message is valid using the public key from the
client’s 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="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><div id="implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#114-242">source</a><a href="#impl-EndEntityCert%3C%27a%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="rustdoc-toggle method-toggle" open><summary><section id="method.from" class="method has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#117-124">source</a><h4 class="code-header">pub fn <a href="#method.from" class="fnname">from</a>(cert_der: &amp;'a [u8]) -&gt; Result&lt;Self, <a class="enum" href="enum.Error.html" title="enum webpki::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="rustdoc-toggle method-toggle" open><summary><section id="method.verify_is_valid_tls_server_cert" class="method has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#136-150">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_tls_server_cert" class="fnname">verify_is_valid_tls_server_cert</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;supported_sig_algs: &amp;[&amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>],<br>&nbsp;&nbsp;&nbsp;&nbsp;TLSServerTrustAnchors: &amp;<a class="struct" href="struct.TLSServerTrustAnchors.html" title="struct webpki::TLSServerTrustAnchors">TLSServerTrustAnchors</a>&lt;'_&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;intermediate_certs: &amp;[&amp;[u8]],<br>&nbsp;&nbsp;&nbsp;&nbsp;time: <a class="struct" href="struct.Time.html" title="struct webpki::Time">Time</a><br>) -&gt; Result&lt;(), <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 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 certificate’s
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="rustdoc-toggle method-toggle" open><summary><section id="method.verify_is_valid_tls_client_cert" class="method has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#166-180">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_tls_client_cert" class="fnname">verify_is_valid_tls_client_cert</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;supported_sig_algs: &amp;[&amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>],<br>&nbsp;&nbsp;&nbsp;&nbsp;TLSClientTrustAnchors: &amp;<a class="struct" href="struct.TLSClientTrustAnchors.html" title="struct webpki::TLSClientTrustAnchors">TLSClientTrustAnchors</a>&lt;'_&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;intermediate_certs: &amp;[&amp;[u8]],<br>&nbsp;&nbsp;&nbsp;&nbsp;time: <a class="struct" href="struct.Time.html" title="struct webpki::Time">Time</a><br>) -&gt; Result&lt;(), <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 by a TLS
client.</p>
<p>If the certificate is not valid for any of the given names then this
fails with <code>Error::CertNotValidForName</code>.</p>
<p><code>supported_sig_algs</code> is the list of signature algorithms that are
trusted for use in certificate signatures; the end-entity certificate’s
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="rustdoc-toggle method-toggle" open><summary><section id="method.verify_is_valid_for_dns_name" class="method has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#183-185">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_for_dns_name" class="fnname">verify_is_valid_for_dns_name</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;dns_name: <a class="struct" href="struct.DNSNameRef.html" title="struct webpki::DNSNameRef">DNSNameRef</a>&lt;'_&gt;<br>) -&gt; Result&lt;(), <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 DNS host name.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.verify_is_valid_for_at_least_one_dns_name" class="method has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#197-210">source</a><h4 class="code-header">pub fn <a href="#method.verify_is_valid_for_at_least_one_dns_name" class="fnname">verify_is_valid_for_at_least_one_dns_name</a>&lt;'names, Names&gt;(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;dns_names: Names<br>) -&gt; Result&lt;Vec&lt;<a class="struct" href="struct.DNSNameRef.html" title="struct webpki::DNSNameRef">DNSNameRef</a>&lt;'names&gt;&gt;, <a class="enum" href="enum.Error.html" title="enum webpki::Error">Error</a>&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;Names: Iterator&lt;Item = <a class="struct" href="struct.DNSNameRef.html" title="struct webpki::DNSNameRef">DNSNameRef</a>&lt;'names&gt;&gt;,</span></h4></section></summary><div class="docblock"><p>Verifies that the certificate is valid for at least one of the given DNS
host names.</p>
<p>If the certificate is not valid for any of the given names then this
fails with <code>Error::CertNotValidForName</code>. Otherwise the DNS names for
which the certificate is valid are returned.</p>
<p>Requires the <code>std</code> default feature; i.e. this isn’t available in
<code>#![no_std]</code> configurations.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.verify_signature" class="method has-srclink"><a class="srclink rightside" href="../src/webpki/webpki.rs.html#232-241">source</a><h4 class="code-header">pub fn <a href="#method.verify_signature" class="fnname">verify_signature</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self,<br>&nbsp;&nbsp;&nbsp;&nbsp;signature_alg: &amp;<a class="struct" href="struct.SignatureAlgorithm.html" title="struct webpki::SignatureAlgorithm">SignatureAlgorithm</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;msg: &amp;[u8],<br>&nbsp;&nbsp;&nbsp;&nbsp;signature: &amp;[u8]<br>) -&gt; Result&lt;(), <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
certificate’s public key.</p>
<p><code>signature_alg</code> is the algorithm to use to
verify the signature; the certificate’s public key is verified to be
compatible with this algorithm.</p>
<p>For TLS 1.2, <code>signature</code> corresponds to TLS’s
<code>DigitallySigned.signature</code> and <code>signature_alg</code> corresponds to TLS’s
<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>ignatureAndHashAlgorithm</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 TLS’s
<code>algorithm</code> fields of type <code>SignatureScheme</code>. There is (currently) a
one-to-one correspondence between TLS 1.3’s <code>SignatureScheme</code> and
<code>SignatureAlgorithm</code>.</p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-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%27a%3E" class="impl has-srclink"><a href="#impl-RefUnwindSafe-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a&gt; RefUnwindSafe 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%27a%3E" class="impl has-srclink"><a href="#impl-Send-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a&gt; Send 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%27a%3E" class="impl has-srclink"><a href="#impl-Sync-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a&gt; Sync 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%27a%3E" class="impl has-srclink"><a href="#impl-Unpin-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a&gt; Unpin 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%27a%3E" class="impl has-srclink"><a href="#impl-UnwindSafe-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a&gt; UnwindSafe 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="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-Any-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Any for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a class="fnname">type_id</a>(&amp;self) -&gt; TypeId</h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-Borrow%3CT%3E-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; Borrow&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow</a>(&amp;self) -&gt; &amp;T</h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-BorrowMut%3CT%3E-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; BorrowMut&lt;T&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?Sized,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a class="fnname">borrow_mut</a>(&amp;mut self) -&gt; &amp;mut T</h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a>Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-From%3CT%3E-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T&gt; From&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from-1" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.from-1" class="anchor"></a><h4 class="code-header">fn <a class="fnname">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-Into%3CU%3E-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; Into&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: From&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">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>[From]&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-TryFrom%3CU%3E-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryFrom&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: Into&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = Infallible</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_from" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_from</a>(value: U) -&gt; Result&lt;T, &lt;T as TryFrom&lt;U&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-EndEntityCert%3C%27a%3E" class="impl has-srclink"><a href="#impl-TryInto%3CU%3E-for-EndEntityCert%3C%27a%3E" class="anchor"></a><h3 class="code-header">impl&lt;T, U&gt; TryInto&lt;U&gt; for T<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: TryFrom&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a class="associatedtype">Error</a> = &lt;U as TryFrom&lt;T&gt;&gt;::Error</h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl has-srclink"><span class="since rightside" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span><a href="#method.try_into" class="anchor"></a><h4 class="code-header">fn <a class="fnname">try_into</a>(self) -&gt; Result&lt;U, &lt;U as TryFrom&lt;T&gt;&gt;::Error&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="webpki" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>