Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F132719920
D19410.id54603.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D19410.id54603.diff
View Options
Index: head/sys/crypto/chacha20/chacha.h
===================================================================
--- head/sys/crypto/chacha20/chacha.h
+++ head/sys/crypto/chacha20/chacha.h
@@ -26,10 +26,19 @@
#define LOCAL
#endif
+#ifdef CHACHA_NONCE0_CTR128
+#define CHACHA_UNUSED __unused
+#else
+#define CHACHA_UNUSED
+#endif
+
LOCAL void chacha_keysetup(struct chacha_ctx *x, const u_char *k, u_int kbits);
-LOCAL void chacha_ivsetup(struct chacha_ctx *x, const u_char *iv, const u_char *ctr);
+LOCAL void chacha_ivsetup(struct chacha_ctx *x, const u_char *iv CHACHA_UNUSED,
+ const u_char *ctr);
LOCAL void chacha_encrypt_bytes(struct chacha_ctx *x, const u_char *m,
u_char *c, u_int bytes);
+
+#undef CHACHA_UNUSED
#endif /* CHACHA_H */
Index: head/sys/crypto/chacha20/chacha.c
===================================================================
--- head/sys/crypto/chacha20/chacha.c
+++ head/sys/crypto/chacha20/chacha.c
@@ -84,13 +84,33 @@
LOCAL void
chacha_ivsetup(chacha_ctx *x, const u8 *iv, const u8 *counter)
{
+#ifndef CHACHA_NONCE0_CTR128
x->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 0);
x->input[13] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 4);
x->input[14] = U8TO32_LITTLE(iv + 0);
x->input[15] = U8TO32_LITTLE(iv + 4);
+#else
+ // CHACHA_STATELEN
+ (void)iv;
+ x->input[12] = U8TO32_LITTLE(counter + 0);
+ x->input[13] = U8TO32_LITTLE(counter + 4);
+ x->input[14] = U8TO32_LITTLE(counter + 8);
+ x->input[15] = U8TO32_LITTLE(counter + 12);
+#endif
}
+#ifdef CHACHA_NONCE0_CTR128
LOCAL void
+chacha_ctrsave(const chacha_ctx *x, u8 *counter)
+{
+ U32TO8_LITTLE(counter + 0, x->input[12]);
+ U32TO8_LITTLE(counter + 4, x->input[13]);
+ U32TO8_LITTLE(counter + 8, x->input[14]);
+ U32TO8_LITTLE(counter + 12, x->input[15]);
+}
+#endif
+
+LOCAL void
chacha_encrypt_bytes(chacha_ctx *x,const u8 *m,u8 *c,u32 bytes)
{
u32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;
@@ -192,7 +212,16 @@
j12 = PLUSONE(j12);
if (!j12) {
j13 = PLUSONE(j13);
+#ifndef CHACHA_NONCE0_CTR128
/* stopping at 2^70 bytes per nonce is user's responsibility */
+#else
+ if (!j13) {
+ j14 = PLUSONE(j14);
+ if (!j14) {
+ j15 = PLUSONE(j15);
+ }
+ }
+#endif
}
U32TO8_LITTLE(c + 0,x0);
@@ -218,6 +247,10 @@
}
x->input[12] = j12;
x->input[13] = j13;
+#ifdef CHACHA_NONCE0_CTR128
+ x->input[14] = j14;
+ x->input[15] = j15;
+#endif
return;
}
bytes -= 64;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Oct 20, 8:09 AM (12 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23965038
Default Alt Text
D19410.id54603.diff (2 KB)
Attached To
Mode
D19410: Embedded chacha: Add 0-bit iv + 128-bit counter build mode
Attached
Detach File
Event Timeline
Log In to Comment