mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
* first action! (#1)
This commit is contained in:
parent
8deacc95b1
commit
ace1e6a69a
3750 changed files with 1155519 additions and 0 deletions
97
node_modules/tar/lib/large-numbers.js
generated
vendored
Normal file
97
node_modules/tar/lib/large-numbers.js
generated
vendored
Normal file
|
@ -0,0 +1,97 @@
|
|||
'use strict'
|
||||
// Tar can encode large and negative numbers using a leading byte of
|
||||
// 0xff for negative, and 0x80 for positive.
|
||||
|
||||
const encode = exports.encode = (num, buf) => {
|
||||
if (!Number.isSafeInteger(num))
|
||||
// The number is so large that javascript cannot represent it with integer
|
||||
// precision.
|
||||
throw TypeError('cannot encode number outside of javascript safe integer range')
|
||||
else if (num < 0)
|
||||
encodeNegative(num, buf)
|
||||
else
|
||||
encodePositive(num, buf)
|
||||
return buf
|
||||
}
|
||||
|
||||
const encodePositive = (num, buf) => {
|
||||
buf[0] = 0x80
|
||||
|
||||
for (var i = buf.length; i > 1; i--) {
|
||||
buf[i-1] = num & 0xff
|
||||
num = Math.floor(num / 0x100)
|
||||
}
|
||||
}
|
||||
|
||||
const encodeNegative = (num, buf) => {
|
||||
buf[0] = 0xff
|
||||
var flipped = false
|
||||
num = num * -1
|
||||
for (var i = buf.length; i > 1; i--) {
|
||||
var byte = num & 0xff
|
||||
num = Math.floor(num / 0x100)
|
||||
if (flipped)
|
||||
buf[i-1] = onesComp(byte)
|
||||
else if (byte === 0)
|
||||
buf[i-1] = 0
|
||||
else {
|
||||
flipped = true
|
||||
buf[i-1] = twosComp(byte)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const parse = exports.parse = (buf) => {
|
||||
var post = buf[buf.length - 1]
|
||||
var pre = buf[0]
|
||||
var value;
|
||||
if (pre === 0x80)
|
||||
value = pos(buf.slice(1, buf.length))
|
||||
else if (pre === 0xff)
|
||||
value = twos(buf)
|
||||
else
|
||||
throw TypeError('invalid base256 encoding')
|
||||
|
||||
if (!Number.isSafeInteger(value))
|
||||
// The number is so large that javascript cannot represent it with integer
|
||||
// precision.
|
||||
throw TypeError('parsed number outside of javascript safe integer range')
|
||||
|
||||
return value
|
||||
}
|
||||
|
||||
const twos = (buf) => {
|
||||
var len = buf.length
|
||||
var sum = 0
|
||||
var flipped = false
|
||||
for (var i = len - 1; i > -1; i--) {
|
||||
var byte = buf[i]
|
||||
var f
|
||||
if (flipped)
|
||||
f = onesComp(byte)
|
||||
else if (byte === 0)
|
||||
f = byte
|
||||
else {
|
||||
flipped = true
|
||||
f = twosComp(byte)
|
||||
}
|
||||
if (f !== 0)
|
||||
sum -= f * Math.pow(256, len - i - 1)
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
const pos = (buf) => {
|
||||
var len = buf.length
|
||||
var sum = 0
|
||||
for (var i = len - 1; i > -1; i--) {
|
||||
var byte = buf[i]
|
||||
if (byte !== 0)
|
||||
sum += byte * Math.pow(256, len - i - 1)
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
const onesComp = byte => (0xff ^ byte) & 0xff
|
||||
|
||||
const twosComp = byte => ((0xff ^ byte) + 1) & 0xff
|
Loading…
Add table
Add a link
Reference in a new issue