rbnacl-libsodium 0.5.0.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +4 -0
  3. data/lib/rbnacl/libsodium/version.rb +1 -1
  4. data/vendor/libsodium/AUTHORS +62 -81
  5. data/vendor/libsodium/ChangeLog +31 -1
  6. data/vendor/libsodium/README.markdown +15 -364
  7. data/vendor/libsodium/THANKS +6 -0
  8. data/vendor/libsodium/autom4te.cache/output.0 +67 -36
  9. data/vendor/libsodium/autom4te.cache/output.1 +67 -36
  10. data/vendor/libsodium/autom4te.cache/output.2 +67 -36
  11. data/vendor/libsodium/autom4te.cache/traces.0 +52 -51
  12. data/vendor/libsodium/autom4te.cache/traces.1 +137 -133
  13. data/vendor/libsodium/autom4te.cache/traces.2 +52 -51
  14. data/vendor/libsodium/builds/msvc/version.h +2 -2
  15. data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj +365 -345
  16. data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters +1114 -1037
  17. data/vendor/libsodium/builds/msvc/vs2010/test/test.props +8 -2
  18. data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj +364 -344
  19. data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters +1113 -1036
  20. data/vendor/libsodium/builds/msvc/vs2012/test/test.props +8 -2
  21. data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj +365 -345
  22. data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters +1114 -1037
  23. data/vendor/libsodium/builds/msvc/vs2013/test/test.props +8 -2
  24. data/vendor/libsodium/configure +66 -35
  25. data/vendor/libsodium/configure.ac +25 -14
  26. data/vendor/libsodium/dist-build/ios.sh +1 -1
  27. data/vendor/libsodium/dist-build/msys2-win64.sh +1 -1
  28. data/vendor/libsodium/libsodium.vcxproj +29 -14
  29. data/vendor/libsodium/libsodium.vcxproj.filters +77 -28
  30. data/vendor/libsodium/msvc-scripts/process.bat +3 -3
  31. data/vendor/libsodium/packaging/nuget/package.config +1 -1
  32. data/vendor/libsodium/packaging/nuget/package.gsl +6 -1
  33. data/vendor/libsodium/packaging/nuget/package.nuspec +1 -1
  34. data/vendor/libsodium/src/libsodium/Makefile.am +31 -13
  35. data/vendor/libsodium/src/libsodium/Makefile.in +406 -155
  36. data/vendor/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c +146 -0
  37. data/vendor/libsodium/src/libsodium/crypto_box/crypto_box.c +13 -0
  38. data/vendor/libsodium/src/libsodium/crypto_box/crypto_box_easy.c +39 -73
  39. data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c +5 -0
  40. data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/api.h +2 -0
  41. data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c +15 -0
  42. data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c +6 -5
  43. data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2s-ref.c +6 -5
  44. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c +25 -0
  45. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/auth_poly1305_donna.c +76 -47
  46. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h +30 -7
  47. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h +3 -16
  48. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h +3 -10
  49. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/verify_poly1305_donna.c +11 -6
  50. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c +23 -1
  51. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305_try.c +1 -1
  52. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/crypto_scrypt-common.c +7 -7
  53. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/crypto_scrypt.h +6 -20
  54. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256/nosse/pwhash_scryptxsalsa208sha256_nosse.c → scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c} +0 -0
  55. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/pbkdf2-sha256.c +1 -11
  56. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/pbkdf2-sha256.h +0 -0
  57. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256/pwhash_scryptxsalsa208sha256.c → scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c} +50 -25
  58. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/scrypt_platform.c +4 -0
  59. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256/sse/pwhash_scryptxsalsa208sha256_sse.c → scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c} +0 -0
  60. data/vendor/libsodium/src/libsodium/crypto_pwhash/{scryptxsalsa208sha256 → scryptsalsa208sha256}/sysendian.h +0 -0
  61. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/smult_curve25519_donna_c64.c +1 -1
  62. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/{ref → ref10}/api.h +0 -3
  63. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/base_curve25519_ref10.c +14 -0
  64. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h +44 -0
  65. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c +23 -0
  66. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c +23 -0
  67. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c +61 -0
  68. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c +33 -0
  69. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c +77 -0
  70. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c +73 -0
  71. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c +18 -0
  72. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c +74 -0
  73. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c +257 -0
  74. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c +153 -0
  75. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c +61 -0
  76. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c +123 -0
  77. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/montgomery.h +140 -0
  78. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/pow225521.h +160 -0
  79. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/scalarmult_curve25519_ref10.c +54 -0
  80. data/vendor/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c +92 -61
  81. data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_scalarmult_base.c +3 -3
  82. data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/pow22523.h +2 -2
  83. data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/pow225521.h +2 -2
  84. data/vendor/libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/ref/sc25519_edwards25519sha512batch.c +8 -4
  85. data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts_aes128ctr.c +3 -3
  86. data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128.h +6 -3
  87. data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128_aes128ctr.c +23 -23
  88. data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/api.h +12 -0
  89. data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c +275 -0
  90. data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20_api.c +36 -0
  91. data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S +11 -10
  92. data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/xor_salsa20_ref.c +8 -3
  93. data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20_api.c +8 -0
  94. data/vendor/libsodium/src/libsodium/include/Makefile.am +3 -2
  95. data/vendor/libsodium/src/libsodium/include/Makefile.in +3 -2
  96. data/vendor/libsodium/src/libsodium/include/sodium.h +3 -1
  97. data/vendor/libsodium/src/libsodium/include/sodium/crypto_aead_chacha20poly1305.h +55 -0
  98. data/vendor/libsodium/src/libsodium/include/sodium/crypto_box.h +21 -0
  99. data/vendor/libsodium/src/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h +11 -1
  100. data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash.h +7 -0
  101. data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha256.h +7 -0
  102. data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha512.h +7 -0
  103. data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth.h +15 -0
  104. data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305.h +25 -0
  105. data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h +80 -0
  106. data/vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_curve25519.h +2 -2
  107. data/vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox.h +14 -0
  108. data/vendor/libsodium/src/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h +11 -0
  109. data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_aes256estream.h +11 -6
  110. data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_chacha20.h +49 -0
  111. data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa20.h +6 -0
  112. data/vendor/libsodium/src/libsodium/include/sodium/randombytes.h +7 -7
  113. data/vendor/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +10 -14
  114. data/vendor/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +10 -13
  115. data/vendor/libsodium/src/libsodium/sodium/compat.c +55 -4
  116. data/vendor/libsodium/src/libsodium/sodium/utils.c +18 -0
  117. data/vendor/libsodium/test/default/Makefile.am +24 -12
  118. data/vendor/libsodium/test/default/Makefile.in +116 -73
  119. data/vendor/libsodium/test/default/aead_chacha20poly1305.c +97 -0
  120. data/vendor/libsodium/test/default/aead_chacha20poly1305.exp +8 -0
  121. data/vendor/libsodium/test/default/box_easy.c +1 -1
  122. data/vendor/libsodium/test/default/box_seed.c +28 -0
  123. data/vendor/libsodium/test/default/box_seed.exp +8 -0
  124. data/vendor/libsodium/test/default/chacha20.c +45 -0
  125. data/vendor/libsodium/test/default/chacha20.exp +5 -0
  126. data/vendor/libsodium/test/default/pwhash.c +83 -15
  127. data/vendor/libsodium/test/default/pwhash.exp +10 -1
  128. data/vendor/libsodium/test/default/pwhash_scrypt_ll.c +67 -0
  129. data/vendor/libsodium/test/default/pwhash_scrypt_ll.exp +15 -0
  130. data/vendor/libsodium/test/default/secretbox_easy.c +13 -1
  131. data/vendor/libsodium/test/default/secretbox_easy.exp +19 -0
  132. data/vendor/libsodium/test/default/secretbox_easy2.c +5 -0
  133. data/vendor/libsodium/test/default/secretbox_easy2.exp +1 -0
  134. data/vendor/libsodium/test/default/sign.c +7 -3
  135. metadata +44 -21
  136. data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/api.h +0 -8
  137. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref/base_curve25519_ref.c +0 -20
  138. data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref/smult_curve25519_ref.c +0 -268
  139. data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305_donna.h +0 -37
  140. data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptxsalsa208sha256.h +0 -48
  141. data/vendor/libsodium/test/default/scalarmult7.c +0 -32
  142. data/vendor/libsodium/test/default/scalarmult7.exp +0 -1
  143. data/vendor/libsodium/test/default/scalarmult8.c +0 -32
  144. data/vendor/libsodium/test/default/scalarmult8.exp +0 -1
@@ -0,0 +1,275 @@
1
+
2
+ /* $OpenBSD: chacha.c,v 1.1 2013/11/21 00:45:44 djm Exp $ */
3
+
4
+ /*
5
+ chacha-merged.c version 20080118
6
+ D. J. Bernstein
7
+ Public domain.
8
+ */
9
+
10
+ #include <stdint.h>
11
+ #include <string.h>
12
+
13
+ #include "api.h"
14
+ #include "crypto_stream_chacha20.h"
15
+ #include "utils.h"
16
+
17
+ struct chacha_ctx {
18
+ uint32_t input[16];
19
+ };
20
+
21
+ typedef uint8_t u8;
22
+ typedef uint32_t u32;
23
+
24
+ typedef struct chacha_ctx chacha_ctx;
25
+
26
+ #define U8C(v) (v##U)
27
+ #define U32C(v) (v##U)
28
+
29
+ #define U8V(v) ((u8)(v) & U8C(0xFF))
30
+ #define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF))
31
+
32
+ #define ROTL32(v, n) \
33
+ (U32V((v) << (n)) | ((v) >> (32 - (n))))
34
+
35
+ #define U8TO32_LITTLE(p) \
36
+ (((u32)((p)[0]) ) | \
37
+ ((u32)((p)[1]) << 8) | \
38
+ ((u32)((p)[2]) << 16) | \
39
+ ((u32)((p)[3]) << 24))
40
+
41
+ #define U32TO8_LITTLE(p, v) \
42
+ do { \
43
+ (p)[0] = U8V((v) ); \
44
+ (p)[1] = U8V((v) >> 8); \
45
+ (p)[2] = U8V((v) >> 16); \
46
+ (p)[3] = U8V((v) >> 24); \
47
+ } while (0)
48
+
49
+ #define ROTATE(v,c) (ROTL32(v,c))
50
+ #define XOR(v,w) ((v) ^ (w))
51
+ #define PLUS(v,w) (U32V((v) + (w)))
52
+ #define PLUSONE(v) (PLUS((v),1))
53
+
54
+ #define QUARTERROUND(a,b,c,d) \
55
+ a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \
56
+ c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \
57
+ a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \
58
+ c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
59
+
60
+ static const unsigned char sigma[16] = {
61
+ 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'
62
+ };
63
+
64
+ static void
65
+ chacha_keysetup(chacha_ctx *x, const u8 *k)
66
+ {
67
+ const unsigned char *constants;
68
+
69
+ x->input[4] = U8TO32_LITTLE(k + 0);
70
+ x->input[5] = U8TO32_LITTLE(k + 4);
71
+ x->input[6] = U8TO32_LITTLE(k + 8);
72
+ x->input[7] = U8TO32_LITTLE(k + 12);
73
+ k += 16;
74
+ constants = sigma;
75
+ x->input[8] = U8TO32_LITTLE(k + 0);
76
+ x->input[9] = U8TO32_LITTLE(k + 4);
77
+ x->input[10] = U8TO32_LITTLE(k + 8);
78
+ x->input[11] = U8TO32_LITTLE(k + 12);
79
+ x->input[0] = U8TO32_LITTLE(constants + 0);
80
+ x->input[1] = U8TO32_LITTLE(constants + 4);
81
+ x->input[2] = U8TO32_LITTLE(constants + 8);
82
+ x->input[3] = U8TO32_LITTLE(constants + 12);
83
+ }
84
+
85
+ static void
86
+ chacha_ivsetup(chacha_ctx *x, const u8 *iv, const u8 *counter)
87
+ {
88
+ x->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 0);
89
+ x->input[13] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 4);
90
+ x->input[14] = U8TO32_LITTLE(iv + 0);
91
+ x->input[15] = U8TO32_LITTLE(iv + 4);
92
+ }
93
+
94
+ static void
95
+ chacha_encrypt_bytes(chacha_ctx *x, const u8 *m, u8 *c, unsigned long long bytes)
96
+ {
97
+ u32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;
98
+ u32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;
99
+ u8 *ctarget = NULL;
100
+ u8 tmp[64];
101
+ unsigned long long i;
102
+
103
+ if (!bytes) {
104
+ return;
105
+ }
106
+ j0 = x->input[0];
107
+ j1 = x->input[1];
108
+ j2 = x->input[2];
109
+ j3 = x->input[3];
110
+ j4 = x->input[4];
111
+ j5 = x->input[5];
112
+ j6 = x->input[6];
113
+ j7 = x->input[7];
114
+ j8 = x->input[8];
115
+ j9 = x->input[9];
116
+ j10 = x->input[10];
117
+ j11 = x->input[11];
118
+ j12 = x->input[12];
119
+ j13 = x->input[13];
120
+ j14 = x->input[14];
121
+ j15 = x->input[15];
122
+
123
+ for (;;) {
124
+ if (bytes < 64) {
125
+ for (i = 0; i < bytes; ++i) {
126
+ tmp[i] = m[i];
127
+ }
128
+ m = tmp;
129
+ ctarget = c;
130
+ c = tmp;
131
+ }
132
+ x0 = j0;
133
+ x1 = j1;
134
+ x2 = j2;
135
+ x3 = j3;
136
+ x4 = j4;
137
+ x5 = j5;
138
+ x6 = j6;
139
+ x7 = j7;
140
+ x8 = j8;
141
+ x9 = j9;
142
+ x10 = j10;
143
+ x11 = j11;
144
+ x12 = j12;
145
+ x13 = j13;
146
+ x14 = j14;
147
+ x15 = j15;
148
+ for (i = 20; i > 0; i -= 2) {
149
+ QUARTERROUND(x0, x4, x8, x12)
150
+ QUARTERROUND(x1, x5, x9, x13)
151
+ QUARTERROUND(x2, x6, x10, x14)
152
+ QUARTERROUND(x3, x7, x11, x15)
153
+ QUARTERROUND(x0, x5, x10, x15)
154
+ QUARTERROUND(x1, x6, x11, x12)
155
+ QUARTERROUND(x2, x7, x8, x13)
156
+ QUARTERROUND(x3, x4, x9, x14)
157
+ }
158
+ x0 = PLUS(x0, j0);
159
+ x1 = PLUS(x1, j1);
160
+ x2 = PLUS(x2, j2);
161
+ x3 = PLUS(x3, j3);
162
+ x4 = PLUS(x4, j4);
163
+ x5 = PLUS(x5, j5);
164
+ x6 = PLUS(x6, j6);
165
+ x7 = PLUS(x7, j7);
166
+ x8 = PLUS(x8, j8);
167
+ x9 = PLUS(x9, j9);
168
+ x10 = PLUS(x10, j10);
169
+ x11 = PLUS(x11, j11);
170
+ x12 = PLUS(x12, j12);
171
+ x13 = PLUS(x13, j13);
172
+ x14 = PLUS(x14, j14);
173
+ x15 = PLUS(x15, j15);
174
+
175
+ x0 = XOR(x0, U8TO32_LITTLE(m + 0));
176
+ x1 = XOR(x1, U8TO32_LITTLE(m + 4));
177
+ x2 = XOR(x2, U8TO32_LITTLE(m + 8));
178
+ x3 = XOR(x3, U8TO32_LITTLE(m + 12));
179
+ x4 = XOR(x4, U8TO32_LITTLE(m + 16));
180
+ x5 = XOR(x5, U8TO32_LITTLE(m + 20));
181
+ x6 = XOR(x6, U8TO32_LITTLE(m + 24));
182
+ x7 = XOR(x7, U8TO32_LITTLE(m + 28));
183
+ x8 = XOR(x8, U8TO32_LITTLE(m + 32));
184
+ x9 = XOR(x9, U8TO32_LITTLE(m + 36));
185
+ x10 = XOR(x10, U8TO32_LITTLE(m + 40));
186
+ x11 = XOR(x11, U8TO32_LITTLE(m + 44));
187
+ x12 = XOR(x12, U8TO32_LITTLE(m + 48));
188
+ x13 = XOR(x13, U8TO32_LITTLE(m + 52));
189
+ x14 = XOR(x14, U8TO32_LITTLE(m + 56));
190
+ x15 = XOR(x15, U8TO32_LITTLE(m + 60));
191
+
192
+ j12 = PLUSONE(j12);
193
+ if (!j12) {
194
+ j13 = PLUSONE(j13);
195
+ /* stopping at 2^70 bytes per nonce is user's responsibility */
196
+ }
197
+
198
+ U32TO8_LITTLE(c + 0, x0);
199
+ U32TO8_LITTLE(c + 4, x1);
200
+ U32TO8_LITTLE(c + 8, x2);
201
+ U32TO8_LITTLE(c + 12, x3);
202
+ U32TO8_LITTLE(c + 16, x4);
203
+ U32TO8_LITTLE(c + 20, x5);
204
+ U32TO8_LITTLE(c + 24, x6);
205
+ U32TO8_LITTLE(c + 28, x7);
206
+ U32TO8_LITTLE(c + 32, x8);
207
+ U32TO8_LITTLE(c + 36, x9);
208
+ U32TO8_LITTLE(c + 40, x10);
209
+ U32TO8_LITTLE(c + 44, x11);
210
+ U32TO8_LITTLE(c + 48, x12);
211
+ U32TO8_LITTLE(c + 52, x13);
212
+ U32TO8_LITTLE(c + 56, x14);
213
+ U32TO8_LITTLE(c + 60, x15);
214
+
215
+ if (bytes <= 64) {
216
+ if (bytes < 64) {
217
+ for (i = 0; i < bytes; ++i) {
218
+ ctarget[i] = c[i];
219
+ }
220
+ }
221
+ x->input[12] = j12;
222
+ x->input[13] = j13;
223
+ return;
224
+ }
225
+ bytes -= 64;
226
+ c += 64;
227
+ m += 64;
228
+ }
229
+ }
230
+
231
+ int
232
+ crypto_stream_chacha20_ref(unsigned char *c, unsigned long long clen,
233
+ const unsigned char *n, const unsigned char *k)
234
+ {
235
+ struct chacha_ctx ctx;
236
+
237
+ if (!clen) {
238
+ return 0;
239
+ }
240
+ (void) sizeof(int[crypto_stream_chacha20_KEYBYTES == 256 / 8 ? 1 : -1]);
241
+ chacha_keysetup(&ctx, k);
242
+ chacha_ivsetup(&ctx, n, NULL);
243
+ memset(c, 0, clen);
244
+ chacha_encrypt_bytes(&ctx, c, c, clen);
245
+ sodium_memzero(&ctx, sizeof ctx);
246
+
247
+ return 0;
248
+ }
249
+
250
+ int
251
+ crypto_stream_chacha20_ref_xor_ic(unsigned char *c, const unsigned char *m,
252
+ unsigned long long mlen,
253
+ const unsigned char *n, uint64_t ic,
254
+ const unsigned char *k)
255
+ {
256
+ struct chacha_ctx ctx;
257
+ uint8_t ic_bytes[8];
258
+ uint32_t ic_high;
259
+ uint32_t ic_low;
260
+
261
+ if (!mlen) {
262
+ return 0;
263
+ }
264
+ ic_high = U32V(ic >> 32);
265
+ ic_low = U32V(ic);
266
+ U32TO8_LITTLE(&ic_bytes[0], ic_low);
267
+ U32TO8_LITTLE(&ic_bytes[4], ic_high);
268
+ chacha_keysetup(&ctx, k);
269
+ chacha_ivsetup(&ctx, n, ic_bytes);
270
+ chacha_encrypt_bytes(&ctx, m, c, mlen);
271
+ sodium_memzero(&ctx, sizeof ctx);
272
+ sodium_memzero(ic_bytes, sizeof ic_bytes);
273
+
274
+ return 0;
275
+ }
@@ -0,0 +1,36 @@
1
+ #include "crypto_stream_chacha20.h"
2
+ #include "ref/api.h"
3
+
4
+ size_t
5
+ crypto_stream_chacha20_keybytes(void) {
6
+ return crypto_stream_chacha20_KEYBYTES;
7
+ }
8
+
9
+ size_t
10
+ crypto_stream_chacha20_noncebytes(void) {
11
+ return crypto_stream_chacha20_NONCEBYTES;
12
+ }
13
+
14
+ int
15
+ crypto_stream_chacha20(unsigned char *c, unsigned long long clen,
16
+ const unsigned char *n, const unsigned char *k)
17
+ {
18
+ return crypto_stream_chacha20_ref(c, clen, n, k);
19
+ }
20
+
21
+ int
22
+ crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m,
23
+ unsigned long long mlen,
24
+ const unsigned char *n, uint64_t ic,
25
+ const unsigned char *k)
26
+ {
27
+ return crypto_stream_chacha20_ref_xor_ic(c, m, mlen, n, ic, k);
28
+ }
29
+
30
+ int
31
+ crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,
32
+ unsigned long long mlen, const unsigned char *n,
33
+ const unsigned char *k)
34
+ {
35
+ return crypto_stream_chacha20_ref_xor_ic(c, m, mlen, n, 0U, k);
36
+ }
@@ -33,19 +33,20 @@ mov $0,%rax
33
33
  mov %r9,%rcx
