Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,242 @@
|
|||||||
|
2024年 07月 01日 星期一 21:13:13 CST: wenzhi.py 被停止, PID: 29387
|
||||||
|
2024年 07月 01日 星期一 21:13:13 CST: tts.py 运行失败,退出状态码 1, PID: 29405
|
||||||
|
2024年 07月 01日 星期一 21:13:18 CST: wenzhi.py 被停止, PID: 29408
|
||||||
|
2024年 07月 01日 星期一 21:13:18 CST: tts.py 运行失败,退出状态码 1, PID: 29435
|
||||||
|
2024年 07月 01日 星期一 21:13:23 CST: wenzhi.py 被停止, PID: 29456
|
||||||
|
2024年 07月 01日 星期一 21:13:23 CST: tts.py 运行失败,退出状态码 1, PID: 29474
|
||||||
|
2024年 07月 01日 星期一 21:14:26 CST: wenzhi.py 被停止, PID: 29817
|
||||||
|
2024年 07月 01日 星期一 21:14:26 CST: tts.py 运行失败,退出状态码 1, PID: 29835
|
||||||
|
2024年 07月 01日 星期一 21:14:31 CST: wenzhi.py 被停止, PID: 29838
|
||||||
|
2024年 07月 01日 星期一 21:14:31 CST: tts.py 运行失败,退出状态码 1, PID: 29865
|
||||||
|
2024年 07月 01日 星期一 21:16:08 CST: wenzhi.py 被停止, PID: 30373
|
||||||
|
2024年 07月 01日 星期一 21:16:08 CST: tts.py 运行失败,退出状态码 1, PID: 30391
|
||||||
|
2024年 07月 01日 星期一 21:16:13 CST: wenzhi.py 被停止, PID: 30412
|
||||||
|
2024年 07月 01日 星期一 21:16:13 CST: tts.py 运行失败,退出状态码 1, PID: 30466
|
||||||
|
2024年 07月 01日 星期一 21:16:18 CST: wenzhi.py 被停止, PID: 30469
|
||||||
|
2024年 07月 01日 星期一 21:16:18 CST: tts.py 运行失败,退出状态码 1, PID: 30550
|
||||||
|
2024年 07月 01日 星期一 21:16:42 CST: wenzhi.py 被停止, PID: 30664
|
||||||
|
2024年 07月 01日 星期一 21:16:42 CST: tts.py 运行失败,退出状态码 1, PID: 30691
|
||||||
|
2024年 07月 01日 星期一 21:16:47 CST: wenzhi.py 被停止, PID: 30694
|
||||||
|
2024年 07月 01日 星期一 21:16:47 CST: tts.py 运行失败,退出状态码 1, PID: 30721
|
||||||
|
2024年 07月 01日 星期一 21:16:52 CST: wenzhi.py 被停止, PID: 30733
|
||||||
|
2024年 07月 01日 星期一 21:16:52 CST: tts.py 运行失败,退出状态码 1, PID: 30769
|
||||||
|
2024年 07月 01日 星期一 21:16:57 CST: wenzhi.py 被停止, PID: 30781
|
||||||
|
2024年 07月 01日 星期一 21:16:57 CST: tts.py 运行失败,退出状态码 1, PID: 30835
|
||||||
|
2024年 07月 01日 星期一 21:17:02 CST: wenzhi.py 被停止, PID: 30838
|
||||||
|
2024年 07月 01日 星期一 21:17:02 CST: tts.py 运行失败,退出状态码 1, PID: 30895
|
||||||
|
2024年 07月 01日 星期一 21:19:05 CST: wenzhi.py 被停止, PID: 31525
|
||||||
|
2024年 07月 01日 星期一 21:19:05 CST: tts.py 运行失败,退出状态码 1, PID: 31543
|
||||||
|
2024年 07月 01日 星期一 21:19:10 CST: wenzhi.py 被停止, PID: 31546
|
||||||
|
2024年 07月 01日 星期一 21:19:10 CST: tts.py 运行失败,退出状态码 1, PID: 31573
|
||||||
|
2024年 07月 01日 星期一 21:20:16 CST: wenzhi.py 被停止, PID: 31924
|
||||||
|
2024年 07月 01日 星期一 21:20:17 CST: tts.py 运行失败,退出状态码 1, PID: 31960
|
||||||
|
2024年 07月 01日 星期一 21:20:22 CST: wenzhi.py 被停止, PID: 31981
|
||||||
|
2024年 07月 01日 星期一 21:20:22 CST: tts.py 运行失败,退出状态码 1, PID: 32008
|
||||||
|
2024年 07月 01日 星期一 21:20:27 CST: wenzhi.py 被停止, PID: 32029
|
||||||
|
2024年 07月 01日 星期一 21:20:27 CST: tts.py 运行失败,退出状态码 1, PID: 32056
|
||||||
|
2024年 07月 01日 星期一 21:20:32 CST: wenzhi.py 被停止, PID: 32059
|
||||||
|
2024年 07月 01日 星期一 21:20:32 CST: tts.py 运行失败,退出状态码 1, PID: 32086
|
||||||
|
2024年 07月 01日 星期一 21:20:37 CST: wenzhi.py 被停止, PID: 32125
|
||||||
|
2024年 07月 01日 星期一 21:20:37 CST: tts.py 运行失败,退出状态码 1, PID: 32161
|
||||||
|
2024年 07月 01日 星期一 21:20:42 CST: wenzhi.py 被停止, PID: 32191
|
||||||
|
2024年 07月 01日 星期一 21:20:42 CST: tts.py 运行失败,退出状态码 1, PID: 32264
|
||||||
|
2024年 07月 01日 星期一 21:20:47 CST: wenzhi.py 被停止, PID: 32267
|
||||||
|
2024年 07月 01日 星期一 21:20:47 CST: tts.py 运行失败,退出状态码 1, PID: 32303
|
||||||
|
2024年 07月 01日 星期一 21:20:52 CST: wenzhi.py 被停止, PID: 32306
|
||||||
|
2024年 07月 01日 星期一 21:20:52 CST: tts.py 运行失败,退出状态码 1, PID: 32351
|
||||||
|
2024年 07月 01日 星期一 21:20:57 CST: wenzhi.py 被停止, PID: 32354
|
||||||
|
2024年 07月 01日 星期一 21:20:57 CST: tts.py 运行失败,退出状态码 1, PID: 32426
|
||||||
|
2024年 07月 01日 星期一 23:05:26 CST: wenzhi.py 被停止, PID: 8301
|
||||||
|
2024年 07月 01日 星期一 23:05:26 CST: tts.py 运行失败,退出状态码 1, PID: 8318
|
||||||
|
2024年 07月 01日 星期一 23:05:28 CST: wenzhi.py 被停止, PID: 8322
|
||||||
|
2024年 07月 01日 星期一 23:05:28 CST: tts.py 运行失败,退出状态码 1, PID: 8339
|
||||||
|
2024年 07月 01日 星期一 23:05:30 CST: wenzhi.py 被停止, PID: 8352
|
||||||
|
2024年 07月 01日 星期一 23:05:30 CST: tts.py 运行失败,退出状态码 1, PID: 8369
|
||||||
|
2024年 07月 01日 星期一 23:05:32 CST: wenzhi.py 被停止, PID: 8373
|
||||||
|
2024年 07月 01日 星期一 23:05:32 CST: tts.py 运行失败,退出状态码 1, PID: 8400
|
||||||
|
2024年 07月 01日 星期一 23:05:34 CST: wenzhi.py 被停止, PID: 8422
|
||||||
|
2024年 07月 01日 星期一 23:05:34 CST: tts.py 运行失败,退出状态码 1, PID: 8448
|
||||||
|
2024年 07月 01日 星期一 23:09:24 CST: wenzhi.py 被停止, PID: 10042
|
||||||
|
2024年 07月 01日 星期一 23:09:24 CST: tts.py 运行失败,退出状态码 1, PID: 10069
|
||||||
|
2024年 07月 01日 星期一 23:09:26 CST: wenzhi.py 被停止, PID: 10073
|
||||||
|
2024年 07月 01日 星期一 23:09:27 CST: tts.py 运行失败,退出状态码 1, PID: 10090
|
||||||
|
2024年 07月 01日 星期一 23:09:29 CST: wenzhi.py 被停止, PID: 10121
|
||||||
|
2024年 07月 01日 星期一 23:09:29 CST: tts.py 运行失败,退出状态码 1, PID: 10129
|
||||||
|
2024年 07月 01日 星期一 23:09:31 CST: wenzhi.py 被停止, PID: 10178
|
||||||
|
2024年 07月 01日 星期一 23:09:31 CST: tts.py 运行失败,退出状态码 1, PID: 10195
|
||||||
|
2024年 07月 01日 星期一 23:09:33 CST: wenzhi.py 被停止, PID: 10208
|
||||||
|
2024年 07月 01日 星期一 23:09:33 CST: tts.py 运行失败,退出状态码 1, PID: 10225
|
||||||
|
2024年 07月 01日 星期一 23:09:35 CST: wenzhi.py 被停止, PID: 10229
|
||||||
|
2024年 07月 01日 星期一 23:09:35 CST: tts.py 运行失败,退出状态码 1, PID: 10237
|
||||||
|
2024年 07月 01日 星期一 23:09:37 CST: wenzhi.py 被停止, PID: 10241
|
||||||
|
2024年 07月 01日 星期一 23:09:37 CST: tts.py 运行失败,退出状态码 1, PID: 10249
|
||||||
|
2024年 07月 01日 星期一 23:09:39 CST: wenzhi.py 被停止, PID: 10289
|
||||||
|
2024年 07月 01日 星期一 23:09:39 CST: tts.py 运行失败,退出状态码 1, PID: 10306
|
||||||
|
2024年 07月 01日 星期一 23:09:41 CST: wenzhi.py 被停止, PID: 10310
|
||||||
|
2024年 07月 01日 星期一 23:09:41 CST: tts.py 运行失败,退出状态码 1, PID: 10327
|
||||||
|
2024年 07月 01日 星期一 23:09:43 CST: wenzhi.py 被停止, PID: 10340
|
||||||
|
2024年 07月 01日 星期一 23:09:43 CST: tts.py 运行失败,退出状态码 1, PID: 10357
|
||||||
|
2024年 07月 01日 星期一 23:09:45 CST: wenzhi.py 被停止, PID: 10379
|
||||||
|
2024年 07月 01日 星期一 23:09:45 CST: tts.py 运行失败,退出状态码 1, PID: 10396
|
||||||
|
2024年 07月 01日 星期一 23:13:21 CST: wenzhi.py 被停止, PID: 11686
|
||||||
|
2024年 07月 01日 星期一 23:13:21 CST: tts.py 运行成功, PID: 11694
|
||||||
|
2024年 07月 01日 星期一 23:13:23 CST: wenzhi.py 被停止, PID: 11698
|
||||||
|
2024年 07月 01日 星期一 23:13:23 CST: tts.py 运行成功, PID: 11733
|
||||||
|
2024年 07月 01日 星期一 23:14:23 CST: wenzhi.py 被停止, PID: 12133
|
||||||
|
2024年 07月 01日 星期一 23:14:23 CST: tts.py 运行成功, PID: 12141
|
||||||
|
2024年 07月 01日 星期一 23:14:25 CST: wenzhi.py 被停止, PID: 12154
|
||||||
|
2024年 07月 01日 星期一 23:14:25 CST: tts.py 运行成功, PID: 12180
|
||||||
|
2024年 07月 01日 星期一 23:16:13 CST: wenzhi.py 被停止, PID: 12910
|
||||||
|
2024年 07月 01日 星期一 23:16:13 CST: tts.py 运行成功, PID: 12918
|
||||||
|
2024年 07月 01日 星期一 23:16:15 CST: wenzhi.py 被停止, PID: 12940
|
||||||
|
2024年 07月 01日 星期一 23:16:15 CST: tts.py 运行成功, PID: 12957
|
||||||
|
2024年 07月 01日 星期一 23:16:17 CST: wenzhi.py 被停止, PID: 12961
|
||||||
|
2024年 07月 01日 星期一 23:16:17 CST: tts.py 运行成功, PID: 12978
|
||||||
|
2024年 07月 01日 星期一 23:16:19 CST: wenzhi.py 被停止, PID: 12982
|
||||||
|
2024年 07月 01日 星期一 23:16:19 CST: tts.py 运行成功, PID: 12990
|
||||||
|
2024年 07月 01日 星期一 23:16:21 CST: wenzhi.py 被停止, PID: 12994
|
||||||
|
2024年 07月 01日 星期一 23:16:21 CST: tts.py 运行成功, PID: 13002
|
||||||
|
2024年 07月 01日 星期一 23:16:23 CST: wenzhi.py 被停止, PID: 13024
|
||||||
|
2024年 07月 01日 星期一 23:16:23 CST: tts.py 运行成功, PID: 13041
|
||||||
|
2024年 07月 01日 星期一 23:16:25 CST: wenzhi.py 被停止, PID: 13054
|
||||||
|
2024年 07月 01日 星期一 23:16:25 CST: tts.py 运行成功, PID: 13062
|
||||||
|
2024年 07月 01日 星期一 23:16:27 CST: wenzhi.py 被停止, PID: 13075
|
||||||
|
2024年 07月 01日 星期一 23:16:27 CST: tts.py 运行成功, PID: 13083
|
||||||
|
2024年 07月 01日 星期一 23:17:10 CST: wenzhi.py 被停止, PID: 13388
|
||||||
|
2024年 07月 01日 星期一 23:17:10 CST: tts.py 运行成功, PID: 13396
|
||||||
|
2024年 07月 01日 星期一 23:17:12 CST: wenzhi.py 被停止, PID: 13400
|
||||||
|
2024年 07月 01日 星期一 23:17:12 CST: tts.py 运行成功, PID: 13408
|
||||||
|
2024年 07月 01日 星期一 23:17:23 CST: wenzhi.py 被停止, PID: 13502
|
||||||
|
2024年 07月 01日 星期一 23:17:23 CST: tts.py 运行成功, PID: 13510
|
||||||
|
2024年 07月 01日 星期一 23:17:25 CST: wenzhi.py 被停止, PID: 13514
|
||||||
|
2024年 07月 01日 星期一 23:17:25 CST: tts.py 运行成功, PID: 13522
|
||||||
|
2024年 07月 01日 星期一 23:17:27 CST: wenzhi.py 被停止, PID: 13526
|
||||||
|
2024年 07月 01日 星期一 23:17:27 CST: tts.py 运行成功, PID: 13534
|
||||||
|
2024年 07月 01日 星期一 23:17:59 CST: wenzhi.py 被停止, PID: 13762
|
||||||
|
2024年 07月 01日 星期一 23:17:59 CST: tts.py 运行失败,退出状态码 1, PID: 13779
|
||||||
|
2024年 07月 01日 星期一 23:18:01 CST: wenzhi.py 被停止, PID: 13783
|
||||||
|
2024年 07月 01日 星期一 23:18:01 CST: tts.py 运行失败,退出状态码 1, PID: 13791
|
||||||
|
2024年 07月 01日 星期一 23:18:03 CST: wenzhi.py 被停止, PID: 13795
|
||||||
|
2024年 07月 01日 星期一 23:18:03 CST: tts.py 运行失败,退出状态码 1, PID: 13821
|
||||||
|
2024年 07月 01日 星期一 23:18:05 CST: wenzhi.py 被停止, PID: 13825
|
||||||
|
2024年 07月 01日 星期一 23:18:05 CST: tts.py 运行失败,退出状态码 1, PID: 13833
|
||||||
|
2024年 07月 01日 星期一 23:18:07 CST: wenzhi.py 被停止, PID: 13837
|
||||||
|
2024年 07月 01日 星期一 23:18:07 CST: tts.py 运行失败,退出状态码 1, PID: 13854
|
||||||
|
2024年 07月 01日 星期一 23:18:09 CST: wenzhi.py 被停止, PID: 13867
|
||||||
|
2024年 07月 01日 星期一 23:18:09 CST: tts.py 运行失败,退出状态码 1, PID: 13875
|
||||||
|
2024年 07月 01日 星期一 23:18:11 CST: wenzhi.py 被停止, PID: 13879
|
||||||
|
2024年 07月 01日 星期一 23:18:11 CST: tts.py 运行失败,退出状态码 1, PID: 13887
|
||||||
|
2024年 07月 01日 星期一 23:18:13 CST: wenzhi.py 被停止, PID: 13891
|
||||||
|
2024年 07月 01日 星期一 23:18:13 CST: tts.py 运行失败,退出状态码 1, PID: 13899
|
||||||
|
2024年 07月 01日 星期一 23:18:15 CST: wenzhi.py 被停止, PID: 13903
|
||||||
|
2024年 07月 01日 星期一 23:18:15 CST: tts.py 运行失败,退出状态码 1, PID: 13911
|
||||||
|
2024年 07月 01日 星期一 23:18:17 CST: wenzhi.py 被停止, PID: 13915
|
||||||
|
2024年 07月 01日 星期一 23:18:18 CST: tts.py 运行失败,退出状态码 1, PID: 13923
|
||||||
|
2024年 07月 01日 星期一 23:18:20 CST: wenzhi.py 被停止, PID: 13927
|
||||||
|
2024年 07月 01日 星期一 23:18:20 CST: tts.py 运行失败,退出状态码 1, PID: 13935
|
||||||
|
2024年 07月 01日 星期一 23:18:22 CST: wenzhi.py 被停止, PID: 13939
|
||||||
|
2024年 07月 01日 星期一 23:18:22 CST: tts.py 运行失败,退出状态码 1, PID: 13947
|
||||||
|
2024年 07月 01日 星期一 23:18:24 CST: wenzhi.py 被停止, PID: 13960
|
||||||
|
2024年 07月 01日 星期一 23:18:24 CST: tts.py 运行失败,退出状态码 1, PID: 13968
|
||||||
|
2024年 07月 01日 星期一 23:18:26 CST: wenzhi.py 被停止, PID: 13972
|
||||||
|
2024年 07月 01日 星期一 23:18:26 CST: tts.py 运行失败,退出状态码 1, PID: 13980
|
||||||
|
2024年 07月 01日 星期一 23:18:28 CST: wenzhi.py 被停止, PID: 13984
|
||||||
|
2024年 07月 01日 星期一 23:18:28 CST: tts.py 运行失败,退出状态码 1, PID: 13992
|
||||||
|
2024年 07月 01日 星期一 23:18:30 CST: wenzhi.py 被停止, PID: 13996
|
||||||
|
2024年 07月 01日 星期一 23:18:30 CST: tts.py 运行失败,退出状态码 1, PID: 14004
|
||||||
|
2024年 07月 01日 星期一 23:18:32 CST: wenzhi.py 被停止, PID: 14017
|
||||||
|
2024年 07月 01日 星期一 23:18:32 CST: tts.py 运行失败,退出状态码 1, PID: 14025
|
||||||
|
2024年 07月 01日 星期一 23:18:34 CST: wenzhi.py 被停止, PID: 14029
|
||||||
|
2024年 07月 01日 星期一 23:18:34 CST: tts.py 运行失败,退出状态码 1, PID: 14046
|
||||||
|
2024年 07月 01日 星期一 23:18:36 CST: wenzhi.py 被停止, PID: 14050
|
||||||
|
2024年 07月 01日 星期一 23:18:36 CST: tts.py 运行失败,退出状态码 1, PID: 14076
|
||||||
|
2024年 07月 01日 星期一 23:18:38 CST: wenzhi.py 被停止, PID: 14080
|
||||||
|
2024年 07月 01日 星期一 23:18:38 CST: tts.py 运行失败,退出状态码 1, PID: 14088
|
||||||
|
2024年 07月 01日 星期一 23:18:40 CST: wenzhi.py 被停止, PID: 14092
|
||||||
|
2024年 07月 01日 星期一 23:18:40 CST: tts.py 运行失败,退出状态码 1, PID: 14109
|
||||||
|
2024年 07月 01日 星期一 23:18:42 CST: wenzhi.py 被停止, PID: 14113
|
||||||
|
2024年 07月 01日 星期一 23:18:42 CST: tts.py 运行失败,退出状态码 1, PID: 14130
|
||||||
|
2024年 07月 01日 星期一 23:18:44 CST: wenzhi.py 被停止, PID: 14134
|
||||||
|
2024年 07月 01日 星期一 23:18:44 CST: tts.py 运行失败,退出状态码 1, PID: 14142
|
||||||
|
2024年 07月 01日 星期一 23:18:46 CST: wenzhi.py 被停止, PID: 14146
|
||||||
|
2024年 07月 01日 星期一 23:18:46 CST: tts.py 运行失败,退出状态码 1, PID: 14154
|
||||||
|
2024年 07月 01日 星期一 23:18:48 CST: wenzhi.py 被停止, PID: 14167
|
||||||
|
2024年 07月 01日 星期一 23:18:48 CST: tts.py 运行失败,退出状态码 1, PID: 14184
|
||||||
|
2024年 07月 01日 星期一 23:18:50 CST: wenzhi.py 被停止, PID: 14197
|
||||||
|
2024年 07月 01日 星期一 23:18:50 CST: tts.py 运行失败,退出状态码 1, PID: 14223
|
||||||
|
2024年 07月 01日 星期一 23:18:52 CST: wenzhi.py 被停止, PID: 14227
|
||||||
|
2024年 07月 01日 星期一 23:18:52 CST: tts.py 运行失败,退出状态码 1, PID: 14235
|
||||||
|
2024年 07月 01日 星期一 23:18:54 CST: wenzhi.py 被停止, PID: 14248
|
||||||
|
2024年 07月 01日 星期一 23:18:54 CST: tts.py 运行失败,退出状态码 1, PID: 14282
|
||||||
|
2024年 07月 01日 星期一 23:18:56 CST: wenzhi.py 被停止, PID: 14296
|
||||||
|
2024年 07月 01日 星期一 23:18:56 CST: tts.py 运行失败,退出状态码 1, PID: 14313
|
||||||
|
2024年 07月 01日 星期一 23:18:58 CST: wenzhi.py 被停止, PID: 14334
|
||||||
|
2024年 07月 01日 星期一 23:18:58 CST: tts.py 运行失败,退出状态码 1, PID: 14361
|
||||||
|
2024年 07月 01日 星期一 23:19:00 CST: wenzhi.py 被停止, PID: 14374
|
||||||
|
2024年 07月 01日 星期一 23:19:00 CST: tts.py 运行失败,退出状态码 1, PID: 14391
|
||||||
|
2024年 07月 01日 星期一 23:19:02 CST: wenzhi.py 被停止, PID: 14395
|
||||||
|
2024年 07月 01日 星期一 23:19:02 CST: tts.py 运行失败,退出状态码 1, PID: 14403
|
||||||
|
2024年 07月 01日 星期一 23:19:04 CST: wenzhi.py 被停止, PID: 14425
|
||||||
|
2024年 07月 01日 星期一 23:19:04 CST: tts.py 运行失败,退出状态码 1, PID: 14433
|
||||||
|
2024年 07月 01日 星期一 23:19:06 CST: wenzhi.py 被停止, PID: 14446
|
||||||
|
2024年 07月 01日 星期一 23:19:07 CST: tts.py 运行失败,退出状态码 1, PID: 14463
|
||||||
|
2024年 07月 01日 星期一 23:19:09 CST: wenzhi.py 被停止, PID: 14485
|
||||||
|
2024年 07月 01日 星期一 23:19:09 CST: tts.py 运行失败,退出状态码 1, PID: 14502
|
||||||
|
2024年 07月 01日 星期一 23:19:11 CST: wenzhi.py 被停止, PID: 14515
|
||||||
|
2024年 07月 01日 星期一 23:19:11 CST: tts.py 运行失败,退出状态码 1, PID: 14532
|
||||||
|
2024年 07月 01日 星期一 23:19:13 CST: wenzhi.py 被停止, PID: 14536
|
||||||
|
2024年 07月 01日 星期一 23:19:13 CST: tts.py 运行失败,退出状态码 1, PID: 14544
|
||||||
|
2024年 07月 01日 星期一 23:19:15 CST: wenzhi.py 被停止, PID: 14548
|
||||||
|
2024年 07月 01日 星期一 23:19:15 CST: tts.py 运行失败,退出状态码 1, PID: 14574
|
||||||
|
2024年 07月 01日 星期一 23:19:17 CST: wenzhi.py 被停止, PID: 14578
|
||||||
|
2024年 07月 01日 星期一 23:19:17 CST: tts.py 运行失败,退出状态码 1, PID: 14586
|
||||||
|
2024年 07月 01日 星期一 23:19:19 CST: wenzhi.py 被停止, PID: 14599
|
||||||
|
2024年 07月 01日 星期一 23:19:19 CST: tts.py 运行失败,退出状态码 1, PID: 14616
|
||||||
|
2024年 07月 01日 星期一 23:19:21 CST: wenzhi.py 被停止, PID: 14620
|
||||||
|
2024年 07月 01日 星期一 23:19:21 CST: tts.py 运行失败,退出状态码 1, PID: 14646
|
||||||
|
2024年 07月 01日 星期一 23:19:23 CST: wenzhi.py 被停止, PID: 14650
|
||||||
|
2024年 07月 01日 星期一 23:19:23 CST: tts.py 运行失败,退出状态码 1, PID: 14658
|
||||||
|
2024年 07月 01日 星期一 23:19:25 CST: wenzhi.py 被停止, PID: 14671
|
||||||
|
2024年 07月 01日 星期一 23:19:25 CST: tts.py 运行失败,退出状态码 1, PID: 14679
|
||||||
|
2024年 07月 01日 星期一 23:19:27 CST: wenzhi.py 被停止, PID: 14692
|
||||||
|
2024年 07月 01日 星期一 23:19:27 CST: tts.py 运行失败,退出状态码 1, PID: 14709
|
||||||
|
2024年 07月 01日 星期一 23:19:29 CST: wenzhi.py 被停止, PID: 14713
|
||||||
|
2024年 07月 01日 星期一 23:19:29 CST: tts.py 运行失败,退出状态码 1, PID: 14721
|
||||||
|
2024年 07月 01日 星期一 23:19:31 CST: wenzhi.py 被停止, PID: 14735
|
||||||
|
2024年 07月 01日 星期一 23:19:31 CST: tts.py 运行失败,退出状态码 1, PID: 14743
|
||||||
|
2024年 07月 01日 星期一 23:19:33 CST: wenzhi.py 被停止, PID: 14756
|
||||||
|
2024年 07月 01日 星期一 23:19:33 CST: tts.py 运行失败,退出状态码 1, PID: 14773
|
||||||
|
2024年 07月 01日 星期一 23:19:35 CST: wenzhi.py 被停止, PID: 14777
|
||||||
|
2024年 07月 01日 星期一 23:19:35 CST: tts.py 运行失败,退出状态码 1, PID: 14785
|
||||||
|
2024年 07月 01日 星期一 23:19:37 CST: wenzhi.py 被停止, PID: 14798
|
||||||
|
2024年 07月 01日 星期一 23:19:37 CST: tts.py 运行失败,退出状态码 1, PID: 14815
|
||||||
|
2024年 07月 01日 星期一 23:19:39 CST: wenzhi.py 被停止, PID: 14819
|
||||||
|
2024年 07月 01日 星期一 23:19:39 CST: tts.py 运行失败,退出状态码 1, PID: 14836
|
||||||
|
2024年 07月 01日 星期一 23:19:41 CST: wenzhi.py 被停止, PID: 14840
|
||||||
|
2024年 07月 01日 星期一 23:19:41 CST: tts.py 运行失败,退出状态码 1, PID: 14848
|
||||||
|
2024年 07月 01日 星期一 23:19:43 CST: wenzhi.py 被停止, PID: 14852
|
||||||
|
2024年 07月 01日 星期一 23:19:43 CST: tts.py 运行失败,退出状态码 1, PID: 14860
|
||||||
|
2024年 07月 01日 星期一 23:19:45 CST: wenzhi.py 被停止, PID: 14864
|
||||||
|
2024年 07月 01日 星期一 23:19:45 CST: tts.py 运行失败,退出状态码 1, PID: 14872
|
||||||
|
2024年 07月 01日 星期一 23:19:47 CST: wenzhi.py 被停止, PID: 14885
|
||||||
|
2024年 07月 01日 星期一 23:19:47 CST: tts.py 运行失败,退出状态码 1, PID: 14893
|
||||||
|
2024年 07月 01日 星期一 23:19:49 CST: wenzhi.py 被停止, PID: 14897
|
||||||
|
2024年 07月 01日 星期一 23:19:49 CST: tts.py 运行失败,退出状态码 1, PID: 14905
|
||||||
|
2024年 07月 01日 星期一 23:19:51 CST: wenzhi.py 被停止, PID: 14909
|
||||||
|
2024年 07月 01日 星期一 23:19:51 CST: tts.py 运行失败,退出状态码 1, PID: 14926
|
||||||
|
2024年 07月 01日 星期一 23:19:53 CST: wenzhi.py 被停止, PID: 14948
|
||||||
|
2024年 07月 01日 星期一 23:19:53 CST: tts.py 运行失败,退出状态码 1, PID: 14956
|
||||||
|
2024年 07月 01日 星期一 23:19:55 CST: wenzhi.py 被停止, PID: 14969
|
||||||
|
2024年 07月 01日 星期一 23:19:55 CST: tts.py 运行失败,退出状态码 1, PID: 14977
|
||||||
|
2024年 07月 01日 星期一 23:19:58 CST: wenzhi.py 被停止, PID: 14981
|
||||||
|
2024年 07月 01日 星期一 23:19:58 CST: tts.py 运行失败,退出状态码 1, PID: 15007
|
||||||
|
2024年 07月 01日 星期一 23:20:00 CST: wenzhi.py 被停止, PID: 15020
|
||||||
|
2024年 07月 01日 星期一 23:20:00 CST: tts.py 运行失败,退出状态码 1, PID: 15037
|
||||||
|
2024年 07月 01日 星期一 23:20:02 CST: wenzhi.py 被停止, PID: 15041
|
||||||
|
2024年 07月 01日 星期一 23:20:02 CST: tts.py 运行失败,退出状态码 1, PID: 15049
|
||||||
|
2024年 07月 01日 星期一 23:20:04 CST: wenzhi.py 被停止, PID: 15053
|
||||||
|
2024年 07月 01日 星期一 23:20:04 CST: tts.py 运行失败,退出状态码 1, PID: 15061
|
||||||
|
2024年 07月 01日 星期一 23:20:06 CST: wenzhi.py 被停止, PID: 15067
|
||||||
|
2024年 07月 01日 星期一 23:20:06 CST: tts.py 运行失败,退出状态码 1, PID: 15075
|
||||||
|
2024年 07月 01日 星期一 23:20:08 CST: wenzhi.py 被停止, PID: 15079
|
||||||
|
2024年 07月 01日 星期一 23:20:08 CST: tts.py 运行失败,退出状态码 1, PID: 15105
|
@ -1,6 +0,0 @@
|
|||||||
cd sample
|
|
||||||
cd asr && make clean && rm core main *.log
|
|
||||||
cd ..
|
|
||||||
cd asrDemo2/run && make clean
|
|
||||||
cd ../..
|
|
||||||
cd asrDemo-srt && rm -rf run/*
|
|
File diff suppressed because it is too large
Load Diff
@ -1,198 +0,0 @@
|
|||||||
/* include/curl/curlbuild.h. Generated from curlbuild.h.in by configure. */
|
|
||||||
#ifndef __CURL_CURLBUILD_H
|
|
||||||
#define __CURL_CURLBUILD_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/* ================================================================ */
|
|
||||||
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
|
|
||||||
/* ================================================================ */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NOTE 1:
|
|
||||||
* -------
|
|
||||||
*
|
|
||||||
* Nothing in this file is intended to be modified or adjusted by the
|
|
||||||
* curl library user nor by the curl library builder.
|
|
||||||
*
|
|
||||||
* If you think that something actually needs to be changed, adjusted
|
|
||||||
* or fixed in this file, then, report it on the libcurl development
|
|
||||||
* mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
|
|
||||||
*
|
|
||||||
* This header file shall only export symbols which are 'curl' or 'CURL'
|
|
||||||
* prefixed, otherwise public name space would be polluted.
|
|
||||||
*
|
|
||||||
* NOTE 2:
|
|
||||||
* -------
|
|
||||||
*
|
|
||||||
* Right now you might be staring at file include/curl/curlbuild.h.in or
|
|
||||||
* at file include/curl/curlbuild.h, this is due to the following reason:
|
|
||||||
*
|
|
||||||
* On systems capable of running the configure script, the configure process
|
|
||||||
* will overwrite the distributed include/curl/curlbuild.h file with one that
|
|
||||||
* is suitable and specific to the library being configured and built, which
|
|
||||||
* is generated from the include/curl/curlbuild.h.in template file.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* ================================================================ */
|
|
||||||
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
|
|
||||||
/* ================================================================ */
|
|
||||||
|
|
||||||
#ifdef CURL_SIZEOF_LONG
|
|
||||||
#error "CURL_SIZEOF_LONG shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_SIZEOF_LONG_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
|
|
||||||
#error "CURL_TYPEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_SIZEOF_CURL_SOCKLEN_T
|
|
||||||
#error "CURL_SIZEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_TYPEOF_CURL_OFF_T
|
|
||||||
#error "CURL_TYPEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_FORMAT_CURL_OFF_T
|
|
||||||
#error "CURL_FORMAT_CURL_OFF_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_FORMAT_CURL_OFF_TU
|
|
||||||
#error "CURL_FORMAT_CURL_OFF_TU shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_FORMAT_OFF_T
|
|
||||||
#error "CURL_FORMAT_OFF_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_FORMAT_OFF_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_SIZEOF_CURL_OFF_T
|
|
||||||
#error "CURL_SIZEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_SUFFIX_CURL_OFF_T
|
|
||||||
#error "CURL_SUFFIX_CURL_OFF_T shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CURL_SUFFIX_CURL_OFF_TU
|
|
||||||
#error "CURL_SUFFIX_CURL_OFF_TU shall not be defined except in curlbuild.h"
|
|
||||||
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_already_defined
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ================================================================ */
|
|
||||||
/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
|
|
||||||
/* ================================================================ */
|
|
||||||
|
|
||||||
/* Configure process defines this to 1 when it finds out that system */
|
|
||||||
/* header file ws2tcpip.h must be included by the external interface. */
|
|
||||||
/* #undef CURL_PULL_WS2TCPIP_H */
|
|
||||||
#ifdef CURL_PULL_WS2TCPIP_H
|
|
||||||
# ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
# define WIN32_LEAN_AND_MEAN
|
|
||||||
# endif
|
|
||||||
# include <windows.h>
|
|
||||||
# include <winsock2.h>
|
|
||||||
# include <ws2tcpip.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Configure process defines this to 1 when it finds out that system */
|
|
||||||
/* header file sys/types.h must be included by the external interface. */
|
|
||||||
#define CURL_PULL_SYS_TYPES_H 1
|
|
||||||
#ifdef CURL_PULL_SYS_TYPES_H
|
|
||||||
# include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Configure process defines this to 1 when it finds out that system */
|
|
||||||
/* header file stdint.h must be included by the external interface. */
|
|
||||||
/* #undef CURL_PULL_STDINT_H */
|
|
||||||
#ifdef CURL_PULL_STDINT_H
|
|
||||||
# include <stdint.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Configure process defines this to 1 when it finds out that system */
|
|
||||||
/* header file inttypes.h must be included by the external interface. */
|
|
||||||
/* #undef CURL_PULL_INTTYPES_H */
|
|
||||||
#ifdef CURL_PULL_INTTYPES_H
|
|
||||||
# include <inttypes.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Configure process defines this to 1 when it finds out that system */
|
|
||||||
/* header file sys/socket.h must be included by the external interface. */
|
|
||||||
#define CURL_PULL_SYS_SOCKET_H 1
|
|
||||||
#ifdef CURL_PULL_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Configure process defines this to 1 when it finds out that system */
|
|
||||||
/* header file sys/poll.h must be included by the external interface. */
|
|
||||||
/* #undef CURL_PULL_SYS_POLL_H */
|
|
||||||
#ifdef CURL_PULL_SYS_POLL_H
|
|
||||||
# include <sys/poll.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The size of `long', as computed by sizeof. */
|
|
||||||
#define CURL_SIZEOF_LONG 8
|
|
||||||
|
|
||||||
/* Integral data type used for curl_socklen_t. */
|
|
||||||
#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
|
|
||||||
|
|
||||||
/* The size of `curl_socklen_t', as computed by sizeof. */
|
|
||||||
#define CURL_SIZEOF_CURL_SOCKLEN_T 4
|
|
||||||
|
|
||||||
/* Data type definition of curl_socklen_t. */
|
|
||||||
typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
|
|
||||||
|
|
||||||
/* Signed integral data type used for curl_off_t. */
|
|
||||||
#define CURL_TYPEOF_CURL_OFF_T long
|
|
||||||
|
|
||||||
/* Data type definition of curl_off_t. */
|
|
||||||
typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
|
|
||||||
|
|
||||||
/* curl_off_t formatting string directive without "%" conversion specifier. */
|
|
||||||
#define CURL_FORMAT_CURL_OFF_T "ld"
|
|
||||||
|
|
||||||
/* unsigned curl_off_t formatting string without "%" conversion specifier. */
|
|
||||||
#define CURL_FORMAT_CURL_OFF_TU "lu"
|
|
||||||
|
|
||||||
/* curl_off_t formatting string directive with "%" conversion specifier. */
|
|
||||||
#define CURL_FORMAT_OFF_T "%ld"
|
|
||||||
|
|
||||||
/* The size of `curl_off_t', as computed by sizeof. */
|
|
||||||
#define CURL_SIZEOF_CURL_OFF_T 8
|
|
||||||
|
|
||||||
/* curl_off_t constant suffix. */
|
|
||||||
#define CURL_SUFFIX_CURL_OFF_T L
|
|
||||||
|
|
||||||
/* unsigned curl_off_t constant suffix. */
|
|
||||||
#define CURL_SUFFIX_CURL_OFF_TU UL
|
|
||||||
|
|
||||||
#endif /* __CURL_CURLBUILD_H */
|
|
@ -1,262 +0,0 @@
|
|||||||
#ifndef __CURL_CURLRULES_H
|
|
||||||
#define __CURL_CURLRULES_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/* ================================================================ */
|
|
||||||
/* COMPILE TIME SANITY CHECKS */
|
|
||||||
/* ================================================================ */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NOTE 1:
|
|
||||||
* -------
|
|
||||||
*
|
|
||||||
* All checks done in this file are intentionally placed in a public
|
|
||||||
* header file which is pulled by curl/curl.h when an application is
|
|
||||||
* being built using an already built libcurl library. Additionally
|
|
||||||
* this file is also included and used when building the library.
|
|
||||||
*
|
|
||||||
* If compilation fails on this file it is certainly sure that the
|
|
||||||
* problem is elsewhere. It could be a problem in the curlbuild.h
|
|
||||||
* header file, or simply that you are using different compilation
|
|
||||||
* settings than those used to build the library.
|
|
||||||
*
|
|
||||||
* Nothing in this file is intended to be modified or adjusted by the
|
|
||||||
* curl library user nor by the curl library builder.
|
|
||||||
*
|
|
||||||
* Do not deactivate any check, these are done to make sure that the
|
|
||||||
* library is properly built and used.
|
|
||||||
*
|
|
||||||
* You can find further help on the libcurl development mailing list:
|
|
||||||
* http://cool.haxx.se/mailman/listinfo/curl-library/
|
|
||||||
*
|
|
||||||
* NOTE 2
|
|
||||||
* ------
|
|
||||||
*
|
|
||||||
* Some of the following compile time checks are based on the fact
|
|
||||||
* that the dimension of a constant array can not be a negative one.
|
|
||||||
* In this way if the compile time verification fails, the compilation
|
|
||||||
* will fail issuing an error. The error description wording is compiler
|
|
||||||
* dependent but it will be quite similar to one of the following:
|
|
||||||
*
|
|
||||||
* "negative subscript or subscript is too large"
|
|
||||||
* "array must have at least one element"
|
|
||||||
* "-1 is an illegal array size"
|
|
||||||
* "size of array is negative"
|
|
||||||
*
|
|
||||||
* If you are building an application which tries to use an already
|
|
||||||
* built libcurl library and you are getting this kind of errors on
|
|
||||||
* this file, it is a clear indication that there is a mismatch between
|
|
||||||
* how the library was built and how you are trying to use it for your
|
|
||||||
* application. Your already compiled or binary library provider is the
|
|
||||||
* only one who can give you the details you need to properly use it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify that some macros are actually defined.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CURL_SIZEOF_LONG
|
|
||||||
# error "CURL_SIZEOF_LONG definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_SIZEOF_LONG_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_TYPEOF_CURL_SOCKLEN_T
|
|
||||||
# error "CURL_TYPEOF_CURL_SOCKLEN_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_SIZEOF_CURL_SOCKLEN_T
|
|
||||||
# error "CURL_SIZEOF_CURL_SOCKLEN_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_TYPEOF_CURL_OFF_T
|
|
||||||
# error "CURL_TYPEOF_CURL_OFF_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_FORMAT_CURL_OFF_T
|
|
||||||
# error "CURL_FORMAT_CURL_OFF_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_FORMAT_CURL_OFF_TU
|
|
||||||
# error "CURL_FORMAT_CURL_OFF_TU definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_FORMAT_OFF_T
|
|
||||||
# error "CURL_FORMAT_OFF_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_FORMAT_OFF_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_SIZEOF_CURL_OFF_T
|
|
||||||
# error "CURL_SIZEOF_CURL_OFF_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_SUFFIX_CURL_OFF_T
|
|
||||||
# error "CURL_SUFFIX_CURL_OFF_T definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CURL_SUFFIX_CURL_OFF_TU
|
|
||||||
# error "CURL_SUFFIX_CURL_OFF_TU definition is missing!"
|
|
||||||
Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_is_missing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Macros private to this header file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
|
|
||||||
|
|
||||||
#define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify that the size previously defined and expected for long
|
|
||||||
* is the same as the one reported by sizeof() at compile time.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef char
|
|
||||||
__curl_rule_01__
|
|
||||||
[CurlchkszEQ(long, CURL_SIZEOF_LONG)];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify that the size previously defined and expected for
|
|
||||||
* curl_off_t is actually the the same as the one reported
|
|
||||||
* by sizeof() at compile time.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef char
|
|
||||||
__curl_rule_02__
|
|
||||||
[CurlchkszEQ(curl_off_t, CURL_SIZEOF_CURL_OFF_T)];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify at compile time that the size of curl_off_t as reported
|
|
||||||
* by sizeof() is greater or equal than the one reported for long
|
|
||||||
* for the current compilation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef char
|
|
||||||
__curl_rule_03__
|
|
||||||
[CurlchkszGE(curl_off_t, long)];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify that the size previously defined and expected for
|
|
||||||
* curl_socklen_t is actually the the same as the one reported
|
|
||||||
* by sizeof() at compile time.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef char
|
|
||||||
__curl_rule_04__
|
|
||||||
[CurlchkszEQ(curl_socklen_t, CURL_SIZEOF_CURL_SOCKLEN_T)];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify at compile time that the size of curl_socklen_t as reported
|
|
||||||
* by sizeof() is greater or equal than the one reported for int for
|
|
||||||
* the current compilation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef char
|
|
||||||
__curl_rule_05__
|
|
||||||
[CurlchkszGE(curl_socklen_t, int)];
|
|
||||||
|
|
||||||
/* ================================================================ */
|
|
||||||
/* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */
|
|
||||||
/* ================================================================ */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
|
|
||||||
* these to be visible and exported by the external libcurl interface API,
|
|
||||||
* while also making them visible to the library internals, simply including
|
|
||||||
* curl_setup.h, without actually needing to include curl.h internally.
|
|
||||||
* If some day this section would grow big enough, all this should be moved
|
|
||||||
* to its own header file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Figure out if we can use the ## preprocessor operator, which is supported
|
|
||||||
* by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
|
|
||||||
* or __cplusplus so we need to carefully check for them too.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
|
|
||||||
defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
|
|
||||||
defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
|
|
||||||
defined(__ILEC400__)
|
|
||||||
/* This compiler is believed to have an ISO compatible preprocessor */
|
|
||||||
#define CURL_ISOCPP
|
|
||||||
#else
|
|
||||||
/* This compiler is believed NOT to have an ISO compatible preprocessor */
|
|
||||||
#undef CURL_ISOCPP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Macros for minimum-width signed and unsigned curl_off_t integer constants.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
|
|
||||||
# define __CURL_OFF_T_C_HLPR2(x) x
|
|
||||||
# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x)
|
|
||||||
# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
|
|
||||||
__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
|
|
||||||
# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
|
|
||||||
__CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
|
|
||||||
#else
|
|
||||||
# ifdef CURL_ISOCPP
|
|
||||||
# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
|
|
||||||
# else
|
|
||||||
# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
|
|
||||||
# endif
|
|
||||||
# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix)
|
|
||||||
# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
|
|
||||||
# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get rid of macros private to this header file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#undef CurlchkszEQ
|
|
||||||
#undef CurlchkszGE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get rid of macros not intended to exist beyond this point.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#undef CURL_PULL_WS2TCPIP_H
|
|
||||||
#undef CURL_PULL_SYS_TYPES_H
|
|
||||||
#undef CURL_PULL_SYS_SOCKET_H
|
|
||||||
#undef CURL_PULL_SYS_POLL_H
|
|
||||||
#undef CURL_PULL_STDINT_H
|
|
||||||
#undef CURL_PULL_INTTYPES_H
|
|
||||||
|
|
||||||
#undef CURL_TYPEOF_CURL_SOCKLEN_T
|
|
||||||
#undef CURL_TYPEOF_CURL_OFF_T
|
|
||||||
|
|
||||||
#ifdef CURL_NO_OLDIES
|
|
||||||
#undef CURL_FORMAT_OFF_T /* not required since 7.19.0 - obsoleted in 7.20.0 */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __CURL_CURLRULES_H */
|
|
@ -1,69 +0,0 @@
|
|||||||
#ifndef __CURL_CURLVER_H
|
|
||||||
#define __CURL_CURLVER_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/* This header file contains nothing but libcurl version info, generated by
|
|
||||||
a script at release-time. This was made its own header file in 7.11.2 */
|
|
||||||
|
|
||||||
/* This is the global package copyright */
|
|
||||||
#define LIBCURL_COPYRIGHT "1996 - 2014 Daniel Stenberg, <daniel@haxx.se>."
|
|
||||||
|
|
||||||
/* This is the version number of the libcurl package from which this header
|
|
||||||
file origins: */
|
|
||||||
#define LIBCURL_VERSION "7.39.0"
|
|
||||||
|
|
||||||
/* The numeric version number is also available "in parts" by using these
|
|
||||||
defines: */
|
|
||||||
#define LIBCURL_VERSION_MAJOR 7
|
|
||||||
#define LIBCURL_VERSION_MINOR 39
|
|
||||||
#define LIBCURL_VERSION_PATCH 0
|
|
||||||
|
|
||||||
/* This is the numeric version of the libcurl version number, meant for easier
|
|
||||||
parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
|
|
||||||
always follow this syntax:
|
|
||||||
|
|
||||||
0xXXYYZZ
|
|
||||||
|
|
||||||
Where XX, YY and ZZ are the main version, release and patch numbers in
|
|
||||||
hexadecimal (using 8 bits each). All three numbers are always represented
|
|
||||||
using two digits. 1.2 would appear as "0x010200" while version 9.11.7
|
|
||||||
appears as "0x090b07".
|
|
||||||
|
|
||||||
This 6-digit (24 bits) hexadecimal number does not show pre-release number,
|
|
||||||
and it is always a greater number in a more recent release. It makes
|
|
||||||
comparisons with greater than and less than work.
|
|
||||||
*/
|
|
||||||
#define LIBCURL_VERSION_NUM 0x072700
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is the date and time when the full source package was created. The
|
|
||||||
* timestamp is not stored in git, as the timestamp is properly set in the
|
|
||||||
* tarballs by the maketgz script.
|
|
||||||
*
|
|
||||||
* The format of the date should follow this template:
|
|
||||||
*
|
|
||||||
* "Mon Feb 12 11:35:33 UTC 2007"
|
|
||||||
*/
|
|
||||||
#define LIBCURL_TIMESTAMP "Wed Nov 5 07:24:58 UTC 2014"
|
|
||||||
|
|
||||||
#endif /* __CURL_CURLVER_H */
|
|
@ -1,102 +0,0 @@
|
|||||||
#ifndef __CURL_EASY_H
|
|
||||||
#define __CURL_EASY_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CURL_EXTERN CURL *curl_easy_init(void);
|
|
||||||
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
|
|
||||||
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
|
|
||||||
CURL_EXTERN void curl_easy_cleanup(CURL *curl);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAME curl_easy_getinfo()
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Request internal information from the curl session with this function. The
|
|
||||||
* third argument MUST be a pointer to a long, a pointer to a char * or a
|
|
||||||
* pointer to a double (as the documentation describes elsewhere). The data
|
|
||||||
* pointed to will be filled in accordingly and can be relied upon only if the
|
|
||||||
* function returns CURLE_OK. This function is intended to get used *AFTER* a
|
|
||||||
* performed transfer, all results from this function are undefined until the
|
|
||||||
* transfer is completed.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAME curl_easy_duphandle()
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Creates a new curl session handle with the same options set for the handle
|
|
||||||
* passed in. Duplicating a handle could only be a matter of cloning data and
|
|
||||||
* options, internal state info and things like persistent connections cannot
|
|
||||||
* be transferred. It is useful in multithreaded applications when you can run
|
|
||||||
* curl_easy_duphandle() for each new thread to avoid a series of identical
|
|
||||||
* curl_easy_setopt() invokes in every thread.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAME curl_easy_reset()
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Re-initializes a CURL handle to the default values. This puts back the
|
|
||||||
* handle to the same state as it was in when it was just created.
|
|
||||||
*
|
|
||||||
* It does keep: live connections, the Session ID cache, the DNS cache and the
|
|
||||||
* cookies.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN void curl_easy_reset(CURL *curl);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAME curl_easy_recv()
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Receives data from the connected socket. Use after successful
|
|
||||||
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
|
|
||||||
size_t *n);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAME curl_easy_send()
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
*
|
|
||||||
* Sends data over the connected socket. Use after successful
|
|
||||||
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
|
|
||||||
size_t buflen, size_t *n);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,81 +0,0 @@
|
|||||||
#ifndef __CURL_MPRINTF_H
|
|
||||||
#define __CURL_MPRINTF_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdio.h> /* needed for FILE */
|
|
||||||
|
|
||||||
#include "curl.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CURL_EXTERN int curl_mprintf(const char *format, ...);
|
|
||||||
CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
|
|
||||||
CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
|
|
||||||
CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
|
|
||||||
const char *format, ...);
|
|
||||||
CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
|
|
||||||
CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
|
|
||||||
CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
|
|
||||||
CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
|
|
||||||
const char *format, va_list args);
|
|
||||||
CURL_EXTERN char *curl_maprintf(const char *format, ...);
|
|
||||||
CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
|
|
||||||
|
|
||||||
#ifdef _MPRINTF_REPLACE
|
|
||||||
# undef printf
|
|
||||||
# undef fprintf
|
|
||||||
# undef sprintf
|
|
||||||
# undef vsprintf
|
|
||||||
# undef snprintf
|
|
||||||
# undef vprintf
|
|
||||||
# undef vfprintf
|
|
||||||
# undef vsnprintf
|
|
||||||
# undef aprintf
|
|
||||||
# undef vaprintf
|
|
||||||
# define printf curl_mprintf
|
|
||||||
# define fprintf curl_mfprintf
|
|
||||||
#ifdef CURLDEBUG
|
|
||||||
/* When built with CURLDEBUG we define away the sprintf functions since we
|
|
||||||
don't want internal code to be using them */
|
|
||||||
# define sprintf sprintf_was_used
|
|
||||||
# define vsprintf vsprintf_was_used
|
|
||||||
#else
|
|
||||||
# define sprintf curl_msprintf
|
|
||||||
# define vsprintf curl_mvsprintf
|
|
||||||
#endif
|
|
||||||
# define snprintf curl_msnprintf
|
|
||||||
# define vprintf curl_mvprintf
|
|
||||||
# define vfprintf curl_mvfprintf
|
|
||||||
# define vsnprintf curl_mvsnprintf
|
|
||||||
# define aprintf curl_maprintf
|
|
||||||
# define vaprintf curl_mvaprintf
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __CURL_MPRINTF_H */
|
|
@ -1,399 +0,0 @@
|
|||||||
#ifndef __CURL_MULTI_H
|
|
||||||
#define __CURL_MULTI_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
/*
|
|
||||||
This is an "external" header file. Don't give away any internals here!
|
|
||||||
|
|
||||||
GOALS
|
|
||||||
|
|
||||||
o Enable a "pull" interface. The application that uses libcurl decides where
|
|
||||||
and when to ask libcurl to get/send data.
|
|
||||||
|
|
||||||
o Enable multiple simultaneous transfers in the same thread without making it
|
|
||||||
complicated for the application.
|
|
||||||
|
|
||||||
o Enable the application to select() on its own file descriptors and curl's
|
|
||||||
file descriptors simultaneous easily.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This header file should not really need to include "curl.h" since curl.h
|
|
||||||
* itself includes this file and we expect user applications to do #include
|
|
||||||
* <curl/curl.h> without the need for especially including multi.h.
|
|
||||||
*
|
|
||||||
* For some reason we added this include here at one point, and rather than to
|
|
||||||
* break existing (wrongly written) libcurl applications, we leave it as-is
|
|
||||||
* but with this warning attached.
|
|
||||||
*/
|
|
||||||
#include "curl.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef void CURLM;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
|
|
||||||
curl_multi_socket*() soon */
|
|
||||||
CURLM_OK,
|
|
||||||
CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
|
|
||||||
CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
|
|
||||||
CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */
|
|
||||||
CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
|
|
||||||
CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
|
|
||||||
CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
|
|
||||||
CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was
|
|
||||||
attempted to get added - again */
|
|
||||||
CURLM_LAST
|
|
||||||
} CURLMcode;
|
|
||||||
|
|
||||||
/* just to make code nicer when using curl_multi_socket() you can now check
|
|
||||||
for CURLM_CALL_MULTI_SOCKET too in the same style it works for
|
|
||||||
curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
|
|
||||||
#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
CURLMSG_NONE, /* first, not used */
|
|
||||||
CURLMSG_DONE, /* This easy handle has completed. 'result' contains
|
|
||||||
the CURLcode of the transfer */
|
|
||||||
CURLMSG_LAST /* last, not used */
|
|
||||||
} CURLMSG;
|
|
||||||
|
|
||||||
struct CURLMsg {
|
|
||||||
CURLMSG msg; /* what this message means */
|
|
||||||
CURL *easy_handle; /* the handle it concerns */
|
|
||||||
union {
|
|
||||||
void *whatever; /* message-specific data */
|
|
||||||
CURLcode result; /* return code for transfer */
|
|
||||||
} data;
|
|
||||||
};
|
|
||||||
typedef struct CURLMsg CURLMsg;
|
|
||||||
|
|
||||||
/* Based on poll(2) structure and values.
|
|
||||||
* We don't use pollfd and POLL* constants explicitly
|
|
||||||
* to cover platforms without poll(). */
|
|
||||||
#define CURL_WAIT_POLLIN 0x0001
|
|
||||||
#define CURL_WAIT_POLLPRI 0x0002
|
|
||||||
#define CURL_WAIT_POLLOUT 0x0004
|
|
||||||
|
|
||||||
struct curl_waitfd {
|
|
||||||
curl_socket_t fd;
|
|
||||||
short events;
|
|
||||||
short revents; /* not supported yet */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_init()
|
|
||||||
*
|
|
||||||
* Desc: inititalize multi-style curl usage
|
|
||||||
*
|
|
||||||
* Returns: a new CURLM handle to use in all 'curl_multi' functions.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLM *curl_multi_init(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_add_handle()
|
|
||||||
*
|
|
||||||
* Desc: add a standard curl handle to the multi stack
|
|
||||||
*
|
|
||||||
* Returns: CURLMcode type, general multi error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
|
|
||||||
CURL *curl_handle);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_remove_handle()
|
|
||||||
*
|
|
||||||
* Desc: removes a curl handle from the multi stack again
|
|
||||||
*
|
|
||||||
* Returns: CURLMcode type, general multi error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
|
|
||||||
CURL *curl_handle);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_fdset()
|
|
||||||
*
|
|
||||||
* Desc: Ask curl for its fd_set sets. The app can use these to select() or
|
|
||||||
* poll() on. We want curl_multi_perform() called as soon as one of
|
|
||||||
* them are ready.
|
|
||||||
*
|
|
||||||
* Returns: CURLMcode type, general multi error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
|
|
||||||
fd_set *read_fd_set,
|
|
||||||
fd_set *write_fd_set,
|
|
||||||
fd_set *exc_fd_set,
|
|
||||||
int *max_fd);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_wait()
|
|
||||||
*
|
|
||||||
* Desc: Poll on all fds within a CURLM set as well as any
|
|
||||||
* additional fds passed to the function.
|
|
||||||
*
|
|
||||||
* Returns: CURLMcode type, general multi error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
|
|
||||||
struct curl_waitfd extra_fds[],
|
|
||||||
unsigned int extra_nfds,
|
|
||||||
int timeout_ms,
|
|
||||||
int *ret);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_perform()
|
|
||||||
*
|
|
||||||
* Desc: When the app thinks there's data available for curl it calls this
|
|
||||||
* function to read/write whatever there is right now. This returns
|
|
||||||
* as soon as the reads and writes are done. This function does not
|
|
||||||
* require that there actually is data available for reading or that
|
|
||||||
* data can be written, it can be called just in case. It returns
|
|
||||||
* the number of handles that still transfer data in the second
|
|
||||||
* argument's integer-pointer.
|
|
||||||
*
|
|
||||||
* Returns: CURLMcode type, general multi error code. *NOTE* that this only
|
|
||||||
* returns errors etc regarding the whole multi stack. There might
|
|
||||||
* still have occurred problems on invidual transfers even when this
|
|
||||||
* returns OK.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
|
|
||||||
int *running_handles);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_cleanup()
|
|
||||||
*
|
|
||||||
* Desc: Cleans up and removes a whole multi stack. It does not free or
|
|
||||||
* touch any individual easy handles in any way. We need to define
|
|
||||||
* in what state those handles will be if this function is called
|
|
||||||
* in the middle of a transfer.
|
|
||||||
*
|
|
||||||
* Returns: CURLMcode type, general multi error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_info_read()
|
|
||||||
*
|
|
||||||
* Desc: Ask the multi handle if there's any messages/informationals from
|
|
||||||
* the individual transfers. Messages include informationals such as
|
|
||||||
* error code from the transfer or just the fact that a transfer is
|
|
||||||
* completed. More details on these should be written down as well.
|
|
||||||
*
|
|
||||||
* Repeated calls to this function will return a new struct each
|
|
||||||
* time, until a special "end of msgs" struct is returned as a signal
|
|
||||||
* that there is no more to get at this point.
|
|
||||||
*
|
|
||||||
* The data the returned pointer points to will not survive calling
|
|
||||||
* curl_multi_cleanup().
|
|
||||||
*
|
|
||||||
* The 'CURLMsg' struct is meant to be very simple and only contain
|
|
||||||
* very basic informations. If more involved information is wanted,
|
|
||||||
* we will provide the particular "transfer handle" in that struct
|
|
||||||
* and that should/could/would be used in subsequent
|
|
||||||
* curl_easy_getinfo() calls (or similar). The point being that we
|
|
||||||
* must never expose complex structs to applications, as then we'll
|
|
||||||
* undoubtably get backwards compatibility problems in the future.
|
|
||||||
*
|
|
||||||
* Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
|
|
||||||
* of structs. It also writes the number of messages left in the
|
|
||||||
* queue (after this read) in the integer the second argument points
|
|
||||||
* to.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
|
|
||||||
int *msgs_in_queue);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_strerror()
|
|
||||||
*
|
|
||||||
* Desc: The curl_multi_strerror function may be used to turn a CURLMcode
|
|
||||||
* value into the equivalent human readable error string. This is
|
|
||||||
* useful for printing meaningful error messages.
|
|
||||||
*
|
|
||||||
* Returns: A pointer to a zero-terminated error message.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_socket() and
|
|
||||||
* curl_multi_socket_all()
|
|
||||||
*
|
|
||||||
* Desc: An alternative version of curl_multi_perform() that allows the
|
|
||||||
* application to pass in one of the file descriptors that have been
|
|
||||||
* detected to have "action" on them and let libcurl perform.
|
|
||||||
* See man page for details.
|
|
||||||
*/
|
|
||||||
#define CURL_POLL_NONE 0
|
|
||||||
#define CURL_POLL_IN 1
|
|
||||||
#define CURL_POLL_OUT 2
|
|
||||||
#define CURL_POLL_INOUT 3
|
|
||||||
#define CURL_POLL_REMOVE 4
|
|
||||||
|
|
||||||
#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
|
|
||||||
|
|
||||||
#define CURL_CSELECT_IN 0x01
|
|
||||||
#define CURL_CSELECT_OUT 0x02
|
|
||||||
#define CURL_CSELECT_ERR 0x04
|
|
||||||
|
|
||||||
typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
|
|
||||||
curl_socket_t s, /* socket */
|
|
||||||
int what, /* see above */
|
|
||||||
void *userp, /* private callback
|
|
||||||
pointer */
|
|
||||||
void *socketp); /* private socket
|
|
||||||
pointer */
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_timer_callback
|
|
||||||
*
|
|
||||||
* Desc: Called by libcurl whenever the library detects a change in the
|
|
||||||
* maximum number of milliseconds the app is allowed to wait before
|
|
||||||
* curl_multi_socket() or curl_multi_perform() must be called
|
|
||||||
* (to allow libcurl's timed events to take place).
|
|
||||||
*
|
|
||||||
* Returns: The callback should return zero.
|
|
||||||
*/
|
|
||||||
typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
|
|
||||||
long timeout_ms, /* see above */
|
|
||||||
void *userp); /* private callback
|
|
||||||
pointer */
|
|
||||||
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
|
|
||||||
int *running_handles);
|
|
||||||
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
|
|
||||||
curl_socket_t s,
|
|
||||||
int ev_bitmask,
|
|
||||||
int *running_handles);
|
|
||||||
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
|
|
||||||
int *running_handles);
|
|
||||||
|
|
||||||
#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
|
|
||||||
/* This macro below was added in 7.16.3 to push users who recompile to use
|
|
||||||
the new curl_multi_socket_action() instead of the old curl_multi_socket()
|
|
||||||
*/
|
|
||||||
#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_timeout()
|
|
||||||
*
|
|
||||||
* Desc: Returns the maximum number of milliseconds the app is allowed to
|
|
||||||
* wait before curl_multi_socket() or curl_multi_perform() must be
|
|
||||||
* called (to allow libcurl's timed events to take place).
|
|
||||||
*
|
|
||||||
* Returns: CURLM error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
|
|
||||||
long *milliseconds);
|
|
||||||
|
|
||||||
#undef CINIT /* re-using the same name as in curl.h */
|
|
||||||
|
|
||||||
#ifdef CURL_ISOCPP
|
|
||||||
#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
|
|
||||||
#else
|
|
||||||
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
|
|
||||||
#define LONG CURLOPTTYPE_LONG
|
|
||||||
#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
|
|
||||||
#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
|
|
||||||
#define OFF_T CURLOPTTYPE_OFF_T
|
|
||||||
#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
/* This is the socket callback function pointer */
|
|
||||||
CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
|
|
||||||
|
|
||||||
/* This is the argument passed to the socket callback */
|
|
||||||
CINIT(SOCKETDATA, OBJECTPOINT, 2),
|
|
||||||
|
|
||||||
/* set to 1 to enable pipelining for this multi handle */
|
|
||||||
CINIT(PIPELINING, LONG, 3),
|
|
||||||
|
|
||||||
/* This is the timer callback function pointer */
|
|
||||||
CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),
|
|
||||||
|
|
||||||
/* This is the argument passed to the timer callback */
|
|
||||||
CINIT(TIMERDATA, OBJECTPOINT, 5),
|
|
||||||
|
|
||||||
/* maximum number of entries in the connection cache */
|
|
||||||
CINIT(MAXCONNECTS, LONG, 6),
|
|
||||||
|
|
||||||
/* maximum number of (pipelining) connections to one host */
|
|
||||||
CINIT(MAX_HOST_CONNECTIONS, LONG, 7),
|
|
||||||
|
|
||||||
/* maximum number of requests in a pipeline */
|
|
||||||
CINIT(MAX_PIPELINE_LENGTH, LONG, 8),
|
|
||||||
|
|
||||||
/* a connection with a content-length longer than this
|
|
||||||
will not be considered for pipelining */
|
|
||||||
CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9),
|
|
||||||
|
|
||||||
/* a connection with a chunk length longer than this
|
|
||||||
will not be considered for pipelining */
|
|
||||||
CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10),
|
|
||||||
|
|
||||||
/* a list of site names(+port) that are blacklisted from
|
|
||||||
pipelining */
|
|
||||||
CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11),
|
|
||||||
|
|
||||||
/* a list of server types that are blacklisted from
|
|
||||||
pipelining */
|
|
||||||
CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12),
|
|
||||||
|
|
||||||
/* maximum number of open connections in total */
|
|
||||||
CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13),
|
|
||||||
|
|
||||||
CURLMOPT_LASTENTRY /* the last unused */
|
|
||||||
} CURLMoption;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_setopt()
|
|
||||||
*
|
|
||||||
* Desc: Sets options for the multi handle.
|
|
||||||
*
|
|
||||||
* Returns: CURLM error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
|
|
||||||
CURLMoption option, ...);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Name: curl_multi_assign()
|
|
||||||
*
|
|
||||||
* Desc: This function sets an association in the multi handle between the
|
|
||||||
* given socket and a private pointer of the application. This is
|
|
||||||
* (only) useful for curl_multi_socket uses.
|
|
||||||
*
|
|
||||||
* Returns: CURLM error code.
|
|
||||||
*/
|
|
||||||
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
|
|
||||||
curl_socket_t sockfd, void *sockp);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /* end of extern "C" */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,33 +0,0 @@
|
|||||||
#ifndef __STDC_HEADERS_H
|
|
||||||
#define __STDC_HEADERS_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
size_t fread (void *, size_t, size_t, FILE *);
|
|
||||||
size_t fwrite (const void *, size_t, size_t, FILE *);
|
|
||||||
|
|
||||||
int strcasecmp(const char *, const char *);
|
|
||||||
int strncasecmp(const char *, const char *, size_t);
|
|
||||||
|
|
||||||
#endif /* __STDC_HEADERS_H */
|
|
@ -1,610 +0,0 @@
|
|||||||
#ifndef __CURL_TYPECHECK_GCC_H
|
|
||||||
#define __CURL_TYPECHECK_GCC_H
|
|
||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/* wraps curl_easy_setopt() with typechecking */
|
|
||||||
|
|
||||||
/* To add a new kind of warning, add an
|
|
||||||
* if(_curl_is_sometype_option(_curl_opt))
|
|
||||||
* if(!_curl_is_sometype(value))
|
|
||||||
* _curl_easy_setopt_err_sometype();
|
|
||||||
* block and define _curl_is_sometype_option, _curl_is_sometype and
|
|
||||||
* _curl_easy_setopt_err_sometype below
|
|
||||||
*
|
|
||||||
* NOTE: We use two nested 'if' statements here instead of the && operator, in
|
|
||||||
* order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x
|
|
||||||
* when compiling with -Wlogical-op.
|
|
||||||
*
|
|
||||||
* To add an option that uses the same type as an existing option, you'll just
|
|
||||||
* need to extend the appropriate _curl_*_option macro
|
|
||||||
*/
|
|
||||||
#define curl_easy_setopt(handle, option, value) \
|
|
||||||
__extension__ ({ \
|
|
||||||
__typeof__ (option) _curl_opt = option; \
|
|
||||||
if(__builtin_constant_p(_curl_opt)) { \
|
|
||||||
if(_curl_is_long_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_long(value)) \
|
|
||||||
_curl_easy_setopt_err_long(); \
|
|
||||||
if(_curl_is_off_t_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_off_t(value)) \
|
|
||||||
_curl_easy_setopt_err_curl_off_t(); \
|
|
||||||
if(_curl_is_string_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_string(value)) \
|
|
||||||
_curl_easy_setopt_err_string(); \
|
|
||||||
if(_curl_is_write_cb_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_write_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_write_callback(); \
|
|
||||||
if((_curl_opt) == CURLOPT_READFUNCTION) \
|
|
||||||
if(!_curl_is_read_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_read_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
|
|
||||||
if(!_curl_is_ioctl_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_ioctl_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
|
|
||||||
if(!_curl_is_sockopt_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_sockopt_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
|
|
||||||
if(!_curl_is_opensocket_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_opensocket_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
|
|
||||||
if(!_curl_is_progress_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_progress_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
|
|
||||||
if(!_curl_is_debug_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_debug_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
|
|
||||||
if(!_curl_is_ssl_ctx_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_ssl_ctx_cb(); \
|
|
||||||
if(_curl_is_conv_cb_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_conv_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_conv_cb(); \
|
|
||||||
if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
|
|
||||||
if(!_curl_is_seek_cb(value)) \
|
|
||||||
_curl_easy_setopt_err_seek_cb(); \
|
|
||||||
if(_curl_is_cb_data_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_cb_data(value)) \
|
|
||||||
_curl_easy_setopt_err_cb_data(); \
|
|
||||||
if((_curl_opt) == CURLOPT_ERRORBUFFER) \
|
|
||||||
if(!_curl_is_error_buffer(value)) \
|
|
||||||
_curl_easy_setopt_err_error_buffer(); \
|
|
||||||
if((_curl_opt) == CURLOPT_STDERR) \
|
|
||||||
if(!_curl_is_FILE(value)) \
|
|
||||||
_curl_easy_setopt_err_FILE(); \
|
|
||||||
if(_curl_is_postfields_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_postfields(value)) \
|
|
||||||
_curl_easy_setopt_err_postfields(); \
|
|
||||||
if((_curl_opt) == CURLOPT_HTTPPOST) \
|
|
||||||
if(!_curl_is_arr((value), struct curl_httppost)) \
|
|
||||||
_curl_easy_setopt_err_curl_httpost(); \
|
|
||||||
if(_curl_is_slist_option(_curl_opt)) \
|
|
||||||
if(!_curl_is_arr((value), struct curl_slist)) \
|
|
||||||
_curl_easy_setopt_err_curl_slist(); \
|
|
||||||
if((_curl_opt) == CURLOPT_SHARE) \
|
|
||||||
if(!_curl_is_ptr((value), CURLSH)) \
|
|
||||||
_curl_easy_setopt_err_CURLSH(); \
|
|
||||||
} \
|
|
||||||
curl_easy_setopt(handle, _curl_opt, value); \
|
|
||||||
})
|
|
||||||
|
|
||||||
/* wraps curl_easy_getinfo() with typechecking */
|
|
||||||
/* FIXME: don't allow const pointers */
|
|
||||||
#define curl_easy_getinfo(handle, info, arg) \
|
|
||||||
__extension__ ({ \
|
|
||||||
__typeof__ (info) _curl_info = info; \
|
|
||||||
if(__builtin_constant_p(_curl_info)) { \
|
|
||||||
if(_curl_is_string_info(_curl_info)) \
|
|
||||||
if(!_curl_is_arr((arg), char *)) \
|
|
||||||
_curl_easy_getinfo_err_string(); \
|
|
||||||
if(_curl_is_long_info(_curl_info)) \
|
|
||||||
if(!_curl_is_arr((arg), long)) \
|
|
||||||
_curl_easy_getinfo_err_long(); \
|
|
||||||
if(_curl_is_double_info(_curl_info)) \
|
|
||||||
if(!_curl_is_arr((arg), double)) \
|
|
||||||
_curl_easy_getinfo_err_double(); \
|
|
||||||
if(_curl_is_slist_info(_curl_info)) \
|
|
||||||
if(!_curl_is_arr((arg), struct curl_slist *)) \
|
|
||||||
_curl_easy_getinfo_err_curl_slist(); \
|
|
||||||
} \
|
|
||||||
curl_easy_getinfo(handle, _curl_info, arg); \
|
|
||||||
})
|
|
||||||
|
|
||||||
/* TODO: typechecking for curl_share_setopt() and curl_multi_setopt(),
|
|
||||||
* for now just make sure that the functions are called with three
|
|
||||||
* arguments
|
|
||||||
*/
|
|
||||||
#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
|
|
||||||
#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
|
|
||||||
|
|
||||||
|
|
||||||
/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
|
|
||||||
* functions */
|
|
||||||
|
|
||||||
/* To define a new warning, use _CURL_WARNING(identifier, "message") */
|
|
||||||
#define _CURL_WARNING(id, message) \
|
|
||||||
static void __attribute__((__warning__(message))) \
|
|
||||||
__attribute__((__unused__)) __attribute__((__noinline__)) \
|
|
||||||
id(void) { __asm__(""); }
|
|
||||||
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_long,
|
|
||||||
"curl_easy_setopt expects a long argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_curl_off_t,
|
|
||||||
"curl_easy_setopt expects a curl_off_t argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_string,
|
|
||||||
"curl_easy_setopt expects a "
|
|
||||||
"string (char* or char[]) argument for this option"
|
|
||||||
)
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_write_callback,
|
|
||||||
"curl_easy_setopt expects a curl_write_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_read_cb,
|
|
||||||
"curl_easy_setopt expects a curl_read_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_ioctl_cb,
|
|
||||||
"curl_easy_setopt expects a curl_ioctl_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_sockopt_cb,
|
|
||||||
"curl_easy_setopt expects a curl_sockopt_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_opensocket_cb,
|
|
||||||
"curl_easy_setopt expects a "
|
|
||||||
"curl_opensocket_callback argument for this option"
|
|
||||||
)
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_progress_cb,
|
|
||||||
"curl_easy_setopt expects a curl_progress_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_debug_cb,
|
|
||||||
"curl_easy_setopt expects a curl_debug_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_ssl_ctx_cb,
|
|
||||||
"curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_conv_cb,
|
|
||||||
"curl_easy_setopt expects a curl_conv_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_seek_cb,
|
|
||||||
"curl_easy_setopt expects a curl_seek_callback argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_cb_data,
|
|
||||||
"curl_easy_setopt expects a "
|
|
||||||
"private data pointer as argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_error_buffer,
|
|
||||||
"curl_easy_setopt expects a "
|
|
||||||
"char buffer of CURL_ERROR_SIZE as argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_FILE,
|
|
||||||
"curl_easy_setopt expects a FILE* argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_postfields,
|
|
||||||
"curl_easy_setopt expects a void* or char* argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_curl_httpost,
|
|
||||||
"curl_easy_setopt expects a struct curl_httppost* argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_curl_slist,
|
|
||||||
"curl_easy_setopt expects a struct curl_slist* argument for this option")
|
|
||||||
_CURL_WARNING(_curl_easy_setopt_err_CURLSH,
|
|
||||||
"curl_easy_setopt expects a CURLSH* argument for this option")
|
|
||||||
|
|
||||||
_CURL_WARNING(_curl_easy_getinfo_err_string,
|
|
||||||
"curl_easy_getinfo expects a pointer to char * for this info")
|
|
||||||
_CURL_WARNING(_curl_easy_getinfo_err_long,
|
|
||||||
"curl_easy_getinfo expects a pointer to long for this info")
|
|
||||||
_CURL_WARNING(_curl_easy_getinfo_err_double,
|
|
||||||
"curl_easy_getinfo expects a pointer to double for this info")
|
|
||||||
_CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
|
|
||||||
"curl_easy_getinfo expects a pointer to struct curl_slist * for this info")
|
|
||||||
|
|
||||||
/* groups of curl_easy_setops options that take the same type of argument */
|
|
||||||
|
|
||||||
/* To add a new option to one of the groups, just add
|
|
||||||
* (option) == CURLOPT_SOMETHING
|
|
||||||
* to the or-expression. If the option takes a long or curl_off_t, you don't
|
|
||||||
* have to do anything
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a long argument */
|
|
||||||
#define _curl_is_long_option(option) \
|
|
||||||
(0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT)
|
|
||||||
|
|
||||||
#define _curl_is_off_t_option(option) \
|
|
||||||
((option) > CURLOPTTYPE_OFF_T)
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a char* argument */
|
|
||||||
#define _curl_is_string_option(option) \
|
|
||||||
((option) == CURLOPT_URL || \
|
|
||||||
(option) == CURLOPT_PROXY || \
|
|
||||||
(option) == CURLOPT_INTERFACE || \
|
|
||||||
(option) == CURLOPT_NETRC_FILE || \
|
|
||||||
(option) == CURLOPT_USERPWD || \
|
|
||||||
(option) == CURLOPT_USERNAME || \
|
|
||||||
(option) == CURLOPT_PASSWORD || \
|
|
||||||
(option) == CURLOPT_PROXYUSERPWD || \
|
|
||||||
(option) == CURLOPT_PROXYUSERNAME || \
|
|
||||||
(option) == CURLOPT_PROXYPASSWORD || \
|
|
||||||
(option) == CURLOPT_NOPROXY || \
|
|
||||||
(option) == CURLOPT_ACCEPT_ENCODING || \
|
|
||||||
(option) == CURLOPT_REFERER || \
|
|
||||||
(option) == CURLOPT_USERAGENT || \
|
|
||||||
(option) == CURLOPT_COOKIE || \
|
|
||||||
(option) == CURLOPT_COOKIEFILE || \
|
|
||||||
(option) == CURLOPT_COOKIEJAR || \
|
|
||||||
(option) == CURLOPT_COOKIELIST || \
|
|
||||||
(option) == CURLOPT_FTPPORT || \
|
|
||||||
(option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \
|
|
||||||
(option) == CURLOPT_FTP_ACCOUNT || \
|
|
||||||
(option) == CURLOPT_RANGE || \
|
|
||||||
(option) == CURLOPT_CUSTOMREQUEST || \
|
|
||||||
(option) == CURLOPT_SSLCERT || \
|
|
||||||
(option) == CURLOPT_SSLCERTTYPE || \
|
|
||||||
(option) == CURLOPT_SSLKEY || \
|
|
||||||
(option) == CURLOPT_SSLKEYTYPE || \
|
|
||||||
(option) == CURLOPT_KEYPASSWD || \
|
|
||||||
(option) == CURLOPT_SSLENGINE || \
|
|
||||||
(option) == CURLOPT_CAINFO || \
|
|
||||||
(option) == CURLOPT_CAPATH || \
|
|
||||||
(option) == CURLOPT_RANDOM_FILE || \
|
|
||||||
(option) == CURLOPT_EGDSOCKET || \
|
|
||||||
(option) == CURLOPT_SSL_CIPHER_LIST || \
|
|
||||||
(option) == CURLOPT_KRBLEVEL || \
|
|
||||||
(option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \
|
|
||||||
(option) == CURLOPT_SSH_PUBLIC_KEYFILE || \
|
|
||||||
(option) == CURLOPT_SSH_PRIVATE_KEYFILE || \
|
|
||||||
(option) == CURLOPT_CRLFILE || \
|
|
||||||
(option) == CURLOPT_ISSUERCERT || \
|
|
||||||
(option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \
|
|
||||||
(option) == CURLOPT_SSH_KNOWNHOSTS || \
|
|
||||||
(option) == CURLOPT_MAIL_FROM || \
|
|
||||||
(option) == CURLOPT_RTSP_SESSION_ID || \
|
|
||||||
(option) == CURLOPT_RTSP_STREAM_URI || \
|
|
||||||
(option) == CURLOPT_RTSP_TRANSPORT || \
|
|
||||||
(option) == CURLOPT_XOAUTH2_BEARER || \
|
|
||||||
(option) == CURLOPT_DNS_SERVERS || \
|
|
||||||
(option) == CURLOPT_DNS_INTERFACE || \
|
|
||||||
(option) == CURLOPT_DNS_LOCAL_IP4 || \
|
|
||||||
(option) == CURLOPT_DNS_LOCAL_IP6 || \
|
|
||||||
(option) == CURLOPT_LOGIN_OPTIONS || \
|
|
||||||
0)
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a curl_write_callback argument */
|
|
||||||
#define _curl_is_write_cb_option(option) \
|
|
||||||
((option) == CURLOPT_HEADERFUNCTION || \
|
|
||||||
(option) == CURLOPT_WRITEFUNCTION)
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a curl_conv_callback argument */
|
|
||||||
#define _curl_is_conv_cb_option(option) \
|
|
||||||
((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \
|
|
||||||
(option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \
|
|
||||||
(option) == CURLOPT_CONV_FROM_UTF8_FUNCTION)
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a data argument to pass to a callback */
|
|
||||||
#define _curl_is_cb_data_option(option) \
|
|
||||||
((option) == CURLOPT_WRITEDATA || \
|
|
||||||
(option) == CURLOPT_READDATA || \
|
|
||||||
(option) == CURLOPT_IOCTLDATA || \
|
|
||||||
(option) == CURLOPT_SOCKOPTDATA || \
|
|
||||||
(option) == CURLOPT_OPENSOCKETDATA || \
|
|
||||||
(option) == CURLOPT_PROGRESSDATA || \
|
|
||||||
(option) == CURLOPT_HEADERDATA || \
|
|
||||||
(option) == CURLOPT_DEBUGDATA || \
|
|
||||||
(option) == CURLOPT_SSL_CTX_DATA || \
|
|
||||||
(option) == CURLOPT_SEEKDATA || \
|
|
||||||
(option) == CURLOPT_PRIVATE || \
|
|
||||||
(option) == CURLOPT_SSH_KEYDATA || \
|
|
||||||
(option) == CURLOPT_INTERLEAVEDATA || \
|
|
||||||
(option) == CURLOPT_CHUNK_DATA || \
|
|
||||||
(option) == CURLOPT_FNMATCH_DATA || \
|
|
||||||
0)
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a POST data argument (void* or char*) */
|
|
||||||
#define _curl_is_postfields_option(option) \
|
|
||||||
((option) == CURLOPT_POSTFIELDS || \
|
|
||||||
(option) == CURLOPT_COPYPOSTFIELDS || \
|
|
||||||
0)
|
|
||||||
|
|
||||||
/* evaluates to true if option takes a struct curl_slist * argument */
|
|
||||||
#define _curl_is_slist_option(option) \
|
|
||||||
((option) == CURLOPT_HTTPHEADER || \
|
|
||||||
(option) == CURLOPT_HTTP200ALIASES || \
|
|
||||||
(option) == CURLOPT_QUOTE || \
|
|
||||||
(option) == CURLOPT_POSTQUOTE || \
|
|
||||||
(option) == CURLOPT_PREQUOTE || \
|
|
||||||
(option) == CURLOPT_TELNETOPTIONS || \
|
|
||||||
(option) == CURLOPT_MAIL_RCPT || \
|
|
||||||
0)
|
|
||||||
|
|
||||||
/* groups of curl_easy_getinfo infos that take the same type of argument */
|
|
||||||
|
|
||||||
/* evaluates to true if info expects a pointer to char * argument */
|
|
||||||
#define _curl_is_string_info(info) \
|
|
||||||
(CURLINFO_STRING < (info) && (info) < CURLINFO_LONG)
|
|
||||||
|
|
||||||
/* evaluates to true if info expects a pointer to long argument */
|
|
||||||
#define _curl_is_long_info(info) \
|
|
||||||
(CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE)
|
|
||||||
|
|
||||||
/* evaluates to true if info expects a pointer to double argument */
|
|
||||||
#define _curl_is_double_info(info) \
|
|
||||||
(CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST)
|
|
||||||
|
|
||||||
/* true if info expects a pointer to struct curl_slist * argument */
|
|
||||||
#define _curl_is_slist_info(info) \
|
|
||||||
(CURLINFO_SLIST < (info))
|
|
||||||
|
|
||||||
|
|
||||||
/* typecheck helpers -- check whether given expression has requested type*/
|
|
||||||
|
|
||||||
/* For pointers, you can use the _curl_is_ptr/_curl_is_arr macros,
|
|
||||||
* otherwise define a new macro. Search for __builtin_types_compatible_p
|
|
||||||
* in the GCC manual.
|
|
||||||
* NOTE: these macros MUST NOT EVALUATE their arguments! The argument is
|
|
||||||
* the actual expression passed to the curl_easy_setopt macro. This
|
|
||||||
* means that you can only apply the sizeof and __typeof__ operators, no
|
|
||||||
* == or whatsoever.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* XXX: should evaluate to true iff expr is a pointer */
|
|
||||||
#define _curl_is_any_ptr(expr) \
|
|
||||||
(sizeof(expr) == sizeof(void*))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is NULL */
|
|
||||||
/* XXX: must not evaluate expr, so this check is not accurate */
|
|
||||||
#define _curl_is_NULL(expr) \
|
|
||||||
(__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL)))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is type*, const type* or NULL */
|
|
||||||
#define _curl_is_ptr(expr, type) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), type *) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), const type *))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is one of type[], type*, NULL or const type* */
|
|
||||||
#define _curl_is_arr(expr, type) \
|
|
||||||
(_curl_is_ptr((expr), type) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), type []))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is a string */
|
|
||||||
#define _curl_is_string(expr) \
|
|
||||||
(_curl_is_arr((expr), char) || \
|
|
||||||
_curl_is_arr((expr), signed char) || \
|
|
||||||
_curl_is_arr((expr), unsigned char))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is a long (no matter the signedness)
|
|
||||||
* XXX: for now, int is also accepted (and therefore short and char, which
|
|
||||||
* are promoted to int when passed to a variadic function) */
|
|
||||||
#define _curl_is_long(expr) \
|
|
||||||
(__builtin_types_compatible_p(__typeof__(expr), long) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), signed long) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), unsigned long) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), int) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), signed int) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), unsigned int) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), short) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), signed short) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), unsigned short) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), char) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), signed char) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), unsigned char))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_off_t */
|
|
||||||
#define _curl_is_off_t(expr) \
|
|
||||||
(__builtin_types_compatible_p(__typeof__(expr), curl_off_t))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */
|
|
||||||
/* XXX: also check size of an char[] array? */
|
|
||||||
#define _curl_is_error_buffer(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), char *) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), char[]))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type (const) void* or (const) FILE* */
|
|
||||||
#if 0
|
|
||||||
#define _curl_is_cb_data(expr) \
|
|
||||||
(_curl_is_ptr((expr), void) || \
|
|
||||||
_curl_is_ptr((expr), FILE))
|
|
||||||
#else /* be less strict */
|
|
||||||
#define _curl_is_cb_data(expr) \
|
|
||||||
_curl_is_any_ptr(expr)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type FILE* */
|
|
||||||
#define _curl_is_FILE(expr) \
|
|
||||||
(__builtin_types_compatible_p(__typeof__(expr), FILE *))
|
|
||||||
|
|
||||||
/* evaluates to true if expr can be passed as POST data (void* or char*) */
|
|
||||||
#define _curl_is_postfields(expr) \
|
|
||||||
(_curl_is_ptr((expr), void) || \
|
|
||||||
_curl_is_arr((expr), char))
|
|
||||||
|
|
||||||
/* FIXME: the whole callback checking is messy...
|
|
||||||
* The idea is to tolerate char vs. void and const vs. not const
|
|
||||||
* pointers in arguments at least
|
|
||||||
*/
|
|
||||||
/* helper: __builtin_types_compatible_p distinguishes between functions and
|
|
||||||
* function pointers, hide it */
|
|
||||||
#define _curl_callback_compatible(func, type) \
|
|
||||||
(__builtin_types_compatible_p(__typeof__(func), type) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(func), type*))
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_read_callback or "similar" */
|
|
||||||
#define _curl_is_read_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), __typeof__(fread)) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_read_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_read_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_read_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_read_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_read_callback4) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_read_callback5) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_read_callback6))
|
|
||||||
typedef size_t (_curl_read_callback1)(char *, size_t, size_t, void*);
|
|
||||||
typedef size_t (_curl_read_callback2)(char *, size_t, size_t, const void*);
|
|
||||||
typedef size_t (_curl_read_callback3)(char *, size_t, size_t, FILE*);
|
|
||||||
typedef size_t (_curl_read_callback4)(void *, size_t, size_t, void*);
|
|
||||||
typedef size_t (_curl_read_callback5)(void *, size_t, size_t, const void*);
|
|
||||||
typedef size_t (_curl_read_callback6)(void *, size_t, size_t, FILE*);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_write_callback or "similar" */
|
|
||||||
#define _curl_is_write_cb(expr) \
|
|
||||||
(_curl_is_read_cb(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), __typeof__(fwrite)) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_write_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_write_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_write_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_write_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_write_callback4) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_write_callback5) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_write_callback6))
|
|
||||||
typedef size_t (_curl_write_callback1)(const char *, size_t, size_t, void*);
|
|
||||||
typedef size_t (_curl_write_callback2)(const char *, size_t, size_t,
|
|
||||||
const void*);
|
|
||||||
typedef size_t (_curl_write_callback3)(const char *, size_t, size_t, FILE*);
|
|
||||||
typedef size_t (_curl_write_callback4)(const void *, size_t, size_t, void*);
|
|
||||||
typedef size_t (_curl_write_callback5)(const void *, size_t, size_t,
|
|
||||||
const void*);
|
|
||||||
typedef size_t (_curl_write_callback6)(const void *, size_t, size_t, FILE*);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
|
|
||||||
#define _curl_is_ioctl_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_ioctl_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ioctl_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ioctl_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ioctl_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ioctl_callback4))
|
|
||||||
typedef curlioerr (_curl_ioctl_callback1)(CURL *, int, void*);
|
|
||||||
typedef curlioerr (_curl_ioctl_callback2)(CURL *, int, const void*);
|
|
||||||
typedef curlioerr (_curl_ioctl_callback3)(CURL *, curliocmd, void*);
|
|
||||||
typedef curlioerr (_curl_ioctl_callback4)(CURL *, curliocmd, const void*);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
|
|
||||||
#define _curl_is_sockopt_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_sockopt_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_sockopt_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_sockopt_callback2))
|
|
||||||
typedef int (_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype);
|
|
||||||
typedef int (_curl_sockopt_callback2)(const void *, curl_socket_t,
|
|
||||||
curlsocktype);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_opensocket_callback or
|
|
||||||
"similar" */
|
|
||||||
#define _curl_is_opensocket_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_opensocket_callback) ||\
|
|
||||||
_curl_callback_compatible((expr), _curl_opensocket_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_opensocket_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_opensocket_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_opensocket_callback4))
|
|
||||||
typedef curl_socket_t (_curl_opensocket_callback1)
|
|
||||||
(void *, curlsocktype, struct curl_sockaddr *);
|
|
||||||
typedef curl_socket_t (_curl_opensocket_callback2)
|
|
||||||
(void *, curlsocktype, const struct curl_sockaddr *);
|
|
||||||
typedef curl_socket_t (_curl_opensocket_callback3)
|
|
||||||
(const void *, curlsocktype, struct curl_sockaddr *);
|
|
||||||
typedef curl_socket_t (_curl_opensocket_callback4)
|
|
||||||
(const void *, curlsocktype, const struct curl_sockaddr *);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_progress_callback or "similar" */
|
|
||||||
#define _curl_is_progress_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_progress_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_progress_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_progress_callback2))
|
|
||||||
typedef int (_curl_progress_callback1)(void *,
|
|
||||||
double, double, double, double);
|
|
||||||
typedef int (_curl_progress_callback2)(const void *,
|
|
||||||
double, double, double, double);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_debug_callback or "similar" */
|
|
||||||
#define _curl_is_debug_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_debug_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback4) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback5) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback6) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback7) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_debug_callback8))
|
|
||||||
typedef int (_curl_debug_callback1) (CURL *,
|
|
||||||
curl_infotype, char *, size_t, void *);
|
|
||||||
typedef int (_curl_debug_callback2) (CURL *,
|
|
||||||
curl_infotype, char *, size_t, const void *);
|
|
||||||
typedef int (_curl_debug_callback3) (CURL *,
|
|
||||||
curl_infotype, const char *, size_t, void *);
|
|
||||||
typedef int (_curl_debug_callback4) (CURL *,
|
|
||||||
curl_infotype, const char *, size_t, const void *);
|
|
||||||
typedef int (_curl_debug_callback5) (CURL *,
|
|
||||||
curl_infotype, unsigned char *, size_t, void *);
|
|
||||||
typedef int (_curl_debug_callback6) (CURL *,
|
|
||||||
curl_infotype, unsigned char *, size_t, const void *);
|
|
||||||
typedef int (_curl_debug_callback7) (CURL *,
|
|
||||||
curl_infotype, const unsigned char *, size_t, void *);
|
|
||||||
typedef int (_curl_debug_callback8) (CURL *,
|
|
||||||
curl_infotype, const unsigned char *, size_t, const void *);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */
|
|
||||||
/* this is getting even messier... */
|
|
||||||
#define _curl_is_ssl_ctx_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_ssl_ctx_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback4) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback5) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback6) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback7) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_ssl_ctx_callback8))
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback1)(CURL *, void *, void *);
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback2)(CURL *, void *, const void *);
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback3)(CURL *, const void *, void *);
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback4)(CURL *, const void *, const void *);
|
|
||||||
#ifdef HEADER_SSL_H
|
|
||||||
/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX
|
|
||||||
* this will of course break if we're included before OpenSSL headers...
|
|
||||||
*/
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback5)(CURL *, SSL_CTX, void *);
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback6)(CURL *, SSL_CTX, const void *);
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX, void *);
|
|
||||||
typedef CURLcode (_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX,
|
|
||||||
const void *);
|
|
||||||
#else
|
|
||||||
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5;
|
|
||||||
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6;
|
|
||||||
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7;
|
|
||||||
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_conv_callback or "similar" */
|
|
||||||
#define _curl_is_conv_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_conv_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_conv_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_conv_callback2) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_conv_callback3) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_conv_callback4))
|
|
||||||
typedef CURLcode (*_curl_conv_callback1)(char *, size_t length);
|
|
||||||
typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length);
|
|
||||||
typedef CURLcode (*_curl_conv_callback3)(void *, size_t length);
|
|
||||||
typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length);
|
|
||||||
|
|
||||||
/* evaluates to true if expr is of type curl_seek_callback or "similar" */
|
|
||||||
#define _curl_is_seek_cb(expr) \
|
|
||||||
(_curl_is_NULL(expr) || \
|
|
||||||
__builtin_types_compatible_p(__typeof__(expr), curl_seek_callback) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_seek_callback1) || \
|
|
||||||
_curl_callback_compatible((expr), _curl_seek_callback2))
|
|
||||||
typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int);
|
|
||||||
typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __CURL_TYPECHECK_GCC_H */
|
|
@ -1,46 +0,0 @@
|
|||||||
/* Copyright (C) 2003 Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU CHARSET Library.
|
|
||||||
|
|
||||||
The GNU CHARSET Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The GNU CHARSET Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
|
||||||
along with the GNU CHARSET Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 51 Franklin Street,
|
|
||||||
Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _LIBCHARSET_H
|
|
||||||
#define _LIBCHARSET_H
|
|
||||||
|
|
||||||
#include <localcharset.h>
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Support for relocatable packages. */
|
|
||||||
|
|
||||||
/* Sets the original and the current installation prefix of the package.
|
|
||||||
Relocation simply replaces a pathname starting with the original prefix
|
|
||||||
by the corresponding pathname with the current prefix instead. Both
|
|
||||||
prefixes should be directory names without trailing slash (i.e. use ""
|
|
||||||
instead of "/"). */
|
|
||||||
extern void libcharset_set_relocation_prefix (const char *orig_prefix,
|
|
||||||
const char *curr_prefix);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _LIBCHARSET_H */
|
|
@ -1,42 +0,0 @@
|
|||||||
/* Determine a canonical name for the current locale's character encoding.
|
|
||||||
Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU CHARSET Library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU Library General Public License as published
|
|
||||||
by the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifndef _LOCALCHARSET_H
|
|
||||||
#define _LOCALCHARSET_H
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Determine the current locale's character encoding, and canonicalize it
|
|
||||||
into one of the canonical names listed in config.charset.
|
|
||||||
The result must not be freed; it is statically allocated.
|
|
||||||
If the canonical name cannot be determined, the result is a non-canonical
|
|
||||||
name. */
|
|
||||||
extern const char * locale_charset (void);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _LOCALCHARSET_H */
|
|
@ -1,147 +0,0 @@
|
|||||||
/* crypto/aes/aes.h -*- mode:C; c-file-style: "eay" -*- */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_AES_H
|
|
||||||
#define HEADER_AES_H
|
|
||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_AES
|
|
||||||
#error AES is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#define AES_ENCRYPT 1
|
|
||||||
#define AES_DECRYPT 0
|
|
||||||
|
|
||||||
/* Because array size can't be a const in C, the following two are macros.
|
|
||||||
Both sizes are in bytes. */
|
|
||||||
#define AES_MAXNR 14
|
|
||||||
#define AES_BLOCK_SIZE 16
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This should be a hidden type, but EVP requires that the size be known */
|
|
||||||
struct aes_key_st {
|
|
||||||
#ifdef AES_LONG
|
|
||||||
unsigned long rd_key[4 *(AES_MAXNR + 1)];
|
|
||||||
#else
|
|
||||||
unsigned int rd_key[4 *(AES_MAXNR + 1)];
|
|
||||||
#endif
|
|
||||||
int rounds;
|
|
||||||
};
|
|
||||||
typedef struct aes_key_st AES_KEY;
|
|
||||||
|
|
||||||
const char *AES_options(void);
|
|
||||||
|
|
||||||
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
|
|
||||||
AES_KEY *key);
|
|
||||||
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
|
|
||||||
AES_KEY *key);
|
|
||||||
|
|
||||||
int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
|
|
||||||
AES_KEY *key);
|
|
||||||
int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits,
|
|
||||||
AES_KEY *key);
|
|
||||||
|
|
||||||
void AES_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const AES_KEY *key);
|
|
||||||
void AES_decrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const AES_KEY *key);
|
|
||||||
|
|
||||||
void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const AES_KEY *key, const int enc);
|
|
||||||
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, const int enc);
|
|
||||||
void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, int *num, const int enc);
|
|
||||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, int *num, const int enc);
|
|
||||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, int *num, const int enc);
|
|
||||||
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, int *num);
|
|
||||||
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char ivec[AES_BLOCK_SIZE],
|
|
||||||
unsigned char ecount_buf[AES_BLOCK_SIZE],
|
|
||||||
unsigned int *num);
|
|
||||||
/* NB: the IV is _two_ blocks long */
|
|
||||||
void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
unsigned char *ivec, const int enc);
|
|
||||||
/* NB: the IV is _four_ blocks long */
|
|
||||||
void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const AES_KEY *key,
|
|
||||||
const AES_KEY *key2, const unsigned char *ivec,
|
|
||||||
const int enc);
|
|
||||||
|
|
||||||
int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
|
|
||||||
unsigned char *out,
|
|
||||||
const unsigned char *in, unsigned int inlen);
|
|
||||||
int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
|
|
||||||
unsigned char *out,
|
|
||||||
const unsigned char *in, unsigned int inlen);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* !HEADER_AES_H */
|
|
File diff suppressed because it is too large
Load Diff
@ -1,578 +0,0 @@
|
|||||||
/* crypto/asn1/asn1_mac.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_ASN1_MAC_H
|
|
||||||
#define HEADER_ASN1_MAC_H
|
|
||||||
|
|
||||||
#include <openssl/asn1.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ASN1_MAC_ERR_LIB
|
|
||||||
#define ASN1_MAC_ERR_LIB ERR_LIB_ASN1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ASN1_MAC_H_err(f,r,line) \
|
|
||||||
ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line))
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_vars(a,type,func) \
|
|
||||||
ASN1_const_CTX c; \
|
|
||||||
type ret=NULL; \
|
|
||||||
\
|
|
||||||
c.pp=(const unsigned char **)pp; \
|
|
||||||
c.q= *(const unsigned char **)pp; \
|
|
||||||
c.error=ERR_R_NESTED_ASN1_ERROR; \
|
|
||||||
if ((a == NULL) || ((*a) == NULL)) \
|
|
||||||
{ if ((ret=(type)func()) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } } \
|
|
||||||
else ret=(*a);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_Init() \
|
|
||||||
c.p= *(const unsigned char **)pp; \
|
|
||||||
c.max=(length == 0)?0:(c.p+length);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_Finish_2(a) \
|
|
||||||
if (!asn1_const_Finish(&c)) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
*(const unsigned char **)pp=c.p; \
|
|
||||||
if (a != NULL) (*a)=ret; \
|
|
||||||
return(ret);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_Finish(a,func,e) \
|
|
||||||
M_ASN1_D2I_Finish_2(a); \
|
|
||||||
err:\
|
|
||||||
ASN1_MAC_H_err((e),c.error,c.line); \
|
|
||||||
asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \
|
|
||||||
if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \
|
|
||||||
return(NULL)
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_start_sequence() \
|
|
||||||
if (!asn1_GetSequence(&c,&length)) \
|
|
||||||
{ c.line=__LINE__; goto err; }
|
|
||||||
/* Begin reading ASN1 without a surrounding sequence */
|
|
||||||
#define M_ASN1_D2I_begin() \
|
|
||||||
c.slen = length;
|
|
||||||
|
|
||||||
/* End reading ASN1 with no check on length */
|
|
||||||
#define M_ASN1_D2I_Finish_nolen(a, func, e) \
|
|
||||||
*pp=c.p; \
|
|
||||||
if (a != NULL) (*a)=ret; \
|
|
||||||
return(ret); \
|
|
||||||
err:\
|
|
||||||
ASN1_MAC_H_err((e),c.error,c.line); \
|
|
||||||
asn1_add_error(*pp,(int)(c.q- *pp)); \
|
|
||||||
if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \
|
|
||||||
return(NULL)
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_end_sequence() \
|
|
||||||
(((c.inf&1) == 0)?(c.slen <= 0): \
|
|
||||||
(c.eos=ASN1_const_check_infinite_end(&c.p,c.slen)))
|
|
||||||
|
|
||||||
/* Don't use this with d2i_ASN1_BOOLEAN() */
|
|
||||||
#define M_ASN1_D2I_get(b, func) \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (func(&(b),&c.p,c.slen) == NULL) \
|
|
||||||
{c.line=__LINE__; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);
|
|
||||||
|
|
||||||
/* Don't use this with d2i_ASN1_BOOLEAN() */
|
|
||||||
#define M_ASN1_D2I_get_x(type,b,func) \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \
|
|
||||||
{c.line=__LINE__; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);
|
|
||||||
|
|
||||||
/* use this instead () */
|
|
||||||
#define M_ASN1_D2I_get_int(b,func) \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (func(&(b),&c.p,c.slen) < 0) \
|
|
||||||
{c.line=__LINE__; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_opt(b,func,type) \
|
|
||||||
if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \
|
|
||||||
== (V_ASN1_UNIVERSAL|(type)))) \
|
|
||||||
{ \
|
|
||||||
M_ASN1_D2I_get(b,func); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_int_opt(b,func,type) \
|
|
||||||
if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \
|
|
||||||
== (V_ASN1_UNIVERSAL|(type)))) \
|
|
||||||
{ \
|
|
||||||
M_ASN1_D2I_get_int(b,func); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_imp(b,func, type) \
|
|
||||||
M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (func(&(b),&c.p,c.slen) == NULL) \
|
|
||||||
{c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);\
|
|
||||||
M_ASN1_next_prev=_tmp;
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \
|
|
||||||
if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \
|
|
||||||
(V_ASN1_CONTEXT_SPECIFIC|(tag)))) \
|
|
||||||
{ \
|
|
||||||
unsigned char _tmp = M_ASN1_next; \
|
|
||||||
M_ASN1_D2I_get_imp(b,func, type);\
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_set(r,func,free_func) \
|
|
||||||
M_ASN1_D2I_get_imp_set(r,func,free_func, \
|
|
||||||
V_ASN1_SET,V_ASN1_UNIVERSAL);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_set_type(type,r,func,free_func) \
|
|
||||||
M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \
|
|
||||||
V_ASN1_SET,V_ASN1_UNIVERSAL);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_set_opt(r,func,free_func) \
|
|
||||||
if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
|
|
||||||
V_ASN1_CONSTRUCTED|V_ASN1_SET)))\
|
|
||||||
{ M_ASN1_D2I_get_set(r,func,free_func); }
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \
|
|
||||||
if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
|
|
||||||
V_ASN1_CONSTRUCTED|V_ASN1_SET)))\
|
|
||||||
{ M_ASN1_D2I_get_set_type(type,r,func,free_func); }
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SET_opt(a,f) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_len_SET(a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SET_opt(a,f) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_put_SET(a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_put_SEQUENCE(a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_put_SEQUENCE_type(type,a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \
|
|
||||||
if ((c.slen != 0) && \
|
|
||||||
(M_ASN1_next == \
|
|
||||||
(V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\
|
|
||||||
{ \
|
|
||||||
M_ASN1_D2I_get_imp_set(b,func,free_func,\
|
|
||||||
tag,V_ASN1_CONTEXT_SPECIFIC); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \
|
|
||||||
if ((c.slen != 0) && \
|
|
||||||
(M_ASN1_next == \
|
|
||||||
(V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\
|
|
||||||
{ \
|
|
||||||
M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\
|
|
||||||
tag,V_ASN1_CONTEXT_SPECIFIC); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_seq(r,func,free_func) \
|
|
||||||
M_ASN1_D2I_get_imp_set(r,func,free_func,\
|
|
||||||
V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \
|
|
||||||
M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\
|
|
||||||
V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL)
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_seq_opt(r,func,free_func) \
|
|
||||||
if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
|
|
||||||
V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
|
|
||||||
{ M_ASN1_D2I_get_seq(r,func,free_func); }
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \
|
|
||||||
if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
|
|
||||||
V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
|
|
||||||
{ M_ASN1_D2I_get_seq_type(type,r,func,free_func); }
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \
|
|
||||||
M_ASN1_D2I_get_imp_set(r,func,free_func,\
|
|
||||||
x,V_ASN1_CONTEXT_SPECIFIC);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \
|
|
||||||
M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\
|
|
||||||
x,V_ASN1_CONTEXT_SPECIFIC);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\
|
|
||||||
(void (*)())free_func,a,b) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\
|
|
||||||
free_func,a,b) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_set_strings(r,func,a,b) \
|
|
||||||
c.q=c.p; \
|
|
||||||
if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
c.slen-=(c.p-c.q);
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_EXP_opt(r,func,tag) \
|
|
||||||
if ((c.slen != 0L) && (M_ASN1_next == \
|
|
||||||
(V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \
|
|
||||||
{ \
|
|
||||||
int Tinf,Ttag,Tclass; \
|
|
||||||
long Tlen; \
|
|
||||||
\
|
|
||||||
c.q=c.p; \
|
|
||||||
Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \
|
|
||||||
if (Tinf & 0x80) \
|
|
||||||
{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
|
|
||||||
c.line=__LINE__; goto err; } \
|
|
||||||
if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
|
|
||||||
Tlen = c.slen - (c.p - c.q) - 2; \
|
|
||||||
if (func(&(r),&c.p,Tlen) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
|
|
||||||
Tlen = c.slen - (c.p - c.q); \
|
|
||||||
if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \
|
|
||||||
{ c.error=ERR_R_MISSING_ASN1_EOS; \
|
|
||||||
c.line=__LINE__; goto err; } \
|
|
||||||
}\
|
|
||||||
c.slen-=(c.p-c.q); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \
|
|
||||||
if ((c.slen != 0) && (M_ASN1_next == \
|
|
||||||
(V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \
|
|
||||||
{ \
|
|
||||||
int Tinf,Ttag,Tclass; \
|
|
||||||
long Tlen; \
|
|
||||||
\
|
|
||||||
c.q=c.p; \
|
|
||||||
Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \
|
|
||||||
if (Tinf & 0x80) \
|
|
||||||
{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
|
|
||||||
c.line=__LINE__; goto err; } \
|
|
||||||
if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
|
|
||||||
Tlen = c.slen - (c.p - c.q) - 2; \
|
|
||||||
if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \
|
|
||||||
(void (*)())free_func, \
|
|
||||||
b,V_ASN1_UNIVERSAL) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
|
|
||||||
Tlen = c.slen - (c.p - c.q); \
|
|
||||||
if(!ASN1_check_infinite_end(&c.p, Tlen)) \
|
|
||||||
{ c.error=ERR_R_MISSING_ASN1_EOS; \
|
|
||||||
c.line=__LINE__; goto err; } \
|
|
||||||
}\
|
|
||||||
c.slen-=(c.p-c.q); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \
|
|
||||||
if ((c.slen != 0) && (M_ASN1_next == \
|
|
||||||
(V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \
|
|
||||||
{ \
|
|
||||||
int Tinf,Ttag,Tclass; \
|
|
||||||
long Tlen; \
|
|
||||||
\
|
|
||||||
c.q=c.p; \
|
|
||||||
Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \
|
|
||||||
if (Tinf & 0x80) \
|
|
||||||
{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
|
|
||||||
c.line=__LINE__; goto err; } \
|
|
||||||
if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
|
|
||||||
Tlen = c.slen - (c.p - c.q) - 2; \
|
|
||||||
if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \
|
|
||||||
free_func,b,V_ASN1_UNIVERSAL) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err; } \
|
|
||||||
if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
|
|
||||||
Tlen = c.slen - (c.p - c.q); \
|
|
||||||
if(!ASN1_check_infinite_end(&c.p, Tlen)) \
|
|
||||||
{ c.error=ERR_R_MISSING_ASN1_EOS; \
|
|
||||||
c.line=__LINE__; goto err; } \
|
|
||||||
}\
|
|
||||||
c.slen-=(c.p-c.q); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* New macros */
|
|
||||||
#define M_ASN1_New_Malloc(ret,type) \
|
|
||||||
if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \
|
|
||||||
{ c.line=__LINE__; goto err2; }
|
|
||||||
|
|
||||||
#define M_ASN1_New(arg,func) \
|
|
||||||
if (((arg)=func()) == NULL) return(NULL)
|
|
||||||
|
|
||||||
#define M_ASN1_New_Error(a) \
|
|
||||||
/* err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \
|
|
||||||
return(NULL);*/ \
|
|
||||||
err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \
|
|
||||||
return(NULL)
|
|
||||||
|
|
||||||
|
|
||||||
/* BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately,
|
|
||||||
some macros that use ASN1_const_CTX still insist on writing in the input
|
|
||||||
stream. ARGH! ARGH! ARGH! Let's get rid of this macro package.
|
|
||||||
Please? -- Richard Levitte */
|
|
||||||
#define M_ASN1_next (*((unsigned char *)(c.p)))
|
|
||||||
#define M_ASN1_next_prev (*((unsigned char *)(c.q)))
|
|
||||||
|
|
||||||
/*************************************************/
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_vars(a) int r=0,ret=0; \
|
|
||||||
unsigned char *p; \
|
|
||||||
if (a == NULL) return(0)
|
|
||||||
|
|
||||||
/* Length Macros */
|
|
||||||
#define M_ASN1_I2D_len(a,f) ret+=f(a,NULL)
|
|
||||||
#define M_ASN1_I2D_len_IMP_opt(a,f) if (a != NULL) M_ASN1_I2D_len(a,f)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SET(a,f) \
|
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SET_type(type,a,f) \
|
|
||||||
ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \
|
|
||||||
V_ASN1_UNIVERSAL,IS_SET);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SEQUENCE(a,f) \
|
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \
|
|
||||||
IS_SEQUENCE);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \
|
|
||||||
ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \
|
|
||||||
V_ASN1_UNIVERSAL,IS_SEQUENCE)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_len_SEQUENCE(a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_len_SEQUENCE_type(type,a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SET(a,f,x) \
|
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \
|
|
||||||
ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC,IS_SET);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SET);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC,IS_SET);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \
|
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SEQUENCE);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SEQUENCE);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SEQUENCE);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \
|
|
||||||
if (a != NULL)\
|
|
||||||
{ \
|
|
||||||
v=f(a,NULL); \
|
|
||||||
ret+=ASN1_object_size(1,v,mtag); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0))\
|
|
||||||
{ \
|
|
||||||
v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \
|
|
||||||
ret+=ASN1_object_size(1,v,mtag); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0))\
|
|
||||||
{ \
|
|
||||||
v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \
|
|
||||||
IS_SEQUENCE); \
|
|
||||||
ret+=ASN1_object_size(1,v,mtag); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0))\
|
|
||||||
{ \
|
|
||||||
v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \
|
|
||||||
V_ASN1_UNIVERSAL, \
|
|
||||||
IS_SEQUENCE); \
|
|
||||||
ret+=ASN1_object_size(1,v,mtag); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Put Macros */
|
|
||||||
#define M_ASN1_I2D_put(a,f) f(a,&p)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_IMP_opt(a,f,t) \
|
|
||||||
if (a != NULL) \
|
|
||||||
{ \
|
|
||||||
unsigned char *q=p; \
|
|
||||||
f(a,&p); \
|
|
||||||
*q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\
|
|
||||||
V_ASN1_UNIVERSAL,IS_SET)
|
|
||||||
#define M_ASN1_I2D_put_SET_type(type,a,f) \
|
|
||||||
i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET)
|
|
||||||
#define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC,IS_SET)
|
|
||||||
#define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \
|
|
||||||
i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET)
|
|
||||||
#define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\
|
|
||||||
V_ASN1_UNIVERSAL,IS_SEQUENCE)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \
|
|
||||||
i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \
|
|
||||||
IS_SEQUENCE)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
M_ASN1_I2D_put_SEQUENCE(a,f);
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
{ i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SET); }
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
{ i2d_ASN1_SET_OF_##type(a,&p,f,x, \
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SET); }
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
{ i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SEQUENCE); }
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
{ i2d_ASN1_SET_OF_##type(a,&p,f,x, \
|
|
||||||
V_ASN1_CONTEXT_SPECIFIC, \
|
|
||||||
IS_SEQUENCE); }
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \
|
|
||||||
if (a != NULL) \
|
|
||||||
{ \
|
|
||||||
ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \
|
|
||||||
f(a,&p); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
{ \
|
|
||||||
ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \
|
|
||||||
i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \
|
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
|
||||||
{ \
|
|
||||||
ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \
|
|
||||||
i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \
|
|
||||||
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
|
||||||
{ \
|
|
||||||
ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \
|
|
||||||
i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \
|
|
||||||
IS_SEQUENCE); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_seq_total() \
|
|
||||||
r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \
|
|
||||||
if (pp == NULL) return(r); \
|
|
||||||
p= *pp; \
|
|
||||||
ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL)
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_INF_seq_start(tag,ctx) \
|
|
||||||
*(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \
|
|
||||||
*(p++)=0x80
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00
|
|
||||||
|
|
||||||
#define M_ASN1_I2D_finish() *pp=p; \
|
|
||||||
return(r);
|
|
||||||
|
|
||||||
int asn1_GetSequence(ASN1_const_CTX *c, long *length);
|
|
||||||
void asn1_add_error(const unsigned char *address,int offset);
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,960 +0,0 @@
|
|||||||
/* asn1t.h */
|
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
|
||||||
* project 2000.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifndef HEADER_ASN1T_H
|
|
||||||
#define HEADER_ASN1T_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <openssl/e_os2.h>
|
|
||||||
#include <openssl/asn1.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_BUILD_SHLIBCRYPTO
|
|
||||||
# undef OPENSSL_EXTERN
|
|
||||||
# define OPENSSL_EXTERN OPENSSL_EXPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ASN1 template defines, structures and functions */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
|
|
||||||
|
|
||||||
/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */
|
|
||||||
#define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr))
|
|
||||||
|
|
||||||
|
|
||||||
/* Macros for start and end of ASN1_ITEM definition */
|
|
||||||
|
|
||||||
#define ASN1_ITEM_start(itname) \
|
|
||||||
OPENSSL_GLOBAL const ASN1_ITEM itname##_it = {
|
|
||||||
|
|
||||||
#define ASN1_ITEM_end(itname) \
|
|
||||||
};
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */
|
|
||||||
#define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr()))
|
|
||||||
|
|
||||||
|
|
||||||
/* Macros for start and end of ASN1_ITEM definition */
|
|
||||||
|
|
||||||
#define ASN1_ITEM_start(itname) \
|
|
||||||
const ASN1_ITEM * itname##_it(void) \
|
|
||||||
{ \
|
|
||||||
static const ASN1_ITEM local_it = {
|
|
||||||
|
|
||||||
#define ASN1_ITEM_end(itname) \
|
|
||||||
}; \
|
|
||||||
return &local_it; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Macros to aid ASN1 template writing */
|
|
||||||
|
|
||||||
#define ASN1_ITEM_TEMPLATE(tname) \
|
|
||||||
static const ASN1_TEMPLATE tname##_item_tt
|
|
||||||
|
|
||||||
#define ASN1_ITEM_TEMPLATE_END(tname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_PRIMITIVE,\
|
|
||||||
-1,\
|
|
||||||
&tname##_item_tt,\
|
|
||||||
0,\
|
|
||||||
NULL,\
|
|
||||||
0,\
|
|
||||||
#tname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
|
|
||||||
/* This is a ASN1 type which just embeds a template */
|
|
||||||
|
|
||||||
/* This pair helps declare a SEQUENCE. We can do:
|
|
||||||
*
|
|
||||||
* ASN1_SEQUENCE(stname) = {
|
|
||||||
* ... SEQUENCE components ...
|
|
||||||
* } ASN1_SEQUENCE_END(stname)
|
|
||||||
*
|
|
||||||
* This will produce an ASN1_ITEM called stname_it
|
|
||||||
* for a structure called stname.
|
|
||||||
*
|
|
||||||
* If you want the same structure but a different
|
|
||||||
* name then use:
|
|
||||||
*
|
|
||||||
* ASN1_SEQUENCE(itname) = {
|
|
||||||
* ... SEQUENCE components ...
|
|
||||||
* } ASN1_SEQUENCE_END_name(stname, itname)
|
|
||||||
*
|
|
||||||
* This will create an item called itname_it using
|
|
||||||
* a structure called stname.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE(tname) \
|
|
||||||
static const ASN1_TEMPLATE tname##_seq_tt[]
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_END_name(stname, tname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_SEQUENCE,\
|
|
||||||
V_ASN1_SEQUENCE,\
|
|
||||||
tname##_seq_tt,\
|
|
||||||
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
|
|
||||||
NULL,\
|
|
||||||
sizeof(stname),\
|
|
||||||
#stname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
#define ASN1_NDEF_SEQUENCE(tname) \
|
|
||||||
ASN1_SEQUENCE(tname)
|
|
||||||
|
|
||||||
#define ASN1_NDEF_SEQUENCE_cb(tname, cb) \
|
|
||||||
ASN1_SEQUENCE_cb(tname, cb)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_cb(tname, cb) \
|
|
||||||
static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \
|
|
||||||
ASN1_SEQUENCE(tname)
|
|
||||||
|
|
||||||
#define ASN1_BROKEN_SEQUENCE(tname) \
|
|
||||||
static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \
|
|
||||||
ASN1_SEQUENCE(tname)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_ref(tname, cb, lck) \
|
|
||||||
static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \
|
|
||||||
ASN1_SEQUENCE(tname)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_enc(tname, enc, cb) \
|
|
||||||
static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \
|
|
||||||
ASN1_SEQUENCE(tname)
|
|
||||||
|
|
||||||
#define ASN1_NDEF_SEQUENCE_END(tname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_NDEF_SEQUENCE,\
|
|
||||||
V_ASN1_SEQUENCE,\
|
|
||||||
tname##_seq_tt,\
|
|
||||||
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
|
|
||||||
NULL,\
|
|
||||||
sizeof(tname),\
|
|
||||||
#tname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
#define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)
|
|
||||||
|
|
||||||
#define ASN1_SEQUENCE_END_ref(stname, tname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_SEQUENCE,\
|
|
||||||
V_ASN1_SEQUENCE,\
|
|
||||||
tname##_seq_tt,\
|
|
||||||
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
|
|
||||||
&tname##_aux,\
|
|
||||||
sizeof(stname),\
|
|
||||||
#stname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
#define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_NDEF_SEQUENCE,\
|
|
||||||
V_ASN1_SEQUENCE,\
|
|
||||||
tname##_seq_tt,\
|
|
||||||
sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\
|
|
||||||
&tname##_aux,\
|
|
||||||
sizeof(stname),\
|
|
||||||
#stname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
|
|
||||||
/* This pair helps declare a CHOICE type. We can do:
|
|
||||||
*
|
|
||||||
* ASN1_CHOICE(chname) = {
|
|
||||||
* ... CHOICE options ...
|
|
||||||
* ASN1_CHOICE_END(chname)
|
|
||||||
*
|
|
||||||
* This will produce an ASN1_ITEM called chname_it
|
|
||||||
* for a structure called chname. The structure
|
|
||||||
* definition must look like this:
|
|
||||||
* typedef struct {
|
|
||||||
* int type;
|
|
||||||
* union {
|
|
||||||
* ASN1_SOMETHING *opt1;
|
|
||||||
* ASN1_SOMEOTHER *opt2;
|
|
||||||
* } value;
|
|
||||||
* } chname;
|
|
||||||
*
|
|
||||||
* the name of the selector must be 'type'.
|
|
||||||
* to use an alternative selector name use the
|
|
||||||
* ASN1_CHOICE_END_selector() version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ASN1_CHOICE(tname) \
|
|
||||||
static const ASN1_TEMPLATE tname##_ch_tt[]
|
|
||||||
|
|
||||||
#define ASN1_CHOICE_cb(tname, cb) \
|
|
||||||
static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \
|
|
||||||
ASN1_CHOICE(tname)
|
|
||||||
|
|
||||||
#define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname)
|
|
||||||
|
|
||||||
#define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type)
|
|
||||||
|
|
||||||
#define ASN1_CHOICE_END_selector(stname, tname, selname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_CHOICE,\
|
|
||||||
offsetof(stname,selname) ,\
|
|
||||||
tname##_ch_tt,\
|
|
||||||
sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\
|
|
||||||
NULL,\
|
|
||||||
sizeof(stname),\
|
|
||||||
#stname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
#define ASN1_CHOICE_END_cb(stname, tname, selname) \
|
|
||||||
;\
|
|
||||||
ASN1_ITEM_start(tname) \
|
|
||||||
ASN1_ITYPE_CHOICE,\
|
|
||||||
offsetof(stname,selname) ,\
|
|
||||||
tname##_ch_tt,\
|
|
||||||
sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\
|
|
||||||
&tname##_aux,\
|
|
||||||
sizeof(stname),\
|
|
||||||
#stname \
|
|
||||||
ASN1_ITEM_end(tname)
|
|
||||||
|
|
||||||
/* This helps with the template wrapper form of ASN1_ITEM */
|
|
||||||
|
|
||||||
#define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \
|
|
||||||
(flags), (tag), 0,\
|
|
||||||
#name, ASN1_ITEM_ref(type) }
|
|
||||||
|
|
||||||
/* These help with SEQUENCE or CHOICE components */
|
|
||||||
|
|
||||||
/* used to declare other types */
|
|
||||||
|
|
||||||
#define ASN1_EX_TYPE(flags, tag, stname, field, type) { \
|
|
||||||
(flags), (tag), offsetof(stname, field),\
|
|
||||||
#field, ASN1_ITEM_ref(type) }
|
|
||||||
|
|
||||||
/* used when the structure is combined with the parent */
|
|
||||||
|
|
||||||
#define ASN1_EX_COMBINE(flags, tag, type) { \
|
|
||||||
(flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) }
|
|
||||||
|
|
||||||
/* implicit and explicit helper macros */
|
|
||||||
|
|
||||||
#define ASN1_IMP_EX(stname, field, type, tag, ex) \
|
|
||||||
ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type)
|
|
||||||
|
|
||||||
#define ASN1_EXP_EX(stname, field, type, tag, ex) \
|
|
||||||
ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type)
|
|
||||||
|
|
||||||
/* Any defined by macros: the field used is in the table itself */
|
|
||||||
|
|
||||||
#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
|
|
||||||
#define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) }
|
|
||||||
#define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) }
|
|
||||||
#else
|
|
||||||
#define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb }
|
|
||||||
#define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb }
|
|
||||||
#endif
|
|
||||||
/* Plain simple type */
|
|
||||||
#define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type)
|
|
||||||
|
|
||||||
/* OPTIONAL simple type */
|
|
||||||
#define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type)
|
|
||||||
|
|
||||||
/* IMPLICIT tagged simple type */
|
|
||||||
#define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0)
|
|
||||||
|
|
||||||
/* IMPLICIT tagged OPTIONAL simple type */
|
|
||||||
#define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)
|
|
||||||
|
|
||||||
/* Same as above but EXPLICIT */
|
|
||||||
|
|
||||||
#define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0)
|
|
||||||
#define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)
|
|
||||||
|
|
||||||
/* SEQUENCE OF type */
|
|
||||||
#define ASN1_SEQUENCE_OF(stname, field, type) \
|
|
||||||
ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type)
|
|
||||||
|
|
||||||
/* OPTIONAL SEQUENCE OF */
|
|
||||||
#define ASN1_SEQUENCE_OF_OPT(stname, field, type) \
|
|
||||||
ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type)
|
|
||||||
|
|
||||||
/* Same as above but for SET OF */
|
|
||||||
|
|
||||||
#define ASN1_SET_OF(stname, field, type) \
|
|
||||||
ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type)
|
|
||||||
|
|
||||||
#define ASN1_SET_OF_OPT(stname, field, type) \
|
|
||||||
ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type)
|
|
||||||
|
|
||||||
/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */
|
|
||||||
|
|
||||||
#define ASN1_IMP_SET_OF(stname, field, type, tag) \
|
|
||||||
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)
|
|
||||||
|
|
||||||
#define ASN1_EXP_SET_OF(stname, field, type, tag) \
|
|
||||||
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)
|
|
||||||
|
|
||||||
#define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \
|
|
||||||
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL)
|
|
||||||
|
|
||||||
#define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \
|
|
||||||
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL)
|
|
||||||
|
|
||||||
#define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \
|
|
||||||
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)
|
|
||||||
|
|
||||||
#define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \
|
|
||||||
ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)
|
|
||||||
|
|
||||||
#define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \
|
|
||||||
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)
|
|
||||||
|
|
||||||
#define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \
|
|
||||||
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)
|
|
||||||
|
|
||||||
/* EXPLICIT using indefinite length constructed form */
|
|
||||||
#define ASN1_NDEF_EXP(stname, field, type, tag) \
|
|
||||||
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF)
|
|
||||||
|
|
||||||
/* EXPLICIT OPTIONAL using indefinite length constructed form */
|
|
||||||
#define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \
|
|
||||||
ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF)
|
|
||||||
|
|
||||||
/* Macros for the ASN1_ADB structure */
|
|
||||||
|
|
||||||
#define ASN1_ADB(name) \
|
|
||||||
static const ASN1_ADB_TABLE name##_adbtbl[]
|
|
||||||
|
|
||||||
#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION
|
|
||||||
|
|
||||||
#define ASN1_ADB_END(name, flags, field, app_table, def, none) \
|
|
||||||
;\
|
|
||||||
static const ASN1_ADB name##_adb = {\
|
|
||||||
flags,\
|
|
||||||
offsetof(name, field),\
|
|
||||||
app_table,\
|
|
||||||
name##_adbtbl,\
|
|
||||||
sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\
|
|
||||||
def,\
|
|
||||||
none\
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define ASN1_ADB_END(name, flags, field, app_table, def, none) \
|
|
||||||
;\
|
|
||||||
static const ASN1_ITEM *name##_adb(void) \
|
|
||||||
{ \
|
|
||||||
static const ASN1_ADB internal_adb = \
|
|
||||||
{\
|
|
||||||
flags,\
|
|
||||||
offsetof(name, field),\
|
|
||||||
app_table,\
|
|
||||||
name##_adbtbl,\
|
|
||||||
sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\
|
|
||||||
def,\
|
|
||||||
none\
|
|
||||||
}; \
|
|
||||||
return (const ASN1_ITEM *) &internal_adb; \
|
|
||||||
} \
|
|
||||||
void dummy_function(void)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ADB_ENTRY(val, template) {val, template}
|
|
||||||
|
|
||||||
#define ASN1_ADB_TEMPLATE(name) \
|
|
||||||
static const ASN1_TEMPLATE name##_tt
|
|
||||||
|
|
||||||
/* This is the ASN1 template structure that defines
|
|
||||||
* a wrapper round the actual type. It determines the
|
|
||||||
* actual position of the field in the value structure,
|
|
||||||
* various flags such as OPTIONAL and the field name.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct ASN1_TEMPLATE_st {
|
|
||||||
unsigned long flags; /* Various flags */
|
|
||||||
long tag; /* tag, not used if no tagging */
|
|
||||||
unsigned long offset; /* Offset of this field in structure */
|
|
||||||
#ifndef NO_ASN1_FIELD_NAMES
|
|
||||||
const char *field_name; /* Field name */
|
|
||||||
#endif
|
|
||||||
ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */
|
|
||||||
|
|
||||||
#define ASN1_TEMPLATE_item(t) (t->item_ptr)
|
|
||||||
#define ASN1_TEMPLATE_adb(t) (t->item_ptr)
|
|
||||||
|
|
||||||
typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE;
|
|
||||||
typedef struct ASN1_ADB_st ASN1_ADB;
|
|
||||||
|
|
||||||
struct ASN1_ADB_st {
|
|
||||||
unsigned long flags; /* Various flags */
|
|
||||||
unsigned long offset; /* Offset of selector field */
|
|
||||||
STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */
|
|
||||||
const ASN1_ADB_TABLE *tbl; /* Table of possible types */
|
|
||||||
long tblcount; /* Number of entries in tbl */
|
|
||||||
const ASN1_TEMPLATE *default_tt; /* Type to use if no match */
|
|
||||||
const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ASN1_ADB_TABLE_st {
|
|
||||||
long value; /* NID for an object or value for an int */
|
|
||||||
const ASN1_TEMPLATE tt; /* item for this value */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* template flags */
|
|
||||||
|
|
||||||
/* Field is optional */
|
|
||||||
#define ASN1_TFLG_OPTIONAL (0x1)
|
|
||||||
|
|
||||||
/* Field is a SET OF */
|
|
||||||
#define ASN1_TFLG_SET_OF (0x1 << 1)
|
|
||||||
|
|
||||||
/* Field is a SEQUENCE OF */
|
|
||||||
#define ASN1_TFLG_SEQUENCE_OF (0x2 << 1)
|
|
||||||
|
|
||||||
/* Special case: this refers to a SET OF that
|
|
||||||
* will be sorted into DER order when encoded *and*
|
|
||||||
* the corresponding STACK will be modified to match
|
|
||||||
* the new order.
|
|
||||||
*/
|
|
||||||
#define ASN1_TFLG_SET_ORDER (0x3 << 1)
|
|
||||||
|
|
||||||
/* Mask for SET OF or SEQUENCE OF */
|
|
||||||
#define ASN1_TFLG_SK_MASK (0x3 << 1)
|
|
||||||
|
|
||||||
/* These flags mean the tag should be taken from the
|
|
||||||
* tag field. If EXPLICIT then the underlying type
|
|
||||||
* is used for the inner tag.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* IMPLICIT tagging */
|
|
||||||
#define ASN1_TFLG_IMPTAG (0x1 << 3)
|
|
||||||
|
|
||||||
|
|
||||||
/* EXPLICIT tagging, inner tag from underlying type */
|
|
||||||
#define ASN1_TFLG_EXPTAG (0x2 << 3)
|
|
||||||
|
|
||||||
#define ASN1_TFLG_TAG_MASK (0x3 << 3)
|
|
||||||
|
|
||||||
/* context specific IMPLICIT */
|
|
||||||
#define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT
|
|
||||||
|
|
||||||
/* context specific EXPLICIT */
|
|
||||||
#define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT
|
|
||||||
|
|
||||||
/* If tagging is in force these determine the
|
|
||||||
* type of tag to use. Otherwise the tag is
|
|
||||||
* determined by the underlying type. These
|
|
||||||
* values reflect the actual octet format.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Universal tag */
|
|
||||||
#define ASN1_TFLG_UNIVERSAL (0x0<<6)
|
|
||||||
/* Application tag */
|
|
||||||
#define ASN1_TFLG_APPLICATION (0x1<<6)
|
|
||||||
/* Context specific tag */
|
|
||||||
#define ASN1_TFLG_CONTEXT (0x2<<6)
|
|
||||||
/* Private tag */
|
|
||||||
#define ASN1_TFLG_PRIVATE (0x3<<6)
|
|
||||||
|
|
||||||
#define ASN1_TFLG_TAG_CLASS (0x3<<6)
|
|
||||||
|
|
||||||
/* These are for ANY DEFINED BY type. In this case
|
|
||||||
* the 'item' field points to an ASN1_ADB structure
|
|
||||||
* which contains a table of values to decode the
|
|
||||||
* relevant type
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ASN1_TFLG_ADB_MASK (0x3<<8)
|
|
||||||
|
|
||||||
#define ASN1_TFLG_ADB_OID (0x1<<8)
|
|
||||||
|
|
||||||
#define ASN1_TFLG_ADB_INT (0x1<<9)
|
|
||||||
|
|
||||||
/* This flag means a parent structure is passed
|
|
||||||
* instead of the field: this is useful is a
|
|
||||||
* SEQUENCE is being combined with a CHOICE for
|
|
||||||
* example. Since this means the structure and
|
|
||||||
* item name will differ we need to use the
|
|
||||||
* ASN1_CHOICE_END_name() macro for example.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ASN1_TFLG_COMBINE (0x1<<10)
|
|
||||||
|
|
||||||
/* This flag when present in a SEQUENCE OF, SET OF
|
|
||||||
* or EXPLICIT causes indefinite length constructed
|
|
||||||
* encoding to be used if required.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ASN1_TFLG_NDEF (0x1<<11)
|
|
||||||
|
|
||||||
/* This is the actual ASN1 item itself */
|
|
||||||
|
|
||||||
struct ASN1_ITEM_st {
|
|
||||||
char itype; /* The item type, primitive, SEQUENCE, CHOICE or extern */
|
|
||||||
long utype; /* underlying type */
|
|
||||||
const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains the contents */
|
|
||||||
long tcount; /* Number of templates if SEQUENCE or CHOICE */
|
|
||||||
const void *funcs; /* functions that handle this type */
|
|
||||||
long size; /* Structure size (usually)*/
|
|
||||||
#ifndef NO_ASN1_FIELD_NAMES
|
|
||||||
const char *sname; /* Structure name */
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/* These are values for the itype field and
|
|
||||||
* determine how the type is interpreted.
|
|
||||||
*
|
|
||||||
* For PRIMITIVE types the underlying type
|
|
||||||
* determines the behaviour if items is NULL.
|
|
||||||
*
|
|
||||||
* Otherwise templates must contain a single
|
|
||||||
* template and the type is treated in the
|
|
||||||
* same way as the type specified in the template.
|
|
||||||
*
|
|
||||||
* For SEQUENCE types the templates field points
|
|
||||||
* to the members, the size field is the
|
|
||||||
* structure size.
|
|
||||||
*
|
|
||||||
* For CHOICE types the templates field points
|
|
||||||
* to each possible member (typically a union)
|
|
||||||
* and the 'size' field is the offset of the
|
|
||||||
* selector.
|
|
||||||
*
|
|
||||||
* The 'funcs' field is used for application
|
|
||||||
* specific functions.
|
|
||||||
*
|
|
||||||
* For COMPAT types the funcs field gives a
|
|
||||||
* set of functions that handle this type, this
|
|
||||||
* supports the old d2i, i2d convention.
|
|
||||||
*
|
|
||||||
* The EXTERN type uses a new style d2i/i2d.
|
|
||||||
* The new style should be used where possible
|
|
||||||
* because it avoids things like the d2i IMPLICIT
|
|
||||||
* hack.
|
|
||||||
*
|
|
||||||
* MSTRING is a multiple string type, it is used
|
|
||||||
* for a CHOICE of character strings where the
|
|
||||||
* actual strings all occupy an ASN1_STRING
|
|
||||||
* structure. In this case the 'utype' field
|
|
||||||
* has a special meaning, it is used as a mask
|
|
||||||
* of acceptable types using the B_ASN1 constants.
|
|
||||||
*
|
|
||||||
* NDEF_SEQUENCE is the same as SEQUENCE except
|
|
||||||
* that it will use indefinite length constructed
|
|
||||||
* encoding if requested.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_PRIMITIVE 0x0
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_SEQUENCE 0x1
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_CHOICE 0x2
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_COMPAT 0x3
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_EXTERN 0x4
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_MSTRING 0x5
|
|
||||||
|
|
||||||
#define ASN1_ITYPE_NDEF_SEQUENCE 0x6
|
|
||||||
|
|
||||||
/* Cache for ASN1 tag and length, so we
|
|
||||||
* don't keep re-reading it for things
|
|
||||||
* like CHOICE
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct ASN1_TLC_st{
|
|
||||||
char valid; /* Values below are valid */
|
|
||||||
int ret; /* return value */
|
|
||||||
long plen; /* length */
|
|
||||||
int ptag; /* class value */
|
|
||||||
int pclass; /* class value */
|
|
||||||
int hdrlen; /* header length */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Typedefs for ASN1 function pointers */
|
|
||||||
|
|
||||||
typedef ASN1_VALUE * ASN1_new_func(void);
|
|
||||||
typedef void ASN1_free_func(ASN1_VALUE *a);
|
|
||||||
typedef ASN1_VALUE * ASN1_d2i_func(ASN1_VALUE **a, const unsigned char ** in, long length);
|
|
||||||
typedef int ASN1_i2d_func(ASN1_VALUE * a, unsigned char **in);
|
|
||||||
|
|
||||||
typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
|
|
||||||
int tag, int aclass, char opt, ASN1_TLC *ctx);
|
|
||||||
|
|
||||||
typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
|
|
||||||
typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval,
|
|
||||||
int indent, const char *fname,
|
|
||||||
const ASN1_PCTX *pctx);
|
|
||||||
|
|
||||||
typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
|
|
||||||
typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
|
|
||||||
typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx);
|
|
||||||
|
|
||||||
typedef struct ASN1_COMPAT_FUNCS_st {
|
|
||||||
ASN1_new_func *asn1_new;
|
|
||||||
ASN1_free_func *asn1_free;
|
|
||||||
ASN1_d2i_func *asn1_d2i;
|
|
||||||
ASN1_i2d_func *asn1_i2d;
|
|
||||||
} ASN1_COMPAT_FUNCS;
|
|
||||||
|
|
||||||
typedef struct ASN1_EXTERN_FUNCS_st {
|
|
||||||
void *app_data;
|
|
||||||
ASN1_ex_new_func *asn1_ex_new;
|
|
||||||
ASN1_ex_free_func *asn1_ex_free;
|
|
||||||
ASN1_ex_free_func *asn1_ex_clear;
|
|
||||||
ASN1_ex_d2i *asn1_ex_d2i;
|
|
||||||
ASN1_ex_i2d *asn1_ex_i2d;
|
|
||||||
ASN1_ex_print_func *asn1_ex_print;
|
|
||||||
} ASN1_EXTERN_FUNCS;
|
|
||||||
|
|
||||||
typedef struct ASN1_PRIMITIVE_FUNCS_st {
|
|
||||||
void *app_data;
|
|
||||||
unsigned long flags;
|
|
||||||
ASN1_ex_new_func *prim_new;
|
|
||||||
ASN1_ex_free_func *prim_free;
|
|
||||||
ASN1_ex_free_func *prim_clear;
|
|
||||||
ASN1_primitive_c2i *prim_c2i;
|
|
||||||
ASN1_primitive_i2c *prim_i2c;
|
|
||||||
ASN1_primitive_print *prim_print;
|
|
||||||
} ASN1_PRIMITIVE_FUNCS;
|
|
||||||
|
|
||||||
/* This is the ASN1_AUX structure: it handles various
|
|
||||||
* miscellaneous requirements. For example the use of
|
|
||||||
* reference counts and an informational callback.
|
|
||||||
*
|
|
||||||
* The "informational callback" is called at various
|
|
||||||
* points during the ASN1 encoding and decoding. It can
|
|
||||||
* be used to provide minor customisation of the structures
|
|
||||||
* used. This is most useful where the supplied routines
|
|
||||||
* *almost* do the right thing but need some extra help
|
|
||||||
* at a few points. If the callback returns zero then
|
|
||||||
* it is assumed a fatal error has occurred and the
|
|
||||||
* main operation should be abandoned.
|
|
||||||
*
|
|
||||||
* If major changes in the default behaviour are required
|
|
||||||
* then an external type is more appropriate.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it,
|
|
||||||
void *exarg);
|
|
||||||
|
|
||||||
typedef struct ASN1_AUX_st {
|
|
||||||
void *app_data;
|
|
||||||
int flags;
|
|
||||||
int ref_offset; /* Offset of reference value */
|
|
||||||
int ref_lock; /* Lock type to use */
|
|
||||||
ASN1_aux_cb *asn1_cb;
|
|
||||||
int enc_offset; /* Offset of ASN1_ENCODING structure */
|
|
||||||
} ASN1_AUX;
|
|
||||||
|
|
||||||
/* For print related callbacks exarg points to this structure */
|
|
||||||
typedef struct ASN1_PRINT_ARG_st {
|
|
||||||
BIO *out;
|
|
||||||
int indent;
|
|
||||||
const ASN1_PCTX *pctx;
|
|
||||||
} ASN1_PRINT_ARG;
|
|
||||||
|
|
||||||
/* For streaming related callbacks exarg points to this structure */
|
|
||||||
typedef struct ASN1_STREAM_ARG_st {
|
|
||||||
/* BIO to stream through */
|
|
||||||
BIO *out;
|
|
||||||
/* BIO with filters appended */
|
|
||||||
BIO *ndef_bio;
|
|
||||||
/* Streaming I/O boundary */
|
|
||||||
unsigned char **boundary;
|
|
||||||
} ASN1_STREAM_ARG;
|
|
||||||
|
|
||||||
/* Flags in ASN1_AUX */
|
|
||||||
|
|
||||||
/* Use a reference count */
|
|
||||||
#define ASN1_AFLG_REFCOUNT 1
|
|
||||||
/* Save the encoding of structure (useful for signatures) */
|
|
||||||
#define ASN1_AFLG_ENCODING 2
|
|
||||||
/* The Sequence length is invalid */
|
|
||||||
#define ASN1_AFLG_BROKEN 4
|
|
||||||
|
|
||||||
/* operation values for asn1_cb */
|
|
||||||
|
|
||||||
#define ASN1_OP_NEW_PRE 0
|
|
||||||
#define ASN1_OP_NEW_POST 1
|
|
||||||
#define ASN1_OP_FREE_PRE 2
|
|
||||||
#define ASN1_OP_FREE_POST 3
|
|
||||||
#define ASN1_OP_D2I_PRE 4
|
|
||||||
#define ASN1_OP_D2I_POST 5
|
|
||||||
#define ASN1_OP_I2D_PRE 6
|
|
||||||
#define ASN1_OP_I2D_POST 7
|
|
||||||
#define ASN1_OP_PRINT_PRE 8
|
|
||||||
#define ASN1_OP_PRINT_POST 9
|
|
||||||
#define ASN1_OP_STREAM_PRE 10
|
|
||||||
#define ASN1_OP_STREAM_POST 11
|
|
||||||
#define ASN1_OP_DETACHED_PRE 12
|
|
||||||
#define ASN1_OP_DETACHED_POST 13
|
|
||||||
|
|
||||||
/* Macro to implement a primitive type */
|
|
||||||
#define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0)
|
|
||||||
#define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \
|
|
||||||
ASN1_ITEM_start(itname) \
|
|
||||||
ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \
|
|
||||||
ASN1_ITEM_end(itname)
|
|
||||||
|
|
||||||
/* Macro to implement a multi string type */
|
|
||||||
#define IMPLEMENT_ASN1_MSTRING(itname, mask) \
|
|
||||||
ASN1_ITEM_start(itname) \
|
|
||||||
ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \
|
|
||||||
ASN1_ITEM_end(itname)
|
|
||||||
|
|
||||||
/* Macro to implement an ASN1_ITEM in terms of old style funcs */
|
|
||||||
|
|
||||||
#define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE)
|
|
||||||
|
|
||||||
#define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \
|
|
||||||
static const ASN1_COMPAT_FUNCS sname##_ff = { \
|
|
||||||
(ASN1_new_func *)sname##_new, \
|
|
||||||
(ASN1_free_func *)sname##_free, \
|
|
||||||
(ASN1_d2i_func *)d2i_##sname, \
|
|
||||||
(ASN1_i2d_func *)i2d_##sname, \
|
|
||||||
}; \
|
|
||||||
ASN1_ITEM_start(sname) \
|
|
||||||
ASN1_ITYPE_COMPAT, \
|
|
||||||
tag, \
|
|
||||||
NULL, \
|
|
||||||
0, \
|
|
||||||
&sname##_ff, \
|
|
||||||
0, \
|
|
||||||
#sname \
|
|
||||||
ASN1_ITEM_end(sname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \
|
|
||||||
ASN1_ITEM_start(sname) \
|
|
||||||
ASN1_ITYPE_EXTERN, \
|
|
||||||
tag, \
|
|
||||||
NULL, \
|
|
||||||
0, \
|
|
||||||
&fptrs, \
|
|
||||||
0, \
|
|
||||||
#sname \
|
|
||||||
ASN1_ITEM_end(sname)
|
|
||||||
|
|
||||||
/* Macro to implement standard functions in terms of ASN1_ITEM structures */
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \
|
|
||||||
IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \
|
|
||||||
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \
|
|
||||||
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \
|
|
||||||
pre stname *fname##_new(void) \
|
|
||||||
{ \
|
|
||||||
return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
|
|
||||||
} \
|
|
||||||
pre void fname##_free(stname *a) \
|
|
||||||
{ \
|
|
||||||
ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \
|
|
||||||
stname *fname##_new(void) \
|
|
||||||
{ \
|
|
||||||
return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
|
|
||||||
} \
|
|
||||||
void fname##_free(stname *a) \
|
|
||||||
{ \
|
|
||||||
ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \
|
|
||||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
|
|
||||||
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
|
|
||||||
stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
|
|
||||||
{ \
|
|
||||||
return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\
|
|
||||||
} \
|
|
||||||
int i2d_##fname(stname *a, unsigned char **out) \
|
|
||||||
{ \
|
|
||||||
return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \
|
|
||||||
int i2d_##stname##_NDEF(stname *a, unsigned char **out) \
|
|
||||||
{ \
|
|
||||||
return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This includes evil casts to remove const: they will go away when full
|
|
||||||
* ASN1 constification is done.
|
|
||||||
*/
|
|
||||||
#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \
|
|
||||||
stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
|
|
||||||
{ \
|
|
||||||
return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\
|
|
||||||
} \
|
|
||||||
int i2d_##fname(const stname *a, unsigned char **out) \
|
|
||||||
{ \
|
|
||||||
return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \
|
|
||||||
stname * stname##_dup(stname *x) \
|
|
||||||
{ \
|
|
||||||
return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \
|
|
||||||
IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \
|
|
||||||
int fname##_print_ctx(BIO *out, stname *x, int indent, \
|
|
||||||
const ASN1_PCTX *pctx) \
|
|
||||||
{ \
|
|
||||||
return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \
|
|
||||||
ASN1_ITEM_rptr(itname), pctx); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_FUNCTIONS_const(name) \
|
|
||||||
IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name)
|
|
||||||
|
|
||||||
#define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \
|
|
||||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \
|
|
||||||
IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
|
|
||||||
|
|
||||||
/* external definitions for primitive types */
|
|
||||||
|
|
||||||
DECLARE_ASN1_ITEM(ASN1_BOOLEAN)
|
|
||||||
DECLARE_ASN1_ITEM(ASN1_TBOOLEAN)
|
|
||||||
DECLARE_ASN1_ITEM(ASN1_FBOOLEAN)
|
|
||||||
DECLARE_ASN1_ITEM(ASN1_SEQUENCE)
|
|
||||||
DECLARE_ASN1_ITEM(CBIGNUM)
|
|
||||||
DECLARE_ASN1_ITEM(BIGNUM)
|
|
||||||
DECLARE_ASN1_ITEM(LONG)
|
|
||||||
DECLARE_ASN1_ITEM(ZLONG)
|
|
||||||
|
|
||||||
DECLARE_STACK_OF(ASN1_VALUE)
|
|
||||||
|
|
||||||
/* Functions used internally by the ASN1 code */
|
|
||||||
|
|
||||||
int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
|
|
||||||
int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
|
|
||||||
int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt);
|
|
||||||
int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
|
|
||||||
int tag, int aclass, char opt, ASN1_TLC *ctx);
|
|
||||||
|
|
||||||
int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
|
|
||||||
int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_TEMPLATE *tt);
|
|
||||||
void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
|
|
||||||
int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
ASN1_VALUE ** asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
|
|
||||||
|
|
||||||
const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, int nullerr);
|
|
||||||
|
|
||||||
int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, const ASN1_ITEM *it);
|
|
||||||
int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, const ASN1_ITEM *it);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,847 +0,0 @@
|
|||||||
/* crypto/bio/bio.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_BIO_H
|
|
||||||
#define HEADER_BIO_H
|
|
||||||
|
|
||||||
#include <openssl/e_os2.h>
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_FP_API
|
|
||||||
# include <stdio.h>
|
|
||||||
#endif
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_SCTP
|
|
||||||
# ifndef OPENSSL_SYS_VMS
|
|
||||||
# include <stdint.h>
|
|
||||||
# else
|
|
||||||
# include <inttypes.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* These are the 'types' of BIOs */
|
|
||||||
#define BIO_TYPE_NONE 0
|
|
||||||
#define BIO_TYPE_MEM (1|0x0400)
|
|
||||||
#define BIO_TYPE_FILE (2|0x0400)
|
|
||||||
|
|
||||||
#define BIO_TYPE_FD (4|0x0400|0x0100)
|
|
||||||
#define BIO_TYPE_SOCKET (5|0x0400|0x0100)
|
|
||||||
#define BIO_TYPE_NULL (6|0x0400)
|
|
||||||
#define BIO_TYPE_SSL (7|0x0200)
|
|
||||||
#define BIO_TYPE_MD (8|0x0200) /* passive filter */
|
|
||||||
#define BIO_TYPE_BUFFER (9|0x0200) /* filter */
|
|
||||||
#define BIO_TYPE_CIPHER (10|0x0200) /* filter */
|
|
||||||
#define BIO_TYPE_BASE64 (11|0x0200) /* filter */
|
|
||||||
#define BIO_TYPE_CONNECT (12|0x0400|0x0100) /* socket - connect */
|
|
||||||
#define BIO_TYPE_ACCEPT (13|0x0400|0x0100) /* socket for accept */
|
|
||||||
#define BIO_TYPE_PROXY_CLIENT (14|0x0200) /* client proxy BIO */
|
|
||||||
#define BIO_TYPE_PROXY_SERVER (15|0x0200) /* server proxy BIO */
|
|
||||||
#define BIO_TYPE_NBIO_TEST (16|0x0200) /* server proxy BIO */
|
|
||||||
#define BIO_TYPE_NULL_FILTER (17|0x0200)
|
|
||||||
#define BIO_TYPE_BER (18|0x0200) /* BER -> bin filter */
|
|
||||||
#define BIO_TYPE_BIO (19|0x0400) /* (half a) BIO pair */
|
|
||||||
#define BIO_TYPE_LINEBUFFER (20|0x0200) /* filter */
|
|
||||||
#define BIO_TYPE_DGRAM (21|0x0400|0x0100)
|
|
||||||
#ifndef OPENSSL_NO_SCTP
|
|
||||||
#define BIO_TYPE_DGRAM_SCTP (24|0x0400|0x0100)
|
|
||||||
#endif
|
|
||||||
#define BIO_TYPE_ASN1 (22|0x0200) /* filter */
|
|
||||||
#define BIO_TYPE_COMP (23|0x0200) /* filter */
|
|
||||||
|
|
||||||
#define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */
|
|
||||||
#define BIO_TYPE_FILTER 0x0200
|
|
||||||
#define BIO_TYPE_SOURCE_SINK 0x0400
|
|
||||||
|
|
||||||
/* BIO_FILENAME_READ|BIO_CLOSE to open or close on free.
|
|
||||||
* BIO_set_fp(in,stdin,BIO_NOCLOSE); */
|
|
||||||
#define BIO_NOCLOSE 0x00
|
|
||||||
#define BIO_CLOSE 0x01
|
|
||||||
|
|
||||||
/* These are used in the following macros and are passed to
|
|
||||||
* BIO_ctrl() */
|
|
||||||
#define BIO_CTRL_RESET 1 /* opt - rewind/zero etc */
|
|
||||||
#define BIO_CTRL_EOF 2 /* opt - are we at the eof */
|
|
||||||
#define BIO_CTRL_INFO 3 /* opt - extra tit-bits */
|
|
||||||
#define BIO_CTRL_SET 4 /* man - set the 'IO' type */
|
|
||||||
#define BIO_CTRL_GET 5 /* man - get the 'IO' type */
|
|
||||||
#define BIO_CTRL_PUSH 6 /* opt - internal, used to signify change */
|
|
||||||
#define BIO_CTRL_POP 7 /* opt - internal, used to signify change */
|
|
||||||
#define BIO_CTRL_GET_CLOSE 8 /* man - set the 'close' on free */
|
|
||||||
#define BIO_CTRL_SET_CLOSE 9 /* man - set the 'close' on free */
|
|
||||||
#define BIO_CTRL_PENDING 10 /* opt - is their more data buffered */
|
|
||||||
#define BIO_CTRL_FLUSH 11 /* opt - 'flush' buffered output */
|
|
||||||
#define BIO_CTRL_DUP 12 /* man - extra stuff for 'duped' BIO */
|
|
||||||
#define BIO_CTRL_WPENDING 13 /* opt - number of bytes still to write */
|
|
||||||
/* callback is int cb(BIO *bio,state,ret); */
|
|
||||||
#define BIO_CTRL_SET_CALLBACK 14 /* opt - set callback function */
|
|
||||||
#define BIO_CTRL_GET_CALLBACK 15 /* opt - set callback function */
|
|
||||||
|
|
||||||
#define BIO_CTRL_SET_FILENAME 30 /* BIO_s_file special */
|
|
||||||
|
|
||||||
/* dgram BIO stuff */
|
|
||||||
#define BIO_CTRL_DGRAM_CONNECT 31 /* BIO dgram special */
|
|
||||||
#define BIO_CTRL_DGRAM_SET_CONNECTED 32 /* allow for an externally
|
|
||||||
* connected socket to be
|
|
||||||
* passed in */
|
|
||||||
#define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33 /* setsockopt, essentially */
|
|
||||||
#define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34 /* getsockopt, essentially */
|
|
||||||
#define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35 /* setsockopt, essentially */
|
|
||||||
#define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36 /* getsockopt, essentially */
|
|
||||||
|
|
||||||
#define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37 /* flag whether the last */
|
|
||||||
#define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38 /* I/O operation tiemd out */
|
|
||||||
|
|
||||||
/* #ifdef IP_MTU_DISCOVER */
|
|
||||||
#define BIO_CTRL_DGRAM_MTU_DISCOVER 39 /* set DF bit on egress packets */
|
|
||||||
/* #endif */
|
|
||||||
|
|
||||||
#define BIO_CTRL_DGRAM_QUERY_MTU 40 /* as kernel for current MTU */
|
|
||||||
#define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47
|
|
||||||
#define BIO_CTRL_DGRAM_GET_MTU 41 /* get cached value for MTU */
|
|
||||||
#define BIO_CTRL_DGRAM_SET_MTU 42 /* set cached value for
|
|
||||||
* MTU. want to use this
|
|
||||||
* if asking the kernel
|
|
||||||
* fails */
|
|
||||||
|
|
||||||
#define BIO_CTRL_DGRAM_MTU_EXCEEDED 43 /* check whether the MTU
|
|
||||||
* was exceed in the
|
|
||||||
* previous write
|
|
||||||
* operation */
|
|
||||||
|
|
||||||
#define BIO_CTRL_DGRAM_GET_PEER 46
|
|
||||||
#define BIO_CTRL_DGRAM_SET_PEER 44 /* Destination for the data */
|
|
||||||
|
|
||||||
#define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45 /* Next DTLS handshake timeout to
|
|
||||||
* adjust socket timeouts */
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_SCTP
|
|
||||||
/* SCTP stuff */
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65
|
|
||||||
#define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* modifiers */
|
|
||||||
#define BIO_FP_READ 0x02
|
|
||||||
#define BIO_FP_WRITE 0x04
|
|
||||||
#define BIO_FP_APPEND 0x08
|
|
||||||
#define BIO_FP_TEXT 0x10
|
|
||||||
|
|
||||||
#define BIO_FLAGS_READ 0x01
|
|
||||||
#define BIO_FLAGS_WRITE 0x02
|
|
||||||
#define BIO_FLAGS_IO_SPECIAL 0x04
|
|
||||||
#define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
|
|
||||||
#define BIO_FLAGS_SHOULD_RETRY 0x08
|
|
||||||
#ifndef BIO_FLAGS_UPLINK
|
|
||||||
/* "UPLINK" flag denotes file descriptors provided by application.
|
|
||||||
It defaults to 0, as most platforms don't require UPLINK interface. */
|
|
||||||
#define BIO_FLAGS_UPLINK 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Used in BIO_gethostbyname() */
|
|
||||||
#define BIO_GHBN_CTRL_HITS 1
|
|
||||||
#define BIO_GHBN_CTRL_MISSES 2
|
|
||||||
#define BIO_GHBN_CTRL_CACHE_SIZE 3
|
|
||||||
#define BIO_GHBN_CTRL_GET_ENTRY 4
|
|
||||||
#define BIO_GHBN_CTRL_FLUSH 5
|
|
||||||
|
|
||||||
/* Mostly used in the SSL BIO */
|
|
||||||
/* Not used anymore
|
|
||||||
* #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10
|
|
||||||
* #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20
|
|
||||||
* #define BIO_FLAGS_PROTOCOL_STARTUP 0x40
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define BIO_FLAGS_BASE64_NO_NL 0x100
|
|
||||||
|
|
||||||
/* This is used with memory BIOs: it means we shouldn't free up or change the
|
|
||||||
* data in any way.
|
|
||||||
*/
|
|
||||||
#define BIO_FLAGS_MEM_RDONLY 0x200
|
|
||||||
|
|
||||||
typedef struct bio_st BIO;
|
|
||||||
|
|
||||||
void BIO_set_flags(BIO *b, int flags);
|
|
||||||
int BIO_test_flags(const BIO *b, int flags);
|
|
||||||
void BIO_clear_flags(BIO *b, int flags);
|
|
||||||
|
|
||||||
#define BIO_get_flags(b) BIO_test_flags(b, ~(0x0))
|
|
||||||
#define BIO_set_retry_special(b) \
|
|
||||||
BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))
|
|
||||||
#define BIO_set_retry_read(b) \
|
|
||||||
BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
|
|
||||||
#define BIO_set_retry_write(b) \
|
|
||||||
BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
|
|
||||||
|
|
||||||
/* These are normally used internally in BIOs */
|
|
||||||
#define BIO_clear_retry_flags(b) \
|
|
||||||
BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
|
|
||||||
#define BIO_get_retry_flags(b) \
|
|
||||||
BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
|
|
||||||
|
|
||||||
/* These should be used by the application to tell why we should retry */
|
|
||||||
#define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ)
|
|
||||||
#define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE)
|
|
||||||
#define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)
|
|
||||||
#define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS)
|
|
||||||
#define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY)
|
|
||||||
|
|
||||||
/* The next three are used in conjunction with the
|
|
||||||
* BIO_should_io_special() condition. After this returns true,
|
|
||||||
* BIO *BIO_get_retry_BIO(BIO *bio, int *reason); will walk the BIO
|
|
||||||
* stack and return the 'reason' for the special and the offending BIO.
|
|
||||||
* Given a BIO, BIO_get_retry_reason(bio) will return the code. */
|
|
||||||
/* Returned from the SSL bio when the certificate retrieval code had an error */
|
|
||||||
#define BIO_RR_SSL_X509_LOOKUP 0x01
|
|
||||||
/* Returned from the connect BIO when a connect would have blocked */
|
|
||||||
#define BIO_RR_CONNECT 0x02
|
|
||||||
/* Returned from the accept BIO when an accept would have blocked */
|
|
||||||
#define BIO_RR_ACCEPT 0x03
|
|
||||||
|
|
||||||
/* These are passed by the BIO callback */
|
|
||||||
#define BIO_CB_FREE 0x01
|
|
||||||
#define BIO_CB_READ 0x02
|
|
||||||
#define BIO_CB_WRITE 0x03
|
|
||||||
#define BIO_CB_PUTS 0x04
|
|
||||||
#define BIO_CB_GETS 0x05
|
|
||||||
#define BIO_CB_CTRL 0x06
|
|
||||||
|
|
||||||
/* The callback is called before and after the underling operation,
|
|
||||||
* The BIO_CB_RETURN flag indicates if it is after the call */
|
|
||||||
#define BIO_CB_RETURN 0x80
|
|
||||||
#define BIO_CB_return(a) ((a)|BIO_CB_RETURN))
|
|
||||||
#define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN))
|
|
||||||
#define BIO_cb_post(a) ((a)&BIO_CB_RETURN)
|
|
||||||
|
|
||||||
long (*BIO_get_callback(const BIO *b)) (struct bio_st *,int,const char *,int, long,long);
|
|
||||||
void BIO_set_callback(BIO *b,
|
|
||||||
long (*callback)(struct bio_st *,int,const char *,int, long,long));
|
|
||||||
char *BIO_get_callback_arg(const BIO *b);
|
|
||||||
void BIO_set_callback_arg(BIO *b, char *arg);
|
|
||||||
|
|
||||||
const char * BIO_method_name(const BIO *b);
|
|
||||||
int BIO_method_type(const BIO *b);
|
|
||||||
|
|
||||||
typedef void bio_info_cb(struct bio_st *, int, const char *, int, long, long);
|
|
||||||
|
|
||||||
typedef struct bio_method_st
|
|
||||||
{
|
|
||||||
int type;
|
|
||||||
const char *name;
|
|
||||||
int (*bwrite)(BIO *, const char *, int);
|
|
||||||
int (*bread)(BIO *, char *, int);
|
|
||||||
int (*bputs)(BIO *, const char *);
|
|
||||||
int (*bgets)(BIO *, char *, int);
|
|
||||||
long (*ctrl)(BIO *, int, long, void *);
|
|
||||||
int (*create)(BIO *);
|
|
||||||
int (*destroy)(BIO *);
|
|
||||||
long (*callback_ctrl)(BIO *, int, bio_info_cb *);
|
|
||||||
} BIO_METHOD;
|
|
||||||
|
|
||||||
struct bio_st
|
|
||||||
{
|
|
||||||
BIO_METHOD *method;
|
|
||||||
/* bio, mode, argp, argi, argl, ret */
|
|
||||||
long (*callback)(struct bio_st *,int,const char *,int, long,long);
|
|
||||||
char *cb_arg; /* first argument for the callback */
|
|
||||||
|
|
||||||
int init;
|
|
||||||
int shutdown;
|
|
||||||
int flags; /* extra storage */
|
|
||||||
int retry_reason;
|
|
||||||
int num;
|
|
||||||
void *ptr;
|
|
||||||
struct bio_st *next_bio; /* used by filter BIOs */
|
|
||||||
struct bio_st *prev_bio; /* used by filter BIOs */
|
|
||||||
int references;
|
|
||||||
unsigned long num_read;
|
|
||||||
unsigned long num_write;
|
|
||||||
|
|
||||||
CRYPTO_EX_DATA ex_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
DECLARE_STACK_OF(BIO)
|
|
||||||
|
|
||||||
typedef struct bio_f_buffer_ctx_struct
|
|
||||||
{
|
|
||||||
/* Buffers are setup like this:
|
|
||||||
*
|
|
||||||
* <---------------------- size ----------------------->
|
|
||||||
* +---------------------------------------------------+
|
|
||||||
* | consumed | remaining | free space |
|
|
||||||
* +---------------------------------------------------+
|
|
||||||
* <-- off --><------- len ------->
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* BIO *bio; */ /* this is now in the BIO struct */
|
|
||||||
int ibuf_size; /* how big is the input buffer */
|
|
||||||
int obuf_size; /* how big is the output buffer */
|
|
||||||
|
|
||||||
char *ibuf; /* the char array */
|
|
||||||
int ibuf_len; /* how many bytes are in it */
|
|
||||||
int ibuf_off; /* write/read offset */
|
|
||||||
|
|
||||||
char *obuf; /* the char array */
|
|
||||||
int obuf_len; /* how many bytes are in it */
|
|
||||||
int obuf_off; /* write/read offset */
|
|
||||||
} BIO_F_BUFFER_CTX;
|
|
||||||
|
|
||||||
/* Prefix and suffix callback in ASN1 BIO */
|
|
||||||
typedef int asn1_ps_func(BIO *b, unsigned char **pbuf, int *plen, void *parg);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_SCTP
|
|
||||||
/* SCTP parameter structs */
|
|
||||||
struct bio_dgram_sctp_sndinfo
|
|
||||||
{
|
|
||||||
uint16_t snd_sid;
|
|
||||||
uint16_t snd_flags;
|
|
||||||
uint32_t snd_ppid;
|
|
||||||
uint32_t snd_context;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bio_dgram_sctp_rcvinfo
|
|
||||||
{
|
|
||||||
uint16_t rcv_sid;
|
|
||||||
uint16_t rcv_ssn;
|
|
||||||
uint16_t rcv_flags;
|
|
||||||
uint32_t rcv_ppid;
|
|
||||||
uint32_t rcv_tsn;
|
|
||||||
uint32_t rcv_cumtsn;
|
|
||||||
uint32_t rcv_context;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bio_dgram_sctp_prinfo
|
|
||||||
{
|
|
||||||
uint16_t pr_policy;
|
|
||||||
uint32_t pr_value;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* connect BIO stuff */
|
|
||||||
#define BIO_CONN_S_BEFORE 1
|
|
||||||
#define BIO_CONN_S_GET_IP 2
|
|
||||||
#define BIO_CONN_S_GET_PORT 3
|
|
||||||
#define BIO_CONN_S_CREATE_SOCKET 4
|
|
||||||
#define BIO_CONN_S_CONNECT 5
|
|
||||||
#define BIO_CONN_S_OK 6
|
|
||||||
#define BIO_CONN_S_BLOCKED_CONNECT 7
|
|
||||||
#define BIO_CONN_S_NBIO 8
|
|
||||||
/*#define BIO_CONN_get_param_hostname BIO_ctrl */
|
|
||||||
|
|
||||||
#define BIO_C_SET_CONNECT 100
|
|
||||||
#define BIO_C_DO_STATE_MACHINE 101
|
|
||||||
#define BIO_C_SET_NBIO 102
|
|
||||||
#define BIO_C_SET_PROXY_PARAM 103
|
|
||||||
#define BIO_C_SET_FD 104
|
|
||||||
#define BIO_C_GET_FD 105
|
|
||||||
#define BIO_C_SET_FILE_PTR 106
|
|
||||||
#define BIO_C_GET_FILE_PTR 107
|
|
||||||
#define BIO_C_SET_FILENAME 108
|
|
||||||
#define BIO_C_SET_SSL 109
|
|
||||||
#define BIO_C_GET_SSL 110
|
|
||||||
#define BIO_C_SET_MD 111
|
|
||||||
#define BIO_C_GET_MD 112
|
|
||||||
#define BIO_C_GET_CIPHER_STATUS 113
|
|
||||||
#define BIO_C_SET_BUF_MEM 114
|
|
||||||
#define BIO_C_GET_BUF_MEM_PTR 115
|
|
||||||
#define BIO_C_GET_BUFF_NUM_LINES 116
|
|
||||||
#define BIO_C_SET_BUFF_SIZE 117
|
|
||||||
#define BIO_C_SET_ACCEPT 118
|
|
||||||
#define BIO_C_SSL_MODE 119
|
|
||||||
#define BIO_C_GET_MD_CTX 120
|
|
||||||
#define BIO_C_GET_PROXY_PARAM 121
|
|
||||||
#define BIO_C_SET_BUFF_READ_DATA 122 /* data to read first */
|
|
||||||
#define BIO_C_GET_CONNECT 123
|
|
||||||
#define BIO_C_GET_ACCEPT 124
|
|
||||||
#define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125
|
|
||||||
#define BIO_C_GET_SSL_NUM_RENEGOTIATES 126
|
|
||||||
#define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127
|
|
||||||
#define BIO_C_FILE_SEEK 128
|
|
||||||
#define BIO_C_GET_CIPHER_CTX 129
|
|
||||||
#define BIO_C_SET_BUF_MEM_EOF_RETURN 130/*return end of input value*/
|
|
||||||
#define BIO_C_SET_BIND_MODE 131
|
|
||||||
#define BIO_C_GET_BIND_MODE 132
|
|
||||||
#define BIO_C_FILE_TELL 133
|
|
||||||
#define BIO_C_GET_SOCKS 134
|
|
||||||
#define BIO_C_SET_SOCKS 135
|
|
||||||
|
|
||||||
#define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */
|
|
||||||
#define BIO_C_GET_WRITE_BUF_SIZE 137
|
|
||||||
#define BIO_C_MAKE_BIO_PAIR 138
|
|
||||||
#define BIO_C_DESTROY_BIO_PAIR 139
|
|
||||||
#define BIO_C_GET_WRITE_GUARANTEE 140
|
|
||||||
#define BIO_C_GET_READ_REQUEST 141
|
|
||||||
#define BIO_C_SHUTDOWN_WR 142
|
|
||||||
#define BIO_C_NREAD0 143
|
|
||||||
#define BIO_C_NREAD 144
|
|
||||||
#define BIO_C_NWRITE0 145
|
|
||||||
#define BIO_C_NWRITE 146
|
|
||||||
#define BIO_C_RESET_READ_REQUEST 147
|
|
||||||
#define BIO_C_SET_MD_CTX 148
|
|
||||||
|
|
||||||
#define BIO_C_SET_PREFIX 149
|
|
||||||
#define BIO_C_GET_PREFIX 150
|
|
||||||
#define BIO_C_SET_SUFFIX 151
|
|
||||||
#define BIO_C_GET_SUFFIX 152
|
|
||||||
|
|
||||||
#define BIO_C_SET_EX_ARG 153
|
|
||||||
#define BIO_C_GET_EX_ARG 154
|
|
||||||
|
|
||||||
#define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg)
|
|
||||||
#define BIO_get_app_data(s) BIO_get_ex_data(s,0)
|
|
||||||
|
|
||||||
/* BIO_s_connect() and BIO_s_socks4a_connect() */
|
|
||||||
#define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name)
|
|
||||||
#define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port)
|
|
||||||
#define BIO_set_conn_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip)
|
|
||||||
#define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port)
|
|
||||||
#define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)
|
|
||||||
#define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)
|
|
||||||
#define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)
|
|
||||||
#define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0)
|
|
||||||
|
|
||||||
|
|
||||||
#define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)
|
|
||||||
|
|
||||||
/* BIO_s_accept_socket() */
|
|
||||||
#define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name)
|
|
||||||
#define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)
|
|
||||||
/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */
|
|
||||||
#define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL)
|
|
||||||
#define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio)
|
|
||||||
|
|
||||||
#define BIO_BIND_NORMAL 0
|
|
||||||
#define BIO_BIND_REUSEADDR_IF_UNUSED 1
|
|
||||||
#define BIO_BIND_REUSEADDR 2
|
|
||||||
#define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL)
|
|
||||||
#define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL)
|
|
||||||
|
|
||||||
#define BIO_do_connect(b) BIO_do_handshake(b)
|
|
||||||
#define BIO_do_accept(b) BIO_do_handshake(b)
|
|
||||||
#define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
|
|
||||||
|
|
||||||
/* BIO_s_proxy_client() */
|
|
||||||
#define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url))
|
|
||||||
#define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p))
|
|
||||||
/* BIO_set_nbio(b,n) */
|
|
||||||
#define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s))
|
|
||||||
/* BIO *BIO_get_filter_bio(BIO *bio); */
|
|
||||||
#define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)()))
|
|
||||||
#define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk)
|
|
||||||
#define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool)
|
|
||||||
|
|
||||||
#define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp)
|
|
||||||
#define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p))
|
|
||||||
#define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url))
|
|
||||||
#define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL)
|
|
||||||
|
|
||||||
#define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)
|
|
||||||
#define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)
|
|
||||||
|
|
||||||
#define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp)
|
|
||||||
#define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp)
|
|
||||||
|
|
||||||
#define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL)
|
|
||||||
#define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL)
|
|
||||||
|
|
||||||
/* name is cast to lose const, but might be better to route through a function
|
|
||||||
so we can do it safely */
|
|
||||||
#ifdef CONST_STRICT
|
|
||||||
/* If you are wondering why this isn't defined, its because CONST_STRICT is
|
|
||||||
* purely a compile-time kludge to allow const to be checked.
|
|
||||||
*/
|
|
||||||
int BIO_read_filename(BIO *b,const char *name);
|
|
||||||
#else
|
|
||||||
#define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
|
|
||||||
BIO_CLOSE|BIO_FP_READ,(char *)name)
|
|
||||||
#endif
|
|
||||||
#define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
|
|
||||||
BIO_CLOSE|BIO_FP_WRITE,name)
|
|
||||||
#define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
|
|
||||||
BIO_CLOSE|BIO_FP_APPEND,name)
|
|
||||||
#define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \
|
|
||||||
BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name)
|
|
||||||
|
|
||||||
/* WARNING WARNING, this ups the reference count on the read bio of the
|
|
||||||
* SSL structure. This is because the ssl read BIO is now pointed to by
|
|
||||||
* the next_bio field in the bio. So when you free the BIO, make sure
|
|
||||||
* you are doing a BIO_free_all() to catch the underlying BIO. */
|
|
||||||
#define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl)
|
|
||||||
#define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp)
|
|
||||||
#define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL)
|
|
||||||
#define BIO_set_ssl_renegotiate_bytes(b,num) \
|
|
||||||
BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL);
|
|
||||||
#define BIO_get_num_renegotiates(b) \
|
|
||||||
BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL);
|
|
||||||
#define BIO_set_ssl_renegotiate_timeout(b,seconds) \
|
|
||||||
BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL);
|
|
||||||
|
|
||||||
/* defined in evp.h */
|
|
||||||
/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */
|
|
||||||
|
|
||||||
#define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
|
|
||||||
#define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm)
|
|
||||||
#define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp)
|
|
||||||
#define BIO_set_mem_eof_return(b,v) \
|
|
||||||
BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL)
|
|
||||||
|
|
||||||
/* For the BIO_f_buffer() type */
|
|
||||||
#define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL)
|
|
||||||
#define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL)
|
|
||||||
#define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)
|
|
||||||
#define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)
|
|
||||||
#define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf)
|
|
||||||
|
|
||||||
/* Don't use the next one unless you know what you are doing :-) */
|
|
||||||
#define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret))
|
|
||||||
|
|
||||||
#define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL)
|
|
||||||
#define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL)
|
|
||||||
#define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL)
|
|
||||||
#define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL)
|
|
||||||
#define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
|
|
||||||
#define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL)
|
|
||||||
/* ...pending macros have inappropriate return type */
|
|
||||||
size_t BIO_ctrl_pending(BIO *b);
|
|
||||||
size_t BIO_ctrl_wpending(BIO *b);
|
|
||||||
#define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)
|
|
||||||
#define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \
|
|
||||||
cbp)
|
|
||||||
#define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb)
|
|
||||||
|
|
||||||
/* For the BIO_f_buffer() type */
|
|
||||||
#define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL)
|
|
||||||
|
|
||||||
/* For BIO_s_bio() */
|
|
||||||
#define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL)
|
|
||||||
#define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)
|
|
||||||
#define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)
|
|
||||||
#define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)
|
|
||||||
#define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL)
|
|
||||||
/* macros with inappropriate type -- but ...pending macros use int too: */
|
|
||||||
#define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)
|
|
||||||
#define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)
|
|
||||||
size_t BIO_ctrl_get_write_guarantee(BIO *b);
|
|
||||||
size_t BIO_ctrl_get_read_request(BIO *b);
|
|
||||||
int BIO_ctrl_reset_read_request(BIO *b);
|
|
||||||
|
|
||||||
/* ctrl macros for dgram */
|
|
||||||
#define BIO_ctrl_dgram_connect(b,peer) \
|
|
||||||
(int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer)
|
|
||||||
#define BIO_ctrl_set_connected(b, state, peer) \
|
|
||||||
(int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer)
|
|
||||||
#define BIO_dgram_recv_timedout(b) \
|
|
||||||
(int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL)
|
|
||||||
#define BIO_dgram_send_timedout(b) \
|
|
||||||
(int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL)
|
|
||||||
#define BIO_dgram_get_peer(b,peer) \
|
|
||||||
(int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer)
|
|
||||||
#define BIO_dgram_set_peer(b,peer) \
|
|
||||||
(int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer)
|
|
||||||
|
|
||||||
/* These two aren't currently implemented */
|
|
||||||
/* int BIO_get_ex_num(BIO *bio); */
|
|
||||||
/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */
|
|
||||||
int BIO_set_ex_data(BIO *bio,int idx,void *data);
|
|
||||||
void *BIO_get_ex_data(BIO *bio,int idx);
|
|
||||||
int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
|
|
||||||
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
|
|
||||||
unsigned long BIO_number_read(BIO *bio);
|
|
||||||
unsigned long BIO_number_written(BIO *bio);
|
|
||||||
|
|
||||||
/* For BIO_f_asn1() */
|
|
||||||
int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,
|
|
||||||
asn1_ps_func *prefix_free);
|
|
||||||
int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix,
|
|
||||||
asn1_ps_func **pprefix_free);
|
|
||||||
int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix,
|
|
||||||
asn1_ps_func *suffix_free);
|
|
||||||
int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,
|
|
||||||
asn1_ps_func **psuffix_free);
|
|
||||||
|
|
||||||
# ifndef OPENSSL_NO_FP_API
|
|
||||||
BIO_METHOD *BIO_s_file(void );
|
|
||||||
BIO *BIO_new_file(const char *filename, const char *mode);
|
|
||||||
BIO *BIO_new_fp(FILE *stream, int close_flag);
|
|
||||||
# define BIO_s_file_internal BIO_s_file
|
|
||||||
# endif
|
|
||||||
BIO * BIO_new(BIO_METHOD *type);
|
|
||||||
int BIO_set(BIO *a,BIO_METHOD *type);
|
|
||||||
int BIO_free(BIO *a);
|
|
||||||
void BIO_vfree(BIO *a);
|
|
||||||
int BIO_read(BIO *b, void *data, int len);
|
|
||||||
int BIO_gets(BIO *bp,char *buf, int size);
|
|
||||||
int BIO_write(BIO *b, const void *data, int len);
|
|
||||||
int BIO_puts(BIO *bp,const char *buf);
|
|
||||||
int BIO_indent(BIO *b,int indent,int max);
|
|
||||||
long BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
|
|
||||||
long BIO_callback_ctrl(BIO *b, int cmd, void (*fp)(struct bio_st *, int, const char *, int, long, long));
|
|
||||||
char * BIO_ptr_ctrl(BIO *bp,int cmd,long larg);
|
|
||||||
long BIO_int_ctrl(BIO *bp,int cmd,long larg,int iarg);
|
|
||||||
BIO * BIO_push(BIO *b,BIO *append);
|
|
||||||
BIO * BIO_pop(BIO *b);
|
|
||||||
void BIO_free_all(BIO *a);
|
|
||||||
BIO * BIO_find_type(BIO *b,int bio_type);
|
|
||||||
BIO * BIO_next(BIO *b);
|
|
||||||
BIO * BIO_get_retry_BIO(BIO *bio, int *reason);
|
|
||||||
int BIO_get_retry_reason(BIO *bio);
|
|
||||||
BIO * BIO_dup_chain(BIO *in);
|
|
||||||
|
|
||||||
int BIO_nread0(BIO *bio, char **buf);
|
|
||||||
int BIO_nread(BIO *bio, char **buf, int num);
|
|
||||||
int BIO_nwrite0(BIO *bio, char **buf);
|
|
||||||
int BIO_nwrite(BIO *bio, char **buf, int num);
|
|
||||||
|
|
||||||
long BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
|
|
||||||
long argl,long ret);
|
|
||||||
|
|
||||||
BIO_METHOD *BIO_s_mem(void);
|
|
||||||
BIO *BIO_new_mem_buf(void *buf, int len);
|
|
||||||
BIO_METHOD *BIO_s_socket(void);
|
|
||||||
BIO_METHOD *BIO_s_connect(void);
|
|
||||||
BIO_METHOD *BIO_s_accept(void);
|
|
||||||
BIO_METHOD *BIO_s_fd(void);
|
|
||||||
#ifndef OPENSSL_SYS_OS2
|
|
||||||
BIO_METHOD *BIO_s_log(void);
|
|
||||||
#endif
|
|
||||||
BIO_METHOD *BIO_s_bio(void);
|
|
||||||
BIO_METHOD *BIO_s_null(void);
|
|
||||||
BIO_METHOD *BIO_f_null(void);
|
|
||||||
BIO_METHOD *BIO_f_buffer(void);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
|
||||||
BIO_METHOD *BIO_f_linebuffer(void);
|
|
||||||
#endif
|
|
||||||
BIO_METHOD *BIO_f_nbio_test(void);
|
|
||||||
#ifndef OPENSSL_NO_DGRAM
|
|
||||||
BIO_METHOD *BIO_s_datagram(void);
|
|
||||||
#ifndef OPENSSL_NO_SCTP
|
|
||||||
BIO_METHOD *BIO_s_datagram_sctp(void);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* BIO_METHOD *BIO_f_ber(void); */
|
|
||||||
|
|
||||||
int BIO_sock_should_retry(int i);
|
|
||||||
int BIO_sock_non_fatal_error(int error);
|
|
||||||
int BIO_dgram_non_fatal_error(int error);
|
|
||||||
|
|
||||||
int BIO_fd_should_retry(int i);
|
|
||||||
int BIO_fd_non_fatal_error(int error);
|
|
||||||
int BIO_dump_cb(int (*cb)(const void *data, size_t len, void *u),
|
|
||||||
void *u, const char *s, int len);
|
|
||||||
int BIO_dump_indent_cb(int (*cb)(const void *data, size_t len, void *u),
|
|
||||||
void *u, const char *s, int len, int indent);
|
|
||||||
int BIO_dump(BIO *b,const char *bytes,int len);
|
|
||||||
int BIO_dump_indent(BIO *b,const char *bytes,int len,int indent);
|
|
||||||
#ifndef OPENSSL_NO_FP_API
|
|
||||||
int BIO_dump_fp(FILE *fp, const char *s, int len);
|
|
||||||
int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent);
|
|
||||||
#endif
|
|
||||||
struct hostent *BIO_gethostbyname(const char *name);
|
|
||||||
/* We might want a thread-safe interface too:
|
|
||||||
* struct hostent *BIO_gethostbyname_r(const char *name,
|
|
||||||
* struct hostent *result, void *buffer, size_t buflen);
|
|
||||||
* or something similar (caller allocates a struct hostent,
|
|
||||||
* pointed to by "result", and additional buffer space for the various
|
|
||||||
* substructures; if the buffer does not suffice, NULL is returned
|
|
||||||
* and an appropriate error code is set).
|
|
||||||
*/
|
|
||||||
int BIO_sock_error(int sock);
|
|
||||||
int BIO_socket_ioctl(int fd, long type, void *arg);
|
|
||||||
int BIO_socket_nbio(int fd,int mode);
|
|
||||||
int BIO_get_port(const char *str, unsigned short *port_ptr);
|
|
||||||
int BIO_get_host_ip(const char *str, unsigned char *ip);
|
|
||||||
int BIO_get_accept_socket(char *host_port,int mode);
|
|
||||||
int BIO_accept(int sock,char **ip_port);
|
|
||||||
int BIO_sock_init(void );
|
|
||||||
void BIO_sock_cleanup(void);
|
|
||||||
int BIO_set_tcp_ndelay(int sock,int turn_on);
|
|
||||||
|
|
||||||
BIO *BIO_new_socket(int sock, int close_flag);
|
|
||||||
BIO *BIO_new_dgram(int fd, int close_flag);
|
|
||||||
#ifndef OPENSSL_NO_SCTP
|
|
||||||
BIO *BIO_new_dgram_sctp(int fd, int close_flag);
|
|
||||||
int BIO_dgram_is_sctp(BIO *bio);
|
|
||||||
int BIO_dgram_sctp_notification_cb(BIO *b,
|
|
||||||
void (*handle_notifications)(BIO *bio, void *context, void *buf),
|
|
||||||
void *context);
|
|
||||||
int BIO_dgram_sctp_wait_for_dry(BIO *b);
|
|
||||||
int BIO_dgram_sctp_msg_waiting(BIO *b);
|
|
||||||
#endif
|
|
||||||
BIO *BIO_new_fd(int fd, int close_flag);
|
|
||||||
BIO *BIO_new_connect(char *host_port);
|
|
||||||
BIO *BIO_new_accept(char *host_port);
|
|
||||||
|
|
||||||
int BIO_new_bio_pair(BIO **bio1, size_t writebuf1,
|
|
||||||
BIO **bio2, size_t writebuf2);
|
|
||||||
/* If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints.
|
|
||||||
* Otherwise returns 0 and sets *bio1 and *bio2 to NULL.
|
|
||||||
* Size 0 uses default value.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void BIO_copy_next_retry(BIO *b);
|
|
||||||
|
|
||||||
/*long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);*/
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
# define __bio_h__attr__ __attribute__
|
|
||||||
#else
|
|
||||||
# define __bio_h__attr__(x)
|
|
||||||
#endif
|
|
||||||
int BIO_printf(BIO *bio, const char *format, ...)
|
|
||||||
__bio_h__attr__((__format__(__printf__,2,3)));
|
|
||||||
int BIO_vprintf(BIO *bio, const char *format, va_list args)
|
|
||||||
__bio_h__attr__((__format__(__printf__,2,0)));
|
|
||||||
int BIO_snprintf(char *buf, size_t n, const char *format, ...)
|
|
||||||
__bio_h__attr__((__format__(__printf__,3,4)));
|
|
||||||
int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
|
|
||||||
__bio_h__attr__((__format__(__printf__,3,0)));
|
|
||||||
#undef __bio_h__attr__
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
void ERR_load_BIO_strings(void);
|
|
||||||
|
|
||||||
/* Error codes for the BIO functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define BIO_F_ACPT_STATE 100
|
|
||||||
#define BIO_F_BIO_ACCEPT 101
|
|
||||||
#define BIO_F_BIO_BER_GET_HEADER 102
|
|
||||||
#define BIO_F_BIO_CALLBACK_CTRL 131
|
|
||||||
#define BIO_F_BIO_CTRL 103
|
|
||||||
#define BIO_F_BIO_GETHOSTBYNAME 120
|
|
||||||
#define BIO_F_BIO_GETS 104
|
|
||||||
#define BIO_F_BIO_GET_ACCEPT_SOCKET 105
|
|
||||||
#define BIO_F_BIO_GET_HOST_IP 106
|
|
||||||
#define BIO_F_BIO_GET_PORT 107
|
|
||||||
#define BIO_F_BIO_MAKE_PAIR 121
|
|
||||||
#define BIO_F_BIO_NEW 108
|
|
||||||
#define BIO_F_BIO_NEW_FILE 109
|
|
||||||
#define BIO_F_BIO_NEW_MEM_BUF 126
|
|
||||||
#define BIO_F_BIO_NREAD 123
|
|
||||||
#define BIO_F_BIO_NREAD0 124
|
|
||||||
#define BIO_F_BIO_NWRITE 125
|
|
||||||
#define BIO_F_BIO_NWRITE0 122
|
|
||||||
#define BIO_F_BIO_PUTS 110
|
|
||||||
#define BIO_F_BIO_READ 111
|
|
||||||
#define BIO_F_BIO_SOCK_INIT 112
|
|
||||||
#define BIO_F_BIO_WRITE 113
|
|
||||||
#define BIO_F_BUFFER_CTRL 114
|
|
||||||
#define BIO_F_CONN_CTRL 127
|
|
||||||
#define BIO_F_CONN_STATE 115
|
|
||||||
#define BIO_F_DGRAM_SCTP_READ 132
|
|
||||||
#define BIO_F_FILE_CTRL 116
|
|
||||||
#define BIO_F_FILE_READ 130
|
|
||||||
#define BIO_F_LINEBUFFER_CTRL 129
|
|
||||||
#define BIO_F_MEM_READ 128
|
|
||||||
#define BIO_F_MEM_WRITE 117
|
|
||||||
#define BIO_F_SSL_NEW 118
|
|
||||||
#define BIO_F_WSASTARTUP 119
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define BIO_R_ACCEPT_ERROR 100
|
|
||||||
#define BIO_R_BAD_FOPEN_MODE 101
|
|
||||||
#define BIO_R_BAD_HOSTNAME_LOOKUP 102
|
|
||||||
#define BIO_R_BROKEN_PIPE 124
|
|
||||||
#define BIO_R_CONNECT_ERROR 103
|
|
||||||
#define BIO_R_EOF_ON_MEMORY_BIO 127
|
|
||||||
#define BIO_R_ERROR_SETTING_NBIO 104
|
|
||||||
#define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105
|
|
||||||
#define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106
|
|
||||||
#define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107
|
|
||||||
#define BIO_R_INVALID_ARGUMENT 125
|
|
||||||
#define BIO_R_INVALID_IP_ADDRESS 108
|
|
||||||
#define BIO_R_IN_USE 123
|
|
||||||
#define BIO_R_KEEPALIVE 109
|
|
||||||
#define BIO_R_NBIO_CONNECT_ERROR 110
|
|
||||||
#define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111
|
|
||||||
#define BIO_R_NO_HOSTNAME_SPECIFIED 112
|
|
||||||
#define BIO_R_NO_PORT_DEFINED 113
|
|
||||||
#define BIO_R_NO_PORT_SPECIFIED 114
|
|
||||||
#define BIO_R_NO_SUCH_FILE 128
|
|
||||||
#define BIO_R_NULL_PARAMETER 115
|
|
||||||
#define BIO_R_TAG_MISMATCH 116
|
|
||||||
#define BIO_R_UNABLE_TO_BIND_SOCKET 117
|
|
||||||
#define BIO_R_UNABLE_TO_CREATE_SOCKET 118
|
|
||||||
#define BIO_R_UNABLE_TO_LISTEN_SOCKET 119
|
|
||||||
#define BIO_R_UNINITIALIZED 120
|
|
||||||
#define BIO_R_UNSUPPORTED_METHOD 121
|
|
||||||
#define BIO_R_WRITE_TO_READ_ONLY_BIO 126
|
|
||||||
#define BIO_R_WSASTARTUP 122
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,129 +0,0 @@
|
|||||||
/* crypto/bf/blowfish.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_BLOWFISH_H
|
|
||||||
#define HEADER_BLOWFISH_H
|
|
||||||
|
|
||||||
#include <openssl/e_os2.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_BF
|
|
||||||
#error BF is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BF_ENCRYPT 1
|
|
||||||
#define BF_DECRYPT 0
|
|
||||||
|
|
||||||
/*
|
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
* ! BF_LONG has to be at least 32 bits wide. If it's wider, then !
|
|
||||||
* ! BF_LONG_LOG2 has to be defined along. !
|
|
||||||
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(__LP32__)
|
|
||||||
#define BF_LONG unsigned long
|
|
||||||
#elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)
|
|
||||||
#define BF_LONG unsigned long
|
|
||||||
#define BF_LONG_LOG2 3
|
|
||||||
/*
|
|
||||||
* _CRAY note. I could declare short, but I have no idea what impact
|
|
||||||
* does it have on performance on none-T3E machines. I could declare
|
|
||||||
* int, but at least on C90 sizeof(int) can be chosen at compile time.
|
|
||||||
* So I've chosen long...
|
|
||||||
* <appro@fy.chalmers.se>
|
|
||||||
*/
|
|
||||||
#else
|
|
||||||
#define BF_LONG unsigned int
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BF_ROUNDS 16
|
|
||||||
#define BF_BLOCK 8
|
|
||||||
|
|
||||||
typedef struct bf_key_st
|
|
||||||
{
|
|
||||||
BF_LONG P[BF_ROUNDS+2];
|
|
||||||
BF_LONG S[4*256];
|
|
||||||
} BF_KEY;
|
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data);
|
|
||||||
#endif
|
|
||||||
void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
|
|
||||||
|
|
||||||
void BF_encrypt(BF_LONG *data,const BF_KEY *key);
|
|
||||||
void BF_decrypt(BF_LONG *data,const BF_KEY *key);
|
|
||||||
|
|
||||||
void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const BF_KEY *key, int enc);
|
|
||||||
void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|
||||||
const BF_KEY *schedule, unsigned char *ivec, int enc);
|
|
||||||
void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|
||||||
const BF_KEY *schedule, unsigned char *ivec, int *num, int enc);
|
|
||||||
void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|
||||||
const BF_KEY *schedule, unsigned char *ivec, int *num);
|
|
||||||
const char *BF_options(void);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,902 +0,0 @@
|
|||||||
/* crypto/bn/bn.h */
|
|
||||||
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
* This product includes cryptographic software written by Eric Young
|
|
||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
|
||||||
* Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
|
|
||||||
*
|
|
||||||
* Portions of the attached software ("Contribution") are developed by
|
|
||||||
* SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
|
|
||||||
*
|
|
||||||
* The Contribution is licensed pursuant to the Eric Young open source
|
|
||||||
* license provided above.
|
|
||||||
*
|
|
||||||
* The binary polynomial arithmetic software is originally written by
|
|
||||||
* Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_BN_H
|
|
||||||
#define HEADER_BN_H
|
|
||||||
|
|
||||||
#include <openssl/e_os2.h>
|
|
||||||
#ifndef OPENSSL_NO_FP_API
|
|
||||||
#include <stdio.h> /* FILE */
|
|
||||||
#endif
|
|
||||||
#include <openssl/ossl_typ.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* These preprocessor symbols control various aspects of the bignum headers and
|
|
||||||
* library code. They're not defined by any "normal" configuration, as they are
|
|
||||||
* intended for development and testing purposes. NB: defining all three can be
|
|
||||||
* useful for debugging application code as well as openssl itself.
|
|
||||||
*
|
|
||||||
* BN_DEBUG - turn on various debugging alterations to the bignum code
|
|
||||||
* BN_DEBUG_RAND - uses random poisoning of unused words to trip up
|
|
||||||
* mismanagement of bignum internals. You must also define BN_DEBUG.
|
|
||||||
*/
|
|
||||||
/* #define BN_DEBUG */
|
|
||||||
/* #define BN_DEBUG_RAND */
|
|
||||||
|
|
||||||
#ifndef OPENSSL_SMALL_FOOTPRINT
|
|
||||||
#define BN_MUL_COMBA
|
|
||||||
#define BN_SQR_COMBA
|
|
||||||
#define BN_RECURSION
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This next option uses the C libraries (2 word)/(1 word) function.
|
|
||||||
* If it is not defined, I use my C version (which is slower).
|
|
||||||
* The reason for this flag is that when the particular C compiler
|
|
||||||
* library routine is used, and the library is linked with a different
|
|
||||||
* compiler, the library is missing. This mostly happens when the
|
|
||||||
* library is built with gcc and then linked using normal cc. This would
|
|
||||||
* be a common occurrence because gcc normally produces code that is
|
|
||||||
* 2 times faster than system compilers for the big number stuff.
|
|
||||||
* For machines with only one compiler (or shared libraries), this should
|
|
||||||
* be on. Again this in only really a problem on machines
|
|
||||||
* using "long long's", are 32bit, and are not using my assembler code. */
|
|
||||||
#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \
|
|
||||||
defined(OPENSSL_SYS_WIN32) || defined(linux)
|
|
||||||
# ifndef BN_DIV2W
|
|
||||||
# define BN_DIV2W
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* assuming long is 64bit - this is the DEC Alpha
|
|
||||||
* unsigned long long is only 64 bits :-(, don't define
|
|
||||||
* BN_LLONG for the DEC Alpha */
|
|
||||||
#ifdef SIXTY_FOUR_BIT_LONG
|
|
||||||
#define BN_ULLONG unsigned long long
|
|
||||||
#define BN_ULONG unsigned long
|
|
||||||
#define BN_LONG long
|
|
||||||
#define BN_BITS 128
|
|
||||||
#define BN_BYTES 8
|
|
||||||
#define BN_BITS2 64
|
|
||||||
#define BN_BITS4 32
|
|
||||||
#define BN_MASK (0xffffffffffffffffffffffffffffffffLL)
|
|
||||||
#define BN_MASK2 (0xffffffffffffffffL)
|
|
||||||
#define BN_MASK2l (0xffffffffL)
|
|
||||||
#define BN_MASK2h (0xffffffff00000000L)
|
|
||||||
#define BN_MASK2h1 (0xffffffff80000000L)
|
|
||||||
#define BN_TBIT (0x8000000000000000L)
|
|
||||||
#define BN_DEC_CONV (10000000000000000000UL)
|
|
||||||
#define BN_DEC_FMT1 "%lu"
|
|
||||||
#define BN_DEC_FMT2 "%019lu"
|
|
||||||
#define BN_DEC_NUM 19
|
|
||||||
#define BN_HEX_FMT1 "%lX"
|
|
||||||
#define BN_HEX_FMT2 "%016lX"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is where the long long data type is 64 bits, but long is 32.
|
|
||||||
* For machines where there are 64bit registers, this is the mode to use.
|
|
||||||
* IRIX, on R4000 and above should use this mode, along with the relevant
|
|
||||||
* assembler code :-). Do NOT define BN_LLONG.
|
|
||||||
*/
|
|
||||||
#ifdef SIXTY_FOUR_BIT
|
|
||||||
#undef BN_LLONG
|
|
||||||
#undef BN_ULLONG
|
|
||||||
#define BN_ULONG unsigned long long
|
|
||||||
#define BN_LONG long long
|
|
||||||
#define BN_BITS 128
|
|
||||||
#define BN_BYTES 8
|
|
||||||
#define BN_BITS2 64
|
|
||||||
#define BN_BITS4 32
|
|
||||||
#define BN_MASK2 (0xffffffffffffffffLL)
|
|
||||||
#define BN_MASK2l (0xffffffffL)
|
|
||||||
#define BN_MASK2h (0xffffffff00000000LL)
|
|
||||||
#define BN_MASK2h1 (0xffffffff80000000LL)
|
|
||||||
#define BN_TBIT (0x8000000000000000LL)
|
|
||||||
#define BN_DEC_CONV (10000000000000000000ULL)
|
|
||||||
#define BN_DEC_FMT1 "%llu"
|
|
||||||
#define BN_DEC_FMT2 "%019llu"
|
|
||||||
#define BN_DEC_NUM 19
|
|
||||||
#define BN_HEX_FMT1 "%llX"
|
|
||||||
#define BN_HEX_FMT2 "%016llX"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef THIRTY_TWO_BIT
|
|
||||||
#ifdef BN_LLONG
|
|
||||||
# if defined(_WIN32) && !defined(__GNUC__)
|
|
||||||
# define BN_ULLONG unsigned __int64
|
|
||||||
# define BN_MASK (0xffffffffffffffffI64)
|
|
||||||
# else
|
|
||||||
# define BN_ULLONG unsigned long long
|
|
||||||
# define BN_MASK (0xffffffffffffffffLL)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#define BN_ULONG unsigned int
|
|
||||||
#define BN_LONG int
|
|
||||||
#define BN_BITS 64
|
|
||||||
#define BN_BYTES 4
|
|
||||||
#define BN_BITS2 32
|
|
||||||
#define BN_BITS4 16
|
|
||||||
#define BN_MASK2 (0xffffffffL)
|
|
||||||
#define BN_MASK2l (0xffff)
|
|
||||||
#define BN_MASK2h1 (0xffff8000L)
|
|
||||||
#define BN_MASK2h (0xffff0000L)
|
|
||||||
#define BN_TBIT (0x80000000L)
|
|
||||||
#define BN_DEC_CONV (1000000000L)
|
|
||||||
#define BN_DEC_FMT1 "%u"
|
|
||||||
#define BN_DEC_FMT2 "%09u"
|
|
||||||
#define BN_DEC_NUM 9
|
|
||||||
#define BN_HEX_FMT1 "%X"
|
|
||||||
#define BN_HEX_FMT2 "%08X"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 2011-02-22 SMS.
|
|
||||||
* In various places, a size_t variable or a type cast to size_t was
|
|
||||||
* used to perform integer-only operations on pointers. This failed on
|
|
||||||
* VMS with 64-bit pointers (CC /POINTER_SIZE = 64) because size_t is
|
|
||||||
* still only 32 bits. What's needed in these cases is an integer type
|
|
||||||
* with the same size as a pointer, which size_t is not certain to be.
|
|
||||||
* The only fix here is VMS-specific.
|
|
||||||
*/
|
|
||||||
#if defined(OPENSSL_SYS_VMS)
|
|
||||||
# if __INITIAL_POINTER_SIZE == 64
|
|
||||||
# define PTR_SIZE_INT long long
|
|
||||||
# else /* __INITIAL_POINTER_SIZE == 64 */
|
|
||||||
# define PTR_SIZE_INT int
|
|
||||||
# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
|
|
||||||
#else /* defined(OPENSSL_SYS_VMS) */
|
|
||||||
# define PTR_SIZE_INT size_t
|
|
||||||
#endif /* defined(OPENSSL_SYS_VMS) [else] */
|
|
||||||
|
|
||||||
#define BN_DEFAULT_BITS 1280
|
|
||||||
|
|
||||||
#define BN_FLG_MALLOCED 0x01
|
|
||||||
#define BN_FLG_STATIC_DATA 0x02
|
|
||||||
#define BN_FLG_CONSTTIME 0x04 /* avoid leaking exponent information through timing,
|
|
||||||
* BN_mod_exp_mont() will call BN_mod_exp_mont_consttime,
|
|
||||||
* BN_div() will call BN_div_no_branch,
|
|
||||||
* BN_mod_inverse() will call BN_mod_inverse_no_branch.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
#define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME /* deprecated name for the flag */
|
|
||||||
/* avoid leaking exponent information through timings
|
|
||||||
* (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
#define BN_FLG_FREE 0x8000 /* used for debuging */
|
|
||||||
#endif
|
|
||||||
#define BN_set_flags(b,n) ((b)->flags|=(n))
|
|
||||||
#define BN_get_flags(b,n) ((b)->flags&(n))
|
|
||||||
|
|
||||||
/* get a clone of a BIGNUM with changed flags, for *temporary* use only
|
|
||||||
* (the two BIGNUMs cannot not be used in parallel!) */
|
|
||||||
#define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \
|
|
||||||
(dest)->top=(b)->top, \
|
|
||||||
(dest)->dmax=(b)->dmax, \
|
|
||||||
(dest)->neg=(b)->neg, \
|
|
||||||
(dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \
|
|
||||||
| ((b)->flags & ~BN_FLG_MALLOCED) \
|
|
||||||
| BN_FLG_STATIC_DATA \
|
|
||||||
| (n)))
|
|
||||||
|
|
||||||
/* Already declared in ossl_typ.h */
|
|
||||||
#if 0
|
|
||||||
typedef struct bignum_st BIGNUM;
|
|
||||||
/* Used for temp variables (declaration hidden in bn_lcl.h) */
|
|
||||||
typedef struct bignum_ctx BN_CTX;
|
|
||||||
typedef struct bn_blinding_st BN_BLINDING;
|
|
||||||
typedef struct bn_mont_ctx_st BN_MONT_CTX;
|
|
||||||
typedef struct bn_recp_ctx_st BN_RECP_CTX;
|
|
||||||
typedef struct bn_gencb_st BN_GENCB;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct bignum_st
|
|
||||||
{
|
|
||||||
BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit chunks. */
|
|
||||||
int top; /* Index of last used d +1. */
|
|
||||||
/* The next are internal book keeping for bn_expand. */
|
|
||||||
int dmax; /* Size of the d array. */
|
|
||||||
int neg; /* one if the number is negative */
|
|
||||||
int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Used for montgomery multiplication */
|
|
||||||
struct bn_mont_ctx_st
|
|
||||||
{
|
|
||||||
int ri; /* number of bits in R */
|
|
||||||
BIGNUM RR; /* used to convert to montgomery form */
|
|
||||||
BIGNUM N; /* The modulus */
|
|
||||||
BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1
|
|
||||||
* (Ni is only stored for bignum algorithm) */
|
|
||||||
BN_ULONG n0[2];/* least significant word(s) of Ni;
|
|
||||||
(type changed with 0.9.9, was "BN_ULONG n0;" before) */
|
|
||||||
int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Used for reciprocal division/mod functions
|
|
||||||
* It cannot be shared between threads
|
|
||||||
*/
|
|
||||||
struct bn_recp_ctx_st
|
|
||||||
{
|
|
||||||
BIGNUM N; /* the divisor */
|
|
||||||
BIGNUM Nr; /* the reciprocal */
|
|
||||||
int num_bits;
|
|
||||||
int shift;
|
|
||||||
int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Used for slow "generation" functions. */
|
|
||||||
struct bn_gencb_st
|
|
||||||
{
|
|
||||||
unsigned int ver; /* To handle binary (in)compatibility */
|
|
||||||
void *arg; /* callback-specific data */
|
|
||||||
union
|
|
||||||
{
|
|
||||||
/* if(ver==1) - handles old style callbacks */
|
|
||||||
void (*cb_1)(int, int, void *);
|
|
||||||
/* if(ver==2) - new callback style */
|
|
||||||
int (*cb_2)(int, int, BN_GENCB *);
|
|
||||||
} cb;
|
|
||||||
};
|
|
||||||
/* Wrapper function to make using BN_GENCB easier, */
|
|
||||||
int BN_GENCB_call(BN_GENCB *cb, int a, int b);
|
|
||||||
/* Macro to populate a BN_GENCB structure with an "old"-style callback */
|
|
||||||
#define BN_GENCB_set_old(gencb, callback, cb_arg) { \
|
|
||||||
BN_GENCB *tmp_gencb = (gencb); \
|
|
||||||
tmp_gencb->ver = 1; \
|
|
||||||
tmp_gencb->arg = (cb_arg); \
|
|
||||||
tmp_gencb->cb.cb_1 = (callback); }
|
|
||||||
/* Macro to populate a BN_GENCB structure with a "new"-style callback */
|
|
||||||
#define BN_GENCB_set(gencb, callback, cb_arg) { \
|
|
||||||
BN_GENCB *tmp_gencb = (gencb); \
|
|
||||||
tmp_gencb->ver = 2; \
|
|
||||||
tmp_gencb->arg = (cb_arg); \
|
|
||||||
tmp_gencb->cb.cb_2 = (callback); }
|
|
||||||
|
|
||||||
#define BN_prime_checks 0 /* default: select number of iterations
|
|
||||||
based on the size of the number */
|
|
||||||
|
|
||||||
/* number of Miller-Rabin iterations for an error rate of less than 2^-80
|
|
||||||
* for random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook
|
|
||||||
* of Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996];
|
|
||||||
* original paper: Damgaard, Landrock, Pomerance: Average case error estimates
|
|
||||||
* for the strong probable prime test. -- Math. Comp. 61 (1993) 177-194) */
|
|
||||||
#define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \
|
|
||||||
(b) >= 850 ? 3 : \
|
|
||||||
(b) >= 650 ? 4 : \
|
|
||||||
(b) >= 550 ? 5 : \
|
|
||||||
(b) >= 450 ? 6 : \
|
|
||||||
(b) >= 400 ? 7 : \
|
|
||||||
(b) >= 350 ? 8 : \
|
|
||||||
(b) >= 300 ? 9 : \
|
|
||||||
(b) >= 250 ? 12 : \
|
|
||||||
(b) >= 200 ? 15 : \
|
|
||||||
(b) >= 150 ? 18 : \
|
|
||||||
/* b >= 100 */ 27)
|
|
||||||
|
|
||||||
#define BN_num_bytes(a) ((BN_num_bits(a)+7)/8)
|
|
||||||
|
|
||||||
/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */
|
|
||||||
#define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \
|
|
||||||
(((w) == 0) && ((a)->top == 0)))
|
|
||||||
#define BN_is_zero(a) ((a)->top == 0)
|
|
||||||
#define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg)
|
|
||||||
#define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg))
|
|
||||||
#define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1))
|
|
||||||
|
|
||||||
#define BN_one(a) (BN_set_word((a),1))
|
|
||||||
#define BN_zero_ex(a) \
|
|
||||||
do { \
|
|
||||||
BIGNUM *_tmp_bn = (a); \
|
|
||||||
_tmp_bn->top = 0; \
|
|
||||||
_tmp_bn->neg = 0; \
|
|
||||||
} while(0)
|
|
||||||
#ifdef OPENSSL_NO_DEPRECATED
|
|
||||||
#define BN_zero(a) BN_zero_ex(a)
|
|
||||||
#else
|
|
||||||
#define BN_zero(a) (BN_set_word((a),0))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const BIGNUM *BN_value_one(void);
|
|
||||||
char * BN_options(void);
|
|
||||||
BN_CTX *BN_CTX_new(void);
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
void BN_CTX_init(BN_CTX *c);
|
|
||||||
#endif
|
|
||||||
void BN_CTX_free(BN_CTX *c);
|
|
||||||
void BN_CTX_start(BN_CTX *ctx);
|
|
||||||
BIGNUM *BN_CTX_get(BN_CTX *ctx);
|
|
||||||
void BN_CTX_end(BN_CTX *ctx);
|
|
||||||
int BN_rand(BIGNUM *rnd, int bits, int top,int bottom);
|
|
||||||
int BN_pseudo_rand(BIGNUM *rnd, int bits, int top,int bottom);
|
|
||||||
int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
|
|
||||||
int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
|
|
||||||
int BN_num_bits(const BIGNUM *a);
|
|
||||||
int BN_num_bits_word(BN_ULONG);
|
|
||||||
BIGNUM *BN_new(void);
|
|
||||||
void BN_init(BIGNUM *);
|
|
||||||
void BN_clear_free(BIGNUM *a);
|
|
||||||
BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);
|
|
||||||
void BN_swap(BIGNUM *a, BIGNUM *b);
|
|
||||||
BIGNUM *BN_bin2bn(const unsigned char *s,int len,BIGNUM *ret);
|
|
||||||
int BN_bn2bin(const BIGNUM *a, unsigned char *to);
|
|
||||||
BIGNUM *BN_mpi2bn(const unsigned char *s,int len,BIGNUM *ret);
|
|
||||||
int BN_bn2mpi(const BIGNUM *a, unsigned char *to);
|
|
||||||
int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
|
||||||
int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
|
||||||
int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
|
||||||
int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
|
||||||
int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
|
||||||
int BN_sqr(BIGNUM *r, const BIGNUM *a,BN_CTX *ctx);
|
|
||||||
/** BN_set_negative sets sign of a BIGNUM
|
|
||||||
* \param b pointer to the BIGNUM object
|
|
||||||
* \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise
|
|
||||||
*/
|
|
||||||
void BN_set_negative(BIGNUM *b, int n);
|
|
||||||
/** BN_is_negative returns 1 if the BIGNUM is negative
|
|
||||||
* \param a pointer to the BIGNUM object
|
|
||||||
* \return 1 if a < 0 and 0 otherwise
|
|
||||||
*/
|
|
||||||
#define BN_is_negative(a) ((a)->neg != 0)
|
|
||||||
|
|
||||||
int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
|
|
||||||
BN_CTX *ctx);
|
|
||||||
#define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx))
|
|
||||||
int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);
|
|
||||||
int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m);
|
|
||||||
int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m);
|
|
||||||
int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m);
|
|
||||||
int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m);
|
|
||||||
|
|
||||||
BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);
|
|
||||||
BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);
|
|
||||||
int BN_mul_word(BIGNUM *a, BN_ULONG w);
|
|
||||||
int BN_add_word(BIGNUM *a, BN_ULONG w);
|
|
||||||
int BN_sub_word(BIGNUM *a, BN_ULONG w);
|
|
||||||
int BN_set_word(BIGNUM *a, BN_ULONG w);
|
|
||||||
BN_ULONG BN_get_word(const BIGNUM *a);
|
|
||||||
|
|
||||||
int BN_cmp(const BIGNUM *a, const BIGNUM *b);
|
|
||||||
void BN_free(BIGNUM *a);
|
|
||||||
int BN_is_bit_set(const BIGNUM *a, int n);
|
|
||||||
int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
|
|
||||||
int BN_lshift1(BIGNUM *r, const BIGNUM *a);
|
|
||||||
int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,BN_CTX *ctx);
|
|
||||||
|
|
||||||
int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m,BN_CTX *ctx);
|
|
||||||
int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
|
||||||
int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont);
|
|
||||||
int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
|
||||||
int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1,
|
|
||||||
const BIGNUM *a2, const BIGNUM *p2,const BIGNUM *m,
|
|
||||||
BN_CTX *ctx,BN_MONT_CTX *m_ctx);
|
|
||||||
int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m,BN_CTX *ctx);
|
|
||||||
|
|
||||||
int BN_mask_bits(BIGNUM *a,int n);
|
|
||||||
#ifndef OPENSSL_NO_FP_API
|
|
||||||
int BN_print_fp(FILE *fp, const BIGNUM *a);
|
|
||||||
#endif
|
|
||||||
#ifdef HEADER_BIO_H
|
|
||||||
int BN_print(BIO *fp, const BIGNUM *a);
|
|
||||||
#else
|
|
||||||
int BN_print(void *fp, const BIGNUM *a);
|
|
||||||
#endif
|
|
||||||
int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx);
|
|
||||||
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n);
|
|
||||||
int BN_rshift1(BIGNUM *r, const BIGNUM *a);
|
|
||||||
void BN_clear(BIGNUM *a);
|
|
||||||
BIGNUM *BN_dup(const BIGNUM *a);
|
|
||||||
int BN_ucmp(const BIGNUM *a, const BIGNUM *b);
|
|
||||||
int BN_set_bit(BIGNUM *a, int n);
|
|
||||||
int BN_clear_bit(BIGNUM *a, int n);
|
|
||||||
char * BN_bn2hex(const BIGNUM *a);
|
|
||||||
char * BN_bn2dec(const BIGNUM *a);
|
|
||||||
int BN_hex2bn(BIGNUM **a, const char *str);
|
|
||||||
int BN_dec2bn(BIGNUM **a, const char *str);
|
|
||||||
int BN_asc2bn(BIGNUM **a, const char *str);
|
|
||||||
int BN_gcd(BIGNUM *r,const BIGNUM *a,const BIGNUM *b,BN_CTX *ctx);
|
|
||||||
int BN_kronecker(const BIGNUM *a,const BIGNUM *b,BN_CTX *ctx); /* returns -2 for error */
|
|
||||||
BIGNUM *BN_mod_inverse(BIGNUM *ret,
|
|
||||||
const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
|
|
||||||
BIGNUM *BN_mod_sqrt(BIGNUM *ret,
|
|
||||||
const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
|
|
||||||
|
|
||||||
void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);
|
|
||||||
|
|
||||||
/* Deprecated versions */
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,
|
|
||||||
const BIGNUM *add, const BIGNUM *rem,
|
|
||||||
void (*callback)(int,int,void *),void *cb_arg);
|
|
||||||
int BN_is_prime(const BIGNUM *p,int nchecks,
|
|
||||||
void (*callback)(int,int,void *),
|
|
||||||
BN_CTX *ctx,void *cb_arg);
|
|
||||||
int BN_is_prime_fasttest(const BIGNUM *p,int nchecks,
|
|
||||||
void (*callback)(int,int,void *),BN_CTX *ctx,void *cb_arg,
|
|
||||||
int do_trial_division);
|
|
||||||
#endif /* !defined(OPENSSL_NO_DEPRECATED) */
|
|
||||||
|
|
||||||
/* Newer versions */
|
|
||||||
int BN_generate_prime_ex(BIGNUM *ret,int bits,int safe, const BIGNUM *add,
|
|
||||||
const BIGNUM *rem, BN_GENCB *cb);
|
|
||||||
int BN_is_prime_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, BN_GENCB *cb);
|
|
||||||
int BN_is_prime_fasttest_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx,
|
|
||||||
int do_trial_division, BN_GENCB *cb);
|
|
||||||
|
|
||||||
int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx);
|
|
||||||
|
|
||||||
int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
|
|
||||||
const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2,
|
|
||||||
const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb);
|
|
||||||
int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
|
|
||||||
BIGNUM *Xp1, BIGNUM *Xp2,
|
|
||||||
const BIGNUM *Xp,
|
|
||||||
const BIGNUM *e, BN_CTX *ctx,
|
|
||||||
BN_GENCB *cb);
|
|
||||||
|
|
||||||
BN_MONT_CTX *BN_MONT_CTX_new(void );
|
|
||||||
void BN_MONT_CTX_init(BN_MONT_CTX *ctx);
|
|
||||||
int BN_mod_mul_montgomery(BIGNUM *r,const BIGNUM *a,const BIGNUM *b,
|
|
||||||
BN_MONT_CTX *mont, BN_CTX *ctx);
|
|
||||||
#define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\
|
|
||||||
(r),(a),&((mont)->RR),(mont),(ctx))
|
|
||||||
int BN_from_montgomery(BIGNUM *r,const BIGNUM *a,
|
|
||||||
BN_MONT_CTX *mont, BN_CTX *ctx);
|
|
||||||
void BN_MONT_CTX_free(BN_MONT_CTX *mont);
|
|
||||||
int BN_MONT_CTX_set(BN_MONT_CTX *mont,const BIGNUM *mod,BN_CTX *ctx);
|
|
||||||
BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to,BN_MONT_CTX *from);
|
|
||||||
BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
|
|
||||||
const BIGNUM *mod, BN_CTX *ctx);
|
|
||||||
|
|
||||||
/* BN_BLINDING flags */
|
|
||||||
#define BN_BLINDING_NO_UPDATE 0x00000001
|
|
||||||
#define BN_BLINDING_NO_RECREATE 0x00000002
|
|
||||||
|
|
||||||
BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod);
|
|
||||||
void BN_BLINDING_free(BN_BLINDING *b);
|
|
||||||
int BN_BLINDING_update(BN_BLINDING *b,BN_CTX *ctx);
|
|
||||||
int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
|
|
||||||
int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
|
|
||||||
int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *);
|
|
||||||
int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, BN_CTX *);
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *);
|
|
||||||
void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long);
|
|
||||||
#endif
|
|
||||||
CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *);
|
|
||||||
unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
|
|
||||||
void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
|
|
||||||
BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
|
|
||||||
const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
|
|
||||||
int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx),
|
|
||||||
BN_MONT_CTX *m_ctx);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
void BN_set_params(int mul,int high,int low,int mont);
|
|
||||||
int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void BN_RECP_CTX_init(BN_RECP_CTX *recp);
|
|
||||||
BN_RECP_CTX *BN_RECP_CTX_new(void);
|
|
||||||
void BN_RECP_CTX_free(BN_RECP_CTX *recp);
|
|
||||||
int BN_RECP_CTX_set(BN_RECP_CTX *recp,const BIGNUM *rdiv,BN_CTX *ctx);
|
|
||||||
int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y,
|
|
||||||
BN_RECP_CTX *recp,BN_CTX *ctx);
|
|
||||||
int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
const BIGNUM *m, BN_CTX *ctx);
|
|
||||||
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
|
|
||||||
BN_RECP_CTX *recp, BN_CTX *ctx);
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_EC2M
|
|
||||||
|
|
||||||
/* Functions for arithmetic over binary polynomials represented by BIGNUMs.
|
|
||||||
*
|
|
||||||
* The BIGNUM::neg property of BIGNUMs representing binary polynomials is
|
|
||||||
* ignored.
|
|
||||||
*
|
|
||||||
* Note that input arguments are not const so that their bit arrays can
|
|
||||||
* be expanded to the appropriate size if needed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); /*r = a + b*/
|
|
||||||
#define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b)
|
|
||||||
int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); /*r=a mod p*/
|
|
||||||
int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const BIGNUM *p, BN_CTX *ctx); /* r = (a * b) mod p */
|
|
||||||
int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
BN_CTX *ctx); /* r = (a * a) mod p */
|
|
||||||
int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p,
|
|
||||||
BN_CTX *ctx); /* r = (1 / b) mod p */
|
|
||||||
int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const BIGNUM *p, BN_CTX *ctx); /* r = (a / b) mod p */
|
|
||||||
int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const BIGNUM *p, BN_CTX *ctx); /* r = (a ^ b) mod p */
|
|
||||||
int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
BN_CTX *ctx); /* r = sqrt(a) mod p */
|
|
||||||
int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
|
||||||
BN_CTX *ctx); /* r^2 + r = a mod p */
|
|
||||||
#define BN_GF2m_cmp(a, b) BN_ucmp((a), (b))
|
|
||||||
/* Some functions allow for representation of the irreducible polynomials
|
|
||||||
* as an unsigned int[], say p. The irreducible f(t) is then of the form:
|
|
||||||
* t^p[0] + t^p[1] + ... + t^p[k]
|
|
||||||
* where m = p[0] > p[1] > ... > p[k] = 0.
|
|
||||||
*/
|
|
||||||
int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]);
|
|
||||||
/* r = a mod p */
|
|
||||||
int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const int p[], BN_CTX *ctx); /* r = (a * b) mod p */
|
|
||||||
int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[],
|
|
||||||
BN_CTX *ctx); /* r = (a * a) mod p */
|
|
||||||
int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[],
|
|
||||||
BN_CTX *ctx); /* r = (1 / b) mod p */
|
|
||||||
int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const int p[], BN_CTX *ctx); /* r = (a / b) mod p */
|
|
||||||
int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
||||||
const int p[], BN_CTX *ctx); /* r = (a ^ b) mod p */
|
|
||||||
int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a,
|
|
||||||
const int p[], BN_CTX *ctx); /* r = sqrt(a) mod p */
|
|
||||||
int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a,
|
|
||||||
const int p[], BN_CTX *ctx); /* r^2 + r = a mod p */
|
|
||||||
int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max);
|
|
||||||
int BN_GF2m_arr2poly(const int p[], BIGNUM *a);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* faster mod functions for the 'NIST primes'
|
|
||||||
* 0 <= a < p^2 */
|
|
||||||
int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
|
|
||||||
int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
|
|
||||||
int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
|
|
||||||
int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
|
|
||||||
int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
|
|
||||||
|
|
||||||
const BIGNUM *BN_get0_nist_prime_192(void);
|
|
||||||
const BIGNUM *BN_get0_nist_prime_224(void);
|
|
||||||
const BIGNUM *BN_get0_nist_prime_256(void);
|
|
||||||
const BIGNUM *BN_get0_nist_prime_384(void);
|
|
||||||
const BIGNUM *BN_get0_nist_prime_521(void);
|
|
||||||
|
|
||||||
/* library internal functions */
|
|
||||||
|
|
||||||
#define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\
|
|
||||||
(a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2))
|
|
||||||
#define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words)))
|
|
||||||
BIGNUM *bn_expand2(BIGNUM *a, int words);
|
|
||||||
#ifndef OPENSSL_NO_DEPRECATED
|
|
||||||
BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Bignum consistency macros
|
|
||||||
* There is one "API" macro, bn_fix_top(), for stripping leading zeroes from
|
|
||||||
* bignum data after direct manipulations on the data. There is also an
|
|
||||||
* "internal" macro, bn_check_top(), for verifying that there are no leading
|
|
||||||
* zeroes. Unfortunately, some auditing is required due to the fact that
|
|
||||||
* bn_fix_top() has become an overabused duct-tape because bignum data is
|
|
||||||
* occasionally passed around in an inconsistent state. So the following
|
|
||||||
* changes have been made to sort this out;
|
|
||||||
* - bn_fix_top()s implementation has been moved to bn_correct_top()
|
|
||||||
* - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and
|
|
||||||
* bn_check_top() is as before.
|
|
||||||
* - if BN_DEBUG *is* defined;
|
|
||||||
* - bn_check_top() tries to pollute unused words even if the bignum 'top' is
|
|
||||||
* consistent. (ed: only if BN_DEBUG_RAND is defined)
|
|
||||||
* - bn_fix_top() maps to bn_check_top() rather than "fixing" anything.
|
|
||||||
* The idea is to have debug builds flag up inconsistent bignums when they
|
|
||||||
* occur. If that occurs in a bn_fix_top(), we examine the code in question; if
|
|
||||||
* the use of bn_fix_top() was appropriate (ie. it follows directly after code
|
|
||||||
* that manipulates the bignum) it is converted to bn_correct_top(), and if it
|
|
||||||
* was not appropriate, we convert it permanently to bn_check_top() and track
|
|
||||||
* down the cause of the bug. Eventually, no internal code should be using the
|
|
||||||
* bn_fix_top() macro. External applications and libraries should try this with
|
|
||||||
* their own code too, both in terms of building against the openssl headers
|
|
||||||
* with BN_DEBUG defined *and* linking with a version of OpenSSL built with it
|
|
||||||
* defined. This not only improves external code, it provides more test
|
|
||||||
* coverage for openssl's own code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef BN_DEBUG
|
|
||||||
|
|
||||||
/* We only need assert() when debugging */
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#ifdef BN_DEBUG_RAND
|
|
||||||
/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */
|
|
||||||
#ifndef RAND_pseudo_bytes
|
|
||||||
int RAND_pseudo_bytes(unsigned char *buf,int num);
|
|
||||||
#define BN_DEBUG_TRIX
|
|
||||||
#endif
|
|
||||||
#define bn_pollute(a) \
|
|
||||||
do { \
|
|
||||||
const BIGNUM *_bnum1 = (a); \
|
|
||||||
if(_bnum1->top < _bnum1->dmax) { \
|
|
||||||
unsigned char _tmp_char; \
|
|
||||||
/* We cast away const without the compiler knowing, any \
|
|
||||||
* *genuinely* constant variables that aren't mutable \
|
|
||||||
* wouldn't be constructed with top!=dmax. */ \
|
|
||||||
BN_ULONG *_not_const; \
|
|
||||||
memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \
|
|
||||||
RAND_pseudo_bytes(&_tmp_char, 1); \
|
|
||||||
memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \
|
|
||||||
(_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \
|
|
||||||
} \
|
|
||||||
} while(0)
|
|
||||||
#ifdef BN_DEBUG_TRIX
|
|
||||||
#undef RAND_pseudo_bytes
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define bn_pollute(a)
|
|
||||||
#endif
|
|
||||||
#define bn_check_top(a) \
|
|
||||||
do { \
|
|
||||||
const BIGNUM *_bnum2 = (a); \
|
|
||||||
if (_bnum2 != NULL) { \
|
|
||||||
assert((_bnum2->top == 0) || \
|
|
||||||
(_bnum2->d[_bnum2->top - 1] != 0)); \
|
|
||||||
bn_pollute(_bnum2); \
|
|
||||||
} \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
#define bn_fix_top(a) bn_check_top(a)
|
|
||||||
|
|
||||||
#define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2)
|
|
||||||
#define bn_wcheck_size(bn, words) \
|
|
||||||
do { \
|
|
||||||
const BIGNUM *_bnum2 = (bn); \
|
|
||||||
assert(words <= (_bnum2)->dmax && words >= (_bnum2)->top); \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
#else /* !BN_DEBUG */
|
|
||||||
|
|
||||||
#define bn_pollute(a)
|
|
||||||
#define bn_check_top(a)
|
|
||||||
#define bn_fix_top(a) bn_correct_top(a)
|
|
||||||
#define bn_check_size(bn, bits)
|
|
||||||
#define bn_wcheck_size(bn, words)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define bn_correct_top(a) \
|
|
||||||
{ \
|
|
||||||
BN_ULONG *ftl; \
|
|
||||||
int tmp_top = (a)->top; \
|
|
||||||
if (tmp_top > 0) \
|
|
||||||
{ \
|
|
||||||
for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \
|
|
||||||
if (*(ftl--)) break; \
|
|
||||||
(a)->top = tmp_top; \
|
|
||||||
} \
|
|
||||||
bn_pollute(a); \
|
|
||||||
}
|
|
||||||
|
|
||||||
BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w);
|
|
||||||
BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w);
|
|
||||||
void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num);
|
|
||||||
BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d);
|
|
||||||
BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int num);
|
|
||||||
BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int num);
|
|
||||||
|
|
||||||
/* Primes from RFC 2409 */
|
|
||||||
BIGNUM *get_rfc2409_prime_768(BIGNUM *bn);
|
|
||||||
BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn);
|
|
||||||
|
|
||||||
/* Primes from RFC 3526 */
|
|
||||||
BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn);
|
|
||||||
BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn);
|
|
||||||
BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn);
|
|
||||||
BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn);
|
|
||||||
BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn);
|
|
||||||
BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn);
|
|
||||||
|
|
||||||
int BN_bntest_rand(BIGNUM *rnd, int bits, int top,int bottom);
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
void ERR_load_BN_strings(void);
|
|
||||||
|
|
||||||
/* Error codes for the BN functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define BN_F_BNRAND 127
|
|
||||||
#define BN_F_BN_BLINDING_CONVERT_EX 100
|
|
||||||
#define BN_F_BN_BLINDING_CREATE_PARAM 128
|
|
||||||
#define BN_F_BN_BLINDING_INVERT_EX 101
|
|
||||||
#define BN_F_BN_BLINDING_NEW 102
|
|
||||||
#define BN_F_BN_BLINDING_UPDATE 103
|
|
||||||
#define BN_F_BN_BN2DEC 104
|
|
||||||
#define BN_F_BN_BN2HEX 105
|
|
||||||
#define BN_F_BN_CTX_GET 116
|
|
||||||
#define BN_F_BN_CTX_NEW 106
|
|
||||||
#define BN_F_BN_CTX_START 129
|
|
||||||
#define BN_F_BN_DIV 107
|
|
||||||
#define BN_F_BN_DIV_NO_BRANCH 138
|
|
||||||
#define BN_F_BN_DIV_RECP 130
|
|
||||||
#define BN_F_BN_EXP 123
|
|
||||||
#define BN_F_BN_EXPAND2 108
|
|
||||||
#define BN_F_BN_EXPAND_INTERNAL 120
|
|
||||||
#define BN_F_BN_GF2M_MOD 131
|
|
||||||
#define BN_F_BN_GF2M_MOD_EXP 132
|
|
||||||
#define BN_F_BN_GF2M_MOD_MUL 133
|
|
||||||
#define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134
|
|
||||||
#define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135
|
|
||||||
#define BN_F_BN_GF2M_MOD_SQR 136
|
|
||||||
#define BN_F_BN_GF2M_MOD_SQRT 137
|
|
||||||
#define BN_F_BN_MOD_EXP2_MONT 118
|
|
||||||
#define BN_F_BN_MOD_EXP_MONT 109
|
|
||||||
#define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124
|
|
||||||
#define BN_F_BN_MOD_EXP_MONT_WORD 117
|
|
||||||
#define BN_F_BN_MOD_EXP_RECP 125
|
|
||||||
#define BN_F_BN_MOD_EXP_SIMPLE 126
|
|
||||||
#define BN_F_BN_MOD_INVERSE 110
|
|
||||||
#define BN_F_BN_MOD_INVERSE_NO_BRANCH 139
|
|
||||||
#define BN_F_BN_MOD_LSHIFT_QUICK 119
|
|
||||||
#define BN_F_BN_MOD_MUL_RECIPROCAL 111
|
|
||||||
#define BN_F_BN_MOD_SQRT 121
|
|
||||||
#define BN_F_BN_MPI2BN 112
|
|
||||||
#define BN_F_BN_NEW 113
|
|
||||||
#define BN_F_BN_RAND 114
|
|
||||||
#define BN_F_BN_RAND_RANGE 122
|
|
||||||
#define BN_F_BN_USUB 115
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define BN_R_ARG2_LT_ARG3 100
|
|
||||||
#define BN_R_BAD_RECIPROCAL 101
|
|
||||||
#define BN_R_BIGNUM_TOO_LONG 114
|
|
||||||
#define BN_R_CALLED_WITH_EVEN_MODULUS 102
|
|
||||||
#define BN_R_DIV_BY_ZERO 103
|
|
||||||
#define BN_R_ENCODING_ERROR 104
|
|
||||||
#define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105
|
|
||||||
#define BN_R_INPUT_NOT_REDUCED 110
|
|
||||||
#define BN_R_INVALID_LENGTH 106
|
|
||||||
#define BN_R_INVALID_RANGE 115
|
|
||||||
#define BN_R_NOT_A_SQUARE 111
|
|
||||||
#define BN_R_NOT_INITIALIZED 107
|
|
||||||
#define BN_R_NO_INVERSE 108
|
|
||||||
#define BN_R_NO_SOLUTION 116
|
|
||||||
#define BN_R_P_IS_NOT_PRIME 112
|
|
||||||
#define BN_R_TOO_MANY_ITERATIONS 113
|
|
||||||
#define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,119 +0,0 @@
|
|||||||
/* crypto/buffer/buffer.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_BUFFER_H
|
|
||||||
#define HEADER_BUFFER_H
|
|
||||||
|
|
||||||
#include <openssl/ossl_typ.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#if !defined(NO_SYS_TYPES_H)
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Already declared in ossl_typ.h */
|
|
||||||
/* typedef struct buf_mem_st BUF_MEM; */
|
|
||||||
|
|
||||||
struct buf_mem_st
|
|
||||||
{
|
|
||||||
size_t length; /* current number of bytes */
|
|
||||||
char *data;
|
|
||||||
size_t max; /* size of buffer */
|
|
||||||
};
|
|
||||||
|
|
||||||
BUF_MEM *BUF_MEM_new(void);
|
|
||||||
void BUF_MEM_free(BUF_MEM *a);
|
|
||||||
int BUF_MEM_grow(BUF_MEM *str, size_t len);
|
|
||||||
int BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
|
|
||||||
char * BUF_strdup(const char *str);
|
|
||||||
char * BUF_strndup(const char *str, size_t siz);
|
|
||||||
void * BUF_memdup(const void *data, size_t siz);
|
|
||||||
void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);
|
|
||||||
|
|
||||||
/* safe string functions */
|
|
||||||
size_t BUF_strlcpy(char *dst,const char *src,size_t siz);
|
|
||||||
size_t BUF_strlcat(char *dst,const char *src,size_t siz);
|
|
||||||
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
void ERR_load_BUF_strings(void);
|
|
||||||
|
|
||||||
/* Error codes for the BUF functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define BUF_F_BUF_MEMDUP 103
|
|
||||||
#define BUF_F_BUF_MEM_GROW 100
|
|
||||||
#define BUF_F_BUF_MEM_GROW_CLEAN 105
|
|
||||||
#define BUF_F_BUF_MEM_NEW 101
|
|
||||||
#define BUF_F_BUF_STRDUP 102
|
|
||||||
#define BUF_F_BUF_STRNDUP 104
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,130 +0,0 @@
|
|||||||
/* crypto/camellia/camellia.h -*- mode:C; c-file-style: "eay" -*- */
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* openssl-core@openssl.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_CAMELLIA_H
|
|
||||||
#define HEADER_CAMELLIA_H
|
|
||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_CAMELLIA
|
|
||||||
#error CAMELLIA is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#define CAMELLIA_ENCRYPT 1
|
|
||||||
#define CAMELLIA_DECRYPT 0
|
|
||||||
|
|
||||||
/* Because array size can't be a const in C, the following two are macros.
|
|
||||||
Both sizes are in bytes. */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This should be a hidden type, but EVP requires that the size be known */
|
|
||||||
|
|
||||||
#define CAMELLIA_BLOCK_SIZE 16
|
|
||||||
#define CAMELLIA_TABLE_BYTE_LEN 272
|
|
||||||
#define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4)
|
|
||||||
|
|
||||||
typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match with WORD */
|
|
||||||
|
|
||||||
struct camellia_key_st
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
double d; /* ensures 64-bit align */
|
|
||||||
KEY_TABLE_TYPE rd_key;
|
|
||||||
} u;
|
|
||||||
int grand_rounds;
|
|
||||||
};
|
|
||||||
typedef struct camellia_key_st CAMELLIA_KEY;
|
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
int private_Camellia_set_key(const unsigned char *userKey, const int bits,
|
|
||||||
CAMELLIA_KEY *key);
|
|
||||||
#endif
|
|
||||||
int Camellia_set_key(const unsigned char *userKey, const int bits,
|
|
||||||
CAMELLIA_KEY *key);
|
|
||||||
|
|
||||||
void Camellia_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const CAMELLIA_KEY *key);
|
|
||||||
void Camellia_decrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const CAMELLIA_KEY *key);
|
|
||||||
|
|
||||||
void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
const CAMELLIA_KEY *key, const int enc);
|
|
||||||
void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const CAMELLIA_KEY *key,
|
|
||||||
unsigned char *ivec, const int enc);
|
|
||||||
void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const CAMELLIA_KEY *key,
|
|
||||||
unsigned char *ivec, int *num, const int enc);
|
|
||||||
void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const CAMELLIA_KEY *key,
|
|
||||||
unsigned char *ivec, int *num, const int enc);
|
|
||||||
void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const CAMELLIA_KEY *key,
|
|
||||||
unsigned char *ivec, int *num, const int enc);
|
|
||||||
void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const CAMELLIA_KEY *key,
|
|
||||||
unsigned char *ivec, int *num);
|
|
||||||
void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
size_t length, const CAMELLIA_KEY *key,
|
|
||||||
unsigned char ivec[CAMELLIA_BLOCK_SIZE],
|
|
||||||
unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE],
|
|
||||||
unsigned int *num);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* !HEADER_Camellia_H */
|
|
@ -1,107 +0,0 @@
|
|||||||
/* crypto/cast/cast.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_CAST_H
|
|
||||||
#define HEADER_CAST_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_CAST
|
|
||||||
#error CAST is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CAST_ENCRYPT 1
|
|
||||||
#define CAST_DECRYPT 0
|
|
||||||
|
|
||||||
#define CAST_LONG unsigned int
|
|
||||||
|
|
||||||
#define CAST_BLOCK 8
|
|
||||||
#define CAST_KEY_LENGTH 16
|
|
||||||
|
|
||||||
typedef struct cast_key_st
|
|
||||||
{
|
|
||||||
CAST_LONG data[32];
|
|
||||||
int short_key; /* Use reduced rounds for short key */
|
|
||||||
} CAST_KEY;
|
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data);
|
|
||||||
#endif
|
|
||||||
void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data);
|
|
||||||
void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAST_KEY *key,
|
|
||||||
int enc);
|
|
||||||
void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key);
|
|
||||||
void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key);
|
|
||||||
void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|
||||||
const CAST_KEY *ks, unsigned char *iv, int enc);
|
|
||||||
void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
long length, const CAST_KEY *schedule, unsigned char *ivec,
|
|
||||||
int *num, int enc);
|
|
||||||
void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
|
||||||
long length, const CAST_KEY *schedule, unsigned char *ivec,
|
|
||||||
int *num);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,82 +0,0 @@
|
|||||||
/* crypto/cmac/cmac.h */
|
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
|
||||||
* project.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2010 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HEADER_CMAC_H
|
|
||||||
#define HEADER_CMAC_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <openssl/evp.h>
|
|
||||||
|
|
||||||
/* Opaque */
|
|
||||||
typedef struct CMAC_CTX_st CMAC_CTX;
|
|
||||||
|
|
||||||
CMAC_CTX *CMAC_CTX_new(void);
|
|
||||||
void CMAC_CTX_cleanup(CMAC_CTX *ctx);
|
|
||||||
void CMAC_CTX_free(CMAC_CTX *ctx);
|
|
||||||
EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx);
|
|
||||||
int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in);
|
|
||||||
|
|
||||||
int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,
|
|
||||||
const EVP_CIPHER *cipher, ENGINE *impl);
|
|
||||||
int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen);
|
|
||||||
int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen);
|
|
||||||
int CMAC_resume(CMAC_CTX *ctx);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,501 +0,0 @@
|
|||||||
/* crypto/cms/cms.h */
|
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
|
||||||
* project.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
|
||||||
* Copyright (c) 2008 The OpenSSL Project. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
*
|
|
||||||
* 3. All advertising materials mentioning features or use of this
|
|
||||||
* software must display the following acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* prior written permission. For written permission, please contact
|
|
||||||
* licensing@OpenSSL.org.
|
|
||||||
*
|
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
|
||||||
* permission of the OpenSSL Project.
|
|
||||||
*
|
|
||||||
* 6. Redistributions of any form whatsoever must retain the following
|
|
||||||
* acknowledgment:
|
|
||||||
* "This product includes software developed by the OpenSSL Project
|
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
|
||||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
* ====================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HEADER_CMS_H
|
|
||||||
#define HEADER_CMS_H
|
|
||||||
|
|
||||||
#include <openssl/x509.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_CMS
|
|
||||||
#error CMS is disabled.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct CMS_ContentInfo_st CMS_ContentInfo;
|
|
||||||
typedef struct CMS_SignerInfo_st CMS_SignerInfo;
|
|
||||||
typedef struct CMS_CertificateChoices CMS_CertificateChoices;
|
|
||||||
typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice;
|
|
||||||
typedef struct CMS_RecipientInfo_st CMS_RecipientInfo;
|
|
||||||
typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest;
|
|
||||||
typedef struct CMS_Receipt_st CMS_Receipt;
|
|
||||||
|
|
||||||
DECLARE_STACK_OF(CMS_SignerInfo)
|
|
||||||
DECLARE_STACK_OF(GENERAL_NAMES)
|
|
||||||
DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo)
|
|
||||||
DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest)
|
|
||||||
DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
|
|
||||||
|
|
||||||
#define CMS_SIGNERINFO_ISSUER_SERIAL 0
|
|
||||||
#define CMS_SIGNERINFO_KEYIDENTIFIER 1
|
|
||||||
|
|
||||||
#define CMS_RECIPINFO_TRANS 0
|
|
||||||
#define CMS_RECIPINFO_AGREE 1
|
|
||||||
#define CMS_RECIPINFO_KEK 2
|
|
||||||
#define CMS_RECIPINFO_PASS 3
|
|
||||||
#define CMS_RECIPINFO_OTHER 4
|
|
||||||
|
|
||||||
/* S/MIME related flags */
|
|
||||||
|
|
||||||
#define CMS_TEXT 0x1
|
|
||||||
#define CMS_NOCERTS 0x2
|
|
||||||
#define CMS_NO_CONTENT_VERIFY 0x4
|
|
||||||
#define CMS_NO_ATTR_VERIFY 0x8
|
|
||||||
#define CMS_NOSIGS \
|
|
||||||
(CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY)
|
|
||||||
#define CMS_NOINTERN 0x10
|
|
||||||
#define CMS_NO_SIGNER_CERT_VERIFY 0x20
|
|
||||||
#define CMS_NOVERIFY 0x20
|
|
||||||
#define CMS_DETACHED 0x40
|
|
||||||
#define CMS_BINARY 0x80
|
|
||||||
#define CMS_NOATTR 0x100
|
|
||||||
#define CMS_NOSMIMECAP 0x200
|
|
||||||
#define CMS_NOOLDMIMETYPE 0x400
|
|
||||||
#define CMS_CRLFEOL 0x800
|
|
||||||
#define CMS_STREAM 0x1000
|
|
||||||
#define CMS_NOCRL 0x2000
|
|
||||||
#define CMS_PARTIAL 0x4000
|
|
||||||
#define CMS_REUSE_DIGEST 0x8000
|
|
||||||
#define CMS_USE_KEYID 0x10000
|
|
||||||
#define CMS_DEBUG_DECRYPT 0x20000
|
|
||||||
|
|
||||||
const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont);
|
|
||||||
int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio);
|
|
||||||
|
|
||||||
ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms);
|
|
||||||
int CMS_is_detached(CMS_ContentInfo *cms);
|
|
||||||
int CMS_set_detached(CMS_ContentInfo *cms, int detached);
|
|
||||||
|
|
||||||
#ifdef HEADER_PEM_H
|
|
||||||
DECLARE_PEM_rw_const(CMS, CMS_ContentInfo)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms);
|
|
||||||
CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms);
|
|
||||||
int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms);
|
|
||||||
int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags);
|
|
||||||
int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags);
|
|
||||||
CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont);
|
|
||||||
int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags);
|
|
||||||
|
|
||||||
int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, unsigned int flags);
|
|
||||||
|
|
||||||
CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
|
|
||||||
BIO *data, unsigned int flags);
|
|
||||||
|
|
||||||
CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si,
|
|
||||||
X509 *signcert, EVP_PKEY *pkey,
|
|
||||||
STACK_OF(X509) *certs,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags);
|
|
||||||
CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
|
|
||||||
unsigned int flags);
|
|
||||||
CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms,
|
|
||||||
const unsigned char *key, size_t keylen,
|
|
||||||
BIO *dcont, BIO *out, unsigned int flags);
|
|
||||||
|
|
||||||
CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher,
|
|
||||||
const unsigned char *key, size_t keylen,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph,
|
|
||||||
const unsigned char *key, size_t keylen);
|
|
||||||
|
|
||||||
int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs,
|
|
||||||
X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms,
|
|
||||||
STACK_OF(X509) *certs,
|
|
||||||
X509_STORE *store, unsigned int flags);
|
|
||||||
|
|
||||||
STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in,
|
|
||||||
const EVP_CIPHER *cipher, unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,
|
|
||||||
BIO *dcont, BIO *out,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert);
|
|
||||||
int CMS_decrypt_set1_key(CMS_ContentInfo *cms,
|
|
||||||
unsigned char *key, size_t keylen,
|
|
||||||
unsigned char *id, size_t idlen);
|
|
||||||
int CMS_decrypt_set1_password(CMS_ContentInfo *cms,
|
|
||||||
unsigned char *pass, ossl_ssize_t passlen);
|
|
||||||
|
|
||||||
STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);
|
|
||||||
int CMS_RecipientInfo_type(CMS_RecipientInfo *ri);
|
|
||||||
CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher);
|
|
||||||
CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
|
|
||||||
X509 *recip, unsigned int flags);
|
|
||||||
int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey);
|
|
||||||
int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);
|
|
||||||
int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri,
|
|
||||||
EVP_PKEY **pk, X509 **recip,
|
|
||||||
X509_ALGOR **palg);
|
|
||||||
int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri,
|
|
||||||
ASN1_OCTET_STRING **keyid,
|
|
||||||
X509_NAME **issuer, ASN1_INTEGER **sno);
|
|
||||||
|
|
||||||
CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,
|
|
||||||
unsigned char *key, size_t keylen,
|
|
||||||
unsigned char *id, size_t idlen,
|
|
||||||
ASN1_GENERALIZEDTIME *date,
|
|
||||||
ASN1_OBJECT *otherTypeId,
|
|
||||||
ASN1_TYPE *otherType);
|
|
||||||
|
|
||||||
int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri,
|
|
||||||
X509_ALGOR **palg,
|
|
||||||
ASN1_OCTET_STRING **pid,
|
|
||||||
ASN1_GENERALIZEDTIME **pdate,
|
|
||||||
ASN1_OBJECT **potherid,
|
|
||||||
ASN1_TYPE **pothertype);
|
|
||||||
|
|
||||||
int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri,
|
|
||||||
unsigned char *key, size_t keylen);
|
|
||||||
|
|
||||||
int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri,
|
|
||||||
const unsigned char *id, size_t idlen);
|
|
||||||
|
|
||||||
int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri,
|
|
||||||
unsigned char *pass,
|
|
||||||
ossl_ssize_t passlen);
|
|
||||||
|
|
||||||
CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms,
|
|
||||||
int iter, int wrap_nid, int pbe_nid,
|
|
||||||
unsigned char *pass,
|
|
||||||
ossl_ssize_t passlen,
|
|
||||||
const EVP_CIPHER *kekciph);
|
|
||||||
|
|
||||||
int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
|
|
||||||
|
|
||||||
int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
|
|
||||||
unsigned int flags);
|
|
||||||
CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags);
|
|
||||||
|
|
||||||
int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid);
|
|
||||||
const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms);
|
|
||||||
int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert);
|
|
||||||
int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert);
|
|
||||||
STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms);
|
|
||||||
int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl);
|
|
||||||
int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl);
|
|
||||||
STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
int CMS_SignedData_init(CMS_ContentInfo *cms);
|
|
||||||
CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
|
|
||||||
X509 *signer, EVP_PKEY *pk, const EVP_MD *md,
|
|
||||||
unsigned int flags);
|
|
||||||
STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);
|
|
||||||
|
|
||||||
void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);
|
|
||||||
int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si,
|
|
||||||
ASN1_OCTET_STRING **keyid,
|
|
||||||
X509_NAME **issuer, ASN1_INTEGER **sno);
|
|
||||||
int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert);
|
|
||||||
int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs,
|
|
||||||
unsigned int flags);
|
|
||||||
void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, X509 **signer,
|
|
||||||
X509_ALGOR **pdig, X509_ALGOR **psig);
|
|
||||||
int CMS_SignerInfo_sign(CMS_SignerInfo *si);
|
|
||||||
int CMS_SignerInfo_verify(CMS_SignerInfo *si);
|
|
||||||
int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain);
|
|
||||||
|
|
||||||
int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs);
|
|
||||||
int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs,
|
|
||||||
int algnid, int keysize);
|
|
||||||
int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap);
|
|
||||||
|
|
||||||
int CMS_signed_get_attr_count(const CMS_SignerInfo *si);
|
|
||||||
int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
|
|
||||||
int lastpos);
|
|
||||||
int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj,
|
|
||||||
int lastpos);
|
|
||||||
X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc);
|
|
||||||
X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc);
|
|
||||||
int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);
|
|
||||||
int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,
|
|
||||||
const ASN1_OBJECT *obj, int type,
|
|
||||||
const void *bytes, int len);
|
|
||||||
int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si,
|
|
||||||
int nid, int type,
|
|
||||||
const void *bytes, int len);
|
|
||||||
int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si,
|
|
||||||
const char *attrname, int type,
|
|
||||||
const void *bytes, int len);
|
|
||||||
void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
|
|
||||||
int lastpos, int type);
|
|
||||||
|
|
||||||
int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si);
|
|
||||||
int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
|
|
||||||
int lastpos);
|
|
||||||
int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj,
|
|
||||||
int lastpos);
|
|
||||||
X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc);
|
|
||||||
X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc);
|
|
||||||
int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);
|
|
||||||
int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si,
|
|
||||||
const ASN1_OBJECT *obj, int type,
|
|
||||||
const void *bytes, int len);
|
|
||||||
int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si,
|
|
||||||
int nid, int type,
|
|
||||||
const void *bytes, int len);
|
|
||||||
int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si,
|
|
||||||
const char *attrname, int type,
|
|
||||||
const void *bytes, int len);
|
|
||||||
void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
|
|
||||||
int lastpos, int type);
|
|
||||||
|
|
||||||
#ifdef HEADER_X509V3_H
|
|
||||||
|
|
||||||
int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr);
|
|
||||||
CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen,
|
|
||||||
int allorfirst,
|
|
||||||
STACK_OF(GENERAL_NAMES) *receiptList,
|
|
||||||
STACK_OF(GENERAL_NAMES) *receiptsTo);
|
|
||||||
int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr);
|
|
||||||
void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr,
|
|
||||||
ASN1_STRING **pcid,
|
|
||||||
int *pallorfirst,
|
|
||||||
STACK_OF(GENERAL_NAMES) **plist,
|
|
||||||
STACK_OF(GENERAL_NAMES) **prto);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
void ERR_load_CMS_strings(void);
|
|
||||||
|
|
||||||
/* Error codes for the CMS functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define CMS_F_CHECK_CONTENT 99
|
|
||||||
#define CMS_F_CMS_ADD0_CERT 164
|
|
||||||
#define CMS_F_CMS_ADD0_RECIPIENT_KEY 100
|
|
||||||
#define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165
|
|
||||||
#define CMS_F_CMS_ADD1_RECEIPTREQUEST 158
|
|
||||||
#define CMS_F_CMS_ADD1_RECIPIENT_CERT 101
|
|
||||||
#define CMS_F_CMS_ADD1_SIGNER 102
|
|
||||||
#define CMS_F_CMS_ADD1_SIGNINGTIME 103
|
|
||||||
#define CMS_F_CMS_COMPRESS 104
|
|
||||||
#define CMS_F_CMS_COMPRESSEDDATA_CREATE 105
|
|
||||||
#define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106
|
|
||||||
#define CMS_F_CMS_COPY_CONTENT 107
|
|
||||||
#define CMS_F_CMS_COPY_MESSAGEDIGEST 108
|
|
||||||
#define CMS_F_CMS_DATA 109
|
|
||||||
#define CMS_F_CMS_DATAFINAL 110
|
|
||||||
#define CMS_F_CMS_DATAINIT 111
|
|
||||||
#define CMS_F_CMS_DECRYPT 112
|
|
||||||
#define CMS_F_CMS_DECRYPT_SET1_KEY 113
|
|
||||||
#define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166
|
|
||||||
#define CMS_F_CMS_DECRYPT_SET1_PKEY 114
|
|
||||||
#define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115
|
|
||||||
#define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116
|
|
||||||
#define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117
|
|
||||||
#define CMS_F_CMS_DIGEST_VERIFY 118
|
|
||||||
#define CMS_F_CMS_ENCODE_RECEIPT 161
|
|
||||||
#define CMS_F_CMS_ENCRYPT 119
|
|
||||||
#define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120
|
|
||||||
#define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121
|
|
||||||
#define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122
|
|
||||||
#define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123
|
|
||||||
#define CMS_F_CMS_ENVELOPEDDATA_CREATE 124
|
|
||||||
#define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125
|
|
||||||
#define CMS_F_CMS_ENVELOPED_DATA_INIT 126
|
|
||||||
#define CMS_F_CMS_FINAL 127
|
|
||||||
#define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128
|
|
||||||
#define CMS_F_CMS_GET0_CONTENT 129
|
|
||||||
#define CMS_F_CMS_GET0_ECONTENT_TYPE 130
|
|
||||||
#define CMS_F_CMS_GET0_ENVELOPED 131
|
|
||||||
#define CMS_F_CMS_GET0_REVOCATION_CHOICES 132
|
|
||||||
#define CMS_F_CMS_GET0_SIGNED 133
|
|
||||||
#define CMS_F_CMS_MSGSIGDIGEST_ADD1 162
|
|
||||||
#define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159
|
|
||||||
#define CMS_F_CMS_RECEIPT_VERIFY 160
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168
|
|
||||||
#define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145
|
|
||||||
#define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146
|
|
||||||
#define CMS_F_CMS_SET_DETACHED 147
|
|
||||||
#define CMS_F_CMS_SIGN 148
|
|
||||||
#define CMS_F_CMS_SIGNED_DATA_INIT 149
|
|
||||||
#define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150
|
|
||||||
#define CMS_F_CMS_SIGNERINFO_SIGN 151
|
|
||||||
#define CMS_F_CMS_SIGNERINFO_VERIFY 152
|
|
||||||
#define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153
|
|
||||||
#define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154
|
|
||||||
#define CMS_F_CMS_SIGN_RECEIPT 163
|
|
||||||
#define CMS_F_CMS_STREAM 155
|
|
||||||
#define CMS_F_CMS_UNCOMPRESS 156
|
|
||||||
#define CMS_F_CMS_VERIFY 157
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define CMS_R_ADD_SIGNER_ERROR 99
|
|
||||||
#define CMS_R_CERTIFICATE_ALREADY_PRESENT 175
|
|
||||||
#define CMS_R_CERTIFICATE_HAS_NO_KEYID 160
|
|
||||||
#define CMS_R_CERTIFICATE_VERIFY_ERROR 100
|
|
||||||
#define CMS_R_CIPHER_INITIALISATION_ERROR 101
|
|
||||||
#define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102
|
|
||||||
#define CMS_R_CMS_DATAFINAL_ERROR 103
|
|
||||||
#define CMS_R_CMS_LIB 104
|
|
||||||
#define CMS_R_CONTENTIDENTIFIER_MISMATCH 170
|
|
||||||
#define CMS_R_CONTENT_NOT_FOUND 105
|
|
||||||
#define CMS_R_CONTENT_TYPE_MISMATCH 171
|
|
||||||
#define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106
|
|
||||||
#define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107
|
|
||||||
#define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108
|
|
||||||
#define CMS_R_CONTENT_VERIFY_ERROR 109
|
|
||||||
#define CMS_R_CTRL_ERROR 110
|
|
||||||
#define CMS_R_CTRL_FAILURE 111
|
|
||||||
#define CMS_R_DECRYPT_ERROR 112
|
|
||||||
#define CMS_R_DIGEST_ERROR 161
|
|
||||||
#define CMS_R_ERROR_GETTING_PUBLIC_KEY 113
|
|
||||||
#define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114
|
|
||||||
#define CMS_R_ERROR_SETTING_KEY 115
|
|
||||||
#define CMS_R_ERROR_SETTING_RECIPIENTINFO 116
|
|
||||||
#define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117
|
|
||||||
#define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176
|
|
||||||
#define CMS_R_INVALID_KEY_LENGTH 118
|
|
||||||
#define CMS_R_MD_BIO_INIT_ERROR 119
|
|
||||||
#define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120
|
|
||||||
#define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121
|
|
||||||
#define CMS_R_MSGSIGDIGEST_ERROR 172
|
|
||||||
#define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162
|
|
||||||
#define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163
|
|
||||||
#define CMS_R_NEED_ONE_SIGNER 164
|
|
||||||
#define CMS_R_NOT_A_SIGNED_RECEIPT 165
|
|
||||||
#define CMS_R_NOT_ENCRYPTED_DATA 122
|
|
||||||
#define CMS_R_NOT_KEK 123
|
|
||||||
#define CMS_R_NOT_KEY_TRANSPORT 124
|
|
||||||
#define CMS_R_NOT_PWRI 177
|
|
||||||
#define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125
|
|
||||||
#define CMS_R_NO_CIPHER 126
|
|
||||||
#define CMS_R_NO_CONTENT 127
|
|
||||||
#define CMS_R_NO_CONTENT_TYPE 173
|
|
||||||
#define CMS_R_NO_DEFAULT_DIGEST 128
|
|
||||||
#define CMS_R_NO_DIGEST_SET 129
|
|
||||||
#define CMS_R_NO_KEY 130
|
|
||||||
#define CMS_R_NO_KEY_OR_CERT 174
|
|
||||||
#define CMS_R_NO_MATCHING_DIGEST 131
|
|
||||||
#define CMS_R_NO_MATCHING_RECIPIENT 132
|
|
||||||
#define CMS_R_NO_MATCHING_SIGNATURE 166
|
|
||||||
#define CMS_R_NO_MSGSIGDIGEST 167
|
|
||||||
#define CMS_R_NO_PASSWORD 178
|
|
||||||
#define CMS_R_NO_PRIVATE_KEY 133
|
|
||||||
#define CMS_R_NO_PUBLIC_KEY 134
|
|
||||||
#define CMS_R_NO_RECEIPT_REQUEST 168
|
|
||||||
#define CMS_R_NO_SIGNERS 135
|
|
||||||
#define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136
|
|
||||||
#define CMS_R_RECEIPT_DECODE_ERROR 169
|
|
||||||
#define CMS_R_RECIPIENT_ERROR 137
|
|
||||||
#define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138
|
|
||||||
#define CMS_R_SIGNFINAL_ERROR 139
|
|
||||||
#define CMS_R_SMIME_TEXT_ERROR 140
|
|
||||||
#define CMS_R_STORE_INIT_ERROR 141
|
|
||||||
#define CMS_R_TYPE_NOT_COMPRESSED_DATA 142
|
|
||||||
#define CMS_R_TYPE_NOT_DATA 143
|
|
||||||
#define CMS_R_TYPE_NOT_DIGESTED_DATA 144
|
|
||||||
#define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145
|
|
||||||
#define CMS_R_TYPE_NOT_ENVELOPED_DATA 146
|
|
||||||
#define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147
|
|
||||||
#define CMS_R_UNKNOWN_CIPHER 148
|
|
||||||
#define CMS_R_UNKNOWN_DIGEST_ALGORIHM 149
|
|
||||||
#define CMS_R_UNKNOWN_ID 150
|
|
||||||
#define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151
|
|
||||||
#define CMS_R_UNSUPPORTED_CONTENT_TYPE 152
|
|
||||||
#define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153
|
|
||||||
#define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179
|
|
||||||
#define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154
|
|
||||||
#define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE 155
|
|
||||||
#define CMS_R_UNSUPPORTED_TYPE 156
|
|
||||||
#define CMS_R_UNWRAP_ERROR 157
|
|
||||||
#define CMS_R_UNWRAP_FAILURE 180
|
|
||||||
#define CMS_R_VERIFICATION_FAILURE 158
|
|
||||||
#define CMS_R_WRAP_ERROR 159
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,80 +0,0 @@
|
|||||||
|
|
||||||
#ifndef HEADER_COMP_H
|
|
||||||
#define HEADER_COMP_H
|
|
||||||
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct comp_ctx_st COMP_CTX;
|
|
||||||
|
|
||||||
typedef struct comp_method_st
|
|
||||||
{
|
|
||||||
int type; /* NID for compression library */
|
|
||||||
const char *name; /* A text string to identify the library */
|
|
||||||
int (*init)(COMP_CTX *ctx);
|
|
||||||
void (*finish)(COMP_CTX *ctx);
|
|
||||||
int (*compress)(COMP_CTX *ctx,
|
|
||||||
unsigned char *out, unsigned int olen,
|
|
||||||
unsigned char *in, unsigned int ilen);
|
|
||||||
int (*expand)(COMP_CTX *ctx,
|
|
||||||
unsigned char *out, unsigned int olen,
|
|
||||||
unsigned char *in, unsigned int ilen);
|
|
||||||
/* The following two do NOTHING, but are kept for backward compatibility */
|
|
||||||
long (*ctrl)(void);
|
|
||||||
long (*callback_ctrl)(void);
|
|
||||||
} COMP_METHOD;
|
|
||||||
|
|
||||||
struct comp_ctx_st
|
|
||||||
{
|
|
||||||
COMP_METHOD *meth;
|
|
||||||
unsigned long compress_in;
|
|
||||||
unsigned long compress_out;
|
|
||||||
unsigned long expand_in;
|
|
||||||
unsigned long expand_out;
|
|
||||||
|
|
||||||
CRYPTO_EX_DATA ex_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
COMP_CTX *COMP_CTX_new(COMP_METHOD *meth);
|
|
||||||
void COMP_CTX_free(COMP_CTX *ctx);
|
|
||||||
int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
|
|
||||||
unsigned char *in, int ilen);
|
|
||||||
int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
|
|
||||||
unsigned char *in, int ilen);
|
|
||||||
COMP_METHOD *COMP_rle(void );
|
|
||||||
COMP_METHOD *COMP_zlib(void );
|
|
||||||
void COMP_zlib_cleanup(void);
|
|
||||||
|
|
||||||
#ifdef HEADER_BIO_H
|
|
||||||
#ifdef ZLIB
|
|
||||||
BIO_METHOD *BIO_f_zlib(void);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
void ERR_load_COMP_strings(void);
|
|
||||||
|
|
||||||
/* Error codes for the COMP functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define COMP_F_BIO_ZLIB_FLUSH 99
|
|
||||||
#define COMP_F_BIO_ZLIB_NEW 100
|
|
||||||
#define COMP_F_BIO_ZLIB_READ 101
|
|
||||||
#define COMP_F_BIO_ZLIB_WRITE 102
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define COMP_R_ZLIB_DEFLATE_ERROR 99
|
|
||||||
#define COMP_R_ZLIB_INFLATE_ERROR 100
|
|
||||||
#define COMP_R_ZLIB_NOT_SUPPORTED 101
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,263 +0,0 @@
|
|||||||
/* crypto/conf/conf.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_CONF_H
|
|
||||||
#define HEADER_CONF_H
|
|
||||||
|
|
||||||
#include <openssl/bio.h>
|
|
||||||
#include <openssl/lhash.h>
|
|
||||||
#include <openssl/stack.h>
|
|
||||||
#include <openssl/safestack.h>
|
|
||||||
#include <openssl/e_os2.h>
|
|
||||||
|
|
||||||
#include <openssl/ossl_typ.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char *section;
|
|
||||||
char *name;
|
|
||||||
char *value;
|
|
||||||
} CONF_VALUE;
|
|
||||||
|
|
||||||
DECLARE_STACK_OF(CONF_VALUE)
|
|
||||||
DECLARE_LHASH_OF(CONF_VALUE);
|
|
||||||
|
|
||||||
struct conf_st;
|
|
||||||
struct conf_method_st;
|
|
||||||
typedef struct conf_method_st CONF_METHOD;
|
|
||||||
|
|
||||||
struct conf_method_st
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
CONF *(*create)(CONF_METHOD *meth);
|
|
||||||
int (*init)(CONF *conf);
|
|
||||||
int (*destroy)(CONF *conf);
|
|
||||||
int (*destroy_data)(CONF *conf);
|
|
||||||
int (*load_bio)(CONF *conf, BIO *bp, long *eline);
|
|
||||||
int (*dump)(const CONF *conf, BIO *bp);
|
|
||||||
int (*is_number)(const CONF *conf, char c);
|
|
||||||
int (*to_int)(const CONF *conf, char c);
|
|
||||||
int (*load)(CONF *conf, const char *name, long *eline);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Module definitions */
|
|
||||||
|
|
||||||
typedef struct conf_imodule_st CONF_IMODULE;
|
|
||||||
typedef struct conf_module_st CONF_MODULE;
|
|
||||||
|
|
||||||
DECLARE_STACK_OF(CONF_MODULE)
|
|
||||||
DECLARE_STACK_OF(CONF_IMODULE)
|
|
||||||
|
|
||||||
/* DSO module function typedefs */
|
|
||||||
typedef int conf_init_func(CONF_IMODULE *md, const CONF *cnf);
|
|
||||||
typedef void conf_finish_func(CONF_IMODULE *md);
|
|
||||||
|
|
||||||
#define CONF_MFLAGS_IGNORE_ERRORS 0x1
|
|
||||||
#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
|
|
||||||
#define CONF_MFLAGS_SILENT 0x4
|
|
||||||
#define CONF_MFLAGS_NO_DSO 0x8
|
|
||||||
#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
|
|
||||||
#define CONF_MFLAGS_DEFAULT_SECTION 0x20
|
|
||||||
|
|
||||||
int CONF_set_default_method(CONF_METHOD *meth);
|
|
||||||
void CONF_set_nconf(CONF *conf,LHASH_OF(CONF_VALUE) *hash);
|
|
||||||
LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf,const char *file,
|
|
||||||
long *eline);
|
|
||||||
#ifndef OPENSSL_NO_FP_API
|
|
||||||
LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp,
|
|
||||||
long *eline);
|
|
||||||
#endif
|
|
||||||
LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp,long *eline);
|
|
||||||
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf,
|
|
||||||
const char *section);
|
|
||||||
char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf,const char *group,
|
|
||||||
const char *name);
|
|
||||||
long CONF_get_number(LHASH_OF(CONF_VALUE) *conf,const char *group,
|
|
||||||
const char *name);
|
|
||||||
void CONF_free(LHASH_OF(CONF_VALUE) *conf);
|
|
||||||
int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out);
|
|
||||||
int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out);
|
|
||||||
|
|
||||||
void OPENSSL_config(const char *config_name);
|
|
||||||
void OPENSSL_no_config(void);
|
|
||||||
|
|
||||||
/* New conf code. The semantics are different from the functions above.
|
|
||||||
If that wasn't the case, the above functions would have been replaced */
|
|
||||||
|
|
||||||
struct conf_st
|
|
||||||
{
|
|
||||||
CONF_METHOD *meth;
|
|
||||||
void *meth_data;
|
|
||||||
LHASH_OF(CONF_VALUE) *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
CONF *NCONF_new(CONF_METHOD *meth);
|
|
||||||
CONF_METHOD *NCONF_default(void);
|
|
||||||
CONF_METHOD *NCONF_WIN32(void);
|
|
||||||
#if 0 /* Just to give you an idea of what I have in mind */
|
|
||||||
CONF_METHOD *NCONF_XML(void);
|
|
||||||
#endif
|
|
||||||
void NCONF_free(CONF *conf);
|
|
||||||
void NCONF_free_data(CONF *conf);
|
|
||||||
|
|
||||||
int NCONF_load(CONF *conf,const char *file,long *eline);
|
|
||||||
#ifndef OPENSSL_NO_FP_API
|
|
||||||
int NCONF_load_fp(CONF *conf, FILE *fp,long *eline);
|
|
||||||
#endif
|
|
||||||
int NCONF_load_bio(CONF *conf, BIO *bp,long *eline);
|
|
||||||
STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,const char *section);
|
|
||||||
char *NCONF_get_string(const CONF *conf,const char *group,const char *name);
|
|
||||||
int NCONF_get_number_e(const CONF *conf,const char *group,const char *name,
|
|
||||||
long *result);
|
|
||||||
int NCONF_dump_fp(const CONF *conf, FILE *out);
|
|
||||||
int NCONF_dump_bio(const CONF *conf, BIO *out);
|
|
||||||
|
|
||||||
#if 0 /* The following function has no error checking,
|
|
||||||
and should therefore be avoided */
|
|
||||||
long NCONF_get_number(CONF *conf,char *group,char *name);
|
|
||||||
#else
|
|
||||||
#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Module functions */
|
|
||||||
|
|
||||||
int CONF_modules_load(const CONF *cnf, const char *appname,
|
|
||||||
unsigned long flags);
|
|
||||||
int CONF_modules_load_file(const char *filename, const char *appname,
|
|
||||||
unsigned long flags);
|
|
||||||
void CONF_modules_unload(int all);
|
|
||||||
void CONF_modules_finish(void);
|
|
||||||
void CONF_modules_free(void);
|
|
||||||
int CONF_module_add(const char *name, conf_init_func *ifunc,
|
|
||||||
conf_finish_func *ffunc);
|
|
||||||
|
|
||||||
const char *CONF_imodule_get_name(const CONF_IMODULE *md);
|
|
||||||
const char *CONF_imodule_get_value(const CONF_IMODULE *md);
|
|
||||||
void *CONF_imodule_get_usr_data(const CONF_IMODULE *md);
|
|
||||||
void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data);
|
|
||||||
CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md);
|
|
||||||
unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md);
|
|
||||||
void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags);
|
|
||||||
void *CONF_module_get_usr_data(CONF_MODULE *pmod);
|
|
||||||
void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data);
|
|
||||||
|
|
||||||
char *CONF_get1_default_config_file(void);
|
|
||||||
|
|
||||||
int CONF_parse_list(const char *list, int sep, int nospc,
|
|
||||||
int (*list_cb)(const char *elem, int len, void *usr), void *arg);
|
|
||||||
|
|
||||||
void OPENSSL_load_builtin_modules(void);
|
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
|
||||||
* made after this point may be overwritten when the script is next run.
|
|
||||||
*/
|
|
||||||
void ERR_load_CONF_strings(void);
|
|
||||||
|
|
||||||
/* Error codes for the CONF functions. */
|
|
||||||
|
|
||||||
/* Function codes. */
|
|
||||||
#define CONF_F_CONF_DUMP_FP 104
|
|
||||||
#define CONF_F_CONF_LOAD 100
|
|
||||||
#define CONF_F_CONF_LOAD_BIO 102
|
|
||||||
#define CONF_F_CONF_LOAD_FP 103
|
|
||||||
#define CONF_F_CONF_MODULES_LOAD 116
|
|
||||||
#define CONF_F_CONF_PARSE_LIST 119
|
|
||||||
#define CONF_F_DEF_LOAD 120
|
|
||||||
#define CONF_F_DEF_LOAD_BIO 121
|
|
||||||
#define CONF_F_MODULE_INIT 115
|
|
||||||
#define CONF_F_MODULE_LOAD_DSO 117
|
|
||||||
#define CONF_F_MODULE_RUN 118
|
|
||||||
#define CONF_F_NCONF_DUMP_BIO 105
|
|
||||||
#define CONF_F_NCONF_DUMP_FP 106
|
|
||||||
#define CONF_F_NCONF_GET_NUMBER 107
|
|
||||||
#define CONF_F_NCONF_GET_NUMBER_E 112
|
|
||||||
#define CONF_F_NCONF_GET_SECTION 108
|
|
||||||
#define CONF_F_NCONF_GET_STRING 109
|
|
||||||
#define CONF_F_NCONF_LOAD 113
|
|
||||||
#define CONF_F_NCONF_LOAD_BIO 110
|
|
||||||
#define CONF_F_NCONF_LOAD_FP 114
|
|
||||||
#define CONF_F_NCONF_NEW 111
|
|
||||||
#define CONF_F_STR_COPY 101
|
|
||||||
|
|
||||||
/* Reason codes. */
|
|
||||||
#define CONF_R_ERROR_LOADING_DSO 110
|
|
||||||
#define CONF_R_LIST_CANNOT_BE_NULL 115
|
|
||||||
#define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100
|
|
||||||
#define CONF_R_MISSING_EQUAL_SIGN 101
|
|
||||||
#define CONF_R_MISSING_FINISH_FUNCTION 111
|
|
||||||
#define CONF_R_MISSING_INIT_FUNCTION 112
|
|
||||||
#define CONF_R_MODULE_INITIALIZATION_ERROR 109
|
|
||||||
#define CONF_R_NO_CLOSE_BRACE 102
|
|
||||||
#define CONF_R_NO_CONF 105
|
|
||||||
#define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106
|
|
||||||
#define CONF_R_NO_SECTION 107
|
|
||||||
#define CONF_R_NO_SUCH_FILE 114
|
|
||||||
#define CONF_R_NO_VALUE 108
|
|
||||||
#define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103
|
|
||||||
#define CONF_R_UNKNOWN_MODULE_NAME 113
|
|
||||||
#define CONF_R_VARIABLE_HAS_NO_VALUE 104
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
@ -1,89 +0,0 @@
|
|||||||
/* conf_api.h */
|
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This package is an SSL implementation written
|
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
|
||||||
*
|
|
||||||
* This library is free for commercial and non-commercial use as long as
|
|
||||||
* the following conditions are aheared to. The following conditions
|
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
|
||||||
* included with this distribution is covered by the same copyright terms
|
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
|
||||||
*
|
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
|
||||||
* the code are not to be removed.
|
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
|
||||||
* as the author of the parts of the library used.
|
|
||||||
* This can be in the form of a textual message at program startup or
|
|
||||||
* in documentation (online or textual) provided with the package.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. All advertising materials mentioning features or use of this software
|
|
||||||
* must display the following acknowledgement:
|
|
||||||
* "This product includes cryptographic software written by
|
|
||||||
* Eric Young (eay@cryptsoft.com)"
|
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
|
||||||
* being used are not cryptographic related :-).
|
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* The licence and distribution terms for any publically available version or
|
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
|
||||||
* copied and put under another distribution licence
|
|
||||||
* [including the GNU Public Licence.]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_CONF_API_H
|
|
||||||
#define HEADER_CONF_API_H
|
|
||||||
|
|
||||||
#include <openssl/lhash.h>
|
|
||||||
#include <openssl/conf.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Up until OpenSSL 0.9.5a, this was new_section */
|
|
||||||
CONF_VALUE *_CONF_new_section(CONF *conf, const char *section);
|
|
||||||
/* Up until OpenSSL 0.9.5a, this was get_section */
|
|
||||||
CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section);
|
|
||||||
/* Up until OpenSSL 0.9.5a, this was CONF_get_section */
|
|
||||||
STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf,
|
|
||||||
const char *section);
|
|
||||||
|
|
||||||
int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value);
|
|
||||||
char *_CONF_get_string(const CONF *conf, const char *section,
|
|
||||||
const char *name);
|
|
||||||
long _CONF_get_number(const CONF *conf, const char *section, const char *name);
|
|
||||||
|
|
||||||
int _CONF_new_data(CONF *conf);
|
|
||||||
void _CONF_free_data(CONF *conf);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue