UNPKG

sm.js

Version:

SM series cryptography in javascript implementation

70 lines (63 loc) 1.55 kB
/** * Utils for SM2 and SM3 module */ var utils = exports var BN = require('bn.js'); var crypto = require('crypto'); utils.strToBytes = strToBytes; utils.hashToBN = hashToBN; utils.random = random; utils.padStart = padStart; function strToBytes(s) { var ch, st, re = []; for (var i = 0; i < s.length; i++ ) { ch = s.charCodeAt(i); // get char st = []; // set up "stack" do { st.push( ch & 0xFF ); // push byte to stack ch = ch >> 8; // shift value down by 1 byte } while ( ch ); // add stack contents to result // done because chars have "wrong" endianness re = re.concat( st.reverse() ); } return re; } function hashToBN(hash) { if (typeof hash == 'string') { return new BN(hash, 16); } else { var hex = ''; for (var i = 0; i < hash.length; i++) { var b = hash[i].toString(16); if (b.length == 1) { hex += '0'; } hex += b; } return new BN(hex, 16); } } /** * Pads supplied string with character to fill the desired length. * * @param {*} str String to pad * @param {*} length Desired length of result string * @param {*} padChar Character to use as padding */ function padStart(str, length, padChar) { if (str.length >= length) { return str; } else { return padChar.repeat(length - str.length) + str; } } /** * Generate cryptographic random value. * * @param {Number} n: byte length of the generated value */ function random(n) { return crypto.randomBytes(n).toString('hex') }