Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const encseed = looseArrayify(searchPath(data, "encseed"));
if (!encseed || (encseed.length % 16) !== 0) {
logger.throwArgumentError("invalid encseed", "json", json);
}
const key = arrayify(pbkdf2(password, password, 2000, 32, "sha256")).slice(0, 16);
const iv = encseed.slice(0, 16);
const encryptedSeed = encseed.slice(16);
// Decrypt the seed
const aesCbc = new aes.ModeOfOperation.cbc(key, iv);
const seed = aes.padding.pkcs7.strip(arrayify(aesCbc.decrypt(encryptedSeed)));
// This wallet format is weird... Convert the binary encoded hex to a string.
let seedHex = "";
for (let i = 0; i < seed.length; i++) {
seedHex += String.fromCharCode(seed[i]);
}
const seedHexBytes = toUtf8Bytes(seedHex);
const privateKey = keccak256(seedHexBytes);
return new CrowdsaleAccount({
_isCrowdsaleAccount: true,
address: ethaddr,
privateKey: privateKey
});
}
signMessage(message) {
let data = ((typeof (message) === "string") ? toUtf8Bytes(message) : message);
return this.getAddress().then((address) => {
// https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign
return this.provider.send("eth_sign", [address.toLowerCase(), hexlify(data)]);
});
}
unlock(password) {
import { pbkdf2 } from "@ethersproject/pbkdf2";
import { defineReadOnly } from "@ethersproject/properties";
import { SigningKey } from "@ethersproject/signing-key";
import { computeHmac, ripemd160, sha256, SupportedAlgorithms } from "@ethersproject/sha2";
import { computeAddress } from "@ethersproject/transactions";
import { Wordlist, wordlists } from "@ethersproject/wordlists";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
const N = BigNumber.from("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");
// "Bitcoin seed"
const MasterSecret = toUtf8Bytes("Bitcoin seed");
const HardenedBit = 0x80000000;
// Returns a byte with the MSB bits set
function getUpperMask(bits: number): number {
return ((1 << bits) - 1) << (8 - bits);
}
// Returns a byte with the LSB bits set
function getLowerMask(bits: number): number {
return (1 << bits) - 1;
}
function bytes32(value: BigNumber | Uint8Array): string {
return hexZeroPad(hexlify(value), 32);
}
function expand(word) {
const output = [];
Array.prototype.forEach.call(toUtf8Bytes(word), (c) => {
// Acute accent
if (c === 47) {
output.push(204);
output.push(129);
// Grave accent
}
else if (c === 45) {
output.push(204);
output.push(128);
}
else {
output.push(c);
}
});
return toUtf8String(output);
}
return 1;
}
return 0;
}
// Load all the words
for (var length_1 = 3; length_1 <= 9; length_1++) {
var d = data[length_1 - 3];
for (var offset = 0; offset < d.length; offset += length_1) {
var word = [];
for (var i = 0; i < length_1; i++) {
var k = mapping.indexOf(d[offset + i]);
word.push(227);
word.push((k & 0x40) ? 130 : 129);
word.push((k & 0x3f) + 128);
}
wordlist.push(strings_1.toUtf8String(word));
}
}
wordlist.sort(sortJapanese);
// For some reason kyoku and kiyoku are flipped in node (!!).
// The order SHOULD be:
// - kyoku
// - kiyoku
if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) {
var tmp = wordlist[442];
wordlist[442] = wordlist[443];
wordlist[443] = tmp;
}
if (wordlist_1.Wordlist.check(lang) !== "0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600") {
wordlist = null;
throw new Error("BIP39 Wordlist for ja (Japanese) FAILED");
}
// Acute accent
if (c === 47) {
output.push(204);
output.push(129);
// n-tilde
}
else if (c === 126) {
output.push(110);
output.push(204);
output.push(131);
}
else {
output.push(c);
}
});
return toUtf8String(output);
}
function loadWords(lang) {
// Acute accent
if (c === 47) {
output.push(204);
output.push(129);
// n-tilde
}
else if (c === 126) {
output.push(110);
output.push(204);
output.push(131);
}
else {
output.push(c);
}
});
return strings_1.toUtf8String(output);
}
function loadWords(lang) {
Array.prototype.forEach.call(toUtf8Bytes(word), (c) => {
// Acute accent
if (c === 47) {
output.push(204);
output.push(129);
// Grave accent
}
else if (c === 45) {
output.push(204);
output.push(128);
}
else {
output.push(c);
}
});
return toUtf8String(output);
}
function loadWords(lang) {
function loadWords(lang) {
if (wordlist !== null) {
return;
}
wordlist = [];
// Transforms for normalizing (sort is a not quite UTF-8)
const transform = {};
// Delete the diacritic marks
transform[toUtf8String([227, 130, 154])] = false;
transform[toUtf8String([227, 130, 153])] = false;
// Some simple transforms that sort out most of the order
transform[toUtf8String([227, 130, 133])] = toUtf8String([227, 130, 134]);
transform[toUtf8String([227, 129, 163])] = toUtf8String([227, 129, 164]);
transform[toUtf8String([227, 130, 131])] = toUtf8String([227, 130, 132]);
transform[toUtf8String([227, 130, 135])] = toUtf8String([227, 130, 136]);
// Normalize words using the transform
function normalize(word) {
let result = "";
for (let i = 0; i < word.length; i++) {
let kana = word[i];
const target = transform[kana];
if (target === false) {
continue;
}
if (target) {
kana = target;
}
result += kana;
}
exports.commify = units_1.commify;
exports.formatEther = units_1.formatEther;
exports.parseEther = units_1.parseEther;
exports.formatUnits = units_1.formatUnits;
exports.parseUnits = units_1.parseUnits;
var wallet_1 = require("@ethersproject/wallet");
exports.verifyMessage = wallet_1.verifyMessage;
var web_1 = require("@ethersproject/web");
exports.fetchJson = web_1.fetchJson;
exports.poll = web_1.poll;
////////////////////////
// Enums
var sha2_2 = require("@ethersproject/sha2");
exports.SupportedAlgorithms = sha2_2.SupportedAlgorithms;
var strings_2 = require("@ethersproject/strings");
exports.UnicodeNormalizationForm = strings_2.UnicodeNormalizationForm;