cleaned up code around test declarations; revived a few old tests for new methods for #56, and added method scaffolds for them (incremental commit); replaced Jest with Mocha

pull/106/head
Paul Shapiro 6 years ago
parent a5866fc187
commit 0e48a02c29

@ -95,7 +95,7 @@ We often collaborate over IRC in #mymonero on Freenode.
**All development happens off the `develop` branch like the Gitflow Workflow.**
## Regular contributors
## Contributors
* 💿 `endogenic` ([Paul Shapiro](https://github.com/paulshapiro)) Maintainer
@ -104,3 +104,5 @@ We often collaborate over IRC in #mymonero on Freenode.
* 🏄‍♂️ `paullinator` ([Paul Puey](https://github.com/paullinator)) API design
* 🔒 `cryptochangement` Subaddress send & decode support; Initial tests
* 💩 `henrynguyen5` Tests; Ledger support research

@ -309,6 +309,54 @@ class MyMoneroCoreBridge
return ret.retVal;
}
decodeRct(rv, sk, i)
{
// where RCTTypeFull is 0x01 and RCTTypeFullBulletproof is 0x03
// TODO declare as shared constants
if (rv.type !== 0x01 && rv.type !== 0x03) {
return { err_msg: "verRct called on non-full rctSig" };
}
if (i >= rv.ecdhInfo.length) {
return { err_msg: "Bad index" };
}
if (rv.outPk.length !== rv.ecdhInfo.length) {
return { err_msg: "Mismatched sizes of rv.outPk and rv.ecdhInfo" };
}
}
generate_key_derivation(pub, sec)
{
if (pub.length !== 64 || sec.length !== 64) {
return { err_msg: "Invalid input length" };
}
}
derive_public_key(derivation, out_index, pub)
{
if (derivation.length !== 64 || pub.length !== 64) {
return { err_msg: "Invalid input length!" };
}
}
derive_subaddress_public_key(
output_key,
derivation,
out_index
) {
if (output_key.length !== 64 || derivation.length !== 64) {
return { err_msg: "Invalid input length!" };
}
}
hash_to_scalar(buf/*String*/)
{
}
create_address(seed, nettype)
{
}
estimate_rct_tx_size(n_inputs, mixin, n_outputs, optl__extra_size, optl__bulletproof)
{
const args =

@ -34,6 +34,7 @@ const ENVIRONMENT_IS_NODE = typeof process==="object" && process.browser !== tru
const wants_electronRemote = (ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_WEB)/*this may become insufficient*/
|| (typeof window !== 'undefined' && window.IsElectronRendererProcess == true);
//
const fn_names = require('./__bridged_fns_spec').bridgedFn_names;
const moneroUtils_promise = new Promise(function(resolve, reject)
{
function _didLoad(coreBridge_instance)
@ -42,7 +43,6 @@ const moneroUtils_promise = new Promise(function(resolve, reject)
throw "Unable to make coreBridge_instance"
}
const local_fns = {};
const fn_names = require('./__bridged_fns_spec').bridgedFn_names;
for (const i in fn_names) {
const name = fn_names[i]
local_fns[name] = function()

198
package-lock.json generated

@ -0,0 +1,198 @@
{
"name": "mymonero-core-js",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"commander": {
"version": "2.15.1",
"resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"mocha": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
"browser-stdout": "1.3.1",
"commander": "2.15.1",
"debug": "3.1.0",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
"glob": "7.1.2",
"growl": "1.10.5",
"he": "1.1.1",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"supports-color": "5.4.0"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
}
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"supports-color": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

@ -9,8 +9,7 @@
},
"scripts": {
"format": "find . -name '*.js*' | xargs prettier --write --config ./.prettierrc --config-precedence file-override",
"test": "jest --verbose",
"test:coverage": "jest --coverage --verbose"
"test": "mocha"
},
"keywords": [
"monero",
@ -31,16 +30,15 @@
"url": "https://github.com/mymonero/mymonero-core-js/issues"
},
"homepage": "https://github.com/mymonero/mymonero-core-js#readme",
"dependencies": {
},
"dependencies": {},
"devDependencies": {
"jest": "^23.1.0"
"mocha": "^5.2.0"
},
"jest" : {
"testEnvironment":"node",
"jest": {
"testEnvironment": "node",
"verbose": true,
"coveragePathIgnorePatterns": [
"node_modules",
"node_modules",
"monero_utils/MyMoneroCoreCpp.js",
"tests/emjs/*"
]

@ -28,7 +28,7 @@
"use strict";
const mymonero = require("../");
// const assert = require("assert");
const assert = require("assert");
var public_key =
"904e49462268d771cc1649084c35aa1296bfb214880fe2e7f373620a3e2ba597";
@ -39,38 +39,93 @@ var nettype = mymonero.nettype_utils.network_type.MAINNET;
describe("cryptonote_utils tests", function() {
it("decode mainnet primary address", function() {
async function test() {
var decoded = (await mymonero.monero_utils_promise).decode_address(
"49qwWM9y7j1fvaBK684Y5sMbN8MZ3XwDLcSaqcKwjh5W9kn9qFigPBNBwzdq6TCAm2gKxQWrdZuEZQBMjQodi9cNRHuCbTr",
nettype,
);
var expected = {
spend:
"d8f1e81ecbe25ce8b596d426fb02fe7b1d4bb8d14c06b3d3e371a60eeea99534",
view:
"576f0e61e250d941746ed147f602b5eb1ea250ca385b028a935e166e18f74bd7",
};
assert.deepEqual(decoded, expected);
}
test()
it("decode mainnet primary address", async function() {
const monero_utils = await require("../monero_utils/monero_utils")
var decoded = monero_utils.decode_address(
"49qwWM9y7j1fvaBK684Y5sMbN8MZ3XwDLcSaqcKwjh5W9kn9qFigPBNBwzdq6TCAm2gKxQWrdZuEZQBMjQodi9cNRHuCbTr",
nettype,
);
var expected = {
isSubaddress: false,
intPaymentId: undefined,
spend:
"d8f1e81ecbe25ce8b596d426fb02fe7b1d4bb8d14c06b3d3e371a60eeea99534",
view:
"576f0e61e250d941746ed147f602b5eb1ea250ca385b028a935e166e18f74bd7",
};
assert.deepEqual(decoded, expected);
});
it("decode mainnet integrated address", function() {
async function test() {
var decoded = (await mymonero.monero_utils_promise).decode_address(
"4KYcX9yTizXfvaBK684Y5sMbN8MZ3XwDLcSaqcKwjh5W9kn9qFigPBNBwzdq6TCAm2gKxQWrdZuEZQBMjQodi9cNd3mZpgrjXBKMx9ee7c",
nettype,
);
var expected = {
spend:
"d8f1e81ecbe25ce8b596d426fb02fe7b1d4bb8d14c06b3d3e371a60eeea99534",
view:
"576f0e61e250d941746ed147f602b5eb1ea250ca385b028a935e166e18f74bd7",
intPaymentId: "83eab71fbee84eb9",
};
assert.deepEqual(decoded, expected);
}
test()
it("decode mainnet integrated address", async function() {
const monero_utils = await require("../monero_utils/monero_utils")
var decoded = monero_utils.decode_address(
"4KYcX9yTizXfvaBK684Y5sMbN8MZ3XwDLcSaqcKwjh5W9kn9qFigPBNBwzdq6TCAm2gKxQWrdZuEZQBMjQodi9cNd3mZpgrjXBKMx9ee7c",
nettype,
);
var expected = {
spend:
"d8f1e81ecbe25ce8b596d426fb02fe7b1d4bb8d14c06b3d3e371a60eeea99534",
view:
"576f0e61e250d941746ed147f602b5eb1ea250ca385b028a935e166e18f74bd7",
isSubaddress: false,
intPaymentId: "83eab71fbee84eb9",
};
assert.deepEqual(decoded, expected);
});
it("hash_to_scalar", async function() {
const monero_utils = await require("../monero_utils/monero_utils")
var scalar = monero_utils.hash_to_scalar(private_key);
assert.equal(
scalar,
"77c5899835aa6f96b13827f43b094abf315481eaeb4ad2403c65d5843480c404",
);
});
it("generate key derivation", async function() {
const monero_utils = await require("../monero_utils/monero_utils")
var derivation = monero_utils.generate_key_derivation(
public_key,
private_key,
);
assert.equal(
derivation,
"591c749f1868c58f37ec3d2a9d2f08e7f98417ac4f8131e3a57c1fd71273ad00",
);
});
it("derive public key", async function() {
const monero_utils = await require("../monero_utils/monero_utils")
var derivation = monero_utils.generate_key_derivation(
public_key,
private_key,
);
var output_key = monero_utils.derive_public_key(
derivation,
1,
public_key,
);
assert.equal(
output_key,
"da26518ddb54cde24ccfc59f36df13bbe9bdfcb4ef1b223d9ab7bef0a50c8be3",
);
});
it("derive subaddress public key", async function() {
const monero_utils = await require("../monero_utils/monero_utils")
var derivation = monero_utils.generate_key_derivation(
public_key,
private_key,
);
var subaddress_public_key = monero_utils.derive_subaddress_public_key(
public_key,
derivation,
1,
);
assert.equal(
subaddress_public_key,
"dfc9e4a0039e913204c1c0f78e954a7ec7ce291d8ffe88265632f0da9d8de1be",
);
});
});

Loading…
Cancel
Save