Nostalgic Pizza Manager

    gm-crypto
    TypeScript icon, indicating that this package has built-in type declarations

    0.1.8 • Public • Published

    gm-crypto

    Build Status codecov Commitizen friendly code style: prettier PRs Welcome

    密码行业标准化委员会

    A pure JavaScript implementation of GM/T series cryptographic algorithms for 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,
      mode: SM2.constants.CBC,
      inputEncoding: 'utf8',
      outputEncoding: 'hex'
    })
    decryptedData = SM4.decrypt(encryptedData, key, {
      iv,
      mode: SM2.constants.CBC,
      inputEncoding: 'hex',
      outputEncoding: 'utf8'
    })

    API

    SM2.generateKeyPair()

    Generates a new asymmetric key pair.

    SM2.encrypt(data, key[, options])

    Encrypt data.

    Param Type Default Description
    data string|ArrayBuffer|Buffer Plain message
    key string Public key generated by SM2.generateKeyPair()
    options object Options
    options.mode C1C3C2 | C1C2C3 C1C3C2 Concatenation mode
    options.inputEncoding string "utf8" The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
    options.outputEncoding string If outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.
    options.pc boolean false Includes PC mark as first byte

    SM2.decrypt(data, key[, options])

    Decrypt data.

    Param Type Default Description
    data string|ArrayBuffer|Buffer Ciphered data
    key string Private key generated by SM2.generateKeyPair()
    options.mode C1C3C2 | C1C2C3 C1C3C2 Concatenation mode
    options.inputEncoding string The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
    options.outputEncoding string If outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.
    options.pc boolean false Includes PC mark as first byte

    SM3.digest(data, [inputEncoding], [outputEncoding])

    Calculates the digest.

    Param Type Default Description
    data string|ArrayBuffer|Buffer Data message
    inputEncoding string "utf8" The encoding of the data string, if data is not a string then inputEncoding is ignored.
    outputEncoding string If outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

    SM4.encrypt(data, key[, options])

    Encrypt data.

    Param Type Default Description
    data string|ArrayBuffer|Buffer Plain message
    key string Cipher key(any string of 32 hexadecimal digits)
    options object Options
    options.mode ECB | CBC ECB Block cipher mode
    options.iv string Initialization vector(any string of 32 hexadecimal digits)
    options.inputEncoding string "utf8" The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
    options.outputEncoding string If outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

    SM4.decrypt(data, key[, options])

    Decrypt data.

    Param Type Default Description
    data string|ArrayBuffer|Buffer Ciphered data
    key string Cipher key(any string of 32 hexadecimal digits)
    options object Options
    options.mode ECB | CBC ECB Block cipher mode
    options.iv string Initialization vector(any string of 32 hexadecimal digits)
    options.inputEncoding string The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
    options.outputEncoding string If outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

    Install

    npm i gm-crypto

    DownloadsWeekly Downloads

    166

    Version

    0.1.8

    License

    MIT

    Unpacked Size

    80.3 kB

    Total Files

    8

    Last publish

    Collaborators

    • panjizhi