bech32: sanity checks.

This commit is contained in:
Christopher Jeffrey 2017-05-13 16:23:32 -07:00
parent c1dbac3a4a
commit d64bffdd17
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -260,7 +260,16 @@ function convert(data, output, frombits, tobits, pad, off) {
function encode(hrp, version, hash) { function encode(hrp, version, hash) {
var output = POOL65; var output = POOL65;
var data = convert(hash, output, 8, 5, version, 0); var data;
if (version < 0 || version > 16)
throw new Error('Invalid bech32 version.');
if (hash.length < 2 || hash.length > 40)
throw new Error('Invalid bech32 data length.');
data = convert(hash, output, 8, 5, version, 0);
return serialize(hrp, data); return serialize(hrp, data);
} }
@ -279,13 +288,19 @@ function decode(str) {
var data = result.data; var data = result.data;
var version, hash, output; var version, hash, output;
if (data.length < 1) if (data.length === 0 || data.length > 65)
throw new Error('Invalid bech32 data length.'); throw new Error('Invalid bech32 data length.');
if (data[0] > 16)
throw new Error('Invalid bech32 version.');
version = data[0]; version = data[0];
output = data; output = data;
hash = convert(data, output, 5, 8, -1, 1); hash = convert(data, output, 5, 8, -1, 1);
if (hash.length < 2 || hash.length > 40)
throw new Error('Invalid bech32 data length.');
return new AddrResult(hrp, version, hash); return new AddrResult(hrp, version, hash);
} }