ooxml_crypt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (264) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +58 -0
  5. data/Rakefile +12 -0
  6. data/bin/console +15 -0
  7. data/bin/setup +8 -0
  8. data/ext/ooxml_crypt/extconf.rb +18 -0
  9. data/ext/ooxml_crypt/ooxml_crypt.c +27 -0
  10. data/ext/ooxml_crypt/ooxml_crypt.h +7 -0
  11. data/lib/ooxml_crypt/version.rb +5 -0
  12. data/lib/ooxml_crypt.rb +75 -0
  13. data/vendor/cybozulib/.github/workflows/main.yml +12 -0
  14. data/vendor/cybozulib/.gitignore +5 -0
  15. data/vendor/cybozulib/CMakeLists.txt +6 -0
  16. data/vendor/cybozulib/COPYRIGHT +27 -0
  17. data/vendor/cybozulib/Makefile +26 -0
  18. data/vendor/cybozulib/bin/libeay32.dll +0 -0
  19. data/vendor/cybozulib/bin/libmecab.dll +0 -0
  20. data/vendor/cybozulib/bin/ssleay32.dll +0 -0
  21. data/vendor/cybozulib/common.mk +116 -0
  22. data/vendor/cybozulib/common.props +25 -0
  23. data/vendor/cybozulib/cybozulib.sln +286 -0
  24. data/vendor/cybozulib/debug.props +14 -0
  25. data/vendor/cybozulib/include/cybozu/array.hpp +197 -0
  26. data/vendor/cybozulib/include/cybozu/atoi.hpp +238 -0
  27. data/vendor/cybozulib/include/cybozu/atomic.hpp +146 -0
  28. data/vendor/cybozulib/include/cybozu/base64.hpp +210 -0
  29. data/vendor/cybozulib/include/cybozu/benchmark.hpp +212 -0
  30. data/vendor/cybozulib/include/cybozu/bfd.hpp +105 -0
  31. data/vendor/cybozulib/include/cybozu/bit_operation.hpp +139 -0
  32. data/vendor/cybozulib/include/cybozu/bitvector.hpp +358 -0
  33. data/vendor/cybozulib/include/cybozu/condition_variable.hpp +113 -0
  34. data/vendor/cybozulib/include/cybozu/condition_variable_cs.hpp +74 -0
  35. data/vendor/cybozulib/include/cybozu/config.hpp +392 -0
  36. data/vendor/cybozulib/include/cybozu/critical_section.hpp +60 -0
  37. data/vendor/cybozulib/include/cybozu/crypto.hpp +321 -0
  38. data/vendor/cybozulib/include/cybozu/csucvector.hpp +624 -0
  39. data/vendor/cybozulib/include/cybozu/csv.hpp +294 -0
  40. data/vendor/cybozulib/include/cybozu/data_type.hpp +27 -0
  41. data/vendor/cybozulib/include/cybozu/endian.hpp +224 -0
  42. data/vendor/cybozulib/include/cybozu/env.hpp +63 -0
  43. data/vendor/cybozulib/include/cybozu/event.hpp +122 -0
  44. data/vendor/cybozulib/include/cybozu/exception.hpp +253 -0
  45. data/vendor/cybozulib/include/cybozu/file.hpp +626 -0
  46. data/vendor/cybozulib/include/cybozu/fmindex.hpp +291 -0
  47. data/vendor/cybozulib/include/cybozu/format.hpp +93 -0
  48. data/vendor/cybozulib/include/cybozu/frequency.hpp +264 -0
  49. data/vendor/cybozulib/include/cybozu/hash.hpp +67 -0
  50. data/vendor/cybozulib/include/cybozu/inttype.hpp +174 -0
  51. data/vendor/cybozulib/include/cybozu/itoa.hpp +336 -0
  52. data/vendor/cybozulib/include/cybozu/json.hpp +120 -0
  53. data/vendor/cybozulib/include/cybozu/line_stream.hpp +149 -0
  54. data/vendor/cybozulib/include/cybozu/link_libeay32.hpp +21 -0
  55. data/vendor/cybozulib/include/cybozu/link_mpir.hpp +18 -0
  56. data/vendor/cybozulib/include/cybozu/link_ssleay32.hpp +19 -0
  57. data/vendor/cybozulib/include/cybozu/log.hpp +237 -0
  58. data/vendor/cybozulib/include/cybozu/minixml.hpp +452 -0
  59. data/vendor/cybozulib/include/cybozu/mmap.hpp +143 -0
  60. data/vendor/cybozulib/include/cybozu/mutex.hpp +144 -0
  61. data/vendor/cybozulib/include/cybozu/nlp/mecab.hpp +96 -0
  62. data/vendor/cybozulib/include/cybozu/nlp/plsi.hpp +315 -0
  63. data/vendor/cybozulib/include/cybozu/nlp/random.hpp +74 -0
  64. data/vendor/cybozulib/include/cybozu/nlp/sparse.hpp +529 -0
  65. data/vendor/cybozulib/include/cybozu/nlp/svd.hpp +486 -0
  66. data/vendor/cybozulib/include/cybozu/nlp/tfidf.hpp +226 -0
  67. data/vendor/cybozulib/include/cybozu/nlp/top_score.hpp +75 -0
  68. data/vendor/cybozulib/include/cybozu/option.hpp +743 -0
  69. data/vendor/cybozulib/include/cybozu/parallel.hpp +88 -0
  70. data/vendor/cybozulib/include/cybozu/pcg.hpp +72 -0
  71. data/vendor/cybozulib/include/cybozu/process.hpp +324 -0
  72. data/vendor/cybozulib/include/cybozu/quit_signal_handler.hpp +66 -0
  73. data/vendor/cybozulib/include/cybozu/random_generator.hpp +144 -0
  74. data/vendor/cybozulib/include/cybozu/regex.hpp +463 -0
  75. data/vendor/cybozulib/include/cybozu/select8.hpp +279 -0
  76. data/vendor/cybozulib/include/cybozu/serializer.hpp +363 -0
  77. data/vendor/cybozulib/include/cybozu/sha1.hpp +209 -0
  78. data/vendor/cybozulib/include/cybozu/sha2.hpp +506 -0
  79. data/vendor/cybozulib/include/cybozu/siphash.hpp +105 -0
  80. data/vendor/cybozulib/include/cybozu/socket.hpp +785 -0
  81. data/vendor/cybozulib/include/cybozu/ssl.hpp +203 -0
  82. data/vendor/cybozulib/include/cybozu/stacktrace.hpp +291 -0
  83. data/vendor/cybozulib/include/cybozu/stream.hpp +269 -0
  84. data/vendor/cybozulib/include/cybozu/string.hpp +1746 -0
  85. data/vendor/cybozulib/include/cybozu/string_operation.hpp +365 -0
  86. data/vendor/cybozulib/include/cybozu/sucvector.hpp +378 -0
  87. data/vendor/cybozulib/include/cybozu/test.hpp +373 -0
  88. data/vendor/cybozulib/include/cybozu/thread.hpp +229 -0
  89. data/vendor/cybozulib/include/cybozu/time.hpp +281 -0
  90. data/vendor/cybozulib/include/cybozu/tls.hpp +115 -0
  91. data/vendor/cybozulib/include/cybozu/unordered_map.hpp +13 -0
  92. data/vendor/cybozulib/include/cybozu/unordered_set.hpp +13 -0
  93. data/vendor/cybozulib/include/cybozu/v128.hpp +376 -0
  94. data/vendor/cybozulib/include/cybozu/wavelet_matrix.hpp +345 -0
  95. data/vendor/cybozulib/include/cybozu/xorshift.hpp +189 -0
  96. data/vendor/cybozulib/include/cybozu/zlib.hpp +325 -0
  97. data/vendor/cybozulib/include/sais.hxx +364 -0
  98. data/vendor/cybozulib/misc/make_select8tbl.cpp +26 -0
  99. data/vendor/cybozulib/mk.bat +37 -0
  100. data/vendor/cybozulib/readme.md +29 -0
  101. data/vendor/cybozulib/release.props +12 -0
  102. data/vendor/cybozulib/sample/Makefile +30 -0
  103. data/vendor/cybozulib/sample/csucvector_smpl.cpp +42 -0
  104. data/vendor/cybozulib/sample/data/svd/org/test1.S +4 -0
  105. data/vendor/cybozulib/sample/data/svd/org/test1.U +4 -0
  106. data/vendor/cybozulib/sample/data/svd/org/test1.V +6 -0
  107. data/vendor/cybozulib/sample/data/svd/test1 +4 -0
  108. data/vendor/cybozulib/sample/data/svd/test2 +4 -0
  109. data/vendor/cybozulib/sample/desymbol.cpp +127 -0
  110. data/vendor/cybozulib/sample/exception_smpl.cpp +46 -0
  111. data/vendor/cybozulib/sample/fmindex_smpl.cpp +231 -0
  112. data/vendor/cybozulib/sample/log_smpl.cpp +19 -0
  113. data/vendor/cybozulib/sample/mecab_smpl.cpp +37 -0
  114. data/vendor/cybozulib/sample/option2_smpl.cpp +68 -0
  115. data/vendor/cybozulib/sample/option_smpl.cpp +42 -0
  116. data/vendor/cybozulib/sample/plsi_smpl.cpp +207 -0
  117. data/vendor/cybozulib/sample/proj/exception_smpl.vcproj +184 -0
  118. data/vendor/cybozulib/sample/proj/mecab_smpl.vcproj +184 -0
  119. data/vendor/cybozulib/sample/proj/ssl_smpl/ssl_smpl.vcxproj +85 -0
  120. data/vendor/cybozulib/sample/proj/ssl_smpl.vcproj +347 -0
  121. data/vendor/cybozulib/sample/proj/stacktrace_smpl/stacktrace_smpl.vcxproj +85 -0
  122. data/vendor/cybozulib/sample/proj/svd_smpl.vcproj +184 -0
  123. data/vendor/cybozulib/sample/quit_signal_handler.cpp +30 -0
  124. data/vendor/cybozulib/sample/serializer_smpl.cpp +196 -0
  125. data/vendor/cybozulib/sample/socket_smpl.cpp +82 -0
  126. data/vendor/cybozulib/sample/ssl_smpl.cpp +39 -0
  127. data/vendor/cybozulib/sample/stacktrace_smpl.cpp +52 -0
  128. data/vendor/cybozulib/sample/svd_bench_smpl.cpp +143 -0
  129. data/vendor/cybozulib/sample/svd_smpl.cpp +94 -0
  130. data/vendor/cybozulib/sample/wm_bench_smpl.cpp +182 -0
  131. data/vendor/cybozulib/sample/zlib_smpl.cpp +41 -0
  132. data/vendor/cybozulib/src/Makefile +8 -0
  133. data/vendor/cybozulib/src/base/Makefile +19 -0
  134. data/vendor/cybozulib/test/Makefile +12 -0
  135. data/vendor/cybozulib/test/base/Makefile +37 -0
  136. data/vendor/cybozulib/test/base/array_test.cpp +173 -0
  137. data/vendor/cybozulib/test/base/atoi_test.cpp +774 -0
  138. data/vendor/cybozulib/test/base/atomic_test.cpp +49 -0
  139. data/vendor/cybozulib/test/base/base64_test.cpp +113 -0
  140. data/vendor/cybozulib/test/base/bit_operation_test.cpp +134 -0
  141. data/vendor/cybozulib/test/base/bitvector_test.cpp +204 -0
  142. data/vendor/cybozulib/test/base/condition_variable_cs_test.cpp +92 -0
  143. data/vendor/cybozulib/test/base/condition_variable_test.cpp +88 -0
  144. data/vendor/cybozulib/test/base/config_test.cpp +236 -0
  145. data/vendor/cybozulib/test/base/crypto_test.cpp +122 -0
  146. data/vendor/cybozulib/test/base/csucvector_test.cpp +63 -0
  147. data/vendor/cybozulib/test/base/csv_test.cpp +182 -0
  148. data/vendor/cybozulib/test/base/data/a.xml +26 -0
  149. data/vendor/cybozulib/test/base/endian_test.cpp +56 -0
  150. data/vendor/cybozulib/test/base/env_test.cpp +22 -0
  151. data/vendor/cybozulib/test/base/event_test.cpp +41 -0
  152. data/vendor/cybozulib/test/base/file_test.cpp +233 -0
  153. data/vendor/cybozulib/test/base/fmindex_test.cpp +118 -0
  154. data/vendor/cybozulib/test/base/format_test.cpp +12 -0
  155. data/vendor/cybozulib/test/base/frequency_test.cpp +104 -0
  156. data/vendor/cybozulib/test/base/itoa_test.cpp +522 -0
  157. data/vendor/cybozulib/test/base/line_stream_test.cpp +208 -0
  158. data/vendor/cybozulib/test/base/mecab_test.cpp +41 -0
  159. data/vendor/cybozulib/test/base/minixml_test.cpp +103 -0
  160. data/vendor/cybozulib/test/base/mmap_test.cpp +15 -0
  161. data/vendor/cybozulib/test/base/option_test.cpp +487 -0
  162. data/vendor/cybozulib/test/base/parallel_test.cpp +48 -0
  163. data/vendor/cybozulib/test/base/proj/array_test/array_test.vcxproj +86 -0
  164. data/vendor/cybozulib/test/base/proj/atoi_test/atoi_test.vcxproj +86 -0
  165. data/vendor/cybozulib/test/base/proj/atomic_test/atomic_test.vcxproj +86 -0
  166. data/vendor/cybozulib/test/base/proj/base64_test/base64_test.vcxproj +86 -0
  167. data/vendor/cybozulib/test/base/proj/condition_variable_cs_test/condition_variable_cs_test.vcxproj +86 -0
  168. data/vendor/cybozulib/test/base/proj/condition_variable_test/condition_variable_test.vcxproj +86 -0
  169. data/vendor/cybozulib/test/base/proj/config_test/config_test.vcxproj +86 -0
  170. data/vendor/cybozulib/test/base/proj/csv_test/csv_test.vcxproj +86 -0
  171. data/vendor/cybozulib/test/base/proj/endian_test/endian_test.vcxproj +86 -0
  172. data/vendor/cybozulib/test/base/proj/env_test/env_test.vcxproj +86 -0
  173. data/vendor/cybozulib/test/base/proj/event_test/event_test.vcxproj +86 -0
  174. data/vendor/cybozulib/test/base/proj/file_test/file_test.vcxproj +86 -0
  175. data/vendor/cybozulib/test/base/proj/itoa_test/itoa_test.vcxproj +86 -0
  176. data/vendor/cybozulib/test/base/proj/mecab_test/mecab_test.vcxproj +88 -0
  177. data/vendor/cybozulib/test/base/proj/minixml_test/minixml_test.vcxproj +86 -0
  178. data/vendor/cybozulib/test/base/proj/mmap_test/mmap_test.vcxproj +86 -0
  179. data/vendor/cybozulib/test/base/proj/serializer_test/serializer_test.vcxproj +86 -0
  180. data/vendor/cybozulib/test/base/proj/sha1_test/sha1_test.vcxproj +86 -0
  181. data/vendor/cybozulib/test/base/proj/stream_test/stream_test.vcxproj +86 -0
  182. data/vendor/cybozulib/test/base/proj/string_operation_test/string_operation_test.vcxproj +86 -0
  183. data/vendor/cybozulib/test/base/proj/string_test/string_test.vcxproj +86 -0
  184. data/vendor/cybozulib/test/base/proj/thread_test/thread_test.vcxproj +86 -0
  185. data/vendor/cybozulib/test/base/proj/time_test/time_test.vcxproj +86 -0
  186. data/vendor/cybozulib/test/base/proj/tls_test/tls_test.vcxproj +86 -0
  187. data/vendor/cybozulib/test/base/proj/zlib_test/zlib_test.vcxproj +86 -0
  188. data/vendor/cybozulib/test/base/random_generator_test.cpp +28 -0
  189. data/vendor/cybozulib/test/base/regex_test.cpp +74 -0
  190. data/vendor/cybozulib/test/base/serializer_test.cpp +483 -0
  191. data/vendor/cybozulib/test/base/sha1_test.cpp +61 -0
  192. data/vendor/cybozulib/test/base/sha2_test.cpp +191 -0
  193. data/vendor/cybozulib/test/base/siphash_test.cpp +33 -0
  194. data/vendor/cybozulib/test/base/socket_test.cpp +76 -0
  195. data/vendor/cybozulib/test/base/stream_test.cpp +101 -0
  196. data/vendor/cybozulib/test/base/string_operation_test.cpp +340 -0
  197. data/vendor/cybozulib/test/base/string_test.cpp +1705 -0
  198. data/vendor/cybozulib/test/base/sucvector_test.cpp +312 -0
  199. data/vendor/cybozulib/test/base/thread_test.cpp +62 -0
  200. data/vendor/cybozulib/test/base/time_test.cpp +164 -0
  201. data/vendor/cybozulib/test/base/tls_test.cpp +50 -0
  202. data/vendor/cybozulib/test/base/wavelet_matrix_test.cpp +145 -0
  203. data/vendor/cybozulib/test/base/zlib_test.cpp +371 -0
  204. data/vendor/cybozulib/test/nlp/Makefile +27 -0
  205. data/vendor/cybozulib/test/nlp/proj/random_test.vcproj +184 -0
  206. data/vendor/cybozulib/test/nlp/proj/sparse_test.vcproj +184 -0
  207. data/vendor/cybozulib/test/nlp/proj/svd_test.vcproj +184 -0
  208. data/vendor/cybozulib/test/nlp/random_test.cpp +62 -0
  209. data/vendor/cybozulib/test/nlp/sparse_test.cpp +347 -0
  210. data/vendor/cybozulib/test/nlp/svd_test.cpp +234 -0
  211. data/vendor/cybozulib/test/nlp/top_score_test.cpp +40 -0
  212. data/vendor/cybozulib/tool/create_vcproj.py +186 -0
  213. data/vendor/cybozulib/tool/vcproj_tmpl.py +185 -0
  214. data/vendor/msoffice/COPYRIGHT +27 -0
  215. data/vendor/msoffice/Makefile +29 -0
  216. data/vendor/msoffice/bin/64/msoc.dll +0 -0
  217. data/vendor/msoffice/bin/64/msocsample.exe +0 -0
  218. data/vendor/msoffice/bin/64/msoffice-crypt.exe +0 -0
  219. data/vendor/msoffice/bin/msoc.dll +0 -0
  220. data/vendor/msoffice/bin/msocsample.exe +0 -0
  221. data/vendor/msoffice/bin/msoffice-crypt.exe +0 -0
  222. data/vendor/msoffice/common.mk +71 -0
  223. data/vendor/msoffice/common.props +26 -0
  224. data/vendor/msoffice/debug.props +14 -0
  225. data/vendor/msoffice/include/attack.hpp +211 -0
  226. data/vendor/msoffice/include/cfb.hpp +777 -0
  227. data/vendor/msoffice/include/crypto_util.hpp +450 -0
  228. data/vendor/msoffice/include/custom_sha1.hpp +342 -0
  229. data/vendor/msoffice/include/decode.hpp +240 -0
  230. data/vendor/msoffice/include/encode.hpp +221 -0
  231. data/vendor/msoffice/include/make_dataspace.hpp +316 -0
  232. data/vendor/msoffice/include/msoc.h +129 -0
  233. data/vendor/msoffice/include/resource.hpp +7 -0
  234. data/vendor/msoffice/include/standard_encryption.hpp +145 -0
  235. data/vendor/msoffice/include/uint32vec.hpp +179 -0
  236. data/vendor/msoffice/include/util.hpp +212 -0
  237. data/vendor/msoffice/lib/.emptydir +0 -0
  238. data/vendor/msoffice/misc/decrypt-xls.vbs +46 -0
  239. data/vendor/msoffice/mk.bat +1 -0
  240. data/vendor/msoffice/mkdll.bat +3 -0
  241. data/vendor/msoffice/msoc.def +13 -0
  242. data/vendor/msoffice/msocsample.py +178 -0
  243. data/vendor/msoffice/msoffice12.sln +31 -0
  244. data/vendor/msoffice/readme.md +110 -0
  245. data/vendor/msoffice/release.props +28 -0
  246. data/vendor/msoffice/src/Makefile +19 -0
  247. data/vendor/msoffice/src/attack.cpp +124 -0
  248. data/vendor/msoffice/src/cfb_test.cpp +77 -0
  249. data/vendor/msoffice/src/minisample.c +54 -0
  250. data/vendor/msoffice/src/msocdll.cpp +276 -0
  251. data/vendor/msoffice/src/msocsample.c +136 -0
  252. data/vendor/msoffice/src/msoffice-crypt.cpp +219 -0
  253. data/vendor/msoffice/src/proj/attack/attack.vcxproj +88 -0
  254. data/vendor/msoffice/src/proj/main/msoffice-crypt.vcxproj +88 -0
  255. data/vendor/msoffice/src/sha1.cpp +234 -0
  256. data/vendor/msoffice/test/Makefile +20 -0
  257. data/vendor/msoffice/test/cfb_test.cpp +74 -0
  258. data/vendor/msoffice/test/hash_test.cpp +59 -0
  259. data/vendor/msoffice/test/proj/cfb/cfb_test.vcxproj +90 -0
  260. data/vendor/msoffice/test/proj/hash/hash_test.vcxproj +90 -0
  261. data/vendor/msoffice/test/sampl.bat +8 -0
  262. data/vendor/msoffice/test_all.py +46 -0
  263. data/vendor/update +4 -0
  264. metadata +351 -0
