ffi-hydrogen 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +30 -0
  5. data/.travis.yml +10 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +72 -0
  9. data/Rakefile +46 -0
  10. data/bench/both.rb +86 -0
  11. data/bench/encode.rb +57 -0
  12. data/bench/encrypt.rb +80 -0
  13. data/bench/init.rb +5 -0
  14. data/bin/console +14 -0
  15. data/bin/setup +8 -0
  16. data/ffi-hydrogen.gemspec +31 -0
  17. data/lib/ffi/hydrogen.rb +216 -0
  18. data/vendor/.clang-format +2 -0
  19. data/vendor/.gitignore +3 -0
  20. data/vendor/README.md +2 -0
  21. data/vendor/libhydrogen/.clang-format +95 -0
  22. data/vendor/libhydrogen/.gitignore +32 -0
  23. data/vendor/libhydrogen/.travis.yml +22 -0
  24. data/vendor/libhydrogen/LICENSE +18 -0
  25. data/vendor/libhydrogen/Makefile +61 -0
  26. data/vendor/libhydrogen/Makefile.arduino +51 -0
  27. data/vendor/libhydrogen/README.md +29 -0
  28. data/vendor/libhydrogen/hydrogen.c +18 -0
  29. data/vendor/libhydrogen/hydrogen.h +317 -0
  30. data/vendor/libhydrogen/impl/common.h +316 -0
  31. data/vendor/libhydrogen/impl/core.h +220 -0
  32. data/vendor/libhydrogen/impl/gimli-core/portable.h +39 -0
  33. data/vendor/libhydrogen/impl/gimli-core/sse2.h +97 -0
  34. data/vendor/libhydrogen/impl/gimli-core.h +25 -0
  35. data/vendor/libhydrogen/impl/hash.h +138 -0
  36. data/vendor/libhydrogen/impl/hydrogen_p.h +83 -0
  37. data/vendor/libhydrogen/impl/kdf.h +20 -0
  38. data/vendor/libhydrogen/impl/kx.h +441 -0
  39. data/vendor/libhydrogen/impl/pwhash.h +281 -0
  40. data/vendor/libhydrogen/impl/random.h +376 -0
  41. data/vendor/libhydrogen/impl/secretbox.h +236 -0
  42. data/vendor/libhydrogen/impl/sign.h +207 -0
  43. data/vendor/libhydrogen/impl/x25519.h +383 -0
  44. data/vendor/libhydrogen/library.properties +10 -0
  45. data/vendor/libhydrogen/logo.png +0 -0
  46. data/vendor/libhydrogen/tests/tests.c +431 -0
  47. data/vendor/main.c +140 -0
  48. data/vendor/stringencoders/.gitignore +25 -0
  49. data/vendor/stringencoders/.travis.yml +13 -0
  50. data/vendor/stringencoders/AUTHORS +1 -0
  51. data/vendor/stringencoders/COPYING +2 -0
  52. data/vendor/stringencoders/ChangeLog +170 -0
  53. data/vendor/stringencoders/Doxyfile +276 -0
  54. data/vendor/stringencoders/INSTALL +119 -0
  55. data/vendor/stringencoders/LICENSE +22 -0
  56. data/vendor/stringencoders/Makefile.am +3 -0
  57. data/vendor/stringencoders/NEWS +3 -0
  58. data/vendor/stringencoders/README +2 -0
  59. data/vendor/stringencoders/README.md +32 -0
  60. data/vendor/stringencoders/bootstrap.sh +3 -0
  61. data/vendor/stringencoders/configure-gcc-hardened.sh +16 -0
  62. data/vendor/stringencoders/configure.ac +44 -0
  63. data/vendor/stringencoders/doxy/footer.html +34 -0
  64. data/vendor/stringencoders/doxy/header.html +85 -0
  65. data/vendor/stringencoders/indent.sh +9 -0
  66. data/vendor/stringencoders/javascript/base64-speed.html +43 -0
  67. data/vendor/stringencoders/javascript/base64-test.html +209 -0
  68. data/vendor/stringencoders/javascript/base64.html +18 -0
  69. data/vendor/stringencoders/javascript/base64.js +176 -0
  70. data/vendor/stringencoders/javascript/qunit.css +119 -0
  71. data/vendor/stringencoders/javascript/qunit.js +1062 -0
  72. data/vendor/stringencoders/javascript/urlparse-test.html +367 -0
  73. data/vendor/stringencoders/javascript/urlparse.js +328 -0
  74. data/vendor/stringencoders/make-ci.sh +13 -0
  75. data/vendor/stringencoders/makerelease.sh +16 -0
  76. data/vendor/stringencoders/python/b85.py +176 -0
  77. data/vendor/stringencoders/src/Makefile.am +134 -0
  78. data/vendor/stringencoders/src/arraytoc.c +85 -0
  79. data/vendor/stringencoders/src/arraytoc.h +43 -0
  80. data/vendor/stringencoders/src/extern_c_begin.h +3 -0
  81. data/vendor/stringencoders/src/extern_c_end.h +3 -0
  82. data/vendor/stringencoders/src/html_named_entities_generator.py +203 -0
  83. data/vendor/stringencoders/src/modp_ascii.c +159 -0
  84. data/vendor/stringencoders/src/modp_ascii.h +162 -0
  85. data/vendor/stringencoders/src/modp_ascii_data.h +84 -0
  86. data/vendor/stringencoders/src/modp_ascii_gen.c +55 -0
  87. data/vendor/stringencoders/src/modp_b16.c +125 -0
  88. data/vendor/stringencoders/src/modp_b16.h +148 -0
  89. data/vendor/stringencoders/src/modp_b16_data.h +104 -0
  90. data/vendor/stringencoders/src/modp_b16_gen.c +65 -0
  91. data/vendor/stringencoders/src/modp_b2.c +69 -0
  92. data/vendor/stringencoders/src/modp_b2.h +130 -0
  93. data/vendor/stringencoders/src/modp_b2_data.h +44 -0
  94. data/vendor/stringencoders/src/modp_b2_gen.c +36 -0
  95. data/vendor/stringencoders/src/modp_b36.c +108 -0
  96. data/vendor/stringencoders/src/modp_b36.h +170 -0
  97. data/vendor/stringencoders/src/modp_b64.c +254 -0
  98. data/vendor/stringencoders/src/modp_b64.h +236 -0
  99. data/vendor/stringencoders/src/modp_b64_data.h +477 -0
  100. data/vendor/stringencoders/src/modp_b64_gen.c +168 -0
  101. data/vendor/stringencoders/src/modp_b64r.c +254 -0
  102. data/vendor/stringencoders/src/modp_b64r.h +242 -0
  103. data/vendor/stringencoders/src/modp_b64r_data.h +477 -0
  104. data/vendor/stringencoders/src/modp_b64w.c +254 -0
  105. data/vendor/stringencoders/src/modp_b64w.h +231 -0
  106. data/vendor/stringencoders/src/modp_b64w_data.h +477 -0
  107. data/vendor/stringencoders/src/modp_b85.c +109 -0
  108. data/vendor/stringencoders/src/modp_b85.h +171 -0
  109. data/vendor/stringencoders/src/modp_b85_data.h +36 -0
  110. data/vendor/stringencoders/src/modp_b85_gen.c +65 -0
  111. data/vendor/stringencoders/src/modp_bjavascript.c +65 -0
  112. data/vendor/stringencoders/src/modp_bjavascript.h +105 -0
  113. data/vendor/stringencoders/src/modp_bjavascript_data.h +84 -0
  114. data/vendor/stringencoders/src/modp_bjavascript_gen.c +58 -0
  115. data/vendor/stringencoders/src/modp_burl.c +228 -0
  116. data/vendor/stringencoders/src/modp_burl.h +259 -0
  117. data/vendor/stringencoders/src/modp_burl_data.h +136 -0
  118. data/vendor/stringencoders/src/modp_burl_gen.c +121 -0
  119. data/vendor/stringencoders/src/modp_html.c +128 -0
  120. data/vendor/stringencoders/src/modp_html.h +53 -0
  121. data/vendor/stringencoders/src/modp_html_named_entities.h +9910 -0
  122. data/vendor/stringencoders/src/modp_json.c +315 -0
  123. data/vendor/stringencoders/src/modp_json.h +103 -0
  124. data/vendor/stringencoders/src/modp_json_data.h +57 -0
  125. data/vendor/stringencoders/src/modp_json_gen.py +60 -0
  126. data/vendor/stringencoders/src/modp_mainpage.h +120 -0
  127. data/vendor/stringencoders/src/modp_numtoa.c +350 -0
  128. data/vendor/stringencoders/src/modp_numtoa.h +100 -0
  129. data/vendor/stringencoders/src/modp_qsiter.c +76 -0
  130. data/vendor/stringencoders/src/modp_qsiter.h +71 -0
  131. data/vendor/stringencoders/src/modp_stdint.h +43 -0
  132. data/vendor/stringencoders/src/modp_utf8.c +88 -0
  133. data/vendor/stringencoders/src/modp_utf8.h +38 -0
  134. data/vendor/stringencoders/src/modp_xml.c +311 -0
  135. data/vendor/stringencoders/src/modp_xml.h +166 -0
  136. data/vendor/stringencoders/src/stringencoders.pc +10 -0
  137. data/vendor/stringencoders/src/stringencoders.pc.in +10 -0
  138. data/vendor/stringencoders/test/Makefile.am +113 -0
  139. data/vendor/stringencoders/test/apr_base64.c +262 -0
  140. data/vendor/stringencoders/test/apr_base64.h +120 -0
  141. data/vendor/stringencoders/test/cxx_test.cc +482 -0
  142. data/vendor/stringencoders/test/minunit.h +82 -0
  143. data/vendor/stringencoders/test/modp_ascii_test.c +281 -0
  144. data/vendor/stringencoders/test/modp_b16_test.c +288 -0
  145. data/vendor/stringencoders/test/modp_b2_test.c +250 -0
  146. data/vendor/stringencoders/test/modp_b64_test.c +266 -0
  147. data/vendor/stringencoders/test/modp_b85_test.c +130 -0
  148. data/vendor/stringencoders/test/modp_bjavascript_test.c +137 -0
  149. data/vendor/stringencoders/test/modp_burl_test.c +423 -0
  150. data/vendor/stringencoders/test/modp_html_test.c +296 -0
  151. data/vendor/stringencoders/test/modp_json_test.c +336 -0
  152. data/vendor/stringencoders/test/modp_numtoa_test.c +545 -0
  153. data/vendor/stringencoders/test/modp_qsiter_test.c +280 -0
  154. data/vendor/stringencoders/test/modp_utf8_test.c +188 -0
  155. data/vendor/stringencoders/test/modp_xml_test.c +339 -0
  156. data/vendor/stringencoders/test/speedtest.c +241 -0
  157. data/vendor/stringencoders/test/speedtest_ascii.c +345 -0
  158. data/vendor/stringencoders/test/speedtest_msg.c +78 -0
  159. data/vendor/stringencoders/test/speedtest_numtoa.c +276 -0
  160. metadata +314 -0
