Files
bare-operating-system/packages/bare-os-coreutils/lib/irc-sasl.js
T
Raven Scott 1187e30cf6
Release rolling / release (push) Successful in 9m31s
Add irc
2026-08-12 23:50:49 -04:00

50 lines
1.4 KiB
JavaScript

/** SASL PLAIN (IRCv3). No import. */
function bareIrcB64Encode(bytes) {
var table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
var s = ''
var i = 0
while (i < bytes.length) {
var a = bytes[i++]
var b = i < bytes.length ? bytes[i++] : NaN
var c = i < bytes.length ? bytes[i++] : NaN
var triple =
((a & 255) << 16) |
((Number.isFinite(b) ? b & 255 : 0) << 8) |
(Number.isFinite(c) ? c & 255 : 0)
s += table.charAt((triple >> 18) & 63)
s += table.charAt((triple >> 12) & 63)
s += Number.isFinite(b) ? table.charAt((triple >> 6) & 63) : '='
s += Number.isFinite(c) ? table.charAt(triple & 63) : '='
}
return s
}
function bareIrcUtf8Bytes(str) {
var s = String(str == null ? '' : str)
if (typeof TextEncoder !== 'undefined')
return Array.from(new TextEncoder().encode(s))
var out = []
for (var i = 0; i < s.length; i++) out.push(s.charCodeAt(i) & 255)
return out
}
/**
* AUTHENTICATE PLAIN payload (account \0 account \0 password), chunked ≤400.
* @returns {string[]}
*/
function bareIrcSaslPlainChunks(user, pass) {
var u = String(user || '')
var p = String(pass || '')
var raw = bareIrcUtf8Bytes('\0' + u + '\0' + p)
var b64 = bareIrcB64Encode(raw)
var chunks = []
var i = 0
if (!b64) return ['+']
while (i < b64.length) {
chunks.push(b64.slice(i, i + 400))
i += 400
}
return chunks
}