Files
trussed/cipher/trait.StreamCipherCore.html
2026-03-09 11:41:19 +00:00

59 lines
16 KiB
HTML
Raw Permalink 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="Block-level synchronous stream ciphers."><title>StreamCipherCore in cipher - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../static.files/rustdoc-77263533.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="cipher" data-themes="" data-resource-suffix="" data-rustdoc-version="1.94.0 (4a4ef493e 2026-03-02)" data-channel="1.94.0" data-search-js="search-9e2438ea.js" data-stringdex-js="stringdex-b897f86f.js" data-settings-js="settings-c38705f0.js" ><script src="../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-7bab91a1.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-ffcac47a.css"></noscript><link rel="icon" href="https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">StreamCipherCore</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="../cipher/index.html"><img src="https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg" alt="logo"></a><h2><a href="../cipher/index.html">cipher</a><span class="version">0.4.4</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Stream<wbr>Cipher<wbr>Core</a></h2><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.process_with_backend" title="process_with_backend">process_with_backend</a></li><li><a href="#tymethod.remaining_blocks" title="remaining_blocks">remaining_blocks</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.apply_keystream_block_inout" title="apply_keystream_block_inout">apply_keystream_block_inout</a></li><li><a href="#method.apply_keystream_blocks" title="apply_keystream_blocks">apply_keystream_blocks</a></li><li><a href="#method.apply_keystream_blocks_inout" title="apply_keystream_blocks_inout">apply_keystream_blocks_inout</a></li><li><a href="#method.apply_keystream_partial" title="apply_keystream_partial">apply_keystream_partial</a></li><li><a href="#method.try_apply_keystream_partial" title="try_apply_keystream_partial">try_apply_keystream_partial</a></li><li><a href="#method.write_keystream_block" title="write_keystream_block">write_keystream_block</a></li><li><a href="#method.write_keystream_blocks" title="write_keystream_blocks">write_keystream_blocks</a></li></ul><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2 class="in-crate"><a href="index.html">In crate cipher</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="index.html">cipher</a></div><h1>Trait <span class="trait">Stream<wbr>Cipher<wbr>Core</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../src/cipher/stream_core.rs.html#42-147">Source</a> </span></div><pre class="rust item-decl"><code>pub trait StreamCipherCore: <a class="trait" href="trait.BlockSizeUser.html" title="trait cipher::BlockSizeUser">BlockSizeUser</a> + <a class="trait" href="https://doc.rust-lang.org/1.94.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> {
// Required methods
fn <a href="#tymethod.remaining_blocks" class="fn">remaining_blocks</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.94.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.usize.html">usize</a>&gt;;
<span class="item-spacer"></span> fn <a href="#tymethod.process_with_backend" class="fn">process_with_backend</a>(
&amp;mut self,
f: impl <a class="trait" href="trait.StreamClosure.html" title="trait cipher::StreamClosure">StreamClosure</a>&lt;BlockSize = Self::<a class="associatedtype" href="trait.BlockSizeUser.html#associatedtype.BlockSize" title="type cipher::BlockSizeUser::BlockSize">BlockSize</a>&gt;,
);
// Provided methods
fn <a href="#method.write_keystream_block" class="fn">write_keystream_block</a>(&amp;mut self, block: &amp;mut <a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;) { ... }
<span class="item-spacer"></span> fn <a href="#method.write_keystream_blocks" class="fn">write_keystream_blocks</a>(&amp;mut self, blocks: &amp;mut [<a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;]) { ... }
<span class="item-spacer"></span> fn <a href="#method.apply_keystream_block_inout" class="fn">apply_keystream_block_inout</a>(&amp;mut self, block: <a class="struct" href="../inout/inout/struct.InOut.html" title="struct inout::inout::InOut">InOut</a>&lt;'_, '_, <a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;&gt;) { ... }
<span class="item-spacer"></span> fn <a href="#method.apply_keystream_blocks" class="fn">apply_keystream_blocks</a>(&amp;mut self, blocks: &amp;mut [<a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;]) { ... }
<span class="item-spacer"></span> fn <a href="#method.apply_keystream_blocks_inout" class="fn">apply_keystream_blocks_inout</a>(
&amp;mut self,
blocks: <a class="struct" href="../inout/inout_buf/struct.InOutBuf.html" title="struct inout::inout_buf::InOutBuf">InOutBuf</a>&lt;'_, '_, <a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;&gt;,
) { ... }
<span class="item-spacer"></span> fn <a href="#method.try_apply_keystream_partial" class="fn">try_apply_keystream_partial</a>(
self,
buf: <a class="struct" href="../inout/inout_buf/struct.InOutBuf.html" title="struct inout::inout_buf::InOutBuf">InOutBuf</a>&lt;'_, '_, <a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.u8.html">u8</a>&gt;,
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.94.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.unit.html">()</a>, <a class="struct" href="struct.StreamCipherError.html" title="struct cipher::StreamCipherError">StreamCipherError</a>&gt; { ... }
<span class="item-spacer"></span> fn <a href="#method.apply_keystream_partial" class="fn">apply_keystream_partial</a>(self, buf: <a class="struct" href="../inout/inout_buf/struct.InOutBuf.html" title="struct inout::inout_buf::InOutBuf">InOutBuf</a>&lt;'_, '_, <a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.u8.html">u8</a>&gt;) { ... }
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Block-level synchronous stream ciphers.</p>
</div></details><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.remaining_blocks" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#48">Source</a><h4 class="code-header">fn <a href="#tymethod.remaining_blocks" class="fn">remaining_blocks</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.94.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.usize.html">usize</a>&gt;</h4></section></summary><div class="docblock"><p>Return number of remaining blocks before cipher wraps around.</p>
<p>Returns <code>None</code> if number of remaining blocks can not be computed
(e.g. in ciphers based on the sponge construction) or its too big
to fit into <code>usize</code>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.process_with_backend" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#51">Source</a><h4 class="code-header">fn <a href="#tymethod.process_with_backend" class="fn">process_with_backend</a>(
&amp;mut self,
f: impl <a class="trait" href="trait.StreamClosure.html" title="trait cipher::StreamClosure">StreamClosure</a>&lt;BlockSize = Self::<a class="associatedtype" href="trait.BlockSizeUser.html#associatedtype.BlockSize" title="type cipher::BlockSizeUser::BlockSize">BlockSize</a>&gt;,
)</h4></section></summary><div class="docblock"><p>Process data using backend provided to the rank-2 closure.</p>
</div></details></div><h2 id="provided-methods" class="section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.write_keystream_block" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#57-59">Source</a><h4 class="code-header">fn <a href="#method.write_keystream_block" class="fn">write_keystream_block</a>(&amp;mut self, block: &amp;mut <a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;)</h4></section></summary><div class="docblock"><p>Write keystream block.</p>
<p>WARNING: this method does not check number of remaining blocks!</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.write_keystream_blocks" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#65-67">Source</a><h4 class="code-header">fn <a href="#method.write_keystream_blocks" class="fn">write_keystream_blocks</a>(&amp;mut self, blocks: &amp;mut [<a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;])</h4></section></summary><div class="docblock"><p>Write keystream blocks.</p>
<p>WARNING: this method does not check number of remaining blocks!</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.apply_keystream_block_inout" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#73-75">Source</a><h4 class="code-header">fn <a href="#method.apply_keystream_block_inout" class="fn">apply_keystream_block_inout</a>(&amp;mut self, block: <a class="struct" href="../inout/inout/struct.InOut.html" title="struct inout::inout::InOut">InOut</a>&lt;'_, '_, <a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;&gt;)</h4></section></summary><div class="docblock"><p>Apply keystream block.</p>
<p>WARNING: this method does not check number of remaining blocks!</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.apply_keystream_blocks" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#81-85">Source</a><h4 class="code-header">fn <a href="#method.apply_keystream_blocks" class="fn">apply_keystream_blocks</a>(&amp;mut self, blocks: &amp;mut [<a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;])</h4></section></summary><div class="docblock"><p>Apply keystream blocks.</p>
<p>WARNING: this method does not check number of remaining blocks!</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.apply_keystream_blocks_inout" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#91-93">Source</a><h4 class="code-header">fn <a href="#method.apply_keystream_blocks_inout" class="fn">apply_keystream_blocks_inout</a>(
&amp;mut self,
blocks: <a class="struct" href="../inout/inout_buf/struct.InOutBuf.html" title="struct inout::inout_buf::InOutBuf">InOutBuf</a>&lt;'_, '_, <a class="type" href="type.Block.html" title="type cipher::Block">Block</a>&lt;Self&gt;&gt;,
)</h4></section></summary><div class="docblock"><p>Apply keystream blocks.</p>
<p>WARNING: this method does not check number of remaining blocks!</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.try_apply_keystream_partial" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#103-133">Source</a><h4 class="code-header">fn <a href="#method.try_apply_keystream_partial" class="fn">try_apply_keystream_partial</a>(
self,
buf: <a class="struct" href="../inout/inout_buf/struct.InOutBuf.html" title="struct inout::inout_buf::InOutBuf">InOutBuf</a>&lt;'_, '_, <a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.u8.html">u8</a>&gt;,
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.94.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.unit.html">()</a>, <a class="struct" href="struct.StreamCipherError.html" title="struct cipher::StreamCipherError">StreamCipherError</a>&gt;</h4></section></summary><div class="docblock"><p>Try to apply keystream to data not divided into blocks.</p>
<p>Consumes cipher since it may consume final keystream block only
partially.</p>
<p>Returns an error if number of remaining blocks is not sufficient
for processing the input data.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.apply_keystream_partial" class="method"><a class="src rightside" href="../src/cipher/stream_core.rs.html#144-146">Source</a><h4 class="code-header">fn <a href="#method.apply_keystream_partial" class="fn">apply_keystream_partial</a>(self, buf: <a class="struct" href="../inout/inout_buf/struct.InOutBuf.html" title="struct inout::inout_buf::InOutBuf">InOutBuf</a>&lt;'_, '_, <a class="primitive" href="https://doc.rust-lang.org/1.94.0/core/primitive.u8.html">u8</a>&gt;)</h4></section></summary><div class="docblock"><p>Try to apply keystream to data not divided into blocks.</p>
<p>Consumes cipher since it may consume final keystream block only
partially.</p>
<h5 id="panics"><a class="doc-anchor" href="#panics">§</a>Panics</h5>
<p>If number of remaining blocks is not sufficient for processing the
input data.</p>
</div></details></div><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.94.0/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../trait.impl/cipher/stream_core/trait.StreamCipherCore.js" async></script></section></div></main></body></html>