pir依赖编译记录

一、cmake+gcc基础编译

windows+cmake+mingw 搭建c/c++开发环境 - 知乎 (zhihu.com)

一定要安装mingw,不然会出现会出现编译出来的不存在makefile,无法进行下一步的make,

之后采用编译代码为

cmake -G"Unix Makefiles" ../

二、openssl

环境篇-Windows下安装OpenSSL_openssl 安装

三、vcpkg 安装:包管理器、方便其他包的下载。

Vcpkg C/C++库管理工具安装和使用教程

四、gmp安装

windows环境下的gmp大数运算库的配置

五、SEAL安装

GitHub - microsoft/SEAL: Microsoft SEAL is an easy-to-use and powerful homomorphic encryption library.

六、cgo 调用gmssl:

山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略_windows 编译gmssl_乔未的博客-CSDN博客

修改点:

1.执行到nmake即可,获得libcrypto-1_1-x64.dll libssl-1_1-x64.dll,不要改名字,这俩就是我们需要的依赖库。
2.在需要使用的.h头部增加:

#cgo CFLAGS: -I.
#cgo LDFLAGS: -L. -lcrypto-1_1-x64 -lssl-1_1-x64

有些C.free()并无法释放openssl中的char*,window的适配性较差。可以手动增加释放模块。

void openssl_free(unsigned char *ptr) {
    OPENSSL_free(ptr);
}
func (pk *PublicKey) Encrypt(alg string, in []byte, eng *Engine) ([]byte, error) {
	calg := C.CString(alg)
	defer C.free(unsafe.Pointer(calg))
	var outlen C.size_t
	out := C.pk_encrypt(pk.pkey, calg, (*C.uchar)(&in[0]),
		C.size_t(len(in)), &outlen, nil)
	if out == nil {
		return nil, GetErrors()
	}
	//defer C.free(unsafe.Pointer(out))
	outByte := C.GoBytes(unsafe.Pointer(out), C.int(outlen))
	defer C.openssl_free(out)
	return outByte, nil
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值