util/sasl/scram.lua
changeset 11178 ddc17e9c66e4
parent 10920 c7ed8f754033
child 12028 9184bdda22be
equal deleted inserted replaced
11177:cbe1edecb8fa 11178:ddc17e9c66e4
    17 local hashes = require "util.hashes";
    17 local hashes = require "util.hashes";
    18 local generate_uuid = require "util.uuid".generate;
    18 local generate_uuid = require "util.uuid".generate;
    19 local saslprep = require "util.encodings".stringprep.saslprep;
    19 local saslprep = require "util.encodings".stringprep.saslprep;
    20 local nodeprep = require "util.encodings".stringprep.nodeprep;
    20 local nodeprep = require "util.encodings".stringprep.nodeprep;
    21 local log = require "util.logger".init("sasl");
    21 local log = require "util.logger".init("sasl");
    22 local t_concat = table.concat;
    22 local	binaryXOR = require "util.strbitop".sxor;
    23 local char = string.char;
       
    24 local byte = string.byte;
       
    25 
    23 
    26 local _ENV = nil;
    24 local _ENV = nil;
    27 -- luacheck: std none
    25 -- luacheck: std none
    28 
    26 
    29 --=========================
    27 --=========================
    42 
    40 
    43 'tls-unique' according to RFC 5929
    41 'tls-unique' according to RFC 5929
    44 ]]
    42 ]]
    45 
    43 
    46 local default_i = 4096
    44 local default_i = 4096
    47 
       
    48 local xor_map = {
       
    49 	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,0,3,2,5,4,7,6,9,8,11,10,
       
    50 	13,12,15,14,2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13,3,2,1,0,7,6,5,
       
    51 	4,11,10,9,8,15,14,13,12,4,5,6,7,0,1,2,3,12,13,14,15,8,9,10,11,5,
       
    52 	4,7,6,1,0,3,2,13,12,15,14,9,8,11,10,6,7,4,5,2,3,0,1,14,15,12,13,
       
    53 	10,11,8,9,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,8,9,10,11,12,13,
       
    54 	14,15,0,1,2,3,4,5,6,7,9,8,11,10,13,12,15,14,1,0,3,2,5,4,7,6,10,
       
    55 	11,8,9,14,15,12,13,2,3,0,1,6,7,4,5,11,10,9,8,15,14,13,12,3,2,1,
       
    56 	0,7,6,5,4,12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3,13,12,15,14,9,8,
       
    57 	11,10,5,4,7,6,1,0,3,2,14,15,12,13,10,11,8,9,6,7,4,5,2,3,0,1,15,
       
    58 	14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,
       
    59 };
       
    60 
       
    61 local result = {};
       
    62 local function binaryXOR( a, b )
       
    63 	for i=1, #a do
       
    64 		local x, y = byte(a, i), byte(b, i);
       
    65 		local lowx, lowy = x % 16, y % 16;
       
    66 		local hix, hiy = (x - lowx) / 16, (y - lowy) / 16;
       
    67 		local lowr, hir = xor_map[lowx * 16 + lowy + 1], xor_map[hix * 16 + hiy + 1];
       
    68 		local r = hir * 16 + lowr;
       
    69 		result[i] = char(r)
       
    70 	end
       
    71 	return t_concat(result);
       
    72 end
       
    73 
    45 
    74 local function validate_username(username, _nodeprep)
    46 local function validate_username(username, _nodeprep)
    75 	-- check for forbidden char sequences
    47 	-- check for forbidden char sequences
    76 	for eq in username:gmatch("=(.?.?)") do
    48 	for eq in username:gmatch("=(.?.?)") do
    77 		if eq ~= "2C" and eq ~= "3D" then
    49 		if eq ~= "2C" and eq ~= "3D" then