lib v1.3.3: Improvements to bitjs for flo
- Updated tx.addflodata: will now check if the data is valid or not - Optimized tx.serialize: changed complex code for appending flodata to a simple one - Added bitjs.strToBytes: converts string (ascii) to strToBytes - Added bitjs.pubkeydecompress: decompresses the public key - Added bitjs.verifySignature: verify the signature (of hash and pubkey)
This commit is contained in:
parent
ca0d557d94
commit
7d31dec230
78
lib.js
78
lib.js
@ -1,4 +1,4 @@
|
|||||||
(function (GLOBAL) { //lib v1.3.2
|
(function (GLOBAL) { //lib v1.3.3
|
||||||
'use strict';
|
'use strict';
|
||||||
/* Utility Libraries required for Standard operations
|
/* Utility Libraries required for Standard operations
|
||||||
* All credits for these codes belong to their respective creators, moderators and owners.
|
* All credits for these codes belong to their respective creators, moderators and owners.
|
||||||
@ -4349,15 +4349,6 @@
|
|||||||
|
|
||||||
var bitjs = GLOBAL.bitjs = function () { };
|
var bitjs = GLOBAL.bitjs = function () { };
|
||||||
|
|
||||||
function ascii_to_hexa(str) {
|
|
||||||
var arr1 = [];
|
|
||||||
for (var n = 0, l = str.length; n < l; n++) {
|
|
||||||
var hex = Number(str.charCodeAt(n)).toString(16);
|
|
||||||
arr1.push(hex);
|
|
||||||
}
|
|
||||||
return arr1.join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* public vars */
|
/* public vars */
|
||||||
bitjs.pub = 0x23; // flochange - changed the prefix to FLO Mainnet PublicKey Prefix 0x23
|
bitjs.pub = 0x23; // flochange - changed the prefix to FLO Mainnet PublicKey Prefix 0x23
|
||||||
bitjs.priv = 0xa3; //flochange - changed the prefix to FLO Mainnet Private key prefix 0xa3
|
bitjs.priv = 0xa3; //flochange - changed the prefix to FLO Mainnet Private key prefix 0xa3
|
||||||
@ -4497,10 +4488,18 @@
|
|||||||
return this.outputs.push(o);
|
return this.outputs.push(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// flochange - Added fn to assign flodata to tx
|
||||||
|
btrx.addflodata = function (data) {
|
||||||
|
//checks for valid flo-data string
|
||||||
|
if (typeof data !== "string")
|
||||||
|
throw Error("floData should be String");
|
||||||
|
if (data.length > 1040)
|
||||||
|
throw Error("floData Character Limit Exceeded");
|
||||||
|
if (bitjs.strToBytes(data).some(c => c < 32 || c > 127))
|
||||||
|
throw Error("floData contains Invalid characters (only ASCII characters allowed");
|
||||||
|
|
||||||
btrx.addflodata = function (txcomments) { // flochange - this whole function needs to be done
|
this.floData = data;
|
||||||
this.floData = txcomments;
|
return this.floData;
|
||||||
return this.floData; //flochange .. returning the txcomments -- check if the function return will assign
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4793,29 +4792,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
buffer = buffer.concat(bitjs.numToBytes(parseInt(this.locktime), 4));
|
buffer = buffer.concat(bitjs.numToBytes(parseInt(this.locktime), 4));
|
||||||
var flohex = ascii_to_hexa(this.floData);
|
|
||||||
var floDataCount = this.floData.length;
|
|
||||||
var floDataCountString;
|
|
||||||
//flochange -- creating unique data character count logic for floData. This string is prefixed before actual floData string in Raw Transaction
|
|
||||||
if (floDataCount < 16) {
|
|
||||||
floDataCountString = floDataCount.toString(16);
|
|
||||||
floDataCountString = "0" + floDataCountString;
|
|
||||||
} else if (floDataCount < 253) {
|
|
||||||
floDataCountString = floDataCount.toString(16);
|
|
||||||
} else if (floDataCount <= 1040) {
|
|
||||||
let floDataCountAdjusted = (floDataCount - 253) + parseInt("0xfd00fd");
|
|
||||||
let floDataCountStringAdjusted = floDataCountAdjusted.toString(16);
|
|
||||||
floDataCountString = floDataCountStringAdjusted.substr(0, 2) + floDataCountStringAdjusted.substr(4, 2) + floDataCountStringAdjusted.substr(2, 2);
|
|
||||||
} else {
|
|
||||||
floDataCountString = "Character Limit Exceeded";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//flochange -- append floData field
|
||||||
|
buffer = buffer.concat(bitjs.numToVarInt(this.floData.length));
|
||||||
|
buffer = buffer.concat(bitjs.strToBytes(this.floData))
|
||||||
|
|
||||||
return Crypto.util.bytesToHex(buffer) + floDataCountString + flohex; // flochange -- Addition of floDataCountString and floData in serialization
|
return Crypto.util.bytesToHex(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return btrx;
|
return btrx;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4856,6 +4840,36 @@
|
|||||||
else return bytes[0] + 256 * bitjs.bytesToNum(bytes.slice(1));
|
else return bytes[0] + 256 * bitjs.bytesToNum(bytes.slice(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//flochange - adding fn to convert string (for flodata) to byte
|
||||||
|
bitjs.strToBytes = function (str) {
|
||||||
|
return str.split('').map(c => c.charCodeAt(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* decompress an compressed public key */
|
||||||
|
bitjs.pubkeydecompress = function (pubkey) {
|
||||||
|
if ((typeof (pubkey) == 'string') && pubkey.match(/^[a-f0-9]+$/i)) {
|
||||||
|
var curve = EllipticCurve.getSECCurveByName("secp256k1");
|
||||||
|
try {
|
||||||
|
var pt = curve.curve.decodePointHex(pubkey);
|
||||||
|
var x = pt.getX().toBigInteger();
|
||||||
|
var y = pt.getY().toBigInteger();
|
||||||
|
|
||||||
|
var publicKeyBytes = EllipticCurve.integerToBytes(x, 32);
|
||||||
|
publicKeyBytes = publicKeyBytes.concat(EllipticCurve.integerToBytes(y, 32));
|
||||||
|
publicKeyBytes.unshift(0x04);
|
||||||
|
return Crypto.util.bytesToHex(publicKeyBytes);
|
||||||
|
} catch (e) {
|
||||||
|
// console.log(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bitjs.verifySignature = function (hash, sig, pubkey) {
|
||||||
|
return Bitcoin.ECDSA.verify(hash, sig, pubkey);
|
||||||
|
}
|
||||||
|
|
||||||
/* clone an object */
|
/* clone an object */
|
||||||
bitjs.clone = function (obj) {
|
bitjs.clone = function (obj) {
|
||||||
if (obj == null || typeof (obj) != 'object') return obj;
|
if (obj == null || typeof (obj) != 'object') return obj;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user