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
}



 

你可能感兴趣的:(git)