ldap-passwords
Version:
ldap-passwords offers secure password hashing and verification using LDAP password algorithms.
1 lines • 7.85 kB
JavaScript
import{Buffer as e}from"node:buffer";import{createHash as t,randomBytes as n}from"node:crypto";function r(n){let r=t(`md5`);r.update(n,`utf8`);let i=r.digest(`hex`),a=e.from(i,`hex`),o=a.toString(`base64`);return`{MD5}${o}`}function i(e){return r(e)}function a(e,t){let n=!1,r=typeof t==`string`?[t]:t;for(let t of r){let r=t.match(/\{([^}]+)\}/);if(r&&r[1]===`MD5`){let r=i(e);r===t&&(n=!0)}}return n}var o=class{h;l;constructor(e,t){this.h=e,this.l=t}};function s(e,t){e.h=t.h,e.l=t.l}function c(e,t,n){e.l=t.l>>>n|t.h<<32-n,e.h=t.h>>>n|t.l<<32-n}function l(e,t,n){e.l=t.h>>>n|t.l<<32-n,e.h=t.l>>>n|t.h<<32-n}function u(e,t,n){e.l=t.l>>>n|t.h<<32-n,e.h=t.h>>>n}function d(e,t,n){let r=(t.l&65535)+(n.l&65535),i=(t.l>>>16)+(n.l>>>16)+(r>>>16),a=(t.h&65535)+(n.h&65535)+(i>>>16),o=(t.h>>>16)+(n.h>>>16)+(a>>>16);e.l=r&65535|i<<16,e.h=a&65535|o<<16}function f(e,t,n,r,i){let a=(t.l&65535)+(n.l&65535)+(r.l&65535)+(i.l&65535),o=(t.l>>>16)+(n.l>>>16)+(r.l>>>16)+(i.l>>>16)+(a>>>16),s=(t.h&65535)+(n.h&65535)+(r.h&65535)+(i.h&65535)+(o>>>16),c=(t.h>>>16)+(n.h>>>16)+(r.h>>>16)+(i.h>>>16)+(s>>>16);e.l=a&65535|o<<16,e.h=s&65535|c<<16}function p(e,t,n,r,i,a){let o=(t.l&65535)+(n.l&65535)+(r.l&65535)+(i.l&65535)+(a.l&65535),s=(t.l>>>16)+(n.l>>>16)+(r.l>>>16)+(i.l>>>16)+(a.l>>>16)+(o>>>16),c=(t.h&65535)+(n.h&65535)+(r.h&65535)+(i.h&65535)+(a.h&65535)+(s>>>16),l=(t.h>>>16)+(n.h>>>16)+(r.h>>>16)+(i.h>>>16)+(a.h>>>16)+(c>>>16);e.l=o&65535|s<<16,e.h=c&65535|l<<16}function m(e,t){let n=``;for(let r=0;r<Math.floor(t/64);r++)n+=e;return n+=e.slice(0,Math.max(0,t%64)),n}function h(e){return _(v(g(e),e.length*8))}function g(e){let t=Array(e.length>>2);for(let e=0;e<t.length;e++)t[e]=0;for(let n=0;n<e.length*8;n+=8)t[n>>5]|=(e.codePointAt(n/8)&255)<<24-n%32;return t}function _(e){let t=``;for(let n=0;n<e.length*32;n+=8)t+=String.fromCodePoint(e[n>>5]>>>24-n%32&255);return t}function v(e,t){let n=[new o(1116352408,-685199838),new o(1899447441,602891725),new o(-1245643825,-330482897),new o(-373957723,-2121671748),new o(961987163,-213338824),new o(1508970993,-1241133031),new o(-1841331548,-1357295717),new o(-1424204075,-630357736),new o(-670586216,-1560083902),new o(310598401,1164996542),new o(607225278,1323610764),new o(1426881987,-704662302),new o(1925078388,-226784913),new o(-2132889090,991336113),new o(-1680079193,633803317),new o(-1046744716,-815192428),new o(-459576895,-1628353838),new o(-272742522,944711139),new o(264347078,-1953704523),new o(604807628,2007800933),new o(770255983,1495990901),new o(1249150122,1856431235),new o(1555081692,-1119749164),new o(1996064986,-2096016459),new o(-1740746414,-295247957),new o(-1473132947,766784016),new o(-1341970488,-1728372417),new o(-1084653625,-1091629340),new o(-958395405,1034457026),new o(-710438585,-1828018395),new o(113926993,-536640913),new o(338241895,168717936),new o(666307205,1188179964),new o(773529912,1546045734),new o(1294757372,1522805485),new o(1396182291,-1651133473),new o(1695183700,-1951439906),new o(1986661051,1014477480),new o(-2117940946,1206759142),new o(-1838011259,344077627),new o(-1564481375,1290863460),new o(-1474664885,-1136513023),new o(-1035236496,-789014639),new o(-949202525,106217008),new o(-778901479,-688958952),new o(-694614492,1432725776),new o(-200395387,1467031594),new o(275423344,851169720),new o(430227734,-1194143544),new o(506948616,1363258195),new o(659060556,-544281703),new o(883997877,-509917016),new o(958139571,-976659869),new o(1322822218,-482243893),new o(1537002063,2003034995),new o(1747873779,-692930397),new o(1955562222,1575990012),new o(2024104815,1125592928),new o(-2067236844,-1578062990),new o(-1933114872,442776044),new o(-1866530822,593698344),new o(-1538233109,-561857047),new o(-1090935817,-1295615723),new o(-965641998,-479046869),new o(-903397682,-366583396),new o(-779700025,566280711),new o(-354779690,-840897762),new o(-176337025,-294727304),new o(116418474,1914138554),new o(174292421,-1563912026),new o(289380356,-1090974290),new o(460393269,320620315),new o(685471733,587496836),new o(852142971,1086792851),new o(1017036298,365543100),new o(1126000580,-1676669620),new o(1288033470,-885112138),new o(1501505948,-60457430),new o(1607167915,987167468),new o(1816402316,1246189591)],r=[new o(1779033703,-205731576),new o(-1150833019,-2067093701),new o(1013904242,-23791573),new o(-1521486534,1595750129),new o(1359893119,-1377402159),new o(-1694144372,725511199),new o(528734635,-79577749),new o(1541459225,327033209)],i=new o(0,0),a=new o(0,0),m=new o(0,0),h=new o(0,0),g=new o(0,0),_=new o(0,0),v=new o(0,0),y=new o(0,0),b=new o(0,0),x=new o(0,0),S=new o(0,0),C=new o(0,0),w=new o(0,0),T=new o(0,0),E=new o(0,0),D=new o(0,0),O=new o(0,0),k,A,j=Array.from({length:80});for(A=0;A<80;A++)j[A]=new o(0,0);for(e[t>>5]|=128<<24-(t&31),e[(t+128>>10<<5)+31]=t,A=0;A<e.length;A+=32){for(s(m,r[0]),s(h,r[1]),s(g,r[2]),s(_,r[3]),s(v,r[4]),s(y,r[5]),s(b,r[6]),s(x,r[7]),k=0;k<16;k++)j[k].h=e[A+2*k],j[k].l=e[A+2*k+1];for(k=16;k<80;k++)c(E,j[k-2],19),l(D,j[k-2],29),u(O,j[k-2],6),C.l=E.l^D.l^O.l,C.h=E.h^D.h^O.h,c(E,j[k-15],1),c(D,j[k-15],8),u(O,j[k-15],7),S.l=E.l^D.l^O.l,S.h=E.h^D.h^O.h,f(j[k],C,j[k-7],S,j[k-16]);for(k=0;k<80;k++)w.l=v.l&y.l^~v.l&b.l,w.h=v.h&y.h^~v.h&b.h,c(E,v,14),c(D,v,18),l(O,v,9),C.l=E.l^D.l^O.l,C.h=E.h^D.h^O.h,c(E,m,28),l(D,m,2),l(O,m,7),S.l=E.l^D.l^O.l,S.h=E.h^D.h^O.h,T.l=m.l&h.l^m.l&g.l^h.l&g.l,T.h=m.h&h.h^m.h&g.h^h.h&g.h,p(i,x,C,w,n[k],j[k]),d(a,S,T),s(x,b),s(b,y),s(y,v),d(v,_,i),s(_,g),s(g,h),s(h,m),d(m,i,a);d(r[0],r[0],m),d(r[1],r[1],h),d(r[2],r[2],g),d(r[3],r[3],_),d(r[4],r[4],v),d(r[5],r[5],y),d(r[6],r[6],b),d(r[7],r[7],x)}let M=Array.from({length:16});for(A=0;A<8;A++)M[2*A]=r[A].h,M[2*A+1]=r[A].l;return M}function y(e,t){let n=h(e+t+e),r=m(n,e.length),i=e+t+r;for(let t=e.length;t>0;t>>=1)t&1?i+=n:i+=e;let a=h(i);return a}function b(e,t,n){let r=y(e,t),i=``;for(let t=0;t<e.length;t++)i+=e;let a=h(i),o=m(a,e.length),s=``;for(let e=0;e<16+r.codePointAt(0);e++)s+=t;let c=h(s),l=m(c,t.length),u=r,d=``;for(let e=0;e<n;e++)d=``,e&1?d+=o:d+=u,e%3&&(d+=l),e%7&&(d+=o),e&1?d+=u:d+=o,u=h(d);return u}function x(e,t){let n=b(e,t,5e3),r=n,i=``,a=`./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,o=[42,21,0,1,43,22,23,2,44,45,24,3,4,46,25,26,5,47,48,27,6,7,49,28,29,8,50,51,30,9,10,52,31,32,11,53,54,33,12,13,55,34,35,14,56,57,36,15,16,58,37,38,17,59,60,39,18,19,61,40,41,20,62,63];for(let e=0;e<r.length;e+=3)if(o[e+1]===void 0){let t=r.codePointAt(o[e+0])&Number.parseInt(`00111111`,2),n=(r.codePointAt(o[e+0])&Number.parseInt(`11000000`,2))>>>6;i+=a.charAt(t)+a.charAt(n)}else{let t=r.codePointAt(o[e+0])&Number.parseInt(`00111111`,2),n=(r.codePointAt(o[e+0])&Number.parseInt(`11000000`,2))>>>6|(r.codePointAt(o[e+1])&Number.parseInt(`00001111`,2))<<2,s=(r.codePointAt(o[e+1])&Number.parseInt(`11110000`,2))>>4|(r.codePointAt(o[e+2])&Number.parseInt(`00000011`,2))<<4,c=(r.codePointAt(o[e+2])&Number.parseInt(`11111100`,2))>>>2;i+=a.charAt(t)+a.charAt(n)+a.charAt(s)+a.charAt(c)}return`{CRYPT}$6$${t}$${i}`}function S(e,t=``){let r=t||n(16).toString(`base64`).slice(0,16);if(r.length>16)throw Error(`The maximum length of salt is 16 characters`);return x(e,r)}function C(e,t){let n=!1,r=typeof t==`string`?[t]:t;for(let t of r){let r=t.match(/\{([^}]+)\}/);if(r&&r[1]===`CRYPT`){let r=t.split(`$`)[2],i=S(e,r);i===t&&(n=!0)}}return n}function w(r,i){let a=i||n(18),o=t(`sha1`).update(r).update(a);return`{SSHA}${e.concat([o.digest(),a]).toString(`base64`)}`}function T(e){return w(e)}function E(t,n){let r=!1,i=typeof n==`string`?[n]:n;for(let n of i){let i=n.match(/\{([^}]+)\}/);if(i&&i[1]===`SSHA`){let i=e.from(n.slice(6),`base64`),a=Uint8Array.prototype.slice.call(i,20),o=w(t,a);o===n&&(r=!0)}}return r}function D(e,t){return a(e,t)||E(e,t)||C(e,t)}export{D as ldapVerifyAll,i as md5,S as sha512Crypt,T as ssha,a as verifyMD5,E as verifySSHA,C as verifySha512Crypt};