Socket
Socket
Sign inDemoInstall

@ethersproject/rlp

Package Overview
Dependencies
Maintainers
1
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ethersproject/rlp - npm Package Compare versions

Comparing version 5.6.0 to 6.0.0-beta.1

lib/decode.d.ts

2

lib/_version.d.ts

@@ -1,2 +0,2 @@

export declare const version = "rlp/5.6.0";
export declare const version = "@ethersproject/rlp@6.0.0-beta.1";
//# sourceMappingURL=_version.d.ts.map

@@ -1,5 +0,2 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = void 0;
exports.version = "rlp/5.6.0";
export const version = "@ethersproject/rlp@6.0.0-beta.1";
//# sourceMappingURL=_version.js.map

@@ -1,4 +0,4 @@

import { BytesLike } from "@ethersproject/bytes";
export declare function encode(object: any): string;
export declare function decode(data: BytesLike): any;
export { encodeRlp } from "./encode.js";
export { decodeRlp } from "./decode.js";
export type { RlpStructuredData } from "./types.js";
//# sourceMappingURL=index.d.ts.map

@@ -1,124 +0,3 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.decode = exports.encode = void 0;
//See: https://github.com/ethereum/wiki/wiki/RLP
var bytes_1 = require("@ethersproject/bytes");
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
function arrayifyInteger(value) {
var result = [];
while (value) {
result.unshift(value & 0xff);
value >>= 8;
}
return result;
}
function unarrayifyInteger(data, offset, length) {
var result = 0;
for (var i = 0; i < length; i++) {
result = (result * 256) + data[offset + i];
}
return result;
}
function _encode(object) {
if (Array.isArray(object)) {
var payload_1 = [];
object.forEach(function (child) {
payload_1 = payload_1.concat(_encode(child));
});
if (payload_1.length <= 55) {
payload_1.unshift(0xc0 + payload_1.length);
return payload_1;
}
var length_1 = arrayifyInteger(payload_1.length);
length_1.unshift(0xf7 + length_1.length);
return length_1.concat(payload_1);
}
if (!(0, bytes_1.isBytesLike)(object)) {
logger.throwArgumentError("RLP object must be BytesLike", "object", object);
}
var data = Array.prototype.slice.call((0, bytes_1.arrayify)(object));
if (data.length === 1 && data[0] <= 0x7f) {
return data;
}
else if (data.length <= 55) {
data.unshift(0x80 + data.length);
return data;
}
var length = arrayifyInteger(data.length);
length.unshift(0xb7 + length.length);
return length.concat(data);
}
function encode(object) {
return (0, bytes_1.hexlify)(_encode(object));
}
exports.encode = encode;
function _decodeChildren(data, offset, childOffset, length) {
var result = [];
while (childOffset < offset + 1 + length) {
var decoded = _decode(data, childOffset);
result.push(decoded.result);
childOffset += decoded.consumed;
if (childOffset > offset + 1 + length) {
logger.throwError("child data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
}
return { consumed: (1 + length), result: result };
}
// returns { consumed: number, result: Object }
function _decode(data, offset) {
if (data.length === 0) {
logger.throwError("data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
// Array with extra length prefix
if (data[offset] >= 0xf8) {
var lengthLength = data[offset] - 0xf7;
if (offset + 1 + lengthLength > data.length) {
logger.throwError("data short segment too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
var length_2 = unarrayifyInteger(data, offset + 1, lengthLength);
if (offset + 1 + lengthLength + length_2 > data.length) {
logger.throwError("data long segment too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length_2);
}
else if (data[offset] >= 0xc0) {
var length_3 = data[offset] - 0xc0;
if (offset + 1 + length_3 > data.length) {
logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
return _decodeChildren(data, offset, offset + 1, length_3);
}
else if (data[offset] >= 0xb8) {
var lengthLength = data[offset] - 0xb7;
if (offset + 1 + lengthLength > data.length) {
logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
var length_4 = unarrayifyInteger(data, offset + 1, lengthLength);
if (offset + 1 + lengthLength + length_4 > data.length) {
logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
var result = (0, bytes_1.hexlify)(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length_4));
return { consumed: (1 + lengthLength + length_4), result: result };
}
else if (data[offset] >= 0x80) {
var length_5 = data[offset] - 0x80;
if (offset + 1 + length_5 > data.length) {
logger.throwError("data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {});
}
var result = (0, bytes_1.hexlify)(data.slice(offset + 1, offset + 1 + length_5));
return { consumed: (1 + length_5), result: result };
}
return { consumed: 1, result: (0, bytes_1.hexlify)(data[offset]) };
}
function decode(data) {
var bytes = (0, bytes_1.arrayify)(data);
var decoded = _decode(bytes, 0);
if (decoded.consumed !== bytes.length) {
logger.throwArgumentError("invalid rlp data", "data", data);
}
return decoded.result;
}
exports.decode = decode;
export { encodeRlp } from "./encode.js";
export { decodeRlp } from "./decode.js";
//# sourceMappingURL=index.js.map
MIT License
Copyright (c) 2019 Richard Moore
Copyright (c) 2022 Richard Moore

@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy

{
"author": "Richard Moore <me@ricmoo.com>",
"dependencies": {
"@ethersproject/bytes": "^5.6.0",
"@ethersproject/logger": "^5.6.0"
"@ethersproject/bytes": "^6.0.0-beta.1",
"@ethersproject/logger": "^6.0.0-beta.1"
},
"description": "Recursive-Length Prefix (RLP) coder.",
"engines": {
"node": ">=12.17.0"
},
"ethereum": "donations.ethers.eth",
"funding": [
{
"type": "individual",
"url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
},
{
"type": "individual",
"url": "https://www.buymeacoffee.com/ricmoo"
}
],
"gitHead": "b8cda5dffdcb688e38d7c6a0aec4c7b8b59c1af5",
"gitHead": "77f691b3bc3a6387a5184ec9b1779faab4bcb30d",
"keywords": [

@@ -27,6 +20,6 @@ "Ethereum",

"main": "./lib/index.js",
"module": "./lib.esm/index.js",
"name": "@ethersproject/rlp",
"publishConfig": {
"access": "public"
"access": "public",
"tag": "beta"
},

@@ -42,5 +35,6 @@ "repository": {

"sideEffects": false,
"tarballHash": "0xfb6b03ac40a056e6874c7208726479000ccb916e34c4377103567b66a24c7f36",
"tarballHash": "0x36ddb7b810f7a32e7fa6fc6fb4e0d0a9ced175d7d2e447e592ed630ec3f35722",
"type": "module",
"types": "./lib/index.d.ts",
"version": "5.6.0"
"version": "6.0.0-beta.1"
}

@@ -1,1 +0,1 @@

export const version = "rlp/5.6.0";
export const version = "@ethersproject/rlp@6.0.0-beta.1";

@@ -1,155 +0,4 @@

"use strict";
export { encodeRlp } from "./encode.js";
export { decodeRlp } from "./decode.js";
//See: https://github.com/ethereum/wiki/wiki/RLP
import { arrayify, BytesLike, hexlify, isBytesLike } from "@ethersproject/bytes";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
function arrayifyInteger(value: number): Array<number> {
const result = [];
while (value) {
result.unshift(value & 0xff);
value >>= 8;
}
return result;
}
function unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {
let result = 0;
for (let i = 0; i < length; i++) {
result = (result * 256) + data[offset + i];
}
return result;
}
function _encode(object: Array<any> | string): Array<number> {
if (Array.isArray(object)) {
let payload: Array<number> = [];
object.forEach(function(child) {
payload = payload.concat(_encode(child));
});
if (payload.length <= 55) {
payload.unshift(0xc0 + payload.length)
return payload;
}
const length = arrayifyInteger(payload.length);
length.unshift(0xf7 + length.length);
return length.concat(payload);
}
if (!isBytesLike(object)) {
logger.throwArgumentError("RLP object must be BytesLike", "object", object);
}
const data: Array<number> = Array.prototype.slice.call(arrayify(object));
if (data.length === 1 && data[0] <= 0x7f) {
return data;
} else if (data.length <= 55) {
data.unshift(0x80 + data.length);
return data;
}
const length = arrayifyInteger(data.length);
length.unshift(0xb7 + length.length);
return length.concat(data);
}
export function encode(object: any): string {
return hexlify(_encode(object));
}
type Decoded = {
result: any;
consumed: number;
};
function _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {
const result = [];
while (childOffset < offset + 1 + length) {
const decoded = _decode(data, childOffset);
result.push(decoded.result);
childOffset += decoded.consumed;
if (childOffset > offset + 1 + length) {
logger.throwError("child data too short", Logger.errors.BUFFER_OVERRUN, { });
}
}
return {consumed: (1 + length), result: result};
}
// returns { consumed: number, result: Object }
function _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {
if (data.length === 0) {
logger.throwError("data too short", Logger.errors.BUFFER_OVERRUN, { });
}
// Array with extra length prefix
if (data[offset] >= 0xf8) {
const lengthLength = data[offset] - 0xf7;
if (offset + 1 + lengthLength > data.length) {
logger.throwError("data short segment too short", Logger.errors.BUFFER_OVERRUN, { });
}
const length = unarrayifyInteger(data, offset + 1, lengthLength);
if (offset + 1 + lengthLength + length > data.length) {
logger.throwError("data long segment too short", Logger.errors.BUFFER_OVERRUN, { });
}
return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);
} else if (data[offset] >= 0xc0) {
const length = data[offset] - 0xc0;
if (offset + 1 + length > data.length) {
logger.throwError("data array too short", Logger.errors.BUFFER_OVERRUN, { });
}
return _decodeChildren(data, offset, offset + 1, length);
} else if (data[offset] >= 0xb8) {
const lengthLength = data[offset] - 0xb7;
if (offset + 1 + lengthLength > data.length) {
logger.throwError("data array too short", Logger.errors.BUFFER_OVERRUN, { });
}
const length = unarrayifyInteger(data, offset + 1, lengthLength);
if (offset + 1 + lengthLength + length > data.length) {
logger.throwError("data array too short", Logger.errors.BUFFER_OVERRUN, { });
}
const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));
return { consumed: (1 + lengthLength + length), result: result }
} else if (data[offset] >= 0x80) {
const length = data[offset] - 0x80;
if (offset + 1 + length > data.length) {
logger.throwError("data too short", Logger.errors.BUFFER_OVERRUN, { });
}
const result = hexlify(data.slice(offset + 1, offset + 1 + length));
return { consumed: (1 + length), result: result }
}
return { consumed: 1, result: hexlify(data[offset]) };
}
export function decode(data: BytesLike): any {
const bytes = arrayify(data);
const decoded = _decode(bytes, 0);
if (decoded.consumed !== bytes.length) {
logger.throwArgumentError("invalid rlp data", "data", data);
}
return decoded.result;
}
export type { RlpStructuredData } from "./types.js";

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc