Completed
Pull Request — master (#5)
by thomas
03:41
created

MnemonicTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 5
dl 0
loc 105
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A getBip39Vectors() 0 20 3
A testEntropyToMnemonic() 0 5 1
A testMnemonicToEntropy() 0 5 1
A testIncorrectWordCount() 0 6 1
A testFailsOnInvalidChecksum() 0 6 1
A testFailsOnEntropyMod4() 0 5 1
A testFailsOnEntropyTooLong() 0 5 1
A testFailsOnMnemonicOfEntropyTooLong() 0 6 1
1
<?php
2
3
namespace BitWasp\Bitcoin\Tests\Mnemonic\Bip39;
4
5
use BitWasp\Buffertools\Buffer;
6
use BitWasp\Buffertools\BufferInterface;
7
use Btccom\JustEncrypt\Encoding\Mnemonic;
8
use Btccom\JustEncrypt\Encoding\Wordlist;
9
use Btccom\JustEncrypt\Test\AbstractTestCase;
10
11
class MnemonicTest extends AbstractTestCase
12
{
13
    /**
14
     * @return array
15
     */
16
    public function getBip39Vectors()
17
    {
18
        $file = json_decode($this->dataFile('bip39.json'), true);
19
        $vectors = [];
20
21
        $bip39 = new Mnemonic(new Wordlist());
22
        foreach ($file as $list => $testSet) {
23
            
24
            foreach ($testSet as $set) {
25
                $vectors[] = [
26
                    $bip39,
27
                    Buffer::hex($set[0]),
28
                    $set[1],
29
                    Buffer::hex($set[2])
30
                ];
31
            }
32
        }
33
34
        return $vectors;
35
    }
36
37
    /**
38
     * @dataProvider getBip39Vectors
39
     * @param Mnemonic $bip39
40
     * @param BufferInterface $entropy
41
     * @param $eMnemonic
42
     * @param BufferInterface $eSeed
43
     */
44
    public function testEntropyToMnemonic(Mnemonic $bip39, BufferInterface $entropy, $eMnemonic, BufferInterface $eSeed)
0 ignored issues
show
Unused Code introduced by
The parameter $eSeed is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
45
    {
46
        $mnemonic = $bip39->entropyToMnemonic($entropy);
47
        $this->assertEquals($eMnemonic, $mnemonic);
48
    }
49
50
    /**
51
     * @dataProvider getBip39Vectors
52
     * @param Mnemonic $bip39
53
     * @param BufferInterface $eEntropy
54
     * @param $mnemonic
55
     * @param BufferInterface $eSeed
56
     */
57
    public function testMnemonicToEntropy(Mnemonic $bip39, BufferInterface $eEntropy, $mnemonic, BufferInterface $eSeed)
0 ignored issues
show
Unused Code introduced by
The parameter $eSeed is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
58
    {
59
        $entropy = $bip39->mnemonicToEntropy($mnemonic);
60
        $this->assertEquals($eEntropy->getBinary(), $entropy->getBinary());
61
    }
62
63
    /**
64
     * @expectedException \InvalidArgumentException
65
     * @expectedExceptionMessage Invalid mnemonic
66
     */
67
    public function testIncorrectWordCount()
68
    {
69
        $bip39 = new Mnemonic(new Wordlist());
70
        $mnemonic = 'letter advice';
71
        $bip39->mnemonicToEntropy($mnemonic);
72
    }
73
74
    /**
75
     * @expectedException \InvalidArgumentException
76
     * @expectedExceptionMessage Checksum does not match
77
     */
78
    public function testFailsOnInvalidChecksum()
79
    {
80
        $bip39 = new Mnemonic(new Wordlist());
81
        $mnemonic = 'jelly better achieve collect unaware mountain thought cargo oxygen act hood oxygen';
82
        $bip39->mnemonicToEntropy($mnemonic);
83
    }
84
85
    /**
86
     * @expectedException \InvalidArgumentException
87
     * @expectedExceptionMessage Invalid entropy, must be multitude of 4 bytes
88
     */
89
    public function testFailsOnEntropyMod4()
90
    {
91
        $bip39 = new Mnemonic(new Wordlist());
92
        $bip39->entropyToMnemonic(Buffer::hex(str_repeat('00', 5)));
93
    }
94
95
    /**
96
     * @expectedException \InvalidArgumentException
97
     * @expectedExceptionMessage Invalid entropy, max 1024 bytes
98
     */
99
    public function testFailsOnEntropyTooLong()
100
    {
101
        $bip39 = new Mnemonic(new Wordlist());
102
        $bip39->entropyToMnemonic(Buffer::hex(str_repeat('00', 1028)));
103
    }
104
105
    /**
106
     * @expectedException \InvalidArgumentException
107
     * @expectedExceptionMessage Invalid mnemonic, too long
108
     */
109
    public function testFailsOnMnemonicOfEntropyTooLong()
110
    {
111
        $bip39 = new Mnemonic(new Wordlist());
112
        $mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about end grace oxygen maze bright face loan ticket trial leg cruel lizard bread worry reject journey perfect chef section caught neither install industry';
113
        $bip39->mnemonicToEntropy($mnemonic);
114
    }
115
}
116