Update readme
This commit is contained in:
@@ -9,15 +9,15 @@ This block cipher employs a few modes of operation. Read more about them [here](
|
||||
## Features
|
||||
* It has very easy syntax
|
||||
* It's slow
|
||||
* It absolutely tanks your ram when working with files
|
||||
* Even leaves some key fragments in there✨
|
||||
* It's probably super insecure
|
||||
* But the syntax is pythonlike easy🙇
|
||||
* 512-bit keys
|
||||
|
||||
It's pretty ghetto, you know?
|
||||
|
||||
## What are the actual advantages?
|
||||
* It's two files to import into your project
|
||||
* No dependencies
|
||||
* 1 Line to use
|
||||
* 100% cross plattform
|
||||
|
||||
@@ -110,6 +110,7 @@ Without saying, this is more advanced and not as-easy as the methods supplied in
|
||||
* [CBC] This block cipher makes use of cipher block chaining. Nothing special.
|
||||
* [IV] The initialization vector is indeed a bit of special sauce, as it depends on your key instead of being static. It is generated by running the feistel network on *E(m=seed, k=seed)*, which is a one-way function, because *m=k*.
|
||||
* [RRKM] Never heard of a mode like this, so i've named it **R**olling**R**ound**K**ey**M**ode. This basically means that the round key extrapolation is carried out continously over EVERY round on EVERY block. So in addition to *M<sub>i</sub>* being dependent on *E(M<sub>i-1</sub>,K<sub>i-1,0</sub>)* due to CBC, so is now *K<sub>i</sub>* dependent on *K<sub>i-1,r</sub>* with *r* being the maximum number of extrapolated keys within a call of *E()*. This is handled within the feistel network class, as an instance lifecycle sees all blocks. Just in case you want to take a peek.
|
||||
* [I-don't-even-know-any-more] Inspired by Rijndael, it does some monkey tricks with reversible matrix-mutators after each feistel round.
|
||||
|
||||
### Password to key
|
||||
How does GCrypt transform a password to a key?..
|
||||
@@ -124,8 +125,8 @@ Once you give the GHash instance a data block to digest, it will use the GCipher
|
||||
|
||||
The lastest *b* represents the current result of the hash function.
|
||||
|
||||
GHash also supports a do-it-all wrapper method that takes a Flexblock (A block of arbitrary length), and returns a hashsum for it.
|
||||
This wrapper function adds an additional block including the length of the input. This wrapper function is used to transform Passwords to Keys.
|
||||
GHash also supports a do-it-all wrapper method that takes a vector of blocks, and returns a hashsum for it.
|
||||
This wrapper function adds an additional block including the length of the input, if provided. This wrapper function is used to transform Passwords to Keys.
|
||||
|
||||
### GPrng...?
|
||||
Whilst we're at it, why not implement a pseudo-random number generator based on GHash aswell. So here it is, [GPrng](https://gitea.leonetienne.de/leonetienne/GCrypt/src/branch/master/GCryptLib/include/GCrypt/GPrng.h).
|
||||
|
||||
Reference in New Issue
Block a user