@@ -0,0 +1,113 @@
1
+
2
+ STRINGENCODERS_INCLUDE = -I$(top_srcdir)/src
3
+ STRINGENCODERS_LTLIB = $(top_srcdir)/src/libmodpbase64.la
4
+
5
+ check_PROGRAMS = \
6
+ modp_ascii_test \
7
+ modp_b2_test \
8
+ modp_b16_test \
9
+ modp_b64_test \
10
+ modp_b64r_test \
11
+ modp_b64w_test \
12
+ modp_b85_test \
13
+ modp_burl_test \
14
+ modp_bjavascript_test \
15
+ modp_numtoa_test \
16
+ modp_utf8_test \
17
+ modp_xml_test \
18
+ modp_html_test \
19
+ modp_json_test \
20
+ modp_qsiter_test \
21
+ cxx_test
22
+
23
+ TESTS = $(check_PROGRAMS)
24
+
25
+ noinst_PROGRAMS = \
26
+ speedtest \
27
+ speedtest_numtoa \
28
+ speedtest_msg
29
+
30
+ speedtest_SOURCES = apr_base64.h apr_base64.c speedtest.c
31
+ speedtest_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
32
+ speedtest_LDADD = $(STRINGENCODERS_LTLIB)
33
+
34
+ speedtest_numtoa_SOURCES = speedtest_numtoa.c
35
+ speedtest_numtoa_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
36
+ speedtest_numtoa_LDADD = $(STRINGENCODERS_LTLIB)
37
+
38
+ speedtest_msg_SOURCES = speedtest_msg.c
39
+ speedtest_msg_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
40
+ speedtest_msg_LDADD = $(STRINGENCODERS_LTLIB)
41
+
42
+ modp_b2_test_SOURCES = modp_b2_test.c
43
+ modp_b2_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
44
+ modp_b2_test_LDADD = $(STRINGENCODERS_LTLIB)
45
+
46
+ modp_b16_test_SOURCES = modp_b16_test.c
47
+ modp_b16_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
48
+ modp_b16_test_LDADD = $(STRINGENCODERS_LTLIB)
49
+
50
+ modp_b64_test_SOURCES = modp_b64_test.c
51
+ modp_b64_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
52
+ modp_b64_test_LDADD = $(STRINGENCODERS_LTLIB)
53
+
54
+ modp_b64w_test.c: modp_b64_test.c
55
+ perl -p -i -e 's/b64/b64w/g' < modp_b64_test.c > modp_b64w_test.c
56
+
57
+ modp_b64w_test_SOURCES = modp_b64w_test.c
58
+ modp_b64w_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
59
+ modp_b64w_test_LDADD = $(STRINGENCODERS_LTLIB)
60
+
61
+ modp_b64r_test.c: modp_b64_test.c
62
+ perl -p -i -e 's/b64/b64r/g' < modp_b64_test.c > modp_b64r_test.c
63
+
64
+ modp_b64r_test_SOURCES = modp_b64r_test.c
65
+ modp_b64r_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
66
+ modp_b64r_test_LDADD = $(STRINGENCODERS_LTLIB)
67
+
68
+ modp_b85_test_SOURCES = modp_b85_test.c
69
+ modp_b85_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
70
+ modp_b85_test_LDADD = $(STRINGENCODERS_LTLIB)
71
+
72
+ modp_burl_test_SOURCES = modp_burl_test.c
73
+ modp_burl_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
74
+ modp_burl_test_LDADD = $(STRINGENCODERS_LTLIB)
75
+
76
+ modp_bjavascript_test_SOURCES = modp_bjavascript_test.c
77
+ modp_bjavascript_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
78
+ modp_bjavascript_test_LDADD = $(STRINGENCODERS_LTLIB)
79
+
80
+ modp_ascii_test_SOURCES = modp_ascii_test.c
81
+ modp_ascii_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
82
+ modp_ascii_test_LDADD = $(STRINGENCODERS_LTLIB)
83
+
84
+ modp_xml_test_SOURCES = modp_xml_test.c
85
+ modp_xml_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
86
+ modp_xml_test_LDADD = $(STRINGENCODERS_LTLIB)
87
+
88
+ modp_numtoa_test_SOURCES = modp_numtoa_test.c
89
+ modp_numtoa_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
90
+ modp_numtoa_test_LDADD = $(STRINGENCODERS_LTLIB)
91
+
92
+ modp_html_test_SOURCES = modp_html_test.c
93
+ modp_html_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
94
+ modp_html_test_LDADD = $(STRINGENCODERS_LTLIB)
95
+
96
+ modp_qsiter_test_SOURCES = modp_qsiter_test.c
97
+ modp_qsiter_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
98
+ modp_qsiter_test_LDADD = $(STRINGENCODERS_LTLIB)
99
+
100
+ modp_utf8_test_SOURCES = modp_utf8_test.c
101
+ modp_utf8_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
102
+ modp_utf8_test_LDADD = $(STRINGENCODERS_LTLIB)
103
+
104
+ modp_json_test_SOURCES = modp_json_test.c
105
+ modp_json_test_CPPFLAGS = $(STRINGENCODERS_INCLUDE)
106
+ modp_json_test_LDADD = $(STRINGENCODERS_LTLIB)
107
+
108
+ cxx_test_SOURCES = cxx_test.cc
109
+ cxx_test_CPPFLAGS =$(STRINGENCODERS_INCLUDE)
110
+ cxx_test_LDADD = $(STRINGENCODERS_LTLIB)
111
+
112
+ clean-local:
113
+ rm -f *~
@@ -0,0 +1,262 @@
1
+ /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
2
+ * applicable.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /* base64 encoder/decoder. Originally part of main/util.c
18
+ * but moved here so that support/ab and apr_sha1.c could
19
+ * use it. This meant removing the apr_palloc()s and adding
20
+ * ugly 'len' functions, which is quite a nasty cost.
21
+ */
22
+
23
+ #include "apr_base64.h"
24
+ #define APR_CHARSET_EBCDIC 0
25
+ #if APR_CHARSET_EBCDIC
26
+ #include "apr_xlate.h"
27
+ #endif /* APR_CHARSET_EBCDIC */
28
+
29
+ /* aaaack but it's fast and const should make it shared text page. */
30
+ static const unsigned char pr2six[256] = {
31
+ #if !APR_CHARSET_EBCDIC
32
+ /* ASCII table */
33
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
34
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
35
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
36
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64,
37
+ 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
38
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
39
+ 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
40
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64,
41
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
42
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
43
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
44
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
45
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
46
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
47
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
48
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
49
+ #else /*APR_CHARSET_EBCDIC*/
50
+ /* EBCDIC table */
51
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
52
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
53
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
54
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
55
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64,
56
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
57
+ 64, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
58
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
59
+ 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 64, 64, 64, 64, 64, 64,
60
+ 64, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 64, 64, 64, 64, 64,
61
+ 64, 64, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64, 64,
62
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
63
+ 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 64, 64, 64, 64, 64, 64,
64
+ 64, 9, 10, 11, 12, 13, 14, 15, 16, 17, 64, 64, 64, 64, 64, 64,
65
+ 64, 64, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, 64,
66
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64
67
+ #endif /*APR_CHARSET_EBCDIC*/
68
+ };
69
+
70
+ #if APR_CHARSET_EBCDIC
71
+ static apr_xlate_t* xlate_to_ebcdic;
72
+ static unsigned char os_toascii[256];
73
+
74
+ APU_DECLARE(apr_status_t)
75
+ apr_base64init_ebcdic(apr_xlate_t* to_ascii,
76
+ apr_xlate_t* to_ebcdic)
77
+ {
78
+ int i;
79
+ apr_size_t inbytes_left, outbytes_left;
80
+ apr_status_t rv;
81
+ int onoff;
82
+
83
+ /* Only single-byte conversion is supported.
84
+ */
85
+ rv = apr_xlate_get_sb(to_ascii, &onoff);
86
+ if (rv) {
87
+ return rv;
88
+ }
89
+ if (!onoff) { /* If conversion is not single-byte-only */
90
+ return APR_EINVAL;
91
+ }
92
+ rv = apr_xlate_get_sb(to_ebcdic, &onoff);
93
+ if (rv) {
94
+ return rv;
95
+ }
96
+ if (!onoff) { /* If conversion is not single-byte-only */
97
+ return APR_EINVAL;
98
+ }
99
+ xlate_to_ebcdic = to_ebcdic;
100
+ for (i = 0; i < sizeof(os_toascii); i++) {
101
+ os_toascii[i] = i;
102
+ }
103
+ inbytes_left = outbytes_left = sizeof(os_toascii);
104
+ apr_xlate_conv_buffer(to_ascii, os_toascii, &inbytes_left,
105
+ os_toascii, &outbytes_left);
106
+
107
+ return APR_SUCCESS;
108
+ }
109
+ #endif /*APR_CHARSET_EBCDIC*/
110
+
111
+ APU_DECLARE(int)
112
+ apr_base64_decode_len(const char* bufcoded)
113
+ {
114
+ int nbytesdecoded;
115
+ register const unsigned char* bufin;
116
+ register int nprbytes;
117
+
118
+ bufin = (const unsigned char*)bufcoded;
119
+ while (pr2six[*(bufin++)] <= 63)
120
+ ;
121
+
122
+ nprbytes = (int)((bufin - (const unsigned char*)bufcoded) - 1);
123
+ nbytesdecoded = ((nprbytes + 3) / 4) * 3;
124
+
125
+ return nbytesdecoded + 1;
126
+ }
127
+
128
+ APU_DECLARE(int)
129
+ apr_base64_decode(char* bufplain, const char* bufcoded)
130
+ {
131
+ #if APR_CHARSET_EBCDIC
132
+ apr_size_t inbytes_left, outbytes_left;
133
+ #endif /* APR_CHARSET_EBCDIC */
134
+ int len;
135
+
136
+ len = apr_base64_decode_binary((unsigned char*)bufplain, bufcoded);
137
+ #if APR_CHARSET_EBCDIC
138
+ inbytes_left = outbytes_left = len;
139
+ apr_xlate_conv_buffer(xlate_to_ebcdic, bufplain, &inbytes_left,
140
+ bufplain, &outbytes_left);
141
+ #endif /* APR_CHARSET_EBCDIC */
142
+ bufplain[len] = '\0';
143
+ return len;
144
+ }
145
+
146
+ /* This is the same as apr_base64_decode() except on EBCDIC machines, where
147
+ * the conversion of the output to ebcdic is left out.
148
+ */
149
+ APU_DECLARE(int)
150
+ apr_base64_decode_binary(unsigned char* bufplain,
151
+ const char* bufcoded)
152
+ {
153
+ int nbytesdecoded;
154
+ register const unsigned char* bufin;
155
+ register unsigned char* bufout;
156
+ register int nprbytes;
157
+
158
+ bufin = (const unsigned char*)bufcoded;
159
+ while (pr2six[*(bufin++)] <= 63)
160
+ ;
161
+ nprbytes = (int)((bufin - (const unsigned char*)bufcoded) - 1);
162
+ nbytesdecoded = ((nprbytes + 3) / 4) * 3;
163
+
164
+ bufout = (unsigned char*)bufplain;
165
+ bufin = (const unsigned char*)bufcoded;
166
+
167
+ while (nprbytes > 4) {
168
+ *(bufout++) = (unsigned char)(pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4);
169
+ *(bufout++) = (unsigned char)(pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2);
170
+ *(bufout++) = (unsigned char)(pr2six[bufin[2]] << 6 | pr2six[bufin[3]]);
171
+ bufin += 4;
172
+ nprbytes -= 4;
173
+ }
174
+
175
+ /* Note: (nprbytes == 1) would be an error, so just ingore that case */
176
+ if (nprbytes > 1) {
177
+ *(bufout++) = (unsigned char)(pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4);
178
+ }
179
+ if (nprbytes > 2) {
180
+ *(bufout++) = (unsigned char)(pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2);
181
+ }
182
+ if (nprbytes > 3) {
183
+ *(bufout++) = (unsigned char)(pr2six[bufin[2]] << 6 | pr2six[bufin[3]]);
184
+ }
185
+
186
+ nbytesdecoded -= (4 - nprbytes) & 3;
187
+ return nbytesdecoded;
188
+ }
189
+
190
+ static const char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
191
+
192
+ APU_DECLARE(int)
193
+ apr_base64_encode_len(int len)
194
+ {
195
+ return ((len + 2) / 3 * 4) + 1;
196
+ }
197
+
198
+ APU_DECLARE(int)
199
+ apr_base64_encode(char* encoded, const char* string, int len)
200
+ {
201
+ #if !APR_CHARSET_EBCDIC
202
+ return apr_base64_encode_binary(encoded, (const unsigned char*)string, len);
203
+ #else /* APR_CHARSET_EBCDIC */
204
+ int i;
205
+ char* p;
206
+
207
+ p = encoded;
208
+ for (i = 0; i < len - 2; i += 3) {
209
+ *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F];
210
+ *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | ((int)(os_toascii[string[i + 1]] & 0xF0) >> 4)];
211
+ *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2) | ((int)(os_toascii[string[i + 2]] & 0xC0) >> 6)];
212
+ *p++ = basis_64[os_toascii[string[i + 2]] & 0x3F];
213
+ }
214
+ if (i < len) {
215
+ *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F];
216
+ if (i == (len - 1)) {
217
+ *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4)];
218
+ *p++ = '=';
219
+ } else {
220
+ *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | ((int)(os_toascii[string[i + 1]] & 0xF0) >> 4)];
221
+ *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2)];
222
+ }
223
+ *p++ = '=';
224
+ }
225
+
226
+ *p++ = '\0';
227
+ return p - encoded;
228
+ #endif /* APR_CHARSET_EBCDIC */
229
+ }
230
+
231
+ /* This is the same as apr_base64_encode() except on EBCDIC machines, where
232
+ * the conversion of the input to ascii is left out.
233
+ */
234
+ APU_DECLARE(int)
235
+ apr_base64_encode_binary(char* encoded,
236
+ const unsigned char* string, int len)
237
+ {
238
+ int i;
239
+ char* p;
240
+
241
+ p = encoded;
242
+ for (i = 0; i < len - 2; i += 3) {
243
+ *p++ = basis_64[(string[i] >> 2) & 0x3F];
244
+ *p++ = basis_64[((string[i] & 0x3) << 4) | ((int)(string[i + 1] & 0xF0) >> 4)];
245
+ *p++ = basis_64[((string[i + 1] & 0xF) << 2) | ((int)(string[i + 2] & 0xC0) >> 6)];
246
+ *p++ = basis_64[string[i + 2] & 0x3F];
247
+ }
248
+ if (i < len) {
249
+ *p++ = basis_64[(string[i] >> 2) & 0x3F];
250
+ if (i == (len - 1)) {
251
+ *p++ = basis_64[((string[i] & 0x3) << 4)];
252
+ *p++ = '=';
253
+ } else {
254
+ *p++ = basis_64[((string[i] & 0x3) << 4) | ((int)(string[i + 1] & 0xF0) >> 4)];
255
+ *p++ = basis_64[((string[i + 1] & 0xF) << 2)];
256
+ }
257
+ *p++ = '=';
258
+ }
259
+
260
+ *p++ = '\0';
261
+ return (int)(p - encoded);
262
+ }
@@ -0,0 +1,120 @@
1
+ /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
2
+ * applicable.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ * The apr_vsnprintf/apr_snprintf functions are based on, and used with the
16
+ * permission of, the SIO stdio-replacement strx_* functions by Panos
17
+ * Tsirigotis <panos@alumni.cs.colorado.edu> for xinetd.
18
+ */
19
+
20
+ /**
21
+ * @file apr_base64.h
22
+ * @brief APR-UTIL Base64 Encoding
23
+ */
24
+ #ifndef APR_BASE64_H
25
+ #define APR_BASE64_H
26
+
27
+ /*
28
+ //#include "apu.h"
29
+ //#include "apr_general.h"
30
+ */
31
+ #define APU_DECLARE(x) x
32
+
33
+ #ifdef __cplusplus
34
+ extern "C" {
35
+ #endif
36
+
37
+ /**
38
+ * @defgroup APR_Util_Base64 Base64 Encoding
39
+ * @ingroup APR_Util
40
+ * @{
41
+ */
42
+
43
+ /* Simple BASE64 encode/decode functions.
44
+ *
45
+ * As we might encode binary strings, hence we require the length of
46
+ * the incoming plain source. And return the length of what we decoded.
47
+ *
48
+ * The decoding function takes any non valid char (i.e. whitespace, \0
49
+ * or anything non A-Z,0-9 etc as terminal.
50
+ *
51
+ * plain strings/binary sequences are not assumed '\0' terminated. Encoded
52
+ * strings are neither. But probably should.
53
+ *
54
+ */
55
+
56
+ /**
57
+ * Given the length of an un-encrypted string, get the length of the
58
+ * encrypted string.
59
+ * @param len the length of an unencrypted string.
60
+ * @return the length of the string after it is encrypted
61
+ */
62
+ APU_DECLARE(int)
63
+ apr_base64_encode_len(int len);
64
+
65
+ /**
66
+ * Encode a text string using base64encoding.
67
+ * @param coded_dst The destination string for the encoded string.
68
+ * @param plain_src The original string in plain text
69
+ * @param len_plain_src The length of the plain text string
70
+ * @return the length of the encoded string
71
+ */
72
+ APU_DECLARE(int)
73
+ apr_base64_encode(char* coded_dst, const char* plain_src,
74
+ int len_plain_src);
75
+
76
+ /**
77
+ * Encode an EBCDIC string using base64encoding.
78
+ * @param coded_dst The destination string for the encoded string.
79
+ * @param plain_src The original string in plain text
80
+ * @param len_plain_src The length of the plain text string
81
+ * @return the length of the encoded string
82
+ */
83
+ APU_DECLARE(int)
84
+ apr_base64_encode_binary(char* coded_dst,
85
+ const unsigned char* plain_src,
86
+ int len_plain_src);
87
+
88
+ /**
89
+ * Determine the length of a plain text string given the encoded version
90
+ * @param coded_src The encoded string
91
+ * @return the length of the plain text string
92
+ */
93
+ APU_DECLARE(int)
94
+ apr_base64_decode_len(const char* coded_src);
95
+
96
+ /**
97
+ * Decode a string to plain text
98
+ * @param plain_dst The destination string for the plain text
99
+ * @param coded_src The encoded string
100
+ * @return the length of the plain text string
101
+ */
102
+ APU_DECLARE(int)
103
+ apr_base64_decode(char* plain_dst, const char* coded_src);
104
+
105
+ /**
106
+ * Decode an EBCDIC string to plain text
107
+ * @param plain_dst The destination string for the plain text
108
+ * @param coded_src The encoded string
109
+ * @return the length of the plain text string
110
+ */
111
+ APU_DECLARE(int)
112
+ apr_base64_decode_binary(unsigned char* plain_dst,
113
+ const char* coded_src);
114
+
115
+ /** @} */
116
+ #ifdef __cplusplus
117
+ }
118
+ #endif
119
+
120
+ #endif /* !APR_BASE64_H */