/*----- Constants ---------------------------------------------------------*/
#define CHACHA_NONCESZ 8u
+#define CHACHA_IETF_NONCESZ 12u
#define CHACHA_KEYSZ 32u
#define CHACHA_OUTSZ 64u
const void */*key*/, size_t /*ksz*/,
const void */*nonce*/);
-/* --- @chacha_setnonce@ --- *
+/* --- @chacha_setnonce{,_ietf}@ --- *
*
* Arguments: @chacha_ctx *ctx@ = pointer to context
- * @const void *nonce@ = the nonce (@CHACHA_NONCESZ@ bytes)
+ * @const void *nonce@ = the nonce (@CHACHA_NONCESZ@ or
+ * @CHACHA_IETF_NONCESZ@ bytes)
*
* Returns: ---
*
*/
extern void chacha_setnonce(chacha_ctx */*ctx*/, const void */*nonce*/);
+extern void chacha_setnonce_ietf(chacha_ctx */*ctx*/, const void */*nonce*/);
-/* --- @chacha_seek{,u64}@ --- *
+/* --- @chacha_seek{,u64,_ietf}@ --- *
*
* Arguments: @chacha_ctx *ctx@ = pointer to context
- * @unsigned long i@, @kludge64 i@ = new position to set
+ * @unsigned long i@, @kludge64 i@, @uint32 i@ = new position
*
* Returns: ---
*
- * Use: Sets a new stream position, in units of ChaCha output
+ * Use: Sets a new stream position, in units of Chacha output
* blocks, which are @CHACHA_OUTSZ@ bytes each. Byte
- * granularity can be achieved by calling @chacha_encrypt@
+ * granularity can be achieved by calling @chachaR_encrypt@
* appropriately.
*/
extern void chacha_seek(chacha_ctx */*ctx*/, unsigned long /*i*/);
extern void chacha_seeku64(chacha_ctx */*ctx*/, kludge64 /*i*/);
+extern void chacha_seek_ietf(chacha_ctx */*ctx*/, uint32 /*i*/);
-/* --- @chacha_tell{,u64}@ --- *
+/* --- @chacha_tell{,u64,_ietf}@ --- *
*
* Arguments: @chacha_ctx *ctx@ = pointer to context
*
extern unsigned long chacha_tell(chacha_ctx */*ctx*/);
extern kludge64 chacha_tellu64(chacha_ctx */*ctx*/);
+extern uint32 chacha_tell_ietf(chacha_ctx */*ctx*/);
/* --- @chacha{20,12,8}_encrypt@ --- *
*
#define chacha20_keysz chacha_keysz
#define chacha12_keysz chacha_keysz
#define chacha8_keysz chacha_keysz
+#define chacha_ietf_keysz chacha_keysz
+#define chacha20_ietf_keysz chacha_keysz
+#define chacha12_ietf_keysz chacha_keysz
+#define chacha8_ietf_keysz chacha_keysz
#define xchacha_keysz chacha_keysz
#define xchacha20_keysz chacha_keysz
#define xchacha12_keysz chacha_keysz
#define xchacha8_keysz chacha_keysz
const gccipher chacha20, chacha12, chacha8;
+const gccipher chacha20_ietf, chacha12_ietf, chacha8_ietf;
const gccipher xchacha20, xchacha12, xchacha8;
/*----- Generic random number generator interface -------------------------*/
-/* --- @chacha{20,12,8}_rand@, @xchacha{20,12,8}_rand@ --- *
+/* --- @chacha{20,12,8}{,_ietf}_rand@, @xchacha{20,12,8}_rand@ --- *
*
* Arguments: @const void *k@ = pointer to key material
* @size_t ksz@ = size of key material
* @const void *n@ = pointer to nonce or null
- * (@CHACHA_NONCESZ@ or @XCHACHA_NONCESZ@)
+ * (@CHACHA_NONCESZ@, @CHACHA_IETF_NONCESZ@, or
+ * @XCHACHA_NONCESZ@)
*
* Returns: Pointer to generic random number generator instance.
*
const void */*n*/);
extern grand *chacha8_rand(const void */*k*/, size_t /*ksz*/,
const void */*n*/);
+extern grand *chacha20_ietf_rand(const void */*k*/, size_t /*ksz*/,
+ const void */*n*/);
+extern grand *chacha12_ietf_rand(const void */*k*/, size_t /*ksz*/,
+ const void */*n*/);
+extern grand *chacha8_ietf_rand(const void */*k*/, size_t /*ksz*/,
+ const void */*n*/);
extern grand *xchacha20_rand(const void */*k*/, size_t /*ksz*/,
const void */*n*/);
extern grand *xchacha12_rand(const void */*k*/, size_t /*ksz*/,