UNPKG

ssh-pub-key-validation

Version:

Function for validate openssh public key

66 lines (63 loc) 2.02 kB
// 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; }