]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/lib/formats/auto.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / lib / formats / auto.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/lib/formats/auto.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/request/node_modules/http-signature/node_modules/sshpk/lib/formats/auto.js
new file mode 100644 (file)
index 0000000..973c032
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2015 Joyent, Inc.
+
+module.exports = {
+       read: read,
+       write: write
+};
+
+var assert = require('assert-plus');
+var utils = require('../utils');
+var Key = require('../key');
+var PrivateKey = require('../private-key');
+
+var pem = require('./pem');
+var ssh = require('./ssh');
+var rfc4253 = require('./rfc4253');
+
+function read(buf, options) {
+       if (typeof (buf) === 'string') {
+               if (buf.trim().match(/^[-]+[ ]*BEGIN/))
+                       return (pem.read(buf, options));
+               if (buf.match(/^\s*ssh-[a-z]/))
+                       return (ssh.read(buf, options));
+               if (buf.match(/^\s*ecdsa-/))
+                       return (ssh.read(buf, options));
+               buf = new Buffer(buf, 'binary');
+       } else {
+               assert.buffer(buf);
+               if (findPEMHeader(buf))
+                       return (pem.read(buf, options));
+               if (findSSHHeader(buf))
+                       return (ssh.read(buf, options));
+       }
+       if (buf.readUInt32BE(0) < buf.length)
+               return (rfc4253.read(buf, options));
+       throw (new Error('Failed to auto-detect format of key'));
+}
+
+function findSSHHeader(buf) {
+       var offset = 0;
+       while (offset < buf.length &&
+           (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))
+               ++offset;
+       if (offset + 4 <= buf.length &&
+           buf.slice(offset, offset + 4).toString('ascii') === 'ssh-')
+               return (true);
+       if (offset + 6 <= buf.length &&
+           buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-')
+               return (true);
+       return (false);
+}
+
+function findPEMHeader(buf) {
+       var offset = 0;
+       while (offset < buf.length &&
+           (buf[offset] === 32 || buf[offset] === 10))
+               ++offset;
+       if (buf[offset] !== 45)
+               return (false);
+       while (offset < buf.length &&
+           (buf[offset] === 45))
+               ++offset;
+       while (offset < buf.length &&
+           (buf[offset] === 32))
+               ++offset;
+       if (offset + 5 > buf.length ||
+           buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN')
+               return (false);
+       return (true);
+}
+
+function write(key, options) {
+       throw (new Error('"auto" format cannot be used for writing'));
+}