mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
Merge branch 'master' of https://gitee.com/js-yhsec/energy_storage
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"debug":0,
|
||||
"windowEnabled": 1,
|
||||
"launchdate": "2025-09-01",
|
||||
"weburl": "http://127.0.0.1:19601/",
|
||||
"exportpath": "D:/Programs/openresty-1.27.1.1-win64/zdownload",
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
0x100F 绝缘故障 1:故障,0正常
|
||||
0x1010 漏电保护 1:故障,0正常
|
||||
0x1011 直流过压 1:故障,0正常
|
||||
0x1012 市电幅值异常 1:故障,0正常
|
||||
0x1013 市电相序异常 1:故障,0正常
|
||||
0x1014 温度开关异常 1:故障,0正常
|
||||
0x1015 市电频率异常 1:故障,0正常
|
||||
0x1016 IGBT过温 1:故障,0正常
|
||||
0x1017 交流接地故障 1:故障,0正常
|
||||
0x1018 逆变过流异常 1:故障,0正常
|
||||
0x1019 直流缓起故障 1:故障,0正常
|
||||
0x101A 直流主继电器故障 1:故障,0正常
|
||||
0x101B 风机异常 1:故障,0正常
|
||||
0x101C 主接触器异常 1:故障,0正常
|
||||
0x101D 均浮充切换超时 1:故障,0正常
|
||||
0x101E 硬件故障 1:故障,0正常
|
||||
0x101F 机内过温 1:故障,0正常
|
||||
0x1020 软启动故障 1:故障,0正常
|
||||
0x1021 触摸屏通讯故障 1:故障,0正常
|
||||
0x1022 防雷器故障 1:故障,0正常
|
||||
0x1023 急停故障 1:故障,0正常
|
||||
0x1024 BMS系统故障 1:故障,0正常
|
||||
0x1025 BMS通讯故障 1:故障,0正常
|
||||
0x1026 BMS干接点通讯故障 1:故障,0正常
|
||||
0x1027 远程通讯故障 1:故障,0正常
|
||||
0x1028 门禁告警 1:故障,0正常
|
||||
0x1029 锁相异常 1:故障,0正常
|
||||
0x102A IGBT过温告警 1:故障,0正常
|
||||
0x102B 硬件过流保护 1:故障,0正常
|
||||
0x102C 驱动故障 1:故障,0正常
|
||||
0x102D ID冲突 1:故障,0正常
|
||||
0x102E 电池过压 1:故障,0正常
|
||||
0x102F 电池欠压 1:故障,0正常
|
||||
0x1030 直流过流保护 1:故障,0正常
|
||||
0x1031 输出电压异常 1:故障,0正常
|
||||
0x1032 离网输出电压不符合 1:故障,0正常
|
||||
0x1033 输出过载保护 1:故障,0正常
|
||||
0x1034 输出短路保护 1:故障,0正常
|
||||
0x1035 并机通信异常 1:故障,0正常
|
||||
0x1036 电池保险异常 1:故障,0正常
|
||||
0x1037 电池重载低压 1:故障,0正常
|
||||
0x1038 电池低压告警 1:故障,0正常
|
||||
0x1039 一拖二压差过大 1:故障,0正常
|
||||
0x103A 电池反接故障 1:故障,0正常
|
||||
0x103B 电池电压异常 1:故障,0正常
|
||||
0x103C 过载告警 1:故障,0正常
|
||||
0x103D 外部接触器异常 1:故障,0正常
|
||||
0x103E IGBT温度传感器异常 1:故障,0正常
|
||||
0x103F 整机温度传感器异常 1:故障,0正常
|
||||
0x1040 市电CT异常 1:故障,0正常
|
||||
0x1041 逆变电流三相不平衡 1:故障,0正常
|
||||
0x1042 逆变电流直流分量异常 1:故障,0正常
|
||||
0x1043 母线不平衡 1:故障,0正常
|
||||
0x1044 逆变电压直流分量异常 1:故障,0正常
|
||||
0x1045 主接触器控制异常 1:故障,0正常
|
||||
0x1046 逆变电压控制异常 1:故障,0正常
|
||||
0x1047 直流霍尔异常 1:故障,0正常
|
||||
0x1048 电池单体过压 1:故障,0正常
|
||||
0x1049 电池单体欠压 1:故障,0正常
|
||||
0x104A 电网过压 1:故障,0正常
|
||||
0x104B 电网欠压 1:故障,0正常
|
||||
0x104C 电网过频 1:故障,0正常
|
||||
0x104D 电网欠频 1:故障,0正常
|
||||
0x104E 市电不平衡 1:故障,0正常
|
||||
0x104F 参数设置不匹配 1:故障,0正常
|
||||
0x1050 SPI通信异常 1:故障,0正常
|
||||
0x1051 SCI通信异常 1:故障,0正常
|
||||
0x1052 IIC通信异常 1:故障,0正常
|
||||
0x1053 Xintf通信异常 1:故障,0正常
|
||||
0x1054 零偏校准异常 1:故障,0正常
|
||||
0x1055 烟雾告警 1:故障,0正常
|
||||
0x1056 无电池组故障 1异常,0正常
|
||||
0x1057 环温降频 1异常,0正常
|
||||
0x1058 交流过载 1异常,0正常
|
||||
0x1059 采样异常 1异常,0正常
|
||||
0x105A 24V辅源故障 1异常,0正常
|
||||
0x105B 直流欠压异常 1异常,0正常
|
||||
0x105C 散热器过温 1异常,0正常
|
||||
0x105D CAN配置故障 1异常,0正常
|
||||
0x105E 3.3V辅源故障 1异常,0正常
|
||||
0x105F 环境过温 1异常,0正常
|
||||
0x1060 A相IGBT逆变过流 1异常,0正常
|
||||
0x1061 B相IGBT逆变过流 1异常,0正常
|
||||
0x1062 C相IGBT逆变过流 1异常,0正常
|
||||
Binary file not shown.
@@ -1,114 +0,0 @@
|
||||
所属通道号 R uint16 1~4 0xA001
|
||||
所属BCU号 R uint16 1~40 0xA002
|
||||
蓄电池充放电状态 R uint16 "0x11开路
|
||||
0x22待机
|
||||
0x33充电
|
||||
0x44放电" 0xA003
|
||||
电池组运行状态 R uint16 "0x11跳机
|
||||
0x22待机
|
||||
0x33放空
|
||||
0x44充满
|
||||
0x55预警
|
||||
0x66正常" 0xA004
|
||||
簇DO1状态 R uint16 1:断开 2:闭合 0xA005
|
||||
簇DO2状态 R uint16 1:断开 2:闭合 0xA006
|
||||
继电器总正 R uint16 0:断开 1:闭合 2:粘连 0xA007
|
||||
继电器总负 R uint16 0:断开 1:闭合 2:粘连 0xA008
|
||||
继电器预充 R uint16 0:断开 1:闭合 2:粘连 0xA009
|
||||
继电器bmu供电 R uint16 0:断开 1:闭合 2:粘连 0xA00A
|
||||
整簇总电压过高告警 R uint16 0:正常 1:告警 0xA00B
|
||||
整簇总电压过低告警 R uint16 0:正常 1:告警 0xA00C
|
||||
整簇中单体电压过高告警 R uint16 0:正常 1:告警 0xA00D
|
||||
整簇中单体电压过低告警 R uint16 0:正常 1:告警 0xA00E
|
||||
整簇中单体电压偏差过大告警 R uint16 0:正常 1:告警 0xA00F
|
||||
整簇中单体温度偏差过大告警 R uint16 0:正常 1:告警 0xA010
|
||||
整簇中单体温度过高告警 R uint16 0:正常 1:告警 0xA011
|
||||
整簇中单体温度过低告警 R uint16 0:正常 1:告警 0xA012
|
||||
整簇总充电电流过高告警 R uint16 0:正常 1:告警 0xA013
|
||||
整簇总放电电流过高告警 R uint16 0:正常 1:告警 0xA014
|
||||
整簇总SOC过高告警 R uint16 0:正常 1:告警 0xA015
|
||||
整簇总SOC过低告警 R uint16 0:正常 1:告警 0xA016
|
||||
高压盒主正接触器粘连告警 R uint16 0:正常 1:告警 0xA017
|
||||
高压盒主正接触器不能吸合告警 R uint16 0:正常 1:告警 0xA018
|
||||
高压盒主负接触器粘连告警 R uint16 0:正常 1:告警 0xA019
|
||||
高压盒主负接触器不能吸合告警 R uint16 0:正常 1:告警 0xA01A
|
||||
高压盒预充接触器粘连告警 R uint16 0:正常 1:告警 0xA01B
|
||||
高压盒预充接触器不能吸合告警 R uint16 0:正常 1:告警 0xA01C
|
||||
预充失败告警 R uint16 0:正常 1:告警 0xA01D
|
||||
BCU电压检测模块出现问题告警 R uint16 0:正常 1:告警 0xA01E
|
||||
BCU温度检测模块出现问题告警 R uint16 0:正常 1:告警 0xA01F
|
||||
BCU电流检测模块出现问题告警 R uint16 0:正常 1:告警 0xA020
|
||||
BCU绝缘检测模块出现问题告警 R uint16 0:正常 1:告警 0xA021
|
||||
高压盒内总压检测模块出现问题告警 R uint16 0:正常 1:告警 0xA022
|
||||
高压盒外总压检测模块出现问题告警 R uint16 0:正常 1:告警 0xA023
|
||||
PCS-CAN通信故障告警 R uint16 0:正常 1:告警 0xA024
|
||||
高压盒供电电压过高告警 R uint16 0:正常 1:告警 0xA025
|
||||
绝缘正极故障告警 R uint16 0:正常 1:告警 0xA026
|
||||
绝缘负极故障告警 R uint16 0:正常 1:告警 0xA027
|
||||
绝缘中间侧故障告警 R uint16 0:正常 1:告警 0xA028
|
||||
绝缘故障告警 R uint16 0:正常 1:告警 0xA029
|
||||
BMU中电压采样线开路告警 R uint16 0:正常 1:告警 0xA02A
|
||||
BMU中NTC采样线短开路告警 R uint16 0:正常 1:告警 0xA02B
|
||||
BMU中采样芯片故障告警 R uint16 0:正常 1:告警 0xA02C
|
||||
BMU中电池温度升高过快告警 R uint16 0:正常 1:告警 0xA02D
|
||||
BMU中电池内部短路告警 R uint16 0:正常 1:告警 0xA02E
|
||||
BMU充电均衡模块出现故障告警 R uint16 0:正常 1:告警 0xA02F
|
||||
BMU放电均衡模块出现故障告警 R uint16 0:正常 1:告警 0xA030
|
||||
BMU通信故障告警 R uint16 0:正常 1:告警 0xA031
|
||||
单体内阻过大告警 R uint16 0:正常 1:告警 0xA032
|
||||
单体内阻过小告警 R uint16 0:正常 1:告警 0xA033
|
||||
单体内阻阻差过大告警 R uint16 0:正常 1:告警 0xA034
|
||||
簇内阻过大告警 R uint16 0:正常 1:告警 0xA035
|
||||
簇内阻过小告警 R uint16 0:正常 1:告警 0xA036
|
||||
SOC初始化无效告警 R uint16 0:正常 1:告警 0xA037
|
||||
充电时soc降低故障告警 R uint16 0:正常 1:告警 0xA038
|
||||
放电时soc升高告警 R uint16 0:正常 1:告警 0xA039
|
||||
静止时SOC跳变告警 R uint16 0:正常 1:告警 0xA03A
|
||||
整簇总电压过高保护 R uint16 0:正常 1:保护 0xA03B
|
||||
整簇总电压过低保护 R uint16 0:正常 1:保护 0xA03C
|
||||
整簇中单体电压过高保护 R uint16 0:正常 1:保护 0xA03D
|
||||
整簇中单体电压过低保护 R uint16 0:正常 1:保护 0xA03E
|
||||
整簇中单体电压偏差过大保护 R uint16 0:正常 1:保护 0xA03F
|
||||
整簇中单体温度偏差过大保护 R uint16 0:正常 1:保护 0xA040
|
||||
整簇中单体温度过高保护 R uint16 0:正常 1:保护 0xA041
|
||||
整簇中单体温度过低保护 R uint16 0:正常 1:保护 0xA042
|
||||
整簇总充电电流过高保护 R uint16 0:正常 1:保护 0xA043
|
||||
整簇总放电电流过高保护 R uint16 0:正常 1:保护 0xA044
|
||||
整簇总SOC过高保护 R uint16 0:正常 1:保护 0xA045
|
||||
整簇总SOC过低保护 R uint16 0:正常 1:保护 0xA046
|
||||
高压盒主正接触器粘连保护 R uint16 0:正常 1:保护 0xA047
|
||||
高压盒主正接触器不能吸合保护 R uint16 0:正常 1:保护 0xA048
|
||||
高压盒主负接触器粘连保护 R uint16 0:正常 1:保护 0xA049
|
||||
高压盒主负接触器不能吸合保护 R uint16 0:正常 1:保护 0xA04A
|
||||
高压盒预充接触器粘连保护 R uint16 0:正常 1:保护 0xA04B
|
||||
高压盒预充接触器不能吸合保护 R uint16 0:正常 1:保护 0xA04C
|
||||
预充失败保护 R uint16 0:正常 1:保护 0xA04D
|
||||
BCU电压检测模块出现问题保护 R uint16 0:正常 1:保护 0xA04E
|
||||
BCU温度检测模块出现问题保护 R uint16 0:正常 1:保护 0xA04F
|
||||
BCU电流检测模块出现问题保护 R uint16 0:正常 1:保护 0xA050
|
||||
BCU绝缘检测模块出现问题保护 R uint16 0:正常 1:保护 0xA051
|
||||
高压盒内总压检测模块出现问题保护 R uint16 0:正常 1:保护 0xA052
|
||||
高压盒外总压检测模块出现问题保护 R uint16 0:正常 1:保护 0xA053
|
||||
PCS-CAN通信故障保护 R uint16 0:正常 1:保护 0xA054
|
||||
高压盒供电电压过高保护 R uint16 0:正常 1:保护 0xA055
|
||||
绝缘正极故障保护 R uint16 0:正常 1:保护 0xA056
|
||||
绝缘负极故障保护 R uint16 0:正常 1:保护 0xA057
|
||||
绝缘中间侧故障保护 R uint16 0:正常 1:保护 0xA058
|
||||
绝缘故障保护 R uint16 0:正常 1:保护 0xA059
|
||||
BMU中电压采样线开路保护 R uint16 0:正常 1:保护 0xA05A
|
||||
BMU中NTC采样线短开路保护 R uint16 0:正常 1:保护 0xA05B
|
||||
BMU中采样芯片故障保护 R uint16 0:正常 1:保护 0xA05C
|
||||
BMU中电池温度升高过快保护 R uint16 0:正常 1:保护 0xA05D
|
||||
BMU中电池内部短路保护 R uint16 0:正常 1:保护 0xA05E
|
||||
BMU充电均衡模块出现故障保护 R uint16 0:正常 1:保护 0xA05F
|
||||
BMU放电均衡模块出现故障保护 R uint16 0:正常 1:保护 0xA060
|
||||
BMU通信故障保护 R uint16 0:正常 1:保护 0xA061
|
||||
单体内阻过大保护 R uint16 0:正常 1:保护 0xA062
|
||||
单体内阻过小保护 R uint16 0:正常 1:保护 0xA063
|
||||
单体内阻阻差过大保护 R uint16 0:正常 1:保护 0xA064
|
||||
簇内阻过大保护 R uint16 0:正常 1:保护 0xA065
|
||||
簇内阻过小保护 R uint16 0:正常 1:保护 0xA066
|
||||
SOC初始化无效保护 R uint16 0:正常 1:保护 0xA067
|
||||
充电时soc降低故障保护 R uint16 0:正常 1:保护 0xA068
|
||||
放电时soc升高保护 R uint16 0:正常 1:保护 0xA069
|
||||
静止时SOC跳变保护 R uint16 0:正常 1:保护 0xA06A
|
||||
@@ -1,65 +0,0 @@
|
||||
所属通道号 R uint16 1~4 0x0001
|
||||
所属BCU号 R uint16 1~40 0x0002
|
||||
簇电压 R uint32 0.1V 0x0003
|
||||
簇电流 R int32 0.1A 0x0005
|
||||
簇温度 R int32 0.1℃ 0x0007
|
||||
簇电阻 R uint32 1mΩ 0x0009
|
||||
簇SOC R uint16 0.1 0x000B
|
||||
簇SOH R uint16 0.1 0x000C
|
||||
簇正绝缘电阻 R uint32 1kΩ 0x000D
|
||||
簇负绝缘电阻 R uint32 1kΩ 0x000F
|
||||
簇允许最大充电电流 R int32 0.1A 0x0011
|
||||
簇允许最大放电电流 R int32 0.1A 0x0013
|
||||
簇允许最大充电功率 R uint32 1kW 0x0015
|
||||
簇允许最大放电功率 R uint32 1kW 0x0017
|
||||
簇可充容量 R uint32 0.1Ah 0x0019
|
||||
簇可放容量 R uint32 0.1Ah 0x001B
|
||||
簇单次累计充容量 R uint32 0.1Ah 0x001D
|
||||
簇单次累计放容量 R uint32 0.1Ah 0x001F
|
||||
簇总累计充容量 R uint32 0.1Ah 0x0021
|
||||
簇总累计放容量 R uint32 0.1Ah 0x0023
|
||||
簇可充电量 R uint32 1kWh 0x0025
|
||||
簇可放电量 R uint32 1kWh 0x0027
|
||||
簇单次充电量 R uint32 1kWh 0x0029
|
||||
簇单次放电量 R uint32 1kWh 0x002B
|
||||
簇累计充电量 R uint32 1kWh 0x002D
|
||||
簇累计放电量 R uint32 1kWh 0x002F
|
||||
pack累计簇总压 R uint32 0.1V 0x0031
|
||||
簇与pack压差 R uint32 0.1V 0x0033
|
||||
簇与PCS压差 R uint32 0.1V 0x0035
|
||||
簇中BMU个数 R uint16 0x0037
|
||||
簇中BMU中单体个数 R uint16 0x0038
|
||||
簇中BMU中温度个数 R uint16 0x0039
|
||||
簇中单体个数 R uint16 0x003A
|
||||
簇中温度个数 R uint16 0x003B
|
||||
单体最高SOC节号 R uint16 0x003C
|
||||
单体最高SOC R uint16 0.1 0x003D
|
||||
单体最低SOC节号 R uint16 0x003E
|
||||
单体最低SOC R uint16 0.1 0x003F
|
||||
单体最高SOH节号 R uint16 0x0040
|
||||
单体最高SOH R uint16 0.1 0x0041
|
||||
单体最低SOH节号 R uint16 0x0042
|
||||
单体最低SOH R uint16 0.1 0x0043
|
||||
单体最高电压节号 R uint16 0x0044
|
||||
单体最高电压 R uint16 mV 0x0045
|
||||
单体最低电压节号 R uint16 0x0046
|
||||
单体最低电压 R uint16 mV 0x0047
|
||||
单体电压差 R uint16 mV 0x0048
|
||||
单体平均电压 R uint16 mV 0x0049
|
||||
单体最高温度节号 R uint16 0x004A
|
||||
单体最高温度 R int16 0.1℃ 0x004B
|
||||
单体最低温度节号 R uint16 0x004C
|
||||
单体最低温度 R int16 0.1℃ 0x004D
|
||||
单体温度差 R int16 0.1℃ 0x004E
|
||||
单体平均温度 R int16 0.1℃ 0x004F
|
||||
单体最高内阻节号 R uint16 0x0050
|
||||
单体最高内阻 R uint16 mΩ 0x0051
|
||||
单体最低内阻节号 R uint16 0x0052
|
||||
单体最低内阻 R uint16 mΩ 0x0053
|
||||
单体内阻差 R uint16 mΩ 0x0054
|
||||
单体平均内阻 R uint16 mΩ 0x0055
|
||||
单体SOC R uint16[1000] 0.1 0x0056~0x043D
|
||||
单体SOH R uint16[1000] 0.1 0x043E~0x0825
|
||||
单体电压 R uint16[1000] mV 0x0826~0x0C0D
|
||||
单体温度 R int16[1000] 0.01℃ 0x0C0E~0x0FF5
|
||||
单体内阻 R uint16[1000] mΩ 0x0FF6~0x13DD
|
||||
@@ -1,63 +0,0 @@
|
||||
SOC R uint16 0.1 0x0001
|
||||
SOH R uint16 0.1 0x0002
|
||||
电压 R uint32 0.1V 0x0003
|
||||
电流 R int32 0.1A 0x0005
|
||||
可充电量 R uint32 1kWh 0x0007
|
||||
可放电量 R uint32 1kWh 0x0009
|
||||
单次可充电量 R uint32 1kWh 0x000B
|
||||
单次可放电量 R uint32 1kWh 0x000D
|
||||
堆功率 R int32 1kW 0x000F
|
||||
充电量累加 R uint32 1kWh 0x0011
|
||||
放电量累加 R uint32 1kWh 0x0013
|
||||
簇最大SOC R uint16 0.1 0x0015
|
||||
簇最小SOC R uint16 0.1 0x0016
|
||||
簇最大SOC号 R uint16 0x0017
|
||||
簇最小SOC号 R uint16 0x0018
|
||||
簇SOC差值 R uint16 0.1 0x0019
|
||||
簇最大电压 R uint16 0.1V 0x001A
|
||||
簇最小电压 R uint16 0.1V 0x001B
|
||||
簇最大电压号 R uint16 0x001C
|
||||
簇最小电压号 R uint16 0x001D
|
||||
簇电压差值 R uint16 0.1V 0x001E
|
||||
单体最大电压簇号 R uint16 0x001F
|
||||
单体最大电压节号 R uint16 0x0020
|
||||
单体最大电压 R uint16 mV 0x0021
|
||||
单体最小电压簇号 R uint16 0x0022
|
||||
单体最小电压节号 R uint16 0x0023
|
||||
单体最小电压 R uint16 mV 0x0024
|
||||
单体平均电压 R uint16 mV 0x0025
|
||||
单体电压差 R uint16 mV 0x0026
|
||||
单体最大温度簇号 R uint16 0x0027
|
||||
单体最大温度节号 R uint16 0x0028
|
||||
单体最大温度 R int16 0.1℃ 0x0029
|
||||
单体最小温度簇号 R uint16 0x002A
|
||||
单体最小温度节号 R uint16 0x002B
|
||||
单体最小温度 R int16 0.1℃ 0x002C
|
||||
单体平均温度 R int16 0.1℃ 0x002D
|
||||
单体温度差 R int16 0.1℃ 0x002E
|
||||
最大内阻簇号 R uint16 0x002F
|
||||
最大内阻节号 R uint16 0x0030
|
||||
最大内阻 R uint16 mΩ 0x0031
|
||||
最小内阻簇号 R uint16 0x0032
|
||||
最小内阻节号 R uint16 0x0033
|
||||
最小内阻 R uint16 mΩ 0x0034
|
||||
单体平均内阻 R uint16 mΩ 0x0035
|
||||
单体内阻差 R uint16 mΩ 0x0036
|
||||
单体最大SOH簇号 R uint16 0x0037
|
||||
单体最大SOH节号 R uint16 0x0038
|
||||
单体最大SOH R uint16 0.10% 0x0039
|
||||
单体最小SOH簇号 R uint16 0x003A
|
||||
单体最小SOH节号 R uint16 0x003B
|
||||
单体最小SOH R uint16 0.10% 0x003C
|
||||
单体最大SOc簇号 R uint16 0x003D
|
||||
单体最大SOc节号 R uint16 0x003E
|
||||
单体最大Soc R uint16 0.10% 0x0040
|
||||
单体最小SOc簇号 R uint16 0x0041
|
||||
单体最小SOc节号 R uint16 0x0042
|
||||
单体最小SOc R uint16 0.10% 0x0043
|
||||
系统剩余最大可充电功率 R uint32 1KW 0x0043
|
||||
系统剩余最大可放电功率 R uint32 1KW 0x0045
|
||||
可充电状态 R uint16 1:可充电;0:不可充电 0x0047
|
||||
可放电状态 R uint16 1:可放电;0:不可放电 0x0048
|
||||
运行状态 R uint16 运行状态 0-正常 1-告警 2-保护 0x0049
|
||||
充放电状态 R uint16 0-待机 1-充电 2-放电 0x004A
|
||||
@@ -1,44 +0,0 @@
|
||||
BMS(电池堆)通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x2001
|
||||
BCU(电池簇)通信状态 R uint64 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~64 0x2002
|
||||
PCU(主控)通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x2006
|
||||
PCS(模块)通信状态 R uint64 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~64 0x2007
|
||||
电表总接点通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x200B
|
||||
电表通信状态 R uint32 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~32 0x200C
|
||||
消防通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x200E
|
||||
UPS通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x200F
|
||||
温湿度总接点通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x2010
|
||||
温湿度通信状态 R uint32 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~32 0x2011
|
||||
空调总接点通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x2013
|
||||
空调通信状态 R uint32 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~32 0x2014
|
||||
控制干接点(配电系统)状态 R uint16 "0:开路
|
||||
1:闭合" bit位从低到高分别对应1~16 0x2016
|
||||
状态干接点(配电系统)状态 R uint16 "0:开路
|
||||
1:闭合" bit位从低到高分别对应1~16 0x2017
|
||||
BCU总通信状态 R uint16 0:正常 1:告警 2:故障 0x2018
|
||||
PCU总通信状态 R uint16 0:正常 1:告警 2:故障 0x2019
|
||||
电表总通信状态 R uint16 0:正常 1:告警 2:故障 0x201A
|
||||
消防总通信状态 R uint16 0:正常 1:告警 2:故障 0x201B
|
||||
UPS总通信状态 R uint16 0:正常 1:告警 2:故障 0x201C
|
||||
温湿度总通信状态 R uint16 0:正常 1:告警 2:故障 0x201D
|
||||
空调总通信状态 R uint16 0:正常 1:告警 2:故障 0x201E
|
||||
EMU通信状态 R uint16 0:正常 1:告警 2:故障 0x201F
|
||||
冷机总通信状态 R uint16 0:正常 1:告警 2:故障 0x2020
|
||||
冷机总接点通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x2021
|
||||
冷机通信状态 R uint16 "0:正常
|
||||
1:故障" bit位从低到高分别对应1~16 0x2022
|
||||
预留 0x2023~0x2079
|
||||
预留
|
||||
判断总表的三相总有功 < -5.0fkW 充电 >5.0fkW放电 否则停机 R uint16 0:充电 1:放电 2:停机 储能状态 0x207A
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -1,111 +0,0 @@
|
||||
BMS(电池堆)个数 R uint16 1 0x1001
|
||||
BCU通道个数 R uint16 1~2 0x1002
|
||||
BCU(电池簇)个数 R uint16 1~40 0x1003
|
||||
PCU(主控)个数 R uint16 1~4 0x1004
|
||||
PCU通道个数 R uint16 1~4 0x1005
|
||||
PCS(模块)个数 R uint16 1~40 0x1006
|
||||
电表通道个数 R uint16 1 0x1007
|
||||
电表个数 R uint16 1~10 0x1008
|
||||
消防通道个数 R uint16 1~10 0x1009
|
||||
消防个数 R uint16 1~10 0x100A
|
||||
UPS通道个数 R uint16 1~10 0x100B
|
||||
UPS个数 R uint16 1~10 0x100C
|
||||
温湿度通道个数 R uint16 1 0x100D
|
||||
温湿度个数 R uint16 1~10 0x100E
|
||||
空调通道个数 R uint16 1 0x100F
|
||||
空调个数 R uint16 1~10 0x1010
|
||||
控制干接点(配电系统)个数 R uint16 16 0x1011
|
||||
状态干接点(配电系统)个数 R uint16 16 0x1012
|
||||
预留 0x1013~0x1071
|
||||
预留
|
||||
预留
|
||||
预留
|
||||
预留
|
||||
预留
|
||||
预留
|
||||
预留
|
||||
预留
|
||||
系统最大可充电功率 R uint32 1KW Pcu数据 0x1072
|
||||
系统最大可放电功率 R uint32 1KW 0x1074
|
||||
储能母线电压 R uint32 0.1V 堆数据 0x1076
|
||||
储能母线电流 R int32 0.1A 0x1078
|
||||
储能系统SOC R uint16 0.1 0x107A
|
||||
储能系统SOH R uint16 0.1 0x107B
|
||||
电流变比 R uint16 电表总表数据 0x107C
|
||||
电压变比 R uint16 0x107D
|
||||
A相电压 R uint32 1V 0x107E
|
||||
B相电压 R uint32 1V 0x1080
|
||||
C相电压 R uint32 1V 0x1082
|
||||
A相电流 R int32 1A 0x1084
|
||||
B相电流 R int32 1A 0x1086
|
||||
C相电流 R int32 1A 0x1088
|
||||
AB相电压 R uint32 1V 0x108A
|
||||
BC相电压 R uint32 1V 0x108C
|
||||
CA相电压 R uint32 1V 0x108E
|
||||
A相有功功率 R int32 1kW 0x1090
|
||||
B相有功功率 R int32 1kW 0x1092
|
||||
C相有功功率 R int32 1kW 0x1094
|
||||
三相总有功功率 R int32 1kW 0x1096
|
||||
当前控制功率 R int32 0.1kW 堆数据 0x1098
|
||||
负荷率 R uint32 1% 台区控制策略数据 0不拿 大于0 默认拿第一个 0x109A
|
||||
三相不平衡度 R uint32 1% 0x109C
|
||||
功率因素比率 R uint32 1% 0x109E
|
||||
进线开关柜功率 R int32 1kW 并网口电表 0x10A0
|
||||
用户关口表功率 R int32 1kW 并网口电表 0x10A2
|
||||
预留 0x10A4~0x1103
|
||||
预留
|
||||
正向总有功总需量 R int32 1kW 0x1104
|
||||
尖段电价 R uint32 1RMB 0x1106
|
||||
峰段电价 R uint32 1RMB 0x1108
|
||||
平段电价 R uint32 1RMB 0x110A
|
||||
谷段电价 R uint32 1RMB 0x110C
|
||||
日充电电量 R uint32 1kWh 0x110E
|
||||
日放电电量 R uint32 1kWh 0x1110
|
||||
日充电费用 R uint32 1RMB 0x1112
|
||||
日放电费用 R uint32 1RMB 0x1114
|
||||
日收益 R int32 1RMB 0x1116
|
||||
日正向尖有功电能 R uint32 1kWh 0x1118
|
||||
日正向峰有功电能 R uint32 1kWh 0x111A
|
||||
日正向平有功电能 R uint32 1kWh 0x111C
|
||||
日正向谷有功电能 R uint32 1kWh 0x111E
|
||||
日正向总有功电能 R uint32 1kWh 0x1120
|
||||
日反向尖有功电能 R uint32 1kWh 0x1122
|
||||
日反向峰有功电能 R uint32 1kWh 0x1124
|
||||
日反向平有功电能 R uint32 1kWh 0x1126
|
||||
日反向谷有功电能 R uint32 1kWh 0x1128
|
||||
日反向总有功电能 R uint32 1kWh 0x112A
|
||||
总充电电量 R uint32 1kWh 0x112C
|
||||
总放电电量 R uint32 1kWh 0x112E
|
||||
总充电费用 R uint32 1RMB 0x1130
|
||||
总放电费用 R uint32 1RMB 0x1132
|
||||
总收益 R int32 1RMB 0x1134
|
||||
总正向尖有功电能 R uint32 1kWh 0x1136
|
||||
总正向峰有功电能 R uint32 1kWh 0x1138
|
||||
总正向平有功电能 R uint32 1kWh 0x113A
|
||||
总正向谷有功电能 R uint32 1kWh 0x113C
|
||||
总正向总有功电能 R uint32 1kWh 0x113E
|
||||
总反向尖有功电能 R uint32 1kWh 0x1140
|
||||
总反向峰有功电能 R uint32 1kWh 0x1142
|
||||
总反向平有功电能 R uint32 1kWh 0x1144
|
||||
总反向谷有功电能 R uint32 1kWh 0x1146
|
||||
总反向总有功电能 R uint32 1kWh 0x1148
|
||||
预留 0x114A~0x11AD
|
||||
预留
|
||||
预留
|
||||
交流A相电压 R int16 1V 0x11AE
|
||||
交流B相电压 R int16 1V 0x11AF
|
||||
交流C相电压 R int16 1V 0x11B0
|
||||
交流A相频率 R int16 1Hz 0x11B1
|
||||
交流B相频率 R int16 1Hz 0x11B2
|
||||
交流C相频率 R int16 1Hz 0x11B3
|
||||
总直流功率 R int32 1kW 0x11B4
|
||||
总直流电压 R uint32 0.1V 0x11B6
|
||||
总直流电流 R int32 0.1A 0x11B8
|
||||
预留 0x11B9~0x121A
|
||||
预留
|
||||
预留
|
||||
储能系统温度 R int16 0.1℃ 堆里面单体温度最高 0x121B
|
||||
储能充放电时段hh R uint16 时 0x01 0x121C
|
||||
储能充放电时段mm R uint16 分 0x01 0x121D
|
||||
储能充放电时段ss R uint16 秒 0x01 0x121E
|
||||
储能系统各时段功率 R int16 1kW 0x01 0x121F
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
@@ -1,53 +0,0 @@
|
||||
EMS工作模式 RW uint16 - "0:无效
|
||||
1:本地控制模式, EMS不接受平台调控
|
||||
2:平台控制模式, EMS接收平台调控指令" 0x0001
|
||||
有功功率 RW int16 kW "并网恒功率模式下交流侧功率值:
|
||||
<0: 充电功率
|
||||
0: 静置
|
||||
>0: 放电功率" 0x0002
|
||||
PCS开关机 RW uint16 - "0: 关机
|
||||
1: 开机" 软件开关机 0x0003
|
||||
主控对象 RW uint16 "储能遥控对象:
|
||||
0:无效
|
||||
1:华云
|
||||
2:轻舟" 0x0004
|
||||
A相有功功率 RW int16 1kW 0x0005
|
||||
B相有功功率 RW int16 1kW 0x0006
|
||||
C相有功功率 RW int16 1kW 0x0007
|
||||
三相总有功功率 RW int16 1kW 0x0008
|
||||
A相无功功率 RW int16 1kVar 0x0009
|
||||
B相无功功率 RW int16 1kVar 0x000A
|
||||
C相无功功率 RW int16 1kVar 0x000B
|
||||
三相总无功功率 RW int16 1kVar 0x000C
|
||||
A相电流 RW int16 0.01A 在使用的时候除以100转float 0x000D
|
||||
B相电流 RW int16 0.01A 0x000E
|
||||
C相电流 RW int16 0.01A 0x000F
|
||||
A相电压 RW uint16 1V 0x0010
|
||||
B相电压 RW uint16 1V 0x0011
|
||||
C相电压 RW uint16 1V 0x0012
|
||||
A相交流功率因数 RW int16 0.01 在使用的时候除以100转float 0x0013
|
||||
B相交流功率因数 RW int16 0.01 0x0014
|
||||
C相交流功率因数 RW int16 0.01 0x0015
|
||||
A相视在功率 RW int16 1kVA 0x0016
|
||||
B相视在功率 RW int16 1kVA 0x0017
|
||||
C相视在功率 RW int16 1kVA 0x0018
|
||||
正向总有功总需量 RW int16 1kW 0x0019
|
||||
数据有效性 RW int16 0无效 1有效 0x001A
|
||||
EMS工作模式 RW uint16 - "0:无效
|
||||
1:本地控制模式, EMS不接受平台调控
|
||||
2:平台控制模式, EMS接收平台调控指令" 2413项目需求 0x001B
|
||||
有功功率 RW uint16 kW "并网恒功率模式下交流侧功率值:
|
||||
功率绝对值 没有正负" 2413项目需求 0x001C
|
||||
充放电类型 RW uint16 - "0: 关机
|
||||
1: 充电
|
||||
2:放电
|
||||
3:待机" "2413项目需求
|
||||
充放电类型" 0x001D
|
||||
最大SOC RW uint16 2413项目需求 0x001E
|
||||
最小SOC RW uint16 2413项目需求 0x001F
|
||||
自动并离网 RW uint16 "0:手动
|
||||
1:自动" "2332项目需求
|
||||
(若为自动,则通过主控进行并离网切换)" 0x0020
|
||||
并网离网 RW uint16 "0:并网
|
||||
1:离网" "2332项目需求
|
||||
(该下发参数的前提为手动模式下)" 0x0021
|
||||
@@ -1,99 +0,0 @@
|
||||
所属主控号 R uint16 1~4 0x1001
|
||||
所属PCS号 R uint16 1~40 0x1002
|
||||
故障状态 R uint16 1故障,0正常 0x1003
|
||||
告警状态 R uint16 1告警,0正常 0x1004
|
||||
设备在线 R uint16 1在线,0无效 0x1005
|
||||
禁止充电 R uint16 1禁止,0无效 0x1006
|
||||
禁止放电 R uint16 1禁止,0无效 0x1007
|
||||
运行状态 R uint16 1开机,0关机 0x1008
|
||||
充放状态 R uint16 0:待机,1:充电,2:放电,3:搁置 0x1009
|
||||
电网状态 R uint16 1离网,0并网 0x100A
|
||||
逆变供电 R uint16 0禁止,1使能 0x100B
|
||||
缓启动完成 R uint16 0禁止,1使能 0x100C
|
||||
主机标志 R uint16 0禁止,1使能 0x100D
|
||||
并离网状态 R uint16 0:并网, 1:离网 0x100E
|
||||
同步请求标志 R uint16 0:无效;1:动作 0x100F
|
||||
绝缘故障 R uint16 1:故障,0正常 0x1010
|
||||
漏电保护 R uint16 1:故障,0正常 0x1011
|
||||
直流过压 R uint16 1:故障,0正常 0x1012
|
||||
市电幅值异常 R uint16 1:故障,0正常 0x1013
|
||||
市电相序异常 R uint16 1:故障,0正常 0x1014
|
||||
温度开关异常 R uint16 1:故障,0正常 0x1015
|
||||
市电频率异常 R uint16 1:故障,0正常 0x1016
|
||||
IGBT过温 R uint16 1:故障,0正常 0x1017
|
||||
交流接地故障 R uint16 1:故障,0正常 0x1018
|
||||
逆变过流异常 R uint16 1:故障,0正常 0x1019
|
||||
直流缓起故障 R uint16 1:故障,0正常 0x101A
|
||||
直流主继电器故障 R uint16 1:故障,0正常 0x101B
|
||||
风机异常 R uint16 1:故障,0正常 0x101C
|
||||
主接触器异常 R uint16 1:故障,0正常 0x101D
|
||||
均浮充切换超时 R uint16 1:故障,0正常 0x101E
|
||||
硬件故障 R uint16 1:故障,0正常 0x101F
|
||||
机内过温 R uint16 1:故障,0正常 0x1020
|
||||
软启动故障 R uint16 1:故障,0正常 0x1021
|
||||
触摸屏通讯故障 R uint16 1:故障,0正常 0x1022
|
||||
防雷器故障 R uint16 1:故障,0正常 0x1023
|
||||
急停故障 R uint16 1:故障,0正常 0x1024
|
||||
BMS系统故障 R uint16 1:故障,0正常 0x1025
|
||||
BMS通讯故障 R uint16 1:故障,0正常 0x1026
|
||||
BMS干接点通讯故障 R uint16 1:故障,0正常 0x1027
|
||||
远程通讯故障 R uint16 1:故障,0正常 0x1028
|
||||
门禁告警 R uint16 1:故障,0正常 0x1029
|
||||
锁相异常 R uint16 1:故障,0正常 0x102A
|
||||
IGBT过温告警 R uint16 1:故障,0正常 0x102B
|
||||
硬件过流保护 R uint16 1:故障,0正常 0x102C
|
||||
驱动故障 R uint16 1:故障,0正常 0x102D
|
||||
ID冲突 R uint16 1:故障,0正常 0x102E
|
||||
电池过压 R uint16 1:故障,0正常 0x102F
|
||||
电池欠压 R uint16 1:故障,0正常 0x1030
|
||||
直流过流保护 R uint16 1:故障,0正常 0x1031
|
||||
输出电压异常 R uint16 1:故障,0正常 0x1032
|
||||
离网输出电压不符合 R uint16 1:故障,0正常 0x1033
|
||||
输出过载保护 R uint16 1:故障,0正常 0x1034
|
||||
输出短路保护 R uint16 1:故障,0正常 0x1035
|
||||
并机通信异常 R uint16 1:故障,0正常 0x1036
|
||||
电池保险异常 R uint16 1:故障,0正常 0x1037
|
||||
电池重载低压 R uint16 1:故障,0正常 0x1038
|
||||
电池低压告警 R uint16 1:故障,0正常 0x1039
|
||||
一拖二压差过大 R uint16 1:故障,0正常 0x103A
|
||||
电池反接故障 R uint16 1:故障,0正常 0x103B
|
||||
电池电压异常 R uint16 1:故障,0正常 0x103C
|
||||
过载告警 R uint16 1:故障,0正常 0x103D
|
||||
外部接触器异常 R uint16 1:故障,0正常 0x103E
|
||||
IGBT温度传感器异常 R uint16 1:故障,0正常 0x103F
|
||||
整机温度传感器异常 R uint16 1:故障,0正常 0x1040
|
||||
市电CT异常 R uint16 1:故障,0正常 0x1041
|
||||
逆变电流三相不平衡 R uint16 1:故障,0正常 0x1042
|
||||
逆变电流直流分量异常 R uint16 1:故障,0正常 0x1043
|
||||
母线不平衡 R uint16 1:故障,0正常 0x1044
|
||||
逆变电压直流分量异常 R uint16 1:故障,0正常 0x1045
|
||||
主接触器控制异常 R uint16 1:故障,0正常 0x1046
|
||||
逆变电压控制异常 R uint16 1:故障,0正常 0x1047
|
||||
直流霍尔异常 R uint16 1:故障,0正常 0x1048
|
||||
电池单体过压 R uint16 1:故障,0正常 0x1049
|
||||
电池单体欠压 R uint16 1:故障,0正常 0x104A
|
||||
电网过压 R uint16 1:故障,0正常 0x104B
|
||||
电网欠压 R uint16 1:故障,0正常 0x104C
|
||||
电网过频 R uint16 1:故障,0正常 0x104D
|
||||
电网欠频 R uint16 1:故障,0正常 0x104E
|
||||
市电不平衡 R uint16 1:故障,0正常 0x104F
|
||||
参数设置不匹配 R uint16 1:故障,0正常 0x1050
|
||||
SPI通信异常 R uint16 1:故障,0正常 0x1051
|
||||
SCI通信异常 R uint16 1:故障,0正常 0x1052
|
||||
IIC通信异常 R uint16 1:故障,0正常 0x1053
|
||||
Xintf通信异常 R uint16 1:故障,0正常 0x1054
|
||||
零偏校准异常 R uint16 1:故障,0正常 0x1055
|
||||
烟雾告警 R uint16 1:故障,0正常 0x1056
|
||||
无电池组故障 R uint16 1异常,0正常 0x1057
|
||||
环温降频 R uint16 1异常,0正常 0x1058
|
||||
交流过载 R uint16 1异常,0正常 0x1059
|
||||
采样异常 R uint16 1异常,0正常 0x105A
|
||||
24V辅源故障 R uint16 1异常,0正常 0x105B
|
||||
直流欠压异常 R uint16 1异常,0正常 0x105C
|
||||
散热器过温 R uint16 1异常,0正常 0x105D
|
||||
CAN配置故障 R uint16 1异常,0正常 0x105E
|
||||
3.3V辅源故障 R uint16 1异常,0正常 0x105F
|
||||
环境过温 R uint16 1异常,0正常 0x1060
|
||||
A相IGBT逆变过流 R uint16 1异常,0正常 0x1061
|
||||
B相IGBT逆变过流 R uint16 1异常,0正常 0x1062
|
||||
C相IGBT逆变过流 R uint16 1异常,0正常 0x1063
|
||||
@@ -1,78 +0,0 @@
|
||||
所属主控号 R uint16 1~4 0x0001
|
||||
所属PCS号 R uint16 1~40 0x0002
|
||||
总充电量 R uint32 1kWh 0x0003
|
||||
总放电量 R uint32 1kWh 0x0005
|
||||
散热器温度 R int16 1℃ 0x0007
|
||||
内部温度 R int16 1℃ 0x0008
|
||||
最大允许充电功率 R int16 0.1kW 0x0009
|
||||
最大允许放电功率 R int16 0.1kW 0x000A
|
||||
有功功率期望 R int16 1kWh 0x000B
|
||||
无功功率期望 R int16 1kVar 0x000C
|
||||
AB线电压 R int16 1V 0x000D
|
||||
BC线电压 R int16 1V 0x000E
|
||||
CA线电压 R int16 1V 0x000F
|
||||
A相电压 R int16 1V 0x0010
|
||||
B相电压 R int16 1V 0x0011
|
||||
C相电压 R int16 1V 0x0012
|
||||
A相频率 R int16 1Hz 0x0013
|
||||
B相频率 R int16 1Hz 0x0014
|
||||
C相频率 R int16 1Hz 0x0015
|
||||
A相功率因数 R int16 1 0x0016
|
||||
B相功率因数 R int16 1 0x0017
|
||||
C相功率因数 R int16 1 0x0018
|
||||
A相电流 R int16 1A 0x0019
|
||||
B相电流 R int16 1A 0x001A
|
||||
C相电流 R int16 1A 0x001B
|
||||
A相有功功率 R int16 1kW 0x001C
|
||||
B相有功功率 R int16 1kW 0x001D
|
||||
C相有功功率 R int16 1kW 0x001E
|
||||
A相无功功率 R int16 1kVar 0x001F
|
||||
B相无功功率 R int16 1kVar 0x0020
|
||||
C相无功功率 R int16 1kVar 0x0021
|
||||
A相视在功率 R int16 1kVA 0x0022
|
||||
B相视在功率 R int16 1kVA 0x0023
|
||||
C相视在功率 R int16 1kVA 0x0024
|
||||
三相总有功功率 R int16 1kW 0x0025
|
||||
三相总无功功率 R int16 1kVar 0x0026
|
||||
三相总视在功率 R int16 1kVA 0x0027
|
||||
三相总功率因数 R int16 1 0x0028
|
||||
直流功率 R int16 1kW 0x0029
|
||||
直流电压 R int16 1V 0x002A
|
||||
直流电流 R int16 1A 0x002B
|
||||
充电功率 R int16 1kW 0x002C
|
||||
放电功率 R int16 1kW 0x002D
|
||||
PF值 R int16 1 0x002E
|
||||
UV线/U相电网计量线电压 R int16 1V 0x002F
|
||||
VW线/V相电网计量线电压 R int16 1V 0x0030
|
||||
WU线/W相电网计量线电压 R int16 1V 0x0031
|
||||
U相电网计量电流 R int16 1A 0x0032
|
||||
V相电网计量电流 R int16 1A 0x0033
|
||||
W相电网计量电流 R int16 1A 0x0034
|
||||
正母线电压 R int16 1V 0x0035
|
||||
可用功率 R int16 1kVA 0x0036
|
||||
负母线电压 R int16 1V 0x0037
|
||||
A相IGBT温度 R int16 1℃ 0x0038
|
||||
B相IGBT温度 R int16 1℃ 0x0039
|
||||
C相IGBT温度 R int16 1℃ 0x003A
|
||||
逆变侧AB线电压 R int16 1V 0x003B
|
||||
逆变侧BC线电压 R int16 1V 0x003C
|
||||
逆变侧CA线电压 R int16 1V 0x003D
|
||||
逆变侧A相电压 R int16 1V 0x003E
|
||||
逆变侧B相电压 R int16 1V 0x003F
|
||||
逆变侧C相电压 R int16 1V 0x0040
|
||||
逆变侧A相电流 R int16 1A 0x0041
|
||||
逆变侧B相电流 R int16 1A 0x0042
|
||||
逆变侧C相电流 R int16 1A 0x0043
|
||||
逆变侧A相电流直流分量 R int16 1A 0x0044
|
||||
逆变侧B相电流直流分量 R int16 1A 0x0045
|
||||
逆变侧C相电流直流分量 R int16 1A 0x0046
|
||||
离网频率 R int16 1Hz 0x0047
|
||||
A相负载量 R int16 1 0x0048
|
||||
B相负载量 R int16 1 0x0049
|
||||
C相负载量 R int16 1 0x004A
|
||||
总负载量 R int16 1 0x004B
|
||||
逆变侧AB线电压直流分量 R int16 1A 0x004C
|
||||
逆变侧BC线电压直流分量 R int16 1A 0x004D
|
||||
逆变侧CA线电压直流分量 R int16 1A 0x004E
|
||||
在线数量 R int16 0x004F
|
||||
逆变数量 R int16 0x0050
|
||||
@@ -1,59 +0,0 @@
|
||||
所属通道号 R uint16 1~4 0x1001
|
||||
故障状态 R uint16 1故障,0正常 0x1002
|
||||
告警状态 R uint16 1告警,0正常 0x1003
|
||||
设备在线 R uint16 1在线,0无效 0x1004
|
||||
本地远程 R uint16 1本地,0远程 0x1005
|
||||
启停状态 R uint16 1开机,0关机 0x1006
|
||||
电网状态 R uint16 1离网,0并网 0x1007
|
||||
模块状态 R uint16 1开机,0待机 0x1008
|
||||
EPO急停 R uint16 1故障,0正常 0x1009
|
||||
防雷器异常 R uint16 1告警,0正常 0x100A
|
||||
负载电压反序 R uint16 1故障,0正常 0x100B
|
||||
市电电压反序 R uint16 1故障,0正常 0x100C
|
||||
输出相反序 R uint16 1故障,0正常 0x100D
|
||||
过载告警 R uint16 1告警,0正常 0x100E
|
||||
过载超时 R uint16 1故障,0正常 0x100F
|
||||
交流过流保护 R uint16 1故障,0正常 0x1010
|
||||
逆变电压异常 R uint16 1故障,0正常 0x1011
|
||||
内部串口异常 R uint16 1故障,0正常 0x1012
|
||||
485通信故障 R uint16 1故障,0正常 0x1013
|
||||
CAN通信故障 R uint16 1故障,0正常 0x1014
|
||||
E2PROM故障 R uint16 1故障,0正常 0x1015
|
||||
电网过压 R uint16 1故障,0正常 0x1016
|
||||
电网欠压 R uint16 1故障,0正常 0x1017
|
||||
电网过频 R uint16 1故障,0正常 0x1018
|
||||
电网欠频 R uint16 1故障,0正常 0x1019
|
||||
电网快检综合异常 R uint16 1故障,0正常 0x101A
|
||||
电网幅值快检异常 R uint16 1故障,0正常 0x101B
|
||||
电网拖尾异常 R uint16 1故障,0正常 0x101C
|
||||
消防输入信号NO R uint16 1闭合,0断开 0x101D
|
||||
急停按钮信号NC R uint16 1急停,0正常 0x101E
|
||||
避雷器NC R uint16 1故障,0正常 0x101F
|
||||
避雷器断路器NC R uint16 1故障,0正常 0x1020
|
||||
PCS总断路器NC R uint16 1闭合,0断开 0x1021
|
||||
电操状态NO R uint16 1闭合,0断开 0x1022
|
||||
远程关机NO R uint16 1开机,0无效 0x1023
|
||||
远程开机NO R uint16 1开机,0无效 0x1024
|
||||
BA故障信号NO R uint16 1故障,0正常 0x1025
|
||||
PCS_01状态 R uint16 1在线,0掉线 0x1026
|
||||
PCS_02状态 R uint16 1在线,0掉线 0x1027
|
||||
PCS_03状态 R uint16 1在线,0掉线 0x1028
|
||||
PCS_04状态 R uint16 1在线,0掉线 0x1029
|
||||
PCS_05状态 R uint16 1在线,0掉线 0x102A
|
||||
PCS_06状态 R uint16 1在线,0掉线 0x102B
|
||||
PCS_07状态 R uint16 1在线,0掉线 0x102C
|
||||
PCS_09状态 R uint16 1在线,0掉线 0x102D
|
||||
PCS_10状态 R uint16 1在线,0掉线 0x102E
|
||||
PCS_01下发设置 R uint16 1故障,0正常 0x102F
|
||||
PCS_02下发设置 R uint16 1故障,0正常 0x1030
|
||||
PCS_03下发设置 R uint16 1故障,0正常 0x1031
|
||||
PCS_04下发设置 R uint16 1故障,0正常 0x1032
|
||||
PCS_05下发设置 R uint16 1故障,0正常 0x1033
|
||||
PCS_06下发设置 R uint16 1故障,0正常 0x1034
|
||||
PCS_07下发设置 R uint16 1故障,0正常 0x1035
|
||||
PCS_08下发设置 R uint16 1故障,0正常 0x1036
|
||||
PCS_09下发设置 R uint16 1故障,0正常 0x1037
|
||||
PCS_10下发设置 R uint16 1:故障,0正常 0x1038
|
||||
内部DSP通信故障 R uint16 1:故障,0正常 0x1039
|
||||
BMS CAN通信故障 R uint16 1:故障,0正常 0x103A
|
||||
下发设置失败 R uint16 1:故障,0正常 0x103B
|
||||
@@ -1,72 +0,0 @@
|
||||
所属通道号 R uint16 1~4 0x0001
|
||||
充电功率最大许可 R uint32 1KW 0x0002
|
||||
放电功率最大许可 R uint32 1KW 0x0004
|
||||
交流日总充电量 R uint32 1KWh 0x0006
|
||||
交流日总放电量 R uint32 1KWh 0x0008
|
||||
交流总充电量 R uint32 1KWh 0x000A
|
||||
交流总放电量 R uint32 1KWh 0x000C
|
||||
有功功率期望值 R int16 1KW 0x000E
|
||||
无功功率期望值 R int16 1kVar 0x000F
|
||||
PCS侧线电压VAB R int16 1v 0x0010
|
||||
PCS侧线电压VBC R int16 1v 0x0011
|
||||
PCS侧线电压VCA R int16 1v 0x0012
|
||||
PCS侧线A相电压 R int16 1v 0x0013
|
||||
PCS侧线B相电压 R int16 1v 0x0014
|
||||
PCS侧线C相电压 R int16 1v 0x0015
|
||||
PCS侧A相频率 R int16 1Hz 0x0016
|
||||
PCS侧B相频率 R int16 1Hz 0x0017
|
||||
PCS侧C相频率 R int16 1Hz 0x0018
|
||||
PCS侧功率因数A R int16 1 0x0019
|
||||
PCS侧功率因数B R int16 1 0x001A
|
||||
PCS侧功率因数C R int16 1 0x001B
|
||||
PCS侧相电流A R int16 1A 0x001C
|
||||
PCS侧相电流B R int16 1A 0x001D
|
||||
PCS侧相电流C R int16 1A 0x001E
|
||||
PCS侧有功功率A R int16 1kW 0x001F
|
||||
PCS侧有功功率B R int16 1kW 0x0020
|
||||
PCS侧有功功率C R int16 1kW 0x0021
|
||||
PCS侧无功功率A R int16 1kVar 0x0022
|
||||
PCS侧无功功率B R int16 1kVar 0x0023
|
||||
PCS侧无功功率C R int16 1kVar 0x0024
|
||||
PCS侧视在功率A R int16 1kVar 0x0025
|
||||
PCS侧视在功率B R int16 1kVar 0x0026
|
||||
PCS侧视在功率C R int16 1kVar 0x0027
|
||||
PCS侧三相总有功功率 R int16 1kW 0x0028
|
||||
PCS侧三相总无功功率 R int16 1kVar 0x0029
|
||||
PCS侧三相总视在功率 R int16 1kVA 0x002A
|
||||
PCS侧三相总功率因数 R int16 1 0x002B
|
||||
PCU模块温度 R int16 1℃ 0x002C
|
||||
外部温度NTC1 R int16 1℃ 0x002D
|
||||
外部温度NTC2 R int16 1℃ 0x002E
|
||||
外部温度NTC3 R int16 1℃ 0x002F
|
||||
台区负载侧A相电流 R int16 1A 0x0030
|
||||
台区负载侧B相电流 R int16 1A 0x0031
|
||||
台区负载侧C相电流 R int16 1A 0x0032
|
||||
台区负载侧A相有功功率 R int16 1kW 0x0033
|
||||
台区负载侧B相有功功率 R int16 1kW 0x0034
|
||||
台区负载侧C相有功功率 R int16 1kW 0x0035
|
||||
台区负载侧总有功功率 R int16 1kW 0x0036
|
||||
台区负载侧A相无功功率 R int16 1kVar 0x0037
|
||||
台区负载侧B相无功功率 R int16 1kVar 0x0038
|
||||
台区负载侧C相无功功率 R int16 1kVar 0x0039
|
||||
台区负载侧总无功功率 R int16 1kVar 0x003A
|
||||
台区负载侧A相视在功率 R int16 1kVA 0x003B
|
||||
台区负载侧B相视在功率 R int16 1kVA 0x003C
|
||||
台区负载侧C相视在功率 R int16 1kVA 0x003D
|
||||
台区负载侧总视在功率 R int16 1kVA 0x003E
|
||||
台区负载侧A相功率因数 R int16 1 0x003F
|
||||
台区负载侧B相功率因数 R int16 1 0x0040
|
||||
台区负载侧C相功率因数 R int16 1 0x0041
|
||||
台区负载侧总功率因数 R int16 1 0x0042
|
||||
负载侧线电压AB R int16 1V 0x0043
|
||||
负载侧线电压BC R int16 1V 0x0044
|
||||
负载侧线电压CA R int16 1V 0x0045
|
||||
负载侧相电压AN R int16 1V 0x0046
|
||||
负载侧相电压BN R int16 1V 0x0047
|
||||
负载侧相电压CN R int16 1V 0x0048
|
||||
负载侧A功率因素 R int16 1 0x0049
|
||||
负载侧B功率因素 R int16 1 0x004A
|
||||
负载侧C功率因素 R int16 1 0x004B
|
||||
负载侧A视在功率 R int16 1kVA 0x004C
|
||||
负载侧B视在功率 R int16 1kVA 0x004D
|
||||
负载侧C视在功率 R int16 1kVA 0x004E
|
||||
@@ -1,14 +0,0 @@
|
||||
所属通道号 R uint16 1 0x1001
|
||||
所属冷机号 R uint16 1~10 0x1002
|
||||
开关 R uint16 0:关机,1:开机 0x1003
|
||||
采样模式 R uint16 0-出水温度 1-电芯温度 0x1004
|
||||
制冷状态 R uint16 0:关闭,1:启动 0x1005
|
||||
制热状态 R uint16 0:关闭,1:启动 0x1006
|
||||
高温告警 R uint16 0:正常,1:告警 0x1007
|
||||
低温告警 R uint16 0:正常,1:告警 0x1008
|
||||
高压告警 R uint16 0:正常,1:告警 0x1009
|
||||
低压告警 R uint16 0:正常,1:告警 0x100A
|
||||
进水温度传感器 R uint16 0:正常,1:告警 0x100B
|
||||
出水温度传感器 R uint16 0:正常,1:告警 0x100C
|
||||
进水压力传感器 R uint16 0:正常,1:告警 0x100D
|
||||
出水压力传感器 R uint16 0:正常,1:告警 0x100E
|
||||
@@ -1,21 +0,0 @@
|
||||
所属通道号 R uint16 1 0x0001
|
||||
所属冷机号 R uint16 1~10 0x0002
|
||||
制冷点 R int16 0.1℃ 0x0003
|
||||
制冷偏差 R int16 0.1℃ 0x0004
|
||||
高温告警值 R int16 0.1℃ 0x0005
|
||||
低温告警值 R int16 0.1℃ 0x0006
|
||||
制热点 R int16 0.1℃ 0x0007
|
||||
制热偏差 R int16 0.1℃ 0x0008
|
||||
电芯温度 R int16 0.1℃ 0x0009
|
||||
环境湿度 R int16 0.1℃ 0x000A
|
||||
吸气温度 R int16 0.1℃ 0x000B
|
||||
排气温度 R int16 0.1℃ 0x000C
|
||||
进水温度/供液温度 R int16 0.1℃ 0x000D
|
||||
出水温度/回液温度 R int16 0.1℃ 0x000E
|
||||
进水压力/供液压力 R int16 0.1 0x000F
|
||||
出水压力/回液压力 R int16 0.1 0x0010
|
||||
高压压力 R int16 0.1 0x0011
|
||||
低压压力 R int16 0.1 0x0012
|
||||
循环水泵转速 R int16 0x0013
|
||||
压缩机频率 R int16 0x0014
|
||||
室外风机转速 R int16 0x0015
|
||||
@@ -1,57 +0,0 @@
|
||||
所属通道号 R uint16 1 0x0001
|
||||
电表地址 R uint16[6] 0x0002~0x0007
|
||||
电表类型 R uint16 "0:储能站总表
|
||||
1:逆变前侧电表
|
||||
2:逆变后侧电表
|
||||
3:配电柜电表
|
||||
4:并网口电表" 0x0008
|
||||
电流变比 R uint16 0x0009
|
||||
电压变比 R uint16 0x000A
|
||||
A相电压 R uint32 1V 0x000B
|
||||
B相电压 R uint32 1V 0x000D
|
||||
C相电压 R uint32 1V 0x000F
|
||||
A相电流 R int32 1A 0x0011
|
||||
B相电流 R int32 1A 0x0013
|
||||
C相电流 R int32 1A 0x0015
|
||||
AB相电压 R uint32 1V 0x0017
|
||||
BC相电压 R uint32 1V 0x0019
|
||||
CA相电压 R uint32 1V 0x001B
|
||||
A相有功 R int32 1kW 0x001D
|
||||
B相有功 R int32 1kW 0x001F
|
||||
C相有功 R int32 1kW 0x0021
|
||||
三相总有功 R int32 1kW 0x0023
|
||||
正向总有功总需量 R int32 1kW 0x0025
|
||||
尖段电价 R uint32 1RMB 0x0027
|
||||
峰段电价 R uint32 1RMB 0x0029
|
||||
平段电价 R uint32 1RMB 0x002B
|
||||
谷段电价 R uint32 1RMB 0x002D
|
||||
日充电电量 R uint32 1kWh 0x002F
|
||||
日放电电量 R uint32 1kWh 0x0031
|
||||
日充电费用 R uint32 1RMB 0x0033
|
||||
日放电费用 R uint32 1RMB 0x0035
|
||||
日收益 R int32 1RMB 0x0037
|
||||
日正向尖有功电能 R uint32 1kWh 0x0039
|
||||
日正向峰有功电能 R uint32 1kWh 0x003B
|
||||
日正向平有功电能 R uint32 1kWh 0x003D
|
||||
日正向谷有功电能 R uint32 1kWh 0x003F
|
||||
日正向总有功电能 R uint32 1kWh 0x0041
|
||||
日反向尖有功电能 R uint32 1kWh 0x0043
|
||||
日反向峰有功电能 R uint32 1kWh 0x0045
|
||||
日反向平有功电能 R uint32 1kWh 0x0047
|
||||
日反向谷有功电能 R uint32 1kWh 0x0049
|
||||
日反向总有功电能 R uint32 1kWh 0x004B
|
||||
总充电电量 R uint32 1kWh 0x004D
|
||||
总放电电量 R uint32 1kWh 0x004F
|
||||
总充电费用 R uint32 1RMB 0x0051
|
||||
总放电费用 R uint32 1RMB 0x0053
|
||||
总收益 R int32 1RMB 0x0055
|
||||
总正向尖有功电能 R uint32 1kWh 0x0057
|
||||
总正向峰有功电能 R uint32 1kWh 0x0059
|
||||
总正向平有功电能 R uint32 1kWh 0x005B
|
||||
总正向谷有功电能 R uint32 1kWh 0x005D
|
||||
总正向总有功电能 R uint32 1kWh 0x005F
|
||||
总反向尖有功电能 R uint32 1kWh 0x0061
|
||||
总反向峰有功电能 R uint32 1kWh 0x0063
|
||||
总反向平有功电能 R uint32 1kWh 0x0065
|
||||
总反向谷有功电能 R uint32 1kWh 0x0067
|
||||
总反向总有功电能 R uint32 1kWh 0x0069
|
||||
@@ -1,24 +0,0 @@
|
||||
所属通道号 R uint16 1~10 0x0001
|
||||
主控数量 R uint16 1 0x0002
|
||||
主控ID R uint16 1 0x0003
|
||||
主控状态 R uint16 0:正常 1:预警 2:火警 0x0004
|
||||
主控硬件版本 R uint16[2] 主控硬件版本 0x0005~0x0006
|
||||
主控软件版本 R uint16[2] 主控软件版本 0x0007~0x0008
|
||||
主电状态 R uint16 0:使用市电 1:使用备电 0x0009
|
||||
备电电流 R uint32 0.1A 0x000A
|
||||
备电电压 R uint32 0.1V 0x000C
|
||||
可用容量 R uint32 0.01Ah 0x000E
|
||||
可充放容量 R uint32 0.01Ah 0x0010
|
||||
警铃是否使用 R uint16 0x0012
|
||||
警铃状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0013
|
||||
瓶头阀是否使用 R uint16 0x0014
|
||||
瓶头阀状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0015
|
||||
手报是否使用 R uint16 0x0016
|
||||
手报状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0017
|
||||
簇控制器数量 R uint16 0x0018
|
||||
复合探测器总数量 R uint16 0x0019
|
||||
烟雾探测器总数量 R uint16 0x001A
|
||||
压力探测器总数量 R uint16 0x001B
|
||||
吸气式探测器总数量 R uint16 0x001C
|
||||
PACK探测器总数量 R uint16 0x001D
|
||||
电池总数量 R uint16 0x001E
|
||||
@@ -1,4 +0,0 @@
|
||||
所属通道号 R uint16 1 0x0001
|
||||
所属温湿度号 R uint16 1~10 0x0002
|
||||
温度 R int16 0.1℃ 0x0003
|
||||
湿度 R int16 0.1℃ 0x0004
|
||||
@@ -1,12 +0,0 @@
|
||||
所属通道号 R uint16 1 0x1001
|
||||
所属空调号 R uint16 1~10 0x1002
|
||||
开关 R uint16 0:关机,1:开机 0x1003
|
||||
启动制冷指令 R uint16 0:关闭,1:启动 0x1004
|
||||
启动送风指令 R uint16 0:关闭,1:启动 0x1005
|
||||
启动待机指令 R uint16 0:关闭,1:启动 0x1006
|
||||
启动加热指令 R uint16 0:关闭,1:启动 0x1007
|
||||
传感器故障 R uint16 0:正常,1:告警 0x1008
|
||||
高低电压告警 R uint16 0:正常,1:告警 0x1009
|
||||
高低温告警 R uint16 0:正常,1:告警 0x100A
|
||||
高低压告警 R uint16 0:正常,1:告警 0x100B
|
||||
压缩机告警 R uint16 0:正常,1:告警 0x100C
|
||||
@@ -1,14 +0,0 @@
|
||||
所属通道号 R uint16 1 0x0001
|
||||
所属空调号 R uint16 1~10 0x0002
|
||||
制冷点 R int16 0.1℃ 0x0003
|
||||
制冷偏差 R int16 0.1℃ 0x0004
|
||||
高温告警值 R int16 0.1℃ 0x0005
|
||||
低温告警值 R int16 0.1℃ 0x0006
|
||||
制热点 R int16 0.1℃ 0x0007
|
||||
制热偏差 R int16 0.1℃ 0x0008
|
||||
当前温度 R int16 0.1℃ 0x0009
|
||||
当前湿度 R int16 0.1℃ 0x000A
|
||||
除湿开启温度 R int16 0.1℃ 0x000B
|
||||
除湿停止温度 R int16 0.1℃ 0x000C
|
||||
除湿开启湿度 R int16 0.1℃ 0x000D
|
||||
除湿停止湿度 R int16 0.1℃ 0x000E
|
||||
Binary file not shown.
@@ -71,6 +71,7 @@ include_directories(
|
||||
${THIRDPARTY_PATH}/spdlog-1.13.0/include
|
||||
${THIRDPARTY_PATH}/OpenXLSX/include
|
||||
${THIRDPARTY_PATH}/GmSSL-3.1.1/include
|
||||
${THIRDPARTY_PATH}/OpenSSL-3.5.3/include
|
||||
#${PVLIBS_PATH}/include/pvserver
|
||||
#${PVLIBS_PATH}/include/rllib
|
||||
)
|
||||
@@ -108,7 +109,7 @@ target_link_libraries(${PROJECT_NAME}
|
||||
${THIRDPARTY_PATH}/paho_mqtt/lib/paho-mqtt3c.lib
|
||||
${THIRDPARTY_PATH}/OpenXLSX/lib/OpenXLSX.lib
|
||||
${THIRDPARTY_PATH}/GmSSL-3.1.1/lib/gmssl.lib
|
||||
${THIRDPARTY_PATH}/OpenSSL-3.5.3/lib/VC/x64/MD/libcrypto.lib
|
||||
#${PVLIBS_PATH}/x64/serverlib.lib
|
||||
#${PVLIBS_PATH}/x64/rllib.lib
|
||||
|
||||
)
|
||||
@@ -115,7 +115,7 @@ void Application::runThreadStat()
|
||||
while (!isQuit)
|
||||
{
|
||||
static TimeTick ttStat(1);
|
||||
if(ttStat.elapse(10))
|
||||
if(Config::option.stat.enabled && ttStat.elapse(Config::option.stat.interval))
|
||||
{
|
||||
// 设备历史数据(电压、电流、功率),存储到 history_day
|
||||
// 统计数据,存储到 stat_day
|
||||
|
||||
@@ -24,6 +24,7 @@ bool Config::init(std::string filename)
|
||||
JSON::read(jsonroot, "weburl", option.webSrvUrl);
|
||||
JSON::read(jsonroot, "launchdate", option.lunchDate);
|
||||
JSON::read(jsonroot, "exportpath", option.exportpath);
|
||||
JSON::read(jsonroot, "windowEnabled", option.windowEnabled);
|
||||
|
||||
if (jsonroot.contains("database"))
|
||||
{
|
||||
@@ -110,6 +111,14 @@ bool Config::init(std::string filename)
|
||||
JSON::read(jsonItem, "enabled", info.enabled);
|
||||
}
|
||||
}
|
||||
|
||||
if (jsonroot.contains("statistics"))
|
||||
{
|
||||
njson& json = jsonroot["statistics"];
|
||||
JSON::read(json, "enabled", option.stat.enabled);
|
||||
JSON::read(json, "interval", option.stat.interval);
|
||||
if (option.stat.interval <= 0) { option.stat.interval = 60; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,12 @@ struct AppOption
|
||||
|
||||
std::map<std::string, VideoInfo> mapVideo;
|
||||
|
||||
int windowEnabled {0};
|
||||
|
||||
struct {
|
||||
int enabled {0};
|
||||
int interval {60};
|
||||
} stat;
|
||||
};
|
||||
|
||||
class Config
|
||||
|
||||
@@ -2,18 +2,8 @@
|
||||
#include "common/JsonN.h"
|
||||
#include "common/Utils.h"
|
||||
|
||||
std::string REGAddrOffset(std::string addr, int offset)
|
||||
{
|
||||
unsigned int val;
|
||||
std::stringstream ss;
|
||||
ss << std::hex << addr;
|
||||
ss >> val;
|
||||
return Utils::toHexStr(val + offset);
|
||||
}
|
||||
|
||||
std::map<std::string, std::map<std::string, RegAddrUnit>> REGAddr::s_mapReg;
|
||||
|
||||
|
||||
void REGAddr::load(std::string filename)
|
||||
{
|
||||
njson json;
|
||||
|
||||
@@ -32,7 +32,7 @@ enum class EDeviceType
|
||||
PCU = 103, //103 PCU 1
|
||||
BMS = 104, //104 BMS 1
|
||||
BCU = 105, //105 BCU 1
|
||||
//106 充电桩 2
|
||||
CHARGER = 106, //106 充电桩 2
|
||||
//107 充电枪 2
|
||||
//108 集中器 2
|
||||
//109 光伏板 3
|
||||
|
||||
@@ -241,16 +241,16 @@ bool Device::cache(int npos)
|
||||
if (iter != s_mapDeviceAddrCurve.end())
|
||||
{
|
||||
auto& vecAddr = iter->second;
|
||||
auto size = addrV.size();
|
||||
auto size = vecAddr.size();
|
||||
if (size >= 1) { addrV = vecAddr[0]; }
|
||||
else if (size >= 2) { addrI = vecAddr[1]; }
|
||||
else if (size >= 3) { addrP = vecAddr[2]; }
|
||||
if (size >= 2) { addrI = vecAddr[1]; }
|
||||
if (size >= 3) { addrP = vecAddr[2]; }
|
||||
}
|
||||
|
||||
// 根据设备类型从参数(寄存器地址)中读取实时数据进行保存
|
||||
int U = Utils::toInt(this->getParam(addrV, "0"));
|
||||
int I = Utils::toInt(this->getParam(addrI, "0"));
|
||||
int P = addrP.empty() ? U*I : Utils::toInt(this->getParam(addrP, "0"));
|
||||
int P = addrP.empty() ? U*I*0.001 : Utils::toInt(this->getParam(addrP, "0"));
|
||||
mapCacheVoltage[npos] = U;
|
||||
mapCacheCurrent[npos] = I;
|
||||
mapCachePower[npos] = P;
|
||||
@@ -299,33 +299,33 @@ void Device::setParam(std::string k, int v)
|
||||
{
|
||||
running = 1;
|
||||
}
|
||||
else if (type == 101) // EMS
|
||||
else if (type == int(EDeviceType::EMS)) // 101 EMS
|
||||
{
|
||||
running = 1;
|
||||
}
|
||||
else if (type == 102) // PCS
|
||||
else if (type == int(EDeviceType::PCS)) // 102 PCS
|
||||
{
|
||||
if (k == "0x1003") err = v; // 故障状态 R uint16 1故障,0正常 0 0x1003
|
||||
else if (k == "0x1005") online = v; // 设备在线 R uint16 1在线,0无效 1 0x1005
|
||||
else if (k == "0x1009") running = (v==1 || v==2); //充放状态 R uint16 0:待机, 1:充电, 2:放电, 3:搁置 0 0x1009
|
||||
}
|
||||
else if (type == 103) // PCU
|
||||
else if (type == int(EDeviceType::PCU)) // 103 PCU
|
||||
{
|
||||
if (k == "0x1002") err = v; //故障状态 R uint16 1故障,0正常 0 0x1002
|
||||
else if (k == "0x1004") online = v; //设备在线 R uint16 1在线,0无效 1 0x1004
|
||||
else if (k == "0x1006") running = v; //启停状态 R uint16 1开机,0关机 1 0x1006
|
||||
}
|
||||
else if (type == 104) // BMS
|
||||
else if (type == int(EDeviceType::BMS)) // 104 BMS
|
||||
{
|
||||
if (k == "0x004A") { err = (v==1); } //运行状态 R uint16 0 运行状态 0-正常 1-告警 2-保护 0x004A
|
||||
else if (k == "0x004B") running = (v==1 || v==2); //充放电状态 R uint16 0 0-待机 1-充电 2-放电 0x004B
|
||||
if (k == "0x0049") { err = (v==1); } //运行状态 R uint16 0 运行状态 0-正常 1-告警 2-保护 0x0049
|
||||
else if (k == "0x004A") { running = (v==1 || v==2); } //充放电状态 R uint16 0 0-待机 1-充电 2-放电 0x004A
|
||||
}
|
||||
else if (type == int(EDeviceType::BCU)) // BCU
|
||||
{
|
||||
if (k == "0xA003") { running = (v==0x33 || v==0x44); } //蓄电池充放电状态 R uint16 "0x11开路,0x22待机,0x33充电,0x44放电" 34 0xA003
|
||||
else if (k == "0xA004") { err = (v==0x55); } //电池组运行状态 R uint16 "0x11跳机,0x22待机,0x33放空,0x44充满,0x55预警,0x66正常" 102 0xA004
|
||||
}
|
||||
else if (type == 106) // 充电桩
|
||||
else if (type == int(EDeviceType::CHARGER)) // 106 充电桩
|
||||
{
|
||||
if (k == "21") {
|
||||
running = (mapParams["11"] == "充电" || mapParams["21"] == "充电"); // 充电状态: 0:空闲,1:充电
|
||||
|
||||
@@ -205,16 +205,23 @@ void Station::checkDevice()
|
||||
}
|
||||
}
|
||||
|
||||
void Station::readAlert(std::shared_ptr<Device> device, int v, std::string text)
|
||||
void Station::readAlert(std::shared_ptr<Device> device, std::string addr, int v, std::string text)
|
||||
{
|
||||
Fields fields;
|
||||
fields.set("log_id", Snowflake::instance().getIdStr());
|
||||
if (device) { fields.set("device_id", device->deviceId); }
|
||||
fields.set("type", int(EAlertType::DEVICE));
|
||||
fields.set("context", text + ":故障(" + std::to_string(v) + ")");
|
||||
fields.set("status", 1);
|
||||
auto dao = DaoEntity::create("log_alert");
|
||||
dao->insertFields(fields);
|
||||
int64_t ts = Utils::time();
|
||||
std::string alertId = std::to_string(device->deviceId) + "_" + addr;
|
||||
int tsCache = mapAlertCache[alertId];
|
||||
if (ts - tsCache > 60*5)
|
||||
{
|
||||
Fields fields;
|
||||
fields.set("log_id", Snowflake::instance().getIdStr());
|
||||
if (device) { fields.set("device_id", device->deviceId); }
|
||||
fields.set("type", int(EAlertType::DEVICE));
|
||||
fields.set("content", text + ":故障(" + std::to_string(v) + ")");
|
||||
fields.set("status", 1);
|
||||
auto dao = DaoEntity::create("log_alert");
|
||||
dao->insertFields(fields);
|
||||
mapAlertCache[alertId] = ts;
|
||||
}
|
||||
}
|
||||
|
||||
void Station::readRuntimeData(int deviceNo, string addr, int val)
|
||||
@@ -360,12 +367,13 @@ void Station::writeStatistic()
|
||||
std::string dt = Utils::dateStr();
|
||||
int64_t tTime = Utils::time();
|
||||
int64_t tDate = Utils::date();
|
||||
int64_t tDelta = tTime - tDate;
|
||||
int npos = (tTime-tDate) / 600;
|
||||
|
||||
for (auto iter = mapDevice.begin(); iter!=mapDevice.end(); ++iter)
|
||||
{
|
||||
auto device = iter->second;
|
||||
if (device->cache(npos))
|
||||
if (device->cache(npos) && device->type == int(EDeviceType::BMS))
|
||||
{
|
||||
Fields fields;
|
||||
fields.set("dt", dt);
|
||||
@@ -391,7 +399,6 @@ void Station::writeStatistic()
|
||||
Fields fields;
|
||||
fields.set("dt", Utils::dateStr(statData.ts));
|
||||
fields.set("station_id", this->stationId);
|
||||
fields.set("category", 1);
|
||||
fields.set("device_id", 0);
|
||||
fields.set("elect_in", statData.dayElectIn);
|
||||
fields.set("elect_out", statData.dayElectOut);
|
||||
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
void setGarewayWorkMode();
|
||||
void checkDevice();
|
||||
|
||||
void readAlert(std::shared_ptr<Device> device, int v, std::string text);
|
||||
void readAlert(std::shared_ptr<Device> device, std::string addr, int v, std::string text);
|
||||
void readRuntimeData(int deviceNo, string addr, int val);
|
||||
void readTHData(int deviceNo, string addr, int val);
|
||||
void readFire40Data(int deviceNo, string addr, int val);
|
||||
@@ -123,6 +123,7 @@ public:
|
||||
void readGatewayStatus(int cdzStatus, int emuStatus);
|
||||
|
||||
void writeStatistic();
|
||||
int posDayStat {0};
|
||||
|
||||
public:
|
||||
int stationId {};
|
||||
@@ -244,4 +245,6 @@ public:
|
||||
|
||||
int cdzStatus {-1};
|
||||
int emuStatus {-1};
|
||||
|
||||
std::map<std::string, int64_t> mapAlertCache;
|
||||
};
|
||||
@@ -150,6 +150,79 @@ string Crypto::md5(string src)
|
||||
return md5_format(tempA) + md5_format(tempB) + md5_format(tempC) + md5_format(tempD);
|
||||
}
|
||||
|
||||
#include "common/Utils.h"
|
||||
|
||||
static std::vector<uint8_t> hexToByte(const std::string& hexstr)
|
||||
{
|
||||
std::vector<uint8_t> v;
|
||||
v.reserve(hexstr.size() / 2);
|
||||
for (std::string::const_iterator it = hexstr.begin(); it != hexstr.end(); it += 2)
|
||||
{
|
||||
v.push_back(static_cast<char>(strtol(std::string(it, it + 2).c_str(), nullptr, 16)));
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
std::string Crypto::gmssl_sm2Encrypt(std::string pubKeyHex, std::string priKeyHex, std::string plainByte)
|
||||
{
|
||||
std::vector<uint8_t> pub_key = hexToByte(pubKeyHex);
|
||||
|
||||
std::vector<uint8_t> pri_keyBuf = hexToByte(priKeyHex);
|
||||
sm2_z256_t pri_key {0};
|
||||
sm2_z256_from_bytes(pri_key, pri_keyBuf.data());
|
||||
|
||||
SM2_KEY sm2k;
|
||||
sm2_key_set_public_key(&sm2k, (SM2_Z256_POINT*)pub_key.data()); // +1 跳过 0x04 标记
|
||||
sm2_key_set_private_key(&sm2k, pri_key);
|
||||
sm2_key_print(stderr, 0, 4, "SM2_KEY", &sm2k);
|
||||
|
||||
//std::vector<uint8_t> plainText(plainByte.begin(), plainByte.end());
|
||||
std::vector<uint8_t> ciphertext(SM2_MAX_CIPHERTEXT_SIZE);
|
||||
size_t ciphertext_len = 0;
|
||||
|
||||
int ret = sm2_encrypt(&sm2k, (const uint8_t*)plainByte.data(), plainByte.size(), ciphertext.data(), &ciphertext_len);
|
||||
return std::string(ciphertext.begin(), ciphertext.begin()+ciphertext_len);
|
||||
}
|
||||
|
||||
|
||||
std::string Crypto::gmssl_sm2Decrypt(std::string pubKeyHex, std::string priKeyHex, std::string cipherByte)
|
||||
{
|
||||
std::vector<uint8_t> pub_key = hexToByte(pubKeyHex);
|
||||
|
||||
std::vector<uint8_t> pri_keyBuf = hexToByte(priKeyHex);
|
||||
sm2_z256_t pri_key {0};
|
||||
sm2_z256_from_bytes(pri_key, pri_keyBuf.data());
|
||||
|
||||
SM2_KEY sm2k;
|
||||
sm2_key_set_public_key(&sm2k, (SM2_Z256_POINT*)pub_key.data()); // +1 跳过 0x04 标记
|
||||
sm2_key_set_private_key(&sm2k, pri_key);
|
||||
sm2_key_print(stderr, 0, 4, "SM2_KEY", &sm2k);
|
||||
|
||||
//std::string ciphertHex = "44d37f6c644f22508b5387663e3a174384917eba7ce3b2a5bb9f79e191d40dfc6c0cfaf1819af562c1ee1bffcc55d2fb1da8114527e3a6993aaadda12a26b4b6f688ecd5d7700c8bd82a069ab4b30e0b499eef82d1dfeea261d2fd19d1f0ae95a4b3fd";
|
||||
//Utils::toHex(ciphertext, ciphertext_len);
|
||||
//std::vector<uint8_t> buf = hexToByte(ciphertHex);
|
||||
std::vector<uint8_t> plainText(SM2_MAX_PLAINTEXT_SIZE);
|
||||
size_t len = 0;
|
||||
int ret = sm2_decrypt(&sm2k, (const uint8_t*)cipherByte.data(), cipherByte.size(), plainText.data(), &len);
|
||||
return std::string(plainText.begin(), plainText.begin() + len);
|
||||
}
|
||||
|
||||
|
||||
string Crypto::sm3(std::string data)
|
||||
{
|
||||
SM3_CTX ctx;
|
||||
sm3_init(&ctx);
|
||||
sm3_update(&ctx, (const unsigned char*)data.data(), data.length());
|
||||
std::vector<unsigned char> digest(SM3_DIGEST_SIZE);
|
||||
sm3_finish(&ctx, digest.data());
|
||||
std::stringstream ss;
|
||||
for (int i = 0; i < digest.size(); ++i)
|
||||
{
|
||||
ss << std::hex << std::setw(2) << std::setfill('0') << (int)digest[i];
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
std::vector<uint8_t> Crypto::sm4EcbEncrypt(const std::vector<uint8_t>& key, const std::vector<uint8_t>& plaintext)
|
||||
{
|
||||
SM4_KEY sm4_key;
|
||||
@@ -172,4 +245,175 @@ std::vector<uint8_t> Crypto::sm4EcbDecrypt(const std::vector<uint8_t>& key, cons
|
||||
sm4_encrypt(&sm4_key, &ciphertext[i], &plaintext[i]); // 注意解密时也是用sm4_encrypt函数,但密钥是解密密钥
|
||||
}
|
||||
return plaintext;
|
||||
}
|
||||
|
||||
|
||||
// 错误处理函数
|
||||
static void HandleOpensslError()
|
||||
{
|
||||
ERR_print_errors_fp(stderr);
|
||||
unsigned long err = ERR_get_error();
|
||||
}
|
||||
|
||||
// SM2 加密函数
|
||||
std::string Crypto::ssl_sm2Encrypt(const std::string& public_key_hex, const std::string& plaintext)
|
||||
{
|
||||
EVP_PKEY* pubkey = Crypto::create_sm2_public_key_from_hex(public_key_hex);
|
||||
|
||||
EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(pubkey, NULL);
|
||||
if (!ctx) HandleOpensslError();
|
||||
|
||||
if (EVP_PKEY_encrypt_init(ctx) <= 0) HandleOpensslError();
|
||||
|
||||
// 获取加密后数据的长度
|
||||
size_t ciphertext_len;
|
||||
if (EVP_PKEY_encrypt(ctx, NULL, &ciphertext_len, (const uint8_t*)plaintext.data(), plaintext.size()) <= 0) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 执行加密
|
||||
std::vector<unsigned char> ciphertext(ciphertext_len);
|
||||
if (EVP_PKEY_encrypt(ctx, ciphertext.data(), &ciphertext_len, (const uint8_t*)plaintext.data(), plaintext.size()) <= 0) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 清理资源
|
||||
EVP_PKEY_CTX_free(ctx);
|
||||
EVP_PKEY_free(pubkey);
|
||||
// 清理 OpenSSL
|
||||
EVP_cleanup();
|
||||
ERR_free_strings();
|
||||
|
||||
return std::string(ciphertext.begin(), ciphertext.begin() + ciphertext_len);
|
||||
}
|
||||
|
||||
// SM2 解密函数
|
||||
std::string Crypto::ssl_sm2Decrypt(const std::string& private_key_hex, const std::string& ciphertext)
|
||||
{
|
||||
EVP_PKEY* privkey = Crypto::create_sm2_private_key_from_hex(private_key_hex);
|
||||
EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(privkey, NULL);
|
||||
if (!ctx) HandleOpensslError();
|
||||
|
||||
if (EVP_PKEY_decrypt_init(ctx) <= 0) HandleOpensslError();
|
||||
|
||||
// 获取解密后数据的长度
|
||||
size_t plaintext_len;
|
||||
if (EVP_PKEY_decrypt(ctx, NULL, &plaintext_len, (const uint8_t*)ciphertext.data(), ciphertext.size()) <= 0) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 执行解密
|
||||
std::vector<unsigned char> plaintext(plaintext_len);
|
||||
if (EVP_PKEY_decrypt(ctx, plaintext.data(), &plaintext_len, (const uint8_t*)ciphertext.data(), ciphertext.size()) <= 0) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
EVP_PKEY_CTX_free(ctx);
|
||||
EVP_PKEY_free(privkey);
|
||||
|
||||
// 清理 OpenSSL
|
||||
EVP_cleanup();
|
||||
ERR_free_strings();
|
||||
|
||||
return std::string(plaintext.begin(), plaintext.begin() + plaintext_len);
|
||||
}
|
||||
|
||||
// 将16进制字符串转换为字节数组
|
||||
static std::vector<unsigned char> hexToBytes(const std::string& hex) {
|
||||
std::vector<unsigned char> bytes;
|
||||
for (size_t i = 0; i < hex.length(); i += 2)
|
||||
{
|
||||
std::string byteString = hex.substr(i, 2);
|
||||
unsigned char byte = static_cast<unsigned char>(strtol(byteString.c_str(), NULL, 16));
|
||||
bytes.push_back(byte);
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
// 从16进制字符串创建SM2私钥
|
||||
EVP_PKEY* Crypto::create_sm2_private_key_from_hex(const std::string& private_key_hex)
|
||||
{
|
||||
// 将16进制私钥转换为字节
|
||||
std::vector<unsigned char> private_key_bytes = hexToBytes(private_key_hex);
|
||||
|
||||
// 创建BIGNUM
|
||||
BIGNUM* privBN = BN_bin2bn(private_key_bytes.data(), private_key_bytes.size(), NULL);
|
||||
if (!privBN) HandleOpensslError();
|
||||
|
||||
// 创建EC_KEY并设置曲线和私钥
|
||||
EC_KEY* ecKey = EC_KEY_new_by_curve_name(NID_sm2);
|
||||
if (!ecKey) HandleOpensslError();
|
||||
|
||||
if (!EC_KEY_set_private_key(ecKey, privBN)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 计算公钥
|
||||
const EC_GROUP* group = EC_KEY_get0_group(ecKey);
|
||||
EC_POINT* pub_point = EC_POINT_new(group);
|
||||
if (!pub_point) HandleOpensslError();
|
||||
|
||||
if (!EC_POINT_mul(group, pub_point, privBN, NULL, NULL, NULL)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_public_key(ecKey, pub_point)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 创建EVP_PKEY
|
||||
EVP_PKEY* pkey = EVP_PKEY_new();
|
||||
if (!pkey) HandleOpensslError();
|
||||
|
||||
if (!EVP_PKEY_set1_EC_KEY(pkey, ecKey)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 清理资源
|
||||
BN_free(privBN);
|
||||
EC_POINT_free(pub_point);
|
||||
EC_KEY_free(ecKey);
|
||||
|
||||
return pkey;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 从16进制字符串创建SM2公钥
|
||||
EVP_PKEY* Crypto::create_sm2_public_key_from_hex(const std::string& public_key_hex)
|
||||
{
|
||||
// 将16进制公钥转换为字节
|
||||
std::vector<unsigned char> public_key_bytes = hexToBytes(public_key_hex);
|
||||
|
||||
// 创建EC_KEY
|
||||
EC_KEY* ec_key = EC_KEY_new_by_curve_name(NID_sm2);
|
||||
if (!ec_key) HandleOpensslError();
|
||||
|
||||
// 从字节创建公钥点
|
||||
const EC_GROUP* group = EC_KEY_get0_group(ec_key);
|
||||
EC_POINT* pub_point = EC_POINT_new(group);
|
||||
if (!pub_point) HandleOpensslError();
|
||||
|
||||
if (!EC_POINT_oct2point(group, pub_point, public_key_bytes.data(), public_key_bytes.size(), NULL)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_public_key(ec_key, pub_point)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 创建EVP_PKEY
|
||||
EVP_PKEY* pkey = EVP_PKEY_new();
|
||||
if (!pkey) HandleOpensslError();
|
||||
|
||||
if (!EVP_PKEY_set1_EC_KEY(pkey, ec_key)) {
|
||||
HandleOpensslError();
|
||||
}
|
||||
|
||||
// 清理资源
|
||||
EC_POINT_free(pub_point);
|
||||
EC_KEY_free(ec_key);
|
||||
|
||||
return pkey;
|
||||
}
|
||||
@@ -1,14 +1,29 @@
|
||||
#ifndef _Crypto_H_
|
||||
#define _Crypto_H_
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
|
||||
#include <gmssl/sm2.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#include <gmssl/sm4.h>
|
||||
#include <gmssl/hex.h>
|
||||
#include <gmssl/sm2.h>
|
||||
#include <gmssl/asn1.h>
|
||||
#include <gmssl/rand.h>
|
||||
#include <gmssl/error.h>
|
||||
#include <gmssl/pkcs8.h>
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/ec.h>
|
||||
#include <openssl/pem.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/bn.h>
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -16,7 +31,14 @@ using namespace std;
|
||||
class Crypto
|
||||
{
|
||||
public:
|
||||
static string md5(string src);
|
||||
static string md5(string data);
|
||||
|
||||
static string sm3(std::string data);
|
||||
|
||||
|
||||
static std::string gmssl_sm2Encrypt(std::string pubKeyHex, std::string priKeyHex, std::string plain);
|
||||
static std::string gmssl_sm2Decrypt(std::string pubKeyHex, std::string priKeyHex, std::string cipher);
|
||||
|
||||
|
||||
/**
|
||||
* @brief SM4-ECB 加密示例
|
||||
@@ -33,6 +55,13 @@ public:
|
||||
* @return 明文字节向量
|
||||
*/
|
||||
static std::vector<uint8_t> sm4EcbDecrypt(const std::vector<uint8_t>& key, const std::vector<uint8_t>& ciphertext);
|
||||
|
||||
|
||||
static std::string ssl_sm2Encrypt(const std::string& public_key_hex, const std::string& plaintext);
|
||||
static std::string ssl_sm2Decrypt(const std::string& private_key_hex, const std::string& ciphertext);
|
||||
|
||||
static EVP_PKEY* create_sm2_private_key_from_hex(const std::string& private_key_hex);
|
||||
static EVP_PKEY* create_sm2_public_key_from_hex(const std::string& public_key_hex);
|
||||
};
|
||||
|
||||
#endif // ! _Crypto_H_
|
||||
@@ -6,6 +6,36 @@
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
|
||||
std::string Utils::toHex(std::vector<unsigned char>& s, int len/*=0*/)
|
||||
{
|
||||
if (len == 0) len = s.size();
|
||||
std::stringstream ss;
|
||||
for (int i = 0; i < len; ++i)
|
||||
{
|
||||
ss << std::hex << std::setw(2) << std::setfill('0') << (int)s[i];
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
std::string Utils::toHex(const std::string& s)
|
||||
{
|
||||
std::stringstream ss;
|
||||
for (int i = 0; i < s.size(); ++i)
|
||||
{
|
||||
ss << std::hex << std::setw(2) << std::setfill('0') << (int)static_cast<unsigned char>(s[i]);
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
std::string Utils::fromHex(const std::string& hexstr)
|
||||
{
|
||||
std::vector<uint8_t> v;
|
||||
v.reserve(hexstr.size() / 2);
|
||||
for (std::string::const_iterator it = hexstr.begin(); it != hexstr.end(); it += 2)
|
||||
{
|
||||
v.push_back(static_cast<char>(strtol(std::string(it, it + 2).c_str(), nullptr, 16)));
|
||||
}
|
||||
return std::string(v.begin(), v.end());
|
||||
}
|
||||
|
||||
string Utils::toStr(int v)
|
||||
{
|
||||
return std::to_string(v);
|
||||
@@ -499,9 +529,3 @@ std::string Utils::readFile(std::string filename)
|
||||
}
|
||||
|
||||
|
||||
std::string Utils::toHexStr(int64_t val)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "0x" << std::uppercase << setw(4) << setfill('0') << std::hex << val;
|
||||
return ss.str();
|
||||
}
|
||||
@@ -16,6 +16,10 @@ using namespace std;
|
||||
class Utils
|
||||
{
|
||||
public:
|
||||
static std::string toHex(std::vector<unsigned char>& s, int len = 0);
|
||||
static std::string toHex(const std::string& s);
|
||||
static std::string fromHex(const std::string& hexstr);
|
||||
|
||||
static string toStr(int v);
|
||||
static string toStr(float v, int precision = 2);
|
||||
static string toStr(double v, int precision = 2);
|
||||
@@ -85,8 +89,6 @@ public:
|
||||
static void split(string buf, string c, vector<string>& res);
|
||||
|
||||
static std::string readFile(std::string filename);
|
||||
|
||||
static std::string toHexStr(int64_t val);
|
||||
};
|
||||
|
||||
class TimeTick
|
||||
|
||||
258
src/main.cpp
258
src/main.cpp
@@ -1,130 +1,179 @@
|
||||
#include <Windows.h>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QtWebEngineWidgets/QtWebEngineWidgets>
|
||||
#include <filesystem>
|
||||
|
||||
#include "common/Utils.h"
|
||||
#include "common/Snowflake.h"
|
||||
#include "common/JsonN.h"
|
||||
|
||||
#include "app/Application.h"
|
||||
#include "app/Config.h"
|
||||
#include "protocol/TcpEntity.h"
|
||||
|
||||
#include "widgets/MainWindow.h"
|
||||
|
||||
|
||||
#include "common/Spdlogger.h"
|
||||
#include "database/DaoEntity.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include "DataStruct.h"
|
||||
#include <filesystem>
|
||||
#include <QApplication>
|
||||
#include <QtWebEngineWidgets/QtWebEngineWidgets>
|
||||
|
||||
#include "qt/MainWeb.h"
|
||||
#include "common/Utils.h"
|
||||
#include "common/Snowflake.h"
|
||||
#include "common/JsonN.h"
|
||||
#include "common/Spdlogger.h"
|
||||
#include "common/XlsxEntity.h"
|
||||
#include "common/Crypto.h"
|
||||
|
||||
#include "app/Application.h"
|
||||
#include "app/Config.h"
|
||||
#include "app/DataStruct.h"
|
||||
|
||||
#include "database/Dao.h"
|
||||
#include "common/XlsxEntity.h"
|
||||
#include "protocol/TcpEntity.h"
|
||||
#include "widgets/MainWindow.h"
|
||||
#include "qt/MainWeb.h"
|
||||
#include "qt/MainApp.h"
|
||||
|
||||
void memberJsonTest()
|
||||
int SM2_test()
|
||||
{
|
||||
std::string fromJson = "fromJson(const std::string& str) {\nNJsonNode jsonroot;\nauto ret = NJson::parse(str, jsonroot);\nif (!ret) { return; }\n";
|
||||
std::string toJson = "toJson() {\nNJsonNode jsonroot;";
|
||||
// 未压缩格式(最常见)
|
||||
// 前缀 : 04 (1字节) X坐标 : 32字节(64个十六进制字符), Y坐标 : 32字节(64个十六进制字符),总长度 : 1 + 32 + 32 = 65字节 = 130个十六进制字符
|
||||
std::string hex_pub_key = "04661013d0b881d817085a251f0c0a7024e72c76e6eb0fd22c0170a508b123864ef7514df30cecb45deecf9b35810d0315b5164d63199c971ac3323c228ab48606";
|
||||
std::string hex_pri_key = "b935087295c448b221abc571d88018ee9d037407c32aa4d7fbf627a143ad86a0";
|
||||
|
||||
std::ifstream ifs("", std::ios::in);
|
||||
std::string line;
|
||||
std::string cpp = "#include \"DataStruct.h\"\n\n";
|
||||
if (ifs.is_open())
|
||||
{
|
||||
std::string s1;
|
||||
std::string s2;
|
||||
while (std::getline(ifs, line))
|
||||
{
|
||||
int pos = line.find("struct");
|
||||
if (pos != std::string::npos)
|
||||
{
|
||||
std::string className = line.substr(pos+7);
|
||||
s1 = "void " + className + "::" + fromJson;
|
||||
s2 = "}\nstd::string " + className + "::" + toJson;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string key;
|
||||
pos = line.find("uint");
|
||||
if (pos != std::string::npos) { key = line.substr(pos+9); }
|
||||
if (!key.empty())
|
||||
{
|
||||
pos = key.find(";");
|
||||
if (pos != std::string::npos) { key = key.substr(0, pos); }
|
||||
}
|
||||
if (!key.empty())
|
||||
{
|
||||
s1 += ("NJson::read(jsonroot, \"" + key + "\", " + key + ");\n");
|
||||
s2 += ("jsonroot[\"" + key + "\"] = " + key + ";\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
ifs.close();
|
||||
}
|
||||
std::string cipherText = Crypto::gmssl_sm2Encrypt(hex_pub_key, hex_pri_key, "123456");
|
||||
std::cout << "加密: " << Utils::toHex(cipherText) << std::endl;
|
||||
|
||||
|
||||
//std::string strTmp = R"()";
|
||||
//std::vector<std::string> vecTmp;
|
||||
//Utils::split(strTmp, "\n", vecTmp);
|
||||
std::string text = "306f022100f180bb383cddea024dfb6fea6c321f4b6901a468646df3da7d0040ebf107199f022009c363df8958c037f658da7060d429647802ac40560140e79685884a38f81cb10420783eb5b893994afdf7f68e2123e0c6e9469b3ea1f26297cb2b8e9cf6e27162a60406f99e4cbe6655";
|
||||
std::string plainText = Crypto::gmssl_sm2Decrypt(hex_pub_key, hex_pri_key, Utils::fromHex(text));
|
||||
std::cout << "解密: " << plainText << std::endl;
|
||||
|
||||
//std::string from = "void fromJson(const std::string& str) {\nNJsonNode jsonroot;\nauto ret = NJson::parse(str, jsonroot);\nif (!ret) { return; }\n";
|
||||
//std::string to = "std::string toJson() {\nNJsonNode jsonroot;";
|
||||
//for (auto& item: vecTmp)
|
||||
//{
|
||||
// std::string key;
|
||||
// int pos = item.find_first_of("_");
|
||||
// if (pos != std::string::npos) { key = item.substr(pos+3); }
|
||||
// pos = key.find_first_of(";");
|
||||
// if (pos != std::string::npos) { key = key.substr(0, pos); }
|
||||
// SM2_KEY sm2k;
|
||||
|
||||
// if (!key.empty())
|
||||
// FILE* f = fopen("D:/sm2pub.pem", "rb");
|
||||
// if (f)
|
||||
// {
|
||||
// from += ("NJson::read(jsonroot, \"" + key + "\", " + key + ");\n");
|
||||
// to += ("jsonroot[\"" + key + "\"] = " + key + ";\n");
|
||||
// sm2_public_key_info_from_pem(&sm2k, f);
|
||||
// std::vector<uint8_t> plainText(SM2_MAX_PLAINTEXT_SIZE);
|
||||
// std::vector<uint8_t> ciphertext(SM2_MAX_CIPHERTEXT_SIZE);
|
||||
// size_t ciphertext_len = -1;
|
||||
// int ret = sm2_encrypt(&sm2k, plainText.data(), plainText.size(), ciphertext.data(), &ciphertext_len);
|
||||
// std::cout << "加密: " << Utils::toHex(ciphertext, ciphertext_len) << std::endl;
|
||||
// }
|
||||
|
||||
// FILE* f1 = fopen("D:/sm2.pem", "rb");
|
||||
// if (f1)
|
||||
// {
|
||||
// sm2_private_key_info_from_pem(&sm2k, f1);
|
||||
// }
|
||||
// sm2_key_print(stderr, 0, 4, "SM2_KEY", &sm2k);
|
||||
|
||||
// std::cout << "";
|
||||
//}
|
||||
//from += "}";
|
||||
//to += "return jsonroot.dump();\n}";
|
||||
//std::cout << from << std::endl;
|
||||
//std::cout << to << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#include "common/Crypto.h"
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/ec.h>
|
||||
#include <openssl/pem.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
|
||||
// 错误处理函数
|
||||
void HandleOpensslError() {
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// 将16进制字符串转换为字节数组
|
||||
std::vector<unsigned char> hexToBytes(const std::string& hex) {
|
||||
std::vector<unsigned char> bytes;
|
||||
|
||||
for (size_t i = 0; i < hex.length(); i += 2) {
|
||||
std::string byteString = hex.substr(i, 2);
|
||||
unsigned char byte = static_cast<unsigned char>(strtol(byteString.c_str(), NULL, 16));
|
||||
bytes.push_back(byte);
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
// 将字节数组转换为16进制字符串
|
||||
std::string bytes_to_hex(const std::vector<unsigned char>& bytes) {
|
||||
std::stringstream ss;
|
||||
ss << std::hex << std::setfill('0');
|
||||
|
||||
for (unsigned char byte : bytes) {
|
||||
ss << std::setw(2) << static_cast<unsigned int>(byte);
|
||||
}
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
void OpensslSM2_test()
|
||||
{
|
||||
// 初始化 OpenSSL
|
||||
OpenSSL_add_all_algorithms();
|
||||
|
||||
ERR_load_crypto_strings();
|
||||
|
||||
// 示例16进制密钥
|
||||
std::string private_key_hex = "b935087295c448b221abc571d88018ee9d037407c32aa4d7fbf627a143ad86a0";
|
||||
std::string public_key_hex = "04661013d0b881d817085a251f0c0a7024e72c76e6eb0fd22c0170a508b123864ef7514df30cecb45deecf9b35810d0315b5164d63199c971ac3323c228ab48606";
|
||||
|
||||
// 要加密的明文
|
||||
std::string plaintext = "123";
|
||||
|
||||
std::cout << "Original text: " << plaintext << std::endl;
|
||||
std::cout << "Private key (hex): " << private_key_hex << std::endl;
|
||||
std::cout << "Public key (hex): " << public_key_hex << std::endl;
|
||||
|
||||
// 加密
|
||||
auto ciphertext = Crypto::ssl_sm2Encrypt(public_key_hex, plaintext);
|
||||
std::cout << "Ciphertext (hex): " << Utils::toHex(ciphertext) << std::endl;
|
||||
|
||||
// 解密^
|
||||
auto decryptedText = Crypto::ssl_sm2Decrypt(private_key_hex, ciphertext);
|
||||
std::cout << "Decrypted text: " << decryptedText << std::endl;
|
||||
|
||||
// 验证加解密是否正确
|
||||
if (plaintext == decryptedText) {
|
||||
std::cout << "SM2 encryption and decryption successful!" << std::endl;
|
||||
}
|
||||
else {
|
||||
std::cout << "SM2 encryption and decryption failed!" << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
// 未压缩格式(最常见)
|
||||
// 前缀 : 04 (1字节) X坐标 : 32字节(64个十六进制字符), Y坐标 : 32字节(64个十六进制字符),总长度 : 1 + 32 + 32 = 65字节 = 130个十六进制字符
|
||||
//std::string private_key_hex = "04661013d0b881d817085a251f0c0a7024e72c76e6eb0fd22c0170a508b123864ef7514df30cecb45deecf9b35810d0315b5164d63199c971ac3323c228ab48606";
|
||||
//std::string public_key_hex = "b935087295c448b221abc571d88018ee9d037407c32aa4d7fbf627a143ad86a0";
|
||||
|
||||
//std::string cipherText = Crypto::sm2Encrypt(public_key_hex, private_key_hex, "123456");
|
||||
//std::cout << "加密: " << Utils::toHex(cipherText) << std::endl;
|
||||
|
||||
std::string text(ciphertext.begin(), ciphertext.end());
|
||||
//std::string textHex = "306f022100f180bb383cddea024dfb6fea6c321f4b6901a468646df3da7d0040ebf107199f022009c363df8958c037f658da7060d429647802ac40560140e79685884a38f81cb10420783eb5b893994afdf7f68e2123e0c6e9469b3ea1f26297cb2b8e9cf6e27162a60406f99e4cbe6655";
|
||||
//std::string text = Utils::fromHex(text);
|
||||
std::string plainText = Crypto::gmssl_sm2Decrypt(public_key_hex, private_key_hex, text);
|
||||
std::cout << "解密: " << plainText << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
// 示例密钥 (16字节)
|
||||
std::string key = "1234567890123456";
|
||||
// 示例明文 (必须是16字节的整数倍,本例为16字节)
|
||||
std::string plaintext = "HelloWorld";
|
||||
|
||||
// 加密
|
||||
auto encryptText = Crypto::sm4EcbEncrypt(vector<uint8_t>(key.begin(), key.end()), vector<uint8_t>(plaintext.begin(), plaintext.end()));
|
||||
// 解密
|
||||
auto decryptText = Crypto::sm4EcbDecrypt(vector<uint8_t>(key.begin(), key.end()), encryptText);
|
||||
|
||||
// 输出十六进制结果
|
||||
std::cout << "Original: " << plaintext << std::endl;
|
||||
std::cout << "Encrypted: " << std::string(encryptText.begin(), encryptText.end()) << std::endl;
|
||||
std::cout << "Decrypted: " << std::string(decryptText.begin(), decryptText.end()) << std::endl;
|
||||
|
||||
// 设置控制台输出为 UTF-8 编码
|
||||
SetConsoleOutputCP(CP_UTF8);
|
||||
// 设置控制台输入为 UTF-8 编码(如果需要输入中文)
|
||||
SetConsoleCP(CP_UTF8);
|
||||
|
||||
//OpensslSM2_test();
|
||||
//SM2_test();
|
||||
|
||||
// 初始化日志
|
||||
Spdlogger::init(spdlog::level::info, "");
|
||||
spdlog::info("[main] start ... ======================================================================");
|
||||
@@ -133,7 +182,24 @@ int main(int argc, char** argv)
|
||||
// 运行后台服务
|
||||
Application::instance().init();
|
||||
|
||||
while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); };
|
||||
|
||||
if (Config::option.windowEnabled)
|
||||
{
|
||||
QApplication qapp(argc, argv);
|
||||
|
||||
QFont font("微软雅黑", 10, 600);
|
||||
QApplication::setFont(font);
|
||||
MainApp mainApp;
|
||||
return qapp.exec();
|
||||
}
|
||||
else
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
};
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 启动 PV 服务主线程
|
||||
//std::thread([=]()
|
||||
|
||||
@@ -1042,19 +1042,16 @@ Errcode HttpEntity::updateAlertLog(const httplib::Request& req, njson& json, std
|
||||
|
||||
Errcode HttpEntity::queryPredictionDetail(const httplib::Request& req, njson& json, std::string& errmsg)
|
||||
{
|
||||
njson jsonData = njson::array();
|
||||
|
||||
std::vector<std::string> vecStoreIn(144), vecStoreOut(144), vecCharge(144), vecSolar(144), vecSolarP(144);
|
||||
for (int i = 0; i<144; ++i)
|
||||
const int num = 144;
|
||||
std::vector<int> vecStoreIn(num, 0), vecStoreOut(num, 0), vecCharge(num, 0), vecSolar(num, 0), vecSolarP(num, 0);
|
||||
for (int i = 0; i<num; ++i)
|
||||
{
|
||||
vecStoreIn[i] = Utils::toStr(float(Utils::random(50, 100)));
|
||||
vecStoreOut[i] = Utils::toStr(float(Utils::random(50, 100)));
|
||||
vecCharge[i] = Utils::toStr(float(Utils::random(50, 100)));
|
||||
vecSolar[i] = Utils::toStr(float(Utils::random(50, 100)));
|
||||
vecSolarP[i] = Utils::toStr(float(Utils::random(50, 100)));
|
||||
vecStoreIn[i] = 0;
|
||||
vecStoreOut[i] = 0;
|
||||
vecCharge[i] = 0;
|
||||
vecSolar[i] = 0;
|
||||
vecSolarP[i] = 0;
|
||||
}
|
||||
|
||||
json["data"] = jsonData;
|
||||
json["data"] = {
|
||||
{"W_store_in", vecStoreIn},
|
||||
{"W_store_out", vecStoreOut},
|
||||
|
||||
@@ -279,7 +279,7 @@ int MqttClient::onMessageArrived(char* topic, int topicLen, MQTTAsync_message* m
|
||||
std::string command = GetSubStr("/", topicStr);
|
||||
std::string deviceCode = GetSubStr("/", topicStr);
|
||||
|
||||
spdlog::info("[mqtt] <<<<<<<<<< message arrived: topic=[{},{}], len={}, payload={}", topic, msg->qos, len, payload);
|
||||
spdlog::info("[mqtt] <<< message arrived: topic=[{},{}], len={}, payload={}", topic, msg->qos, len, payload);
|
||||
|
||||
njson json;
|
||||
bool ret = JSON::parse(payload, json);
|
||||
@@ -388,9 +388,9 @@ void MqttClient::ParseArrivedMessage(njson& json, string command, std::shared_pt
|
||||
{
|
||||
auto addr = iter->first;
|
||||
auto& regUnit = iter->second;
|
||||
if (regUnit.alert && val>=0)
|
||||
if (regUnit.alert && val > 0)
|
||||
{
|
||||
station->readAlert(device, val, "[" + command + "]" + regUnit.name + "(" + addr + ")");
|
||||
station->readAlert(device, addr, val, "[" + command + "]" + regUnit.name + "(" + addr + ")");
|
||||
}
|
||||
|
||||
device->setParam(addr, val);
|
||||
|
||||
178
src/qt/MainApp.cpp
Normal file
178
src/qt/MainApp.cpp
Normal file
@@ -0,0 +1,178 @@
|
||||
#include "MainApp.h"
|
||||
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtWidgets/QApplication>
|
||||
#include <QtWidgets/QComboBox>
|
||||
#include <QtWidgets/QGridLayout>
|
||||
#include <QtWidgets/QLabel>
|
||||
#include <QtWidgets/QLineEdit>
|
||||
#include <QtWidgets/QPushButton>
|
||||
#include <QtWidgets/QWidget>
|
||||
#include <QPalette>
|
||||
#include <QGroupBox>
|
||||
|
||||
static const std::string QSS_BTN_MENU =
|
||||
"QPushButton{background:rgba(50,128,218,200);color:white;border-radius:5px;border:2px solid rgb(10,120,215);font:bold 18px;}"
|
||||
"QPushButton:hover{background-color:rgb(32,164,128);}"
|
||||
"QPushButton:pressed{border-width:3px 0 0 3px;background-color:rgb(1,32,54);border-style:inset;}"
|
||||
"QPushButton:disabled{color:rgb(150,150,150);}";
|
||||
|
||||
static const std::string QSS_LINE =
|
||||
"QLineEdit { background-color: rgb(14, 49, 66); color: #ffffff; border: 1px solid rgb(18, 251, 255); border-radius: 5px; font: normal 13px; }";
|
||||
|
||||
static const std::string QSS_GROUP =
|
||||
"QGroupBox { border: 1px solid gray; margin-top: 8px; border-radius: 5px;}"
|
||||
"QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; left:10px; margin-left: 0px; padding:0 1px; }";
|
||||
|
||||
MainApp::MainApp()
|
||||
{
|
||||
QPalette palette(this->palette());
|
||||
|
||||
// 设置背景为黑色
|
||||
palette.setColor(QPalette::Window, QColor(1, 32, 54));
|
||||
this->setAutoFillBackground(true);
|
||||
this->setPalette(palette);
|
||||
this->setStyleSheet("color: white;");
|
||||
|
||||
this->resize(1440, 900);
|
||||
this->show();
|
||||
|
||||
//ui.bkg.setGeometry(0, 0, 1440, 900);
|
||||
//ui.bkg.setStyleSheet("background-color: rgb(17, 36, 102);");
|
||||
|
||||
//ui.weburl = std::make_shared<LabelPair>(this, 10, 10, 240, 30);
|
||||
//ui.weburl->setTitle("页面地址:");
|
||||
//ui.weburl->setValue("http://www.baidu.com");
|
||||
|
||||
this->setMyLayout();
|
||||
}
|
||||
|
||||
class MyMenu : public QWidget
|
||||
{
|
||||
public:
|
||||
MyMenu(QWidget* parent) : QWidget(parent), layout(this)
|
||||
{
|
||||
this->setObjectName("menu");
|
||||
this->setStyleSheet("#menu { background-color:rgba(120,120,120,80); }");
|
||||
this->show();
|
||||
vecMenuItems.reserve(20);
|
||||
|
||||
layout.setSpacing(2);
|
||||
layout.setContentsMargins(2, 2, 2, 2);
|
||||
|
||||
this->addMenuItem("系统总览");
|
||||
this->addMenuItem("运行监控");
|
||||
}
|
||||
|
||||
void addMenuItem(std::string name)
|
||||
{
|
||||
int row = vecMenuItems.size();
|
||||
auto item = std::make_shared<QPushButton>(this);
|
||||
vecMenuItems.push_back(item);
|
||||
item->setText(name.c_str());
|
||||
item->setStyleSheet(QSS_BTN_MENU.c_str());
|
||||
|
||||
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
item->setSizePolicy(sizePolicy);
|
||||
layout.addWidget(item.get(), row, 0, 1, 1);
|
||||
|
||||
// 设置列宽和行高
|
||||
layout.setRowMinimumHeight(row, 50); // 设置第0列的最小宽度为100像素
|
||||
// 设置列和行的伸缩因子
|
||||
layout.setRowStretch(row, 0); // 设置第0列的伸缩因子为0,不伸缩
|
||||
layout.setRowStretch(row+1, 2); // 设置第1列的伸缩因子为2,使其更宽
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<QPushButton>> vecMenuItems;
|
||||
|
||||
QGridLayout layout;
|
||||
};
|
||||
|
||||
void PairLine(QWidget* parent, int x, int y, string k, string v)
|
||||
{
|
||||
auto key = new QLabel(parent);
|
||||
key->setText(k.c_str());
|
||||
key->setGeometry(x, y, 80, 26);
|
||||
auto value = new QLineEdit(parent);
|
||||
value->setText(v.c_str());
|
||||
value->setGeometry(x+80, y, 180, 26);
|
||||
value->setStyleSheet(QSS_LINE.c_str());
|
||||
}
|
||||
|
||||
|
||||
class MyWorkspace : public QWidget
|
||||
{
|
||||
public:
|
||||
MyWorkspace(QWidget* parent) : QWidget(parent)
|
||||
{
|
||||
this->setObjectName("workspace");
|
||||
this->setStyleSheet("#workspace { background-color:rgba(100,100,100,50); }");
|
||||
|
||||
int x=10, y=10;
|
||||
{
|
||||
QGroupBox* groupBox = new QGroupBox("HTTP", this);
|
||||
groupBox->setGeometry(x, y, 300, 120);
|
||||
groupBox->setStyleSheet(QSS_GROUP.c_str());
|
||||
|
||||
PairLine(groupBox, 20, 20, "服务类型: ", "服务端");
|
||||
PairLine(groupBox, 20, 50, "服务地址: ", "92.168.0.13:17900");
|
||||
PairLine(groupBox, 20, 80, "服务状态: ", "---");
|
||||
}
|
||||
{
|
||||
x += 320;
|
||||
QGroupBox* groupBox = new QGroupBox("MQTT", this);
|
||||
groupBox->setGeometry(x, y, 300, 120);
|
||||
groupBox->setStyleSheet(QSS_GROUP.c_str());
|
||||
|
||||
PairLine(groupBox, 20, 20, "服务类型: ", "客户端");
|
||||
PairLine(groupBox, 20, 50, "服务地址: ", "92.168.0.13:17800");
|
||||
PairLine(groupBox, 20, 80, "服务状态: ", "---");
|
||||
}
|
||||
{
|
||||
x += 320;
|
||||
QGroupBox* groupBox = new QGroupBox("数据库", this);
|
||||
groupBox->setGeometry(x, y, 300, 120);
|
||||
groupBox->setStyleSheet(QSS_GROUP.c_str());
|
||||
|
||||
PairLine(groupBox, 20, 20, "数据库名: ", "ees");
|
||||
PairLine(groupBox, 20, 50, "主机地址: ", "92.168.0.13:17800");
|
||||
PairLine(groupBox, 20, 80, "用 户 名: ", "root");
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
void MainApp::setMyLayout()
|
||||
{
|
||||
layout.main = std::make_shared<QGridLayout>(this);
|
||||
|
||||
auto Widget = this;
|
||||
|
||||
layout.main->setObjectName(QString::fromUtf8("layout.main"));
|
||||
layout.main->setSpacing(6);
|
||||
layout.main->setContentsMargins(11, 11, 11, 11);
|
||||
//// 设置间距和边距
|
||||
//layout->setHorizontalSpacing(10); // 设置列间距为10像素
|
||||
//layout->setVerticalSpacing(10); // 设置行间距为10像素
|
||||
//layout->setContentsMargins(10, 10, 10, 10); // 设置内容边距为10像素
|
||||
|
||||
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
|
||||
MyMenu* menu = new MyMenu(this);
|
||||
menu->setSizePolicy(sizePolicy);
|
||||
layout.main->addWidget(menu, 0, 0, 1, 1);
|
||||
|
||||
MyWorkspace* workspace = new MyWorkspace(this);
|
||||
workspace->setSizePolicy(sizePolicy);
|
||||
layout.main->addWidget(workspace, 0, 1, 1, 1);
|
||||
|
||||
// 设置列宽和行高
|
||||
layout.main->setColumnMinimumWidth(0, 200); // 设置第0列的最小宽度为100像素
|
||||
//gridLayout->setRowMinimumHeight(0, 200); // 设置第0行的最小高度为50像素
|
||||
|
||||
// 设置列和行的伸缩因子
|
||||
layout.main->setColumnStretch(0, 0); // 设置第0列的伸缩因子为0,不伸缩
|
||||
layout.main->setColumnStretch(1, 2); // 设置第1列的伸缩因子为2,使其更宽
|
||||
//gridLayout->setRowStretch(0, 1); // 设置第0行的伸缩因子为1
|
||||
|
||||
}
|
||||
53
src/qt/MainApp.h
Normal file
53
src/qt/MainApp.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#include <QMainWindow>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QHBoxLayout>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
class LabelPair
|
||||
{
|
||||
public:
|
||||
LabelPair(QWidget* parent, int x, int y, int w, int h)
|
||||
{
|
||||
title.setParent(parent);
|
||||
value.setParent(&title);
|
||||
|
||||
title.setGeometry(x, y, w, h);
|
||||
value.setGeometry(80, 0, w-80, h);
|
||||
|
||||
title.show();
|
||||
value.show();
|
||||
}
|
||||
|
||||
void setTitle(std::string text)
|
||||
{
|
||||
title.setText(text.c_str());
|
||||
}
|
||||
|
||||
void setValue(std::string text)
|
||||
{
|
||||
value.setText(text.c_str());
|
||||
}
|
||||
|
||||
QLabel title;
|
||||
QLabel value;
|
||||
};
|
||||
|
||||
class MainApp : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MainApp();
|
||||
|
||||
void setMyLayout();
|
||||
|
||||
struct {
|
||||
std::shared_ptr<LabelPair> weburl {};
|
||||
} ui;
|
||||
|
||||
struct {
|
||||
std::shared_ptr<QGridLayout> main;
|
||||
} layout;
|
||||
|
||||
};
|
||||
BIN
thirdparty/GmSSL-3.1.1/bin/gmssl.dll
vendored
BIN
thirdparty/GmSSL-3.1.1/bin/gmssl.dll
vendored
Binary file not shown.
BIN
thirdparty/GmSSL-3.1.1/bin/gmssl.exe
vendored
BIN
thirdparty/GmSSL-3.1.1/bin/gmssl.exe
vendored
Binary file not shown.
108
thirdparty/GmSSL-3.1.1/include/gmssl/aead.h
vendored
108
thirdparty/GmSSL-3.1.1/include/gmssl/aead.h
vendored
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_AEAD_H
|
||||
#define GMSSL_AEAD_H
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#include <gmssl/sm4.h>
|
||||
#include <gmssl/gcm.h>
|
||||
#include <gmssl/api.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM4_CBC_CTX enc_ctx;
|
||||
SM3_HMAC_CTX mac_ctx;
|
||||
uint8_t mac[SM3_HMAC_SIZE];
|
||||
size_t maclen;
|
||||
} SM4_CBC_SM3_HMAC_CTX;
|
||||
|
||||
#define SM4_CBC_SM3_HMAC_KEY_SIZE 48
|
||||
#define SM4_CBC_SM3_HMAC_IV_SIZE 16
|
||||
|
||||
_gmssl_export int sm4_cbc_sm3_hmac_encrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
_gmssl_export int sm4_cbc_sm3_hmac_encrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_cbc_sm3_hmac_encrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_cbc_sm3_hmac_decrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
_gmssl_export int sm4_cbc_sm3_hmac_decrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_cbc_sm3_hmac_decrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM4_CTR_CTX enc_ctx;
|
||||
SM3_HMAC_CTX mac_ctx;
|
||||
uint8_t mac[SM3_HMAC_SIZE];
|
||||
size_t maclen;
|
||||
} SM4_CTR_SM3_HMAC_CTX;
|
||||
|
||||
#define SM4_CTR_SM3_HMAC_KEY_SIZE 48
|
||||
#define SM4_CTR_SM3_HMAC_IV_SIZE 16
|
||||
|
||||
_gmssl_export int sm4_ctr_sm3_hmac_encrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
_gmssl_export int sm4_ctr_sm3_hmac_encrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_ctr_sm3_hmac_encrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_ctr_sm3_hmac_decrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
_gmssl_export int sm4_ctr_sm3_hmac_decrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_ctr_sm3_hmac_decrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM4_CTR_CTX enc_ctx;
|
||||
GHASH_CTX mac_ctx;
|
||||
uint8_t Y[16]; // E(K, Y_0)
|
||||
size_t taglen;
|
||||
uint8_t mac[16];
|
||||
size_t maclen;
|
||||
} SM4_GCM_CTX;
|
||||
|
||||
#define SM4_GCM_KEY_SIZE 16
|
||||
#define SM4_GCM_DEFAULT_TAG_SIZE 16
|
||||
|
||||
_gmssl_export int sm4_gcm_encrypt_init(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, size_t taglen);
|
||||
_gmssl_export int sm4_gcm_encrypt_update(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_gcm_encrypt_finish(SM4_GCM_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_gcm_decrypt_init(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, size_t taglen);
|
||||
_gmssl_export int sm4_gcm_decrypt_update(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm4_gcm_decrypt_finish(SM4_GCM_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
23
thirdparty/GmSSL-3.1.1/include/gmssl/api.h
vendored
23
thirdparty/GmSSL-3.1.1/include/gmssl/api.h
vendored
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_API_H
|
||||
#define GMSSL_API_H
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
#define _gmssl_export __declspec(dllexport)
|
||||
#elif defined(__GNUC__)
|
||||
// use -fvisibility=hidden to change the "default" behavior
|
||||
#define _gmssl_export __attribute__((visibility("default")))
|
||||
#else
|
||||
#define _gmssl_export
|
||||
#endif
|
||||
|
||||
#endif
|
||||
20
thirdparty/GmSSL-3.1.1/include/gmssl/asm.h
vendored
Normal file
20
thirdparty/GmSSL-3.1.1/include/gmssl/asm.h
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GMSSL_ASM_H
|
||||
#define GMSSL_ASM_H
|
||||
|
||||
#ifdef ENABLE_ASM_UNDERSCORE_PREFIX
|
||||
# define func(foo) _##foo
|
||||
#else
|
||||
# define func(foo) foo
|
||||
#endif
|
||||
|
||||
#endif
|
||||
27
thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h
vendored
27
thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h
vendored
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
@@ -86,8 +86,8 @@ int asn1_type_from_der(int tag, const uint8_t **d, size_t *dlen, const uint8_t *
|
||||
int asn1_nonempty_type_to_der(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen);
|
||||
int asn1_nonempty_type_from_der(int tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen);
|
||||
int asn1_any_type_from_der(int *tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen);
|
||||
int asn1_any_to_der(const uint8_t *a, size_t alen, uint8_t **out, size_t *outlen); // 调用方应保证a,alen为TLV
|
||||
int asn1_any_from_der(const uint8_t **a, size_t *alen, const uint8_t **in, size_t *inlen); // 该函数会检查输入是否为TLV
|
||||
int asn1_any_to_der(const uint8_t *a, size_t alen, uint8_t **out, size_t *outlen); // NOTE: a,alen MUST be TLV
|
||||
int asn1_any_from_der(const uint8_t **a, size_t *alen, const uint8_t **in, size_t *inlen); // asn1_any_from_der check if input is TLV
|
||||
|
||||
#define ASN1_TRUE 0xff
|
||||
#define ASN1_FALSE 0x00
|
||||
@@ -101,7 +101,7 @@ int asn1_boolean_from_der_ex(int tag, int *val, const uint8_t **in, size_t *inle
|
||||
#define asn1_implicit_boolean_to_der(i,val,out,outlen) asn1_boolean_to_der_ex(ASN1_TAG_IMPLICIT(i),val,out,outlen)
|
||||
#define asn1_implicit_boolean_from_der(i,val,in,inlen) asn1_boolean_from_der_ex(ASN1_TAG_IMPLICIT(i),val,in,inlen)
|
||||
|
||||
// asn1_integer_ 不支持负数编解码
|
||||
// asn1_integer_ does not support negative value
|
||||
int asn1_integer_to_der_ex(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen);
|
||||
int asn1_integer_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen);
|
||||
#define asn1_integer_to_der(d,dlen,out,outlen) asn1_integer_to_der_ex(ASN1_TAG_INTEGER,d,dlen,out,outlen)
|
||||
@@ -109,15 +109,15 @@ int asn1_integer_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const uin
|
||||
#define asn1_implicit_integer_to_der(i,d,dlen,out,outlen) asn1_integer_to_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,out,outlen)
|
||||
#define asn1_implicit_integer_from_der(i,d,dlen,in,inlen) asn1_integer_from_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,in,inlen)
|
||||
|
||||
// asn1_int_ 只支持小的无符号整数的编解码,不支持负数
|
||||
int asn1_int_to_der_ex(int tag, int val, uint8_t **out, size_t *outlen); // 当 val == -1 时,不输出,返回 0
|
||||
int asn1_int_from_der_ex(int tag, int *val, const uint8_t **in, size_t *inlen); // 不支持负数,返回0时 *val 设置为 -1
|
||||
// asn1_int_ only support small unsigned int, does not support negative integer
|
||||
int asn1_int_to_der_ex(int tag, int val, uint8_t **out, size_t *outlen); // when val == -1, return 0 and no output
|
||||
int asn1_int_from_der_ex(int tag, int *val, const uint8_t **in, size_t *inlen); // when return 0, *val is set to -1
|
||||
#define asn1_int_to_der(val,out,outlen) asn1_int_to_der_ex(ASN1_TAG_INTEGER,val,out,outlen)
|
||||
#define asn1_int_from_der(val,in,inlen) asn1_int_from_der_ex(ASN1_TAG_INTEGER,val,in,inlen)
|
||||
#define asn1_implicit_int_to_der(i,val,out,outlen) asn1_int_to_der_ex(ASN1_TAG_IMPLICIT(i),val,out,outlen)
|
||||
#define asn1_implicit_int_from_der(i,val,in,inlen) asn1_int_from_der_ex(ASN1_TAG_IMPLICIT(i),val,in,inlen)
|
||||
|
||||
// 比特长度不必须为8的整数倍
|
||||
// bit_string can be any length
|
||||
int asn1_bit_string_to_der_ex(int tag, const uint8_t *d, size_t nbits, uint8_t **out, size_t *outlen);
|
||||
int asn1_bit_string_from_der_ex(int tag, const uint8_t **d, size_t *nbits, const uint8_t **in, size_t *inlen);
|
||||
#define asn1_bit_string_to_der(d,nbits,out,outlen) asn1_bit_string_to_der_ex(ASN1_TAG_BIT_STRING,d,nbits,out,outlen)
|
||||
@@ -125,7 +125,7 @@ int asn1_bit_string_from_der_ex(int tag, const uint8_t **d, size_t *nbits, const
|
||||
#define asn1_implicit_bit_string_to_der(i,d,nbits,out,outlen) asn1_bit_string_to_der_ex(ASN1_TAG_IMPLICIT(i),d,nbits,out,outlen)
|
||||
#define asn1_implicit_bit_string_from_der(i,d,nbits,in,inlen) asn1_bit_string_from_der_ex(ASN1_TAG_IMPLICIT(i),d,nbits,in,inlen)
|
||||
|
||||
// 比特长度必须为8的整数倍,因此使用字节长度
|
||||
// bit string MUST be multiple 8 bits
|
||||
int asn1_bit_octets_to_der_ex(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen);
|
||||
int asn1_bit_octets_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen);
|
||||
#define asn1_bit_octets_to_der(d,dlen,out,outlen) asn1_bit_octets_to_der_ex(ASN1_TAG_BIT_STRING,d,dlen,out,outlen)
|
||||
@@ -133,14 +133,14 @@ int asn1_bit_octets_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const
|
||||
#define asn1_implicit_bit_octets_to_der(i,d,dlen,out,outlen) asn1_bit_octets_to_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,out,outlen)
|
||||
#define asn1_implicit_bit_octets_from_der(i,d,dlen,in,inlen) asn1_bit_octets_from_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,in,inlen)
|
||||
|
||||
// bits == -1 不编码,只支持较少的比特数量
|
||||
// bits == -1 means no input
|
||||
int asn1_bits_to_der_ex(int tag, int bits, uint8_t **out, size_t *outlen);
|
||||
int asn1_bits_from_der_ex(int tag, int *bits, const uint8_t **in, size_t *inlen);
|
||||
#define asn1_bits_to_der(bits,out,outlen) asn1_bits_to_der_ex(ASN1_TAG_BIT_STRING,bits,out,outlen)
|
||||
#define asn1_bits_from_der(bits,in,inlen) asn1_bits_from_der_ex(ASN1_TAG_BIT_STRING,bits,in,inlen)
|
||||
#define asn1_implicit_bits_to_der(i,bits,out,outlen) asn1_bits_to_der_ex(ASN1_TAG_IMPLICIT(i),bits,out,outlen)
|
||||
#define asn1_implicit_bits_from_der(i,bits,in,inlen) asn1_bits_from_der_ex(ASN1_TAG_IMPLICIT(i),bits,in,inlen)
|
||||
// names[i]对应第i个比特
|
||||
// names[i] is the i-th bit
|
||||
int asn1_bits_print(FILE *fp, int fmt, int ind, const char *label, const char **names, size_t names_cnt, int bits);
|
||||
|
||||
#define asn1_octet_string_to_der_ex(tag,d,dlen,out,outlen) asn1_type_to_der(tag,d,dlen,out,outlen)
|
||||
@@ -182,7 +182,8 @@ typedef struct {
|
||||
|
||||
const ASN1_OID_INFO *asn1_oid_info_from_name(const ASN1_OID_INFO *infos, size_t count, const char *name);
|
||||
const ASN1_OID_INFO *asn1_oid_info_from_oid(const ASN1_OID_INFO *infos, size_t count, int oid);
|
||||
// 如果一个正确解析的OID并不在infos列表中,那么仍然返回1,但是调用方必须检查返回的info是否为空
|
||||
|
||||
// well-formed but unknown OID will return 1, caller should check if *info == NULL when return 1
|
||||
int asn1_oid_info_from_der_ex(const ASN1_OID_INFO **info, uint32_t *nodes, size_t *nodes_cnt,
|
||||
const ASN1_OID_INFO *infos, size_t count, const uint8_t **in, size_t *inlen);
|
||||
int asn1_oid_info_from_der(const ASN1_OID_INFO **info,
|
||||
@@ -283,7 +284,7 @@ int asn1_header_to_der(int tag, size_t dlen, uint8_t **out, size_t *outlen);
|
||||
#define asn1_explicit_to_der(i,d,dlen,out,outlen) asn1_nonempty_type_to_der(ASN1_TAG_EXPLICIT(i),d,dlen,out,outlen)
|
||||
#define asn1_explicit_from_der(i,d,dlen,in,inlen) asn1_nonempty_type_from_der(ASN1_TAG_EXPLICIT(i),d,dlen,in,inlen)
|
||||
|
||||
// d,dlen 是 SEQUENCE OF, SET OF 中的值
|
||||
// d,dlen is the V (of TLV) of SEQUENCE OF, SET OF
|
||||
int asn1_types_get_count(const uint8_t *d, size_t dlen, int tag, size_t *cnt);
|
||||
int asn1_types_get_item_by_index(const uint8_t *d, size_t dlen, int tag,
|
||||
int index, const uint8_t **item_d, size_t *item_dlen);
|
||||
|
||||
15
thirdparty/GmSSL-3.1.1/include/gmssl/base64.h
vendored
15
thirdparty/GmSSL-3.1.1/include/gmssl/base64.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -19,19 +19,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
BASE64 Public API
|
||||
|
||||
BASE64_CTX
|
||||
base64_encode_init
|
||||
base64_encode_update
|
||||
base64_encode_finish
|
||||
base64_decode_init
|
||||
base64_decode_update
|
||||
base64_decode_finish
|
||||
|
||||
*/
|
||||
|
||||
|
||||
typedef struct {
|
||||
/* number saved in a partial encode/decode */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,9 +7,6 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef GMSSL_BLOCK_CIPHER_H
|
||||
#define GMSSL_BLOCK_CIPHER_H
|
||||
|
||||
@@ -17,8 +14,10 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <gmssl/aes.h>
|
||||
#include <gmssl/sm4.h>
|
||||
#ifdef ENABLE_AES
|
||||
#include <gmssl/aes.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -37,7 +36,9 @@ typedef struct BLOCK_CIPHER_KEY BLOCK_CIPHER_KEY;
|
||||
struct BLOCK_CIPHER_KEY {
|
||||
union {
|
||||
SM4_KEY sm4_key;
|
||||
#ifdef ENABLE_AES
|
||||
AES_KEY aes_key;
|
||||
#endif
|
||||
} u;
|
||||
const BLOCK_CIPHER *cipher;
|
||||
};
|
||||
@@ -58,7 +59,9 @@ struct BLOCK_CIPHER {
|
||||
};
|
||||
|
||||
const BLOCK_CIPHER *BLOCK_CIPHER_sm4(void);
|
||||
#ifdef ENABLE_AES
|
||||
const BLOCK_CIPHER *BLOCK_CIPHER_aes128(void);
|
||||
#endif
|
||||
|
||||
const BLOCK_CIPHER *block_cipher_from_name(const char *name);
|
||||
const char *block_cipher_name(const BLOCK_CIPHER *cipher);
|
||||
|
||||
58
thirdparty/GmSSL-3.1.1/include/gmssl/cms.h
vendored
58
thirdparty/GmSSL-3.1.1/include/gmssl/cms.h
vendored
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
@@ -62,7 +62,7 @@ int cms_content_info_to_der(
|
||||
uint8_t **out, size_t *outlen);
|
||||
int cms_content_info_from_der(
|
||||
int *content_type,
|
||||
const uint8_t **content, size_t *content_len, // 这里获得的是完整的TLV
|
||||
const uint8_t **content, size_t *content_len, // content is the full TLV
|
||||
const uint8_t **in, size_t *inlen);
|
||||
int cms_content_info_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *d, size_t dlen);
|
||||
|
||||
@@ -269,13 +269,13 @@ typedef struct {
|
||||
|
||||
int cms_signed_data_sign_to_der(
|
||||
const CMS_CERTS_AND_KEY *signers, size_t signers_cnt,
|
||||
int content_type, const uint8_t *data, size_t datalen, // 当OID_cms_data时为raw data
|
||||
const uint8_t *crls, size_t crls_len, // 可以为空
|
||||
int content_type, const uint8_t *data, size_t datalen, // with OID_cms_data, `data` is the raw data
|
||||
const uint8_t *crls, size_t crls_len, // crls can be NULL
|
||||
uint8_t **out, size_t *outlen);
|
||||
int cms_signed_data_verify_from_der(
|
||||
const uint8_t *extra_certs, size_t extra_certs_len,
|
||||
const uint8_t *extra_crls, size_t extra_crls_len,
|
||||
int *content_type, const uint8_t **content, size_t *content_len, // 是否应该返回raw data呢?
|
||||
int *content_type, const uint8_t **content, size_t *content_len, // should we return raw data
|
||||
const uint8_t **certs, size_t *certs_len,
|
||||
const uint8_t **crls, size_t *crls_len,
|
||||
const uint8_t **signer_infos, size_t *signer_infos_len,
|
||||
@@ -289,8 +289,8 @@ RecipientInfo ::= SEQUENCE {
|
||||
keyEncryptionAlgorithm AlgorithmIdentifier,
|
||||
encryptedKey OCTET STRING -- DER-encoding of SM2Cipher
|
||||
}
|
||||
由于encryptedKey的类型为SM2Cipher, 而SM2Cipher中有2个INTEGER,因此长度是不固定的。
|
||||
因此不能预先确定输出长度
|
||||
|
||||
DER-encoding length of RecipientInfo is not fixed (caused by INTEGERs)
|
||||
*/
|
||||
int cms_recipient_info_to_der(
|
||||
int version,
|
||||
@@ -303,7 +303,7 @@ int cms_recipient_info_from_der(
|
||||
int *version,
|
||||
const uint8_t **issuer, size_t *issuer_len,
|
||||
const uint8_t **serial_number, size_t *serial_number_len,
|
||||
int *pke_algor, const uint8_t **params, size_t *params_len,// SM2加密只使用SM3,没有默认参数,但是ECIES可能有
|
||||
int *pke_algor, const uint8_t **params, size_t *params_len,// sm2encrypt has no params, but ECIES might have params
|
||||
const uint8_t **enced_key, size_t *enced_key_len,
|
||||
const uint8_t **in, size_t *inlen);
|
||||
int cms_recipient_info_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *d, size_t dlen);
|
||||
@@ -452,35 +452,29 @@ int cms_key_agreement_info_print(FILE *fp, int fmt, int ind, const char *label,
|
||||
|
||||
|
||||
|
||||
// 下面是公开API
|
||||
// 公开API的设计考虑:
|
||||
// 1. 不需要调用其他函数
|
||||
// 2. 在逻辑上容易理解
|
||||
// 3. 将cms,cmslen看做对象
|
||||
|
||||
|
||||
// 生成ContentInfo, type == data
|
||||
// generate ContentInfo, type == data
|
||||
int cms_set_data(uint8_t *cms, size_t *cmslen,
|
||||
const uint8_t *d, size_t dlen);
|
||||
|
||||
int cms_encrypt(
|
||||
uint8_t *cms, size_t *cmslen, // 输出的ContentInfo (type encryptedData)
|
||||
int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, // 对称加密算法、密钥和IV
|
||||
int content_type, const uint8_t *content, size_t content_len, // 待加密的输入数据
|
||||
const uint8_t *shared_info1, size_t shared_info1_len, // 附加信息
|
||||
uint8_t *cms, size_t *cmslen,
|
||||
int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
int content_type, const uint8_t *content, size_t content_len,
|
||||
const uint8_t *shared_info1, size_t shared_info1_len,
|
||||
const uint8_t *shared_info2, size_t shared_info2_len);
|
||||
|
||||
int cms_decrypt(
|
||||
const uint8_t *cms, size_t cmslen, // 输入的ContentInfo (type encryptedData)
|
||||
int *enc_algor, const uint8_t *key, size_t keylen, // 解密密钥(我们不知道解密算法)
|
||||
int *content_type, uint8_t *content, size_t *content_len, // 输出的解密数据类型及数据
|
||||
const uint8_t **shared_info1, size_t *shared_info1_len, // 附加信息
|
||||
const uint8_t *cms, size_t cmslen, // should be ContentInfo (type encryptedData)
|
||||
int *enc_algor, const uint8_t *key, size_t keylen,
|
||||
int *content_type, uint8_t *content, size_t *content_len,
|
||||
const uint8_t **shared_info1, size_t *shared_info1_len,
|
||||
const uint8_t **shared_info2, size_t *shared_info2_len);
|
||||
|
||||
int cms_sign(
|
||||
uint8_t *cms, size_t *cms_len,
|
||||
const CMS_CERTS_AND_KEY *signers, size_t signers_cnt, // 签名者的签名私钥和证书
|
||||
int content_type, const uint8_t *content, size_t content_len, // 待签名的输入数据
|
||||
const CMS_CERTS_AND_KEY *signers, size_t signers_cnt,
|
||||
int content_type, const uint8_t *content, size_t content_len,
|
||||
const uint8_t *crls, size_t crls_len);
|
||||
|
||||
int cms_verify(
|
||||
@@ -494,17 +488,17 @@ int cms_verify(
|
||||
|
||||
int cms_envelop(
|
||||
uint8_t *cms, size_t *cms_len,
|
||||
const uint8_t *rcpt_certs, size_t rcpt_certs_len, // 接收方证书,注意这个参数的类型可以容纳多个证书,但是只有在一个接受者时对调用方最方便
|
||||
int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, // 对称加密算法及参数
|
||||
int content_type, const uint8_t *content, size_t content_len, // 待加密的输入数据
|
||||
const uint8_t *shared_info1, size_t shared_info1_len, // 附加输入信息
|
||||
const uint8_t *rcpt_certs, size_t rcpt_certs_len,
|
||||
int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
int content_type, const uint8_t *content, size_t content_len,
|
||||
const uint8_t *shared_info1, size_t shared_info1_len,
|
||||
const uint8_t *shared_info2, size_t shared_info2_len);
|
||||
|
||||
int cms_deenvelop(
|
||||
const uint8_t *cms, size_t cms_len,
|
||||
const SM2_KEY *rcpt_key, const uint8_t *rcpt_cert, size_t rcpt_cert_len, // 接收方的解密私钥和对应的证书,注意只需要一个解密方
|
||||
const SM2_KEY *rcpt_key, const uint8_t *rcpt_cert, size_t rcpt_cert_len,
|
||||
int *content_type, uint8_t *content, size_t *content_len,
|
||||
const uint8_t **rcpt_infos, size_t *rcpt_infos_len, // 解析得到,用于显示
|
||||
const uint8_t **rcpt_infos, size_t *rcpt_infos_len,
|
||||
const uint8_t **shared_info1, size_t *shared_info1_len,
|
||||
const uint8_t **shared_info2, size_t *shared_info2_len);
|
||||
|
||||
@@ -531,7 +525,7 @@ int cms_deenvelop_and_verify(
|
||||
const uint8_t **shared_info1, size_t *shared_info1_len,
|
||||
const uint8_t **shared_info2, size_t *shared_info2_len);
|
||||
|
||||
// 生成ContentInfo, type == keyAgreementInfo
|
||||
// create ContentInfo, type == keyAgreementInfo
|
||||
int cms_set_key_agreement_info(
|
||||
uint8_t *cms, size_t *cms_len,
|
||||
const SM2_KEY *temp_public_key_r,
|
||||
|
||||
58
thirdparty/GmSSL-3.1.1/include/gmssl/des.h
vendored
58
thirdparty/GmSSL-3.1.1/include/gmssl/des.h
vendored
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
/* FIPS PUB 46-3 "Data Encryption Standard (DES)" */
|
||||
|
||||
#ifndef GMSSL_DES_H
|
||||
#define GMSSL_DES_H
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define DES_KEY_BITS 56
|
||||
#define DES_BLOCK_BITS 64
|
||||
#define DES_KEY_SIZE ((DES_KEY_BITS)/7)
|
||||
#define DES_BLOCK_SIZE (DES_BLOCK_BITS/8)
|
||||
|
||||
#define DES_RK_BITS 48
|
||||
#define DES_RK_SIZE (DES_RK_BITS/8)
|
||||
#define DES_ROUNDS 16
|
||||
|
||||
#define DES_EDE_KEY_SIZE (DES_KEY_SIZE * 3)
|
||||
|
||||
typedef struct {
|
||||
uint64_t rk[DES_ROUNDS];
|
||||
} DES_KEY;
|
||||
|
||||
void des_set_encrypt_key(DES_KEY *key, const uint8_t raw_key[DES_KEY_SIZE]);
|
||||
void des_set_decrypt_key(DES_KEY *key, const uint8_t raw_key[DES_KEY_SIZE]);
|
||||
void des_encrypt(DES_KEY *key, const uint8_t in[DES_BLOCK_SIZE], uint8_t out[DES_BLOCK_SIZE]);
|
||||
|
||||
|
||||
typedef struct {
|
||||
DES_KEY K[3];
|
||||
} DES_EDE_KEY;
|
||||
|
||||
void des_ede_set_encrypt_key(DES_EDE_KEY *key, const uint8_t raw_key[DES_EDE_KEY_SIZE]);
|
||||
void des_ede_set_decrypt_key(DES_EDE_KEY *key, const uint8_t raw_key[DES_EDE_KEY_SIZE]);
|
||||
void des_ede_encrypt(DES_EDE_KEY *key, const uint8_t in[DES_BLOCK_SIZE], uint8_t out[DES_BLOCK_SIZE]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
18
thirdparty/GmSSL-3.1.1/include/gmssl/digest.h
vendored
18
thirdparty/GmSSL-3.1.1/include/gmssl/digest.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -16,12 +16,12 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#ifdef ENABLE_BROKEN_CRYPTO
|
||||
#include <gmssl/md5.h>
|
||||
#ifdef ENABLE_SHA1
|
||||
#include <gmssl/sha1.h>
|
||||
#endif
|
||||
#ifdef ENABLE_SHA2
|
||||
#include <gmssl/sha2.h>
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -39,14 +39,15 @@ typedef struct DIGEST_CTX DIGEST_CTX;
|
||||
struct DIGEST_CTX {
|
||||
union {
|
||||
SM3_CTX sm3_ctx;
|
||||
#ifdef ENABLE_BROKEN_CRYPTO
|
||||
MD5_CTX md5_ctx;
|
||||
#ifdef ENABLE_SHA1
|
||||
SHA1_CTX sha1_ctx;
|
||||
#endif
|
||||
#ifdef ENABLE_SHA2
|
||||
SHA224_CTX sha224_ctx;
|
||||
SHA256_CTX sha256_ctx;
|
||||
SHA384_CTX sha384_ctx;
|
||||
SHA512_CTX sha512_ctx;
|
||||
#endif
|
||||
} u;
|
||||
const DIGEST *digest;
|
||||
};
|
||||
@@ -62,16 +63,17 @@ struct DIGEST {
|
||||
};
|
||||
|
||||
const DIGEST *DIGEST_sm3(void);
|
||||
#ifdef ENABLE_BROKEN_CRYPTO
|
||||
const DIGEST *DIGEST_md5(void);
|
||||
#ifdef ENABLE_SHA1
|
||||
const DIGEST *DIGEST_sha1(void);
|
||||
#endif
|
||||
#ifdef ENABLE_SHA2
|
||||
const DIGEST *DIGEST_sha224(void);
|
||||
const DIGEST *DIGEST_sha256(void);
|
||||
const DIGEST *DIGEST_sha384(void);
|
||||
const DIGEST *DIGEST_sha512(void);
|
||||
const DIGEST *DIGEST_sha512_224(void);
|
||||
const DIGEST *DIGEST_sha512_256(void);
|
||||
#endif
|
||||
|
||||
const DIGEST *digest_from_name(const char *name);
|
||||
const char *digest_name(const DIGEST *digest);
|
||||
|
||||
1
thirdparty/GmSSL-3.1.1/include/gmssl/ec.h
vendored
1
thirdparty/GmSSL-3.1.1/include/gmssl/ec.h
vendored
@@ -11,7 +11,6 @@
|
||||
#ifndef GMSSL_EC_H
|
||||
#define GMSSL_EC_H
|
||||
|
||||
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
(uint64_t)(p)[7])
|
||||
|
||||
|
||||
// 注意:PUTU32(buf, val++) 会出错!
|
||||
// WARNING: must not write PUTU32(buf, val++)
|
||||
#define PUTU16(p,V) \
|
||||
((p)[0] = (uint8_t)((V) >> 8), \
|
||||
(p)[1] = (uint8_t)(V))
|
||||
|
||||
8
thirdparty/GmSSL-3.1.1/include/gmssl/error.h
vendored
8
thirdparty/GmSSL-3.1.1/include/gmssl/error.h
vendored
@@ -33,16 +33,16 @@ extern "C" {
|
||||
#define DEBUG 1
|
||||
|
||||
#define warning_print() \
|
||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __func__); } while (0)
|
||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0)
|
||||
|
||||
#define error_print() \
|
||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __func__); } while (0)
|
||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0)
|
||||
|
||||
#define error_print_msg(fmt, ...) \
|
||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); } while (0)
|
||||
do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__); } while (0)
|
||||
|
||||
#define error_puts(str) \
|
||||
do { if (DEBUG) fprintf(stderr, "%s: %d: %s: %s", __FILE__, __LINE__, __func__, str); } while (0)
|
||||
do { if (DEBUG) fprintf(stderr, "%s: %d: %s: %s\n", __FILE__, __LINE__, __FUNCTION__, str); } while (0)
|
||||
|
||||
|
||||
void print_der(const uint8_t *in, size_t inlen);
|
||||
|
||||
2
thirdparty/GmSSL-3.1.1/include/gmssl/file.h
vendored
2
thirdparty/GmSSL-3.1.1/include/gmssl/file.h
vendored
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
|
||||
73
thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h
vendored
73
thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h
vendored
@@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GMSSL_GCM_H
|
||||
#define GMSSL_GCM_H
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <gmssl/gf128.h>
|
||||
#include <gmssl/block_cipher.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define GCM_IV_MIN_SIZE 1
|
||||
#define GCM_IV_MAX_SIZE ((uint64_t)(1 << (64-3)))
|
||||
#define GCM_IV_DEFAULT_BITS 96
|
||||
#define GCM_IV_DEFAULT_SIZE 12
|
||||
|
||||
#define GCM_MIN_AAD_SIZE 0
|
||||
#define GCM_MAX_AAD_SIZE ((uint64_t)(1 << (64-3)))
|
||||
|
||||
#define GCM_MIN_PLAINTEXT_SIZE 0
|
||||
#define GCM_MAX_PLAINTEXT_SIZE ((((uint64_t)1 << 39) - 256) >> 3)
|
||||
|
||||
|
||||
#define GHASH_SIZE (16)
|
||||
|
||||
|
||||
#define GCM_IS_LITTLE_ENDIAN 1
|
||||
|
||||
|
||||
void ghash(const uint8_t h[16], const uint8_t *aad, size_t aadlen,
|
||||
const uint8_t *c, size_t clen, uint8_t out[16]);
|
||||
|
||||
typedef struct {
|
||||
gf128_t H;
|
||||
gf128_t X;
|
||||
size_t aadlen;
|
||||
size_t clen;
|
||||
uint8_t block[16];
|
||||
size_t num;
|
||||
} GHASH_CTX;
|
||||
|
||||
void ghash_init(GHASH_CTX *ctx, const uint8_t h[16], const uint8_t *aad, size_t aadlen);
|
||||
void ghash_update(GHASH_CTX *ctx, const uint8_t *c, size_t clen);
|
||||
void ghash_finish(GHASH_CTX *ctx, uint8_t out[16]);
|
||||
|
||||
|
||||
int gcm_encrypt(const BLOCK_CIPHER_KEY *key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
uint8_t *out, size_t taglen, uint8_t *tag);
|
||||
|
||||
int gcm_decrypt(const BLOCK_CIPHER_KEY *key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
const uint8_t *tag, size_t taglen, uint8_t *out);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
35
thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h
vendored
35
thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,11 +7,7 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
/* GF(2^128) defined by f(x) = x^128 + x^7 + x^2 + x + 1
|
||||
* A + B mod f(x) = a xor b
|
||||
* A * 2 mod f(x)
|
||||
*/
|
||||
// GF(2^128) defined by f(x) = x^128 + x^7 + x^2 + x + 1
|
||||
|
||||
#ifndef GMSSL_GF128_H
|
||||
#define GMSSL_GF128_H
|
||||
@@ -27,24 +23,19 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//typedef unsigned __int128 gf128_t;
|
||||
|
||||
typedef struct {
|
||||
uint64_t hi;
|
||||
uint64_t lo;
|
||||
} gf128_t;
|
||||
typedef uint64_t gf128_t[2];
|
||||
|
||||
|
||||
// Note: send by value is comptabile with uint128_t and sse2
|
||||
gf128_t gf128_from_hex(const char *s);
|
||||
int gf128_equ_hex(gf128_t a, const char *s);
|
||||
gf128_t gf128_zero(void);
|
||||
gf128_t gf128_add(gf128_t a, gf128_t b);
|
||||
gf128_t gf128_mul(gf128_t a, gf128_t b);
|
||||
gf128_t gf128_mul2(gf128_t a);
|
||||
gf128_t gf128_from_bytes(const uint8_t p[16]);
|
||||
void gf128_to_bytes(gf128_t a, uint8_t p[16]);
|
||||
int gf128_print(FILE *fp, int fmt ,int ind, const char *label, gf128_t a);
|
||||
void gf128_set_zero(gf128_t r);
|
||||
void gf128_set_one(gf128_t r);
|
||||
void gf128_add(gf128_t r, const gf128_t a, const gf128_t b);
|
||||
void gf128_mul(gf128_t r, const gf128_t a, const gf128_t b);
|
||||
void gf128_mul_by_2(gf128_t r, const gf128_t a);
|
||||
void gf128_from_bytes(gf128_t r, const uint8_t p[16]);
|
||||
void gf128_to_bytes(const gf128_t a, uint8_t p[16]);
|
||||
int gf128_from_hex(gf128_t r, const char *s);
|
||||
int gf128_equ_hex(const gf128_t a, const char *s);
|
||||
int gf128_print(FILE *fp, int fmt, int ind, const char *label, const gf128_t a);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
49
thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h
vendored
Normal file
49
thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_GHASH_H
|
||||
#define GMSSL_GHASH_H
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <gmssl/gf128.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define GHASH_SIZE (16)
|
||||
|
||||
|
||||
// h = ENC_k(0^128)
|
||||
void ghash(const uint8_t h[16], const uint8_t *aad, size_t aadlen,
|
||||
const uint8_t *c, size_t clen, uint8_t out[16]);
|
||||
|
||||
typedef struct {
|
||||
gf128_t H;
|
||||
gf128_t X;
|
||||
size_t aadlen;
|
||||
size_t clen;
|
||||
uint8_t block[16];
|
||||
size_t num;
|
||||
} GHASH_CTX;
|
||||
|
||||
void ghash_init(GHASH_CTX *ctx, const uint8_t h[16], const uint8_t *aad, size_t aadlen);
|
||||
void ghash_update(GHASH_CTX *ctx, const uint8_t *c, size_t clen);
|
||||
void ghash_finish(GHASH_CTX *ctx, uint8_t out[16]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
79
thirdparty/GmSSL-3.1.1/include/gmssl/hash_drbg.h
vendored
79
thirdparty/GmSSL-3.1.1/include/gmssl/hash_drbg.h
vendored
@@ -1,79 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
/* NIST SP800-90A Rev.1 "Recommendation for Random Number Generation
|
||||
* Using Deterministic Random Bit Generators", 10.1.1 Hash_DRBG */
|
||||
|
||||
#ifndef GMSSL_HASH_DRBG_H
|
||||
#define GMSSL_HASH_DRBG_H
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <gmssl/digest.h>
|
||||
|
||||
|
||||
/* seedlen for hash_drgb, table 2 of nist sp 800-90a rev.1 */
|
||||
#define HASH_DRBG_SM3_SEED_BITS 440 /* 55 bytes */
|
||||
#define HASH_DRBG_SHA1_SEED_BITS 440
|
||||
#define HASH_DRBG_SHA224_SEED_BITS 440
|
||||
#define HASH_DRBG_SHA512_224_SEED_BITS 440
|
||||
#define HASH_DRBG_SHA256_SEED_BITS 440
|
||||
#define HASH_DRBG_SHA512_256_SEED_BITS 440
|
||||
#define HASH_DRBG_SHA384_SEED_BITS 888 /* 110 bytes */
|
||||
#define HASH_DRBG_SHA512_SEED_BITS 888
|
||||
#define HASH_DRBG_MAX_SEED_BITS 888
|
||||
|
||||
#define HASH_DRBG_SM3_SEED_SIZE (HASH_DRBG_SM3_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA1_SEED_SIZE (HASH_DRBG_SHA1_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA224_SEED_SIZE (HASH_DRBG_SHA224_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA512_224_SEED_SIZE (HASH_DRBG_SHA512_224_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA256_SEED_SIZE (HASH_DRBG_SHA256_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA512_256_SEED_SIZE (HASH_DRBG_SHA512_256_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA384_SEED_SIZE (HASH_DRBG_SHA384_SEED_BITS/8)
|
||||
#define HASH_DRBG_SHA512_SEED_SIZE (HASH_DRBG_SHA512_SEED_BITS/8)
|
||||
#define HASH_DRBG_MAX_SEED_SIZE (HASH_DRBG_MAX_SEED_BITS/8)
|
||||
|
||||
#define HASH_DRBG_RESEED_INTERVAL ((uint64_t)1 << 48)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
const DIGEST *digest;
|
||||
uint8_t V[HASH_DRBG_MAX_SEED_SIZE];
|
||||
uint8_t C[HASH_DRBG_MAX_SEED_SIZE];
|
||||
size_t seedlen;
|
||||
uint64_t reseed_counter;
|
||||
} HASH_DRBG;
|
||||
|
||||
|
||||
int hash_drbg_init(HASH_DRBG *drbg,
|
||||
const DIGEST *digest,
|
||||
const uint8_t *entropy, size_t entropy_len,
|
||||
const uint8_t *nonce, size_t nonce_len,
|
||||
const uint8_t *personalstr, size_t personalstr_len);
|
||||
|
||||
int hash_drbg_reseed(HASH_DRBG *drbg,
|
||||
const uint8_t *entropy, size_t entropy_len,
|
||||
const uint8_t *additional, size_t additional_len);
|
||||
|
||||
int hash_drbg_generate(HASH_DRBG *drbg,
|
||||
const uint8_t *additional, size_t additional_len,
|
||||
size_t outlen, uint8_t *out);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
4
thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h
vendored
4
thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h
vendored
@@ -32,9 +32,9 @@ int hkdf_expand(const DIGEST *digest, const uint8_t *prk, size_t prklen,
|
||||
|
||||
int sm3_hkdf_extract(const uint8_t *salt, size_t saltlen,
|
||||
const uint8_t *ikm, size_t ikmlen,
|
||||
uint8_t *prk, size_t *prklen);
|
||||
uint8_t prk[32]);
|
||||
|
||||
int sm3_hkdf_expand(const uint8_t *prk, size_t prklen,
|
||||
int sm3_hkdf_expand(const uint8_t prk[32],
|
||||
const uint8_t *opt_info, size_t opt_infolen,
|
||||
size_t L, uint8_t *okm);
|
||||
|
||||
|
||||
48
thirdparty/GmSSL-3.1.1/include/gmssl/md5.h
vendored
48
thirdparty/GmSSL-3.1.1/include/gmssl/md5.h
vendored
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef GMSSL_MD5_H
|
||||
#define GMSSL_MD5_H
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define MD5_IS_BIG_ENDIAN 0
|
||||
|
||||
#define MD5_DIGEST_SIZE 16
|
||||
#define MD5_BLOCK_SIZE 64
|
||||
#define MD5_STATE_WORDS (MD5_BLOCK_SIZE/sizeof(uint32_t))
|
||||
|
||||
typedef struct {
|
||||
uint32_t state[MD5_STATE_WORDS];
|
||||
uint64_t nblocks;
|
||||
uint8_t block[MD5_BLOCK_SIZE];
|
||||
size_t num;
|
||||
} MD5_CTX;
|
||||
|
||||
|
||||
void md5_init(MD5_CTX *ctx);
|
||||
void md5_update(MD5_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void md5_finish(MD5_CTX *ctx, uint8_t dgst[MD5_DIGEST_SIZE]);
|
||||
void md5_digest(const uint8_t *data, size_t datalen, uint8_t dgst[MD5_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
2
thirdparty/GmSSL-3.1.1/include/gmssl/oid.h
vendored
2
thirdparty/GmSSL-3.1.1/include/gmssl/oid.h
vendored
@@ -147,7 +147,7 @@ enum {
|
||||
OID_aes192_cbc,
|
||||
OID_aes256_cbc,
|
||||
|
||||
OID_aes128, // 没有OID
|
||||
OID_aes128, // No OID
|
||||
|
||||
OID_ecdsa_with_sha1,
|
||||
OID_ecdsa_with_sha224,
|
||||
|
||||
12
thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h
vendored
12
thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -22,16 +22,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
PBKDF2 Public API
|
||||
|
||||
PBKDF2_MIN_ITER
|
||||
PBKDF2_DEFAULT_SALT_SIZE
|
||||
PBKDF2_MAX_SALT_SIZE
|
||||
|
||||
pbkdf2_hmac_sm3_genkey
|
||||
*/
|
||||
|
||||
|
||||
#define PBKDF2_MIN_ITER 10000
|
||||
#define PBKDF2_MAX_ITER (INT_MAX)
|
||||
|
||||
4
thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h
vendored
4
thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h
vendored
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
@@ -34,7 +34,7 @@ PBKDF2-params ::= SEQUENCE {
|
||||
otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
|
||||
},
|
||||
iterationCount INTEGER (1..MAX),
|
||||
keyLength INTEGER (1..MAX) OPTIONAL, -- 这个参数可以由函数指定
|
||||
keyLength INTEGER (1..MAX) OPTIONAL,
|
||||
prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1
|
||||
}
|
||||
|
||||
|
||||
3
thirdparty/GmSSL-3.1.1/include/gmssl/rand.h
vendored
3
thirdparty/GmSSL-3.1.1/include/gmssl/rand.h
vendored
@@ -13,7 +13,6 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <gmssl/api.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -22,7 +21,7 @@ extern "C" {
|
||||
|
||||
#define RAND_BYTES_MAX_SIZE (256)
|
||||
|
||||
_gmssl_export int rand_bytes(uint8_t *buf, size_t buflen);
|
||||
int rand_bytes(uint8_t *buf, size_t buflen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
40
thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h
vendored
40
thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h
vendored
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef GMSSL_RC4_H
|
||||
#define GMSSL_RC4_H
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define RC4_MIN_KEY_BITS 40
|
||||
#define RC4_STATE_NUM_WORDS 256
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t d[RC4_STATE_NUM_WORDS];
|
||||
} RC4_STATE;
|
||||
|
||||
void rc4_init(RC4_STATE *state, const uint8_t *key, size_t keylen);
|
||||
void rc4_generate_keystream(RC4_STATE *state, size_t outlen, uint8_t *out);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
73
thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h
vendored
73
thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -14,29 +14,13 @@
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm2.h>
|
||||
#include <gmssl/sm4.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
SDF Public API
|
||||
|
||||
sdf_load_library
|
||||
sdf_unload_library
|
||||
|
||||
SDF_DEVICE
|
||||
sdf_open_device
|
||||
sdf_close_device
|
||||
sdf_print_device_info
|
||||
sdf_rand_bytes
|
||||
sdf_load_sign_key
|
||||
|
||||
SDF_KEY
|
||||
sdf_sign
|
||||
sdf_release_key
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
void *handle;
|
||||
@@ -46,19 +30,60 @@ typedef struct {
|
||||
} SDF_DEVICE;
|
||||
|
||||
typedef struct {
|
||||
SM2_KEY public_key;
|
||||
void *session;
|
||||
} SDF_DIGEST_CTX;
|
||||
|
||||
typedef struct {
|
||||
void *session;
|
||||
void *handle;
|
||||
} SDF_KEY;
|
||||
|
||||
typedef struct {
|
||||
SDF_KEY key;
|
||||
uint8_t iv[SM4_BLOCK_SIZE];
|
||||
uint8_t block[SM4_BLOCK_SIZE];
|
||||
size_t block_nbytes;
|
||||
} SDF_CBC_CTX;
|
||||
|
||||
typedef struct {
|
||||
void *session;
|
||||
int index;
|
||||
} SDF_KEY;
|
||||
} SDF_PRIVATE_KEY;
|
||||
|
||||
typedef struct {
|
||||
SM3_CTX sm3_ctx;
|
||||
SM3_CTX saved_sm3_ctx;
|
||||
SDF_PRIVATE_KEY key;
|
||||
} SDF_SIGN_CTX;
|
||||
|
||||
|
||||
int sdf_load_library(const char *so_path, const char *vendor);
|
||||
int sdf_open_device(SDF_DEVICE *dev);
|
||||
int sdf_print_device_info(FILE *fp, int fmt, int ind, const char *lable, SDF_DEVICE *dev);
|
||||
int sdf_rand_bytes(SDF_DEVICE *dev, uint8_t *buf, size_t len);
|
||||
int sdf_load_sign_key(SDF_DEVICE *dev, SDF_KEY *key, int index, const char *pass);
|
||||
int sdf_sign(SDF_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen);
|
||||
int sdf_release_key(SDF_KEY *key);
|
||||
int sdf_digest_init(SDF_DIGEST_CTX *ctx, SDF_DEVICE *dev);
|
||||
int sdf_digest_update(SDF_DIGEST_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sdf_digest_finish(SDF_DIGEST_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]);
|
||||
int sdf_digest_reset(SDF_DIGEST_CTX *ctx);
|
||||
int sdf_digest_cleanup(SDF_DIGEST_CTX *ctx);
|
||||
int sdf_generate_key(SDF_DEVICE *dev, SDF_KEY *key, const SM2_KEY *sm2_key, uint8_t *wrappedkey, size_t *wrappedkey_len);
|
||||
int sdf_import_key(SDF_DEVICE *dev, unsigned int key_index, const char *pass, const uint8_t *wrappedkey, size_t wrappedkey_len, SDF_KEY *key); // XXX: Is `pass` needed? see impl in sdf.c
|
||||
int sdf_cbc_encrypt_init(SDF_CBC_CTX *ctx, const SDF_KEY *key, const uint8_t iv[16]);
|
||||
int sdf_cbc_encrypt_update(SDF_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sdf_cbc_encrypt_finish(SDF_CBC_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
int sdf_cbc_decrypt_init(SDF_CBC_CTX *ctx, const SDF_KEY *key, const uint8_t iv[16]);
|
||||
int sdf_cbc_decrypt_update(SDF_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sdf_cbc_decrypt_finish(SDF_CBC_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
int sdf_destroy_key(SDF_KEY *key);
|
||||
int sdf_export_sign_public_key(SDF_DEVICE *dev, int key_index, SM2_KEY *public_key);
|
||||
int sdf_export_encrypt_public_key(SDF_DEVICE *dev, int key_index, SM2_KEY *public_key);
|
||||
int sdf_load_private_key(SDF_DEVICE *dev, SDF_PRIVATE_KEY *key, int key_index, const char *pass);
|
||||
int sdf_decrypt(const SDF_PRIVATE_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sdf_sign(const SDF_PRIVATE_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen);
|
||||
int sdf_sign_init(SDF_SIGN_CTX *ctx, const SDF_PRIVATE_KEY *key, const char *id, size_t idlen);
|
||||
int sdf_sign_update(SDF_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sdf_sign_finish(SDF_SIGN_CTX *ctx, uint8_t *sig, size_t *siglen);
|
||||
int sdf_sign_reset(SDF_SIGN_CTX *ctx);
|
||||
int sdf_release_private_key(SDF_PRIVATE_KEY *key);
|
||||
int sdf_close_device(SDF_DEVICE *dev);
|
||||
void sdf_unload_library(void);
|
||||
|
||||
|
||||
3
thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h
vendored
3
thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -36,7 +36,6 @@ typedef struct {
|
||||
void sha1_init(SHA1_CTX *ctx);
|
||||
void sha1_update(SHA1_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sha1_finish(SHA1_CTX *ctx, uint8_t dgst[SHA1_DIGEST_SIZE]);
|
||||
void sha1_digest(const uint8_t *data, size_t datalen, uint8_t dgst[SHA1_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
10
thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h
vendored
10
thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -38,8 +38,6 @@ typedef struct {
|
||||
void sha224_init(SHA224_CTX *ctx);
|
||||
void sha224_update(SHA224_CTX *ctx, const uint8_t* data, size_t datalen);
|
||||
void sha224_finish(SHA224_CTX *ctx, uint8_t dgst[SHA224_DIGEST_SIZE]);
|
||||
void sha224_digest(const uint8_t *data, size_t datalen,
|
||||
uint8_t dgst[SHA224_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#define SHA256_DIGEST_SIZE 32
|
||||
@@ -56,8 +54,6 @@ typedef struct {
|
||||
void sha256_init(SHA256_CTX *ctx);
|
||||
void sha256_update(SHA256_CTX *ctx, const uint8_t* data, size_t datalen);
|
||||
void sha256_finish(SHA256_CTX *ctx, uint8_t dgst[SHA256_DIGEST_SIZE]);
|
||||
void sha256_digest(const uint8_t *data, size_t datalen,
|
||||
uint8_t dgst[SHA256_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#define SHA384_DIGEST_SIZE 48
|
||||
@@ -74,8 +70,6 @@ typedef struct {
|
||||
void sha384_init(SHA384_CTX *ctx);
|
||||
void sha384_update(SHA384_CTX *ctx, const uint8_t* data, size_t datalen);
|
||||
void sha384_finish(SHA384_CTX *ctx, uint8_t dgst[SHA384_DIGEST_SIZE]);
|
||||
void sha384_digest(const uint8_t *data, size_t datalen,
|
||||
uint8_t dgst[SHA384_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#define SHA512_DIGEST_SIZE 64
|
||||
@@ -92,8 +86,6 @@ typedef struct {
|
||||
void sha512_init(SHA512_CTX *ctx);
|
||||
void sha512_update(SHA512_CTX *ctx, const uint8_t* data, size_t datalen);
|
||||
void sha512_finish(SHA512_CTX *ctx, uint8_t dgst[SHA512_DIGEST_SIZE]);
|
||||
void sha512_digest(const uint8_t *data, size_t datalen,
|
||||
uint8_t dgst[SHA512_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
92
thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h
vendored
92
thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h
vendored
@@ -1,92 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef GMSSL_SHA3_H
|
||||
#define GMSSL_SHA3_H
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define SHA3_KECCAK_P_SIZE (1600/8)
|
||||
|
||||
#define SHA3_224_DIGEST_SIZE (224/8)
|
||||
#define SHA3_256_DIGEST_SIZE (256/8)
|
||||
#define SHA3_384_DIGEST_SIZE (384/8)
|
||||
#define SHA3_512_DIGEST_SIZE (512/8)
|
||||
|
||||
#define SHA3_224_CAPACITY (SHA3_224_DIGEST_SIZE * 2)
|
||||
#define SHA3_256_CAPACITY (SHA3_256_DIGEST_SIZE * 2)
|
||||
#define SHA3_384_CAPACITY (SHA3_384_DIGEST_SIZE * 2)
|
||||
#define SHA3_512_CAPACITY (SHA3_512_DIGEST_SIZE * 2)
|
||||
|
||||
#define SHA3_224_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 144
|
||||
#define SHA3_256_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 136
|
||||
#define SHA3_384_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 104
|
||||
#define SHA3_512_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 72
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint64_t A[5][5];
|
||||
uint8_t buf[SHA3_224_BLOCK_SIZE];
|
||||
int num;
|
||||
} SHA3_224_CTX;
|
||||
|
||||
void sha3_224_init(SHA3_224_CTX *ctx);
|
||||
void sha3_224_update(SHA3_224_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sha3_224_finish(SHA3_224_CTX *ctx, uint8_t dgst[SHA3_224_DIGEST_SIZE]);
|
||||
|
||||
typedef struct {
|
||||
uint64_t A[5][5];
|
||||
uint8_t buf[SHA3_256_BLOCK_SIZE];
|
||||
int num;
|
||||
} SHA3_256_CTX;
|
||||
|
||||
void sha3_256_init(SHA3_256_CTX *ctx);
|
||||
void sha3_256_update(SHA3_256_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sha3_256_finish(SHA3_256_CTX *ctx, uint8_t dgst[SHA3_256_DIGEST_SIZE]);
|
||||
|
||||
typedef struct {
|
||||
uint64_t A[5][5];
|
||||
uint8_t buf[SHA3_384_BLOCK_SIZE];
|
||||
int num;
|
||||
} SHA3_384_CTX;
|
||||
|
||||
void sha3_384_init(SHA3_384_CTX *ctx);
|
||||
void sha3_384_update(SHA3_384_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sha3_384_finish(SHA3_384_CTX *ctx, uint8_t dgst[SHA3_384_DIGEST_SIZE]);
|
||||
|
||||
typedef struct {
|
||||
uint64_t A[5][5];
|
||||
uint8_t buf[SHA3_512_BLOCK_SIZE];
|
||||
int num;
|
||||
} SHA3_512_CTX;
|
||||
|
||||
void sha3_512_init(SHA3_512_CTX *ctx);
|
||||
void sha3_512_update(SHA3_512_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sha3_512_finish(SHA3_512_CTX *ctx, uint8_t dgst[SHA3_512_DIGEST_SIZE]);
|
||||
|
||||
void sha3_shake128(const uint8_t *in, size_t *inlen, size_t outlen, uint8_t *out);
|
||||
void sha3_shake256(const uint8_t *in, size_t *inlen, size_t outlen, uint8_t *out);
|
||||
void sha3_keccak_p(uint8_t state[SHA3_KECCAK_P_SIZE]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
38
thirdparty/GmSSL-3.1.1/include/gmssl/skf.h
vendored
38
thirdparty/GmSSL-3.1.1/include/gmssl/skf.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -22,42 +22,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
SKF Public API
|
||||
|
||||
skf_load_library
|
||||
skf_unload_library
|
||||
skf_list_devices
|
||||
skf_print_device_info
|
||||
|
||||
SKF_DEVICE
|
||||
skf_open_device
|
||||
skf_close_deivce
|
||||
skf_set_label
|
||||
skf_change_authkey
|
||||
skf_list_apps
|
||||
skf_create_app
|
||||
skf_delete_app
|
||||
skf_change_app_admin_pin
|
||||
skf_change_app_user_pin
|
||||
skf_unblock_user_pin
|
||||
skf_list_objects
|
||||
skf_import_object
|
||||
skf_export_object
|
||||
skf_delete_object
|
||||
skf_list_containers
|
||||
skf_create_container
|
||||
skf_delete_container
|
||||
skf_import_sign_cert
|
||||
skf_export_sign_cert
|
||||
skf_rand_bytes
|
||||
skf_load_sign_key
|
||||
|
||||
SKF_KEY
|
||||
skf_sign
|
||||
skf_release_key
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
void *handle;
|
||||
char manufacturer[65];
|
||||
|
||||
311
thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h
vendored
311
thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -16,205 +16,34 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#include <gmssl/api.h>
|
||||
#include <gmssl/sm2_z256.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
SM2 Public API
|
||||
|
||||
SM2_DEFAULT_ID
|
||||
SM2_MAX_ID_LENGTH
|
||||
SM2_MAX_SIGNATURE_SIZE
|
||||
SM2_MAX_PLAINTEXT_SIZE
|
||||
SM2_MAX_CIPHERTEXT_SIZE
|
||||
|
||||
SM2_KEY
|
||||
sm2_key_generate
|
||||
sm2_private_key_info_encrypt_to_der
|
||||
sm2_private_key_info_decrypt_from_der
|
||||
sm2_private_key_info_encrypt_to_pem
|
||||
sm2_private_key_info_decrypt_from_pem
|
||||
sm2_public_key_info_to_der
|
||||
sm2_public_key_info_from_der
|
||||
sm2_public_key_info_to_pem
|
||||
sm2_public_key_info_from_pem
|
||||
|
||||
sm2_sign
|
||||
sm2_verify
|
||||
sm2_encrypt
|
||||
sm2_decrypt
|
||||
sm2_ecdh
|
||||
|
||||
SM2_SIGN_CTX
|
||||
sm2_sign_init
|
||||
sm2_sign_update
|
||||
sm2_sign_finish
|
||||
sm2_verify_init
|
||||
sm2_verify_update
|
||||
sm2_verify_finish
|
||||
*/
|
||||
|
||||
typedef uint64_t SM2_BN[8];
|
||||
|
||||
int sm2_bn_is_zero(const SM2_BN a);
|
||||
int sm2_bn_is_one(const SM2_BN a);
|
||||
int sm2_bn_is_odd(const SM2_BN a);
|
||||
int sm2_bn_cmp(const SM2_BN a, const SM2_BN b);
|
||||
int sm2_bn_from_hex(SM2_BN r, const char hex[64]);
|
||||
int sm2_bn_from_asn1_integer(SM2_BN r, const uint8_t *d, size_t dlen);
|
||||
int sm2_bn_equ_hex(const SM2_BN a, const char *hex);
|
||||
int sm2_bn_print(FILE *fp, int fmt, int ind, const char *label, const SM2_BN a);
|
||||
int sm2_bn_rshift(SM2_BN ret, const SM2_BN a, unsigned int nbits);
|
||||
|
||||
void sm2_bn_to_bytes(const SM2_BN a, uint8_t out[32]);
|
||||
void sm2_bn_from_bytes(SM2_BN r, const uint8_t in[32]);
|
||||
void sm2_bn_to_hex(const SM2_BN a, char hex[64]);
|
||||
void sm2_bn_to_bits(const SM2_BN a, char bits[256]);
|
||||
void sm2_bn_set_word(SM2_BN r, uint32_t a);
|
||||
void sm2_bn_add(SM2_BN r, const SM2_BN a, const SM2_BN b);
|
||||
void sm2_bn_sub(SM2_BN ret, const SM2_BN a, const SM2_BN b);
|
||||
int sm2_bn_rand_range(SM2_BN r, const SM2_BN range);
|
||||
|
||||
#define sm2_bn_init(r) memset((r),0,sizeof(SM2_BN))
|
||||
#define sm2_bn_set_zero(r) memset((r),0,sizeof(SM2_BN))
|
||||
#define sm2_bn_set_one(r) sm2_bn_set_word((r),1)
|
||||
#define sm2_bn_copy(r,a) memcpy((r),(a),sizeof(SM2_BN))
|
||||
#define sm2_bn_clean(r) memset((r),0,sizeof(SM2_BN))
|
||||
|
||||
|
||||
// GF(p)
|
||||
typedef SM2_BN SM2_Fp;
|
||||
|
||||
void sm2_fp_add(SM2_Fp r, const SM2_Fp a, const SM2_Fp b);
|
||||
void sm2_fp_sub(SM2_Fp r, const SM2_Fp a, const SM2_Fp b);
|
||||
void sm2_fp_mul(SM2_Fp r, const SM2_Fp a, const SM2_Fp b);
|
||||
void sm2_fp_exp(SM2_Fp r, const SM2_Fp a, const SM2_Fp e);
|
||||
void sm2_fp_dbl(SM2_Fp r, const SM2_Fp a);
|
||||
void sm2_fp_tri(SM2_Fp r, const SM2_Fp a);
|
||||
void sm2_fp_div2(SM2_Fp r, const SM2_Fp a);
|
||||
void sm2_fp_neg(SM2_Fp r, const SM2_Fp a);
|
||||
void sm2_fp_sqr(SM2_Fp r, const SM2_Fp a);
|
||||
void sm2_fp_inv(SM2_Fp r, const SM2_Fp a);
|
||||
int sm2_fp_rand(SM2_Fp r);
|
||||
|
||||
int sm2_fp_sqrt(SM2_Fp r, const SM2_Fp a);
|
||||
|
||||
#define sm2_fp_init(r) sm2_bn_init(r)
|
||||
#define sm2_fp_set_zero(r) sm2_bn_set_zero(r)
|
||||
#define sm2_fp_set_one(r) sm2_bn_set_one(r)
|
||||
#define sm2_fp_copy(r,a) sm2_bn_copy(r,a)
|
||||
#define sm2_fp_clean(r) sm2_bn_clean(r)
|
||||
|
||||
// GF(n)
|
||||
typedef SM2_BN SM2_Fn;
|
||||
|
||||
void sm2_fn_add(SM2_Fn r, const SM2_Fn a, const SM2_Fn b);
|
||||
void sm2_fn_sub(SM2_Fn r, const SM2_Fn a, const SM2_Fn b);
|
||||
void sm2_fn_mul(SM2_Fn r, const SM2_Fn a, const SM2_Fn b);
|
||||
void sm2_fn_mul_word(SM2_Fn r, const SM2_Fn a, uint32_t b);
|
||||
void sm2_fn_exp(SM2_Fn r, const SM2_Fn a, const SM2_Fn e);
|
||||
void sm2_fn_neg(SM2_Fn r, const SM2_Fn a);
|
||||
void sm2_fn_sqr(SM2_Fn r, const SM2_Fn a);
|
||||
void sm2_fn_inv(SM2_Fn r, const SM2_Fn a);
|
||||
int sm2_fn_rand(SM2_Fn r);
|
||||
|
||||
#define sm2_fn_init(r) sm2_bn_init(r)
|
||||
#define sm2_fn_set_zero(r) sm2_bn_set_zero(r)
|
||||
#define sm2_fn_set_one(r) sm2_bn_set_one(r)
|
||||
#define sm2_fn_copy(r,a) sm2_bn_copy(r,a)
|
||||
#define sm2_fn_clean(r) sm2_bn_clean(r)
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM2_BN X;
|
||||
SM2_BN Y;
|
||||
SM2_BN Z;
|
||||
} SM2_JACOBIAN_POINT;
|
||||
|
||||
void sm2_jacobian_point_init(SM2_JACOBIAN_POINT *R);
|
||||
void sm2_jacobian_point_set_xy(SM2_JACOBIAN_POINT *R, const SM2_BN x, const SM2_BN y);
|
||||
void sm2_jacobian_point_get_xy(const SM2_JACOBIAN_POINT *P, SM2_BN x, SM2_BN y);
|
||||
void sm2_jacobian_point_neg(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P);
|
||||
void sm2_jacobian_point_dbl(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P);
|
||||
void sm2_jacobian_point_add(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P, const SM2_JACOBIAN_POINT *Q);
|
||||
void sm2_jacobian_point_sub(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P, const SM2_JACOBIAN_POINT *Q);
|
||||
void sm2_jacobian_point_mul(SM2_JACOBIAN_POINT *R, const SM2_BN k, const SM2_JACOBIAN_POINT *P);
|
||||
void sm2_jacobian_point_to_bytes(const SM2_JACOBIAN_POINT *P, uint8_t out[64]);
|
||||
void sm2_jacobian_point_from_bytes(SM2_JACOBIAN_POINT *P, const uint8_t in[64]);
|
||||
void sm2_jacobian_point_mul_generator(SM2_JACOBIAN_POINT *R, const SM2_BN k);
|
||||
void sm2_jacobian_point_mul_sum(SM2_JACOBIAN_POINT *R, const SM2_BN t, const SM2_JACOBIAN_POINT *P, const SM2_BN s);
|
||||
void sm2_jacobian_point_from_hex(SM2_JACOBIAN_POINT *P, const char hex[64 * 2]); // for testing only
|
||||
|
||||
int sm2_jacobian_point_is_at_infinity(const SM2_JACOBIAN_POINT *P);
|
||||
int sm2_jacobian_point_is_on_curve(const SM2_JACOBIAN_POINT *P);
|
||||
int sm2_jacobian_point_equ_hex(const SM2_JACOBIAN_POINT *P, const char hex[128]); // for testing only
|
||||
int sm2_jacobian_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_JACOBIAN_POINT *P);
|
||||
|
||||
#define sm2_jacobian_point_set_infinity(R) sm2_jacobian_point_init(R)
|
||||
#define sm2_jacobian_point_copy(R, P) memcpy((R), (P), sizeof(SM2_JACOBIAN_POINT))
|
||||
|
||||
typedef uint8_t sm2_bn_t[32];
|
||||
|
||||
typedef struct {
|
||||
uint8_t x[32];
|
||||
uint8_t y[32];
|
||||
} SM2_POINT;
|
||||
|
||||
#define sm2_point_init(P) memset((P),0,sizeof(SM2_POINT))
|
||||
#define sm2_point_set_infinity(P) sm2_point_init(P)
|
||||
int sm2_point_from_octets(SM2_POINT *P, const uint8_t *in, size_t inlen);
|
||||
void sm2_point_to_compressed_octets(const SM2_POINT *P, uint8_t out[33]);
|
||||
void sm2_point_to_uncompressed_octets(const SM2_POINT *P, uint8_t out[65]);
|
||||
|
||||
int sm2_point_from_x(SM2_POINT *P, const uint8_t x[32], int y);
|
||||
int sm2_point_from_xy(SM2_POINT *P, const uint8_t x[32], const uint8_t y[32]);
|
||||
int sm2_point_is_on_curve(const SM2_POINT *P);
|
||||
int sm2_point_is_at_infinity(const SM2_POINT *P);
|
||||
int sm2_point_add(SM2_POINT *R, const SM2_POINT *P, const SM2_POINT *Q);
|
||||
int sm2_point_sub(SM2_POINT *R, const SM2_POINT *P, const SM2_POINT *Q);
|
||||
int sm2_point_neg(SM2_POINT *R, const SM2_POINT *P);
|
||||
int sm2_point_dbl(SM2_POINT *R, const SM2_POINT *P);
|
||||
int sm2_point_mul(SM2_POINT *R, const uint8_t k[32], const SM2_POINT *P);
|
||||
int sm2_point_mul_generator(SM2_POINT *R, const uint8_t k[32]);
|
||||
int sm2_point_mul_sum(SM2_POINT *R, const uint8_t k[32], const SM2_POINT *P, const uint8_t s[32]); // R = k * P + s * G
|
||||
|
||||
/*
|
||||
RFC 5480 Elliptic Curve Cryptography Subject Public Key Information
|
||||
ECPoint ::= OCTET STRING
|
||||
*/
|
||||
#define SM2_POINT_MAX_SIZE (2 + 65)
|
||||
int sm2_point_to_der(const SM2_POINT *P, uint8_t **out, size_t *outlen);
|
||||
int sm2_point_from_der(SM2_POINT *P, const uint8_t **in, size_t *inlen);
|
||||
int sm2_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_POINT *P);
|
||||
int sm2_point_from_hash(SM2_POINT *R, const uint8_t *data, size_t datalen);
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM2_POINT public_key;
|
||||
uint8_t private_key[32];
|
||||
SM2_Z256_POINT public_key;
|
||||
sm2_z256_t private_key;
|
||||
} SM2_KEY;
|
||||
|
||||
|
||||
_gmssl_export int sm2_key_generate(SM2_KEY *key);
|
||||
int sm2_key_set_private_key(SM2_KEY *key, const uint8_t private_key[32]); // key->public_key will be replaced
|
||||
int sm2_key_set_public_key(SM2_KEY *key, const SM2_POINT *public_key); // key->private_key will be cleared // FIXME: support octets as input?
|
||||
int sm2_key_generate(SM2_KEY *key);
|
||||
int sm2_key_print(FILE *fp, int fmt, int ind, const char *label, const SM2_KEY *key);
|
||||
int sm2_key_set_private_key(SM2_KEY *key, const sm2_z256_t private_key);
|
||||
int sm2_key_set_public_key(SM2_KEY *key, const SM2_Z256_POINT *public_key);
|
||||
|
||||
int sm2_public_key_equ(const SM2_KEY *sm2_key, const SM2_KEY *pub_key);
|
||||
//int sm2_public_key_copy(SM2_KEY *sm2_key, const SM2_KEY *pub_key); // do we need this?
|
||||
int sm2_public_key_digest(const SM2_KEY *key, uint8_t dgst[32]);
|
||||
int sm2_public_key_print(FILE *fp, int fmt, int ind, const char *label, const SM2_KEY *pub_key);
|
||||
|
||||
|
||||
/*
|
||||
from RFC 5915
|
||||
|
||||
ECPrivateKey ::= SEQUENCE {
|
||||
version INTEGER, -- value MUST be (1)
|
||||
privateKey OCTET STRING, -- big endian encoding of integer 这里不是以INTEGER编码的,因此长度固定
|
||||
privateKey OCTET STRING, -- big endian encoding of integer, fixed length
|
||||
parameters [0] EXPLICIT ECParameters OPTIONAL,
|
||||
-- ONLY namedCurve OID is permitted, by RFC 5480
|
||||
-- MUST always include this field, by RFC 5915
|
||||
@@ -247,10 +76,10 @@ SubjectPublicKeyInfo ::= SEQUENCE {
|
||||
algorithm AlgorithmIdentifier,
|
||||
subjectPublicKey BIT STRING -- uncompressed octets of ECPoint }
|
||||
*/
|
||||
_gmssl_export int sm2_public_key_info_to_der(const SM2_KEY *a, uint8_t **out, size_t *outlen);
|
||||
_gmssl_export int sm2_public_key_info_from_der(SM2_KEY *a, const uint8_t **in, size_t *inlen);
|
||||
_gmssl_export int sm2_public_key_info_to_pem(const SM2_KEY *a, FILE *fp);
|
||||
_gmssl_export int sm2_public_key_info_from_pem(SM2_KEY *a, FILE *fp);
|
||||
int sm2_public_key_info_to_der(const SM2_KEY *a, uint8_t **out, size_t *outlen);
|
||||
int sm2_public_key_info_from_der(SM2_KEY *a, const uint8_t **in, size_t *inlen);
|
||||
int sm2_public_key_info_to_pem(const SM2_KEY *a, FILE *fp);
|
||||
int sm2_public_key_info_from_pem(SM2_KEY *a, FILE *fp);
|
||||
|
||||
/*
|
||||
PKCS #8 PrivateKeyInfo from RFC 5208
|
||||
@@ -278,13 +107,14 @@ EncryptedPrivateKeyInfo ::= SEQUENCE {
|
||||
encryptionAlgorithm EncryptionAlgorithmIdentifier, -- id-PBES2
|
||||
encryptedData OCTET STRING }
|
||||
*/
|
||||
_gmssl_export int sm2_private_key_info_encrypt_to_der(const SM2_KEY *key,
|
||||
int sm2_private_key_info_encrypt_to_der(const SM2_KEY *key,
|
||||
const char *pass, uint8_t **out, size_t *outlen);
|
||||
_gmssl_export int sm2_private_key_info_decrypt_from_der(SM2_KEY *key, const uint8_t **attrs, size_t *attrs_len,
|
||||
int sm2_private_key_info_decrypt_from_der(SM2_KEY *key, const uint8_t **attrs, size_t *attrs_len,
|
||||
const char *pass, const uint8_t **in, size_t *inlen);
|
||||
_gmssl_export int sm2_private_key_info_encrypt_to_pem(const SM2_KEY *key, const char *pass, FILE *fp);
|
||||
int sm2_private_key_info_encrypt_to_pem(const SM2_KEY *key, const char *pass, FILE *fp);
|
||||
// FIXME: #define default buffer size
|
||||
_gmssl_export int sm2_private_key_info_decrypt_from_pem(SM2_KEY *key, const char *pass, FILE *fp);
|
||||
int sm2_private_key_info_decrypt_from_pem(SM2_KEY *key, const char *pass, FILE *fp);
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -293,17 +123,31 @@ typedef struct {
|
||||
} SM2_SIGNATURE;
|
||||
|
||||
int sm2_do_sign(const SM2_KEY *key, const uint8_t dgst[32], SM2_SIGNATURE *sig);
|
||||
int sm2_do_sign_fast(const SM2_Fn d, const uint8_t dgst[32], SM2_SIGNATURE *sig);
|
||||
int sm2_do_verify(const SM2_KEY *key, const uint8_t dgst[32], const SM2_SIGNATURE *sig);
|
||||
|
||||
int sm2_fast_sign_compute_key(const SM2_KEY *key, sm2_z256_t fast_private);
|
||||
|
||||
typedef struct {
|
||||
sm2_z256_t k;
|
||||
sm2_z256_t x1_modn;
|
||||
} SM2_SIGN_PRE_COMP;
|
||||
|
||||
#define SM2_SIGN_PRE_COMP_COUNT 32
|
||||
|
||||
int sm2_fast_sign_pre_compute(SM2_SIGN_PRE_COMP pre_comp[32]);
|
||||
int sm2_fast_sign(const sm2_z256_t fast_private, SM2_SIGN_PRE_COMP *pre_comp,
|
||||
const uint8_t dgst[32], SM2_SIGNATURE *sig);
|
||||
int sm2_fast_verify(const SM2_Z256_POINT point_table[16],
|
||||
const uint8_t dgst[32], const SM2_SIGNATURE *sig);
|
||||
|
||||
|
||||
#define SM2_MIN_SIGNATURE_SIZE 8
|
||||
#define SM2_MAX_SIGNATURE_SIZE 72
|
||||
int sm2_signature_to_der(const SM2_SIGNATURE *sig, uint8_t **out, size_t *outlen);
|
||||
int sm2_signature_from_der(SM2_SIGNATURE *sig, const uint8_t **in, size_t *inlen);
|
||||
int sm2_signature_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *sig, size_t siglen);
|
||||
_gmssl_export int sm2_sign(const SM2_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen);
|
||||
_gmssl_export int sm2_verify(const SM2_KEY *key, const uint8_t dgst[32], const uint8_t *sig, size_t siglen);
|
||||
int sm2_sign(const SM2_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen);
|
||||
int sm2_verify(const SM2_KEY *key, const uint8_t dgst[32], const uint8_t *sig, size_t siglen);
|
||||
|
||||
enum {
|
||||
SM2_signature_compact_size = 70,
|
||||
@@ -312,28 +156,48 @@ enum {
|
||||
};
|
||||
int sm2_sign_fixlen(const SM2_KEY *key, const uint8_t dgst[32], size_t siglen, uint8_t *sig);
|
||||
|
||||
|
||||
|
||||
#define SM2_DEFAULT_ID "1234567812345678"
|
||||
#define SM2_DEFAULT_ID_LENGTH (sizeof(SM2_DEFAULT_ID) - 1) // LENGTH for string and SIZE for bytes
|
||||
#define SM2_DEFAULT_ID_BITS (SM2_DEFAULT_ID_LENGTH * 8)
|
||||
#define SM2_MAX_ID_BITS 65535
|
||||
#define SM2_MAX_ID_LENGTH (SM2_MAX_ID_BITS/8)
|
||||
|
||||
int sm2_compute_z(uint8_t z[32], const SM2_POINT *pub, const char *id, size_t idlen);
|
||||
int sm2_compute_z(uint8_t z[32], const SM2_Z256_POINT *pub, const char *id, size_t idlen);
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM3_CTX sm3_ctx;
|
||||
SM3_CTX saved_sm3_ctx;
|
||||
SM2_KEY key;
|
||||
sm2_z256_t fast_sign_private;
|
||||
SM2_SIGN_PRE_COMP pre_comp[SM2_SIGN_PRE_COMP_COUNT];
|
||||
unsigned int num_pre_comp;
|
||||
|
||||
// verify public point table, P, 2P, ..., 16P
|
||||
SM2_Z256_POINT public_point_table[16];
|
||||
} SM2_SIGN_CTX;
|
||||
|
||||
_gmssl_export int sm2_sign_init(SM2_SIGN_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen);
|
||||
_gmssl_export int sm2_sign_update(SM2_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
_gmssl_export int sm2_sign_finish(SM2_SIGN_CTX *ctx, uint8_t *sig, size_t *siglen);
|
||||
int sm2_sign_init(SM2_SIGN_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen);
|
||||
int sm2_sign_update(SM2_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sm2_sign_finish(SM2_SIGN_CTX *ctx, uint8_t *sig, size_t *siglen);
|
||||
int sm2_sign_reset(SM2_SIGN_CTX *ctx);
|
||||
int sm2_sign_finish_fixlen(SM2_SIGN_CTX *ctx, size_t siglen, uint8_t *sig);
|
||||
|
||||
_gmssl_export int sm2_verify_init(SM2_SIGN_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen);
|
||||
_gmssl_export int sm2_verify_update(SM2_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
_gmssl_export int sm2_verify_finish(SM2_SIGN_CTX *ctx, const uint8_t *sig, size_t siglen);
|
||||
typedef struct {
|
||||
SM3_CTX sm3_ctx;
|
||||
SM3_CTX saved_sm3_ctx;
|
||||
SM2_KEY key;
|
||||
SM2_Z256_POINT public_point_table[16];
|
||||
} SM2_VERIFY_CTX;
|
||||
|
||||
int sm2_verify_init(SM2_VERIFY_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen);
|
||||
int sm2_verify_update(SM2_VERIFY_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sm2_verify_finish(SM2_VERIFY_CTX *ctx, const uint8_t *sig, size_t siglen);
|
||||
int sm2_verify_reset(SM2_VERIFY_CTX *ctx);
|
||||
|
||||
|
||||
/*
|
||||
SM2Cipher ::= SEQUENCE {
|
||||
@@ -345,6 +209,11 @@ SM2Cipher ::= SEQUENCE {
|
||||
#define SM2_MIN_PLAINTEXT_SIZE 1 // re-compute SM2_MIN_CIPHERTEXT_SIZE when modify
|
||||
#define SM2_MAX_PLAINTEXT_SIZE 255 // re-compute SM2_MAX_CIPHERTEXT_SIZE when modify
|
||||
|
||||
typedef struct {
|
||||
uint8_t x[32];
|
||||
uint8_t y[32];
|
||||
} SM2_POINT;
|
||||
|
||||
typedef struct {
|
||||
SM2_POINT point;
|
||||
uint8_t hash[32];
|
||||
@@ -352,6 +221,9 @@ typedef struct {
|
||||
uint8_t ciphertext[SM2_MAX_PLAINTEXT_SIZE];
|
||||
} SM2_CIPHERTEXT;
|
||||
|
||||
|
||||
int sm2_kdf(const uint8_t *in, size_t inlen, size_t outlen, uint8_t *out);
|
||||
|
||||
int sm2_do_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, SM2_CIPHERTEXT *out);
|
||||
int sm2_do_decrypt(const SM2_KEY *key, const SM2_CIPHERTEXT *in, uint8_t *out, size_t *outlen);
|
||||
|
||||
@@ -360,8 +232,8 @@ int sm2_do_decrypt(const SM2_KEY *key, const SM2_CIPHERTEXT *in, uint8_t *out, s
|
||||
int sm2_ciphertext_to_der(const SM2_CIPHERTEXT *c, uint8_t **out, size_t *outlen);
|
||||
int sm2_ciphertext_from_der(SM2_CIPHERTEXT *c, const uint8_t **in, size_t *inlen);
|
||||
int sm2_ciphertext_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *a, size_t alen);
|
||||
_gmssl_export int sm2_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
_gmssl_export int sm2_decrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm2_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm2_decrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
|
||||
enum {
|
||||
SM2_ciphertext_compact_point_size = 68,
|
||||
@@ -372,8 +244,41 @@ int sm2_do_encrypt_fixlen(const SM2_KEY *key, const uint8_t *in, size_t inlen, i
|
||||
int sm2_encrypt_fixlen(const SM2_KEY *key, const uint8_t *in, size_t inlen, int point_size, uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
int sm2_do_ecdh(const SM2_KEY *key, const SM2_POINT *peer_public, SM2_POINT *out);
|
||||
_gmssl_export int sm2_ecdh(const SM2_KEY *key, const uint8_t *peer_public, size_t peer_public_len, SM2_POINT *out);
|
||||
int sm2_do_ecdh(const SM2_KEY *key, const SM2_Z256_POINT *peer_public, SM2_Z256_POINT *out);
|
||||
int sm2_ecdh(const SM2_KEY *key, const uint8_t *peer_public, size_t peer_public_len, uint8_t out[64]);
|
||||
|
||||
|
||||
typedef struct {
|
||||
sm2_z256_t k;
|
||||
SM2_POINT C1;
|
||||
} SM2_ENC_PRE_COMP;
|
||||
|
||||
#define SM2_ENC_PRE_COMP_NUM 8
|
||||
int sm2_encrypt_pre_compute(SM2_ENC_PRE_COMP pre_comp[SM2_ENC_PRE_COMP_NUM]);
|
||||
int sm2_do_encrypt_ex(const SM2_KEY *key, const SM2_ENC_PRE_COMP *pre_comp,
|
||||
const uint8_t *in, size_t inlen, SM2_CIPHERTEXT *out);
|
||||
|
||||
typedef struct {
|
||||
SM2_ENC_PRE_COMP pre_comp[SM2_ENC_PRE_COMP_NUM];
|
||||
size_t pre_comp_num;
|
||||
uint8_t buf[SM2_MAX_PLAINTEXT_SIZE];
|
||||
size_t buf_size;
|
||||
} SM2_ENC_CTX;
|
||||
|
||||
int sm2_encrypt_init(SM2_ENC_CTX *ctx);
|
||||
int sm2_encrypt_update(SM2_ENC_CTX *ctx, const uint8_t *in, size_t inlen);
|
||||
int sm2_encrypt_finish(SM2_ENC_CTX *ctx, const SM2_KEY *public_key, uint8_t *out, size_t *outlen);
|
||||
int sm2_encrypt_reset(SM2_ENC_CTX *ctx);
|
||||
|
||||
typedef struct {
|
||||
uint8_t buf[SM2_MAX_CIPHERTEXT_SIZE];
|
||||
size_t buf_size;
|
||||
} SM2_DEC_CTX;
|
||||
|
||||
int sm2_decrypt_init(SM2_DEC_CTX *ctx);
|
||||
int sm2_decrypt_update(SM2_DEC_CTX *ctx, const uint8_t *in, size_t inlen);
|
||||
int sm2_decrypt_finish(SM2_DEC_CTX *ctx, const SM2_KEY *key, uint8_t *out, size_t *outlen);
|
||||
int sm2_decrypt_reset(SM2_DEC_CTX *ctx);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
|
||||
156
thirdparty/GmSSL-3.1.1/include/gmssl/sm2_z256.h
vendored
Normal file
156
thirdparty/GmSSL-3.1.1/include/gmssl/sm2_z256.h
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GMSSL_SM2_Z256_H
|
||||
#define GMSSL_SM2_Z256_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
// z256 means compact presentation of uint256
|
||||
typedef uint64_t sm2_z256_t[4];
|
||||
typedef uint64_t sm2_z512_t[8];
|
||||
|
||||
|
||||
void sm2_z256_set_one(sm2_z256_t r);
|
||||
void sm2_z256_set_zero(sm2_z256_t r);
|
||||
|
||||
int sm2_z256_rand_range(sm2_z256_t r, const sm2_z256_t range);
|
||||
void sm2_z256_copy(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_copy_conditional(sm2_z256_t dst, const sm2_z256_t src, uint64_t move);
|
||||
void sm2_z256_from_bytes(sm2_z256_t r, const uint8_t in[32]);
|
||||
void sm2_z256_to_bytes(const sm2_z256_t a, uint8_t out[32]);
|
||||
int sm2_z256_cmp(const sm2_z256_t a, const sm2_z256_t b);
|
||||
uint64_t sm2_z256_is_zero(const sm2_z256_t a);
|
||||
uint64_t sm2_z256_equ(const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_rshift(sm2_z256_t r, const sm2_z256_t a, unsigned int nbits);
|
||||
uint64_t sm2_z256_add(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
uint64_t sm2_z256_sub(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_mul(sm2_z512_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
int sm2_z256_get_booth(const sm2_z256_t a, unsigned int window_size, int i);
|
||||
void sm2_z256_from_hex(sm2_z256_t r, const char *hex);
|
||||
int sm2_z256_equ_hex(const sm2_z256_t a, const char *hex);
|
||||
int sm2_z256_print(FILE *fp, int ind, int fmt, const char *label, const sm2_z256_t a);
|
||||
|
||||
void sm2_z256_modp_add(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modp_dbl(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modp_tri(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modp_sub(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modp_neg(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modp_haf(sm2_z256_t r, const sm2_z256_t a);
|
||||
|
||||
void sm2_z256_modp_to_mont(const sm2_z256_t a, sm2_z256_t r);
|
||||
void sm2_z256_modp_from_mont(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modp_mont_mul(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modp_mont_sqr(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modp_mont_exp(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t e);
|
||||
void sm2_z256_modp_mont_inv(sm2_z256_t r, const sm2_z256_t a);
|
||||
int sm2_z256_modp_mont_sqrt(sm2_z256_t r, const sm2_z256_t a);
|
||||
|
||||
void sm2_z256_modn_add(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modn_sub(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modn_neg(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modn_mul(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modn_sqr(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modn_exp(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t e);
|
||||
void sm2_z256_modn_inv(sm2_z256_t r, const sm2_z256_t a);
|
||||
|
||||
void sm2_z256_modn_to_mont(const sm2_z256_t a, sm2_z256_t r);
|
||||
void sm2_z256_modn_from_mont(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modn_mont_mul(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b);
|
||||
void sm2_z256_modn_mont_sqr(sm2_z256_t r, const sm2_z256_t a);
|
||||
void sm2_z256_modn_mont_exp(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t e);
|
||||
void sm2_z256_modn_mont_inv(sm2_z256_t r, const sm2_z256_t a);
|
||||
|
||||
|
||||
typedef struct {
|
||||
sm2_z256_t X;
|
||||
sm2_z256_t Y;
|
||||
sm2_z256_t Z;
|
||||
} SM2_Z256_POINT;
|
||||
|
||||
void sm2_z256_point_set_infinity(SM2_Z256_POINT *P);
|
||||
int sm2_z256_point_is_at_infinity(const SM2_Z256_POINT *P);
|
||||
int sm2_z256_point_to_bytes(const SM2_Z256_POINT *P, uint8_t out[64]);
|
||||
int sm2_z256_point_from_bytes(SM2_Z256_POINT *P, const uint8_t in[64]);
|
||||
int sm2_z256_point_from_hex(SM2_Z256_POINT *P, const char *hex);
|
||||
int sm2_z256_point_equ_hex(const SM2_Z256_POINT *P, const char *hex);
|
||||
int sm2_z256_point_is_on_curve(const SM2_Z256_POINT *P);
|
||||
int sm2_z256_point_equ(const SM2_Z256_POINT *P, const SM2_Z256_POINT *Q); // equivalent jacobian points
|
||||
int sm2_z256_point_get_xy(const SM2_Z256_POINT *P, uint64_t x[4], uint64_t y[4]);
|
||||
|
||||
void sm2_z256_point_dbl(SM2_Z256_POINT *R, const SM2_Z256_POINT *A);
|
||||
void sm2_z256_point_add(SM2_Z256_POINT *r, const SM2_Z256_POINT *a, const SM2_Z256_POINT *b);
|
||||
void sm2_z256_point_neg(SM2_Z256_POINT *R, const SM2_Z256_POINT *P);
|
||||
void sm2_z256_point_sub(SM2_Z256_POINT *R, const SM2_Z256_POINT *A, const SM2_Z256_POINT *B);
|
||||
void sm2_z256_point_get_affine(const SM2_Z256_POINT *P, uint64_t x[4], uint64_t y[4]);
|
||||
int sm2_z256_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_Z256_POINT *P);
|
||||
|
||||
|
||||
typedef struct {
|
||||
sm2_z256_t x;
|
||||
sm2_z256_t y;
|
||||
} SM2_Z256_AFFINE_POINT;
|
||||
|
||||
void sm2_z256_point_copy_affine(SM2_Z256_POINT *R, const SM2_Z256_AFFINE_POINT *P);
|
||||
void sm2_z256_point_add_affine(SM2_Z256_POINT *r, const SM2_Z256_POINT *a, const SM2_Z256_AFFINE_POINT *b);
|
||||
void sm2_z256_point_sub_affine(SM2_Z256_POINT *R, const SM2_Z256_POINT *A, const SM2_Z256_AFFINE_POINT *B);
|
||||
int sm2_z256_point_affine_print(FILE *fp, int fmt, int ind, const char *label, const SM2_Z256_AFFINE_POINT *P);
|
||||
|
||||
void sm2_z256_point_mul_generator(SM2_Z256_POINT *R, const sm2_z256_t k);
|
||||
void sm2_z256_point_mul_pre_compute(const SM2_Z256_POINT *P, SM2_Z256_POINT T[16]);
|
||||
void sm2_z256_point_mul_ex(SM2_Z256_POINT *R, const sm2_z256_t k, const SM2_Z256_POINT P_table[16]);
|
||||
void sm2_z256_point_mul(SM2_Z256_POINT *R, const sm2_z256_t k, const SM2_Z256_POINT *P);
|
||||
void sm2_z256_point_mul_sum(SM2_Z256_POINT *R, const sm2_z256_t t, const SM2_Z256_POINT *P, const sm2_z256_t s);
|
||||
|
||||
|
||||
const uint64_t *sm2_z256_prime(void);
|
||||
const uint64_t *sm2_z256_order(void);
|
||||
const uint64_t *sm2_z256_order_minus_one(void);
|
||||
const uint64_t *sm2_z256_one(void);
|
||||
|
||||
|
||||
enum {
|
||||
SM2_point_at_infinity = 0x00,
|
||||
SM2_point_compressed_y_even = 0x02,
|
||||
SM2_point_compressed_y_odd = 0x03,
|
||||
SM2_point_uncompressed = 0x04,
|
||||
SM2_point_uncompressed_y_even = 0x06,
|
||||
SM2_point_uncompressed_y_odd = 0x07,
|
||||
};
|
||||
|
||||
int sm2_z256_point_from_x_bytes(SM2_Z256_POINT *P, const uint8_t x_bytes[32], int y_is_odd);
|
||||
int sm2_z256_point_from_hash(SM2_Z256_POINT *R, const uint8_t *data, size_t datalen, int y_is_odd);
|
||||
int sm2_z256_point_from_octets(SM2_Z256_POINT *P, const uint8_t *in, size_t inlen);
|
||||
|
||||
int sm2_z256_point_to_uncompressed_octets(const SM2_Z256_POINT *P, uint8_t out[65]);
|
||||
int sm2_z256_point_to_compressed_octets(const SM2_Z256_POINT *P, uint8_t out[33]);
|
||||
|
||||
/*
|
||||
RFC 5480 Elliptic Curve Cryptography Subject Public Key Information
|
||||
ECPoint ::= OCTET STRING
|
||||
*/
|
||||
#define SM2_POINT_MAX_SIZE (2 + 65)
|
||||
int sm2_z256_point_to_der(const SM2_Z256_POINT *P, uint8_t **out, size_t *outlen);
|
||||
int sm2_z256_point_from_der(SM2_Z256_POINT *P, const uint8_t **in, size_t *inlen);
|
||||
int sm2_z256_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_Z256_POINT *P);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
58
thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h
vendored
58
thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -18,32 +18,10 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
SM3 Public API
|
||||
|
||||
SM3_DIGEST_SIZE
|
||||
SM3_HMAC_SIZE
|
||||
|
||||
SM3_CTX
|
||||
sm3_init
|
||||
sm3_update
|
||||
sm3_finish
|
||||
|
||||
SM3_HMAC_CTX
|
||||
sm3_hmac_init
|
||||
sm3_hmac_update
|
||||
sm3_hmac_finish
|
||||
|
||||
sm3_digest
|
||||
sm3_hmac
|
||||
*/
|
||||
|
||||
#define SM3_IS_BIG_ENDIAN 1
|
||||
|
||||
#define SM3_DIGEST_SIZE 32
|
||||
#define SM3_BLOCK_SIZE 64
|
||||
#define SM3_STATE_WORDS 8
|
||||
#define SM3_HMAC_SIZE (SM3_DIGEST_SIZE)
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -53,12 +31,14 @@ typedef struct {
|
||||
size_t num;
|
||||
} SM3_CTX;
|
||||
|
||||
void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks);
|
||||
|
||||
void sm3_init(SM3_CTX *ctx);
|
||||
void sm3_update(SM3_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sm3_finish(SM3_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]);
|
||||
void sm3_digest(const uint8_t *data, size_t datalen, uint8_t dgst[SM3_DIGEST_SIZE]);
|
||||
|
||||
void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks);
|
||||
|
||||
#define SM3_HMAC_SIZE (SM3_DIGEST_SIZE)
|
||||
|
||||
typedef struct {
|
||||
SM3_CTX sm3_ctx;
|
||||
@@ -68,9 +48,6 @@ typedef struct {
|
||||
void sm3_hmac_init(SM3_HMAC_CTX *ctx, const uint8_t *key, size_t keylen);
|
||||
void sm3_hmac_update(SM3_HMAC_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sm3_hmac_finish(SM3_HMAC_CTX *ctx, uint8_t mac[SM3_HMAC_SIZE]);
|
||||
void sm3_hmac(const uint8_t *key, size_t keylen,
|
||||
const uint8_t *data, size_t datalen,
|
||||
uint8_t mac[SM3_HMAC_SIZE]);
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -79,10 +56,33 @@ typedef struct {
|
||||
} SM3_KDF_CTX;
|
||||
|
||||
void sm3_kdf_init(SM3_KDF_CTX *ctx, size_t outlen);
|
||||
void sm3_kdf_update(SM3_KDF_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sm3_kdf_update(SM3_KDF_CTX *ctx, const uint8_t *in, size_t inlen);
|
||||
void sm3_kdf_finish(SM3_KDF_CTX *ctx, uint8_t *out);
|
||||
|
||||
|
||||
#define SM3_PBKDF2_MIN_ITER 10000
|
||||
#define SM3_PBKDF2_MAX_ITER (16777216-1)
|
||||
#define SM3_PBKDF2_MAX_SALT_SIZE 64
|
||||
#define SM3_PBKDF2_DEFAULT_SALT_SIZE 8
|
||||
|
||||
int sm3_pbkdf2(const char *pass, size_t passlen,
|
||||
const uint8_t *salt, size_t saltlen, size_t count,
|
||||
size_t outlen, uint8_t *out);
|
||||
|
||||
|
||||
typedef struct {
|
||||
union {
|
||||
SM3_CTX sm3_ctx;
|
||||
SM3_HMAC_CTX hmac_ctx;
|
||||
};
|
||||
int state;
|
||||
} SM3_DIGEST_CTX;
|
||||
|
||||
int sm3_digest_init(SM3_DIGEST_CTX *ctx, const uint8_t *key, size_t keylen);
|
||||
int sm3_digest_update(SM3_DIGEST_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sm3_digest_finish(SM3_DIGEST_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
42
thirdparty/GmSSL-3.1.1/include/gmssl/sm3_rng.h
vendored
42
thirdparty/GmSSL-3.1.1/include/gmssl/sm3_rng.h
vendored
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM3_RNG_H
|
||||
#define GMSSL_SM3_RNG_H
|
||||
|
||||
#include <time.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define SM3_RNG_MAX_RESEED_COUNTER (1<<20)
|
||||
#define SM3_RNG_MAX_RESEED_SECONDS 600
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t V[55];
|
||||
uint8_t C[55];
|
||||
uint32_t reseed_counter;
|
||||
time_t last_reseed_time;
|
||||
} SM3_RNG;
|
||||
|
||||
int sm3_rng_init(SM3_RNG *rng, const uint8_t *nonce, size_t nonce_len,
|
||||
const uint8_t *label, size_t label_len);
|
||||
int sm3_rng_reseed(SM3_RNG *rng, const uint8_t *addin, size_t addin_len);
|
||||
int sm3_rng_generate(SM3_RNG *rng, const uint8_t *addin, size_t addin_len,
|
||||
uint8_t *out, size_t outlen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -7,7 +7,10 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM3_X8_AVX2_H
|
||||
// TODO: a new header for coarse-grained parallelism SM3, implemented by sm3_avx2/avx512, sm3_sve/sve2, sm3_cl
|
||||
// and used by sm3_xmss or other algors
|
||||
|
||||
#ifndef GMSSL_SM3_X8_AVX2_H // GMSSL_SM3_MULTI_H ?
|
||||
#define GMSSL_SM3_X8_AVX2_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
127
thirdparty/GmSSL-3.1.1/include/gmssl/sm3_xmss.h
vendored
Normal file
127
thirdparty/GmSSL-3.1.1/include/gmssl/sm3_xmss.h
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM3_XMSS_H
|
||||
#define GMSSL_SM3_XMSS_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#ifdef ENABLE_SHA2
|
||||
#include <gmssl/sha2.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
// Crosscheck with data from xmss-reference (SHA-256), except the XMSS signature.
|
||||
#if defined(ENABLE_SM3_XMSS_CROSSCHECK) && defined(ENABLE_SHA2)
|
||||
# define HASH256_CTX SHA256_CTX
|
||||
# define hash256_init sha256_init
|
||||
# define hash256_update sha256_update
|
||||
# define hash256_finish sha256_finish
|
||||
# define hash256_digest sha256_digest
|
||||
#else
|
||||
# define HASH256_CTX SM3_CTX
|
||||
# define hash256_init sm3_init
|
||||
# define hash256_update sm3_update
|
||||
# define hash256_finish sm3_finish
|
||||
# define hash256_digest sm3_digest
|
||||
#endif
|
||||
|
||||
typedef uint8_t hash256_bytes_t[32];
|
||||
|
||||
// Derive wots+ sk from a secret seed use the spec of xmss-reference.
|
||||
void sm3_wots_derive_sk(const uint8_t secret[32],
|
||||
const uint8_t seed[32], const uint8_t in_adrs[32],
|
||||
hash256_bytes_t sk[67]);
|
||||
void sm3_wots_derive_pk(const hash256_bytes_t sk[67],
|
||||
const HASH256_CTX *prf_seed_ctx, const uint8_t in_adrs[32],
|
||||
hash256_bytes_t pk[67]);
|
||||
void sm3_wots_do_sign(const hash256_bytes_t sk[67],
|
||||
const HASH256_CTX *prf_seed_ctx, const uint8_t in_adrs[32],
|
||||
const uint8_t dgst[32], hash256_bytes_t sig[67]);
|
||||
void sm3_wots_sig_to_pk(const hash256_bytes_t sig[67], const uint8_t dgst[32],
|
||||
const HASH256_CTX *prf_seed_ctx, const uint8_t in_adrs[32],
|
||||
hash256_bytes_t pk[67]);
|
||||
|
||||
void sm3_xmss_derive_root(const uint8_t xmss_secret[32], int height,
|
||||
const uint8_t seed[32],
|
||||
hash256_bytes_t *tree, uint8_t xmss_root[32]);
|
||||
void sm3_xmss_do_sign(const uint8_t xmss_secret[32], int index,
|
||||
const uint8_t seed[32], const uint8_t in_adrs[32], int height,
|
||||
const hash256_bytes_t *tree,
|
||||
const uint8_t dgst[32],
|
||||
hash256_bytes_t wots_sig[67],
|
||||
hash256_bytes_t *auth_path);
|
||||
|
||||
void sm3_xmss_sig_to_root(const hash256_bytes_t wots_sig[67], int index, const hash256_bytes_t *auth_path,
|
||||
const uint8_t seed[32], const uint8_t in_adrs[32], int height,
|
||||
const uint8_t dgst[32],
|
||||
uint8_t xmss_root[32]);
|
||||
|
||||
enum {
|
||||
XMSS_SM3_10 = 0x10000001,
|
||||
XMSS_SM3_16 = 0x10000002,
|
||||
XMSS_SM3_20 = 0x10000003,
|
||||
XMSS_SHA256_10 = 0x00000001,
|
||||
XMSS_SHA256_16 = 0x00000002,
|
||||
XMSS_SHA256_20 = 0x00000003,
|
||||
};
|
||||
|
||||
int sm3_xmss_height_from_oid(uint32_t *height, uint32_t id);
|
||||
|
||||
typedef struct {
|
||||
uint32_t oid;
|
||||
uint8_t seed[32];
|
||||
uint8_t root[32];
|
||||
uint8_t secret[32];
|
||||
uint8_t prf_key[32];
|
||||
uint32_t index;
|
||||
hash256_bytes_t *tree;
|
||||
} SM3_XMSS_KEY;
|
||||
|
||||
int sm3_xmss_key_generate(SM3_XMSS_KEY *key, uint32_t oid);
|
||||
int sm3_xmss_key_print(FILE *fp, int fmt, int ind, const char *label, const SM3_XMSS_KEY *key);
|
||||
int sm3_xmss_key_get_height(const SM3_XMSS_KEY *key, uint32_t *height);
|
||||
int sm3_xmss_key_to_bytes(const SM3_XMSS_KEY *key, uint8_t *out, size_t *outlen);
|
||||
int sm3_xmss_key_from_bytes(SM3_XMSS_KEY *key, const uint8_t *in, size_t inlen);
|
||||
int sm3_xmss_public_key_to_bytes(const SM3_XMSS_KEY *key, uint8_t *out, size_t *outlen);
|
||||
int sm3_xmss_public_key_from_bytes(SM3_XMSS_KEY *key, const uint8_t *in, size_t inlen);
|
||||
void sm3_xmss_key_cleanup(SM3_XMSS_KEY *key);
|
||||
|
||||
typedef struct {
|
||||
uint8_t index[4];
|
||||
uint8_t random[32];
|
||||
hash256_bytes_t wots_sig[67];
|
||||
hash256_bytes_t auth_path[20];
|
||||
} SM3_XMSS_SIGNATURE;
|
||||
|
||||
int sm3_xmss_signature_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *in, size_t inlen);
|
||||
|
||||
typedef struct {
|
||||
uint8_t random[32];
|
||||
HASH256_CTX hash256_ctx;
|
||||
} SM3_XMSS_SIGN_CTX;
|
||||
|
||||
int sm3_xmss_sign_init(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key);
|
||||
int sm3_xmss_sign_update(SM3_XMSS_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sm3_xmss_sign_finish(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key, uint8_t *sigbuf, size_t *siglen);
|
||||
int sm3_xmss_verify_init(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key, const uint8_t *sigbuf, size_t siglen);
|
||||
int sm3_xmss_verify_update(SM3_XMSS_SIGN_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
int sm3_xmss_verify_finish(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key, const uint8_t *sigbuf, size_t siglen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
265
thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h
vendored
265
thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -13,35 +13,13 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <gmssl/ghash.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
SM4 Public API
|
||||
|
||||
SM4_KEY_SIZE
|
||||
SM4_BLOCK_SIZE
|
||||
|
||||
SM4_CBC_CTX
|
||||
sm4_cbc_encrypt_init
|
||||
sm4_cbc_encrypt_update
|
||||
sm4_cbc_encrypt_finish
|
||||
sm4_cbc_decrypt_init
|
||||
sm4_cbc_decrypt_update
|
||||
sm4_cbc_decrypt_finish
|
||||
|
||||
SM4_CTR_CTX
|
||||
sm4_ctr_encrypt_init
|
||||
sm4_ctr_encrypt_update
|
||||
sm4_ctr_encrypt_finish
|
||||
sm4_ctr_decrypt_init
|
||||
sm4_ctr_decrypt_update
|
||||
sm4_ctr_decrypt_finish
|
||||
*/
|
||||
|
||||
#define SM4_KEY_SIZE (16)
|
||||
#define SM4_BLOCK_SIZE (16)
|
||||
#define SM4_NUM_ROUNDS (32)
|
||||
@@ -54,54 +32,21 @@ typedef struct {
|
||||
void sm4_set_encrypt_key(SM4_KEY *key, const uint8_t raw_key[SM4_KEY_SIZE]);
|
||||
void sm4_set_decrypt_key(SM4_KEY *key, const uint8_t raw_key[SM4_KEY_SIZE]);
|
||||
void sm4_encrypt(const SM4_KEY *key, const uint8_t in[SM4_BLOCK_SIZE], uint8_t out[SM4_BLOCK_SIZE]);
|
||||
#define sm4_decrypt(key,in,out) sm4_encrypt(key,in,out)
|
||||
|
||||
|
||||
void sm4_cbc_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
|
||||
void sm4_encrypt_blocks(const SM4_KEY *key, const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
void sm4_cbc_encrypt_blocks(const SM4_KEY *key, uint8_t iv[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
void sm4_cbc_decrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
|
||||
void sm4_cbc_decrypt_blocks(const SM4_KEY *key, uint8_t iv[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
int sm4_cbc_padding_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
|
||||
void sm4_ctr_encrypt_blocks(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
void sm4_ctr32_encrypt_blocks(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
|
||||
int sm4_cbc_padding_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cbc_padding_decrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
|
||||
int sm4_cbc_padding_decrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
void sm4_ctr_encrypt(const SM4_KEY *key, uint8_t ctr[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
#define sm4_ctr_decrypt(key,ctr,in,inlen,out) sm4_ctr_encrypt(key,ctr,in,inlen,out)
|
||||
|
||||
|
||||
#define SM4_GCM_IV_MIN_SIZE 1
|
||||
#define SM4_GCM_IV_MAX_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951
|
||||
|
||||
#define SM4_GCM_IV_DEFAULT_BITS 96
|
||||
#define SM4_GCM_IV_DEFAULT_SIZE 12
|
||||
|
||||
//#define NIST_SP800_GCM_MAX_IV_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951
|
||||
|
||||
#define SM4_GCM_MAX_IV_SIZE 64
|
||||
#define SM4_GCM_MIN_IV_SIZE 1
|
||||
#define SM4_GCM_DEFAULT_IV_SIZE 12
|
||||
|
||||
#define SM4_GCM_MIN_AAD_SIZE 0
|
||||
#define SM4_GCM_MAX_AAD_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951
|
||||
|
||||
#define SM4_GCM_MIN_PLAINTEXT_SIZE 0
|
||||
#define SM4_GCM_MAX_PLAINTEXT_SIZE ((((uint64_t)1 << 39) - 256) >> 3) // 68719476704
|
||||
|
||||
#define SM4_GCM_MAX_TAG_SIZE 16
|
||||
#define SM4_GCM_MIN_TAG_SIZE 12
|
||||
// For certain applications (voice or video), tag may be 64 or 32 bits
|
||||
// see NIST Special Publication 800-38D, Appendix C for more details
|
||||
|
||||
|
||||
int sm4_gcm_encrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
uint8_t *out, size_t taglen, uint8_t *tag);
|
||||
int sm4_gcm_decrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
const uint8_t *tag, size_t taglen, uint8_t *out);
|
||||
void sm4_ctr_encrypt(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
void sm4_ctr32_encrypt(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -114,12 +59,16 @@ typedef struct {
|
||||
int sm4_cbc_encrypt_init(SM4_CBC_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]);
|
||||
int sm4_cbc_encrypt_update(SM4_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cbc_encrypt_finish(SM4_CBC_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
|
||||
int sm4_cbc_decrypt_init(SM4_CBC_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]);
|
||||
int sm4_cbc_decrypt_update(SM4_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cbc_decrypt_finish(SM4_CBC_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
void sm4_ctr_encrypt(const SM4_KEY *key, uint8_t ctr[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
void sm4_ctr32_encrypt(const SM4_KEY *key, uint8_t ctr[SM4_BLOCK_SIZE],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
|
||||
typedef struct {
|
||||
SM4_KEY sm4_key;
|
||||
uint8_t ctr[SM4_BLOCK_SIZE];
|
||||
@@ -130,10 +79,184 @@ typedef struct {
|
||||
int sm4_ctr_encrypt_init(SM4_CTR_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t ctr[SM4_BLOCK_SIZE]);
|
||||
int sm4_ctr_encrypt_update(SM4_CTR_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ctr_encrypt_finish(SM4_CTR_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
int sm4_ctr32_encrypt_init(SM4_CTR_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t ctr[SM4_BLOCK_SIZE]);
|
||||
int sm4_ctr32_encrypt_update(SM4_CTR_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ctr32_encrypt_finish(SM4_CTR_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
|
||||
#define sm4_ctr_decrypt_init(ctx,key,ctr) sm4_ctr_encrypt_init(ctx,key,ctr)
|
||||
#define sm4_ctr_decrypt_update(ctx,in,inlen,out,outlen) sm4_ctr_encrypt_update(ctx,in,inlen,out,outlen)
|
||||
#define sm4_ctr_decrypt_finish(ctx,out,outlen) sm4_ctr_encrypt_finish(ctx,out,outlen)
|
||||
|
||||
#define NIST_SP800_GCM_MAX_IV_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951
|
||||
#define SM4_GCM_MAX_IV_SIZE 64
|
||||
#define SM4_GCM_MIN_IV_SIZE 1
|
||||
#define SM4_GCM_DEFAULT_IV_SIZE 12
|
||||
|
||||
#define NIST_SP800_GCM_MAX_AAD_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951
|
||||
#define SM4_GCM_MIN_AAD_SIZE 0
|
||||
#define SM4_GCM_MAX_AAD_SIZE (1<<24) // 16MiB
|
||||
|
||||
#define SM4_GCM_MIN_PLAINTEXT_SIZE 0
|
||||
#define SM4_GCM_MAX_PLAINTEXT_NBLOCKS (((uint64_t)1 << 32) - 2)
|
||||
#define SM4_GCM_MAX_PLAINTEXT_SIZE (SM4_GCM_MAX_PLAINTEXT_NBLOCKS * 16) // 68719476704
|
||||
|
||||
#define SM4_GCM_MAX_TAG_SIZE 16
|
||||
#define SM4_GCM_MIN_TAG_SIZE 12
|
||||
#define SM4_GCM_DEFAULT_TAG_SIZE 16
|
||||
// For certain applications (voice or video), tag may be 64 or 32 bits
|
||||
// see NIST Special Publication 800-38D, Appendix C for more details
|
||||
|
||||
int sm4_gcm_encrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
uint8_t *out, size_t taglen, uint8_t *tag);
|
||||
int sm4_gcm_decrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
const uint8_t *tag, size_t taglen, uint8_t *out);
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM4_CTR_CTX enc_ctx;
|
||||
GHASH_CTX mac_ctx;
|
||||
uint8_t Y[16]; // E(K, Y_0)
|
||||
size_t taglen;
|
||||
uint8_t mac[16];
|
||||
size_t maclen;
|
||||
uint64_t encedlen;
|
||||
} SM4_GCM_CTX;
|
||||
|
||||
int sm4_gcm_encrypt_init(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, size_t taglen);
|
||||
int sm4_gcm_encrypt_update(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_gcm_encrypt_finish(SM4_GCM_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
int sm4_gcm_decrypt_init(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, size_t taglen);
|
||||
int sm4_gcm_decrypt_update(SM4_GCM_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_gcm_decrypt_finish(SM4_GCM_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
#ifdef ENABLE_SM4_ECB
|
||||
// call `sm4_set_decrypt_key` before decrypt
|
||||
|
||||
typedef struct {
|
||||
SM4_KEY sm4_key;
|
||||
uint8_t block[SM4_BLOCK_SIZE];
|
||||
size_t block_nbytes;
|
||||
} SM4_ECB_CTX;
|
||||
|
||||
int sm4_ecb_encrypt_init(SM4_ECB_CTX *ctx, const uint8_t key[SM4_BLOCK_SIZE]);
|
||||
int sm4_ecb_encrypt_update(SM4_ECB_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ecb_encrypt_finish(SM4_ECB_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
|
||||
int sm4_ecb_decrypt_init(SM4_ECB_CTX *ctx, const uint8_t key[SM4_BLOCK_SIZE]);
|
||||
int sm4_ecb_decrypt_update(SM4_ECB_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ecb_decrypt_finish(SM4_ECB_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
#endif // ENABLE_SM4_ECB
|
||||
|
||||
|
||||
#ifdef ENABLE_SM4_OFB
|
||||
// always call `sm4_set_encrypt_key` before encrypt/decrypt
|
||||
// `sm4_ofb_encrypt` will change the param `iv`
|
||||
void sm4_ofb_encrypt(const SM4_KEY *key, uint8_t iv[16], const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
|
||||
typedef struct {
|
||||
SM4_KEY sm4_key;
|
||||
uint8_t iv[SM4_BLOCK_SIZE];
|
||||
uint8_t block[SM4_BLOCK_SIZE];
|
||||
size_t block_nbytes;
|
||||
} SM4_OFB_CTX;
|
||||
|
||||
int sm4_ofb_encrypt_init(SM4_OFB_CTX *ctx,
|
||||
const uint8_t key[SM4_BLOCK_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]);
|
||||
int sm4_ofb_encrypt_update(SM4_OFB_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ofb_encrypt_finish(SM4_OFB_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
#endif // ENABLE_SM4_OFB
|
||||
|
||||
|
||||
#ifdef ENABLE_SM4_CFB
|
||||
#define SM4_CFB_MIN_SBYTES 1
|
||||
#define SM4_CFB_MAX_SBYTES 16
|
||||
|
||||
// pre-defined values for `sbytes`
|
||||
#define SM4_CFB_8 1
|
||||
#define SM4_CFB_64 8
|
||||
#define SM4_CFB_128 16
|
||||
|
||||
// always call `sm4_set_encrypt_key` before encrypt/decrypt
|
||||
// `sm4_cfb_encrypt/decrypt` will change the param `iv`
|
||||
void sm4_cfb_encrypt(const SM4_KEY *key, size_t sbytes, uint8_t iv[16],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
void sm4_cfb_decrypt(const SM4_KEY *key, size_t sbytes, uint8_t iv[16],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
|
||||
typedef struct {
|
||||
SM4_KEY sm4_key;
|
||||
uint8_t iv[SM4_BLOCK_SIZE];
|
||||
uint8_t block[SM4_BLOCK_SIZE];
|
||||
size_t block_nbytes;
|
||||
size_t sbytes;
|
||||
} SM4_CFB_CTX;
|
||||
|
||||
int sm4_cfb_encrypt_init(SM4_CFB_CTX *ctx, size_t sbytes,
|
||||
const uint8_t key[SM4_BLOCK_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]);
|
||||
int sm4_cfb_encrypt_update(SM4_CFB_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cfb_encrypt_finish(SM4_CFB_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
|
||||
int sm4_cfb_decrypt_init(SM4_CFB_CTX *ctx, size_t sbytes,
|
||||
const uint8_t key[SM4_BLOCK_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]);
|
||||
int sm4_cfb_decrypt_update(SM4_CFB_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cfb_decrypt_finish(SM4_CFB_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
#endif // ENABLE_SM4_CFB
|
||||
|
||||
|
||||
#ifdef ENABLE_SM4_CCM
|
||||
#define SM4_CCM_MIN_IV_SIZE 7
|
||||
#define SM4_CCM_MAX_IV_SIZE 13
|
||||
#define SM4_CCM_MIN_TAG_SIZE 4
|
||||
#define SM4_CCM_MAX_TAG_SIZE 16
|
||||
#define SM4_CCM_DEFAULT_TAG_SIZE 16
|
||||
|
||||
// make sure inlen < 2^((15 - ivlen) * 8)
|
||||
int sm4_ccm_encrypt(const SM4_KEY *sm4_key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
uint8_t *out, size_t taglen, uint8_t *tag);
|
||||
int sm4_ccm_decrypt(const SM4_KEY *sm4_key, const uint8_t *iv, size_t ivlen,
|
||||
const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen,
|
||||
const uint8_t *tag, size_t taglen, uint8_t *out);
|
||||
#endif // ENABLE_SM4_CCM
|
||||
|
||||
|
||||
#ifdef ENABLE_SM4_XTS
|
||||
// call `sm4_set_encrypt_key` to set both `key1` and `key2`
|
||||
int sm4_xts_encrypt(const SM4_KEY *key1, const SM4_KEY *key2, const uint8_t tweak[16],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
// call `sm4_set_decrypt_key(key1)` and `sm4_set_encrypt_key(key2)`
|
||||
int sm4_xts_decrypt(const SM4_KEY *key1, const SM4_KEY *key2, const uint8_t tweak[16],
|
||||
const uint8_t *in, size_t inlen, uint8_t *out);
|
||||
|
||||
typedef struct {
|
||||
SM4_KEY key1;
|
||||
SM4_KEY key2;
|
||||
uint8_t tweak[16];
|
||||
size_t data_unit_size;
|
||||
uint8_t *block;
|
||||
size_t block_nbytes;
|
||||
} SM4_XTS_CTX;
|
||||
|
||||
int sm4_xts_encrypt_init(SM4_XTS_CTX *ctx, const uint8_t key[32], const uint8_t iv[16], size_t data_unit_size);
|
||||
int sm4_xts_encrypt_update(SM4_XTS_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_xts_encrypt_finish(SM4_XTS_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
int sm4_xts_decrypt_init(SM4_XTS_CTX *ctx, const uint8_t key[32], const uint8_t iv[16], size_t data_unit_size);
|
||||
int sm4_xts_decrypt_update(SM4_XTS_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_xts_decrypt_finish(SM4_XTS_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
#endif // ENABLE_SM4_XTS
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -24,6 +24,8 @@ typedef struct {
|
||||
size_t ivlen;
|
||||
} SM4_CBC_MAC_CTX;
|
||||
|
||||
#define SM4_CBC_MAC_SIZE (SM4_BLOCK_SIZE)
|
||||
|
||||
void sm4_cbc_mac_init(SM4_CBC_MAC_CTX *ctx, const uint8_t key[16]);
|
||||
void sm4_cbc_mac_update(SM4_CBC_MAC_CTX *ctx, const uint8_t *data, size_t datalen);
|
||||
void sm4_cbc_mac_finish(SM4_CBC_MAC_CTX *ctx, uint8_t mac[16]);
|
||||
|
||||
52
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_sm3_hmac.h
vendored
Normal file
52
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_sm3_hmac.h
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM4_CBC_SM3_HMAC_H
|
||||
#define GMSSL_SM4_CBC_SM3_HMAC_H
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm4.h>
|
||||
#include <gmssl/sm3.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM4_CBC_CTX enc_ctx;
|
||||
SM3_HMAC_CTX mac_ctx;
|
||||
uint8_t mac[SM3_HMAC_SIZE];
|
||||
size_t maclen;
|
||||
} SM4_CBC_SM3_HMAC_CTX;
|
||||
|
||||
#define SM4_CBC_SM3_HMAC_KEY_SIZE 48
|
||||
#define SM4_CBC_SM3_HMAC_IV_SIZE 16
|
||||
|
||||
int sm4_cbc_sm3_hmac_encrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t key[48], const uint8_t iv[16],
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
int sm4_cbc_sm3_hmac_encrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cbc_sm3_hmac_encrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
int sm4_cbc_sm3_hmac_decrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t key[48], const uint8_t iv[16],
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
int sm4_cbc_sm3_hmac_decrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_cbc_sm3_hmac_decrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
21
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h
vendored
21
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -10,44 +10,39 @@
|
||||
#ifndef GMSSL_SM4_CL_H
|
||||
#define GMSSL_SM4_CL_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm4.h>
|
||||
|
||||
|
||||
#ifdef APPLE
|
||||
#ifdef MACOS
|
||||
#include <OpenCL/OpenCL.h>
|
||||
#else
|
||||
#include <CL/cl.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint32_t rk[32];
|
||||
//size_t workgroup_size;
|
||||
cl_context context;
|
||||
cl_command_queue queue;
|
||||
cl_program program;
|
||||
cl_kernel kernel;
|
||||
cl_mem mem_rk;
|
||||
cl_mem mem_io;
|
||||
size_t workgroup_size;
|
||||
} SM4_CL_CTX;
|
||||
|
||||
|
||||
int sm4_cl_set_encrypt_key(SM4_CL_CTX *ctx, const uint8_t key[16]);
|
||||
int sm4_cl_set_decrypt_key(SM4_CL_CTX *ctx, const uint8_t key[16]);
|
||||
int sm4_cl_encrypt(SM4_CL_CTX *ctx, const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
int sm4_cl_ctr32_encrypt_blocks(SM4_CL_CTX *ctx, uint8_t iv[16], const uint8_t *in, size_t nblocks, uint8_t *out);
|
||||
void sm4_cl_cleanup(SM4_CL_CTX *ctx);
|
||||
|
||||
int test_sm4_cl_encrypt(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
52
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_ctr_sm3_hmac.h
vendored
Normal file
52
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_ctr_sm3_hmac.h
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM4_CTR_SM3_HMAC_H
|
||||
#define GMSSL_SM4_CTR_SM3_HMAC_H
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm4.h>
|
||||
#include <gmssl/sm3.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
SM4_CTR_CTX enc_ctx;
|
||||
SM3_HMAC_CTX mac_ctx;
|
||||
uint8_t mac[SM3_HMAC_SIZE];
|
||||
size_t maclen;
|
||||
} SM4_CTR_SM3_HMAC_CTX;
|
||||
|
||||
#define SM4_CTR_SM3_HMAC_KEY_SIZE 48
|
||||
#define SM4_CTR_SM3_HMAC_IV_SIZE 16
|
||||
|
||||
int sm4_ctr_sm3_hmac_encrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t key[48], const uint8_t iv[16],
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
int sm4_ctr_sm3_hmac_encrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ctr_sm3_hmac_encrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
int sm4_ctr_sm3_hmac_decrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t key[48], const uint8_t iv[16],
|
||||
const uint8_t *aad, size_t aadlen);
|
||||
int sm4_ctr_sm3_hmac_decrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int sm4_ctr_sm3_hmac_decrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx,
|
||||
uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
43
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_rng.h
vendored
43
thirdparty/GmSSL-3.1.1/include/gmssl/sm4_rng.h
vendored
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM4_RNG_H
|
||||
#define GMSSL_SM4_RNG_H
|
||||
|
||||
#include <time.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define SM4_RNG_MAX_RESEED_COUNTER (1<<20)
|
||||
#define SM4_RNG_MAX_RESEED_SECONDS 600
|
||||
|
||||
typedef struct {
|
||||
uint8_t V[16];
|
||||
uint8_t K[16];
|
||||
uint32_t reseed_counter;
|
||||
time_t last_reseed_time;
|
||||
} SM4_RNG;
|
||||
|
||||
|
||||
int sm4_rng_init(SM4_RNG *rng, const uint8_t *nonce, size_t nonce_len,
|
||||
const uint8_t *label, size_t label_len);
|
||||
int sm4_rng_update(SM4_RNG *rng, const uint8_t seed[32]);
|
||||
int sm4_rng_reseed(SM4_RNG *rng, const uint8_t *addin, size_t addin_len);
|
||||
int sm4_rng_generate(SM4_RNG *rng, const uint8_t *addin, size_t addin_len,
|
||||
uint8_t *out, size_t outlen);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
388
thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h
vendored
388
thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -7,6 +7,8 @@
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM9_H
|
||||
#define GMSSL_SM9_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -14,346 +16,15 @@
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#include <gmssl/sm2.h>
|
||||
|
||||
|
||||
#ifndef GMSSL_SM9_H
|
||||
#define GMSSL_SM9_H
|
||||
#include <gmssl/sm9_z256.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
SM9 Public API
|
||||
|
||||
SM9_SIGNATURE_SIZE
|
||||
SM9_MAX_PLAINTEXT_SIZE
|
||||
SM9_MAX_CIPHERTEXT_SIZE
|
||||
|
||||
SM9_SIGN_MASTER_KEY
|
||||
sm9_sign_master_key_generate
|
||||
sm9_sign_master_key_extract_key
|
||||
sm9_sign_master_key_info_encrypt_to_der
|
||||
sm9_sign_master_key_info_decrypt_from_der
|
||||
sm9_sign_master_key_info_encrypt_to_pem
|
||||
sm9_sign_master_key_info_decrypt_from_pem
|
||||
sm9_sign_master_public_key_to_der
|
||||
sm9_sign_master_public_key_from_der
|
||||
sm9_sign_master_public_key_to_pem
|
||||
sm9_sign_master_public_key_from_pem
|
||||
|
||||
SM9_SIGN_KEY
|
||||
sm9_sign_key_info_encrypt_to_der
|
||||
sm9_sign_key_info_decrypt_from_der
|
||||
sm9_sign_key_info_encrypt_to_pem
|
||||
sm9_sign_key_info_decrypt_from_pem
|
||||
|
||||
SM9_SIGN_CTX
|
||||
sm9_sign_init
|
||||
sm9_sign_update
|
||||
sm9_sign_finish
|
||||
sm9_verify_init
|
||||
sm9_verify_update
|
||||
sm9_verify_finish
|
||||
|
||||
SM9_ENC_MASTER_KEY
|
||||
sm9_enc_master_key_generate
|
||||
sm9_enc_master_key_extract_key
|
||||
sm9_enc_master_key_info_encrypt_to_der
|
||||
sm9_enc_master_key_info_decrypt_from_der
|
||||
sm9_enc_master_key_info_encrypt_to_pem
|
||||
sm9_enc_master_key_info_decrypt_from_pem
|
||||
sm9_enc_master_public_key_to_der
|
||||
sm9_enc_master_public_key_from_der
|
||||
sm9_enc_master_public_key_to_pem
|
||||
sm9_enc_master_public_key_from_pem
|
||||
|
||||
SM9_ENC_KEY
|
||||
sm9_enc_key_info_encrypt_to_der
|
||||
sm9_enc_key_info_decrypt_from_der
|
||||
sm9_enc_key_info_encrypt_to_pem
|
||||
sm9_enc_key_info_decrypt_from_pem
|
||||
|
||||
sm9_encrypt
|
||||
sm9_decrypt
|
||||
*/
|
||||
|
||||
#define SM9_HEX_SEP '\n'
|
||||
|
||||
typedef uint64_t sm9_bn_t[8];
|
||||
|
||||
#define sm9_bn_init(r) sm9_bn_set_zero(r)
|
||||
#define sm9_bn_clean(r) sm9_bn_set_zero(r)
|
||||
|
||||
void sm9_bn_set_zero(sm9_bn_t r);
|
||||
void sm9_bn_set_one(sm9_bn_t r);
|
||||
int sm9_bn_is_zero(const sm9_bn_t a);
|
||||
int sm9_bn_is_one(const sm9_bn_t a);
|
||||
void sm9_bn_set_word(sm9_bn_t r, uint32_t a);
|
||||
void sm9_bn_copy(sm9_bn_t r, const sm9_bn_t a);
|
||||
int sm9_bn_rand_range(sm9_bn_t r, const sm9_bn_t range);
|
||||
int sm9_bn_equ(const sm9_bn_t a, const sm9_bn_t b);
|
||||
int sm9_bn_cmp(const sm9_bn_t a, const sm9_bn_t b);
|
||||
void sm9_bn_add(sm9_bn_t r, const sm9_bn_t a, const sm9_bn_t b);
|
||||
void sm9_bn_sub(sm9_bn_t ret, const sm9_bn_t a, const sm9_bn_t b);
|
||||
void sm9_bn_to_bits(const sm9_bn_t a, char bits[256]);
|
||||
void sm9_bn_to_bytes(const sm9_bn_t a, uint8_t out[32]);
|
||||
void sm9_bn_from_bytes(sm9_bn_t r, const uint8_t in[32]);
|
||||
void sm9_bn_to_hex(const sm9_bn_t a, char hex[64]);
|
||||
int sm9_bn_from_hex(sm9_bn_t r, const char hex[64]);
|
||||
int sm9_bn_print(FILE *fp, int fmt, int ind, const char *label, const sm9_bn_t a);
|
||||
void sm9_print_bn(const char *prefix, const sm9_bn_t a); // 标准打印格式
|
||||
|
||||
|
||||
typedef sm9_bn_t sm9_fp_t;
|
||||
|
||||
#define sm9_fp_init(r) sm9_fp_set_zero(r)
|
||||
#define sm9_fp_clean(f) sm9_fp_set_zero(r)
|
||||
#define sm9_fp_set_zero(r) sm9_bn_set_zero(r)
|
||||
#define sm9_fp_set_one(r) sm9_bn_set_one(r)
|
||||
#define sm9_fp_copy(r,a) sm9_bn_copy((r),(a))
|
||||
#define sm9_fp_rand(r) sm9_bn_rand_range((r), SM9_P)
|
||||
#define sm9_fp_is_zero(a) sm9_bn_is_zero(a)
|
||||
#define sm9_fp_is_one(a) sm9_bn_is_one(a)
|
||||
#define sm9_fp_equ(a,b) sm9_bn_equ((a),(b))
|
||||
#define sm9_fp_to_bytes(a,buf) sm9_bn_to_bytes((a),(buf))
|
||||
#define sm9_fp_to_hex(a,s) sm9_bn_to_hex((a),(s))
|
||||
#define sm9_fp_print(fp,fmt,ind,label,a) sm9_bn_print(fp,fmt,ind,label,a)
|
||||
|
||||
void sm9_fp_add(sm9_fp_t r, const sm9_fp_t a, const sm9_fp_t b);
|
||||
void sm9_fp_sub(sm9_fp_t r, const sm9_fp_t a, const sm9_fp_t b);
|
||||
void sm9_fp_dbl(sm9_fp_t r, const sm9_fp_t a);
|
||||
void sm9_fp_tri(sm9_fp_t r, const sm9_fp_t a);
|
||||
void sm9_fp_neg(sm9_fp_t r, const sm9_fp_t a);
|
||||
void sm9_fp_mul(sm9_fp_t r, const sm9_fp_t a, const sm9_fp_t b);
|
||||
void sm9_fp_sqr(sm9_fp_t r, const sm9_fp_t a);
|
||||
void sm9_fp_pow(sm9_fp_t r, const sm9_fp_t a, const sm9_bn_t e);
|
||||
void sm9_fp_inv(sm9_fp_t r, const sm9_fp_t a);
|
||||
void sm9_fp_div2(sm9_fp_t r, const sm9_fp_t a);
|
||||
int sm9_fp_from_bytes(sm9_fp_t r, const uint8_t buf[32]);
|
||||
int sm9_fp_from_hex(sm9_fp_t r, const char hex[64]);
|
||||
|
||||
|
||||
typedef sm9_bn_t sm9_fn_t;
|
||||
|
||||
#define sm9_fn_init(r) sm9_fn_set_zero(r)
|
||||
#define sm9_fn_clean(f) sm9_fn_set_zero(r)
|
||||
#define sm9_fn_set_zero(r) sm9_bn_set_zero(r)
|
||||
#define sm9_fn_set_one(r) sm9_bn_set_one(r)
|
||||
#define sm9_fn_copy(r,a) sm9_bn_copy((r),(a))
|
||||
#define sm9_fn_rand(r) sm9_bn_rand_range((r), SM9_N)
|
||||
#define sm9_fn_is_zero(a) sm9_bn_is_zero(a)
|
||||
#define sm9_fn_is_one(a) sm9_bn_is_one(a)
|
||||
#define sm9_fn_equ(a,b) sm9_bn_equ((a),(b))
|
||||
#define sm9_fn_to_bytes(a,out) sm9_bn_to_bytes((a),(out))
|
||||
#define sm9_fn_to_hex(a,s) sm9_bn_to_hex((a),(s))
|
||||
#define sm9_fn_print(fp,fmt,ind,label,a) sm9_bn_print(fp,fmt,ind,label,a)
|
||||
|
||||
void sm9_fn_add(sm9_fn_t r, const sm9_fn_t a, const sm9_fn_t b);
|
||||
void sm9_fn_sub(sm9_fn_t r, const sm9_fn_t a, const sm9_fn_t b);
|
||||
void sm9_fn_mul(sm9_fn_t r, const sm9_fn_t a, const sm9_fn_t b);
|
||||
void sm9_fn_pow(sm9_fn_t r, const sm9_fn_t a, const sm9_bn_t e);
|
||||
void sm9_fn_inv(sm9_fn_t r, const sm9_fn_t a);
|
||||
void sm9_fn_from_hash(sm9_fn_t h, const uint8_t Ha[40]);
|
||||
int sm9_fn_from_bytes(sm9_fn_t a, const uint8_t in[32]);
|
||||
int sm9_fn_from_hex(sm9_fn_t r, const char hex[64]);
|
||||
|
||||
|
||||
typedef uint64_t sm9_barrett_bn_t[9];
|
||||
|
||||
int sm9_barrett_bn_cmp(const sm9_barrett_bn_t a, const sm9_barrett_bn_t b);
|
||||
void sm9_barrett_bn_add(sm9_barrett_bn_t r, const sm9_barrett_bn_t a, const sm9_barrett_bn_t b);
|
||||
void sm9_barrett_bn_sub(sm9_barrett_bn_t ret, const sm9_barrett_bn_t a, const sm9_barrett_bn_t b);
|
||||
|
||||
|
||||
typedef sm9_fp_t sm9_fp2_t[2];
|
||||
extern const sm9_fp2_t SM9_FP2_ZERO;
|
||||
extern const sm9_fp2_t SM9_FP2_ONE;
|
||||
extern const sm9_fp2_t SM9_FP2_U;
|
||||
|
||||
#define sm9_fp2_init(a) sm9_fp2_set_zero(a)
|
||||
#define sm9_fp2_clean(a) sm9_fp2_set_zero(a)
|
||||
#define sm9_fp2_set_zero(a) sm9_fp2_copy((a), SM9_FP2_ZERO)
|
||||
#define sm9_fp2_set_one(a) sm9_fp2_copy((a), SM9_FP2_ONE)
|
||||
#define sm9_fp2_set_u(a) sm9_fp2_copy((a), SM9_FP2_U)
|
||||
#define sm9_fp2_is_zero(a) sm9_fp2_equ((a), SM9_FP2_ZERO)
|
||||
#define sm9_fp2_is_one(a) sm9_fp2_equ((a), SM9_FP2_ONE)
|
||||
|
||||
void sm9_fp2_set_fp(sm9_fp2_t r, const sm9_fp_t a);
|
||||
void sm9_fp2_set(sm9_fp2_t r, const sm9_fp_t a0, const sm9_fp_t a1);
|
||||
void sm9_fp2_copy(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
int sm9_fp2_rand(sm9_fp2_t r);
|
||||
int sm9_fp2_equ(const sm9_fp2_t a, const sm9_fp2_t b);
|
||||
void sm9_fp2_add(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b);
|
||||
void sm9_fp2_dbl(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_tri(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_sub(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b);
|
||||
void sm9_fp2_neg(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_mul(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b);
|
||||
void sm9_fp2_mul_u(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b);
|
||||
void sm9_fp2_mul_fp(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp_t k);
|
||||
void sm9_fp2_sqr(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_sqr_u(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_inv(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_div(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b);
|
||||
void sm9_fp2_div2(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_to_hex(const sm9_fp2_t a, char hex[129]);
|
||||
int sm9_fp2_from_hex(sm9_fp2_t r, const char hex[129]);
|
||||
int sm9_fp2_print(FILE *fp, int fmt, int ind, const char *label, const sm9_fp2_t a);
|
||||
|
||||
|
||||
typedef sm9_fp2_t sm9_fp4_t[2];
|
||||
extern const sm9_fp4_t SM9_FP4_ZERO;
|
||||
extern const sm9_fp4_t SM9_FP4_ONE;
|
||||
extern const sm9_fp4_t SM9_FP4_U;
|
||||
extern const sm9_fp4_t SM9_FP4_V;
|
||||
|
||||
#define sm9_fp4_init(a) sm9_fp4_set_zero(a)
|
||||
#define sm9_fp4_clean(a) sm9_fp4_set_zero(a)
|
||||
#define sm9_fp4_set_zero(a) sm9_fp4_copy((a), SM9_FP4_ZERO)
|
||||
#define sm9_fp4_set_one(a) sm9_fp4_copy((a), SM9_FP4_ONE)
|
||||
#define sm9_fp4_is_zero(a) sm9_fp4_equ((a), SM9_FP4_ZERO)
|
||||
#define sm9_fp4_is_one(a) sm9_fp4_equ((a), SM9_FP4_ONE)
|
||||
|
||||
void sm9_fp4_set_u(sm9_fp4_t r);
|
||||
void sm9_fp4_set_v(sm9_fp4_t r);
|
||||
void sm9_fp4_set_fp(sm9_fp4_t r, const sm9_fp_t a);
|
||||
void sm9_fp4_set_fp2(sm9_fp4_t r, const sm9_fp2_t a);
|
||||
void sm9_fp4_set(sm9_fp4_t r, const sm9_fp2_t a0, const sm9_fp2_t a1);
|
||||
void sm9_fp4_copy(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
int sm9_fp4_rand(sm9_fp4_t r);
|
||||
int sm9_fp4_equ(const sm9_fp4_t a, const sm9_fp4_t b);
|
||||
void sm9_fp4_add(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b);
|
||||
void sm9_fp4_dbl(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_sub(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b);
|
||||
void sm9_fp4_neg(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_mul(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b);
|
||||
void sm9_fp4_mul_fp(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp_t k);
|
||||
void sm9_fp4_mul_fp2(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp2_t b0);
|
||||
void sm9_fp4_mul_v(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b);
|
||||
void sm9_fp4_sqr(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_sqr_v(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_inv(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_to_bytes(const sm9_fp4_t a, uint8_t buf[128]);
|
||||
int sm9_fp4_from_bytes(sm9_fp4_t r, const uint8_t buf[128]);
|
||||
void sm9_fp4_to_hex(const sm9_fp4_t a, char hex[259]);
|
||||
int sm9_fp4_from_hex(sm9_fp4_t r, const char hex[259]);
|
||||
|
||||
|
||||
typedef sm9_fp4_t sm9_fp12_t[3];
|
||||
|
||||
#define sm9_fp12_init(r) sm9_fp12_set_zero(a)
|
||||
#define sm9_fp12_clean(r) sm9_fp12_set_zero(a)
|
||||
|
||||
void sm9_fp12_set_zero(sm9_fp12_t r);
|
||||
void sm9_fp12_set_one(sm9_fp12_t r);
|
||||
void sm9_fp12_set_u(sm9_fp12_t r);
|
||||
void sm9_fp12_set_v(sm9_fp12_t r);
|
||||
void sm9_fp12_set_w(sm9_fp12_t r);
|
||||
void sm9_fp12_set_w_sqr(sm9_fp12_t r);
|
||||
void sm9_fp12_set_fp(sm9_fp12_t r, const sm9_fp_t a);
|
||||
void sm9_fp12_set_fp2(sm9_fp12_t r, const sm9_fp2_t a);
|
||||
void sm9_fp12_set_fp4(sm9_fp12_t r, const sm9_fp4_t a);
|
||||
void sm9_fp12_set(sm9_fp12_t r, const sm9_fp4_t a0, const sm9_fp4_t a1, const sm9_fp4_t a2);
|
||||
void sm9_fp12_copy(sm9_fp12_t r, const sm9_fp12_t a);
|
||||
int sm9_fp12_rand(sm9_fp12_t r);
|
||||
int sm9_fp12_is_one(const sm9_fp12_t a);
|
||||
int sm9_fp12_is_zero(const sm9_fp12_t a);
|
||||
int sm9_fp12_equ(const sm9_fp12_t a, const sm9_fp12_t b);
|
||||
void sm9_fp12_add(sm9_fp12_t r, const sm9_fp12_t a, const sm9_fp12_t b);
|
||||
void sm9_fp12_dbl(sm9_fp12_t r, const sm9_fp12_t a);
|
||||
void sm9_fp12_tri(sm9_fp12_t r, const sm9_fp12_t a);
|
||||
void sm9_fp12_sub(sm9_fp12_t r, const sm9_fp12_t a, const sm9_fp12_t b);
|
||||
void sm9_fp12_neg(sm9_fp12_t r, const sm9_fp12_t a);
|
||||
void sm9_fp12_mul(sm9_fp12_t r, const sm9_fp12_t a, const sm9_fp12_t b);
|
||||
void sm9_fp12_sqr(sm9_fp12_t r, const sm9_fp12_t a);
|
||||
void sm9_fp12_inv(sm9_fp12_t r, const sm9_fp12_t a);
|
||||
void sm9_fp12_pow(sm9_fp12_t r, const sm9_fp12_t a, const sm9_bn_t k);
|
||||
void sm9_fp12_to_bytes(const sm9_fp12_t a, uint8_t buf[32 * 12]);
|
||||
int sm9_fp12_from_bytes(sm9_fp12_t r, const uint8_t in[32 * 12]);
|
||||
void sm9_fp12_to_hex(const sm9_fp12_t a, char hex[65 * 12]);
|
||||
int sm9_fp12_from_hex(sm9_fp12_t r, const char hex[65 * 12]); // 这个明显是不对的
|
||||
void sm9_fp12_print(const char *prefix, const sm9_fp12_t a);
|
||||
|
||||
|
||||
void sm9_fp2_conjugate(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp2_frobenius(sm9_fp2_t r, const sm9_fp2_t a);
|
||||
void sm9_fp4_frobenius(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_conjugate(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_frobenius2(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp4_frobenius3(sm9_fp4_t r, const sm9_fp4_t a);
|
||||
void sm9_fp12_frobenius(sm9_fp12_t r, const sm9_fp12_t x);
|
||||
void sm9_fp12_frobenius2(sm9_fp12_t r, const sm9_fp12_t x);
|
||||
void sm9_fp12_frobenius3(sm9_fp12_t r, const sm9_fp12_t x);
|
||||
void sm9_fp12_frobenius6(sm9_fp12_t r, const sm9_fp12_t x);
|
||||
|
||||
|
||||
typedef struct {
|
||||
sm9_fp_t X;
|
||||
sm9_fp_t Y;
|
||||
sm9_fp_t Z;
|
||||
} SM9_POINT;
|
||||
|
||||
#define sm9_point_init(R) sm9_point_set_infinity(R)
|
||||
#define sm9_point_clean(R) sm9_point_set_infinity(R)
|
||||
|
||||
void sm9_point_set_infinity(SM9_POINT *R);
|
||||
void sm9_point_copy(SM9_POINT *R, const SM9_POINT *P);
|
||||
void sm9_point_get_xy(const SM9_POINT *P, sm9_fp_t x, sm9_fp_t y);
|
||||
int sm9_point_is_at_infinity(const SM9_POINT *P);
|
||||
int sm9_point_equ(const SM9_POINT *P, const SM9_POINT *Q);
|
||||
int sm9_point_is_on_curve(const SM9_POINT *P);
|
||||
void sm9_point_dbl(SM9_POINT *R, const SM9_POINT *P);
|
||||
void sm9_point_add(SM9_POINT *R, const SM9_POINT *P, const SM9_POINT *Q);
|
||||
void sm9_point_neg(SM9_POINT *R, const SM9_POINT *P);
|
||||
void sm9_point_sub(SM9_POINT *R, const SM9_POINT *P, const SM9_POINT *Q);
|
||||
void sm9_point_mul(SM9_POINT *R, const sm9_bn_t k, const SM9_POINT *P);
|
||||
void sm9_point_mul_generator(SM9_POINT *R, const sm9_bn_t k);
|
||||
void sm9_point_from_hex(SM9_POINT *R, const char hex[65 * 2]);
|
||||
int sm9_point_to_uncompressed_octets(const SM9_POINT *P, uint8_t octets[65]);
|
||||
int sm9_point_from_uncompressed_octets(SM9_POINT *P, const uint8_t octets[65]);
|
||||
int sm9_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_POINT *P);
|
||||
|
||||
|
||||
typedef struct {
|
||||
sm9_fp2_t X;
|
||||
sm9_fp2_t Y;
|
||||
sm9_fp2_t Z;
|
||||
} SM9_TWIST_POINT;
|
||||
|
||||
#define sm9_twist_point_copy(R, P) memcpy((R), (P), sizeof(SM9_TWIST_POINT))
|
||||
|
||||
int sm9_twist_point_to_uncompressed_octets(const SM9_TWIST_POINT *P, uint8_t octets[129]);
|
||||
int sm9_twist_point_from_uncompressed_octets(SM9_TWIST_POINT *P, const uint8_t octets[129]);
|
||||
|
||||
|
||||
void sm9_twist_point_from_hex(SM9_TWIST_POINT *R, const char hex[65 * 4]);
|
||||
int sm9_twist_point_is_at_infinity(const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_set_infinity(SM9_TWIST_POINT *R);
|
||||
void sm9_twist_point_get_xy(const SM9_TWIST_POINT *P, sm9_fp2_t x, sm9_fp2_t y);
|
||||
|
||||
int sm9_twist_point_equ(const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q);
|
||||
int sm9_twist_point_is_on_curve(const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_neg(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_dbl(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_add(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q);
|
||||
void sm9_twist_point_sub(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q);
|
||||
void sm9_twist_point_add_full(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q);
|
||||
void sm9_twist_point_mul(SM9_TWIST_POINT *R, const sm9_bn_t k, const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_mul_generator(SM9_TWIST_POINT *R, const sm9_bn_t k);
|
||||
int sm9_twist_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_TWIST_POINT *P);
|
||||
|
||||
|
||||
|
||||
void sm9_eval_g_tangent(sm9_fp12_t num, sm9_fp12_t den, const SM9_TWIST_POINT *P, const SM9_POINT *Q);
|
||||
void sm9_eval_g_line(sm9_fp12_t num, sm9_fp12_t den, const SM9_TWIST_POINT *T, const SM9_TWIST_POINT *P, const SM9_POINT *Q);
|
||||
void sm9_twist_point_pi1(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_pi2(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P);
|
||||
void sm9_twist_point_neg_pi2(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P);
|
||||
void sm9_final_exponent_hard_part(sm9_fp12_t r, const sm9_fp12_t f);
|
||||
void sm9_final_exponent(sm9_fp12_t r, const sm9_fp12_t f);
|
||||
void sm9_pairing(sm9_fp12_t r, const SM9_TWIST_POINT *Q, const SM9_POINT *P);
|
||||
|
||||
int sm9_z256_hash1(sm9_z256_t h1, const char *id, size_t idlen, uint8_t hid);
|
||||
|
||||
/* private key extract algorithms */
|
||||
#define SM9_HID_SIGN 0x01
|
||||
@@ -363,9 +34,6 @@ void sm9_pairing(sm9_fp12_t r, const SM9_TWIST_POINT *Q, const SM9_POINT *P);
|
||||
#define SM9_HASH1_PREFIX 0x01
|
||||
#define SM9_HASH2_PREFIX 0x02
|
||||
|
||||
int sm9_hash1(sm9_bn_t h1, const char *id, size_t idlen, uint8_t hid);
|
||||
|
||||
|
||||
const char *sm9_oid_name(int oid);
|
||||
int sm9_oid_from_name(const char *name);
|
||||
int sm9_oid_to_der(int oid, uint8_t **out, size_t *outlen);
|
||||
@@ -397,13 +65,13 @@ SM9SignPrivateKey ::= SEQUENCE {
|
||||
Ppubs BIT STRING -- uncompressed octets of twisted point }
|
||||
*/
|
||||
typedef struct {
|
||||
SM9_TWIST_POINT Ppubs; // Ppubs = ks * P2
|
||||
sm9_fn_t ks;
|
||||
SM9_Z256_TWIST_POINT Ppubs; // Ppubs = ks * P2
|
||||
sm9_z256_t ks;
|
||||
} SM9_SIGN_MASTER_KEY;
|
||||
|
||||
typedef struct {
|
||||
SM9_TWIST_POINT Ppubs;
|
||||
SM9_POINT ds;
|
||||
SM9_Z256_TWIST_POINT Ppubs;
|
||||
SM9_Z256_POINT ds;
|
||||
} SM9_SIGN_KEY;
|
||||
|
||||
int sm9_sign_master_key_generate(SM9_SIGN_MASTER_KEY *master);
|
||||
@@ -443,8 +111,8 @@ SM9Signature ::= SEQUENCE {
|
||||
S BIT STRING -- uncompressed octets of ECPoint }
|
||||
*/
|
||||
typedef struct {
|
||||
sm9_fn_t h;
|
||||
SM9_POINT S;
|
||||
sm9_z256_t h;
|
||||
SM9_Z256_POINT S;
|
||||
} SM9_SIGNATURE;
|
||||
|
||||
int sm9_do_sign(const SM9_SIGN_KEY *key, const SM3_CTX *sm3_ctx, SM9_SIGNATURE *sig);
|
||||
@@ -468,6 +136,7 @@ int sm9_verify_finish(SM9_SIGN_CTX *ctx, const uint8_t *sig, size_t siglen,
|
||||
const SM9_SIGN_MASTER_KEY *mpk, const char *id, size_t idlen);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
SM9EncMasterKey ::= SEQUENCE {
|
||||
de INTEGER,
|
||||
@@ -482,13 +151,13 @@ SM9EncPrivateKey ::= SEQUENCE {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
SM9_POINT Ppube; // Ppube = ke * P1
|
||||
sm9_fn_t ke;
|
||||
SM9_Z256_POINT Ppube; // Ppube = ke * P1
|
||||
sm9_z256_t ke;
|
||||
} SM9_ENC_MASTER_KEY;
|
||||
|
||||
typedef struct {
|
||||
SM9_POINT Ppube;
|
||||
SM9_TWIST_POINT de;
|
||||
SM9_Z256_POINT Ppube;
|
||||
SM9_Z256_TWIST_POINT de;
|
||||
} SM9_ENC_KEY;
|
||||
|
||||
int sm9_enc_master_key_generate(SM9_ENC_MASTER_KEY *master);
|
||||
@@ -534,18 +203,18 @@ SM9Cipher ::= SEQUENCE {
|
||||
CipherText OCTET STRING }
|
||||
*/
|
||||
|
||||
int sm9_kem_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen, size_t klen, uint8_t *kbuf, SM9_POINT *C);
|
||||
int sm9_kem_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const SM9_POINT *C, size_t klen, uint8_t *kbuf);
|
||||
int sm9_kem_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen, size_t klen, uint8_t *kbuf, SM9_Z256_POINT *C);
|
||||
int sm9_kem_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const SM9_Z256_POINT *C, size_t klen, uint8_t *kbuf);
|
||||
int sm9_do_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen,
|
||||
const uint8_t *in, size_t inlen, SM9_POINT *C1, uint8_t *c2, uint8_t c3[SM3_HMAC_SIZE]);
|
||||
const uint8_t *in, size_t inlen, SM9_Z256_POINT *C1, uint8_t *c2, uint8_t c3[SM3_HMAC_SIZE]);
|
||||
int sm9_do_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen,
|
||||
const SM9_POINT *C1, const uint8_t *c2, size_t c2len, const uint8_t c3[SM3_HMAC_SIZE], uint8_t *out);
|
||||
const SM9_Z256_POINT *C1, const uint8_t *c2, size_t c2len, const uint8_t c3[SM3_HMAC_SIZE], uint8_t *out);
|
||||
|
||||
#define SM9_MAX_PLAINTEXT_SIZE 255
|
||||
#define SM9_MAX_CIPHERTEXT_SIZE 367 // calculated in test_sm9_ciphertext()
|
||||
int sm9_ciphertext_to_der(const SM9_POINT *C1, const uint8_t *c2, size_t c2len,
|
||||
int sm9_ciphertext_to_der(const SM9_Z256_POINT *C1, const uint8_t *c2, size_t c2len,
|
||||
const uint8_t c3[SM3_HMAC_SIZE], uint8_t **out, size_t *outlen);
|
||||
int sm9_ciphertext_from_der(SM9_POINT *C1, const uint8_t **c2, size_t *c2len,
|
||||
int sm9_ciphertext_from_der(SM9_Z256_POINT *C1, const uint8_t **c2, size_t *c2len,
|
||||
const uint8_t **c3, const uint8_t **in, size_t *inlen);
|
||||
int sm9_ciphertext_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *a, size_t alen);
|
||||
int sm9_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen,
|
||||
@@ -554,6 +223,19 @@ int sm9_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen,
|
||||
const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
// SM9 Key Exchange (To be continued)
|
||||
#define SM9_EXCH_MASTER_KEY SM9_ENC_MASTER_KEY
|
||||
#define SM9_EXCH_KEY SM9_ENC_KEY
|
||||
#define sm9_exch_master_key_generate(msk) sm9_enc_master_key_generate(msk)
|
||||
int sm9_exch_master_key_extract_key(SM9_EXCH_MASTER_KEY *master, const char *id, size_t idlen, SM9_EXCH_KEY *key);
|
||||
|
||||
int sm9_exch_step_1A(const SM9_EXCH_MASTER_KEY *mpk, const char *idB, size_t idBlen, SM9_Z256_POINT *RA, sm9_z256_t rA);
|
||||
int sm9_exch_step_1B(const SM9_EXCH_MASTER_KEY *mpk, const char *idA, size_t idAlen, const char *idB, size_t idBlen,
|
||||
const SM9_EXCH_KEY *key, const SM9_Z256_POINT *RA, SM9_Z256_POINT *RB, uint8_t *sk, size_t klen);
|
||||
int sm9_exch_step_2A(const SM9_EXCH_MASTER_KEY *mpk, const char *idA, size_t idAlen, const char *idB, size_t idBlen,
|
||||
const SM9_EXCH_KEY *key, const sm9_z256_t rA, const SM9_Z256_POINT *RA, const SM9_Z256_POINT *RB, uint8_t *sk, size_t klen);
|
||||
int sm9_exch_step_2B();
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
247
thirdparty/GmSSL-3.1.1/include/gmssl/sm9_z256.h
vendored
Normal file
247
thirdparty/GmSSL-3.1.1/include/gmssl/sm9_z256.h
vendored
Normal file
@@ -0,0 +1,247 @@
|
||||
/*
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
|
||||
#ifndef GMSSL_SM9_Z256_H
|
||||
#define GMSSL_SM9_Z256_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <gmssl/sm3.h>
|
||||
#include <gmssl/sm2.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef uint64_t sm9_z256_t[4];
|
||||
|
||||
void sm9_z256_set_one(sm9_z256_t r);
|
||||
void sm9_z256_set_zero(sm9_z256_t r);
|
||||
void sm9_z256_copy(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_copy_conditional(sm9_z256_t r, const sm9_z256_t a, uint64_t move);
|
||||
int sm9_z256_cmp(const sm9_z256_t a, const sm9_z256_t b);
|
||||
uint64_t sm9_z256_is_zero(const sm9_z256_t a);
|
||||
uint64_t sm9_z256_equ(const sm9_z256_t a, const sm9_z256_t b);
|
||||
uint64_t sm9_z256_add(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
uint64_t sm9_z256_sub(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_mul(uint64_t r[8], const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_from_bytes(sm9_z256_t r, const uint8_t in[32]);
|
||||
void sm9_z256_to_bytes(const sm9_z256_t a, uint8_t out[32]);
|
||||
int sm9_z256_from_hex(sm9_z256_t r, const char *hex);
|
||||
void sm9_z256_to_hex(const sm9_z256_t r, char hex[64]);
|
||||
int sm9_z256_equ_hex(const sm9_z256_t a, const char *hex);
|
||||
void sm9_z256_to_bits(const sm9_z256_t a, char bits[256]);
|
||||
int sm9_z256_rand_range(sm9_z256_t r, const sm9_z256_t range);
|
||||
void sm9_z256_print_bn(const char *prefix, const sm9_z256_t a);
|
||||
int sm9_z256_print(FILE *fp, int ind, int fmt, const char *label, const sm9_z256_t a);
|
||||
|
||||
const uint64_t *sm9_z256_prime(void);
|
||||
|
||||
void sm9_z256_modp_add(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_modp_sub(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_modp_dbl(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modp_tri(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modp_haf(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modp_neg(sm9_z256_t r, const sm9_z256_t a);
|
||||
|
||||
void sm9_z256_modp_to_mont(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modp_from_mont(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modp_mont_mul(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_modp_mont_sqr(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modp_mont_pow(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t e);
|
||||
void sm9_z256_modp_mont_inv(sm9_z256_t r, const sm9_z256_t a);
|
||||
|
||||
const uint64_t *sm9_z256_order(void);
|
||||
|
||||
void sm9_z256_modn_add(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_modn_sub(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_modn_mul(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b);
|
||||
void sm9_z256_modn_pow(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t e);
|
||||
void sm9_z256_modn_inv(sm9_z256_t r, const sm9_z256_t a);
|
||||
void sm9_z256_modn_from_hash(sm9_z256_t h, const uint8_t Ha[40]);
|
||||
|
||||
|
||||
typedef sm9_z256_t sm9_z256_fp2_t[2];
|
||||
|
||||
void sm9_z256_fp2_set_one(sm9_z256_fp2_t r);
|
||||
void sm9_z256_fp2_set_zero(sm9_z256_fp2_t r);
|
||||
int sm9_z256_fp2_is_one(const sm9_z256_fp2_t a);
|
||||
int sm9_z256_fp2_is_zero(const sm9_z256_fp2_t a);
|
||||
int sm9_z256_fp2_equ(const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
|
||||
void sm9_z256_fp2_copy(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
int sm9_z256_fp2_rand(sm9_z256_fp2_t r);
|
||||
void sm9_z256_fp2_to_bytes(const sm9_z256_fp2_t a, uint8_t buf[64]);
|
||||
int sm9_z256_fp2_from_bytes(sm9_z256_fp2_t r, const uint8_t buf[64]);
|
||||
void sm9_z256_fp2_to_hex(const sm9_z256_fp2_t a, char hex[129]);
|
||||
int sm9_z256_fp2_from_hex(sm9_z256_fp2_t r, const char hex[129]);
|
||||
void sm9_z256_fp2_add(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
|
||||
void sm9_z256_fp2_dbl(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_tri(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_sub(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
|
||||
void sm9_z256_fp2_neg(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_a_mul_u(sm9_z256_fp2_t r, sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_mul(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
|
||||
void sm9_z256_fp2_mul_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
|
||||
void sm9_z256_fp2_mul_fp(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_t k);
|
||||
void sm9_z256_fp2_sqr(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_sqr_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_inv(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_div(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b);
|
||||
void sm9_z256_fp2_haf(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_conjugate(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
void sm9_z256_fp2_frobenius(sm9_z256_fp2_t r, const sm9_z256_fp2_t a);
|
||||
|
||||
|
||||
typedef sm9_z256_fp2_t sm9_z256_fp4_t[2];
|
||||
|
||||
int sm9_z256_fp4_is_zero(const sm9_z256_fp4_t a);
|
||||
int sm9_z256_fp4_equ(const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
|
||||
int sm9_z256_fp4_rand(sm9_z256_fp4_t r);
|
||||
void sm9_z256_fp4_copy(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_to_bytes(const sm9_z256_fp4_t a, uint8_t buf[128]);
|
||||
int sm9_z256_fp4_from_bytes(sm9_z256_fp4_t r, const uint8_t buf[128]);
|
||||
int sm9_z256_fp4_from_hex(sm9_z256_fp4_t r, const char hex[259]);
|
||||
void sm9_z256_fp4_to_hex(const sm9_z256_fp4_t a, char hex[259]);
|
||||
void sm9_z256_fp4_add(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
|
||||
void sm9_z256_fp4_dbl(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_sub(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
|
||||
void sm9_z256_fp4_neg(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_haf(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_a_mul_v(sm9_z256_fp4_t r, sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_mul(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
|
||||
void sm9_z256_fp4_mul_fp(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_t k);
|
||||
void sm9_z256_fp4_mul_fp2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp2_t b0);
|
||||
void sm9_z256_fp4_mul_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b);
|
||||
void sm9_z256_fp4_sqr(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_sqr_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_inv(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_frobenius(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_conjugate(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_frobenius2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
void sm9_z256_fp4_frobenius3(sm9_z256_fp4_t r, const sm9_z256_fp4_t a);
|
||||
|
||||
|
||||
typedef sm9_z256_fp4_t sm9_z256_fp12_t[3];
|
||||
|
||||
void sm9_z256_fp12_set_one(sm9_z256_fp12_t r);
|
||||
void sm9_z256_fp12_set_zero(sm9_z256_fp12_t r);
|
||||
void sm9_z256_fp12_copy(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
|
||||
int sm9_z256_fp12_rand(sm9_z256_fp12_t r);
|
||||
int sm9_z256_fp12_from_hex(sm9_z256_fp12_t r, const char hex[779]); // 779 = 64*12 + 11
|
||||
void sm9_z256_fp12_to_hex(const sm9_z256_fp12_t a, char hex[779]);
|
||||
void sm9_z256_fp12_to_bytes(const sm9_z256_fp12_t a, uint8_t buf[384]);
|
||||
int sm9_z256_fp12_from_bytes(sm9_z256_fp12_t r, const uint8_t buf[384]);
|
||||
|
||||
void sm9_z256_fp12_print(const char *prefix, const sm9_z256_fp12_t a);
|
||||
void sm9_z256_fp12_set(sm9_z256_fp12_t r, const sm9_z256_fp4_t a0, const sm9_z256_fp4_t a1, const sm9_z256_fp4_t a2);
|
||||
int sm9_z256_fp12_equ(const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
|
||||
void sm9_z256_fp12_add(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
|
||||
void sm9_z256_fp12_dbl(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
|
||||
void sm9_z256_fp12_tri(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
|
||||
void sm9_z256_fp12_sub(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
|
||||
void sm9_z256_fp12_neg(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
|
||||
void sm9_z256_fp12_mul(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b);
|
||||
void sm9_z256_fp12_sqr(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
|
||||
void sm9_z256_fp12_inv(sm9_z256_fp12_t r, const sm9_z256_fp12_t a);
|
||||
void sm9_z256_fp12_pow(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_t k);
|
||||
void sm9_z256_fp12_frobenius(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
|
||||
void sm9_z256_fp12_frobenius2(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
|
||||
void sm9_z256_fp12_frobenius3(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
|
||||
void sm9_z256_fp12_frobenius6(sm9_z256_fp12_t r, const sm9_z256_fp12_t x);
|
||||
|
||||
|
||||
// E(F_p): y^2 = x^3 + 5
|
||||
|
||||
typedef struct {
|
||||
sm9_z256_t X; // is mont(X)
|
||||
sm9_z256_t Y; // is mont(Y)
|
||||
sm9_z256_t Z; // is mont(Z)
|
||||
} SM9_Z256_POINT;
|
||||
|
||||
const SM9_Z256_POINT *sm9_z256_generator(void);
|
||||
|
||||
int sm9_z256_point_from_hex(SM9_Z256_POINT *R, const char hex[129]);
|
||||
int sm9_z256_point_is_at_infinity(const SM9_Z256_POINT *P);
|
||||
void sm9_z256_point_set_infinity(SM9_Z256_POINT *R);
|
||||
void sm9_z256_point_get_xy(const SM9_Z256_POINT *P, sm9_z256_t x, sm9_z256_t y);
|
||||
int sm9_z256_point_equ(const SM9_Z256_POINT *P, const SM9_Z256_POINT *Q);
|
||||
int sm9_z256_point_is_on_curve(const SM9_Z256_POINT *P);
|
||||
void sm9_z256_point_dbl(SM9_Z256_POINT *R, const SM9_Z256_POINT *P);
|
||||
void sm9_z256_point_neg(SM9_Z256_POINT *R, const SM9_Z256_POINT *P);
|
||||
void sm9_z256_point_add(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_POINT *Q);
|
||||
void sm9_z256_point_sub(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_POINT *Q);
|
||||
void sm9_z256_point_mul(SM9_Z256_POINT *R, const sm9_z256_t k, const SM9_Z256_POINT *P);
|
||||
void sm9_z256_point_mul_generator(SM9_Z256_POINT *R, const sm9_z256_t k);
|
||||
int sm9_z256_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_Z256_POINT *P);
|
||||
int sm9_z256_point_to_uncompressed_octets(const SM9_Z256_POINT *P, uint8_t octets[65]);
|
||||
int sm9_z256_point_from_uncompressed_octets(SM9_Z256_POINT *P, const uint8_t octets[65]);
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint64_t X[4];
|
||||
uint64_t Y[4];
|
||||
} SM9_Z256_AFFINE_POINT;
|
||||
|
||||
void sm9_z256_point_copy_affine(SM9_Z256_POINT *R, const SM9_Z256_AFFINE_POINT *P);
|
||||
void sm9_z256_point_add_affine(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_AFFINE_POINT *Q);
|
||||
void sm9_z256_point_sub_affine(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_AFFINE_POINT *Q);
|
||||
|
||||
|
||||
typedef struct {
|
||||
sm9_z256_fp2_t X;
|
||||
sm9_z256_fp2_t Y;
|
||||
sm9_z256_fp2_t Z;
|
||||
} SM9_Z256_TWIST_POINT;
|
||||
|
||||
const SM9_Z256_TWIST_POINT *sm9_z256_twist_generator(void);
|
||||
|
||||
int sm9_z256_twist_point_to_uncompressed_octets(const SM9_Z256_TWIST_POINT *P, uint8_t octets[129]);
|
||||
int sm9_z256_twist_point_from_uncompressed_octets(SM9_Z256_TWIST_POINT *P, const uint8_t octets[129]);
|
||||
|
||||
int sm9_z256_twist_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_from_hex(SM9_Z256_TWIST_POINT *R, const char hex[259]); // 259 = 64 * 4 + 3
|
||||
int sm9_z256_twist_point_is_at_infinity(const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_set_infinity(SM9_Z256_TWIST_POINT *R);
|
||||
void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2_t x, sm9_z256_fp2_t y);
|
||||
int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q);
|
||||
int sm9_z256_twist_point_is_on_curve(const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_neg(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_dbl(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_add(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q);
|
||||
void sm9_z256_twist_point_sub(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q);
|
||||
void sm9_z256_twist_point_add_full(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q);
|
||||
void sm9_z256_twist_point_mul(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_mul_generator(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k);
|
||||
|
||||
|
||||
void sm9_z256_point_to_affine(SM9_Z256_AFFINE_POINT *Q, const SM9_Z256_POINT *P);
|
||||
void sm9_z256_eval_g_tangent(SM9_Z256_TWIST_POINT *R, sm9_z256_fp2_t lw[3],
|
||||
const SM9_Z256_TWIST_POINT *P, const SM9_Z256_AFFINE_POINT *Q);
|
||||
void sm9_z256_eval_g_line(SM9_Z256_TWIST_POINT *R, sm9_z256_fp2_t lw[3], sm9_z256_fp2_t pre[5],
|
||||
const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_AFFINE_POINT *Q);
|
||||
void sm9_z256_eval_g_line_no_pre(SM9_Z256_TWIST_POINT *R, sm9_z256_fp2_t lw[3],
|
||||
const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_AFFINE_POINT *Q);
|
||||
void sm9_z256_fp12_line_mul(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp2_t lw[3]);
|
||||
//void sm9_z256_eval_g_tangent(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q);
|
||||
//void sm9_z256_eval_g_line(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q);
|
||||
void sm9_z256_twist_point_pi1(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_twist_point_neg_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P);
|
||||
void sm9_z256_final_exponent_hard_part(sm9_z256_fp12_t r, const sm9_z256_fp12_t f);
|
||||
void sm9_z256_final_exponent(sm9_z256_fp12_t r, const sm9_z256_fp12_t f);
|
||||
void sm9_z256_pairing(sm9_z256_fp12_t r, const SM9_Z256_TWIST_POINT *Q, const SM9_Z256_POINT *P);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -35,7 +36,7 @@ typedef int tls_socklen_t;
|
||||
#define tls_socket_send(sock,buf,len,flags) send(sock,buf,(int)(len),flags)
|
||||
#define tls_socket_recv(sock,buf,len,flags) recv(sock,buf,(int)(len),flags)
|
||||
#define tls_socket_close(sock) closesocket(sock)
|
||||
|
||||
#define tls_socket_wait() Sleep(1)
|
||||
|
||||
#else
|
||||
|
||||
@@ -55,6 +56,7 @@ typedef socklen_t tls_socklen_t;
|
||||
#define tls_socket_send(sock,buf,len,flags) send(sock,buf,len,flags)
|
||||
#define tls_socket_recv(sock,buf,len,flags) recv(sock,buf,len,flags)
|
||||
#define tls_socket_close(sock) close(sock)
|
||||
#define tls_socket_wait() usleep(1000)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
94
thirdparty/GmSSL-3.1.1/include/gmssl/tls.h
vendored
94
thirdparty/GmSSL-3.1.1/include/gmssl/tls.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -27,39 +27,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
TLS Public API
|
||||
|
||||
TLS_PROTOCOL
|
||||
TLS_protocol_tlcp
|
||||
TLS_protocol_tls12
|
||||
TLS_protocol_tls13
|
||||
|
||||
TLS_CIPHER_SUITE
|
||||
TLS_cipher_ecc_sm4_cbc_sm3
|
||||
TLS_cipher_ecc_sm4_gcm_sm3
|
||||
TLS_cipher_ecdhe_sm4_cbc_sm3
|
||||
TLS_cipher_ecdhe_sm4_gcm_sm3
|
||||
TLS_cipher_sm4_gcm_sm3
|
||||
|
||||
TLS_CTX
|
||||
tls_ctx_init
|
||||
tls_ctx_set_cipher_suites
|
||||
tls_ctx_set_ca_certificates
|
||||
tls_ctx_set_certificate_and_key
|
||||
tls_ctx_set_tlcp_server_certificate_and_keys
|
||||
tls_ctx_cleanup
|
||||
|
||||
TLS_CONNECT
|
||||
tls_init
|
||||
tls_set_socket
|
||||
tls_do_handshake
|
||||
tls_send
|
||||
tls_recv
|
||||
tls_shutdown
|
||||
tls_cleanup
|
||||
*/
|
||||
|
||||
typedef uint32_t uint24_t;
|
||||
|
||||
#define tls_uint8_size() 1
|
||||
@@ -108,7 +75,7 @@ typedef enum {
|
||||
TLS_cipher_sm4_ccm_sm3 = 0x00c7,
|
||||
|
||||
// TLCP, GB/T 38636-2020, GM/T 0024-2012
|
||||
TLS_cipher_ecdhe_sm4_cbc_sm3 = 0xe011, // 可以让TLSv1.2使用这个
|
||||
TLS_cipher_ecdhe_sm4_cbc_sm3 = 0xe011, // TODO: let TLSv1.2 use this as default cipher suite
|
||||
TLS_cipher_ecdhe_sm4_gcm_sm3 = 0xe051,
|
||||
TLS_cipher_ecc_sm4_cbc_sm3 = 0xe013,
|
||||
TLS_cipher_ecc_sm4_gcm_sm3 = 0xe053,
|
||||
@@ -286,8 +253,6 @@ typedef enum {
|
||||
const char *tls_curve_type_name(int type);
|
||||
|
||||
|
||||
// 与其支持v2,还不如直接修改v2,让v2和v3兼容
|
||||
|
||||
typedef enum {
|
||||
TLS_curve_secp256k1 = 22,
|
||||
TLS_curve_secp256r1 = 23,
|
||||
@@ -304,7 +269,7 @@ typedef enum {
|
||||
TLS_curve_sm2p256v1 = 41, // GmSSLv2: 30
|
||||
} TLS_NAMED_CURVE;
|
||||
|
||||
const char *tls_named_curve_name(int curve);
|
||||
const char *tls_curve_name(int curve);
|
||||
|
||||
|
||||
typedef enum {
|
||||
@@ -342,6 +307,7 @@ typedef enum {
|
||||
|
||||
|
||||
typedef enum {
|
||||
TLS_alert_level_undefined = 0,
|
||||
TLS_alert_level_warning = 1,
|
||||
TLS_alert_level_fatal = 2,
|
||||
} TLS_ALERT_LEVEL;
|
||||
@@ -440,14 +406,15 @@ typedef struct {
|
||||
#define tls_record_protocol(record) (((uint16_t)((record)[1]) << 8) | (record)[2])
|
||||
#define tls_record_data(record) ((record)+TLS_RECORD_HEADER_SIZE)
|
||||
#define tls_record_data_length(record) (((uint16_t)((record)[3]) << 8) | (record)[4])
|
||||
#define tls_record_length(record) (TLS_RECORD_HEADER_SIZE + tls_record_data_length(record))
|
||||
#define tls_record_length(record) ((size_t)(TLS_RECORD_HEADER_SIZE + tls_record_data_length(record)))
|
||||
|
||||
int tls_record_set_type(uint8_t *record, int type);
|
||||
int tls_record_set_protocol(uint8_t *record, int protocol);
|
||||
int tls_record_set_data_length(uint8_t *record, size_t length);
|
||||
int tls_record_set_data(uint8_t *record, const uint8_t *data, size_t datalen);
|
||||
|
||||
// 握手消息ServerKeyExchange, ClientKeyExchange的解析依赖当前密码套件
|
||||
|
||||
// parse ServerKeyExchange, ClientKeyExchange depends on current cipher_suite
|
||||
#define tls_format_set_cipher_suite(fmt,cipher) do {(fmt)|=((cipher)<<8);} while (0)
|
||||
int tls_record_print(FILE *fp, const uint8_t *record, size_t recordlen, int format, int indent);
|
||||
int tlcp_record_print(FILE *fp, const uint8_t *record, size_t recordlen, int format, int indent);
|
||||
@@ -534,13 +501,13 @@ int tls13_process_client_supported_versions(const uint8_t *ext_data, size_t ext_
|
||||
|
||||
int tls13_process_server_supported_versions(const uint8_t *ext_data, size_t ext_datalen);
|
||||
|
||||
int tls13_key_share_entry_to_bytes(const SM2_POINT *point, uint8_t **out, size_t *outlen);
|
||||
int tls13_client_key_share_ext_to_bytes(const SM2_POINT *point, uint8_t **out, size_t *outlen);
|
||||
int tls13_server_key_share_ext_to_bytes(const SM2_POINT *point, uint8_t **out, size_t *outlen);
|
||||
int tls13_key_share_entry_to_bytes(const SM2_Z256_POINT *point, uint8_t **out, size_t *outlen);
|
||||
int tls13_client_key_share_ext_to_bytes(const SM2_Z256_POINT *point, uint8_t **out, size_t *outlen);
|
||||
int tls13_server_key_share_ext_to_bytes(const SM2_Z256_POINT *point, uint8_t **out, size_t *outlen);
|
||||
int tls13_process_client_key_share(const uint8_t *ext_data, size_t ext_datalen,
|
||||
const SM2_KEY *server_ecdhe_key, SM2_POINT *client_ecdhe_public,
|
||||
const SM2_KEY *server_ecdhe_key, SM2_Z256_POINT *client_ecdhe_public,
|
||||
uint8_t **out, size_t *outlen);
|
||||
int tls13_process_server_key_share(const uint8_t *ext_data, size_t ext_datalen, SM2_POINT *point);
|
||||
int tls13_process_server_key_share(const uint8_t *ext_data, size_t ext_datalen, SM2_Z256_POINT *point);
|
||||
|
||||
|
||||
int tls13_certificate_authorities_ext_to_bytes(const uint8_t *ca_names, size_t ca_names_len,
|
||||
@@ -555,8 +522,8 @@ int tls_process_server_exts(const uint8_t *exts, size_t extslen,
|
||||
// Certificate
|
||||
int tls_record_set_handshake_certificate(uint8_t *record, size_t *recordlen,
|
||||
const uint8_t *certs, size_t certslen);
|
||||
// 这个函数比较特殊,是直接解析了证书链,而不是返回指针
|
||||
// 应该提供一个独立的解析函数来解析TLS的证书链
|
||||
// see the impl of tls_record_get_handshake_certificate
|
||||
// a standalone cert-chain parsing function should be given
|
||||
int tls_record_get_handshake_certificate(const uint8_t *record, uint8_t *certs, size_t *certslen);
|
||||
|
||||
// ServerKeyExchange
|
||||
@@ -565,14 +532,14 @@ int tls_server_key_exchange_print(FILE *fp, const uint8_t *ske, size_t skelen, i
|
||||
#define TLS_MAX_SIGNATURE_SIZE SM2_MAX_SIGNATURE_SIZE
|
||||
int tls_sign_server_ecdh_params(const SM2_KEY *server_sign_key,
|
||||
const uint8_t client_random[32], const uint8_t server_random[32],
|
||||
int curve, const SM2_POINT *point, uint8_t *sig, size_t *siglen);
|
||||
int curve, const SM2_Z256_POINT *point, uint8_t *sig, size_t *siglen);
|
||||
int tls_verify_server_ecdh_params(const SM2_KEY *server_sign_key,
|
||||
const uint8_t client_random[32], const uint8_t server_random[32],
|
||||
int curve, const SM2_POINT *point, const uint8_t *sig, size_t siglen);
|
||||
int curve, const SM2_Z256_POINT *point, const uint8_t *sig, size_t siglen);
|
||||
int tls_record_set_handshake_server_key_exchange_ecdhe(uint8_t *record, size_t *recordlen,
|
||||
int curve, const SM2_POINT *point, const uint8_t *sig, size_t siglen);
|
||||
int curve, const SM2_Z256_POINT *point, const uint8_t *sig, size_t siglen);
|
||||
int tls_record_get_handshake_server_key_exchange_ecdhe(const uint8_t *record,
|
||||
int *curve, SM2_POINT *point, const uint8_t **sig, size_t *siglen);
|
||||
int *curve, SM2_Z256_POINT *point, const uint8_t **sig, size_t *siglen);
|
||||
int tls_server_key_exchange_ecdhe_print(FILE *fp, const uint8_t *data, size_t datalen,
|
||||
int format, int indent);
|
||||
|
||||
@@ -615,8 +582,8 @@ int tls_client_key_exchange_pke_print(FILE *fp, const uint8_t *cke, size_t ckele
|
||||
int tls_client_key_exchange_print(FILE *fp, const uint8_t *cke, size_t ckelen, int format, int indent);
|
||||
|
||||
int tls_record_set_handshake_client_key_exchange_ecdhe(uint8_t *record, size_t *recordlen,
|
||||
const SM2_POINT *point); // 这里不应该支持SM2_POINT类型
|
||||
int tls_record_get_handshake_client_key_exchange_ecdhe(const uint8_t *record, SM2_POINT *point);
|
||||
const SM2_Z256_POINT *point); // shoulde we use SM2_Z256_POITN?
|
||||
int tls_record_get_handshake_client_key_exchange_ecdhe(const uint8_t *record, SM2_Z256_POINT *point);
|
||||
int tls_client_key_exchange_ecdhe_print(FILE *fp, const uint8_t *data, size_t datalen,
|
||||
int format, int indent);
|
||||
|
||||
@@ -650,8 +617,8 @@ int tls_client_verify_finish(TLS_CLIENT_VERIFY_CTX *ctx, const uint8_t *sig, siz
|
||||
void tls_client_verify_cleanup(TLS_CLIENT_VERIFY_CTX *ctx);
|
||||
|
||||
// Finished
|
||||
// FIXME: 支持TLS 1.3 提供MIN, MAX或TLS12, TLS13, TLCP...
|
||||
#define TLS_VERIFY_DATA_SIZE 12 // TLS 1.3或者其他版本支持更长的verify_data
|
||||
// FIXME: to support TLS 1.3 need MIN, MAX or TLS12, TLS13, TLCP...
|
||||
#define TLS_VERIFY_DATA_SIZE 12 // TLS 1.3 use longer verify_data (>= 12 bytes)
|
||||
#define TLS_FINISHED_RECORD_SIZE (TLS_RECORD_HEADER_SIZE + TLS_HANDSHAKE_HEADER_SIZE + TLS_VERIFY_DATA_SIZE) // 21
|
||||
#define TLS_MAX_PADDING_SIZE (1 + 255)
|
||||
#define TLS_MAC_SIZE SM3_HMAC_SIZE
|
||||
@@ -716,6 +683,8 @@ typedef struct {
|
||||
SM2_KEY signkey;
|
||||
SM2_KEY kenckey;
|
||||
int verify_depth;
|
||||
|
||||
int quiet;
|
||||
} TLS_CTX;
|
||||
|
||||
int tls_ctx_init(TLS_CTX *ctx, int protocol, int is_client);
|
||||
@@ -748,15 +717,14 @@ typedef struct {
|
||||
|
||||
uint8_t record[TLS_MAX_RECORD_SIZE];
|
||||
|
||||
// 其实这个就不太对了,还是应该有一个完整的密文记录
|
||||
uint8_t databuf[TLS_MAX_PLAINTEXT_SIZE];
|
||||
uint8_t databuf[TLS_MAX_RECORD_SIZE];
|
||||
uint8_t *data;
|
||||
size_t datalen;
|
||||
|
||||
int cipher_suite;
|
||||
uint8_t session_id[32];
|
||||
size_t session_id_len;
|
||||
uint8_t server_certs[TLS_MAX_CERTIFICATES_SIZE]; // 动态的可能会好一点
|
||||
uint8_t server_certs[TLS_MAX_CERTIFICATES_SIZE]; // TODO: use ptr and malloc
|
||||
size_t server_certs_len;
|
||||
uint8_t client_certs[TLS_MAX_CERTIFICATES_SIZE];
|
||||
size_t client_certs_len;
|
||||
@@ -783,10 +751,11 @@ typedef struct {
|
||||
BLOCK_CIPHER_KEY client_write_key;
|
||||
BLOCK_CIPHER_KEY server_write_key;
|
||||
|
||||
int quiet;
|
||||
} TLS_CONNECT;
|
||||
|
||||
|
||||
#define TLS_MAX_EXTENSIONS_SIZE 512 // 这个应该再考虑一下数值,是否可以用其他的缓冲区装载?
|
||||
#define TLS_MAX_EXTENSIONS_SIZE 512 // FIXME: no reason to give fixed max length
|
||||
|
||||
|
||||
int tls_init(TLS_CONNECT *conn, const TLS_CTX *ctx);
|
||||
@@ -854,20 +823,23 @@ int tls13_gcm_decrypt(const BLOCK_CIPHER_KEY *key, const uint8_t iv[12],
|
||||
int *record_type, uint8_t *out, size_t *outlen);
|
||||
|
||||
|
||||
#ifdef TLS_DEBUG
|
||||
#ifdef ENABLE_TLS_DEBUG
|
||||
# define tls_trace(s) fprintf(stderr,(s))
|
||||
# define tls_record_trace(fp,rec,reclen,fmt,ind) tls_record_print(fp,rec,reclen,fmt,ind)
|
||||
# define tls_encrypted_record_trace(fp,rec,reclen,fmt,ind) tls_encrypted_record_print(fp,rec,reclen,fmt,ind)
|
||||
# define tlcp_record_trace(fp,rec,reclen,fmt,ind) tlcp_record_print(fp,rec,reclen,fmt,ind)
|
||||
# define tls12_record_trace(fp,rec,reclen,fmt,ind) tls12_record_print(fp,rec,reclen,fmt,ind)
|
||||
# define tls13_record_trace(fp,rec,reclen,fmt,ind) tls13_record_print(fp,fmt,ind,rec,reclen)
|
||||
#else
|
||||
# define tls_trace(s)
|
||||
# define tls_record_trace(fp,rec,reclen,fmt,ind)
|
||||
# define tls_encrypted_record_trace(fp,rec,reclen,fmt,ind)
|
||||
# define tlcp_record_trace(fp,rec,reclen,fmt,ind)
|
||||
# define tls12_record_trace(fp,rec,reclen,fmt,ind)
|
||||
# define tls13_record_trace(fp,rec,reclen,fmt,ind)
|
||||
#endif
|
||||
|
||||
int tls_encrypted_record_print(FILE *fp, const uint8_t *record, size_t recordlen, int format, int indent);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
10
thirdparty/GmSSL-3.1.1/include/gmssl/version.h
vendored
10
thirdparty/GmSSL-3.1.1/include/gmssl/version.h
vendored
@@ -12,19 +12,17 @@
|
||||
#ifndef GMSSL_VERSION_H
|
||||
#define GMSSL_VERSION_H
|
||||
|
||||
#include <gmssl/api.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
// Also update CPACK_PACKAGE_VERSION in CMakeLists.txt
|
||||
#define GMSSL_VERSION_NUM 30101
|
||||
#define GMSSL_VERSION_STR "GmSSL 3.1.1"
|
||||
#define GMSSL_VERSION_NUM 30102
|
||||
#define GMSSL_VERSION_STR "GmSSL 3.1.2 Dev"
|
||||
|
||||
_gmssl_export int gmssl_version_num(void);
|
||||
_gmssl_export const char *gmssl_version_str(void);
|
||||
int gmssl_version_num(void);
|
||||
const char *gmssl_version_str(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
2
thirdparty/GmSSL-3.1.1/include/gmssl/x509.h
vendored
2
thirdparty/GmSSL-3.1.1/include/gmssl/x509.h
vendored
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2014-2023 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
|
||||
39
thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h
vendored
39
thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
|
||||
* Copyright 2014-2024 The GmSSL Project. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License); you may
|
||||
* not use this file except in compliance with the License.
|
||||
@@ -11,41 +11,14 @@
|
||||
#ifndef GMSSL_ZUC_H
|
||||
#define GMSSL_ZUC_H
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
ZUC Public API
|
||||
|
||||
ZUC_KEY_SIZE
|
||||
ZUC_IV_SIZE
|
||||
ZUC_MAC_SIZE
|
||||
|
||||
ZUC_CTX
|
||||
zuc_encrypt_init
|
||||
zuc_encrypt_update
|
||||
zuc_encrypt_finish
|
||||
zuc_decrypt_init
|
||||
zuc_decrypt_update
|
||||
zuc_decrypt_finish
|
||||
|
||||
ZUC_MAC_CTX
|
||||
zuc_mac_init
|
||||
zuc_mac_update
|
||||
zuc_mac_finish
|
||||
|
||||
zuc_eea_encrypt
|
||||
zuc_eia_generate_mac
|
||||
*/
|
||||
|
||||
|
||||
# define ZUC_KEY_SIZE 16
|
||||
# define ZUC_IV_SIZE 16
|
||||
# define ZUC_MAC_SIZE 4
|
||||
@@ -103,8 +76,8 @@ ZUC_UINT32 zuc_eia_generate_mac(const ZUC_UINT32 *data, size_t nbits,
|
||||
typedef ZUC_STATE ZUC256_STATE;
|
||||
|
||||
void zuc256_init(ZUC256_STATE *state, const uint8_t key[ZUC256_KEY_SIZE], const uint8_t iv[ZUC256_IV_SIZE]);
|
||||
#define zuc256_generate_keystream(state,nwords,words) zuc_generate_keystream(state,nwords,words)
|
||||
#define zuc256_generate_keyword(state) zuc_generate_keyword(state)
|
||||
void zuc256_generate_keystream(ZUC_STATE *state, size_t nwords, ZUC_UINT32 *words);
|
||||
ZUC_UINT32 zuc256_generate_keyword(ZUC_STATE *state);
|
||||
|
||||
|
||||
typedef struct ZUC256_MAC_CTX_st {
|
||||
@@ -124,8 +97,6 @@ void zuc256_mac_update(ZUC256_MAC_CTX *ctx, const uint8_t *data, size_t len);
|
||||
void zuc256_mac_finish(ZUC256_MAC_CTX *ctx, const uint8_t *data, size_t nbits, uint8_t mac[ZUC_MAC_SIZE]);
|
||||
|
||||
|
||||
// Public API
|
||||
|
||||
typedef struct {
|
||||
ZUC_STATE zuc_state;
|
||||
uint8_t block[4];
|
||||
@@ -136,10 +107,6 @@ int zuc_encrypt_init(ZUC_CTX *ctx, const uint8_t key[ZUC_KEY_SIZE], const uint8_
|
||||
int zuc_encrypt_update(ZUC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen);
|
||||
int zuc_encrypt_finish(ZUC_CTX *ctx, uint8_t *out, size_t *outlen);
|
||||
|
||||
#define zuc_decrypt_init(ctx,key,iv) zuc_encrypt_init(ctx,key,iv)
|
||||
#define zuc_decrypt_update(ctx,in,inlen,out,outlen) zuc_encrypt_update(ctx,in,inlen,out,outlen)
|
||||
#define zuc_decrypt_finish(ctx,out,outlen) zuc_encrypt_finish(ctx,out,outlen)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
BIN
thirdparty/GmSSL-3.1.1/lib/gmssl.lib
vendored
BIN
thirdparty/GmSSL-3.1.1/lib/gmssl.lib
vendored
Binary file not shown.
22
thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_EPILOGUE.H
vendored
Normal file
22
thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_EPILOGUE.H
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is only used by HP C/C++ on VMS, and is included automatically
|
||||
* after each header file from this directory
|
||||
*/
|
||||
|
||||
/*
|
||||
* The C++ compiler doesn't understand these pragmas, even though it
|
||||
* understands the corresponding command line qualifier.
|
||||
*/
|
||||
#ifndef __cplusplus
|
||||
/* restore state. Must correspond to the save in __decc_include_prologue.h */
|
||||
# pragma names restore
|
||||
#endif
|
||||
26
thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_PROLOGUE.H
vendored
Normal file
26
thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_PROLOGUE.H
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is only used by HP C/C++ on VMS, and is included automatically
|
||||
* after each header file from this directory
|
||||
*/
|
||||
|
||||
/*
|
||||
* The C++ compiler doesn't understand these pragmas, even though it
|
||||
* understands the corresponding command line qualifier.
|
||||
*/
|
||||
#ifndef __cplusplus
|
||||
/* save state */
|
||||
# pragma names save
|
||||
/* have the compiler shorten symbols larger than 31 chars to 23 chars
|
||||
* followed by a 8 hex char CRC
|
||||
*/
|
||||
# pragma names as_is,shortened
|
||||
#endif
|
||||
111
thirdparty/OpenSSL-3.5.3/include/openssl/aes.h
vendored
Normal file
111
thirdparty/OpenSSL-3.5.3/include/openssl/aes.h
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#ifndef OPENSSL_AES_H
|
||||
# define OPENSSL_AES_H
|
||||
# pragma once
|
||||
|
||||
# include <openssl/macros.h>
|
||||
# ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||
# define HEADER_AES_H
|
||||
# endif
|
||||
|
||||
# include <openssl/opensslconf.h>
|
||||
|
||||
# include <stddef.h>
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
# define AES_BLOCK_SIZE 16
|
||||
|
||||
# ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||
|
||||
# define AES_ENCRYPT 1
|
||||
# define AES_DECRYPT 0
|
||||
|
||||
# define AES_MAXNR 14
|
||||
|
||||
|
||||
/* 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;
|
||||
|
||||
# endif
|
||||
# ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||
OSSL_DEPRECATEDIN_3_0 const char *AES_options(void);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
|
||||
AES_KEY *key);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
|
||||
AES_KEY *key);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
void AES_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const AES_KEY *key);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
void AES_decrypt(const unsigned char *in, unsigned char *out,
|
||||
const AES_KEY *key);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
||||
const AES_KEY *key, const int enc);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||
size_t length, const AES_KEY *key,
|
||||
unsigned char *ivec, const int enc);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
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);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
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);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
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);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
|
||||
size_t length, const AES_KEY *key,
|
||||
unsigned char *ivec, int *num);
|
||||
|
||||
/* NB: the IV is _two_ blocks long */
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
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 */
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
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);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
|
||||
unsigned char *out, const unsigned char *in,
|
||||
unsigned int inlen);
|
||||
OSSL_DEPRECATEDIN_3_0
|
||||
int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
|
||||
unsigned char *out, const unsigned char *in,
|
||||
unsigned int inlen);
|
||||
# endif
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif
|
||||
153
thirdparty/OpenSSL-3.5.3/include/openssl/applink.c
vendored
Normal file
153
thirdparty/OpenSSL-3.5.3/include/openssl/applink.c
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright 2004-2023 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#define APPLINK_STDIN 1
|
||||
#define APPLINK_STDOUT 2
|
||||
#define APPLINK_STDERR 3
|
||||
#define APPLINK_FPRINTF 4
|
||||
#define APPLINK_FGETS 5
|
||||
#define APPLINK_FREAD 6
|
||||
#define APPLINK_FWRITE 7
|
||||
#define APPLINK_FSETMOD 8
|
||||
#define APPLINK_FEOF 9
|
||||
#define APPLINK_FCLOSE 10 /* should not be used */
|
||||
|
||||
#define APPLINK_FOPEN 11 /* solely for completeness */
|
||||
#define APPLINK_FSEEK 12
|
||||
#define APPLINK_FTELL 13
|
||||
#define APPLINK_FFLUSH 14
|
||||
#define APPLINK_FERROR 15
|
||||
#define APPLINK_CLEARERR 16
|
||||
#define APPLINK_FILENO 17 /* to be used with below */
|
||||
|
||||
#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */
|
||||
#define APPLINK_READ 19
|
||||
#define APPLINK_WRITE 20
|
||||
#define APPLINK_LSEEK 21
|
||||
#define APPLINK_CLOSE 22
|
||||
#define APPLINK_MAX 22 /* always same as last macro */
|
||||
|
||||
#ifndef APPMACROS_ONLY
|
||||
|
||||
/*
|
||||
* Normally, do not define APPLINK_NO_INCLUDES. Define it if you are using
|
||||
* symbol preprocessing and do not want the preprocessing to affect the
|
||||
* following included header files. You will need to put these
|
||||
* include lines somewhere in the file that is including applink.c.
|
||||
*/
|
||||
# ifndef APPLINK_NO_INCLUDES
|
||||
# include <stdio.h>
|
||||
# include <io.h>
|
||||
# include <fcntl.h>
|
||||
# endif
|
||||
|
||||
# ifdef __BORLANDC__
|
||||
/* _lseek in <io.h> is a function-like macro so we can't take its address */
|
||||
# undef _lseek
|
||||
# define _lseek lseek
|
||||
# endif
|
||||
|
||||
static void *app_stdin(void)
|
||||
{
|
||||
return stdin;
|
||||
}
|
||||
|
||||
static void *app_stdout(void)
|
||||
{
|
||||
return stdout;
|
||||
}
|
||||
|
||||
static void *app_stderr(void)
|
||||
{
|
||||
return stderr;
|
||||
}
|
||||
|
||||
static int app_feof(FILE *fp)
|
||||
{
|
||||
return feof(fp);
|
||||
}
|
||||
|
||||
static int app_ferror(FILE *fp)
|
||||
{
|
||||
return ferror(fp);
|
||||
}
|
||||
|
||||
static void app_clearerr(FILE *fp)
|
||||
{
|
||||
clearerr(fp);
|
||||
}
|
||||
|
||||
static int app_fileno(FILE *fp)
|
||||
{
|
||||
return _fileno(fp);
|
||||
}
|
||||
|
||||
static int app_fsetmod(FILE *fp, char mod)
|
||||
{
|
||||
return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
__declspec(dllexport)
|
||||
void **
|
||||
# if defined(__BORLANDC__)
|
||||
/*
|
||||
* __stdcall appears to be the only way to get the name
|
||||
* decoration right with Borland C. Otherwise it works
|
||||
* purely incidentally, as we pass no parameters.
|
||||
*/
|
||||
__stdcall
|
||||
# else
|
||||
__cdecl
|
||||
# endif
|
||||
OPENSSL_Applink(void)
|
||||
{
|
||||
static int once = 1;
|
||||
static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] =
|
||||
{ (void *)APPLINK_MAX };
|
||||
|
||||
if (once) {
|
||||
OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin;
|
||||
OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout;
|
||||
OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr;
|
||||
OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf;
|
||||
OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets;
|
||||
OPENSSL_ApplinkTable[APPLINK_FREAD] = fread;
|
||||
OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite;
|
||||
OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod;
|
||||
OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof;
|
||||
OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose;
|
||||
|
||||
OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen;
|
||||
OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek;
|
||||
OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell;
|
||||
OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush;
|
||||
OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror;
|
||||
OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr;
|
||||
OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno;
|
||||
|
||||
OPENSSL_ApplinkTable[APPLINK_OPEN] = _open;
|
||||
OPENSSL_ApplinkTable[APPLINK_READ] = _read;
|
||||
OPENSSL_ApplinkTable[APPLINK_WRITE] = _write;
|
||||
OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek;
|
||||
OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close;
|
||||
|
||||
once = 0;
|
||||
}
|
||||
|
||||
return OPENSSL_ApplinkTable;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
1134
thirdparty/OpenSSL-3.5.3/include/openssl/asn1.h
vendored
Normal file
1134
thirdparty/OpenSSL-3.5.3/include/openssl/asn1.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
142
thirdparty/OpenSSL-3.5.3/include/openssl/asn1err.h
vendored
Normal file
142
thirdparty/OpenSSL-3.5.3/include/openssl/asn1err.h
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Generated by util/mkerr.pl DO NOT EDIT
|
||||
* Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#ifndef OPENSSL_ASN1ERR_H
|
||||
# define OPENSSL_ASN1ERR_H
|
||||
# pragma once
|
||||
|
||||
# include <openssl/opensslconf.h>
|
||||
# include <openssl/symhacks.h>
|
||||
# include <openssl/cryptoerr_legacy.h>
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* ASN1 reason codes.
|
||||
*/
|
||||
# define ASN1_R_ADDING_OBJECT 171
|
||||
# define ASN1_R_ASN1_PARSE_ERROR 203
|
||||
# define ASN1_R_ASN1_SIG_PARSE_ERROR 204
|
||||
# define ASN1_R_AUX_ERROR 100
|
||||
# define ASN1_R_BAD_OBJECT_HEADER 102
|
||||
# define ASN1_R_BAD_TEMPLATE 230
|
||||
# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214
|
||||
# define ASN1_R_BN_LIB 105
|
||||
# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106
|
||||
# define ASN1_R_BUFFER_TOO_SMALL 107
|
||||
# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108
|
||||
# define ASN1_R_CONTEXT_NOT_INITIALISED 217
|
||||
# define ASN1_R_DATA_IS_WRONG 109
|
||||
# define ASN1_R_DECODE_ERROR 110
|
||||
# define ASN1_R_DEPTH_EXCEEDED 174
|
||||
# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198
|
||||
# define ASN1_R_ENCODE_ERROR 112
|
||||
# define ASN1_R_ERROR_GETTING_TIME 173
|
||||
# define ASN1_R_ERROR_LOADING_SECTION 172
|
||||
# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114
|
||||
# define ASN1_R_EXPECTING_AN_INTEGER 115
|
||||
# define ASN1_R_EXPECTING_AN_OBJECT 116
|
||||
# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119
|
||||
# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120
|
||||
# define ASN1_R_FIELD_MISSING 121
|
||||
# define ASN1_R_FIRST_NUM_TOO_LARGE 122
|
||||
# define ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT 232
|
||||
# define ASN1_R_HEADER_TOO_LONG 123
|
||||
# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175
|
||||
# define ASN1_R_ILLEGAL_BOOLEAN 176
|
||||
# define ASN1_R_ILLEGAL_CHARACTERS 124
|
||||
# define ASN1_R_ILLEGAL_FORMAT 177
|
||||
# define ASN1_R_ILLEGAL_HEX 178
|
||||
# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179
|
||||
# define ASN1_R_ILLEGAL_INTEGER 180
|
||||
# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226
|
||||
# define ASN1_R_ILLEGAL_NESTED_TAGGING 181
|
||||
# define ASN1_R_ILLEGAL_NULL 125
|
||||
# define ASN1_R_ILLEGAL_NULL_VALUE 182
|
||||
# define ASN1_R_ILLEGAL_OBJECT 183
|
||||
# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126
|
||||
# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170
|
||||
# define ASN1_R_ILLEGAL_PADDING 221
|
||||
# define ASN1_R_ILLEGAL_TAGGED_ANY 127
|
||||
# define ASN1_R_ILLEGAL_TIME_VALUE 184
|
||||
# define ASN1_R_ILLEGAL_ZERO_CONTENT 222
|
||||
# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185
|
||||
# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128
|
||||
# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220
|
||||
# define ASN1_R_INVALID_BMPSTRING_LENGTH 129
|
||||
# define ASN1_R_INVALID_DIGIT 130
|
||||
# define ASN1_R_INVALID_MIME_TYPE 205
|
||||
# define ASN1_R_INVALID_MODIFIER 186
|
||||
# define ASN1_R_INVALID_NUMBER 187
|
||||
# define ASN1_R_INVALID_OBJECT_ENCODING 216
|
||||
# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227
|
||||
# define ASN1_R_INVALID_SEPARATOR 131
|
||||
# define ASN1_R_INVALID_STRING_TABLE_VALUE 218
|
||||
# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133
|
||||
# define ASN1_R_INVALID_UTF8STRING 134
|
||||
# define ASN1_R_INVALID_VALUE 219
|
||||
# define ASN1_R_LENGTH_TOO_LONG 231
|
||||
# define ASN1_R_LIST_ERROR 188
|
||||
# define ASN1_R_MIME_NO_CONTENT_TYPE 206
|
||||
# define ASN1_R_MIME_PARSE_ERROR 207
|
||||
# define ASN1_R_MIME_SIG_PARSE_ERROR 208
|
||||
# define ASN1_R_MISSING_EOC 137
|
||||
# define ASN1_R_MISSING_SECOND_NUMBER 138
|
||||
# define ASN1_R_MISSING_VALUE 189
|
||||
# define ASN1_R_MSTRING_NOT_UNIVERSAL 139
|
||||
# define ASN1_R_MSTRING_WRONG_TAG 140
|
||||
# define ASN1_R_NESTED_ASN1_STRING 197
|
||||
# define ASN1_R_NESTED_TOO_DEEP 201
|
||||
# define ASN1_R_NON_HEX_CHARACTERS 141
|
||||
# define ASN1_R_NOT_ASCII_FORMAT 190
|
||||
# define ASN1_R_NOT_ENOUGH_DATA 142
|
||||
# define ASN1_R_NO_CONTENT_TYPE 209
|
||||
# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143
|
||||
# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210
|
||||
# define ASN1_R_NO_MULTIPART_BOUNDARY 211
|
||||
# define ASN1_R_NO_SIG_CONTENT_TYPE 212
|
||||
# define ASN1_R_NULL_IS_WRONG_LENGTH 144
|
||||
# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191
|
||||
# define ASN1_R_ODD_NUMBER_OF_CHARS 145
|
||||
# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147
|
||||
# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148
|
||||
# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149
|
||||
# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192
|
||||
# define ASN1_R_SHORT_LINE 150
|
||||
# define ASN1_R_SIG_INVALID_MIME_TYPE 213
|
||||
# define ASN1_R_STREAMING_NOT_SUPPORTED 202
|
||||
# define ASN1_R_STRING_TOO_LONG 151
|
||||
# define ASN1_R_STRING_TOO_SHORT 152
|
||||
# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154
|
||||
# define ASN1_R_TIME_NOT_ASCII_FORMAT 193
|
||||
# define ASN1_R_TOO_LARGE 223
|
||||
# define ASN1_R_TOO_LONG 155
|
||||
# define ASN1_R_TOO_SMALL 224
|
||||
# define ASN1_R_TYPE_NOT_CONSTRUCTED 156
|
||||
# define ASN1_R_TYPE_NOT_PRIMITIVE 195
|
||||
# define ASN1_R_UNEXPECTED_EOC 159
|
||||
# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215
|
||||
# define ASN1_R_UNKNOWN_DIGEST 229
|
||||
# define ASN1_R_UNKNOWN_FORMAT 160
|
||||
# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161
|
||||
# define ASN1_R_UNKNOWN_OBJECT_TYPE 162
|
||||
# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163
|
||||
# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199
|
||||
# define ASN1_R_UNKNOWN_TAG 194
|
||||
# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164
|
||||
# define ASN1_R_UNSUPPORTED_CIPHER 228
|
||||
# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167
|
||||
# define ASN1_R_UNSUPPORTED_TYPE 196
|
||||
# define ASN1_R_UTCTIME_IS_TOO_SHORT 233
|
||||
# define ASN1_R_WRONG_INTEGER_TYPE 225
|
||||
# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200
|
||||
# define ASN1_R_WRONG_TAG 168
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user