Comments (6)
It consumes self
. The mut
is an implementation detail of the local binding after self
is consumed.
from block-ciphers.
I didn't know Rust allow that. That said, why consumes self
? why not using a reference?
The types that implement this trait might not be Copy
. with the current method, it could cause problems when cipher
is part of a struct, when the struct itself is not moved.
And looking more closely, encrypt_vec
actually calls encrypt_blocks
which takes &mut self
, not consuming self
:
block-ciphers/block-modes/src/traits.rs
Line 39 in bc219f9
from block-ciphers.
Because CBC mode requires padding for security. The one-shot API prevents misuse.
it could cause problems when cipher is part of a struct
Clone the cipher type before instantiating it.
from block-ciphers.
Note that creation of block modes from ciphers is a really cheap operation and cloning a cipher instance is not too costly either.
But nevertheless, I wonder if we can add impl<T: BlockCipher> BlockCipher for &T
, this could make it possible to instantiate a block mode using block cipher reference (although we would have to slightly change BlockCipher
definition to accommodate for that).
from block-ciphers.
Because CBC mode requires padding for security. The one-shot API prevents misuse.
I don't understand. It seems padding is done using the buf
/ block
, not self
:
block-ciphers/block-modes/src/traits.rs
Lines 77 to 85 in bc219f9
Maybe I'm missing something?
from block-ciphers.
For security reasons:
- IVs cannot be reused.
- the last block encrypted must be padded.
The encryptor is stateful, and for e.g. CBC mode begins with an IV and then uses the previous (encrypted) block as the IV of the next.
There's no further secure operations possible after completing CBC mode encryption. If we were to reset the instance, it would let you reuse an IV. You can't add any more blocks, because padding is used to signal the end of the message.
If you want to encrypt a new message, you must start over with a new IV.
from block-ciphers.
Related Issues (20)
- How to compose with configuration flags ? HOT 5
- magma: provide a way to support both gost28147 and magma subkeys order HOT 1
- serpent: add support for 192 and 256 bit keys
- Missing feature flag HOT 4
- Add Rijndael (not AES) HOT 2
- Why use 42u8? HOT 3
- convert GenericArray to &[u8] HOT 1
- `encrypt_block` vs `encrypt_blocks`, what is 'parallel block processing'? HOT 5
- Performance of key initialization? HOT 1
- VAES support HOT 8
- Very slow AES on Apple Silicon HOT 8
- kuznyechik not buildable on non-x86 with feature zeroize HOT 4
- RC5: key size, round count, and word length are intended to be variable.
- Is there 3DESοΌ HOT 4
- aes: `zeroize` not fully removing key schedule from memory? HOT 34
- Help idiots like me better find cbc crate. HOT 11
- Blowfish/cbc with different key size HOT 2
- Consider emulating x86's AESKEYGENASSIST? HOT 5
- aes: compilation errors on `cg_clif` due to lack of intrinsics support HOT 4
- avoid cpuid instruction HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from block-ciphers.