Completed
Push — master ( abcf31...a8a46d )
by thomas
28:08 queued 25:46
created

RawExtendedKeySerializer   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 84
ccs 26
cts 26
cp 1
rs 10
c 0
b 0
f 0
wmc 4
lcom 1
cbo 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A serialize() 0 11 1
A fromParser() 0 15 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Serializer\Key\HierarchicalKey;
6
7
use BitWasp\Bitcoin\Crypto\EcAdapter\Adapter\EcAdapterInterface;
8
use BitWasp\Bitcoin\Serializer\Types;
9
use BitWasp\Buffertools\Buffer;
10
use BitWasp\Buffertools\BufferInterface;
11
use BitWasp\Buffertools\Exceptions\ParserOutOfRange;
12
use BitWasp\Buffertools\Parser;
13
14
class RawExtendedKeySerializer
15
{
16
    /**
17
     * @var EcAdapterInterface
18
     */
19
    private $ecAdapter;
20
21
    /**
22
     * @var \BitWasp\Buffertools\Types\ByteString
23
     */
24
    private $bytestring4;
25
26
    /**
27
     * @var \BitWasp\Buffertools\Types\Uint8
28
     */
29
    private $uint8;
30
31
    /**
32
     * @var \BitWasp\Buffertools\Types\Uint32
33
     */
34
    private $uint32;
35
36
    /**
37
     * @var \BitWasp\Buffertools\Types\ByteString
38
     */
39
    private $bytestring32;
40
41
    /**
42
     * @var \BitWasp\Buffertools\Types\ByteString
43
     */
44
    private $bytestring33;
45
46
    /**
47
     * RawExtendedKeySerializer constructor.
48
     * @param EcAdapterInterface $ecAdapter
49
     */
50 56
    public function __construct(EcAdapterInterface $ecAdapter)
51
    {
52 56
        $this->ecAdapter = $ecAdapter;
53 56
        $this->bytestring4 = Types::bytestring(4);
54 56
        $this->uint8 = Types::uint8();
55 56
        $this->uint32 = Types::uint32();
56 56
        $this->bytestring32 = Types::bytestring(32);
57 56
        $this->bytestring33 = Types::bytestring(33);
58 56
    }
59
60
    /**
61
     * @param RawKeyParams $keyParams
62
     * @return BufferInterface
63
     * @throws \Exception
64
     */
65 24
    public function serialize(RawKeyParams $keyParams): BufferInterface
66
    {
67 24
        return new Buffer(
68 24
            pack("H*", $keyParams->getPrefix()) .
69 24
            $this->uint8->write($keyParams->getDepth()) .
70 24
            $this->uint32->write($keyParams->getParentFingerprint()) .
71 24
            $this->uint32->write($keyParams->getSequence()) .
72 24
            $this->bytestring32->write($keyParams->getChainCode()) .
0 ignored issues
show
Compatibility introduced by
$keyParams->getChainCode() of type object<BitWasp\Buffertools\BufferInterface> is not a sub-type of object<BitWasp\Buffertools\Buffer>. It seems like you assume a concrete implementation of the interface BitWasp\Buffertools\BufferInterface to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
73 24
            $this->bytestring33->write($keyParams->getKeyData())
0 ignored issues
show
Compatibility introduced by
$keyParams->getKeyData() of type object<BitWasp\Buffertools\BufferInterface> is not a sub-type of object<BitWasp\Buffertools\Buffer>. It seems like you assume a concrete implementation of the interface BitWasp\Buffertools\BufferInterface to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
74
        );
75
    }
76
77
    /**
78
     * @param Parser $parser
79
     * @return RawKeyParams
80
     * @throws ParserOutOfRange
81
     */
82 36
    public function fromParser(Parser $parser): RawKeyParams
83
    {
84
        try {
85 36
            return new RawKeyParams(
86 36
                $this->bytestring4->read($parser)->getHex(),
87 34
                (int) $this->uint8->read($parser),
88 34
                (int) $this->uint32->read($parser),
89 34
                (int) $this->uint32->read($parser),
90 34
                $this->bytestring32->read($parser),
91 33
                $this->bytestring33->read($parser)
92
            );
93 3
        } catch (ParserOutOfRange $e) {
94 3
            throw new ParserOutOfRange('Failed to extract HierarchicalKey from parser');
95
        }
96
    }
97
}
98