34
34
  rep stosb
35
35
  sub %r9,%rdi
36
+ movq $0,472(%rsp)
36
37
  jmp ._start
37
38
 
38
39
  .text
39
40
  .p2align 5
40
41
 
41
- .globl crypto_stream_salsa20_xor
42
- .globl _crypto_stream_salsa20_xor
42
+ .globl crypto_stream_salsa20_xor_ic
43
+ .globl _crypto_stream_salsa20_xor_ic
43
44
  #ifdef __ELF__
44
- .type crypto_stream_salsa20_xor, @function
45
- .type _crypto_stream_salsa20_xor, @function
45
+ .type crypto_stream_salsa20_xor_ic, @function
46
+ .type _crypto_stream_salsa20_xor_ic, @function
46
47
  #endif
47
- crypto_stream_salsa20_xor:
48
- _crypto_stream_salsa20_xor:
48
+ crypto_stream_salsa20_xor_ic:
49
+ _crypto_stream_salsa20_xor_ic:
49
50
 
50
51
  mov %rsp,%r11
51
52
  and $31,%r11
@@ -60,9 +61,10 @@ movq %rbx,456(%rsp)
60
61
  movq %rbp,464(%rsp)
61
62
  mov %rdi,%rdi
62
63
  mov %rsi,%rsi
