java dll linux_java调用dll/so文件

#pragma once#include#ifdef __linux#define _APICALL

#define DLL_PUBLIC __attribute__ ((visibility ("default")))

#else

#define DLL_PUBLIC

#define _APICALL __stdcall

#endif //__linux

static const int8_t CRYPTTYPE_SM2 = 1; //非对称加密,SM2官方推荐模式(256bit加密强度)

static const int8_t CRYPTTYPE_SM4CBC = 2; //对称分组加密,SM4 CBC模式(128bit加密强度)

enum //错误码

{

GMC_ERR_OK= 0, //成功

GMC_ERR_CryptoTypeNotSupport = 1, //不支持该密码系统

GMC_ERR_PubKeyLost = 2, //公钥未设置

GMC_ERR_PriKeyLost = 3, //私钥未设置

GMC_ERR_OperationNotSupportThisCryptoType = 4, //操作不支持目前的密码系统类型。

GMC_ERR_SMALLMEMSIZE = 5, //相关内存长度过小

GMC_ERR_BADALLOCATE = 6, //内存分配失败

GMC_ERR_KEY_LENGTH = 7, //KEY长度不符合

GMC_ERR_KEY_FORMAT = 8, //KEY格式不符合

GMC_ERR_PARAM = 87, //参数错误

GMC_ERR_OPENSSL_INTERERR = 100, //openssl 内部错误

GMC_ERR_CIPHER = 1000, //CIPHER相关错误

GMC_ERR_CIPHERTYPE_NOTSUPPORT = 1001, //不支持的cipher类型

GMC_ERR_CIPHER_NOTINIT = 1002, //未初始化

GMC_ERR_CIPHER_NOTSETKEY = 1003, //没有设置KEY

GMC_ERR_SM2 = 2000, //sm2相关错误码

GMC_ERR_SM2_NOTINIT =2001, //未初始化

GMC_ERR_SM2_NOTSETKEY = 2002, //未设置 公钥或者私钥

};extern "C"{/*函数:GMC_New_CTX

功能:初始化获取一个指定类型的密码体系。

参数:

type:密码系统类型

返回:成功返回上下文指针,失败返回NULL。如果返回失败这表明不支持type指定的类型。

Note:在相关使用完成后需要调用GMC_Delete_CTX函数进行释放资源。*/DLL_PUBLICvoid*_APICALL GMC_New_CTX(int8_t type);/*函数:GMC_Delete_CTX

功能:释放指定的密码体系上下文

参数:

pCtx:指定密码体系上下文

返回:无*/DLL_PUBLICvoid _APICALL GMC_Delete_CTX(void *pCtx);/*函数:GMC_set_Key

功能:用于对称加密设置密钥

参数:

pKey:密钥(16进制数据的字符串化形式)

返回指:成功返回0,失败见错误码*/DLL_PUBLIClong _APICALL GMC_set_Key(void *pCtx,const char *pszKey);/*函数:GMC_ECKEY_set_PublicKey

功能:椭圆曲线加密系统公钥设置

参数:

pszXKey:X坐标(16进制数据的字符串化形式)

pszYKey:Y坐标(16进制数据的字符串化形式)

返回:成功返回0,失败见错误码*/DLL_PUBLIClong _APICALL GMC_ECKEY_set_PublicKey(void *pCtx,const char *pszXKey, const char *pszYKey);/*函数:GMC_ECKEY_set_PrivateKey

功能:椭圆曲线加解密系统私钥设置

参数:

pszXKey:私钥(16进制数据的字符串化形式)

返回:成功返回0,失败见错误码*/DLL_PUBLIClong _APICALL GMC_ECKEY_set_PrivateKey(void *pCtx,const char *pszKey);/*函数:GMC_Encrypt

功能:加密指定数据

参数:

pData:被加密数据地址

cbData:被加密数据长度

pEncrypttedData[out]:用于保存加密数据的地址(可以与pData内存重叠)

pcbEncryptted[int][out]:in:pEncrypttedData内存的大小,out:加密后数据的长度

返回:见错误码

note:参数pEncrypttedData可以为NULL,如果为NULl则pcbEncryptted参数返回需要长度。*/DLL_PUBLIClong _APICALL GMC_Encrypt(void *pCtx,const unsigned char *pData, uint32_t cbData, unsigned char *pEncrypttedData, uint32_t *pcbEncryptted);/*函数:GMC_Decrypt

功能:解密指定数据

参数:

pData:被解密数据地址

cbData:被解密数据长度

pDecrypttedData[out]:用于保存解密数据的地址(可以与pData内存重叠)

pcbDecryptted[int][out]:in:pDecrypttedData内存的大小,out:解密后数据的长度

返回:见错误码

note:参数pDecrypttedData可以为NULL,如果为NULl则pcbDecryptted参数返回需要长度。*/DLL_PUBLIClong _APICALL GMC_Decrypt(void *pCtx,const unsigned char *pData, uint32_t cbData, unsigned char *pDecrypttedData, uint32_t *pcbDecryptted);/*函数:GMC_GetLastErrMsg

功能:获取最后一次错误消息

参数:无

返回值:错误消息字串,返回值指针值必定不为NULL*/DLL_PUBLICconst char *_APICALL GMC_GetLastErrMsg();

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值