Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/emmansun/sm2js

GM-Standards SM2 SM3 SM4 for Javascript
https://github.com/emmansun/sm2js

jsrsasign sm2 sm3 sm4

Last synced: about 2 months ago
JSON representation

GM-Standards SM2 SM3 SM4 for Javascript

Awesome Lists containing this project

README

        

# sm2js (jsrsasign-sm)
[![SM2JS CI](https://github.com/emmansun/sm2js/actions/workflows/ci.yml/badge.svg)](https://github.com/emmansun/sm2js/actions/workflows/ci.yml)
[![npm version](https://badge.fury.io/js/gmsm-sm2js.svg)](https://badge.fury.io/js/gmsm-sm2js)
[![NPM Downloads][npm-downloads-image]][npm-url]

**sm2js is a pure Javascript implementation of the GM-Standards SM2 (also support sm3/sm4) based on [jsrsasign](https://github.com/kjur/jsrsasign).**

基于jsrsasign实现的优势在于充分利用jsrsasign的PKIX,CSR,CERT,PKCS8等处理能力。您也可以参考另外一个实现:[sjcl-sm](https://github.com/emmansun/sm4js)。

## SM2

- sign/verify functions (Passed integration test with ALI KMS)
- sm2Sign/sm2Verify functions (include uid and curve related parameters in signature)
- encrypt/decrypt functions (Passed integration test with ALI KMS), support both PLAIN and ASN.1 encoding format ciphertext output
- SM2 certificate signing request generation and parse
- SM2 certificate parse and verify signature, test CA & certificate are generated from https://www.gmcert.org/
- Parse SM2 private key in PKCS8 format (both encrypted and plaintext).

For usage, please reference [sm2_test.js](https://github.com/emmansun/sm2js/blob/master/test/sm2_test.js "sm2_test.js")

## SM3
**SM3**使用比较简单,请参考[cryptojs_sm3_test.js](https://github.com/emmansun/sm2js/blob/master/test/cryptojs_sm3_test.js "cryptojs_sm3_test.js")。单独的**SM3**实现,可以参考[gmsm-sm3js](https://github.com/emmansun/sm3js)。

## SM4
[jsrsasign](https://github.com/kjur/jsrsasign) 内嵌了[crypto-js](https://github.com/brix/crypto-js)的剪裁版本,只支持默认的**CBC**模式和**PKCS7填充**模式(本实现为了测试,添加了ECB模式和无填充填充模式)。本**SM4**实现同时实现了[sjcl](https://github.com/bitwiseshiftleft/sjcl)所需方法,所以可以和sjcl支持的加密模式一起使用。具体使用方法,请参考[cryptojs_sm4_test.js](https://github.com/emmansun/sm2js/blob/master/test/cryptojs_sm4_test.js "cryptojs_sm4_test.js")。当然,把本**SM4**实现和独立的[crypto-js](https://github.com/brix/crypto-js)结合使用也是可以的。

在NodeJS环境下,修改过的```KJUR.crypto.Cipher.encrypt```和```KJUR.crypto.Cipher.decrypt```会优先使用NodeJS Native实现,这两个方法目前只支持以下模式:
- aes128-CBC
- aes256-CBC
- des-EDE3-CBC
- sm4-CBC

[npm-downloads-image]: https://badgen.net/npm/dm/gmsm-sm2js
[npm-url]: https://npmjs.org/package/gmsm-sm2js