ChunkLen = 128 * 1024
CommitmentLen = 32
CEKLen = blake2b.Size
- DEMAlgo = "chapoly-krkc"
+ DEMAlgo = "xchapoly-krkc"
)
type keymat struct {
var errHKDF error
for {
key, errHKDF = hkdf.Expand(
- blake2bHash, ck, "cm/encrypted/chapoly-krkc/key",
+ blake2bHash, ck, "cm/encrypted/xchapoly-krkc/key",
chacha20poly1305.KeySize)
if errHKDF != nil {
panic(errHKDF)
}
iv, errHKDF = hkdf.Expand(
- blake2bHash, ck, "cm/encrypted/chapoly-krkc/iv",
+ blake2bHash, ck, "cm/encrypted/xchapoly-krkc/iv",
chacha20poly1305.NonceSizeX)
if errHKDF != nil {
panic(errHKDF)
-@node dem-chapoly-krkc
-@cindex dem-chapoly-krkc
+@node dem-xchapoly-krkc
+@cindex dem-xchapoly-krkc
@nodedescription XChaCha20-Poly1305 with key ratcheting and key commitment DEM
@subsubsection XChaCha20-Poly1305 with key ratcheting and key commitment DEM
-@code{cm/encrypted}'s @code{/dem/a} equals to "chapoly-krkc".
+@code{cm/encrypted}'s @code{/dem/a} equals to "xchapoly-krkc".
CEK is 64 bytes long.
Data is split on 128 KiB chunks, each of which is encrypted the following way:
@verbatim
CK0 = CEK
CKi = HKDF-Extract(BLAKE2b, salt="", ikm=CK{i-1})
-KEY = HKDF-Expand(BLAKE2b, prk=CKi, info="cm/encrypted/chapoly-krkc/key")
-IV = HKDF-Expand(BLAKE2b, prk=CKi, info="cm/encrypted/chapoly-krkc/iv", len=24)
+KEY = HKDF-Expand(BLAKE2b, prk=CKi, info="cm/encrypted/xchapoly-krkc/key")
+IV = HKDF-Expand(BLAKE2b, prk=CKi, info="cm/encrypted/xchapoly-krkc/iv", len=24)
if last chunk { IV[23] |= 0x01 } else { IV[23] &= 0xFE }
CIPHERTEXT || TAG = XChaCha20-Poly1305(key=KEY, ad="", nonce=IV, data=chunk)
COMMITMENT = BLAKE2b-256(KEY || IV || TAG)
@nodedescription Data encapsulation mechanisms
@subsection Data encapsulation mechanisms
-@include cm/dem-chapoly-krkc.texi
+@include cm/dem-xchapoly-krkc.texi
@include cm/dem-kuznechik-ctr-hmac-kr.texi
@node KEM