rho-tau-extensions 5.5.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (661) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +2 -0
  3. data/LICENSE +21 -0
  4. data/README.md +6 -0
  5. data/Rakefile +90 -0
  6. data/libs/crosswalk.rb +2 -0
  7. data/libs/crosswalk/crosswalk.rb +2 -0
  8. data/libs/crosswalk/ext.yml +21 -0
  9. data/libs/crosswalk/ext/Crosswalk.xml +27 -0
  10. data/libs/crosswalk/ext/build +19 -0
  11. data/libs/crosswalk/ext/build.bat +29 -0
  12. data/libs/crosswalk/ext/platform/android/AndroidManifest.xml +9 -0
  13. data/libs/crosswalk/ext/platform/android/Rakefile +141 -0
  14. data/libs/crosswalk/ext/platform/android/adds/lib/armeabi/libxwalkcore.so +0 -0
  15. data/libs/crosswalk/ext/platform/android/adds/lib/armeabi/libxwalkdummy.so +0 -0
  16. data/libs/crosswalk/ext/platform/android/adds/lib/x86/libxwalkcore.so +0 -0
  17. data/libs/crosswalk/ext/platform/android/adds/lib/x86/libxwalkdummy.so +0 -0
  18. data/libs/crosswalk/ext/platform/android/adds/lib/xwalk_core_library_java.jar +0 -0
  19. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/bubble.9.png +0 -0
  20. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/bubble_arrow_up.png +0 -0
  21. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/color_picker_advanced_select_handle.png +0 -0
  22. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/crosswalk.png +0 -0
  23. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/dropdown_popup_background_down.9.png +0 -0
  24. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/dropdown_popup_background_up.9.png +0 -0
  25. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ic_menu_share_holo_light.png +0 -0
  26. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ic_search.png +0 -0
  27. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ic_warning.png +0 -0
  28. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ondemand_overlay.9.png +0 -0
  29. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/verify_checkmark.png +0 -0
  30. data/libs/crosswalk/ext/platform/android/adds/res/drawable-ldpi/crosswalk.png +0 -0
  31. data/libs/crosswalk/ext/platform/android/adds/res/drawable-mdpi/crosswalk.png +0 -0
  32. data/libs/crosswalk/ext/platform/android/adds/res/drawable-v21/button_borderless_compat.xml +10 -0
  33. data/libs/crosswalk/ext/platform/android/adds/res/drawable-v21/button_compat.xml +9 -0
  34. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/bubble.9.png +0 -0
  35. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/bubble_arrow_up.png +0 -0
  36. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/color_picker_advanced_select_handle.png +0 -0
  37. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/crosswalk.png +0 -0
  38. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/dropdown_popup_background_down.9.png +0 -0
  39. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/dropdown_popup_background_up.9.png +0 -0
  40. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ic_menu_share_holo_light.png +0 -0
  41. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ic_search.png +0 -0
  42. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ic_warning.png +0 -0
  43. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ondemand_overlay.9.png +0 -0
  44. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/verify_checkmark.png +0 -0
  45. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/ic_menu_share_holo_light.png +0 -0
  46. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/ic_search.png +0 -0
  47. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/ic_warning.png +0 -0
  48. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/verify_checkmark.png +0 -0
  49. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/ic_menu_share_holo_light.png +0 -0
  50. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/ic_search.png +0 -0
  51. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/ic_warning.png +0 -0
  52. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/verify_checkmark.png +0 -0
  53. data/libs/crosswalk/ext/platform/android/adds/res/drawable/autofill_chip_inset.xml +15 -0
  54. data/libs/crosswalk/ext/platform/android/adds/res/drawable/bubble.9.png +0 -0
  55. data/libs/crosswalk/ext/platform/android/adds/res/drawable/bubble_arrow_up.png +0 -0
  56. data/libs/crosswalk/ext/platform/android/adds/res/drawable/button_compat_shape.xml +9 -0
  57. data/libs/crosswalk/ext/platform/android/adds/res/drawable/color_button_background.xml +36 -0
  58. data/libs/crosswalk/ext/platform/android/adds/res/drawable/color_picker_advanced_select_handle.png +0 -0
  59. data/libs/crosswalk/ext/platform/android/adds/res/drawable/color_picker_border.xml +12 -0
  60. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_label_color.xml +11 -0
  61. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_popup_background.xml +13 -0
  62. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_popup_background_down.9.png +0 -0
  63. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_popup_background_up.9.png +0 -0
  64. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ic_menu_share_holo_light.png +0 -0
  65. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ic_search.png +0 -0
  66. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ic_warning.png +0 -0
  67. data/libs/crosswalk/ext/platform/android/adds/res/drawable/launchscreen_bg.xml +19 -0
  68. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ondemand_overlay.9.png +0 -0
  69. data/libs/crosswalk/ext/platform/android/adds/res/drawable/verify_checkmark.png +0 -0
  70. data/libs/crosswalk/ext/platform/android/adds/res/layout-land/date_time_picker_dialog.xml +42 -0
  71. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/autofill_keyboard_accessory_item.xml +40 -0
  72. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/autofill_suggestion_item.xml +18 -0
  73. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/color_picker_advanced_component.xml +46 -0
  74. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/color_picker_dialog_content.xml +51 -0
  75. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/color_picker_dialog_title.xml +41 -0
  76. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/date_time_suggestion.xml +35 -0
  77. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/dropdown_item.xml +58 -0
  78. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/multi_field_time_picker_dialog.xml +122 -0
  79. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/two_field_date_picker.xml +38 -0
  80. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/validation_message_bubble.xml +72 -0
  81. data/libs/crosswalk/ext/platform/android/adds/res/layout/autofill_keyboard_accessory_icon.xml +13 -0
  82. data/libs/crosswalk/ext/platform/android/adds/res/layout/autofill_keyboard_accessory_item.xml +17 -0
  83. data/libs/crosswalk/ext/platform/android/adds/res/layout/autofill_suggestion_item.xml +7 -0
  84. data/libs/crosswalk/ext/platform/android/adds/res/layout/color_picker_advanced_component.xml +30 -0
  85. data/libs/crosswalk/ext/platform/android/adds/res/layout/color_picker_dialog_content.xml +36 -0
  86. data/libs/crosswalk/ext/platform/android/adds/res/layout/color_picker_dialog_title.xml +25 -0
  87. data/libs/crosswalk/ext/platform/android/adds/res/layout/date_time_picker_dialog.xml +42 -0
  88. data/libs/crosswalk/ext/platform/android/adds/res/layout/date_time_suggestion.xml +16 -0
  89. data/libs/crosswalk/ext/platform/android/adds/res/layout/dropdown_item.xml +34 -0
  90. data/libs/crosswalk/ext/platform/android/adds/res/layout/multi_field_time_picker_dialog.xml +50 -0
  91. data/libs/crosswalk/ext/platform/android/adds/res/layout/two_field_date_picker.xml +26 -0
  92. data/libs/crosswalk/ext/platform/android/adds/res/layout/validation_message_bubble.xml +47 -0
  93. data/libs/crosswalk/ext/platform/android/adds/res/menu/select_action_menu.xml +54 -0
  94. data/libs/crosswalk/ext/platform/android/adds/res/raw/contacts_api.js +206 -0
  95. data/libs/crosswalk/ext/platform/android/adds/res/raw/device_capabilities_api.js +231 -0
  96. data/libs/crosswalk/ext/platform/android/adds/res/raw/empty.wav +0 -0
  97. data/libs/crosswalk/ext/platform/android/adds/res/raw/icudtl.dat +0 -0
  98. data/libs/crosswalk/ext/platform/android/adds/res/raw/launch_screen_api.js +9 -0
  99. data/libs/crosswalk/ext/platform/android/adds/res/raw/messaging_api.js +359 -0
  100. data/libs/crosswalk/ext/platform/android/adds/res/raw/presentation_api.js +144 -0
  101. data/libs/crosswalk/ext/platform/android/adds/res/raw/wifidirect_api.js +227 -0
  102. data/libs/crosswalk/ext/platform/android/adds/res/raw/xwalk.pak +0 -0
  103. data/libs/crosswalk/ext/platform/android/adds/res/values-am/android_content_strings.xml +15 -0
  104. data/libs/crosswalk/ext/platform/android/adds/res/values-am/android_ui_strings.xml +47 -0
  105. data/libs/crosswalk/ext/platform/android/adds/res/values-ar/android_content_strings.xml +15 -0
  106. data/libs/crosswalk/ext/platform/android/adds/res/values-ar/android_ui_strings.xml +47 -0
  107. data/libs/crosswalk/ext/platform/android/adds/res/values-bg/android_content_strings.xml +15 -0
  108. data/libs/crosswalk/ext/platform/android/adds/res/values-bg/android_ui_strings.xml +47 -0
  109. data/libs/crosswalk/ext/platform/android/adds/res/values-ca/android_content_strings.xml +15 -0
  110. data/libs/crosswalk/ext/platform/android/adds/res/values-ca/android_ui_strings.xml +47 -0
  111. data/libs/crosswalk/ext/platform/android/adds/res/values-cs/android_content_strings.xml +15 -0
  112. data/libs/crosswalk/ext/platform/android/adds/res/values-cs/android_ui_strings.xml +47 -0
  113. data/libs/crosswalk/ext/platform/android/adds/res/values-da/android_content_strings.xml +15 -0
  114. data/libs/crosswalk/ext/platform/android/adds/res/values-da/android_ui_strings.xml +47 -0
  115. data/libs/crosswalk/ext/platform/android/adds/res/values-de/android_content_strings.xml +15 -0
  116. data/libs/crosswalk/ext/platform/android/adds/res/values-de/android_ui_strings.xml +47 -0
  117. data/libs/crosswalk/ext/platform/android/adds/res/values-el/android_content_strings.xml +15 -0
  118. data/libs/crosswalk/ext/platform/android/adds/res/values-el/android_ui_strings.xml +47 -0
  119. data/libs/crosswalk/ext/platform/android/adds/res/values-en-rGB/android_content_strings.xml +15 -0
  120. data/libs/crosswalk/ext/platform/android/adds/res/values-en-rGB/android_ui_strings.xml +47 -0
  121. data/libs/crosswalk/ext/platform/android/adds/res/values-es-rUS/android_content_strings.xml +15 -0
  122. data/libs/crosswalk/ext/platform/android/adds/res/values-es-rUS/android_ui_strings.xml +47 -0
  123. data/libs/crosswalk/ext/platform/android/adds/res/values-es/android_content_strings.xml +15 -0
  124. data/libs/crosswalk/ext/platform/android/adds/res/values-es/android_ui_strings.xml +47 -0
  125. data/libs/crosswalk/ext/platform/android/adds/res/values-fa/android_content_strings.xml +15 -0
  126. data/libs/crosswalk/ext/platform/android/adds/res/values-fa/android_ui_strings.xml +47 -0
  127. data/libs/crosswalk/ext/platform/android/adds/res/values-fi/android_content_strings.xml +15 -0
  128. data/libs/crosswalk/ext/platform/android/adds/res/values-fi/android_ui_strings.xml +47 -0
  129. data/libs/crosswalk/ext/platform/android/adds/res/values-fr/android_content_strings.xml +15 -0
  130. data/libs/crosswalk/ext/platform/android/adds/res/values-fr/android_ui_strings.xml +47 -0
  131. data/libs/crosswalk/ext/platform/android/adds/res/values-hi/android_content_strings.xml +15 -0
  132. data/libs/crosswalk/ext/platform/android/adds/res/values-hi/android_ui_strings.xml +47 -0
  133. data/libs/crosswalk/ext/platform/android/adds/res/values-hr/android_content_strings.xml +15 -0
  134. data/libs/crosswalk/ext/platform/android/adds/res/values-hr/android_ui_strings.xml +47 -0
  135. data/libs/crosswalk/ext/platform/android/adds/res/values-hu/android_content_strings.xml +15 -0
  136. data/libs/crosswalk/ext/platform/android/adds/res/values-hu/android_ui_strings.xml +47 -0
  137. data/libs/crosswalk/ext/platform/android/adds/res/values-in/android_content_strings.xml +15 -0
  138. data/libs/crosswalk/ext/platform/android/adds/res/values-in/android_ui_strings.xml +47 -0
  139. data/libs/crosswalk/ext/platform/android/adds/res/values-it/android_content_strings.xml +15 -0
  140. data/libs/crosswalk/ext/platform/android/adds/res/values-it/android_ui_strings.xml +47 -0
  141. data/libs/crosswalk/ext/platform/android/adds/res/values-iw/android_content_strings.xml +15 -0
  142. data/libs/crosswalk/ext/platform/android/adds/res/values-iw/android_ui_strings.xml +47 -0
  143. data/libs/crosswalk/ext/platform/android/adds/res/values-ja/android_content_strings.xml +15 -0
  144. data/libs/crosswalk/ext/platform/android/adds/res/values-ja/android_ui_strings.xml +47 -0
  145. data/libs/crosswalk/ext/platform/android/adds/res/values-ko/android_content_strings.xml +15 -0
  146. data/libs/crosswalk/ext/platform/android/adds/res/values-ko/android_ui_strings.xml +47 -0
  147. data/libs/crosswalk/ext/platform/android/adds/res/values-lt/android_content_strings.xml +15 -0
  148. data/libs/crosswalk/ext/platform/android/adds/res/values-lt/android_ui_strings.xml +47 -0
  149. data/libs/crosswalk/ext/platform/android/adds/res/values-lv/android_content_strings.xml +15 -0
  150. data/libs/crosswalk/ext/platform/android/adds/res/values-lv/android_ui_strings.xml +47 -0
  151. data/libs/crosswalk/ext/platform/android/adds/res/values-nb/android_content_strings.xml +15 -0
  152. data/libs/crosswalk/ext/platform/android/adds/res/values-nb/android_ui_strings.xml +47 -0
  153. data/libs/crosswalk/ext/platform/android/adds/res/values-nl/android_content_strings.xml +15 -0
  154. data/libs/crosswalk/ext/platform/android/adds/res/values-nl/android_ui_strings.xml +47 -0
  155. data/libs/crosswalk/ext/platform/android/adds/res/values-pl/android_content_strings.xml +15 -0
  156. data/libs/crosswalk/ext/platform/android/adds/res/values-pl/android_ui_strings.xml +47 -0
  157. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rBR/android_content_strings.xml +15 -0
  158. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rBR/android_ui_strings.xml +47 -0
  159. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rPT/android_content_strings.xml +15 -0
  160. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rPT/android_ui_strings.xml +47 -0
  161. data/libs/crosswalk/ext/platform/android/adds/res/values-ro/android_content_strings.xml +15 -0
  162. data/libs/crosswalk/ext/platform/android/adds/res/values-ro/android_ui_strings.xml +47 -0
  163. data/libs/crosswalk/ext/platform/android/adds/res/values-ru/android_content_strings.xml +15 -0
  164. data/libs/crosswalk/ext/platform/android/adds/res/values-ru/android_ui_strings.xml +47 -0
  165. data/libs/crosswalk/ext/platform/android/adds/res/values-sk/android_content_strings.xml +15 -0
  166. data/libs/crosswalk/ext/platform/android/adds/res/values-sk/android_ui_strings.xml +47 -0
  167. data/libs/crosswalk/ext/platform/android/adds/res/values-sl/android_content_strings.xml +15 -0
  168. data/libs/crosswalk/ext/platform/android/adds/res/values-sl/android_ui_strings.xml +47 -0
  169. data/libs/crosswalk/ext/platform/android/adds/res/values-sr/android_content_strings.xml +15 -0
  170. data/libs/crosswalk/ext/platform/android/adds/res/values-sr/android_ui_strings.xml +47 -0
  171. data/libs/crosswalk/ext/platform/android/adds/res/values-sv/android_content_strings.xml +15 -0
  172. data/libs/crosswalk/ext/platform/android/adds/res/values-sv/android_ui_strings.xml +47 -0
  173. data/libs/crosswalk/ext/platform/android/adds/res/values-sw/android_content_strings.xml +15 -0
  174. data/libs/crosswalk/ext/platform/android/adds/res/values-sw/android_ui_strings.xml +47 -0
  175. data/libs/crosswalk/ext/platform/android/adds/res/values-th/android_content_strings.xml +15 -0
  176. data/libs/crosswalk/ext/platform/android/adds/res/values-th/android_ui_strings.xml +47 -0
  177. data/libs/crosswalk/ext/platform/android/adds/res/values-tl/android_content_strings.xml +15 -0
  178. data/libs/crosswalk/ext/platform/android/adds/res/values-tl/android_ui_strings.xml +47 -0
  179. data/libs/crosswalk/ext/platform/android/adds/res/values-tr/android_content_strings.xml +15 -0
  180. data/libs/crosswalk/ext/platform/android/adds/res/values-tr/android_ui_strings.xml +47 -0
  181. data/libs/crosswalk/ext/platform/android/adds/res/values-uk/android_content_strings.xml +15 -0
  182. data/libs/crosswalk/ext/platform/android/adds/res/values-uk/android_ui_strings.xml +47 -0
  183. data/libs/crosswalk/ext/platform/android/adds/res/values-v14/theme.xml +16 -0
  184. data/libs/crosswalk/ext/platform/android/adds/res/values-v17/styles.xml +19 -0
  185. data/libs/crosswalk/ext/platform/android/adds/res/values-v17/ui_java_styles.xml +41 -0
  186. data/libs/crosswalk/ext/platform/android/adds/res/values-v21/styles.xml +14 -0
  187. data/libs/crosswalk/ext/platform/android/adds/res/values-v21/ui_java_styles.xml +14 -0
  188. data/libs/crosswalk/ext/platform/android/adds/res/values-vi/android_content_strings.xml +15 -0
  189. data/libs/crosswalk/ext/platform/android/adds/res/values-vi/android_ui_strings.xml +47 -0
  190. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rCN/android_content_strings.xml +15 -0
  191. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rCN/android_ui_strings.xml +47 -0
  192. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rTW/android_content_strings.xml +15 -0
  193. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rTW/android_ui_strings.xml +47 -0
  194. data/libs/crosswalk/ext/platform/android/adds/res/values/android_content_strings.xml +15 -0
  195. data/libs/crosswalk/ext/platform/android/adds/res/values/android_ui_strings.xml +47 -0
  196. data/libs/crosswalk/ext/platform/android/adds/res/values/android_xwalk_strings.xml +17 -0
  197. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_attrs.xml +9 -0
  198. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_dimens.xml +31 -0
  199. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_strings.xml +16 -0
  200. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_styles.xml +101 -0
  201. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_app_strings.xml +28 -0
  202. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_attrs.xml +11 -0
  203. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_colors.xml +13 -0
  204. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_core_internal_java_strings.xml +16 -0
  205. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_core_java_strings.xml +16 -0
  206. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_dimens.xml +11 -0
  207. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_resources_list.xml +7 -0
  208. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_styles.xml +40 -0
  209. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_values.xml +10 -0
  210. data/libs/crosswalk/ext/platform/android/ext_java.files +14 -0
  211. data/libs/crosswalk/ext/platform/android/ext_native.files +7 -0
  212. data/libs/crosswalk/ext/platform/android/jni/Crosswalk_impl.cpp +61 -0
  213. data/libs/crosswalk/ext/platform/android/src/com/rho/crosswalk/Crosswalk.java +14 -0
  214. data/libs/crosswalk/ext/platform/android/src/com/rho/crosswalk/CrosswalkFactory.java +18 -0
  215. data/libs/crosswalk/ext/platform/android/src/com/rho/crosswalk/CrosswalkSingleton.java +24 -0
  216. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/CrosswalkExtension.java +16 -0
  217. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/RhodesListener.java +18 -0
  218. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/TauXWResourceClient.java +182 -0
  219. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/TauXWUIClient.java +125 -0
  220. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/TauXWalkWebView.java +368 -0
  221. data/libs/crosswalk/ext/platform/iphone/Crosswalk.xcodeproj/project.pbxproj +368 -0
  222. data/libs/crosswalk/ext/platform/iphone/Crosswalk_Prefix.pch +7 -0
  223. data/libs/crosswalk/ext/platform/iphone/Rakefile +73 -0
  224. data/libs/crosswalk/ext/platform/iphone/impl/Crosswalk.h +14 -0
  225. data/libs/crosswalk/ext/platform/iphone/impl/Crosswalk.m +24 -0
  226. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkFactorySingleton.m +16 -0
  227. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkSetup.m +9 -0
  228. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkSingleton.h +17 -0
  229. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkSingleton.m +23 -0
  230. data/libs/crosswalk/ext/platform/iphone/impl/readme.txt +7 -0
  231. data/libs/crosswalk/ext/platform/qt/Crosswalk.pro +66 -0
  232. data/libs/crosswalk/ext/platform/qt/Rakefile +35 -0
  233. data/libs/crosswalk/ext/platform/qt/src/Crosswalk_impl.cpp +77 -0
  234. data/libs/crosswalk/ext/platform/wm/Crosswalk.sln +52 -0
  235. data/libs/crosswalk/ext/platform/wm/Crosswalk.vcproj +714 -0
  236. data/libs/crosswalk/ext/platform/wm/Crosswalk.vsprops +15 -0
  237. data/libs/crosswalk/ext/platform/wm/src/Crosswalk_impl.cpp +77 -0
  238. data/libs/crosswalk/ext/platform/wp8/Crosswalk.props +18 -0
  239. data/libs/crosswalk/ext/platform/wp8/Crosswalk.vcxproj +170 -0
  240. data/libs/crosswalk/ext/platform/wp8/Crosswalk.vcxproj.filters +50 -0
  241. data/libs/crosswalk/ext/platform/wp8/CrosswalkImpl.csproj +119 -0
  242. data/libs/crosswalk/ext/platform/wp8/CrosswalkImpl.props +8 -0
  243. data/libs/crosswalk/ext/platform/wp8/CrosswalkImpl.targets +7 -0
  244. data/libs/crosswalk/ext/platform/wp8/CrosswalkLib.props +18 -0
  245. data/libs/crosswalk/ext/platform/wp8/CrosswalkLib.vcxproj +185 -0
  246. data/libs/crosswalk/ext/platform/wp8/CrosswalkLib.vcxproj.filters +58 -0
  247. data/libs/crosswalk/ext/platform/wp8/src/Crosswalk_impl.cpp +76 -0
  248. data/libs/crosswalk/ext/platform/wp8/src/Crosswalk_impl.cs +69 -0
  249. data/libs/crosswalk/ext/platform/wp8/src/Properties/AssemblyInfo.cs +37 -0
  250. data/libs/enterprise-barcode/ext.yml +13 -0
  251. data/libs/enterprise-barcode/ext/barcode.xml +2144 -0
  252. data/libs/enterprise-barcode/ext/build +17 -0
  253. data/libs/enterprise-barcode/ext/build.bat +29 -0
  254. data/libs/enterprise-barcode/ext/platform/android/AndroidManifest.xml +31 -0
  255. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/AUTHORS +58 -0
  256. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/CHANGES +266 -0
  257. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/COPYING +201 -0
  258. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/README +11 -0
  259. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable-hdpi/cancel_icon.png +0 -0
  260. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable-hdpi/ok_icon.png +0 -0
  261. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable-hdpi/retake_icon.png +0 -0
  262. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable/cancel_icon.png +0 -0
  263. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable/ok_icon.png +0 -0
  264. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable/retake_icon.png +0 -0
  265. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/layout/capture.xml +122 -0
  266. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/raw/beep.ogg +0 -0
  267. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/values/attrs.xml +20 -0
  268. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/values/colors.xml +42 -0
  269. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/values/ids.xml +31 -0
  270. data/libs/enterprise-barcode/ext/platform/android/adds/lib/armeabi/liballbarcode.a +0 -0
  271. data/libs/enterprise-barcode/ext/platform/android/adds/lib/x86/liballbarcode.a +0 -0
  272. data/libs/enterprise-barcode/ext/platform/android/allbarcode.jar +0 -0
  273. data/libs/enterprise-barcode/ext/platform/iphone/Barcode.xcodeproj/project.pbxproj +524 -0
  274. data/libs/enterprise-barcode/ext/platform/iphone/Barcode_Prefix.pch +7 -0
  275. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeCallbackHelper.h +27 -0
  276. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeCallbackHelper.mm +231 -0
  277. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewController.h +95 -0
  278. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewController.m +1017 -0
  279. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewFactory.h +7 -0
  280. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewFactory.mm +58 -0
  281. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewFactoryRegister.mm +18 -0
  282. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewManager.h +16 -0
  283. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewManager.mm +32 -0
  284. data/libs/enterprise-barcode/ext/platform/iphone/Classes/ImageProvider.cpp +25 -0
  285. data/libs/enterprise-barcode/ext/platform/iphone/Classes/ImageProvider.h +15 -0
  286. data/libs/enterprise-barcode/ext/platform/iphone/Classes/ImageProvider.mm +159 -0
  287. data/libs/enterprise-barcode/ext/platform/iphone/Classes/barcode.m +123 -0
  288. data/libs/enterprise-barcode/ext/platform/iphone/Rakefile +69 -0
  289. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/COPYING +27 -0
  290. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCameraSimulator.h +45 -0
  291. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +111 -0
  292. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
  293. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
  294. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
  295. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
  296. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +135 -0
  297. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +130 -0
  298. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +34 -0
  299. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
  300. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1497 -0
  301. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +202 -0
  302. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
  303. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
  304. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
  305. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
  306. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
  307. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +528 -0
  308. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
  309. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
  310. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/LICENSE +504 -0
  311. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/README +59 -0
  312. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
  313. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
  314. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
  315. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
  316. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/libzbar.a +0 -0
  317. data/libs/enterprise-barcode/ext/platform/iphone/impl/Barcode.h +21 -0
  318. data/libs/enterprise-barcode/ext/platform/iphone/impl/Barcode.m +132 -0
  319. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeFactory.h +10 -0
  320. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeFactory.m +16 -0
  321. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeFactorySingleton.m +16 -0
  322. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeSetup.m +8 -0
  323. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeSingleton.h +17 -0
  324. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeSingleton.m +22 -0
  325. data/libs/enterprise-barcode/ext/platform/iphone/impl/readme.txt +7 -0
  326. data/libs/enterprise-barcode/ext/platform/wm/Barcode.sln +44 -0
  327. data/libs/enterprise-barcode/ext/platform/wm/Barcode.vcproj +836 -0
  328. data/libs/enterprise-barcode/ext/platform/wm/Barcode.vsprops +15 -0
  329. data/libs/enterprise-barcode/ext/platform/wm/readme.txt +0 -0
  330. data/libs/enterprise-barcode/ext/platform/wm/src/Barcode_impl.cpp +376 -0
  331. data/libs/enterprise-barcode/ext/platform/wm/src/DecodeNotifier.cpp +173 -0
  332. data/libs/enterprise-barcode/ext/platform/wm/src/DecodeNotifier.h +149 -0
  333. data/libs/enterprise-barcode/ext/platform/wm/src/EMDKInterfaceAbstraction.cpp +476 -0
  334. data/libs/enterprise-barcode/ext/platform/wm/src/GetDecoderProperties.cpp +1195 -0
  335. data/libs/enterprise-barcode/ext/platform/wm/src/GetScannerProperties.cpp +553 -0
  336. data/libs/enterprise-barcode/ext/platform/wm/src/KeyInjector.cpp +177 -0
  337. data/libs/enterprise-barcode/ext/platform/wm/src/KeyInjector.h +40 -0
  338. data/libs/enterprise-barcode/ext/platform/wm/src/NotificationLoader.cpp +76 -0
  339. data/libs/enterprise-barcode/ext/platform/wm/src/NotificationLoader.h +44 -0
  340. data/libs/enterprise-barcode/ext/platform/wm/src/RSM.cpp +1211 -0
  341. data/libs/enterprise-barcode/ext/platform/wm/src/Scanner.cpp +2609 -0
  342. data/libs/enterprise-barcode/ext/platform/wm/src/Scanner.h +1099 -0
  343. data/libs/enterprise-barcode/ext/platform/wm/src/ScannerDefines.h +322 -0
  344. data/libs/enterprise-barcode/ext/platform/wm/src/SetDecoderProperties.cpp +2106 -0
  345. data/libs/enterprise-barcode/ext/platform/wm/src/SetScannerProperties.cpp +1060 -0
  346. data/libs/enterprise-barcode/ext/platform/wm/src/Utilities.cpp +184 -0
  347. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeImpl.csproj +119 -0
  348. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeImpl.props +8 -0
  349. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeImpl.targets +35 -0
  350. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeLib.props +18 -0
  351. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeLib.vcxproj +185 -0
  352. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeLib.vcxproj.filters +58 -0
  353. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.Graphics.Imaging.dll +0 -0
  354. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.Graphics.Imaging.winmd +0 -0
  355. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.Graphics.Imaging.xml +4813 -0
  356. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.InteropServices.WindowsRuntime.dll +0 -0
  357. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.InteropServices.WindowsRuntime.winmd +0 -0
  358. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.InteropServices.WindowsRuntime.xml +41 -0
  359. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/OpticalReaderLib.dll +0 -0
  360. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib.XML +68 -0
  361. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib.dll +0 -0
  362. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/BarcodeReaderLib.csproj +120 -0
  363. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/BarcodeReaderLib.sln +34 -0
  364. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/CameraNavigatePage.xaml +32 -0
  365. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/CameraNavigatePage.xaml.cs +235 -0
  366. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/OpticalReaderTask.cs +182 -0
  367. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/Properties/AssemblyInfo.cs +37 -0
  368. data/libs/enterprise-barcode/ext/platform/wp8/lib/Nokia.Graphics.Imaging.Managed.dll +0 -0
  369. data/libs/enterprise-barcode/ext/platform/wp8/lib/Nokia.Graphics.Imaging.Managed.xml +341 -0
  370. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.Graphics.Imaging.dll +0 -0
  371. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.Graphics.Imaging.winmd +0 -0
  372. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.Graphics.Imaging.xml +4813 -0
  373. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.InteropServices.WindowsRuntime.dll +0 -0
  374. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.InteropServices.WindowsRuntime.winmd +0 -0
  375. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.InteropServices.WindowsRuntime.xml +41 -0
  376. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/OpticalReaderLib.dll +0 -0
  377. data/libs/enterprise-barcode/ext/platform/wp8/lib/zxing.wp8.0.XML +10324 -0
  378. data/libs/enterprise-barcode/ext/platform/wp8/lib/zxing.wp8.0.dll +0 -0
  379. data/libs/enterprise-barcode/ext/platform/wp8/src/Barcode_impl.cs +630 -0
  380. data/libs/enterprise-barcode/ext/platform/wp8/src/Properties/AssemblyInfo.cs +37 -0
  381. data/libs/enterprise-barcode/public/api/generated/Rho.Barcode.js +772 -0
  382. data/libs/ie/rhobrowser.dll +0 -0
  383. data/libs/nodejs.rb +2 -0
  384. data/libs/nodejs/ext.yml +25 -0
  385. data/libs/nodejs/ext/Nodejs.xml +37 -0
  386. data/libs/nodejs/ext/build +19 -0
  387. data/libs/nodejs/ext/build.bat +29 -0
  388. data/libs/nodejs/ext/platform/android/Rakefile +161 -0
  389. data/libs/nodejs/ext/platform/android/ext_native.files +8 -0
  390. data/libs/nodejs/ext/platform/android/jxCore/jx.h +134 -0
  391. data/libs/nodejs/ext/platform/android/jxCore/jx_result.h +221 -0
  392. data/libs/nodejs/ext/platform/android/jxCore/libcares_arm.a +0 -0
  393. data/libs/nodejs/ext/platform/android/jxCore/libcares_ia32.a +0 -0
  394. data/libs/nodejs/ext/platform/android/jxCore/libcares_x64.a +0 -0
  395. data/libs/nodejs/ext/platform/android/jxCore/libchrome_zlib_arm.a +0 -0
  396. data/libs/nodejs/ext/platform/android/jxCore/libchrome_zlib_ia32.a +0 -0
  397. data/libs/nodejs/ext/platform/android/jxCore/libchrome_zlib_x64.a +0 -0
  398. data/libs/nodejs/ext/platform/android/jxCore/libhttp_parser_arm.a +0 -0
  399. data/libs/nodejs/ext/platform/android/jxCore/libhttp_parser_ia32.a +0 -0
  400. data/libs/nodejs/ext/platform/android/jxCore/libhttp_parser_x64.a +0 -0
  401. data/libs/nodejs/ext/platform/android/jxCore/libjx_arm.a +0 -0
  402. data/libs/nodejs/ext/platform/android/jxCore/libjx_ia32.a +0 -0
  403. data/libs/nodejs/ext/platform/android/jxCore/libjx_x64.a +0 -0
  404. data/libs/nodejs/ext/platform/android/jxCore/libopenssl_arm.a +0 -0
  405. data/libs/nodejs/ext/platform/android/jxCore/libopenssl_ia32.a +0 -0
  406. data/libs/nodejs/ext/platform/android/jxCore/libopenssl_x64.a +0 -0
  407. data/libs/nodejs/ext/platform/android/jxCore/libsqlite3_arm.a +0 -0
  408. data/libs/nodejs/ext/platform/android/jxCore/libsqlite3_ia32.a +0 -0
  409. data/libs/nodejs/ext/platform/android/jxCore/libsqlite3_x64.a +0 -0
  410. data/libs/nodejs/ext/platform/android/jxCore/libuv_arm.a +0 -0
  411. data/libs/nodejs/ext/platform/android/jxCore/libuv_ia32.a +0 -0
  412. data/libs/nodejs/ext/platform/android/jxCore/libuv_x64.a +0 -0
  413. data/libs/nodejs/ext/platform/android/jxCore/libv8_base_arm.a +0 -0
  414. data/libs/nodejs/ext/platform/android/jxCore/libv8_base_ia32.a +0 -0
  415. data/libs/nodejs/ext/platform/android/jxCore/libv8_base_x64.a +0 -0
  416. data/libs/nodejs/ext/platform/android/jxCore/libv8_nosnapshot_arm.a +0 -0
  417. data/libs/nodejs/ext/platform/android/jxCore/libv8_nosnapshot_ia32.a +0 -0
  418. data/libs/nodejs/ext/platform/android/jxCore/libv8_nosnapshot_x64.a +0 -0
  419. data/libs/nodejs/ext/platform/iphone/Nodejs.xcodeproj/project.pbxproj +350 -0
  420. data/libs/nodejs/ext/platform/iphone/Nodejs_Prefix.pch +7 -0
  421. data/libs/nodejs/ext/platform/iphone/Rakefile +73 -0
  422. data/libs/nodejs/ext/platform/iphone/jxCore/jx.h +134 -0
  423. data/libs/nodejs/ext/platform/iphone/jxCore/jx_result.h +221 -0
  424. data/libs/nodejs/ext/platform/iphone/jxCore/libcares.a +0 -0
  425. data/libs/nodejs/ext/platform/iphone/jxCore/libchrome_zlib.a +0 -0
  426. data/libs/nodejs/ext/platform/iphone/jxCore/libhttp_parser.a +0 -0
  427. data/libs/nodejs/ext/platform/iphone/jxCore/libjx.a +0 -0
  428. data/libs/nodejs/ext/platform/iphone/jxCore/libmozjs.a +0 -0
  429. data/libs/nodejs/ext/platform/iphone/jxCore/libopenssl.a +0 -0
  430. data/libs/nodejs/ext/platform/iphone/jxCore/libsqlite3.a +0 -0
  431. data/libs/nodejs/ext/platform/iphone/jxCore/libuv.a +0 -0
  432. data/libs/nodejs/ext/shared/jxcore/jx.h +134 -0
  433. data/libs/nodejs/ext/shared/jxcore/jx_result.h +221 -0
  434. data/libs/nodejs/ext/shared/jxcoretau.cpp +454 -0
  435. data/libs/nodejs/ext/shared/jxcoretau.h +20 -0
  436. data/libs/nodejs/ext/shared/nodejs_impl.cpp +106 -0
  437. data/libs/nodejs/nodejs.rb +2 -0
  438. data/libs/openssl-edge.rb +2 -0
  439. data/libs/openssl-edge/ext.yml +4 -0
  440. data/libs/openssl-edge/ext/Rakefile +145 -0
  441. data/libs/openssl-edge/ext/android/Rakefile +107 -0
  442. data/libs/openssl-edge/ext/android/ext_native.files +32 -0
  443. data/libs/openssl-edge/ext/android/extconf.h +91 -0
  444. data/libs/openssl-edge/ext/build +12 -0
  445. data/libs/openssl-edge/ext/build.bat +5 -0
  446. data/libs/openssl-edge/ext/extconf.rb +141 -0
  447. data/libs/openssl-edge/ext/openssl.pro +109 -0
  448. data/libs/openssl-edge/ext/openssl.sln +52 -0
  449. data/libs/openssl-edge/ext/openssl.vcproj +1010 -0
  450. data/libs/openssl-edge/ext/openssl_missing.c +1163 -0
  451. data/libs/openssl-edge/ext/openssl_missing.h +537 -0
  452. data/libs/openssl-edge/ext/ossl.c +1203 -0
  453. data/libs/openssl-edge/ext/ossl.h +242 -0
  454. data/libs/openssl-edge/ext/ossl_asn1.c +2008 -0
  455. data/libs/openssl-edge/ext/ossl_asn1.h +66 -0
  456. data/libs/openssl-edge/ext/ossl_bio.c +118 -0
  457. data/libs/openssl-edge/ext/ossl_bio.h +19 -0
  458. data/libs/openssl-edge/ext/ossl_bn.c +1153 -0
  459. data/libs/openssl-edge/ext/ossl_bn.h +23 -0
  460. data/libs/openssl-edge/ext/ossl_cipher.c +1085 -0
  461. data/libs/openssl-edge/ext/ossl_cipher.h +20 -0
  462. data/libs/openssl-edge/ext/ossl_config.c +89 -0
  463. data/libs/openssl-edge/ext/ossl_config.h +19 -0
  464. data/libs/openssl-edge/ext/ossl_digest.c +453 -0
  465. data/libs/openssl-edge/ext/ossl_digest.h +20 -0
  466. data/libs/openssl-edge/ext/ossl_engine.c +580 -0
  467. data/libs/openssl-edge/ext/ossl_engine.h +19 -0
  468. data/libs/openssl-edge/ext/ossl_hmac.c +398 -0
  469. data/libs/openssl-edge/ext/ossl_hmac.h +18 -0
  470. data/libs/openssl-edge/ext/ossl_ns_spki.c +406 -0
  471. data/libs/openssl-edge/ext/ossl_ns_spki.h +19 -0
  472. data/libs/openssl-edge/ext/ossl_ocsp.c +2013 -0
  473. data/libs/openssl-edge/ext/ossl_ocsp.h +23 -0
  474. data/libs/openssl-edge/ext/ossl_pkcs12.c +261 -0
  475. data/libs/openssl-edge/ext/ossl_pkcs12.h +13 -0
  476. data/libs/openssl-edge/ext/ossl_pkcs5.c +180 -0
  477. data/libs/openssl-edge/ext/ossl_pkcs5.h +6 -0
  478. data/libs/openssl-edge/ext/ossl_pkcs7.c +1157 -0
  479. data/libs/openssl-edge/ext/ossl_pkcs7.h +20 -0
  480. data/libs/openssl-edge/ext/ossl_pkey.c +469 -0
  481. data/libs/openssl-edge/ext/ossl_pkey.h +245 -0
  482. data/libs/openssl-edge/ext/ossl_pkey_dh.c +650 -0
  483. data/libs/openssl-edge/ext/ossl_pkey_dsa.c +672 -0
  484. data/libs/openssl-edge/ext/ossl_pkey_ec.c +1806 -0
  485. data/libs/openssl-edge/ext/ossl_pkey_rsa.c +768 -0
  486. data/libs/openssl-edge/ext/ossl_rand.c +238 -0
  487. data/libs/openssl-edge/ext/ossl_rand.h +18 -0
  488. data/libs/openssl-edge/ext/ossl_ssl.c +2724 -0
  489. data/libs/openssl-edge/ext/ossl_ssl.h +41 -0
  490. data/libs/openssl-edge/ext/ossl_ssl_session.c +352 -0
  491. data/libs/openssl-edge/ext/ossl_version.h +15 -0
  492. data/libs/openssl-edge/ext/ossl_x509.c +186 -0
  493. data/libs/openssl-edge/ext/ossl_x509.h +119 -0
  494. data/libs/openssl-edge/ext/ossl_x509attr.c +328 -0
  495. data/libs/openssl-edge/ext/ossl_x509cert.c +863 -0
  496. data/libs/openssl-edge/ext/ossl_x509crl.c +565 -0
  497. data/libs/openssl-edge/ext/ossl_x509ext.c +480 -0
  498. data/libs/openssl-edge/ext/ossl_x509name.c +547 -0
  499. data/libs/openssl-edge/ext/ossl_x509req.c +492 -0
  500. data/libs/openssl-edge/ext/ossl_x509revoked.c +279 -0
  501. data/libs/openssl-edge/ext/ossl_x509store.c +846 -0
  502. data/libs/openssl-edge/ext/ruby_missing.h +32 -0
  503. data/libs/openssl-edge/openssl-edge.rb +2 -0
  504. data/libs/openssl-edge/openssl.rb +24 -0
  505. data/libs/openssl-edge/openssl/bn.rb +35 -0
  506. data/libs/openssl-edge/openssl/buffering.rb +341 -0
  507. data/libs/openssl-edge/openssl/cipher.rb +65 -0
  508. data/libs/openssl-edge/openssl/digest.rb +61 -0
  509. data/libs/openssl-edge/openssl/ssl-internal.rb +180 -0
  510. data/libs/openssl-edge/openssl/ssl.rb +1 -0
  511. data/libs/openssl-edge/openssl/x509-internal.rb +153 -0
  512. data/libs/openssl-edge/openssl/x509.rb +1 -0
  513. data/libs/openssl.so-edge.rb +2 -0
  514. data/libs/openssl.so-edge/ext.yml +8 -0
  515. data/libs/openssl.so-edge/ext/Rakefile +140 -0
  516. data/libs/openssl.so-edge/ext/android/armeabi/libcrypto.a +0 -0
  517. data/libs/openssl.so-edge/ext/android/armeabi/libssl.a +0 -0
  518. data/libs/openssl.so-edge/ext/android/x86/libcrypto.a +0 -0
  519. data/libs/openssl.so-edge/ext/android/x86/libssl.a +0 -0
  520. data/libs/openssl.so-edge/ext/build +12 -0
  521. data/libs/openssl.so-edge/ext/build.bat +1 -0
  522. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/dh/dh_locl.h +56 -0
  523. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/dsa/dsa_locl.h +76 -0
  524. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/evp/evp_locl.h +66 -0
  525. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/hmac/hmac_lcl.h +33 -0
  526. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/asn1_int.h +94 -0
  527. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/async.h +14 -0
  528. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_conf.h +28 -0
  529. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_dh.h +17 -0
  530. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_int.h +82 -0
  531. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_srp.h +32 -0
  532. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/chacha.h +49 -0
  533. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/cryptlib.h +81 -0
  534. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/cryptlib_int.h +31 -0
  535. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/dso_conf.h +16 -0
  536. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/engine.h +20 -0
  537. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/err_int.h +17 -0
  538. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/evp_int.h +382 -0
  539. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/md32_common.h +383 -0
  540. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/objects.h +12 -0
  541. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/poly1305.h +19 -0
  542. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/rand.h +20 -0
  543. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/x509_int.h +267 -0
  544. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/ocsp/ocsp_lcl.h +216 -0
  545. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/rsa/rsa_locl.h +96 -0
  546. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/x509/x509_lcl.h +142 -0
  547. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/e_os.h +520 -0
  548. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/bio.h +26 -0
  549. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/comp.h +12 -0
  550. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/conf.h +32 -0
  551. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/constant_time_locl.h +185 -0
  552. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/dane.h +103 -0
  553. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/dso.h +216 -0
  554. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/err.h +15 -0
  555. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/numbers.h +68 -0
  556. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/o_dir.h +63 -0
  557. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/o_str.h +17 -0
  558. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/thread_once.h +42 -0
  559. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/__DECC_INCLUDE_EPILOGUE.H +16 -0
  560. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/__DECC_INCLUDE_PROLOGUE.H +20 -0
  561. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/aes.h +92 -0
  562. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/asn1.h +1096 -0
  563. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/asn1_mac.h +10 -0
  564. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/asn1t.h +924 -0
  565. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/async.h +98 -0
  566. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/bio.h +854 -0
  567. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/blowfish.h +61 -0
  568. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/bn.h +575 -0
  569. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/buffer.h +76 -0
  570. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/camellia.h +83 -0
  571. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/cast.h +53 -0
  572. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/cmac.h +41 -0
  573. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/cms.h +512 -0
  574. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/comp.h +72 -0
  575. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/conf.h +216 -0
  576. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/conf_api.h +40 -0
  577. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/crypto.h +463 -0
  578. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ct.h +518 -0
  579. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/des.h +174 -0
  580. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/dh.h +343 -0
  581. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/dsa.h +282 -0
  582. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/dtls1.h +56 -0
  583. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/e_os2.h +311 -0
  584. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ebcdic.h +33 -0
  585. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ec.h +1581 -0
  586. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ecdh.h +10 -0
  587. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ecdsa.h +10 -0
  588. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/engine.h +842 -0
  589. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/err.h +259 -0
  590. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/evp.h +1586 -0
  591. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/hmac.h +49 -0
  592. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/idea.h +64 -0
  593. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/kdf.h +75 -0
  594. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/lhash.h +204 -0
  595. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/md2.h +44 -0
  596. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/md4.h +51 -0
  597. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/md5.h +50 -0
  598. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/mdc2.h +42 -0
  599. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/modes.h +203 -0
  600. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/obj_mac.h +4577 -0
  601. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/objects.h +1097 -0
  602. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ocsp.h +409 -0
  603. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/opensslconf.h +169 -0
  604. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/opensslconf.h.in +141 -0
  605. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/opensslv.h +105 -0
  606. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ossl_typ.h +190 -0
  607. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pem.h +501 -0
  608. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pem2.h +20 -0
  609. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pkcs12.h +282 -0
  610. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pkcs7.h +404 -0
  611. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rand.h +89 -0
  612. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rc2.h +51 -0
  613. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rc4.h +36 -0
  614. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rc5.h +63 -0
  615. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ripemd.h +47 -0
  616. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rsa.h +588 -0
  617. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/safestack.h +164 -0
  618. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/seed.h +98 -0
  619. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/sha.h +119 -0
  620. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/srp.h +131 -0
  621. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/srtp.h +50 -0
  622. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ssl.h +2527 -0
  623. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ssl2.h +24 -0
  624. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ssl3.h +307 -0
  625. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/stack.h +78 -0
  626. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/symhacks.h +52 -0
  627. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/tls1.h +972 -0
  628. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ts.h +643 -0
  629. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/txt_db.h +57 -0
  630. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ui.h +368 -0
  631. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/whrlpool.h +48 -0
  632. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/x509.h +1123 -0
  633. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/x509_vfy.h +539 -0
  634. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/x509v3.h +1005 -0
  635. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/packet_locl.h +555 -0
  636. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/record/record.h +240 -0
  637. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/record/record_locl.h +114 -0
  638. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/ssl_locl.h +2127 -0
  639. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/statem/statem.h +123 -0
  640. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/statem/statem_locl.h +124 -0
  641. data/libs/openssl.so-edge/openssl.so.rb +2 -0
  642. data/libs/webkit.rb +2 -0
  643. data/libs/webkit/ext.yml +4 -0
  644. data/libs/webkit/ext/build +12 -0
  645. data/libs/webkit/ext/build.bat +7 -0
  646. data/libs/webkit/ext/wm/Rakefile +61 -0
  647. data/libs/webkit/ext/wm/RhoMsgs.cpp +17 -0
  648. data/libs/webkit/ext/wm/RhoMsgs.h +14 -0
  649. data/libs/webkit/ext/wm/RhoWKBrowserEngine.cpp +736 -0
  650. data/libs/webkit/ext/wm/RhoWKBrowserEngine.h +105 -0
  651. data/libs/webkit/ext/wm/lib/npapi/rhobridge.dll +0 -0
  652. data/libs/webkit/ext/wm/lib/rhoengine_defs.h +80 -0
  653. data/libs/webkit/ext/wm/lib/rhowebkit.dll +0 -0
  654. data/libs/webkit/ext/wm/webkit.sln +36 -0
  655. data/libs/webkit/ext/wm/webkit.suo +0 -0
  656. data/libs/webkit/ext/wm/webkit.vcproj +800 -0
  657. data/libs/webkit/ext/wm/webkit.vsprops +20 -0
  658. data/libs/webkit/webkit.rb +2 -0
  659. data/rho-tau-extensions.gemspec +23 -0
  660. data/version +1 -0
  661. metadata +705 -0