@@ -0,0 +1,483 @@
1
+ #include <stdio.h>
2
+ #include <cybozu/serializer.hpp>
3
+ #include <cybozu/test.hpp>
4
+ #include <cybozu/xorshift.hpp>
5
+ #include <map>
6
+ #include <set>
7
+ #include <list>
8
+ #include <vector>
9
+ #include <cybozu/unordered_map.hpp>
10
+
11
+ typedef std::vector<int> IntVec;
12
+ typedef std::vector<std::string> StrVec;
13
+ typedef std::vector<StrVec> StrVecVec;
14
+
15
+ template<class T>
16
+ void SaveAndLoad(T& y, const T& x)
17
+ {
18
+ y = T();
19
+ std::stringstream ss;
20
+ cybozu::save(ss, x);
21
+ cybozu::load(y, ss);
22
+ }
23
+
24
+ template<class T>
25
+ void SaveAndLoadVec(T& y, const T& x)
26
+ {
27
+ y = T();
28
+ std::stringstream ss;
29
+ cybozu::savePodVec(ss, x);
30
+ cybozu::loadPodVec(y, ss);
31
+ }
32
+
33
+ template<class T>
34
+ void testInteger()
35
+ {
36
+ cybozu::XorShift rg;
37
+ for (int i = 0; i < 100; i++) {
38
+ T x = T(rg.get64()), y;
39
+ SaveAndLoad(y, x);
40
+ CYBOZU_TEST_EQUAL(x, y);
41
+ }
42
+ }
43
+
44
+ template<class T>
45
+ void testFloat()
46
+ {
47
+ cybozu::XorShift rg;
48
+ for (int i = 0; i < 100; i++) {
49
+ long long r = rg.get64();
50
+ long long q = rg.get64();
51
+ int sign = rg() & 1 ? 1 : -1;
52
+ T x = q ? (T)(r / T(q) * sign) : 0, y;
53
+ SaveAndLoad(y, x);
54
+ CYBOZU_TEST_EQUAL(x, y);
55
+ }
56
+ }
57
+
58
+ CYBOZU_TEST_AUTO(integer)
59
+ {
60
+ testInteger<char>();
61
+ testInteger<short>();
62
+ testInteger<int>();
63
+ testInteger<long long>();
64
+ testInteger<unsigned char>();
65
+ testInteger<unsigned short>();
66
+ testInteger<unsigned int>();
67
+ testInteger<unsigned long long>();
68
+ }
69
+
70
+ const uint32_t limitInt32tbl[] = {
71
+ 0, 1, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 150, 191, 192, 255,
72
+ 256, 257, 65535,
73
+ 65536, 16777215,
74
+ 16777216, 2147483647, uint32_t(2147483648u), uint32_t(4294967295u),
75
+ };
76
+
77
+ const uint64_t limitInt64tbl[] = {
78
+ 0, 1, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 150, 191, 192, 255,
79
+ 256, 257, 65535,
80
+ 65536, 16777215,
81
+ 16777216, 2147483647, 2147483648u, 4294967295u,
82
+ uint64_t(4294967296ULL),
83
+ uint64_t((1ULL << 40) - 1),
84
+ uint64_t(1ULL << 40),
85
+ uint64_t((1ULL << 48) - 1),
86
+ uint64_t(1ULL << 48),
87
+ uint64_t(1ULL << 56),
88
+ uint64_t((1ULL << 56) - 1),
89
+ uint64_t(1ULL << 63),
90
+ uint64_t(18446744073709551615ULL),
91
+ };
92
+
93
+ template<class T, class S, size_t N>
94
+ void testLimitInt(const S (&tbl)[N])
95
+ {
96
+ for (size_t i = 0; i < N; i++) {
97
+ {
98
+ T x = T(tbl[i]), y;
99
+ SaveAndLoad(y, x);
100
+ CYBOZU_TEST_EQUAL(x, y);
101
+ }
102
+ {
103
+ T x = T(~tbl[i] + 1), y;
104
+ SaveAndLoad(y, x);
105
+ CYBOZU_TEST_EQUAL(x, y);
106
+ }
107
+ }
108
+ }
109
+
110
+ void dump(const std::string& str)
111
+ {
112
+ for (size_t i = 0; i < str.size(); i++) {
113
+ printf("%02x ", (uint8_t)str[i]);
114
+ }
115
+ printf("\n");
116
+ }
117
+
118
+ CYBOZU_TEST_AUTO(limit)
119
+ {
120
+ testLimitInt<int>(limitInt32tbl);
121
+ testLimitInt<uint32_t>(limitInt32tbl);
122
+ testLimitInt<int64_t>(limitInt64tbl);
123
+ testLimitInt<uint64_t>(limitInt64tbl);
124
+ }
125
+
126
+ CYBOZU_TEST_AUTO(bool)
127
+ {
128
+ for (int i = 0; i < 2; i++) {
129
+ bool x = i == 0, y;
130
+ SaveAndLoad(y, x);
131
+ CYBOZU_TEST_EQUAL(y, x);
132
+ }
133
+ }
134
+
135
+ CYBOZU_TEST_AUTO(float)
136
+ {
137
+ testFloat<float>();
138
+ testFloat<double>();
139
+ }
140
+
141
+ CYBOZU_TEST_AUTO(string)
142
+ {
143
+ const char *tbl[] = {
144
+ "",
145
+ "abc",
146
+ "abc\n\r,xxx",
147
+ "abc\n\r\\,xxx",
148
+ "XX99\x01\x02\x33\xff",
149
+ };
150
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
151
+ std::string x = tbl[i], y;
152
+ SaveAndLoad(y, x);
153
+ CYBOZU_TEST_EQUAL(x, y);
154
+ }
155
+ const char *tbl2[] = {
156
+ "",
157
+ "abc this is a pen",
158
+ };
159
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl2); i++) {
160
+ const char *msg = tbl2[i];
161
+ std::stringstream ss;
162
+ cybozu::save(ss, msg);
163
+ std::string y;
164
+ cybozu::load(y, ss);
165
+ CYBOZU_TEST_EQUAL(y, msg);
166
+ }
167
+ }
168
+
169
+ template<typename V, typename T>
170
+ void Set(V& x, const T* in, size_t n)
171
+ {
172
+ x.clear();
173
+ for (size_t i = 0; i < n; i++) {
174
+ x.push_back(in[i]);
175
+ }
176
+ }
177
+
178
+ template<class T>
179
+ void verify(const T& x, const T& y)
180
+ {
181
+ const size_t n = x.size();
182
+ CYBOZU_TEST_EQUAL(n, y.size());
183
+ if (x.size() == y.size()) {
184
+ for (typename T::const_iterator i = x.begin(), ie = x.end(), j = y.begin(); i != ie; ++i, ++j) {
185
+ CYBOZU_TEST_EQUAL(*i, *j);
186
+ }
187
+ }
188
+ }
189
+
190
+ template<class T>
191
+ void verifyPair(const T& x, const T& y)
192
+ {
193
+ const size_t n = x.size();
194
+ CYBOZU_TEST_EQUAL(n, y.size());
195
+ if (x.size() == y.size()) {
196
+ for (typename T::const_iterator i = x.begin(), ie = x.end(), j = y.begin(); i != ie; ++i, ++j) {
197
+ CYBOZU_TEST_EQUAL(i->first, j->first);
198
+ CYBOZU_TEST_EQUAL(i->second, j->second);
199
+ }
200
+ }
201
+ }
202
+
203
+ CYBOZU_TEST_AUTO(IntVec)
204
+ {
205
+ const struct {
206
+ size_t n;
207
+ int v[5];
208
+ } tbl[] = {
209
+ { 0, { 0 } },
210
+ { 1, { 1234567 } },
211
+ { 4, { 0, 12, 243, -344 } },
212
+ };
213
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
214
+ IntVec x, y, z;
215
+ Set(x, tbl[i].v, tbl[i].n);
216
+ SaveAndLoad(y, x);
217
+ verify(x, y);
218
+ SaveAndLoadVec(z, x);
219
+ verify(x, z);
220
+ }
221
+ }
222
+
223
+ CYBOZU_TEST_AUTO(StrVec)
224
+ {
225
+ const struct {
226
+ size_t n;
227
+ const char *v[5];
228
+ } tbl[] = {
229
+ { 0, { "" } },
230
+ { 1, { "1234567" } },
231
+ { 5, { "0", "12", "243", "-344", "abc" } },
232
+ };
233
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
234
+ StrVec x, y, z;
235
+ Set(x, tbl[i].v, tbl[i].n);
236
+ SaveAndLoad(y, x);
237
+ verify(x, y);
238
+ }
239
+ }
240
+
241
+ CYBOZU_TEST_AUTO(StrVecVec)
242
+ {
243
+ const struct {
244
+ size_t n;
245
+ const char *v[5];
246
+ } tbl[] = {
247
+ { 0, { "" } },
248
+ { 1, { "1234567" } },
249
+ { 5, { "abc", "def", "asdf", "234", "521" } },
250
+ };
251
+ StrVecVec x, y;
252
+
253
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
254
+ StrVec v;
255
+ Set(v, tbl[i].v, tbl[i].n);
256
+ x.push_back(v);
257
+ }
258
+
259
+ SaveAndLoad(y, x);
260
+ const size_t xn = x.size();
261
+ CYBOZU_TEST_EQUAL(xn, y.size());
262
+ if (xn == y.size()) {
263
+ for (size_t i = 0; i < xn; i++) {
264
+ verify(x[i], y[i]);
265
+ }
266
+ }
267
+ }
268
+
269
+ CYBOZU_TEST_AUTO(str2double)
270
+ {
271
+ std::map<std::string, double> x, y;
272
+ x["asdfasd"] = 1.2;
273
+ x["this"] = 3.141592;
274
+ x["is"] = 1.2;
275
+ x["a"] = -120;
276
+ x["pen"] = 0;
277
+ SaveAndLoad(y, x);
278
+ verifyPair(x, y);
279
+ }
280
+
281
+ template<class S, class T>
282
+ void CopyMap(S& s, const T& t)
283
+ {
284
+ for (typename T::const_iterator i = t.begin(), ie = t.end(); i != ie; ++i) {
285
+ s[i->first] = i->second;
286
+ }
287
+ }
288
+
289
+ CYBOZU_TEST_AUTO(strHashDouble)
290
+ {
291
+ CYBOZU_NAMESPACE_STD::unordered_map<std::string, int> x, y;
292
+ x["asdfasd"] = 12;
293
+ x["this"] = 3141592;
294
+ x["is"] = 999;
295
+ x["a"] = -120;
296
+ x["pen"] = 0;
297
+
298
+ SaveAndLoad(y, x);
299
+ // unordered_map does not keep order
300
+ std::map<std::string, int> xx, yy;
301
+ CopyMap(xx, x);
302
+ CopyMap(yy, y);
303
+ verifyPair(xx, yy);
304
+ }
305
+
306
+ CYBOZU_TEST_AUTO(list)
307
+ {
308
+ std::list<std::string> x, y;
309
+ x.push_back("asdfasd");
310
+ x.push_back("absdf");
311
+ x.push_back("hit");
312
+ x.push_back("hello");
313
+
314
+ SaveAndLoad(y, x);
315
+ verify(x, y);
316
+ }
317
+
318
+ CYBOZU_TEST_AUTO(set)
319
+ {
320
+ std::set<std::string> x, y;
321
+ x.insert("asdfasd");
322
+ x.insert("absdf");
323
+ x.insert("hit");
324
+ x.insert("hello");
325
+
326
+ SaveAndLoad(y, x);
327
+ verify(x, y);
328
+ }
329
+
330
+ CYBOZU_TEST_AUTO(mapMap)
331
+ {
332
+ typedef std::map<std::string, double> Str2Double;
333
+ typedef std::map<std::string, Str2Double> Map;
334
+ Map x, y;
335
+
336
+ Str2Double a, b, c;
337
+ a["sdf"] = 10.2;
338
+ a["this"] = -123.42;
339
+ b["std"] = 0;
340
+ b["map"] = 9998.1234;
341
+ b["this this"] = 122.22;
342
+ c["do\r\t\n"] = 9.33099;
343
+ c[",,,"] = 333;
344
+
345
+ x["123"] = a;
346
+ x["##$$"] = b;
347
+ x["4232\""] = c;
348
+
349
+ SaveAndLoad(y, x);
350
+ const size_t n = x.size();
351
+ CYBOZU_TEST_EQUAL(n, y.size());
352
+ for (Map::const_iterator i = x.begin(), ie = x.end(), j = y.begin(); i != ie; ++i, ++j) {
353
+ CYBOZU_TEST_EQUAL(i->first, j->first);
354
+ verifyPair(i->second, j->second);
355
+ }
356
+ }
357
+
358
+ CYBOZU_TEST_AUTO(hashHash)
359
+ {
360
+ typedef CYBOZU_NAMESPACE_STD::unordered_map<std::string, double> Str2Double;
361
+ typedef CYBOZU_NAMESPACE_STD::unordered_map<std::string, Str2Double> Map;
362
+ Map x, y;
363
+
364
+ Str2Double a, b, c;
365
+ a["sdf"] = 10.2;
366
+ a["this"] = -123.42;
367
+ b["std"] = 0;
368
+ b["map"] = 9998.1234;
369
+ b["this this"] = 122.22;
370
+ c["do\r\t\n"] = 9.33099;
371
+ c[",,,"] = 333;
372
+
373
+ x["123"] = a;
374
+ x["##$$"] = b;
375
+ x["4232\""] = c;
376
+
377
+ SaveAndLoad(y, x);
378
+ typedef std::map<std::string, Str2Double> Map2;
379
+ Map2 xx, yy;
380
+ CopyMap(xx, x);
381
+ CopyMap(yy, y);
382
+ CYBOZU_TEST_EQUAL(x.size(), y.size());
383
+ if (x.size() == y.size()) {
384
+ for (Map2::const_iterator i = xx.begin(), ie = xx.end(), j = yy.begin(); i != ie; ++i, ++j) {
385
+ CYBOZU_TEST_EQUAL(i->first, j->first);
386
+ std::map<std::string, double> xxx, yyy;
387
+ CopyMap(xxx, i->second);
388
+ CopyMap(yyy, j->second);
389
+ verifyPair(xxx, yyy);
390
+ }
391
+ }
392
+ // compressTest(x, y, true);
393
+ // compressTest(x, y, false);
394
+ }
395
+
396
+ template<class Stream>
397
+ void CustomStreamTest()
398
+ {
399
+ typedef std::map<std::string, int> Str2Int;
400
+ Str2Int a, b;
401
+ a["sdf"] = 10;
402
+ a["this"] = -123;
403
+ a["dore"] = 2;
404
+ Stream s;
405
+ cybozu::save(s, a);
406
+ cybozu::load(b, s);
407
+ CYBOZU_TEST_EQUAL(a.size(), b.size());
408
+ Str2Int::const_iterator ia = a.begin(), ib = b.begin();
409
+ while (ia != a.end()) {
410
+ CYBOZU_TEST_ASSERT(ib != b.end());
411
+ CYBOZU_TEST_EQUAL(ia->first, ib->first);
412
+ CYBOZU_TEST_EQUAL(ia->second, ib->second);
413
+ ++ia, ++ib;
414
+ }
415
+ CYBOZU_TEST_ASSERT(ib == b.end());
416
+ }
417
+
418
+ struct Stream1 {
419
+ std::string buf;
420
+ size_t readSome(void *p, size_t n)
421
+ {
422
+ if (n > buf.size()) n = buf.size();
423
+ memcpy(p, buf.data(), n);
424
+ buf = buf.substr(n);
425
+ return n;
426
+ }
427
+ void write(const void *p, size_t n)
428
+ {
429
+ buf.append((const char *)p, n);
430
+ }
431
+ };
432
+
433
+ struct Stream2 {
434
+ std::string buf;
435
+ };
436
+
437
+ namespace cybozu {
438
+
439
+ template<>
440
+ size_t readSome<Stream2>(void *p, size_t n, Stream2& s)
441
+ {
442
+ std::string& buf = s.buf;
443
+ if (n > buf.size()) n = buf.size();
444
+ memcpy(p, buf.data(), n);
445
+ buf = buf.substr(n);
446
+ return n;
447
+ }
448
+ template<>
449
+ void write<Stream2>(Stream2& s, const void *p, size_t n)
450
+ {
451
+ s.buf.append((const char*)p, n);
452
+ }
453
+
454
+ } // cybozu
455
+
456
+ CYBOZU_TEST_AUTO(customStream)
457
+ {
458
+ CustomStreamTest<Stream1>();
459
+ CustomStreamTest<Stream2>();
460
+ }
461
+
462
+ #if 0
463
+ #include <cybozu/stream_ext.hpp>
464
+ template<class X, class Y>
465
+ void compressTest(X& x, Y& y, bool useCompression)
466
+ {
467
+ std::string out;
468
+ {
469
+ cybozu::RefStringOutputStream os(out);
470
+ cybozu::CompressOutputStream<cybozu::RefStringOutputStream> enc(os, useCompression);
471
+
472
+ cybozu::serialize(enc, x);
473
+ // enc.flush(); call in destructor of enc
474
+ }
475
+
476
+ cybozu::MemoryInputStream is(out);
477
+ cybozu::DecompressInputStream<cybozu::MemoryInputStream> dec(is, useCompression);
478
+ cybozu::deserialize(dec, y);
479
+
480
+ CYBOZU_TEST_ASSERT(x == y);
481
+ }
482
+
483
+ #endif
@@ -0,0 +1,61 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include <time.h>
4
+ #include <cybozu/sha1.hpp>
5
+ #include <cybozu/test.hpp>
6
+
7
+ struct Tbl {
8
+ const char *ret;
9
+ const char *msg;
10
+ } tbl[] = {
11
+ { "a9993e364706816aba3e25717850c26c9cd0d89d", "abc" },
12
+ { "84983e441c3bd26ebaae4aa1f95129e5e54670f1", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
13
+ { "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", "a" },
14
+ { "afc53a4ea20856f98e08dc6f3a5c9833137768ed", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqabcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" },
15
+ { "bab574e1a8088c10993968e2dd1994e3f24853ac", "sha1_test.cppMicrosoft(R)IncrementalLinkerVersion9.00.30729.01Copyright(C)MicrosoftCorporation.Allrightsreserved./debug/out:sha1_test.exe/LIBPATH:c:/p/boost/libsha1_test.obj" },
16
+ { "da39a3ee5e6b4b0d3255bfef95601890afd80709", "" },
17
+ };
18
+
19
+ CYBOZU_TEST_AUTO(sha1)
20
+ {
21
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
22
+ cybozu::Sha1 sha1;
23
+ const char *msg = tbl[i].msg;
24
+ sha1.digest(msg, strlen(msg));
25
+ const std::string h = sha1.toString();
26
+ CYBOZU_TEST_EQUAL(h, tbl[i].ret);
27
+ }
28
+ }
29
+
30
+ CYBOZU_TEST_AUTO(update)
31
+ {
32
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
33
+ cybozu::Sha1 sha1;
34
+ const char *msg = tbl[i].msg;
35
+ size_t len = strlen(msg);
36
+ if (len == 0) continue;
37
+ sha1.update(msg, 1);
38
+ sha1.digest(msg + 1, len - 1);
39
+ const std::string h = sha1.toString();
40
+ CYBOZU_TEST_EQUAL(h, tbl[i].ret);
41
+ }
42
+ }
43
+
44
+ CYBOZU_TEST_AUTO(update2)
45
+ {
46
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
47
+ for (int step = 1; step < 80; step++) {
48
+ const char *const msg = tbl[i].msg;
49
+ const int len = (int)strlen(msg);
50
+ int j = 0;
51
+ cybozu::Sha1 sha1;
52
+ while (j + step <= len) {
53
+ sha1.update(msg + j, step);
54
+ j += step;
55
+ }
56
+ sha1.digest(msg + j, len - j);
57
+ const std::string h = sha1.toString();
58
+ CYBOZU_TEST_EQUAL(h, tbl[i].ret);
59
+ }
60
+ }
61
+ }