1
- import base32 from "thirty-two " ;
1
+ import base32 from "base32.js " ;
2
2
import crc from "crc" ;
3
- import { isUndefined , isNull } from "lodash" ;
3
+ import { contains , isUndefined , isNull , isString } from "lodash" ;
4
4
5
5
const versionBytes = {
6
6
accountId : 0x30 ,
7
7
seed : 0x90
8
8
} ;
9
9
10
10
export function decodeCheck ( versionByteName , encoded ) {
11
+ if ( ! isString ( encoded ) ) {
12
+ throw new TypeError ( 'encoded argument must be of type String' ) ;
13
+ }
14
+
11
15
let decoded = base32 . decode ( encoded ) ;
12
16
let versionByte = decoded [ 0 ] ;
13
17
let payload = decoded . slice ( 0 , - 2 ) ;
14
18
let data = payload . slice ( 1 ) ;
15
19
let checksum = decoded . slice ( - 2 ) ;
16
20
21
+ if ( encoded != base32 . encode ( decoded ) ) {
22
+ throw new Error ( 'invalid encoded string' ) ;
23
+ }
24
+
17
25
let expectedVersion = versionBytes [ versionByteName ] ;
18
26
19
27
if ( isUndefined ( expectedVersion ) ) {
@@ -24,16 +32,16 @@ export function decodeCheck(versionByteName, encoded) {
24
32
throw new Error ( `invalid version byte. expected ${ expectedVersion } , got ${ versionByte } ` ) ;
25
33
}
26
34
35
+ if ( decoded . length !== 35 ) {
36
+ throw new Error ( `Decoded length is invalid. Expected 35, got ${ decoded . length } ` ) ;
37
+ }
38
+
27
39
let expectedChecksum = calculateChecksum ( payload ) ;
28
40
29
41
if ( ! verifyChecksum ( expectedChecksum , checksum ) ) {
30
42
throw new Error ( `invalid checksum` ) ;
31
43
}
32
44
33
- if ( versionByteName === 'accountId' && decoded . length !== 35 ) {
34
- throw new Error ( `Decoded address length is invalid. Expected 35, got ${ decoded . length } ` ) ;
35
- }
36
-
37
45
return new Buffer ( data ) ;
38
46
}
39
47
@@ -54,7 +62,7 @@ export function encodeCheck(versionByteName, data) {
54
62
let checksum = calculateChecksum ( payload ) ;
55
63
let unencoded = Buffer . concat ( [ payload , checksum ] ) ;
56
64
57
- return base32 . encode ( unencoded ) . toString ( ) ;
65
+ return base32 . encode ( unencoded ) ;
58
66
}
59
67
60
68
function calculateChecksum ( payload ) {
0 commit comments