0.1.12 • Published 11 months ago

gm-crypto v0.1.12

Weekly downloads
62
License
MIT
Repository
github
Last release
11 months ago

gm-crypto

Build Status codecov Commitizen friendly code style: prettier PRs Welcome

密码行业标准化委员会

A pure JavaScript implementation of GM/T series(sm2,sm3,sm4) cryptographic algorithms compatible with Node.js and browsers, with type declaration files support.

Quick Start

Install

Using npm:

$ npm install gm-crypto

Using yarn:

$ yarn add gm-crypto

Basic Usage

SM2

Public Key Cryptographic Algorithm Based on Elliptic Curves.

const { SM2 } = require('gm-crypto')

const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = 'SM2 椭圆曲线公钥密码算法'

const encryptedData = SM2.encrypt(originalData, publicKey, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})

const decryptedData = SM2.decrypt(encryptedData, privateKey, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})

SM3

Cryptographic Hash Algorithm.

const { SM3 } = require('gm-crypto')

console.log(SM3.digest('abc'))
console.log(SM3.digest('YWJj', 'base64'))
console.log(SM3.digest('616263', 'hex', 'base64'))

SM4

Block Cipher Algorithm.

const { SM4 } = require('gm-crypto')

const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = 'SM4 国标对称加密'

/**
 * Block cipher modes:
 * - ECB: electronic codebook
 * - CBC: cipher block chaining
 */

let encryptedData, decryptedData

// ECB
encryptedData = SM4.encrypt(originalData, key, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})
decryptedData = SM4.decrypt(encryptedData, key, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})

// CBC
const iv = '0123456789abcdeffedcba9876543210' // Initialization vector(any string of 32 hexadecimal digits)
encryptedData = SM4.encrypt(originalData, key, {
  iv: iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'utf8',
  outputEncoding: 'hex'
})
decryptedData = SM4.decrypt(encryptedData, key, {
  iv: iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'hex',
  outputEncoding: 'utf8'
})

API

SM2.generateKeyPair()

Generates a new asymmetric key pair.

SM2.encrypt(data, key, options)

Encrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferPlain message
keystringPublic key generated by SM2.generateKeyPair()
optionsobjectOptions
options.modeC1C3C2 | C1C2C3C1C3C2Concatenation mode
options.inputEncodingstring"utf8"The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.
options.pcbooleanfalseIncludes PC mark as first byte

SM2.decrypt(data, key, options)

Decrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferCiphered data
keystringPrivate key generated by SM2.generateKeyPair()
options.modeC1C3C2 | C1C2C3C1C3C2Concatenation mode
options.inputEncodingstringThe encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.
options.pcbooleanfalseIncludes PC mark as first byte

SM3.digest(data, inputEncoding, outputEncoding)

Calculates the digest.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferData message
inputEncodingstring"utf8"The encoding of the data string, if data is not a string then inputEncoding is ignored.
outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

SM4.encrypt(data, key, options)

Encrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferPlain message
keystringCipher key(any string of 32 hexadecimal digits)
optionsobjectOptions
options.modeECB | CBCECBBlock cipher mode
options.ivstringInitialization vector(any string of 32 hexadecimal digits)
options.inputEncodingstring"utf8"The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

SM4.decrypt(data, key, options)

Decrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferCiphered data
keystringCipher key(any string of 32 hexadecimal digits)
optionsobjectOptions
options.modeECB | CBCECBBlock cipher mode
options.ivstringInitialization vector(any string of 32 hexadecimal digits)
options.inputEncodingstringThe encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.