GmSSL Java Wrapper

GmSSL Java Wrapper是GmSSL密码库接口的Java语言封装,提供了包括随机数生成、对称加解密、哈希、消息认证码(MAC)、公钥加解密、数字签名、密钥交换等基础密码功能的Java语言接口,支持包括SM2/SM3/SM4/RSA/AES/3DES/MD5/SHA-1/SHA-2在内的GmSSL密码库的全部密码算法。GmSSL Java Wrapper是GmSSL项目的子项目,用于支持Java和Android平台上的应用开发。

接口说明

GmSSL Java Wrapper的接口如下:

public class GmSSL {

	public native String getVersion(int type);
	public native byte [] generateRandom(int length);
	public native String [] getCiphers(boolean aliases);
	public native int getCipherIVLength(String cipher);
	public native int getCipherKeyLength(String cipher);
	public native int getCipherBlockSize(String cipher);
	public native byte [] symmetricEncrypt(String cipher, int flag, byte [] in, byte [] key, byte [] iv);
	public native byte [] symmetricDecrypt(String cipher, int flag, byte [] in, byte [] key, byte [] iv);
	public native String [] getDigests(boolean aliases);
	public native int getDigestLength(String digestAlgor);
	public native int getDigestBlockSize(String digestAlgor);
	public native byte [] digest(String algor, int flag, byte [] data);
	public native String [] getMacs(boolean aliases);
	public native String [] getMacLength(String algor);
	public native byte [] mac(String algor, int flag, byte [] data, byte [] key);
	public native String [] getSignAlgorithms(boolean aliases);
	public native byte [] sign(String algor, int flag, byte [] data, byte [] privateKey);
	public native int verify(String algor, int flag, byte [] digest, byte [] signature, byte [] publicKey);
	public native String [] getPublicKeyEncryptions(boolean aliases);
	public native byte [] publicKeyEncrypt(String algor, int flag, byte [] in, byte [] publicKey);
	public native byte [] publicKeyDecrypt(String algor, int falg, byte [] in, byte [] privateKey);
	public native String [] getDeriveKeyAlgorithms(boolean aliases);
	public native byte [] deriveKey(String algor, int flag, int keyLength, byte [] peerPublicKey, byte [] privateKey);
	public native String getErrorString();

	static {
		System.loadLibrary("gmssl");
	}
}

由于GmSSL Java Wrapper有可能和任意版本的GmSSL库链接在一起,应用程序在运行时获取GmSSL的功能信息。可以通过getVersion()接口获取GmSSL库的版本,如版本号、编译选项、配置文件路径以及ENGINE路径等信息,通过getCiphers()getDigests()getMacs()getSignAlgorithms()getPublicKeyEncryptions()getKeyDeriveAlgorithms()获取当前GmSSL支持的算法,这些接口返回以:字符分隔的算法名称字符串,这些算法名称字符串可以用于密码操作接口的输入参数。在GmSSL中,部分算法有别名,通过aliases参数可以设定是否输出算法别名。

GmSSL Java Wrapper支持如下密码功能:

除了随机数生成之外,其他的接口都需要提供字符串格式的算法名称。

返回值

应用应该总是检查返回值。

如果运行错误,那么应用可以通过调用getErrorString()获得可打印的错误原因,通常需要多次调用getErrorString()才能够获得完整的错误栈信息。不是所有的错误都会返回错误。