aboutsummaryrefslogtreecommitdiffstats
path: root/test/unit/app/account-import-strategies.spec.js
blob: e0d514d073f99776960dd3d2d2361027d8a55224 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const assert = require('assert')
const path = require('path')
const ethUtil = require('ethereumjs-util')
const accountImporter = require('../../../app/scripts/account-import-strategies/index')
const { assertRejects } = require('../test-utils')

describe('Account Import Strategies', function () {
  const privkey = '0x4cfd3e90fc78b0f86bf7524722150bb8da9c60cd532564d7ff43f5716514f553'
  const json = '{"version":3,"id":"dbb54385-0a99-437f-83c0-647de9f244c3","address":"a7f92ce3fba24196cf6f4bd2e1eb3db282ba998c","Crypto":{"ciphertext":"bde13d9ade5c82df80281ca363320ce254a8a3a06535bbf6ffdeaf0726b1312c","cipherparams":{"iv":"fbf93718a57f26051b292f072f2e5b41"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"7ffe00488319dec48e4c49a120ca49c6afbde9272854c64d9541c83fc6acdffe","n":8192,"r":8,"p":1},"mac":"2adfd9c4bc1cdac4c85bddfb31d9e21a684e0e050247a70c5698facf6b7d4681"}}'

  describe('private key import', function () {
    it('imports a private key and strips 0x prefix', async function () {
      const importPrivKey = await accountImporter.importAccount('Private Key', [ privkey ])
      assert.equal(importPrivKey, ethUtil.stripHexPrefix(privkey))
    })

    it('throws an error for empty string private key', async () => {
      assertRejects(async function () {
        await accountImporter.importAccount('Private Key', [ '' ])
      }, Error, 'no empty strings')
    })

    it('throws an error for undefined string private key', async () => {
      assertRejects(async function () {
        await accountImporter.importAccount('Private Key', [ undefined ])
      })
    })

    it('throws an error for undefined string private key', async () => {
      assertRejects(async function () {
        await accountImporter.importAccount('Private Key', [])
      })
    })

    it('throws an error for invalid private key', async () => {
      assertRejects(async function () {
        await accountImporter.importAccount('Private Key', [ 'popcorn' ])
      })
    })
  })

  describe('JSON keystore import', function () {
    it('fails when password is incorrect for keystore', async function () {
      const wrongPassword = 'password2'

      try {
        await accountImporter.importAccount('JSON File', [ json, wrongPassword])
      } catch (error) {
        assert.equal(error.message, 'Key derivation failed - possibly wrong passphrase')
      }
    })

    it('imports json string and password to return a private key', async function () {
      const fileContentsPassword = 'password1'
      const importJson = await accountImporter.importAccount('JSON File', [ json, fileContentsPassword])
      assert.equal(importJson, '0x5733876abe94146069ce8bcbabbde2677f2e35fa33e875e92041ed2ac87e5bc7')
    })
  })
})