]>
git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - libs/stellar-util/stellar-util.js
1 const createHmac
= require('create-hmac');
2 const StellarBase
= require('stellar-base');
6 HARDENED_OFFSET: 0x80000000,
7 ED25519_CURVE: 'ed25519 seed',
9 replaceDerive: (val
) => val
.replace("'", ''),
11 getMasterKeyFromSeed: function (seed
) {
12 const hmac
= createHmac('sha512', this.ED25519_CURVE
);
13 const I
= hmac
.update(Buffer
.from(seed
, 'hex')).digest();
14 const IL
= I
.slice(0, 32);
15 const IR
= I
.slice(32);
22 CKDPriv: ({key
, chainCode
}, index
) => {
23 const indexBuffer
= Buffer
.allocUnsafe(4);
24 indexBuffer
.writeUInt32BE(index
, 0);
25 const data
= Buffer
.concat([Buffer
.alloc(1, 0), key
, indexBuffer
]);
26 const I
= createHmac('sha512', chainCode
)
29 const IL
= I
.slice(0, 32);
30 const IR
= I
.slice(32);
37 derivePath: function (path
, seed
) {
39 const {key
, chainCode
} = this.getMasterKeyFromSeed(seed
);
43 .map(this.replaceDerive
)
44 .map(el
=> parseInt(el
, 10));
45 const result
= segments
.reduce((parentKeys
, segment
) => this.CKDPriv(parentKeys
, segment
+ this.HARDENED_OFFSET
), {key
, chainCode
});
46 return StellarBase
.Keypair
.fromRawEd25519Seed(result
.key
);