@@ -0,0 +1,240 @@
1
+ /*
2
+ * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3
+ *
4
+ * Licensed under the OpenSSL license (the "License"). You may not use
5
+ * this file except in compliance with the License. You can obtain a copy
6
+ * in the file LICENSE in the source distribution or at
7
+ * https://www.openssl.org/source/license.html
8
+ */
9
+
10
+ /*****************************************************************************
11
+ * *
12
+ * These structures should be considered PRIVATE to the record layer. No *
13
+ * non-record layer code should be using these structures in any way. *
14
+ * *
15
+ *****************************************************************************/
16
+
17
+ typedef struct ssl3_buffer_st {
18
+ /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */
19
+ unsigned char *buf;
20
+ /* default buffer size (or 0 if no default set) */
21
+ size_t default_len;
22
+ /* buffer size */
23
+ size_t len;
24
+ /* where to 'copy from' */
25
+ int offset;
26
+ /* how many bytes left */
27
+ int left;
28
+ } SSL3_BUFFER;
29
+
30
+ #define SEQ_NUM_SIZE 8
31
+
32
+ typedef struct ssl3_record_st {
33
+ /* Record layer version */
34
+ /* r */
35
+ int rec_version;
36
+ /* type of record */
37
+ /* r */
38
+ int type;
39
+ /* How many bytes available */
40
+ /* rw */
41
+ unsigned int length;
42
+ /*
43
+ * How many bytes were available before padding was removed? This is used
44
+ * to implement the MAC check in constant time for CBC records.
45
+ */
46
+ /* rw */
47
+ unsigned int orig_len;
48
+ /* read/write offset into 'buf' */
49
+ /* r */
50
+ unsigned int off;
51
+ /* pointer to the record data */
52
+ /* rw */
53
+ unsigned char *data;
54
+ /* where the decode bytes are */
55
+ /* rw */
56
+ unsigned char *input;
57
+ /* only used with decompression - malloc()ed */
58
+ /* r */
59
+ unsigned char *comp;
60
+ /* Whether the data from this record has already been read or not */
61
+ /* r */
62
+ unsigned int read;
63
+ /* epoch number, needed by DTLS1 */
64
+ /* r */
65
+ unsigned long epoch;
66
+ /* sequence number, needed by DTLS1 */
67
+ /* r */
68
+ unsigned char seq_num[SEQ_NUM_SIZE];
69
+ } SSL3_RECORD;
70
+
71
+ typedef struct dtls1_bitmap_st {
72
+ /* Track 32 packets on 32-bit systems and 64 - on 64-bit systems */
73
+ unsigned long map;
74
+ /* Max record number seen so far, 64-bit value in big-endian encoding */
75
+ unsigned char max_seq_num[SEQ_NUM_SIZE];
76
+ } DTLS1_BITMAP;
77
+
78
+ typedef struct record_pqueue_st {
79
+ unsigned short epoch;
80
+ struct pqueue_st *q;
81
+ } record_pqueue;
82
+
83
+ typedef struct dtls1_record_data_st {
84
+ unsigned char *packet;
85
+ unsigned int packet_length;
86
+ SSL3_BUFFER rbuf;
87
+ SSL3_RECORD rrec;
88
+ #ifndef OPENSSL_NO_SCTP
89
+ struct bio_dgram_sctp_rcvinfo recordinfo;
90
+ #endif
91
+ } DTLS1_RECORD_DATA;
92
+
93
+ typedef struct dtls_record_layer_st {
94
+ /*
95
+ * The current data and handshake epoch. This is initially
96
+ * undefined, and starts at zero once the initial handshake is
97
+ * completed
98
+ */
99
+ unsigned short r_epoch;
100
+ unsigned short w_epoch;
101
+ /* records being received in the current epoch */
102
+ DTLS1_BITMAP bitmap;
103
+ /* renegotiation starts a new set of sequence numbers */
104
+ DTLS1_BITMAP next_bitmap;
105
+ /* Received handshake records (processed and unprocessed) */
106
+ record_pqueue unprocessed_rcds;
107
+ record_pqueue processed_rcds;
108
+ /*
109
+ * Buffered application records. Only for records between CCS and
110
+ * Finished to prevent either protocol violation or unnecessary message
111
+ * loss.
112
+ */
113
+ record_pqueue buffered_app_data;
114
+ /*
115
+ * storage for Alert/Handshake protocol data received but not yet
116
+ * processed by ssl3_read_bytes:
117
+ */
118
+ unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
119
+ unsigned int alert_fragment_len;
120
+ unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
121
+ unsigned int handshake_fragment_len;
122
+ /* save last and current sequence numbers for retransmissions */
123
+ unsigned char last_write_sequence[8];
124
+ unsigned char curr_write_sequence[8];
125
+ } DTLS_RECORD_LAYER;
126
+
127
+ /*****************************************************************************
128
+ * *
129
+ * This structure should be considered "opaque" to anything outside of the *
130
+ * record layer. No non-record layer code should be accessing the members of *
131
+ * this structure. *
132
+ * *
133
+ *****************************************************************************/
134
+
135
+ typedef struct record_layer_st {
136
+ /* The parent SSL structure */
137
+ SSL *s;
138
+ /*
139
+ * Read as many input bytes as possible (for
140
+ * non-blocking reads)
141
+ */
142
+ int read_ahead;
143
+ /* where we are when reading */
144
+ int rstate;
145
+ /* How many pipelines can be used to read data */
146
+ unsigned int numrpipes;
147
+ /* How many pipelines can be used to write data */
148
+ unsigned int numwpipes;
149
+ /* read IO goes into here */
150
+ SSL3_BUFFER rbuf;
151
+ /* write IO goes into here */
152
+ SSL3_BUFFER wbuf[SSL_MAX_PIPELINES];
153
+ /* each decoded record goes in here */
154
+ SSL3_RECORD rrec[SSL_MAX_PIPELINES];
155
+ /* used internally to point at a raw packet */
156
+ unsigned char *packet;
157
+ unsigned int packet_length;
158
+ /* number of bytes sent so far */
159
+ unsigned int wnum;
160
+ /*
161
+ * storage for Alert/Handshake protocol data received but not yet
162
+ * processed by ssl3_read_bytes:
163
+ */
164
+ unsigned char alert_fragment[2];
165
+ unsigned int alert_fragment_len;
166
+ unsigned char handshake_fragment[4];
167
+ unsigned int handshake_fragment_len;
168
+ /* The number of consecutive empty records we have received */
169
+ unsigned int empty_record_count;
170
+ /* partial write - check the numbers match */
171
+ /* number bytes written */
172
+ int wpend_tot;
173
+ int wpend_type;
174
+ /* number of bytes submitted */
175
+ int wpend_ret;
176
+ const unsigned char *wpend_buf;
177
+ unsigned char read_sequence[SEQ_NUM_SIZE];
178
+ unsigned char write_sequence[SEQ_NUM_SIZE];
179
+ /* Set to true if this is the first record in a connection */
180
+ unsigned int is_first_record;
181
+ DTLS_RECORD_LAYER *d;
182
+ } RECORD_LAYER;
183
+
184
+ /*****************************************************************************
185
+ * *
186
+ * The following macros/functions represent the libssl internal API to the *
187
+ * record layer. Any libssl code may call these functions/macros *
188
+ * *
189
+ *****************************************************************************/
190
+
191
+ #define MIN_SSL2_RECORD_LEN 9
192
+
193
+ #define RECORD_LAYER_set_read_ahead(rl, ra) ((rl)->read_ahead = (ra))
194
+ #define RECORD_LAYER_get_read_ahead(rl) ((rl)->read_ahead)
195
+ #define RECORD_LAYER_get_packet(rl) ((rl)->packet)
196
+ #define RECORD_LAYER_get_packet_length(rl) ((rl)->packet_length)
197
+ #define RECORD_LAYER_add_packet_length(rl, inc) ((rl)->packet_length += (inc))
198
+ #define DTLS_RECORD_LAYER_get_w_epoch(rl) ((rl)->d->w_epoch)
199
+ #define DTLS_RECORD_LAYER_get_processed_rcds(rl) \
200
+ ((rl)->d->processed_rcds)
201
+ #define DTLS_RECORD_LAYER_get_unprocessed_rcds(rl) \
202
+ ((rl)->d->unprocessed_rcds)
203
+
204
+ void RECORD_LAYER_init(RECORD_LAYER *rl, SSL *s);
205
+ void RECORD_LAYER_clear(RECORD_LAYER *rl);
206
+ void RECORD_LAYER_release(RECORD_LAYER *rl);
207
+ int RECORD_LAYER_read_pending(const RECORD_LAYER *rl);
208
+ int RECORD_LAYER_write_pending(const RECORD_LAYER *rl);
209
+ int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len);
210
+ void RECORD_LAYER_reset_read_sequence(RECORD_LAYER *rl);
211
+ void RECORD_LAYER_reset_write_sequence(RECORD_LAYER *rl);
212
+ int RECORD_LAYER_is_sslv2_record(RECORD_LAYER *rl);
213
+ unsigned int RECORD_LAYER_get_rrec_length(RECORD_LAYER *rl);
214
+ __owur int ssl3_pending(const SSL *s);
215
+ __owur int ssl3_write_bytes(SSL *s, int type, const void *buf, int len);
216
+ __owur int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
217
+ unsigned int *pipelens, unsigned int numpipes,
218
+ int create_empty_fragment);
219
+ __owur int ssl3_read_bytes(SSL *s, int type, int *recvd_type,
220
+ unsigned char *buf, int len, int peek);
221
+ __owur int ssl3_setup_buffers(SSL *s);
222
+ __owur int ssl3_enc(SSL *s, SSL3_RECORD *inrecs, unsigned int n_recs, int send);
223
+ __owur int n_ssl3_mac(SSL *ssl, SSL3_RECORD *rec, unsigned char *md, int send);
224
+ __owur int ssl3_write_pending(SSL *s, int type, const unsigned char *buf,
225
+ unsigned int len);
226
+ __owur int tls1_enc(SSL *s, SSL3_RECORD *recs, unsigned int n_recs, int send);
227
+ __owur int tls1_mac(SSL *ssl, SSL3_RECORD *rec, unsigned char *md, int send);
228
+ int DTLS_RECORD_LAYER_new(RECORD_LAYER *rl);
229
+ void DTLS_RECORD_LAYER_free(RECORD_LAYER *rl);
230
+ void DTLS_RECORD_LAYER_clear(RECORD_LAYER *rl);
231
+ void DTLS_RECORD_LAYER_set_saved_w_epoch(RECORD_LAYER *rl, unsigned short e);
232
+ void DTLS_RECORD_LAYER_clear(RECORD_LAYER *rl);
233
+ void DTLS_RECORD_LAYER_resync_write(RECORD_LAYER *rl);
234
+ void DTLS_RECORD_LAYER_set_write_sequence(RECORD_LAYER *rl, unsigned char *seq);
235
+ __owur int dtls1_read_bytes(SSL *s, int type, int *recvd_type,
236
+ unsigned char *buf, int len, int peek);
237
+ __owur int dtls1_write_bytes(SSL *s, int type, const void *buf, int len);
238
+ __owur int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
239
+ unsigned int len, int create_empty_fragement);
240
+ void dtls1_reset_seq_numbers(SSL *s, int rw);
@@ -0,0 +1,114 @@
1
+ /*
2
+ * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3
+ *
4
+ * Licensed under the OpenSSL license (the "License"). You may not use
5
+ * this file except in compliance with the License. You can obtain a copy
6
+ * in the file LICENSE in the source distribution or at
7
+ * https://www.openssl.org/source/license.html
8
+ */
9
+
10
+ /*****************************************************************************
11
+ * *
12
+ * The following macros/functions are PRIVATE to the record layer. They *
13
+ * should NOT be used outside of the record layer. *
14
+ * *
15
+ *****************************************************************************/
16
+
17
+ /* Functions/macros provided by the RECORD_LAYER component */
18
+
19
+ #define RECORD_LAYER_get_rbuf(rl) (&(rl)->rbuf)
20
+ #define RECORD_LAYER_get_wbuf(rl) ((rl)->wbuf)
21
+ #define RECORD_LAYER_get_rrec(rl) ((rl)->rrec)
22
+ #define RECORD_LAYER_set_packet(rl, p) ((rl)->packet = (p))
23
+ #define RECORD_LAYER_reset_packet_length(rl) ((rl)->packet_length = 0)
24
+ #define RECORD_LAYER_get_rstate(rl) ((rl)->rstate)
25
+ #define RECORD_LAYER_set_rstate(rl, st) ((rl)->rstate = (st))
26
+ #define RECORD_LAYER_get_read_sequence(rl) ((rl)->read_sequence)
27
+ #define RECORD_LAYER_get_write_sequence(rl) ((rl)->write_sequence)
28
+ #define RECORD_LAYER_get_numrpipes(rl) ((rl)->numrpipes)
29
+ #define RECORD_LAYER_set_numrpipes(rl, n) ((rl)->numrpipes = (n))
30
+ #define RECORD_LAYER_inc_empty_record_count(rl) ((rl)->empty_record_count++)
31
+ #define RECORD_LAYER_reset_empty_record_count(rl) \
32
+ ((rl)->empty_record_count = 0)
33
+ #define RECORD_LAYER_get_empty_record_count(rl) ((rl)->empty_record_count)
34
+ #define RECORD_LAYER_is_first_record(rl) ((rl)->is_first_record)
35
+ #define RECORD_LAYER_set_first_record(rl) ((rl)->is_first_record = 1)
36
+ #define RECORD_LAYER_clear_first_record(rl) ((rl)->is_first_record = 0)
37
+ #define DTLS_RECORD_LAYER_get_r_epoch(rl) ((rl)->d->r_epoch)
38
+
39
+ __owur int ssl3_read_n(SSL *s, int n, int max, int extend, int clearold);
40
+
41
+ void RECORD_LAYER_set_write_sequence(RECORD_LAYER *rl, const unsigned char *ws);
42
+ DTLS1_BITMAP *dtls1_get_bitmap(SSL *s, SSL3_RECORD *rr,
43
+ unsigned int *is_next_epoch);
44
+ int dtls1_process_buffered_records(SSL *s);
45
+ int dtls1_retrieve_buffered_record(SSL *s, record_pqueue *queue);
46
+ int dtls1_buffer_record(SSL *s, record_pqueue *q, unsigned char *priority);
47
+ void ssl3_record_sequence_update(unsigned char *seq);
48
+
49
+ /* Functions provided by the DTLS1_BITMAP component */
50
+
51
+ int dtls1_record_replay_check(SSL *s, DTLS1_BITMAP *bitmap);
52
+ void dtls1_record_bitmap_update(SSL *s, DTLS1_BITMAP *bitmap);
53
+
54
+ /* Macros/functions provided by the SSL3_BUFFER component */
55
+
56
+ #define SSL3_BUFFER_get_buf(b) ((b)->buf)
57
+ #define SSL3_BUFFER_set_buf(b, n) ((b)->buf = (n))
58
+ #define SSL3_BUFFER_get_len(b) ((b)->len)
59
+ #define SSL3_BUFFER_set_len(b, l) ((b)->len = (l))
60
+ #define SSL3_BUFFER_get_left(b) ((b)->left)
61
+ #define SSL3_BUFFER_set_left(b, l) ((b)->left = (l))
62
+ #define SSL3_BUFFER_add_left(b, l) ((b)->left += (l))
63
+ #define SSL3_BUFFER_get_offset(b) ((b)->offset)
64
+ #define SSL3_BUFFER_set_offset(b, o) ((b)->offset = (o))
65
+ #define SSL3_BUFFER_add_offset(b, o) ((b)->offset += (o))
66
+ #define SSL3_BUFFER_is_initialised(b) ((b)->buf != NULL)
67
+ #define SSL3_BUFFER_set_default_len(b, l) ((b)->default_len = (l))
68
+
69
+ void SSL3_BUFFER_clear(SSL3_BUFFER *b);
70
+ void SSL3_BUFFER_set_data(SSL3_BUFFER *b, const unsigned char *d, int n);
71
+ void SSL3_BUFFER_release(SSL3_BUFFER *b);
72
+ __owur int ssl3_setup_read_buffer(SSL *s);
73
+ __owur int ssl3_setup_write_buffer(SSL *s, unsigned int numwpipes, size_t len);
74
+ int ssl3_release_read_buffer(SSL *s);
75
+ int ssl3_release_write_buffer(SSL *s);
76
+
77
+ /* Macros/functions provided by the SSL3_RECORD component */
78
+
79
+ #define SSL3_RECORD_get_type(r) ((r)->type)
80
+ #define SSL3_RECORD_set_type(r, t) ((r)->type = (t))
81
+ #define SSL3_RECORD_get_length(r) ((r)->length)
82
+ #define SSL3_RECORD_set_length(r, l) ((r)->length = (l))
83
+ #define SSL3_RECORD_add_length(r, l) ((r)->length += (l))
84
+ #define SSL3_RECORD_sub_length(r, l) ((r)->length -= (l))
85
+ #define SSL3_RECORD_get_data(r) ((r)->data)
86
+ #define SSL3_RECORD_set_data(r, d) ((r)->data = (d))
87
+ #define SSL3_RECORD_get_input(r) ((r)->input)
88
+ #define SSL3_RECORD_set_input(r, i) ((r)->input = (i))
89
+ #define SSL3_RECORD_reset_input(r) ((r)->input = (r)->data)
90
+ #define SSL3_RECORD_get_seq_num(r) ((r)->seq_num)
91
+ #define SSL3_RECORD_get_off(r) ((r)->off)
92
+ #define SSL3_RECORD_set_off(r, o) ((r)->off = (o))
93
+ #define SSL3_RECORD_add_off(r, o) ((r)->off += (o))
94
+ #define SSL3_RECORD_get_epoch(r) ((r)->epoch)
95
+ #define SSL3_RECORD_is_sslv2_record(r) \
96
+ ((r)->rec_version == SSL2_VERSION)
97
+ #define SSL3_RECORD_is_read(r) ((r)->read)
98
+ #define SSL3_RECORD_set_read(r) ((r)->read = 1)
99
+
100
+ void SSL3_RECORD_clear(SSL3_RECORD *r, unsigned int num_recs);
101
+ void SSL3_RECORD_release(SSL3_RECORD *r, unsigned int num_recs);
102
+ void SSL3_RECORD_set_seq_num(SSL3_RECORD *r, const unsigned char *seq_num);
103
+ int ssl3_get_record(SSL *s);
104
+ __owur int ssl3_do_compress(SSL *ssl, SSL3_RECORD *wr);
105
+ __owur int ssl3_do_uncompress(SSL *ssl, SSL3_RECORD *rr);
106
+ void ssl3_cbc_copy_mac(unsigned char *out,
107
+ const SSL3_RECORD *rec, unsigned md_size);
108
+ __owur int ssl3_cbc_remove_padding(SSL3_RECORD *rec,
109
+ unsigned block_size, unsigned mac_size);
110
+ __owur int tls1_cbc_remove_padding(const SSL *s,
111
+ SSL3_RECORD *rec,
112
+ unsigned block_size, unsigned mac_size);
113
+ int dtls1_process_record(SSL *s, DTLS1_BITMAP *bitmap);
114
+ __owur int dtls1_get_record(SSL *s);
@@ -0,0 +1,2127 @@
1
+ /*
2
+ * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3
+ *
4
+ * Licensed under the OpenSSL license (the "License"). You may not use
5
+ * this file except in compliance with the License. You can obtain a copy
6
+ * in the file LICENSE in the source distribution or at
7
+ * https://www.openssl.org/source/license.html
8
+ */
9
+
10
+ /* ====================================================================
11
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
12
+ * ECC cipher suite support in OpenSSL originally developed by
13
+ * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
14
+ */
15
+ /* ====================================================================
16
+ * Copyright 2005 Nokia. All rights reserved.
17
+ *
18
+ * The portions of the attached software ("Contribution") is developed by
19
+ * Nokia Corporation and is licensed pursuant to the OpenSSL open source
20
+ * license.
21
+ *
22
+ * The Contribution, originally written by Mika Kousa and Pasi Eronen of
23
+ * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
24
+ * support (see RFC 4279) to OpenSSL.
25
+ *
26
+ * No patent licenses or other rights except those expressly stated in
27
+ * the OpenSSL open source license shall be deemed granted or received
28
+ * expressly, by implication, estoppel, or otherwise.
29
+ *
30
+ * No assurances are provided by Nokia that the Contribution does not
31
+ * infringe the patent or other intellectual property rights of any third
32
+ * party or that the license provides you with all the necessary rights
33
+ * to make use of the Contribution.
34
+ *
35
+ * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
36
+ * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
37
+ * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
38
+ * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
39
+ * OTHERWISE.
40
+ */
41
+
42
+ #ifndef HEADER_SSL_LOCL_H
43
+ # define HEADER_SSL_LOCL_H
44
+ # include <stdlib.h>
45
+ # include <time.h>
46
+ # include <string.h>
47
+ # include <errno.h>
48
+
49
+ # include "e_os.h"
50
+ # if defined(__unix) || defined(__unix__)
51
+ # include <sys/time.h> /* struct timeval for DTLS */
52
+ # endif
53
+
54
+ # include <openssl/buffer.h>
55
+ # include <openssl/comp.h>
56
+ # include <openssl/bio.h>
57
+ # include <openssl/stack.h>
58
+ # include <openssl/rsa.h>
59
+ # include <openssl/dsa.h>
60
+ # include <openssl/err.h>
61
+ # include <openssl/ssl.h>
62
+ # include <openssl/async.h>
63
+ # include <openssl/symhacks.h>
64
+ # include <openssl/ct.h>
65
+ # include "record/record.h"
66
+ # include "statem/statem.h"
67
+ # include "packet_locl.h"
68
+ # include "internal/dane.h"
69
+
70
+ # ifdef OPENSSL_BUILD_SHLIBSSL
71
+ # undef OPENSSL_EXTERN
72
+ # define OPENSSL_EXTERN OPENSSL_EXPORT
73
+ # endif
74
+
75
+ # undef PKCS1_CHECK
76
+
77
+ # define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \
78
+ l|=(((unsigned long)(*((c)++)))<< 8), \
79
+ l|=(((unsigned long)(*((c)++)))<<16), \
80
+ l|=(((unsigned long)(*((c)++)))<<24))
81
+
82
+ /* NOTE - c is not incremented as per c2l */
83
+ # define c2ln(c,l1,l2,n) { \
84
+ c+=n; \
85
+ l1=l2=0; \
86
+ switch (n) { \
87
+ case 8: l2 =((unsigned long)(*(--(c))))<<24; \
88
+ case 7: l2|=((unsigned long)(*(--(c))))<<16; \
89
+ case 6: l2|=((unsigned long)(*(--(c))))<< 8; \
90
+ case 5: l2|=((unsigned long)(*(--(c)))); \
91
+ case 4: l1 =((unsigned long)(*(--(c))))<<24; \
92
+ case 3: l1|=((unsigned long)(*(--(c))))<<16; \
93
+ case 2: l1|=((unsigned long)(*(--(c))))<< 8; \
94
+ case 1: l1|=((unsigned long)(*(--(c)))); \
95
+ } \
96
+ }
97
+
98
+ # define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
99
+ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
100
+ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
101
+ *((c)++)=(unsigned char)(((l)>>24)&0xff))
102
+
103
+ # define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24, \
104
+ l|=((unsigned long)(*((c)++)))<<16, \
105
+ l|=((unsigned long)(*((c)++)))<< 8, \
106
+ l|=((unsigned long)(*((c)++))))
107
+
108
+ # define n2l8(c,l) (l =((uint64_t)(*((c)++)))<<56, \
109
+ l|=((uint64_t)(*((c)++)))<<48, \
110
+ l|=((uint64_t)(*((c)++)))<<40, \
111
+ l|=((uint64_t)(*((c)++)))<<32, \
112
+ l|=((uint64_t)(*((c)++)))<<24, \
113
+ l|=((uint64_t)(*((c)++)))<<16, \
114
+ l|=((uint64_t)(*((c)++)))<< 8, \
115
+ l|=((uint64_t)(*((c)++))))
116
+
117
+
118
+ # define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
119
+ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
120
+ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
121
+ *((c)++)=(unsigned char)(((l) )&0xff))
122
+
123
+ # define l2n6(l,c) (*((c)++)=(unsigned char)(((l)>>40)&0xff), \
124
+ *((c)++)=(unsigned char)(((l)>>32)&0xff), \
125
+ *((c)++)=(unsigned char)(((l)>>24)&0xff), \
126
+ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
127
+ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
128
+ *((c)++)=(unsigned char)(((l) )&0xff))
129
+
130
+ # define l2n8(l,c) (*((c)++)=(unsigned char)(((l)>>56)&0xff), \
131
+ *((c)++)=(unsigned char)(((l)>>48)&0xff), \
132
+ *((c)++)=(unsigned char)(((l)>>40)&0xff), \
133
+ *((c)++)=(unsigned char)(((l)>>32)&0xff), \
134
+ *((c)++)=(unsigned char)(((l)>>24)&0xff), \
135
+ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
136
+ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
137
+ *((c)++)=(unsigned char)(((l) )&0xff))
138
+
139
+ /* NOTE - c is not incremented as per l2c */
140
+ # define l2cn(l1,l2,c,n) { \
141
+ c+=n; \
142
+ switch (n) { \
143
+ case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
144
+ case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
145
+ case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
146
+ case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
147
+ case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
148
+ case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
149
+ case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
150
+ case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
151
+ } \
152
+ }
153
+
154
+ # define n2s(c,s) ((s=(((unsigned int)((c)[0]))<< 8)| \
155
+ (((unsigned int)((c)[1])) )),(c)+=2)
156
+ # define s2n(s,c) (((c)[0]=(unsigned char)(((s)>> 8)&0xff), \
157
+ (c)[1]=(unsigned char)(((s) )&0xff)),(c)+=2)
158
+
159
+ # define n2l3(c,l) ((l =(((unsigned long)((c)[0]))<<16)| \
160
+ (((unsigned long)((c)[1]))<< 8)| \
161
+ (((unsigned long)((c)[2])) )),(c)+=3)
162
+
163
+ # define l2n3(l,c) (((c)[0]=(unsigned char)(((l)>>16)&0xff), \
164
+ (c)[1]=(unsigned char)(((l)>> 8)&0xff), \
165
+ (c)[2]=(unsigned char)(((l) )&0xff)),(c)+=3)
166
+
167
+ /*
168
+ * DTLS version numbers are strange because they're inverted. Except for
169
+ * DTLS1_BAD_VER, which should be considered "lower" than the rest.
170
+ */
171
+ # define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
172
+ # define DTLS_VERSION_GT(v1, v2) (dtls_ver_ordinal(v1) < dtls_ver_ordinal(v2))
173
+ # define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
174
+ # define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))
175
+ # define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))
176
+
177
+ /* LOCAL STUFF */
178
+
179
+ # define SSL_DECRYPT 0
180
+ # define SSL_ENCRYPT 1
181
+
182
+ # define TWO_BYTE_BIT 0x80
183
+ # define SEC_ESC_BIT 0x40
184
+ # define TWO_BYTE_MASK 0x7fff
185
+ # define THREE_BYTE_MASK 0x3fff
186
+
187
+ # define INC32(a) ((a)=((a)+1)&0xffffffffL)
188
+ # define DEC32(a) ((a)=((a)-1)&0xffffffffL)
189
+ # define MAX_MAC_SIZE 20 /* up from 16 for SSLv3 */
190
+
191
+ /*
192
+ * Define the Bitmasks for SSL_CIPHER.algorithms.
193
+ * This bits are used packed as dense as possible. If new methods/ciphers
194
+ * etc will be added, the bits a likely to change, so this information
195
+ * is for internal library use only, even though SSL_CIPHER.algorithms
196
+ * can be publicly accessed.
197
+ * Use the according functions for cipher management instead.
198
+ *
199
+ * The bit mask handling in the selection and sorting scheme in
200
+ * ssl_create_cipher_list() has only limited capabilities, reflecting
201
+ * that the different entities within are mutually exclusive:
202
+ * ONLY ONE BIT PER MASK CAN BE SET AT A TIME.
203
+ */
204
+
205
+ /* Bits for algorithm_mkey (key exchange algorithm) */
206
+ /* RSA key exchange */
207
+ # define SSL_kRSA 0x00000001U
208
+ /* tmp DH key no DH cert */
209
+ # define SSL_kDHE 0x00000002U
210
+ /* synonym */
211
+ # define SSL_kEDH SSL_kDHE
212
+ /* ephemeral ECDH */
213
+ # define SSL_kECDHE 0x00000004U
214
+ /* synonym */
215
+ # define SSL_kEECDH SSL_kECDHE
216
+ /* PSK */
217
+ # define SSL_kPSK 0x00000008U
218
+ /* GOST key exchange */
219
+ # define SSL_kGOST 0x00000010U
220
+ /* SRP */
221
+ # define SSL_kSRP 0x00000020U
222
+
223
+ # define SSL_kRSAPSK 0x00000040U
224
+ # define SSL_kECDHEPSK 0x00000080U
225
+ # define SSL_kDHEPSK 0x00000100U
226
+
227
+ /* all PSK */
228
+
229
+ # define SSL_PSK (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
230
+
231
+ /* Bits for algorithm_auth (server authentication) */
232
+ /* RSA auth */
233
+ # define SSL_aRSA 0x00000001U
234
+ /* DSS auth */
235
+ # define SSL_aDSS 0x00000002U
236
+ /* no auth (i.e. use ADH or AECDH) */
237
+ # define SSL_aNULL 0x00000004U
238
+ /* ECDSA auth*/
239
+ # define SSL_aECDSA 0x00000008U
240
+ /* PSK auth */
241
+ # define SSL_aPSK 0x00000010U
242
+ /* GOST R 34.10-2001 signature auth */
243
+ # define SSL_aGOST01 0x00000020U
244
+ /* SRP auth */
245
+ # define SSL_aSRP 0x00000040U
246
+ /* GOST R 34.10-2012 signature auth */
247
+ # define SSL_aGOST12 0x00000080U
248
+
249
+ /* Bits for algorithm_enc (symmetric encryption) */
250
+ # define SSL_DES 0x00000001U
251
+ # define SSL_3DES 0x00000002U
252
+ # define SSL_RC4 0x00000004U
253
+ # define SSL_RC2 0x00000008U
254
+ # define SSL_IDEA 0x00000010U
255
+ # define SSL_eNULL 0x00000020U
256
+ # define SSL_AES128 0x00000040U
257
+ # define SSL_AES256 0x00000080U
258
+ # define SSL_CAMELLIA128 0x00000100U
259
+ # define SSL_CAMELLIA256 0x00000200U
260
+ # define SSL_eGOST2814789CNT 0x00000400U
261
+ # define SSL_SEED 0x00000800U
262
+ # define SSL_AES128GCM 0x00001000U
263
+ # define SSL_AES256GCM 0x00002000U
264
+ # define SSL_AES128CCM 0x00004000U
265
+ # define SSL_AES256CCM 0x00008000U
266
+ # define SSL_AES128CCM8 0x00010000U
267
+ # define SSL_AES256CCM8 0x00020000U
268
+ # define SSL_eGOST2814789CNT12 0x00040000U
269
+ # define SSL_CHACHA20POLY1305 0x00080000U
270
+
271
+ # define SSL_AESGCM (SSL_AES128GCM | SSL_AES256GCM)
272
+ # define SSL_AESCCM (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)
273
+ # define SSL_AES (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)
274
+ # define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256)
275
+ # define SSL_CHACHA20 (SSL_CHACHA20POLY1305)
276
+
277
+ /* Bits for algorithm_mac (symmetric authentication) */
278
+
279
+ # define SSL_MD5 0x00000001U
280
+ # define SSL_SHA1 0x00000002U
281
+ # define SSL_GOST94 0x00000004U
282
+ # define SSL_GOST89MAC 0x00000008U
283
+ # define SSL_SHA256 0x00000010U
284
+ # define SSL_SHA384 0x00000020U
285
+ /* Not a real MAC, just an indication it is part of cipher */
286
+ # define SSL_AEAD 0x00000040U
287
+ # define SSL_GOST12_256 0x00000080U
288
+ # define SSL_GOST89MAC12 0x00000100U
289
+ # define SSL_GOST12_512 0x00000200U
290
+
291
+ /*
292
+ * When adding new digest in the ssl_ciph.c and increment SSL_MD_NUM_IDX make
293
+ * sure to update this constant too
294
+ */
295
+
296
+ # define SSL_MD_MD5_IDX 0
297
+ # define SSL_MD_SHA1_IDX 1
298
+ # define SSL_MD_GOST94_IDX 2
299
+ # define SSL_MD_GOST89MAC_IDX 3
300
+ # define SSL_MD_SHA256_IDX 4
301
+ # define SSL_MD_SHA384_IDX 5
302
+ # define SSL_MD_GOST12_256_IDX 6
303
+ # define SSL_MD_GOST89MAC12_IDX 7
304
+ # define SSL_MD_GOST12_512_IDX 8
305
+ # define SSL_MD_MD5_SHA1_IDX 9
306
+ # define SSL_MD_SHA224_IDX 10
307
+ # define SSL_MD_SHA512_IDX 11
308
+ # define SSL_MAX_DIGEST 12
309
+
310
+ /* Bits for algorithm2 (handshake digests and other extra flags) */
311
+
312
+ /* Bits 0-7 are handshake MAC */
313
+ # define SSL_HANDSHAKE_MAC_MASK 0xFF
314
+ # define SSL_HANDSHAKE_MAC_MD5_SHA1 SSL_MD_MD5_SHA1_IDX
315
+ # define SSL_HANDSHAKE_MAC_SHA256 SSL_MD_SHA256_IDX
316
+ # define SSL_HANDSHAKE_MAC_SHA384 SSL_MD_SHA384_IDX
317
+ # define SSL_HANDSHAKE_MAC_GOST94 SSL_MD_GOST94_IDX
318
+ # define SSL_HANDSHAKE_MAC_GOST12_256 SSL_MD_GOST12_256_IDX
319
+ # define SSL_HANDSHAKE_MAC_GOST12_512 SSL_MD_GOST12_512_IDX
320
+ # define SSL_HANDSHAKE_MAC_DEFAULT SSL_HANDSHAKE_MAC_MD5_SHA1
321
+
322
+ /* Bits 8-15 bits are PRF */
323
+ # define TLS1_PRF_DGST_SHIFT 8
324
+ # define TLS1_PRF_SHA1_MD5 (SSL_MD_MD5_SHA1_IDX << TLS1_PRF_DGST_SHIFT)
325
+ # define TLS1_PRF_SHA256 (SSL_MD_SHA256_IDX << TLS1_PRF_DGST_SHIFT)
326
+ # define TLS1_PRF_SHA384 (SSL_MD_SHA384_IDX << TLS1_PRF_DGST_SHIFT)
327
+ # define TLS1_PRF_GOST94 (SSL_MD_GOST94_IDX << TLS1_PRF_DGST_SHIFT)
328
+ # define TLS1_PRF_GOST12_256 (SSL_MD_GOST12_256_IDX << TLS1_PRF_DGST_SHIFT)
329
+ # define TLS1_PRF_GOST12_512 (SSL_MD_GOST12_512_IDX << TLS1_PRF_DGST_SHIFT)
330
+ # define TLS1_PRF (SSL_MD_MD5_SHA1_IDX << TLS1_PRF_DGST_SHIFT)
331
+
332
+ /*
333
+ * Stream MAC for GOST ciphersuites from cryptopro draft (currently this also
334
+ * goes into algorithm2)
335
+ */
336
+ # define TLS1_STREAM_MAC 0x10000
337
+
338
+ # define SSL_STRONG_MASK 0x0000001FU
339
+ # define SSL_DEFAULT_MASK 0X00000020U
340
+
341
+ # define SSL_STRONG_NONE 0x00000001U
342
+ # define SSL_LOW 0x00000002U
343
+ # define SSL_MEDIUM 0x00000004U
344
+ # define SSL_HIGH 0x00000008U
345
+ # define SSL_FIPS 0x00000010U
346
+ # define SSL_NOT_DEFAULT 0x00000020U
347
+
348
+ /* we have used 0000003f - 26 bits left to go */
349
+
350
+ /* Check if an SSL structure is using DTLS */
351
+ # define SSL_IS_DTLS(s) (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
352
+ /* See if we need explicit IV */
353
+ # define SSL_USE_EXPLICIT_IV(s) \
354
+ (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
355
+ /*
356
+ * See if we use signature algorithms extension and signature algorithm
357
+ * before signatures.
358
+ */
359
+ # define SSL_USE_SIGALGS(s) \
360
+ (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SIGALGS)
361
+ /*
362
+ * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
363
+ * apply to others in future.
364
+ */
365
+ # define SSL_USE_TLS1_2_CIPHERS(s) \
366
+ (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)
367
+ /*
368
+ * Determine if a client can use TLS 1.2 ciphersuites: can't rely on method
369
+ * flags because it may not be set to correct version yet.
370
+ */
371
+ # define SSL_CLIENT_USE_TLS1_2_CIPHERS(s) \
372
+ ((!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION) || \
373
+ (SSL_IS_DTLS(s) && DTLS_VERSION_GE(s->client_version, DTLS1_2_VERSION)))
374
+ /*
375
+ * Determine if a client should send signature algorithms extension:
376
+ * as with TLS1.2 cipher we can't rely on method flags.
377
+ */
378
+ # define SSL_CLIENT_USE_SIGALGS(s) \
379
+ SSL_CLIENT_USE_TLS1_2_CIPHERS(s)
380
+
381
+ # define SSL_USE_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC)
382
+
383
+ /* Mostly for SSLv3 */
384
+ # define SSL_PKEY_RSA_ENC 0
385
+ # define SSL_PKEY_RSA_SIGN 1
386
+ # define SSL_PKEY_DSA_SIGN 2
387
+ # define SSL_PKEY_ECC 3
388
+ # define SSL_PKEY_GOST01 4
389
+ # define SSL_PKEY_GOST12_256 5
390
+ # define SSL_PKEY_GOST12_512 6
391
+ # define SSL_PKEY_NUM 7
392
+ /*
393
+ * Pseudo-constant. GOST cipher suites can use different certs for 1
394
+ * SSL_CIPHER. So let's see which one we have in fact.
395
+ */
396
+ # define SSL_PKEY_GOST_EC SSL_PKEY_NUM+1
397
+
398
+ /*-
399
+ * SSL_kRSA <- RSA_ENC
400
+ * SSL_kDH <- DH_ENC & (RSA_ENC | RSA_SIGN | DSA_SIGN)
401
+ * SSL_kDHE <- RSA_ENC | RSA_SIGN | DSA_SIGN
402
+ * SSL_aRSA <- RSA_ENC | RSA_SIGN
403
+ * SSL_aDSS <- DSA_SIGN
404
+ */
405
+
406
+ /*-
407
+ #define CERT_INVALID 0
408
+ #define CERT_PUBLIC_KEY 1
409
+ #define CERT_PRIVATE_KEY 2
410
+ */
411
+
412
+ /* CipherSuite length. SSLv3 and all TLS versions. */
413
+ # define TLS_CIPHER_LEN 2
414
+ /* used to hold info on the particular ciphers used */
415
+ struct ssl_cipher_st {
416
+ uint32_t valid;
417
+ const char *name; /* text name */
418
+ uint32_t id; /* id, 4 bytes, first is version */
419
+ /*
420
+ * changed in 1.0.0: these four used to be portions of a single value
421
+ * 'algorithms'
422
+ */
423
+ uint32_t algorithm_mkey; /* key exchange algorithm */
424
+ uint32_t algorithm_auth; /* server authentication */
425
+ uint32_t algorithm_enc; /* symmetric encryption */
426
+ uint32_t algorithm_mac; /* symmetric authentication */
427
+ int min_tls; /* minimum SSL/TLS protocol version */
428
+ int max_tls; /* maximum SSL/TLS protocol version */
429
+ int min_dtls; /* minimum DTLS protocol version */
430
+ int max_dtls; /* maximum DTLS protocol version */
431
+ uint32_t algo_strength; /* strength and export flags */
432
+ uint32_t algorithm2; /* Extra flags */
433
+ int32_t strength_bits; /* Number of bits really used */
434
+ uint32_t alg_bits; /* Number of bits for algorithm */
435
+ };
436
+
437
+ /* Used to hold SSL/TLS functions */
438
+ struct ssl_method_st {
439
+ int version;
440
+ unsigned flags;
441
+ unsigned long mask;
442
+ int (*ssl_new) (SSL *s);
443
+ void (*ssl_clear) (SSL *s);
444
+ void (*ssl_free) (SSL *s);
445
+ int (*ssl_accept) (SSL *s);
446
+ int (*ssl_connect) (SSL *s);
447
+ int (*ssl_read) (SSL *s, void *buf, int len);
448
+ int (*ssl_peek) (SSL *s, void *buf, int len);
449
+ int (*ssl_write) (SSL *s, const void *buf, int len);
450
+ int (*ssl_shutdown) (SSL *s);
451
+ int (*ssl_renegotiate) (SSL *s);
452
+ int (*ssl_renegotiate_check) (SSL *s);
453
+ int (*ssl_read_bytes) (SSL *s, int type, int *recvd_type,
454
+ unsigned char *buf, int len, int peek);
455
+ int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len);
456
+ int (*ssl_dispatch_alert) (SSL *s);
457
+ long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg);
458
+ long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg);
459
+ const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr);
460
+ int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr);
461
+ int (*ssl_pending) (const SSL *s);
462
+ int (*num_ciphers) (void);
463
+ const SSL_CIPHER *(*get_cipher) (unsigned ncipher);
464
+ long (*get_timeout) (void);
465
+ const struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
466
+ int (*ssl_version) (void);
467
+ long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void));
468
+ long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void));
469
+ };
470
+
471
+ /*-
472
+ * Lets make this into an ASN.1 type structure as follows
473
+ * SSL_SESSION_ID ::= SEQUENCE {
474
+ * version INTEGER, -- structure version number
475
+ * SSLversion INTEGER, -- SSL version number
476
+ * Cipher OCTET STRING, -- the 3 byte cipher ID
477
+ * Session_ID OCTET STRING, -- the Session ID
478
+ * Master_key OCTET STRING, -- the master key
479
+ * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument
480
+ * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time
481
+ * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds
482
+ * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate
483
+ * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context
484
+ * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer'
485
+ * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension
486
+ * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint
487
+ * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity
488
+ * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket
489
+ * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only)
490
+ * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method
491
+ * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username
492
+ * flags [ 13 ] EXPLICIT INTEGER -- optional flags
493
+ * }
494
+ * Look in ssl/ssl_asn1.c for more details
495
+ * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
496
+ */
497
+ struct ssl_session_st {
498
+ int ssl_version; /* what ssl version session info is being kept
499
+ * in here? */
500
+ int master_key_length;
501
+ unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
502
+ /* session_id - valid? */
503
+ unsigned int session_id_length;
504
+ unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
505
+ /*
506
+ * this is used to determine whether the session is being reused in the
507
+ * appropriate context. It is up to the application to set this, via
508
+ * SSL_new
509
+ */
510
+ unsigned int sid_ctx_length;
511
+ unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
512
+ # ifndef OPENSSL_NO_PSK
513
+ char *psk_identity_hint;
514
+ char *psk_identity;
515
+ # endif
516
+ /*
517
+ * Used to indicate that session resumption is not allowed. Applications
518
+ * can also set this bit for a new session via not_resumable_session_cb
519
+ * to disable session caching and tickets.
520
+ */
521
+ int not_resumable;
522
+ /* This is the cert and type for the other end. */
523
+ X509 *peer;
524
+ int peer_type;
525
+ /* Certificate chain peer sent */
526
+ STACK_OF(X509) *peer_chain;
527
+ /*
528
+ * when app_verify_callback accepts a session where the peer's
529
+ * certificate is not ok, we must remember the error for session reuse:
530
+ */
531
+ long verify_result; /* only for servers */
532
+ int references;
533
+ long timeout;
534
+ long time;
535
+ unsigned int compress_meth; /* Need to lookup the method */
536
+ const SSL_CIPHER *cipher;
537
+ unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used to
538
+ * load the 'cipher' structure */
539
+ STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */
540
+ CRYPTO_EX_DATA ex_data; /* application specific data */
541
+ /*
542
+ * These are used to make removal of session-ids more efficient and to
543
+ * implement a maximum cache size.
544
+ */
545
+ struct ssl_session_st *prev, *next;
546
+ char *tlsext_hostname;
547
+ # ifndef OPENSSL_NO_EC
548
+ size_t tlsext_ecpointformatlist_length;
549
+ unsigned char *tlsext_ecpointformatlist; /* peer's list */
550
+ size_t tlsext_ellipticcurvelist_length;
551
+ unsigned char *tlsext_ellipticcurvelist; /* peer's list */
552
+ # endif /* OPENSSL_NO_EC */
553
+ /* RFC4507 info */
554
+ unsigned char *tlsext_tick; /* Session ticket */
555
+ size_t tlsext_ticklen; /* Session ticket length */
556
+ unsigned long tlsext_tick_lifetime_hint; /* Session lifetime hint in
557
+ * seconds */
558
+ # ifndef OPENSSL_NO_SRP
559
+ char *srp_username;
560
+ # endif
561
+ uint32_t flags;
562
+ CRYPTO_RWLOCK *lock;
563
+ };
564
+
565
+ /* Extended master secret support */
566
+ # define SSL_SESS_FLAG_EXTMS 0x1
567
+
568
+ # ifndef OPENSSL_NO_SRP
569
+
570
+ typedef struct srp_ctx_st {
571
+ /* param for all the callbacks */
572
+ void *SRP_cb_arg;
573
+ /* set client Hello login callback */
574
+ int (*TLS_ext_srp_username_callback) (SSL *, int *, void *);
575
+ /* set SRP N/g param callback for verification */
576
+ int (*SRP_verify_param_callback) (SSL *, void *);
577
+ /* set SRP client passwd callback */
578
+ char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *);
579
+ char *login;
580
+ BIGNUM *N, *g, *s, *B, *A;
581
+ BIGNUM *a, *b, *v;
582
+ char *info;
583
+ int strength;
584
+ unsigned long srp_Mask;
585
+ } SRP_CTX;
586
+
587
+ # endif
588
+
589
+ struct ssl_comp_st {
590
+ int id;
591
+ const char *name;
592
+ COMP_METHOD *method;
593
+ };
594
+
595
+ DEFINE_LHASH_OF(SSL_SESSION);
596
+ /* Needed in ssl_cert.c */
597
+ DEFINE_LHASH_OF(X509_NAME);
598
+
599
+ # define TLSEXT_KEYNAME_LENGTH 16
600
+
601
+ struct ssl_ctx_st {
602
+ const SSL_METHOD *method;
603
+ STACK_OF(SSL_CIPHER) *cipher_list;
604
+ /* same as above but sorted for lookup */
605
+ STACK_OF(SSL_CIPHER) *cipher_list_by_id;
606
+ struct x509_store_st /* X509_STORE */ *cert_store;
607
+ LHASH_OF(SSL_SESSION) *sessions;
608
+ /*
609
+ * Most session-ids that will be cached, default is
610
+ * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited.
611
+ */
612
+ unsigned long session_cache_size;
613
+ struct ssl_session_st *session_cache_head;
614
+ struct ssl_session_st *session_cache_tail;
615
+ /*
616
+ * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT,
617
+ * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which
618
+ * means only SSL_accept which cache SSL_SESSIONS.
619
+ */
620
+ uint32_t session_cache_mode;
621
+ /*
622
+ * If timeout is not 0, it is the default timeout value set when
623
+ * SSL_new() is called. This has been put in to make life easier to set
624
+ * things up
625
+ */
626
+ long session_timeout;
627
+ /*
628
+ * If this callback is not null, it will be called each time a session id
629
+ * is added to the cache. If this function returns 1, it means that the
630
+ * callback will do a SSL_SESSION_free() when it has finished using it.
631
+ * Otherwise, on 0, it means the callback has finished with it. If
632
+ * remove_session_cb is not null, it will be called when a session-id is
633
+ * removed from the cache. After the call, OpenSSL will
634
+ * SSL_SESSION_free() it.
635
+ */
636
+ int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess);
637
+ void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess);
638
+ SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl,
639
+ const unsigned char *data, int len,
640
+ int *copy);
641
+ struct {
642
+ int sess_connect; /* SSL new conn - started */
643
+ int sess_connect_renegotiate; /* SSL reneg - requested */
644
+ int sess_connect_good; /* SSL new conne/reneg - finished */
645
+ int sess_accept; /* SSL new accept - started */
646
+ int sess_accept_renegotiate; /* SSL reneg - requested */
647
+ int sess_accept_good; /* SSL accept/reneg - finished */
648
+ int sess_miss; /* session lookup misses */
649
+ int sess_timeout; /* reuse attempt on timeouted session */
650
+ int sess_cache_full; /* session removed due to full cache */
651
+ int sess_hit; /* session reuse actually done */
652
+ int sess_cb_hit; /* session-id that was not in the cache was
653
+ * passed back via the callback. This
654
+ * indicates that the application is supplying
655
+ * session-id's from other processes - spooky
656
+ * :-) */
657
+ } stats;
658
+
659
+ int references;
660
+
661
+ /* if defined, these override the X509_verify_cert() calls */
662
+ int (*app_verify_callback) (X509_STORE_CTX *, void *);
663
+ void *app_verify_arg;
664
+ /*
665
+ * before OpenSSL 0.9.7, 'app_verify_arg' was ignored
666
+ * ('app_verify_callback' was called with just one argument)
667
+ */
668
+
669
+ /* Default password callback. */
670
+ pem_password_cb *default_passwd_callback;
671
+
672
+ /* Default password callback user data. */
673
+ void *default_passwd_callback_userdata;
674
+
675
+ /* get client cert callback */
676
+ int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey);
677
+
678
+ /* cookie generate callback */
679
+ int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie,
680
+ unsigned int *cookie_len);
681
+
682
+ /* verify cookie callback */
683
+ int (*app_verify_cookie_cb) (SSL *ssl, const unsigned char *cookie,
684
+ unsigned int cookie_len);
685
+
686
+ CRYPTO_EX_DATA ex_data;
687
+
688
+ const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */
689
+ const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */
690
+
691
+ STACK_OF(X509) *extra_certs;
692
+ STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */
693
+
694
+ /* Default values used when no per-SSL value is defined follow */
695
+
696
+ /* used if SSL's info_callback is NULL */
697
+ void (*info_callback) (const SSL *ssl, int type, int val);
698
+
699
+ /* what we put in client cert requests */
700
+ STACK_OF(X509_NAME) *client_CA;
701
+
702
+ /*
703
+ * Default values to use in SSL structures follow (these are copied by
704
+ * SSL_new)
705
+ */
706
+
707
+ uint32_t options;
708
+ uint32_t mode;
709
+ int min_proto_version;
710
+ int max_proto_version;
711
+ long max_cert_list;
712
+
713
+ struct cert_st /* CERT */ *cert;
714
+ int read_ahead;
715
+
716
+ /* callback that allows applications to peek at protocol messages */
717
+ void (*msg_callback) (int write_p, int version, int content_type,
718
+ const void *buf, size_t len, SSL *ssl, void *arg);
719
+ void *msg_callback_arg;
720
+
721
+ uint32_t verify_mode;
722
+ unsigned int sid_ctx_length;
723
+ unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
724
+ /* called 'verify_callback' in the SSL */
725
+ int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx);
726
+
727
+ /* Default generate session ID callback. */
728
+ GEN_SESSION_CB generate_session_id;
729
+
730
+ X509_VERIFY_PARAM *param;
731
+
732
+ int quiet_shutdown;
733
+
734
+ # ifndef OPENSSL_NO_CT
735
+ CTLOG_STORE *ctlog_store; /* CT Log Store */
736
+ /*
737
+ * Validates that the SCTs (Signed Certificate Timestamps) are sufficient.
738
+ * If they are not, the connection should be aborted.
739
+ */
740
+ ssl_ct_validation_cb ct_validation_callback;
741
+ void *ct_validation_callback_arg;
742
+ # endif
743
+
744
+ /*
745
+ * If we're using more than one pipeline how should we divide the data
746
+ * up between the pipes?
747
+ */
748
+ unsigned int split_send_fragment;
749
+ /*
750
+ * Maximum amount of data to send in one fragment. actual record size can
751
+ * be more than this due to padding and MAC overheads.
752
+ */
753
+ unsigned int max_send_fragment;
754
+
755
+ /* Up to how many pipelines should we use? If 0 then 1 is assumed */
756
+ unsigned int max_pipelines;
757
+
758
+ /* The default read buffer length to use (0 means not set) */
759
+ size_t default_read_buf_len;
760
+
761
+ # ifndef OPENSSL_NO_ENGINE
762
+ /*
763
+ * Engine to pass requests for client certs to
764
+ */
765
+ ENGINE *client_cert_engine;
766
+ # endif
767
+
768
+ /* TLS extensions servername callback */
769
+ int (*tlsext_servername_callback) (SSL *, int *, void *);
770
+ void *tlsext_servername_arg;
771
+ /* RFC 4507 session ticket keys */
772
+ unsigned char tlsext_tick_key_name[TLSEXT_KEYNAME_LENGTH];
773
+ unsigned char tlsext_tick_hmac_key[32];
774
+ unsigned char tlsext_tick_aes_key[32];
775
+ /* Callback to support customisation of ticket key setting */
776
+ int (*tlsext_ticket_key_cb) (SSL *ssl,
777
+ unsigned char *name, unsigned char *iv,
778
+ EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc);
779
+
780
+ /* certificate status request info */
781
+ /* Callback for status request */
782
+ int (*tlsext_status_cb) (SSL *ssl, void *arg);
783
+ void *tlsext_status_arg;
784
+
785
+ # ifndef OPENSSL_NO_PSK
786
+ unsigned int (*psk_client_callback) (SSL *ssl, const char *hint,
787
+ char *identity,
788
+ unsigned int max_identity_len,
789
+ unsigned char *psk,
790
+ unsigned int max_psk_len);
791
+ unsigned int (*psk_server_callback) (SSL *ssl, const char *identity,
792
+ unsigned char *psk,
793
+ unsigned int max_psk_len);
794
+ # endif
795
+
796
+ # ifndef OPENSSL_NO_SRP
797
+ SRP_CTX srp_ctx; /* ctx for SRP authentication */
798
+ # endif
799
+
800
+ # ifndef OPENSSL_NO_NEXTPROTONEG
801
+ /* Next protocol negotiation information */
802
+
803
+ /*
804
+ * For a server, this contains a callback function by which the set of
805
+ * advertised protocols can be provided.
806
+ */
807
+ int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf,
808
+ unsigned int *len, void *arg);
809
+ void *next_protos_advertised_cb_arg;
810
+ /*
811
+ * For a client, this contains a callback function that selects the next
812
+ * protocol from the list provided by the server.
813
+ */
814
+ int (*next_proto_select_cb) (SSL *s, unsigned char **out,
815
+ unsigned char *outlen,
816
+ const unsigned char *in,
817
+ unsigned int inlen, void *arg);
818
+ void *next_proto_select_cb_arg;
819
+ # endif
820
+
821
+ /*
822
+ * ALPN information (we are in the process of transitioning from NPN to
823
+ * ALPN.)
824
+ */
825
+
826
+ /*-
827
+ * For a server, this contains a callback function that allows the
828
+ * server to select the protocol for the connection.
829
+ * out: on successful return, this must point to the raw protocol
830
+ * name (without the length prefix).
831
+ * outlen: on successful return, this contains the length of |*out|.
832
+ * in: points to the client's list of supported protocols in
833
+ * wire-format.
834
+ * inlen: the length of |in|.
835
+ */
836
+ int (*alpn_select_cb) (SSL *s,
837
+ const unsigned char **out,
838
+ unsigned char *outlen,
839
+ const unsigned char *in,
840
+ unsigned int inlen, void *arg);
841
+ void *alpn_select_cb_arg;
842
+
843
+ /*
844
+ * For a client, this contains the list of supported protocols in wire
845
+ * format.
846
+ */
847
+ unsigned char *alpn_client_proto_list;
848
+ unsigned alpn_client_proto_list_len;
849
+
850
+ /* Shared DANE context */
851
+ struct dane_ctx_st dane;
852
+
853
+ /* SRTP profiles we are willing to do from RFC 5764 */
854
+ STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
855
+ /*
856
+ * Callback for disabling session caching and ticket support on a session
857
+ * basis, depending on the chosen cipher.
858
+ */
859
+ int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);
860
+ # ifndef OPENSSL_NO_EC
861
+ /* EC extension values inherited by SSL structure */
862
+ size_t tlsext_ecpointformatlist_length;
863
+ unsigned char *tlsext_ecpointformatlist;
864
+ size_t tlsext_ellipticcurvelist_length;
865
+ unsigned char *tlsext_ellipticcurvelist;
866
+ # endif /* OPENSSL_NO_EC */
867
+
868
+ /* ext status type used for CSR extension (OCSP Stapling) */
869
+ int tlsext_status_type;
870
+
871
+ CRYPTO_RWLOCK *lock;
872
+ };
873
+
874
+ struct ssl_st {
875
+ /*
876
+ * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION,
877
+ * DTLS1_VERSION)
878
+ */
879
+ int version;
880
+ /* SSLv3 */
881
+ const SSL_METHOD *method;
882
+ /*
883
+ * There are 2 BIO's even though they are normally both the same. This
884
+ * is so data can be read and written to different handlers
885
+ */
886
+ /* used by SSL_read */
887
+ BIO *rbio;
888
+ /* used by SSL_write */
889
+ BIO *wbio;
890
+ /* used during session-id reuse to concatenate messages */
891
+ BIO *bbio;
892
+ /*
893
+ * This holds a variable that indicates what we were doing when a 0 or -1
894
+ * is returned. This is needed for non-blocking IO so we know what
895
+ * request needs re-doing when in SSL_accept or SSL_connect
896
+ */
897
+ int rwstate;
898
+ int (*handshake_func) (SSL *);
899
+ /*
900
+ * Imagine that here's a boolean member "init" that is switched as soon
901
+ * as SSL_set_{accept/connect}_state is called for the first time, so
902
+ * that "state" and "handshake_func" are properly initialized. But as
903
+ * handshake_func is == 0 until then, we use this test instead of an
904
+ * "init" member.
905
+ */
906
+ /* are we the server side? */
907
+ int server;
908
+ /*
909
+ * Generate a new session or reuse an old one.
910
+ * NB: For servers, the 'new' session may actually be a previously
911
+ * cached session or even the previous session unless
912
+ * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set
913
+ */
914
+ int new_session;
915
+ /* don't send shutdown packets */
916
+ int quiet_shutdown;
917
+ /* we have shut things down, 0x01 sent, 0x02 for received */
918
+ int shutdown;
919
+ /* where we are */
920
+ OSSL_STATEM statem;
921
+ BUF_MEM *init_buf; /* buffer used during init */
922
+ void *init_msg; /* pointer to handshake message body, set by
923
+ * ssl3_get_message() */
924
+ int init_num; /* amount read/written */
925
+ int init_off; /* amount read/written */
926
+ struct ssl3_state_st *s3; /* SSLv3 variables */
927
+ struct dtls1_state_st *d1; /* DTLSv1 variables */
928
+ /* callback that allows applications to peek at protocol messages */
929
+ void (*msg_callback) (int write_p, int version, int content_type,
930
+ const void *buf, size_t len, SSL *ssl, void *arg);
931
+ void *msg_callback_arg;
932
+ int hit; /* reusing a previous session */
933
+ X509_VERIFY_PARAM *param;
934
+ /* Per connection DANE state */
935
+ SSL_DANE dane;
936
+ /* crypto */
937
+ STACK_OF(SSL_CIPHER) *cipher_list;
938
+ STACK_OF(SSL_CIPHER) *cipher_list_by_id;
939
+ /*
940
+ * These are the ones being used, the ones in SSL_SESSION are the ones to
941
+ * be 'copied' into these ones
942
+ */
943
+ uint32_t mac_flags;
944
+ EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */
945
+ EVP_MD_CTX *read_hash; /* used for mac generation */
946
+ COMP_CTX *compress; /* compression */
947
+ COMP_CTX *expand; /* uncompress */
948
+ EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
949
+ EVP_MD_CTX *write_hash; /* used for mac generation */
950
+ /* session info */
951
+ /* client cert? */
952
+ /* This is used to hold the server certificate used */
953
+ struct cert_st /* CERT */ *cert;
954
+ /*
955
+ * the session_id_context is used to ensure sessions are only reused in
956
+ * the appropriate context
957
+ */
958
+ unsigned int sid_ctx_length;
959
+ unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
960
+ /* This can also be in the session once a session is established */
961
+ SSL_SESSION *session;
962
+ /* Default generate session ID callback. */
963
+ GEN_SESSION_CB generate_session_id;
964
+ /* Used in SSL3 */
965
+ /*
966
+ * 0 don't care about verify failure.
967
+ * 1 fail if verify fails
968
+ */
969
+ uint32_t verify_mode;
970
+ /* fail if callback returns 0 */
971
+ int (*verify_callback) (int ok, X509_STORE_CTX *ctx);
972
+ /* optional informational callback */
973
+ void (*info_callback) (const SSL *ssl, int type, int val);
974
+ /* error bytes to be written */
975
+ int error;
976
+ /* actual code */
977
+ int error_code;
978
+ # ifndef OPENSSL_NO_PSK
979
+ unsigned int (*psk_client_callback) (SSL *ssl, const char *hint,
980
+ char *identity,
981
+ unsigned int max_identity_len,
982
+ unsigned char *psk,
983
+ unsigned int max_psk_len);
984
+ unsigned int (*psk_server_callback) (SSL *ssl, const char *identity,
985
+ unsigned char *psk,
986
+ unsigned int max_psk_len);
987
+ # endif
988
+ SSL_CTX *ctx;
989
+ /* Verified chain of peer */
990
+ STACK_OF(X509) *verified_chain;
991
+ long verify_result;
992
+ /* extra application data */
993
+ CRYPTO_EX_DATA ex_data;
994
+ /* for server side, keep the list of CA_dn we can use */
995
+ STACK_OF(X509_NAME) *client_CA;
996
+ int references;
997
+ /* protocol behaviour */
998
+ uint32_t options;
999
+ /* API behaviour */
1000
+ uint32_t mode;
1001
+ int min_proto_version;
1002
+ int max_proto_version;
1003
+ long max_cert_list;
1004
+ int first_packet;
1005
+ /* what was passed, used for SSLv3/TLS rollback check */
1006
+ int client_version;
1007
+ /*
1008
+ * If we're using more than one pipeline how should we divide the data
1009
+ * up between the pipes?
1010
+ */
1011
+ unsigned int split_send_fragment;
1012
+ /*
1013
+ * Maximum amount of data to send in one fragment. actual record size can
1014
+ * be more than this due to padding and MAC overheads.
1015
+ */
1016
+ unsigned int max_send_fragment;
1017
+ /* Up to how many pipelines should we use? If 0 then 1 is assumed */
1018
+ unsigned int max_pipelines;
1019
+ /* TLS extension debug callback */
1020
+ void (*tlsext_debug_cb) (SSL *s, int client_server, int type,
1021
+ const unsigned char *data, int len, void *arg);
1022
+ void *tlsext_debug_arg;
1023
+ char *tlsext_hostname;
1024
+ /*-
1025
+ * no further mod of servername
1026
+ * 0 : call the servername extension callback.
1027
+ * 1 : prepare 2, allow last ack just after in server callback.
1028
+ * 2 : don't call servername callback, no ack in server hello
1029
+ */
1030
+ int servername_done;
1031
+ /* certificate status request info */
1032
+ /* Status type or -1 if no status type */
1033
+ int tlsext_status_type;
1034
+ # ifndef OPENSSL_NO_CT
1035
+ /*
1036
+ * Validates that the SCTs (Signed Certificate Timestamps) are sufficient.
1037
+ * If they are not, the connection should be aborted.
1038
+ */
1039
+ ssl_ct_validation_cb ct_validation_callback;
1040
+ /* User-supplied argument tha tis passed to the ct_validation_callback */
1041
+ void *ct_validation_callback_arg;
1042
+ /*
1043
+ * Consolidated stack of SCTs from all sources.
1044
+ * Lazily populated by CT_get_peer_scts(SSL*)
1045
+ */
1046
+ STACK_OF(SCT) *scts;
1047
+ /* Raw extension data, if seen */
1048
+ unsigned char *tlsext_scts;
1049
+ /* Length of raw extension data, if seen */
1050
+ uint16_t tlsext_scts_len;
1051
+ /* Have we attempted to find/parse SCTs yet? */
1052
+ int scts_parsed;
1053
+ # endif
1054
+ /* Expect OCSP CertificateStatus message */
1055
+ int tlsext_status_expected;
1056
+ /* OCSP status request only */
1057
+ STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids;
1058
+ X509_EXTENSIONS *tlsext_ocsp_exts;
1059
+ /* OCSP response received or to be sent */
1060
+ unsigned char *tlsext_ocsp_resp;
1061
+ int tlsext_ocsp_resplen;
1062
+ /* RFC4507 session ticket expected to be received or sent */
1063
+ int tlsext_ticket_expected;
1064
+ # ifndef OPENSSL_NO_EC
1065
+ size_t tlsext_ecpointformatlist_length;
1066
+ /* our list */
1067
+ unsigned char *tlsext_ecpointformatlist;
1068
+ size_t tlsext_ellipticcurvelist_length;
1069
+ /* our list */
1070
+ unsigned char *tlsext_ellipticcurvelist;
1071
+ # endif /* OPENSSL_NO_EC */
1072
+ /* TLS Session Ticket extension override */
1073
+ TLS_SESSION_TICKET_EXT *tlsext_session_ticket;
1074
+ /* TLS Session Ticket extension callback */
1075
+ tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb;
1076
+ void *tls_session_ticket_ext_cb_arg;
1077
+ /* TLS pre-shared secret session resumption */
1078
+ tls_session_secret_cb_fn tls_session_secret_cb;
1079
+ void *tls_session_secret_cb_arg;
1080
+ SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */
1081
+ # ifndef OPENSSL_NO_NEXTPROTONEG
1082
+ /*
1083
+ * Next protocol negotiation. For the client, this is the protocol that
1084
+ * we sent in NextProtocol and is set when handling ServerHello
1085
+ * extensions. For a server, this is the client's selected_protocol from
1086
+ * NextProtocol and is set when handling the NextProtocol message, before
1087
+ * the Finished message.
1088
+ */
1089
+ unsigned char *next_proto_negotiated;
1090
+ unsigned char next_proto_negotiated_len;
1091
+ # endif
1092
+ # define session_ctx initial_ctx
1093
+ /* What we'll do */
1094
+ STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
1095
+ /* What's been chosen */
1096
+ SRTP_PROTECTION_PROFILE *srtp_profile;
1097
+ /*-
1098
+ * Is use of the Heartbeat extension negotiated?
1099
+ * 0: disabled
1100
+ * 1: enabled
1101
+ * 2: enabled, but not allowed to send Requests
1102
+ */
1103
+ unsigned int tlsext_heartbeat;
1104
+ /* Indicates if a HeartbeatRequest is in flight */
1105
+ unsigned int tlsext_hb_pending;
1106
+ /* HeartbeatRequest sequence number */
1107
+ unsigned int tlsext_hb_seq;
1108
+ /*
1109
+ * For a client, this contains the list of supported protocols in wire
1110
+ * format.
1111
+ */
1112
+ unsigned char *alpn_client_proto_list;
1113
+ unsigned alpn_client_proto_list_len;
1114
+ /*-
1115
+ * 1 if we are renegotiating.
1116
+ * 2 if we are a server and are inside a handshake
1117
+ * (i.e. not just sending a HelloRequest)
1118
+ */
1119
+ int renegotiate;
1120
+ # ifndef OPENSSL_NO_SRP
1121
+ /* ctx for SRP authentication */
1122
+ SRP_CTX srp_ctx;
1123
+ # endif
1124
+ /*
1125
+ * Callback for disabling session caching and ticket support on a session
1126
+ * basis, depending on the chosen cipher.
1127
+ */
1128
+ int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);
1129
+ RECORD_LAYER rlayer;
1130
+ /* Default password callback. */
1131
+ pem_password_cb *default_passwd_callback;
1132
+ /* Default password callback user data. */
1133
+ void *default_passwd_callback_userdata;
1134
+ /* Async Job info */
1135
+ ASYNC_JOB *job;
1136
+ ASYNC_WAIT_CTX *waitctx;
1137
+ CRYPTO_RWLOCK *lock;
1138
+ };
1139
+
1140
+ typedef struct ssl3_state_st {
1141
+ long flags;
1142
+ int read_mac_secret_size;
1143
+ unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
1144
+ int write_mac_secret_size;
1145
+ unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
1146
+ unsigned char server_random[SSL3_RANDOM_SIZE];
1147
+ unsigned char client_random[SSL3_RANDOM_SIZE];
1148
+ /* flags for countermeasure against known-IV weakness */
1149
+ int need_empty_fragments;
1150
+ int empty_fragment_done;
1151
+ /* used during startup, digest all incoming/outgoing packets */
1152
+ BIO *handshake_buffer;
1153
+ /*
1154
+ * When handshake digest is determined, buffer is hashed and
1155
+ * freed and MD_CTX for the required digest is stored here.
1156
+ */
1157
+ EVP_MD_CTX *handshake_dgst;
1158
+ /*
1159
+ * Set whenever an expected ChangeCipherSpec message is processed.
1160
+ * Unset when the peer's Finished message is received.
1161
+ * Unexpected ChangeCipherSpec messages trigger a fatal alert.
1162
+ */
1163
+ int change_cipher_spec;
1164
+ int warn_alert;
1165
+ int fatal_alert;
1166
+ /*
1167
+ * we allow one fatal and one warning alert to be outstanding, send close
1168
+ * alert via the warning alert
1169
+ */
1170
+ int alert_dispatch;
1171
+ unsigned char send_alert[2];
1172
+ /*
1173
+ * This flag is set when we should renegotiate ASAP, basically when there
1174
+ * is no more data in the read or write buffers
1175
+ */
1176
+ int renegotiate;
1177
+ int total_renegotiations;
1178
+ int num_renegotiations;
1179
+ int in_read_app_data;
1180
+ struct {
1181
+ /* actually only need to be 16+20 for SSLv3 and 12 for TLS */
1182
+ unsigned char finish_md[EVP_MAX_MD_SIZE * 2];
1183
+ int finish_md_len;
1184
+ unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2];
1185
+ int peer_finish_md_len;
1186
+ unsigned long message_size;
1187
+ int message_type;
1188
+ /* used to hold the new cipher we are going to use */
1189
+ const SSL_CIPHER *new_cipher;
1190
+ # if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
1191
+ EVP_PKEY *pkey; /* holds short lived DH/ECDH key */
1192
+ # endif
1193
+ /* used for certificate requests */
1194
+ int cert_req;
1195
+ int ctype_num;
1196
+ char ctype[SSL3_CT_NUMBER];
1197
+ STACK_OF(X509_NAME) *ca_names;
1198
+ int key_block_length;
1199
+ unsigned char *key_block;
1200
+ const EVP_CIPHER *new_sym_enc;
1201
+ const EVP_MD *new_hash;
1202
+ int new_mac_pkey_type;
1203
+ int new_mac_secret_size;
1204
+ # ifndef OPENSSL_NO_COMP
1205
+ const SSL_COMP *new_compression;
1206
+ # else
1207
+ char *new_compression;
1208
+ # endif
1209
+ int cert_request;
1210
+ /* Raw values of the cipher list from a client */
1211
+ unsigned char *ciphers_raw;
1212
+ size_t ciphers_rawlen;
1213
+ /* Temporary storage for premaster secret */
1214
+ unsigned char *pms;
1215
+ size_t pmslen;
1216
+ # ifndef OPENSSL_NO_PSK
1217
+ /* Temporary storage for PSK key */
1218
+ unsigned char *psk;
1219
+ size_t psklen;
1220
+ # endif
1221
+ /*
1222
+ * signature algorithms peer reports: e.g. supported signature
1223
+ * algorithms extension for server or as part of a certificate
1224
+ * request for client.
1225
+ */
1226
+ unsigned char *peer_sigalgs;
1227
+ /* Size of above array */
1228
+ size_t peer_sigalgslen;
1229
+ /* Digest peer uses for signing */
1230
+ const EVP_MD *peer_md;
1231
+ /* Array of digests used for signing */
1232
+ const EVP_MD *md[SSL_PKEY_NUM];
1233
+ /*
1234
+ * Set if corresponding CERT_PKEY can be used with current
1235
+ * SSL session: e.g. appropriate curve, signature algorithms etc.
1236
+ * If zero it can't be used at all.
1237
+ */
1238
+ uint32_t valid_flags[SSL_PKEY_NUM];
1239
+ /*
1240
+ * For servers the following masks are for the key and auth algorithms
1241
+ * that are supported by the certs below. For clients they are masks of
1242
+ * *disabled* algorithms based on the current session.
1243
+ */
1244
+ uint32_t mask_k;
1245
+ uint32_t mask_a;
1246
+ /*
1247
+ * The following are used by the client to see if a cipher is allowed or
1248
+ * not. It contains the minimum and maximum version the client's using
1249
+ * based on what it knows so far.
1250
+ */
1251
+ int min_ver;
1252
+ int max_ver;
1253
+ } tmp;
1254
+
1255
+ /* Connection binding to prevent renegotiation attacks */
1256
+ unsigned char previous_client_finished[EVP_MAX_MD_SIZE];
1257
+ unsigned char previous_client_finished_len;
1258
+ unsigned char previous_server_finished[EVP_MAX_MD_SIZE];
1259
+ unsigned char previous_server_finished_len;
1260
+ int send_connection_binding; /* TODOEKR */
1261
+
1262
+ # ifndef OPENSSL_NO_NEXTPROTONEG
1263
+ /*
1264
+ * Set if we saw the Next Protocol Negotiation extension from our peer.
1265
+ */
1266
+ int next_proto_neg_seen;
1267
+ # endif
1268
+
1269
+ /*
1270
+ * ALPN information (we are in the process of transitioning from NPN to
1271
+ * ALPN.)
1272
+ */
1273
+
1274
+ /*
1275
+ * In a server these point to the selected ALPN protocol after the
1276
+ * ClientHello has been processed. In a client these contain the protocol
1277
+ * that the server selected once the ServerHello has been processed.
1278
+ */
1279
+ unsigned char *alpn_selected;
1280
+ size_t alpn_selected_len;
1281
+ /* used by the server to know what options were proposed */
1282
+ unsigned char *alpn_proposed;
1283
+ size_t alpn_proposed_len;
1284
+ /* used by the client to know if it actually sent alpn */
1285
+ int alpn_sent;
1286
+
1287
+ # ifndef OPENSSL_NO_EC
1288
+ /*
1289
+ * This is set to true if we believe that this is a version of Safari
1290
+ * running on OS X 10.6 or newer. We wish to know this because Safari on
1291
+ * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support.
1292
+ */
1293
+ char is_probably_safari;
1294
+ # endif /* !OPENSSL_NO_EC */
1295
+
1296
+ /* For clients: peer temporary key */
1297
+ # if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
1298
+ EVP_PKEY *peer_tmp;
1299
+ # endif
1300
+
1301
+ } SSL3_STATE;
1302
+
1303
+ /* DTLS structures */
1304
+
1305
+ # ifndef OPENSSL_NO_SCTP
1306
+ # define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP"
1307
+ # endif
1308
+
1309
+ /* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */
1310
+ # define DTLS1_MAX_MTU_OVERHEAD 48
1311
+
1312
+ /*
1313
+ * Flag used in message reuse to indicate the buffer contains the record
1314
+ * header as well as the the handshake message header.
1315
+ */
1316
+ # define DTLS1_SKIP_RECORD_HEADER 2
1317
+
1318
+ struct dtls1_retransmit_state {
1319
+ EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
1320
+ EVP_MD_CTX *write_hash; /* used for mac generation */
1321
+ COMP_CTX *compress; /* compression */
1322
+ SSL_SESSION *session;
1323
+ unsigned short epoch;
1324
+ };
1325
+
1326
+ struct hm_header_st {
1327
+ unsigned char type;
1328
+ unsigned long msg_len;
1329
+ unsigned short seq;
1330
+ unsigned long frag_off;
1331
+ unsigned long frag_len;
1332
+ unsigned int is_ccs;
1333
+ struct dtls1_retransmit_state saved_retransmit_state;
1334
+ };
1335
+
1336
+ struct dtls1_timeout_st {
1337
+ /* Number of read timeouts so far */
1338
+ unsigned int read_timeouts;
1339
+ /* Number of write timeouts so far */
1340
+ unsigned int write_timeouts;
1341
+ /* Number of alerts received so far */
1342
+ unsigned int num_alerts;
1343
+ };
1344
+
1345
+ typedef struct hm_fragment_st {
1346
+ struct hm_header_st msg_header;
1347
+ unsigned char *fragment;
1348
+ unsigned char *reassembly;
1349
+ } hm_fragment;
1350
+
1351
+ typedef struct pqueue_st pqueue;
1352
+ typedef struct pitem_st pitem;
1353
+
1354
+ struct pitem_st {
1355
+ unsigned char priority[8]; /* 64-bit value in big-endian encoding */
1356
+ void *data;
1357
+ pitem *next;
1358
+ };
1359
+
1360
+ typedef struct pitem_st *piterator;
1361
+
1362
+ pitem *pitem_new(unsigned char *prio64be, void *data);
1363
+ void pitem_free(pitem *item);
1364
+ pqueue *pqueue_new(void);
1365
+ void pqueue_free(pqueue *pq);
1366
+ pitem *pqueue_insert(pqueue *pq, pitem *item);
1367
+ pitem *pqueue_peek(pqueue *pq);
1368
+ pitem *pqueue_pop(pqueue *pq);
1369
+ pitem *pqueue_find(pqueue *pq, unsigned char *prio64be);
1370
+ pitem *pqueue_iterator(pqueue *pq);
1371
+ pitem *pqueue_next(piterator *iter);
1372
+ int pqueue_size(pqueue *pq);
1373
+
1374
+ typedef struct dtls1_state_st {
1375
+ unsigned char cookie[DTLS1_COOKIE_LENGTH];
1376
+ unsigned int cookie_len;
1377
+ unsigned int cookie_verified;
1378
+ /* handshake message numbers */
1379
+ unsigned short handshake_write_seq;
1380
+ unsigned short next_handshake_write_seq;
1381
+ unsigned short handshake_read_seq;
1382
+ /* Buffered handshake messages */
1383
+ pqueue *buffered_messages;
1384
+ /* Buffered (sent) handshake records */
1385
+ pqueue *sent_messages;
1386
+ unsigned int link_mtu; /* max on-the-wire DTLS packet size */
1387
+ unsigned int mtu; /* max DTLS packet size */
1388
+ struct hm_header_st w_msg_hdr;
1389
+ struct hm_header_st r_msg_hdr;
1390
+ struct dtls1_timeout_st timeout;
1391
+ /*
1392
+ * Indicates when the last handshake msg or heartbeat sent will timeout
1393
+ */
1394
+ struct timeval next_timeout;
1395
+ /* Timeout duration */
1396
+ unsigned short timeout_duration;
1397
+ unsigned int retransmitting;
1398
+ # ifndef OPENSSL_NO_SCTP
1399
+ int shutdown_received;
1400
+ # endif
1401
+ } DTLS1_STATE;
1402
+
1403
+ # ifndef OPENSSL_NO_EC
1404
+ /*
1405
+ * From ECC-TLS draft, used in encoding the curve type in ECParameters
1406
+ */
1407
+ # define EXPLICIT_PRIME_CURVE_TYPE 1
1408
+ # define EXPLICIT_CHAR2_CURVE_TYPE 2
1409
+ # define NAMED_CURVE_TYPE 3
1410
+ # endif /* OPENSSL_NO_EC */
1411
+
1412
+ typedef struct cert_pkey_st {
1413
+ X509 *x509;
1414
+ EVP_PKEY *privatekey;
1415
+ /* Chain for this certificate */
1416
+ STACK_OF(X509) *chain;
1417
+ /*-
1418
+ * serverinfo data for this certificate. The data is in TLS Extension
1419
+ * wire format, specifically it's a series of records like:
1420
+ * uint16_t extension_type; // (RFC 5246, 7.4.1.4, Extension)
1421
+ * uint16_t length;
1422
+ * uint8_t data[length];
1423
+ */
1424
+ unsigned char *serverinfo;
1425
+ size_t serverinfo_length;
1426
+ } CERT_PKEY;
1427
+ /* Retrieve Suite B flags */
1428
+ # define tls1_suiteb(s) (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
1429
+ /* Uses to check strict mode: suite B modes are always strict */
1430
+ # define SSL_CERT_FLAGS_CHECK_TLS_STRICT \
1431
+ (SSL_CERT_FLAG_SUITEB_128_LOS|SSL_CERT_FLAG_TLS_STRICT)
1432
+
1433
+ typedef struct {
1434
+ unsigned short ext_type;
1435
+ /*
1436
+ * Per-connection flags relating to this extension type: not used if
1437
+ * part of an SSL_CTX structure.
1438
+ */
1439
+ uint32_t ext_flags;
1440
+ custom_ext_add_cb add_cb;
1441
+ custom_ext_free_cb free_cb;
1442
+ void *add_arg;
1443
+ custom_ext_parse_cb parse_cb;
1444
+ void *parse_arg;
1445
+ } custom_ext_method;
1446
+
1447
+ /* ext_flags values */
1448
+
1449
+ /*
1450
+ * Indicates an extension has been received. Used to check for unsolicited or
1451
+ * duplicate extensions.
1452
+ */
1453
+ # define SSL_EXT_FLAG_RECEIVED 0x1
1454
+ /*
1455
+ * Indicates an extension has been sent: used to enable sending of
1456
+ * corresponding ServerHello extension.
1457
+ */
1458
+ # define SSL_EXT_FLAG_SENT 0x2
1459
+
1460
+ typedef struct {
1461
+ custom_ext_method *meths;
1462
+ size_t meths_count;
1463
+ } custom_ext_methods;
1464
+
1465
+ typedef struct cert_st {
1466
+ /* Current active set */
1467
+ /*
1468
+ * ALWAYS points to an element of the pkeys array
1469
+ * Probably it would make more sense to store
1470
+ * an index, not a pointer.
1471
+ */
1472
+ CERT_PKEY *key;
1473
+ # ifndef OPENSSL_NO_DH
1474
+ EVP_PKEY *dh_tmp;
1475
+ DH *(*dh_tmp_cb) (SSL *ssl, int is_export, int keysize);
1476
+ int dh_tmp_auto;
1477
+ # endif
1478
+ /* Flags related to certificates */
1479
+ uint32_t cert_flags;
1480
+ CERT_PKEY pkeys[SSL_PKEY_NUM];
1481
+ /*
1482
+ * Certificate types (received or sent) in certificate request message.
1483
+ * On receive this is only set if number of certificate types exceeds
1484
+ * SSL3_CT_NUMBER.
1485
+ */
1486
+ unsigned char *ctypes;
1487
+ size_t ctype_num;
1488
+ /*
1489
+ * supported signature algorithms. When set on a client this is sent in
1490
+ * the client hello as the supported signature algorithms extension. For
1491
+ * servers it represents the signature algorithms we are willing to use.
1492
+ */
1493
+ unsigned char *conf_sigalgs;
1494
+ /* Size of above array */
1495
+ size_t conf_sigalgslen;
1496
+ /*
1497
+ * Client authentication signature algorithms, if not set then uses
1498
+ * conf_sigalgs. On servers these will be the signature algorithms sent
1499
+ * to the client in a cerificate request for TLS 1.2. On a client this
1500
+ * represents the signature algortithms we are willing to use for client
1501
+ * authentication.
1502
+ */
1503
+ unsigned char *client_sigalgs;
1504
+ /* Size of above array */
1505
+ size_t client_sigalgslen;
1506
+ /*
1507
+ * Signature algorithms shared by client and server: cached because these
1508
+ * are used most often.
1509
+ */
1510
+ TLS_SIGALGS *shared_sigalgs;
1511
+ size_t shared_sigalgslen;
1512
+ /*
1513
+ * Certificate setup callback: if set is called whenever a certificate
1514
+ * may be required (client or server). the callback can then examine any
1515
+ * appropriate parameters and setup any certificates required. This
1516
+ * allows advanced applications to select certificates on the fly: for
1517
+ * example based on supported signature algorithms or curves.
1518
+ */
1519
+ int (*cert_cb) (SSL *ssl, void *arg);
1520
+ void *cert_cb_arg;
1521
+ /*
1522
+ * Optional X509_STORE for chain building or certificate validation If
1523
+ * NULL the parent SSL_CTX store is used instead.
1524
+ */
1525
+ X509_STORE *chain_store;
1526
+ X509_STORE *verify_store;
1527
+ /* Custom extension methods for server and client */
1528
+ custom_ext_methods cli_ext;
1529
+ custom_ext_methods srv_ext;
1530
+ /* Security callback */
1531
+ int (*sec_cb) (const SSL *s, const SSL_CTX *ctx, int op, int bits, int nid,
1532
+ void *other, void *ex);
1533
+ /* Security level */
1534
+ int sec_level;
1535
+ void *sec_ex;
1536
+ # ifndef OPENSSL_NO_PSK
1537
+ /* If not NULL psk identity hint to use for servers */
1538
+ char *psk_identity_hint;
1539
+ # endif
1540
+ int references; /* >1 only if SSL_copy_session_id is used */
1541
+ CRYPTO_RWLOCK *lock;
1542
+ } CERT;
1543
+
1544
+ /* Structure containing decoded values of signature algorithms extension */
1545
+ struct tls_sigalgs_st {
1546
+ /* NID of hash algorithm */
1547
+ int hash_nid;
1548
+ /* NID of signature algorithm */
1549
+ int sign_nid;
1550
+ /* Combined hash and signature NID */
1551
+ int signandhash_nid;
1552
+ /* Raw values used in extension */
1553
+ unsigned char rsign;
1554
+ unsigned char rhash;
1555
+ };
1556
+
1557
+ # define FP_ICC (int (*)(const void *,const void *))
1558
+
1559
+ /*
1560
+ * This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit
1561
+ * of a mess of functions, but hell, think of it as an opaque structure :-)
1562
+ */
1563
+ typedef struct ssl3_enc_method {
1564
+ int (*enc) (SSL *, SSL3_RECORD *, unsigned int, int);
1565
+ int (*mac) (SSL *, SSL3_RECORD *, unsigned char *, int);
1566
+ int (*setup_key_block) (SSL *);
1567
+ int (*generate_master_secret) (SSL *, unsigned char *, unsigned char *,
1568
+ int);
1569
+ int (*change_cipher_state) (SSL *, int);
1570
+ int (*final_finish_mac) (SSL *, const char *, int, unsigned char *);
1571
+ int finish_mac_length;
1572
+ const char *client_finished_label;
1573
+ int client_finished_label_len;
1574
+ const char *server_finished_label;
1575
+ int server_finished_label_len;
1576
+ int (*alert_value) (int);
1577
+ int (*export_keying_material) (SSL *, unsigned char *, size_t,
1578
+ const char *, size_t,
1579
+ const unsigned char *, size_t,
1580
+ int use_context);
1581
+ /* Various flags indicating protocol version requirements */
1582
+ uint32_t enc_flags;
1583
+ /* Handshake header length */
1584
+ unsigned int hhlen;
1585
+ /* Set the handshake header */
1586
+ int (*set_handshake_header) (SSL *s, int type, unsigned long len);
1587
+ /* Write out handshake message */
1588
+ int (*do_write) (SSL *s);
1589
+ } SSL3_ENC_METHOD;
1590
+
1591
+ # define SSL_HM_HEADER_LENGTH(s) s->method->ssl3_enc->hhlen
1592
+ # define ssl_handshake_start(s) \
1593
+ (((unsigned char *)s->init_buf->data) + s->method->ssl3_enc->hhlen)
1594
+ # define ssl_set_handshake_header(s, htype, len) \
1595
+ s->method->ssl3_enc->set_handshake_header(s, htype, len)
1596
+ # define ssl_do_write(s) s->method->ssl3_enc->do_write(s)
1597
+
1598
+ /* Values for enc_flags */
1599
+
1600
+ /* Uses explicit IV for CBC mode */
1601
+ # define SSL_ENC_FLAG_EXPLICIT_IV 0x1
1602
+ /* Uses signature algorithms extension */
1603
+ # define SSL_ENC_FLAG_SIGALGS 0x2
1604
+ /* Uses SHA256 default PRF */
1605
+ # define SSL_ENC_FLAG_SHA256_PRF 0x4
1606
+ /* Is DTLS */
1607
+ # define SSL_ENC_FLAG_DTLS 0x8
1608
+ /*
1609
+ * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
1610
+ * apply to others in future.
1611
+ */
1612
+ # define SSL_ENC_FLAG_TLS1_2_CIPHERS 0x10
1613
+
1614
+ # ifndef OPENSSL_NO_COMP
1615
+ /* Used for holding the relevant compression methods loaded into SSL_CTX */
1616
+ typedef struct ssl3_comp_st {
1617
+ int comp_id; /* The identifier byte for this compression
1618
+ * type */
1619
+ char *name; /* Text name used for the compression type */
1620
+ COMP_METHOD *method; /* The method :-) */
1621
+ } SSL3_COMP;
1622
+ # endif
1623
+
1624
+ extern SSL3_ENC_METHOD ssl3_undef_enc_method;
1625
+
1626
+ __owur const SSL_METHOD *ssl_bad_method(int ver);
1627
+ __owur const SSL_METHOD *sslv3_method(void);
1628
+ __owur const SSL_METHOD *sslv3_server_method(void);
1629
+ __owur const SSL_METHOD *sslv3_client_method(void);
1630
+ __owur const SSL_METHOD *tlsv1_method(void);
1631
+ __owur const SSL_METHOD *tlsv1_server_method(void);
1632
+ __owur const SSL_METHOD *tlsv1_client_method(void);
1633
+ __owur const SSL_METHOD *tlsv1_1_method(void);
1634
+ __owur const SSL_METHOD *tlsv1_1_server_method(void);
1635
+ __owur const SSL_METHOD *tlsv1_1_client_method(void);
1636
+ __owur const SSL_METHOD *tlsv1_2_method(void);
1637
+ __owur const SSL_METHOD *tlsv1_2_server_method(void);
1638
+ __owur const SSL_METHOD *tlsv1_2_client_method(void);
1639
+ __owur const SSL_METHOD *dtlsv1_method(void);
1640
+ __owur const SSL_METHOD *dtlsv1_server_method(void);
1641
+ __owur const SSL_METHOD *dtlsv1_client_method(void);
1642
+ __owur const SSL_METHOD *dtls_bad_ver_client_method(void);
1643
+ __owur const SSL_METHOD *dtlsv1_2_method(void);
1644
+ __owur const SSL_METHOD *dtlsv1_2_server_method(void);
1645
+ __owur const SSL_METHOD *dtlsv1_2_client_method(void);
1646
+
1647
+ extern const SSL3_ENC_METHOD TLSv1_enc_data;
1648
+ extern const SSL3_ENC_METHOD TLSv1_1_enc_data;
1649
+ extern const SSL3_ENC_METHOD TLSv1_2_enc_data;
1650
+ extern const SSL3_ENC_METHOD SSLv3_enc_data;
1651
+ extern const SSL3_ENC_METHOD DTLSv1_enc_data;
1652
+ extern const SSL3_ENC_METHOD DTLSv1_2_enc_data;
1653
+
1654
+ /*
1655
+ * Flags for SSL methods
1656
+ */
1657
+ # define SSL_METHOD_NO_FIPS (1U<<0)
1658
+ # define SSL_METHOD_NO_SUITEB (1U<<1)
1659
+
1660
+ # define IMPLEMENT_tls_meth_func(version, flags, mask, func_name, s_accept, \
1661
+ s_connect, enc_data) \
1662
+ const SSL_METHOD *func_name(void) \
1663
+ { \
1664
+ static const SSL_METHOD func_name##_data= { \
1665
+ version, \
1666
+ flags, \
1667
+ mask, \
1668
+ tls1_new, \
1669
+ tls1_clear, \
1670
+ tls1_free, \
1671
+ s_accept, \
1672
+ s_connect, \
1673
+ ssl3_read, \
1674
+ ssl3_peek, \
1675
+ ssl3_write, \
1676
+ ssl3_shutdown, \
1677
+ ssl3_renegotiate, \
1678
+ ssl3_renegotiate_check, \
1679
+ ssl3_read_bytes, \
1680
+ ssl3_write_bytes, \
1681
+ ssl3_dispatch_alert, \
1682
+ ssl3_ctrl, \
1683
+ ssl3_ctx_ctrl, \
1684
+ ssl3_get_cipher_by_char, \
1685
+ ssl3_put_cipher_by_char, \
1686
+ ssl3_pending, \
1687
+ ssl3_num_ciphers, \
1688
+ ssl3_get_cipher, \
1689
+ tls1_default_timeout, \
1690
+ &enc_data, \
1691
+ ssl_undefined_void_function, \
1692
+ ssl3_callback_ctrl, \
1693
+ ssl3_ctx_callback_ctrl, \
1694
+ }; \
1695
+ return &func_name##_data; \
1696
+ }
1697
+
1698
+ # define IMPLEMENT_ssl3_meth_func(func_name, s_accept, s_connect) \
1699
+ const SSL_METHOD *func_name(void) \
1700
+ { \
1701
+ static const SSL_METHOD func_name##_data= { \
1702
+ SSL3_VERSION, \
1703
+ SSL_METHOD_NO_FIPS | SSL_METHOD_NO_SUITEB, \
1704
+ SSL_OP_NO_SSLv3, \
1705
+ ssl3_new, \
1706
+ ssl3_clear, \
1707
+ ssl3_free, \
1708
+ s_accept, \
1709
+ s_connect, \
1710
+ ssl3_read, \
1711
+ ssl3_peek, \
1712
+ ssl3_write, \
1713
+ ssl3_shutdown, \
1714
+ ssl3_renegotiate, \
1715
+ ssl3_renegotiate_check, \
1716
+ ssl3_read_bytes, \
1717
+ ssl3_write_bytes, \
1718
+ ssl3_dispatch_alert, \
1719
+ ssl3_ctrl, \
1720
+ ssl3_ctx_ctrl, \
1721
+ ssl3_get_cipher_by_char, \
1722
+ ssl3_put_cipher_by_char, \
1723
+ ssl3_pending, \
1724
+ ssl3_num_ciphers, \
1725
+ ssl3_get_cipher, \
1726
+ ssl3_default_timeout, \
1727
+ &SSLv3_enc_data, \
1728
+ ssl_undefined_void_function, \
1729
+ ssl3_callback_ctrl, \
1730
+ ssl3_ctx_callback_ctrl, \
1731
+ }; \
1732
+ return &func_name##_data; \
1733
+ }
1734
+
1735
+ # define IMPLEMENT_dtls1_meth_func(version, flags, mask, func_name, s_accept, \
1736
+ s_connect, enc_data) \
1737
+ const SSL_METHOD *func_name(void) \
1738
+ { \
1739
+ static const SSL_METHOD func_name##_data= { \
1740
+ version, \
1741
+ flags, \
1742
+ mask, \
1743
+ dtls1_new, \
1744
+ dtls1_clear, \
1745
+ dtls1_free, \
1746
+ s_accept, \
1747
+ s_connect, \
1748
+ ssl3_read, \
1749
+ ssl3_peek, \
1750
+ ssl3_write, \
1751
+ dtls1_shutdown, \
1752
+ ssl3_renegotiate, \
1753
+ ssl3_renegotiate_check, \
1754
+ dtls1_read_bytes, \
1755
+ dtls1_write_app_data_bytes, \
1756
+ dtls1_dispatch_alert, \
1757
+ dtls1_ctrl, \
1758
+ ssl3_ctx_ctrl, \
1759
+ ssl3_get_cipher_by_char, \
1760
+ ssl3_put_cipher_by_char, \
1761
+ ssl3_pending, \
1762
+ ssl3_num_ciphers, \
1763
+ ssl3_get_cipher, \
1764
+ dtls1_default_timeout, \
1765
+ &enc_data, \
1766
+ ssl_undefined_void_function, \
1767
+ ssl3_callback_ctrl, \
1768
+ ssl3_ctx_callback_ctrl, \
1769
+ }; \
1770
+ return &func_name##_data; \
1771
+ }
1772
+
1773
+ struct openssl_ssl_test_functions {
1774
+ int (*p_ssl_init_wbio_buffer) (SSL *s);
1775
+ int (*p_ssl3_setup_buffers) (SSL *s);
1776
+ # ifndef OPENSSL_NO_HEARTBEATS
1777
+ int (*p_dtls1_process_heartbeat) (SSL *s,
1778
+ unsigned char *p, unsigned int length);
1779
+ # endif
1780
+ };
1781
+
1782
+ const char *ssl_protocol_to_string(int version);
1783
+
1784
+ # ifndef OPENSSL_UNIT_TEST
1785
+
1786
+ void ssl_clear_cipher_ctx(SSL *s);
1787
+ int ssl_clear_bad_session(SSL *s);
1788
+ __owur CERT *ssl_cert_new(void);
1789
+ __owur CERT *ssl_cert_dup(CERT *cert);
1790
+ void ssl_cert_clear_certs(CERT *c);
1791
+ void ssl_cert_free(CERT *c);
1792
+ __owur int ssl_get_new_session(SSL *s, int session);
1793
+ __owur int ssl_get_prev_session(SSL *s, const PACKET *ext,
1794
+ const PACKET *session_id);
1795
+ __owur SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket);
1796
+ __owur int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b);
1797
+ DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
1798
+ __owur int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
1799
+ const SSL_CIPHER *const *bp);
1800
+ __owur STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth,
1801
+ STACK_OF(SSL_CIPHER) **pref,
1802
+ STACK_OF(SSL_CIPHER)
1803
+ **sorted,
1804
+ const char *rule_str,
1805
+ CERT *c);
1806
+ void ssl_update_cache(SSL *s, int mode);
1807
+ __owur int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc,
1808
+ const EVP_MD **md, int *mac_pkey_type,
1809
+ int *mac_secret_size, SSL_COMP **comp,
1810
+ int use_etm);
1811
+ __owur int ssl_cipher_get_cert_index(const SSL_CIPHER *c);
1812
+ __owur const SSL_CIPHER *ssl_get_cipher_by_char(SSL *ssl,
1813
+ const unsigned char *ptr);
1814
+ __owur int ssl_cert_set0_chain(SSL *s, SSL_CTX *ctx, STACK_OF(X509) *chain);
1815
+ __owur int ssl_cert_set1_chain(SSL *s, SSL_CTX *ctx, STACK_OF(X509) *chain);
1816
+ __owur int ssl_cert_add0_chain_cert(SSL *s, SSL_CTX *ctx, X509 *x);
1817
+ __owur int ssl_cert_add1_chain_cert(SSL *s, SSL_CTX *ctx, X509 *x);
1818
+ __owur int ssl_cert_select_current(CERT *c, X509 *x);
1819
+ __owur int ssl_cert_set_current(CERT *c, long arg);
1820
+ __owur X509 *ssl_cert_get0_next_certificate(CERT *c, int first);
1821
+ void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg), void *arg);
1822
+
1823
+ __owur int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk);
1824
+ __owur int ssl_add_cert_chain(SSL *s, CERT_PKEY *cpk, unsigned long *l);
1825
+ __owur int ssl_build_cert_chain(SSL *s, SSL_CTX *ctx, int flags);
1826
+ __owur int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain,
1827
+ int ref);
1828
+
1829
+ __owur int ssl_security(const SSL *s, int op, int bits, int nid, void *other);
1830
+ __owur int ssl_ctx_security(const SSL_CTX *ctx, int op, int bits, int nid,
1831
+ void *other);
1832
+
1833
+ int ssl_undefined_function(SSL *s);
1834
+ __owur int ssl_undefined_void_function(void);
1835
+ __owur int ssl_undefined_const_function(const SSL *s);
1836
+ __owur CERT_PKEY *ssl_get_server_send_pkey(SSL *s);
1837
+ __owur int ssl_get_server_cert_serverinfo(SSL *s,
1838
+ const unsigned char **serverinfo,
1839
+ size_t *serverinfo_length);
1840
+ __owur EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *c,
1841
+ const EVP_MD **pmd);
1842
+ __owur int ssl_cert_type(const X509 *x, const EVP_PKEY *pkey);
1843
+ void ssl_set_masks(SSL *s);
1844
+ __owur STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s);
1845
+ __owur int ssl_verify_alarm_type(long type);
1846
+ void ssl_sort_cipher_list(void);
1847
+ void ssl_load_ciphers(void);
1848
+ __owur int ssl_fill_hello_random(SSL *s, int server, unsigned char *field,
1849
+ int len);
1850
+ __owur int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
1851
+ int free_pms);
1852
+ __owur EVP_PKEY *ssl_generate_pkey(EVP_PKEY *pm);
1853
+ __owur int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey);
1854
+ __owur EVP_PKEY *ssl_dh_to_pkey(DH *dh);
1855
+
1856
+ __owur const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);
1857
+ __owur int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p);
1858
+ int ssl3_init_finished_mac(SSL *s);
1859
+ __owur int ssl3_setup_key_block(SSL *s);
1860
+ __owur int ssl3_change_cipher_state(SSL *s, int which);
1861
+ void ssl3_cleanup_key_block(SSL *s);
1862
+ __owur int ssl3_do_write(SSL *s, int type);
1863
+ int ssl3_send_alert(SSL *s, int level, int desc);
1864
+ __owur int ssl3_generate_master_secret(SSL *s, unsigned char *out,
1865
+ unsigned char *p, int len);
1866
+ __owur int ssl3_get_req_cert_type(SSL *s, unsigned char *p);
1867
+ __owur int ssl3_num_ciphers(void);
1868
+ __owur const SSL_CIPHER *ssl3_get_cipher(unsigned int u);
1869
+ int ssl3_renegotiate(SSL *ssl);
1870
+ int ssl3_renegotiate_check(SSL *ssl);
1871
+ __owur int ssl3_dispatch_alert(SSL *s);
1872
+ __owur int ssl3_final_finish_mac(SSL *s, const char *sender, int slen,
1873
+ unsigned char *p);
1874
+ __owur int ssl3_finish_mac(SSL *s, const unsigned char *buf, int len);
1875
+ void ssl3_free_digest_list(SSL *s);
1876
+ __owur unsigned long ssl3_output_cert_chain(SSL *s, CERT_PKEY *cpk);
1877
+ __owur const SSL_CIPHER *ssl3_choose_cipher(SSL *ssl,
1878
+ STACK_OF(SSL_CIPHER) *clnt,
1879
+ STACK_OF(SSL_CIPHER) *srvr);
1880
+ __owur int ssl3_digest_cached_records(SSL *s, int keep);
1881
+ __owur int ssl3_new(SSL *s);
1882
+ void ssl3_free(SSL *s);
1883
+ __owur int ssl3_read(SSL *s, void *buf, int len);
1884
+ __owur int ssl3_peek(SSL *s, void *buf, int len);
1885
+ __owur int ssl3_write(SSL *s, const void *buf, int len);
1886
+ __owur int ssl3_shutdown(SSL *s);
1887
+ void ssl3_clear(SSL *s);
1888
+ __owur long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg);
1889
+ __owur long ssl3_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg);
1890
+ __owur long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void));
1891
+ __owur long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp) (void));
1892
+
1893
+ __owur int ssl3_do_change_cipher_spec(SSL *ssl);
1894
+ __owur long ssl3_default_timeout(void);
1895
+
1896
+ __owur int ssl3_set_handshake_header(SSL *s, int htype, unsigned long len);
1897
+ __owur int ssl3_handshake_write(SSL *s);
1898
+
1899
+ __owur int ssl_allow_compression(SSL *s);
1900
+
1901
+ __owur int ssl_version_supported(const SSL *s, int version);
1902
+
1903
+ __owur int ssl_set_client_hello_version(SSL *s);
1904
+ __owur int ssl_check_version_downgrade(SSL *s);
1905
+ __owur int ssl_set_version_bound(int method_version, int version, int *bound);
1906
+ __owur int ssl_choose_server_version(SSL *s);
1907
+ __owur int ssl_choose_client_version(SSL *s, int version);
1908
+ int ssl_get_client_min_max_version(const SSL *s, int *min_version,
1909
+ int *max_version);
1910
+
1911
+ __owur long tls1_default_timeout(void);
1912
+ __owur int dtls1_do_write(SSL *s, int type);
1913
+ void dtls1_set_message_header(SSL *s,
1914
+ unsigned char mt,
1915
+ unsigned long len,
1916
+ unsigned long frag_off, unsigned long frag_len);
1917
+
1918
+ __owur int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf,
1919
+ int len);
1920
+
1921
+ __owur int dtls1_read_failed(SSL *s, int code);
1922
+ __owur int dtls1_buffer_message(SSL *s, int ccs);
1923
+ __owur int dtls1_retransmit_message(SSL *s, unsigned short seq, int *found);
1924
+ __owur int dtls1_get_queue_priority(unsigned short seq, int is_ccs);
1925
+ int dtls1_retransmit_buffered_messages(SSL *s);
1926
+ void dtls1_clear_received_buffer(SSL *s);
1927
+ void dtls1_clear_sent_buffer(SSL *s);
1928
+ void dtls1_get_message_header(unsigned char *data,
1929
+ struct hm_header_st *msg_hdr);
1930
+ __owur long dtls1_default_timeout(void);
1931
+ __owur struct timeval *dtls1_get_timeout(SSL *s, struct timeval *timeleft);
1932
+ __owur int dtls1_check_timeout_num(SSL *s);
1933
+ __owur int dtls1_handle_timeout(SSL *s);
1934
+ void dtls1_start_timer(SSL *s);
1935
+ void dtls1_stop_timer(SSL *s);
1936
+ __owur int dtls1_is_timer_expired(SSL *s);
1937
+ void dtls1_double_timeout(SSL *s);
1938
+ __owur unsigned int dtls_raw_hello_verify_request(unsigned char *buf,
1939
+ unsigned char *cookie,
1940
+ unsigned char cookie_len);
1941
+ __owur int dtls1_send_newsession_ticket(SSL *s);
1942
+ __owur unsigned int dtls1_min_mtu(SSL *s);
1943
+ void dtls1_hm_fragment_free(hm_fragment *frag);
1944
+ __owur int dtls1_query_mtu(SSL *s);
1945
+
1946
+ __owur int tls1_new(SSL *s);
1947
+ void tls1_free(SSL *s);
1948
+ void tls1_clear(SSL *s);
1949
+ long tls1_ctrl(SSL *s, int cmd, long larg, void *parg);
1950
+ long tls1_callback_ctrl(SSL *s, int cmd, void (*fp) (void));
1951
+
1952
+ __owur int dtls1_new(SSL *s);
1953
+ void dtls1_free(SSL *s);
1954
+ void dtls1_clear(SSL *s);
1955
+ long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg);
1956
+ __owur int dtls1_shutdown(SSL *s);
1957
+
1958
+ __owur int dtls1_dispatch_alert(SSL *s);
1959
+
1960
+ __owur int ssl_init_wbio_buffer(SSL *s);
1961
+ void ssl_free_wbio_buffer(SSL *s);
1962
+
1963
+ __owur int tls1_change_cipher_state(SSL *s, int which);
1964
+ __owur int tls1_setup_key_block(SSL *s);
1965
+ __owur int tls1_final_finish_mac(SSL *s,
1966
+ const char *str, int slen, unsigned char *p);
1967
+ __owur int tls1_generate_master_secret(SSL *s, unsigned char *out,
1968
+ unsigned char *p, int len);
1969
+ __owur int tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen,
1970
+ const char *label, size_t llen,
1971
+ const unsigned char *p, size_t plen,
1972
+ int use_context);
1973
+ __owur int tls1_alert_code(int code);
1974
+ __owur int ssl3_alert_code(int code);
1975
+ __owur int ssl_ok(SSL *s);
1976
+
1977
+ # ifndef OPENSSL_NO_EC
1978
+ __owur int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s);
1979
+ # endif
1980
+
1981
+ SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n);
1982
+
1983
+ # ifndef OPENSSL_NO_EC
1984
+ /* Flags values from tls1_ec_curve_id2nid() */
1985
+ /* Mask for curve type */
1986
+ # define TLS_CURVE_TYPE 0x3
1987
+ # define TLS_CURVE_PRIME 0x0
1988
+ # define TLS_CURVE_CHAR2 0x1
1989
+ # define TLS_CURVE_CUSTOM 0x2
1990
+ __owur int tls1_ec_curve_id2nid(int curve_id, unsigned int *pflags);
1991
+ __owur int tls1_ec_nid2curve_id(int nid);
1992
+ __owur int tls1_check_curve(SSL *s, const unsigned char *p, size_t len);
1993
+ __owur int tls1_shared_curve(SSL *s, int nmatch);
1994
+ __owur int tls1_set_curves(unsigned char **pext, size_t *pextlen,
1995
+ int *curves, size_t ncurves);
1996
+ __owur int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
1997
+ const char *str);
1998
+ __owur int tls1_check_ec_tmp_key(SSL *s, unsigned long id);
1999
+ __owur EVP_PKEY *ssl_generate_pkey_curve(int id);
2000
+ # endif /* OPENSSL_NO_EC */
2001
+
2002
+ __owur int tls1_shared_list(SSL *s,
2003
+ const unsigned char *l1, size_t l1len,
2004
+ const unsigned char *l2, size_t l2len, int nmatch);
2005
+ __owur unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
2006
+ unsigned char *limit, int *al);
2007
+ __owur unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
2008
+ unsigned char *limit, int *al);
2009
+ __owur int ssl_parse_clienthello_tlsext(SSL *s, PACKET *pkt);
2010
+ void ssl_set_default_md(SSL *s);
2011
+ __owur int tls1_set_server_sigalgs(SSL *s);
2012
+ __owur int ssl_check_clienthello_tlsext_late(SSL *s, int *al);
2013
+ __owur int ssl_parse_serverhello_tlsext(SSL *s, PACKET *pkt);
2014
+ __owur int ssl_prepare_clienthello_tlsext(SSL *s);
2015
+ __owur int ssl_prepare_serverhello_tlsext(SSL *s);
2016
+
2017
+ # ifndef OPENSSL_NO_HEARTBEATS
2018
+ __owur int dtls1_heartbeat(SSL *s);
2019
+ __owur int dtls1_process_heartbeat(SSL *s, unsigned char *p,
2020
+ unsigned int length);
2021
+ # endif
2022
+
2023
+ __owur int tls_check_serverhello_tlsext_early(SSL *s, const PACKET *ext,
2024
+ const PACKET *session_id,
2025
+ SSL_SESSION **ret);
2026
+
2027
+ __owur int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
2028
+ const EVP_MD *md);
2029
+ __owur int tls12_get_sigid(const EVP_PKEY *pk);
2030
+ __owur const EVP_MD *tls12_get_hash(unsigned char hash_alg);
2031
+ void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op);
2032
+
2033
+ __owur int tls1_set_sigalgs_list(CERT *c, const char *str, int client);
2034
+ __owur int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen,
2035
+ int client);
2036
+ int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
2037
+ int idx);
2038
+ void tls1_set_cert_validity(SSL *s);
2039
+
2040
+ # ifndef OPENSSL_NO_CT
2041
+ __owur int ssl_validate_ct(SSL *s);
2042
+ # endif
2043
+
2044
+ # ifndef OPENSSL_NO_DH
2045
+ __owur DH *ssl_get_auto_dh(SSL *s);
2046
+ # endif
2047
+
2048
+ __owur int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee);
2049
+ __owur int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *ex,
2050
+ int vfy);
2051
+
2052
+ __owur EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md);
2053
+ void ssl_clear_hash_ctx(EVP_MD_CTX **hash);
2054
+ __owur int ssl_add_serverhello_renegotiate_ext(SSL *s, unsigned char *p,
2055
+ int *len, int maxlen);
2056
+ __owur int ssl_parse_serverhello_renegotiate_ext(SSL *s, PACKET *pkt, int *al);
2057
+ __owur int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p,
2058
+ int *len, int maxlen);
2059
+ __owur int ssl_parse_clienthello_renegotiate_ext(SSL *s, PACKET *pkt, int *al);
2060
+ __owur long ssl_get_algorithm2(SSL *s);
2061
+ __owur size_t tls12_copy_sigalgs(SSL *s, unsigned char *out,
2062
+ const unsigned char *psig, size_t psiglen);
2063
+ __owur int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize);
2064
+ __owur int tls1_process_sigalgs(SSL *s);
2065
+ __owur size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs);
2066
+ __owur int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
2067
+ const unsigned char *sig, EVP_PKEY *pkey);
2068
+ void ssl_set_client_disabled(SSL *s);
2069
+ __owur int ssl_cipher_disabled(SSL *s, const SSL_CIPHER *c, int op);
2070
+
2071
+ __owur int ssl_add_clienthello_use_srtp_ext(SSL *s, unsigned char *p, int *len,
2072
+ int maxlen);
2073
+ __owur int ssl_parse_clienthello_use_srtp_ext(SSL *s, PACKET *pkt, int *al);
2074
+ __owur int ssl_add_serverhello_use_srtp_ext(SSL *s, unsigned char *p, int *len,
2075
+ int maxlen);
2076
+ __owur int ssl_parse_serverhello_use_srtp_ext(SSL *s, PACKET *pkt, int *al);
2077
+
2078
+ __owur int ssl_handshake_hash(SSL *s, unsigned char *out, int outlen);
2079
+ __owur const EVP_MD *ssl_md(int idx);
2080
+ __owur const EVP_MD *ssl_handshake_md(SSL *s);
2081
+ __owur const EVP_MD *ssl_prf_md(SSL *s);
2082
+
2083
+ /* s3_cbc.c */
2084
+ __owur char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx);
2085
+ __owur int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx,
2086
+ unsigned char *md_out,
2087
+ size_t *md_out_size,
2088
+ const unsigned char header[13],
2089
+ const unsigned char *data,
2090
+ size_t data_plus_mac_size,
2091
+ size_t data_plus_mac_plus_padding_size,
2092
+ const unsigned char *mac_secret,
2093
+ unsigned mac_secret_length, char is_sslv3);
2094
+
2095
+ __owur int tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx,
2096
+ EVP_MD_CTX *mac_ctx, const unsigned char *data,
2097
+ size_t data_len, size_t orig_len);
2098
+
2099
+ __owur int srp_generate_server_master_secret(SSL *s);
2100
+ __owur int srp_generate_client_master_secret(SSL *s);
2101
+ __owur int srp_verify_server_param(SSL *s, int *al);
2102
+
2103
+ /* t1_ext.c */
2104
+
2105
+ void custom_ext_init(custom_ext_methods *meths);
2106
+
2107
+ __owur int custom_ext_parse(SSL *s, int server,
2108
+ unsigned int ext_type,
2109
+ const unsigned char *ext_data, size_t ext_size,
2110
+ int *al);
2111
+ __owur int custom_ext_add(SSL *s, int server, unsigned char **pret,
2112
+ unsigned char *limit, int *al);
2113
+
2114
+ __owur int custom_exts_copy(custom_ext_methods *dst,
2115
+ const custom_ext_methods *src);
2116
+ void custom_exts_free(custom_ext_methods *exts);
2117
+
2118
+ void ssl_comp_free_compression_methods_int(void);
2119
+
2120
+ # else
2121
+
2122
+ # define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer
2123
+ # define ssl3_setup_buffers SSL_test_functions()->p_ssl3_setup_buffers
2124
+ # define dtls1_process_heartbeat SSL_test_functions()->p_dtls1_process_heartbeat
2125
+
2126
+ # endif
2127
+ #endif