64
+ mov %r9,%r10
65
+ movq %r8,472(%rsp)
63
66
  mov %rdx,%r9
64
67
  mov %rcx,%rdx
65
- mov %r8,%r10
66
68
  cmp $0,%r9
67
69
  jbe ._done
68
70
 
@@ -75,17 +77,16 @@ movl %ecx,64(%rsp)
75
77
  movl %r8d,4+64(%rsp)
76
78
  movl %eax,8+64(%rsp)
77
79
  movl %r11d,12+64(%rsp)
78
- mov $0,%rcx
79
80
  movl 24(%r10),%r8d
80
81
  movl 4(%r10),%eax
81
82
  movl 4(%rdx),%edx
82
- movq %rcx,472(%rsp)
83
+ movq 472(%rsp),%rcx
83
84
  movl %ecx,80(%rsp)
84
85
  movl %r8d,4+80(%rsp)
85
86
  movl %eax,8+80(%rsp)
86
87
  movl %edx,12+80(%rsp)
87
88
  movl 12(%r10),%edx
88
- mov $0,%rcx
89
+ shr $32,%rcx
89
90
  movl 28(%r10),%r8d
90
91
  movl 8(%r10),%eax
91
92
  movl %edx,96(%rsp)
@@ -4,6 +4,8 @@ D. J. Bernstein
4
4
  Public domain.
