Scram.respond.of: def of bend-kit-postgres@0.3.0.0 Import: import bend-kit-postgres@0.3.0.0/scram.bend as Scram Lines 199-213 of bend-kit-postgres@0.3.0.0/scram.bend: https://jend.leeeet.dev/read.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&start_line=199&end_line=213 import Base import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes # c=biws is base64 of the gs2 header "n,,". AuthMessage joins the three bare messages. def respond.of(r: Result<&1, &1, U32 & String, Parsed>, +bare: String, +sf: String, +pass: String) -> IO(Result<&1, &1, U32 & String, Final & String>): match r: case Fail{e}: IO.pure(Result<&1, &1, U32 & String, Final & String>, Fail{e}) case Done{Parsed{+nonce, +salt, +iters}}: +fb = "c=biws,r=" ++ nonce +auth = bare ++ "," ++ sf ++ "," ++ fb step(pbkdf2(pass, salt, iters), +salted => step(hmac(salted, "Client Key"), +ck => step(sha(ck), +sk => step(hmac(sk, auth), +cs => step(hmac(salted, "Server Key"), +svk => step(hmac(svk, auth), +ss => IO.pure(Result<&1, &1, U32 & String, Final & String>, Done{(Final{ss}, fb ++ ",p=" ++ Bytes.to_base64(Bytes.from_string(xor(ck, cs))))}))))))) Uses (17): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.pure https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Sigma https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String.append https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=bend-kit-bytes@0.3.3.0/bytes.bend&name=from_string https://jend.leeeet.dev/definition.txt?path=bend-kit-bytes@0.3.3.0/bytes.bend&name=to_base64 https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=Final https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=Parsed https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=hmac https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=pbkdf2 https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=sha https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=step https://jend.leeeet.dev/definition.txt?path=bend-kit-postgres@0.3.0.0/scram.bend&name=xor