revos-sdk-js-mainnet
Version:
revos client and wallet SDK
84 lines (69 loc) • 2 kB
JavaScript
;
import nacl from 'tweetnacl';
import { maxUintBits } from './serialize';
const hexRe = /^[0-9a-f]+$/i;
export function hexToBytes(hex) {
if (hex.length % 2 === 1) {
throw new RangeError('invalid hex string length ' + hex.length)
}
if (!hexRe.test(hex)) {
throw new RangeError('invalid hex string')
}
let bytes = [];
for (let c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.substr(c, 2), 16));
}
return new Uint8Array(bytes);
}
export function bytesToHex(bytes) {
return Array.from(bytes, (b) => {
if (b < 0 || b > 255) {
throw new RangeError('invalid byte ' + b);
}
return ('0' + (b & 0xFF).toString(16)).slice(-2);
}).join('');
}
export var randomBytes = nacl.randomBytes;
export function setPRNG(f) {
nacl.setPRNG(f);
}
export function randomBytesHex(len) {
return bytesToHex(randomBytes(len));
}
export function randomInt32() {
let b = randomBytes(4);
b[0] &= 127
return (b[0]<<24) + (b[1]<<16) + (b[2]<<8) + b[3];
}
export function randomUint64() {
let hex = randomBytesHex(maxUintBits/8);
return parseInt(hex, 16);
}
export function mergeTypedArrays(a, b) {
let c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
export function assignDefined(target, ...sources) {
for (let source of sources) {
if (source) {
for (let key of Object.keys(source)) {
if (source[key] !== undefined) {
target[key] = source[key];
}
}
}
}
return target;
}
export function utf8ToBytes(s) {
if (!s) {
return new Uint8Array();
}
return new Uint8Array(Buffer.from(s, 'utf8'));
}
// convert all keys to lowercase recursively
export function toLowerKeys(obj) {
return Object.keys(obj).reduce((merged, key) => Object.assign(merged, {[key.toLowerCase()]: (typeof obj[key] === 'object' ? toLowerKeys(obj[key]) : obj[key])}), {});
}