hive-js-dev
Version:
Steem.js the JavaScript API for Steem blockchain
101 lines (85 loc) • 3.68 kB
JavaScript
import config from "../src/config"
import { Aes, PrivateKey, PublicKey, Signature } from "../src/auth/ecc"
import assert from "assert"
var secureRandom = require('secure-random');
var hash = require('../src/auth/ecc/src/hash');
var key = require('../src/auth/ecc/src/key_utils');
describe("steem.auth: Crypto", function() {
/*it "Computes public key", ->
private_key = PrivateKey.fromHex decrypted_key.substring 0, 64
public_key = private_key.toPublicKey()
console.log public_key.toHex());*/
it("sign", function() {
this.timeout(10000);
var private_key = PrivateKey.fromSeed("1");
return (() => {
var result = [];
for (var i = 0; i < 10; i++) {
result.push(Signature.signBuffer((new Buffer(i)), private_key));
}
return result;
})();
});
})
describe("steem.auth: derives", ()=> {
let prefix = config.get("address_prefix")
let one_time_private = PrivateKey.fromHex("8fdfdde486f696fd7c6313325e14d3ff0c34b6e2c390d1944cbfe150f4457168")
let to_public = PublicKey.fromStringOrThrow(prefix + "7vbxtK1WaZqXsiCHPcjVFBewVj8HFRd5Z5XZDpN6Pvb2dZcMqK")
let secret = one_time_private.get_shared_secret( to_public )
let child = hash.sha256( secret )
// Check everything above with `wdump((child));` from the witness_node:
assert.equal(child.toString('hex'), "1f296fa48172d9af63ef3fb6da8e369e6cc33c1fb7c164207a3549b39e8ef698")
let nonce = hash.sha256( one_time_private.toBuffer() )
assert.equal(nonce.toString('hex'), "462f6c19ece033b5a3dba09f1e1d7935a5302e4d1eac0a84489cdc8339233fbf")
it("child from public", ()=> assert.equal(
to_public.child(child).toString(),
"STM6XA72XARQCain961PCJnXiKYdEMrndNGago2PV5bcUiVyzJ6iL",
"derive child public key"
))
// child = hash.sha256( one_time_private.get_secret( to_public ))
it("child from private", ()=> assert.equal(
PrivateKey.fromSeed("alice-brain-key").child(child).toPublicKey().toString(),
"STM6XA72XARQCain961PCJnXiKYdEMrndNGago2PV5bcUiVyzJ6iL",
"derive child from private key"
))
// "many keys" works, not really needed
// it("many keys", function() {
//
// this.timeout(10 * 1000)
//
// for (var i = 0; i < 10; i++) {
// let privkey1 = key.get_random_key()
// let privkey2 = key.get_random_key()
//
// let secret1 = one_time_private.get_shared_secret( privkey1.toPublicKey() )
// let child1 = hash.sha256( secret1 )
//
// let secret2 = privkey2.get_shared_secret( privkey2.toPublicKey() )
// let child2 = hash.sha256( secret2 )
//
// it("child from public", ()=> assert.equal(
// privkey1.toPublicKey().child(child1).toString(),
// privkey2.toPublicKey().child(child2).toString(),
// "derive child public key"
// ))
//
// it("child from private", ()=> assert.equal(
// privkey1.child(child1).toString(),
// privkey2.child(child2).toString(),
// "derive child private key"
// ))
// }
//
// })
})
var min_time_elapsed = function(f){
var start_t = Date.now();
var ret = f();
var elapsed = Date.now() - start_t;
assert.equal(
// repeat operations may take less time
elapsed >= 250 * 0.8, true,
`minimum time requirement was not met, instead only ${elapsed/1000.0} elapsed`
);
return ret;
};