ssh-pub-key-validation
Version:
Function for validate openssh public key
66 lines (63 loc) • 2.02 kB
JavaScript
// Generated by CoffeeScript 1.6.3
var atob, isKeyValid;
isKeyValid = function(rawKey) {
var checkIntregers, error, getBytesAndSplit, humanType, keyBase64, keyBody, keyBytes, keyTokens, typeSizeParse, _textTail, _type;
getBytesAndSplit = function(bytes) {
var bytesAndTail, integerBytes, size, sizeBytes, sizeLen, tail;
sizeLen = 4;
if (bytes.length < sizeLen + 1) {
return false;
}
sizeBytes = bytes.slice(0, sizeLen);
bytesAndTail = bytes.slice(sizeLen);
size = ((sizeBytes.charCodeAt(0) << (8 * 3)) + (sizeBytes.charCodeAt(1) << (8 * 2))) + (sizeBytes.charCodeAt(2) << (8 * 1)) + (sizeBytes.charCodeAt(3) << (8 * 0));
if (bytesAndTail.length < size) {
return false;
}
integerBytes = bytesAndTail.slice(0, size);
tail = bytesAndTail.slice(size);
return [integerBytes, tail];
};
checkIntregers = function(num, bytes) {
var result, _i, _int, _intNum;
for (_intNum = _i = 0; 0 <= num ? _i < num : _i > num; _intNum = 0 <= num ? ++_i : --_i) {
result = getBytesAndSplit(bytes);
if (result === false) {
return false;
}
_int = result[0], bytes = result[1];
}
return bytes.length === 0;
};
keyTokens = rawKey.trim().split(" ");
if (keyTokens.length < 2) {
return false;
}
humanType = keyTokens[0], keyBase64 = keyTokens[1], _textTail = keyTokens[2];
if (humanType !== "ssh-rsa" && humanType !== "ssh-dss") {
return false;
}
try {
keyBytes = atob(keyBase64);
} catch (_error) {
error = _error;
return false;
}
typeSizeParse = getBytesAndSplit(keyBytes);
if (!typeSizeParse) {
return false;
}
_type = typeSizeParse[0], keyBody = typeSizeParse[1];
switch (humanType) {
case "ssh-rsa":
return checkIntregers(2, keyBody);
case "ssh-dss":
return checkIntregers(4, keyBody);
default:
return false;
}
};
if (typeof module !== "undefined" && module.exports) {
atob = require("atob");
module.exports.isKeyValid = isKeyValid;
}