5
5
  */
6
6
 
7
+ #include <stdint.h>
8
+
7
9
  #include "api.h"
8
10
  #include "crypto_core_salsa20.h"
9
11
  #include "utils.h"
@@ -16,10 +18,10 @@ static const unsigned char sigma[16] = {
16
18
  'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'
17
19
  };
18
20
 
19
- int crypto_stream_xor(
21
+ int crypto_stream_salsa20_xor_ic(
20
22
  unsigned char *c,
21
23
  const unsigned char *m,unsigned long long mlen,
22
- const unsigned char *n,
24
+ const unsigned char *n, uint64_t ic,
23
25
  const unsigned char *k
24
26
  )
25
27
  {
@@ -33,7 +35,10 @@ int crypto_stream_xor(
33
35
 
34
36
  for (i = 0;i < 32;++i) kcopy[i] = k[i];
35
37
  for (i = 0;i < 8;++i) in[i] = n[i];
36
- for (i = 8;i < 16;++i) in[i] = 0;
38
+ for (i = 8;i < 16;++i) {
39
+ in[i] = (unsigned char) (ic & 0xff);
40
+ ic >>= 8;
41
+ }
37
42
 
38
43
  while (mlen >= 64) {
39
44
  crypto_core_salsa20(block,in,kcopy,sigma);
@@ -9,3 +9,11 @@ size_t
9
9
  crypto_stream_salsa20_noncebytes(void) {
10
10
  return crypto_stream_salsa20_NONCEBYTES;
11
11
  }
12
+
13
+ int
14
+ crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m,
15
+ unsigned long long mlen, const unsigned char *n,
16
+ const unsigned char *k)
17
+ {
18
+ return crypto_stream_salsa20_xor_ic(c, m, mlen, n, 0U, k);
19
+ }
@@ -2,6 +2,7 @@
2
2
  SODIUM_EXPORT = \
3
3
  sodium.h \
4
4
  sodium/core.h \
5
+ sodium/crypto_aead_chacha20poly1305.h \
5
6
  sodium/crypto_auth.h \
6
7
  sodium/crypto_auth_hmacsha256.h \
7
8
  sodium/crypto_auth_hmacsha512.h \
@@ -19,8 +20,7 @@ SODIUM_EXPORT = \
19
20
  sodium/crypto_hash_sha512.h \
20
21
  sodium/crypto_onetimeauth.h \
21
22
  sodium/crypto_onetimeauth_poly1305.h \
22
- sodium/crypto_onetimeauth_poly1305_donna.h \
23
- sodium/crypto_pwhash_scryptxsalsa208sha256.h \
23
+ sodium/crypto_pwhash_scryptsalsa208sha256.h \
24
24
  sodium/crypto_scalarmult.h \
25
25
  sodium/crypto_scalarmult_curve25519.h \
26
26
  sodium/crypto_secretbox.h \
@@ -33,6 +33,7 @@ SODIUM_EXPORT = \
33
33
  sodium/crypto_stream.h \
34
34
  sodium/crypto_stream_aes128ctr.h \
35
35
  sodium/crypto_stream_aes256estream.h \
36
+ sodium/crypto_stream_chacha20.h \
36
37
  sodium/crypto_stream_salsa20.h \
37
38
  sodium/crypto_stream_salsa2012.h \
38
39
  sodium/crypto_stream_salsa208.h \
@@ -299,6 +299,7 @@ top_srcdir = @top_srcdir@
299
299
  SODIUM_EXPORT = \
300
300
  sodium.h \
301
301
  sodium/core.h \
302
+ sodium/crypto_aead_chacha20poly1305.h \
302
303
  sodium/crypto_auth.h \
303
304
  sodium/crypto_auth_hmacsha256.h \
304
305
  sodium/crypto_auth_hmacsha512.h \
@@ -316,8 +317,7 @@ SODIUM_EXPORT = \
316
317
  sodium/crypto_hash_sha512.h \
317
318
  sodium/crypto_onetimeauth.h \
318
319
  sodium/crypto_onetimeauth_poly1305.h \
319
- sodium/crypto_onetimeauth_poly1305_donna.h \
320
- sodium/crypto_pwhash_scryptxsalsa208sha256.h \
320
+ sodium/crypto_pwhash_scryptsalsa208sha256.h \
321
321
  sodium/crypto_scalarmult.h \
322
322
  sodium/crypto_scalarmult_curve25519.h \
323
323
  sodium/crypto_secretbox.h \
@@ -330,6 +330,7 @@ SODIUM_EXPORT = \
330
330
  sodium/crypto_stream.h \
331
331
  sodium/crypto_stream_aes128ctr.h \
332
332
  sodium/crypto_stream_aes256estream.h \
333
+ sodium/crypto_stream_chacha20.h \
333
334
  sodium/crypto_stream_salsa20.h \
334
335
  sodium/crypto_stream_salsa2012.h \
335
336
  sodium/crypto_stream_salsa208.h \