"Jonathan S. Katz" <jk...@postgresql.org> writes: > Attached is a (draft) patch that adds a function called > "scram_build_secret_sha256" that can take 3 arguments:
This seems like a reasonable piece of functionality, I just have one comment on the implementation. > * password (text) - a plaintext password > * salt (text) - a base64 encoded salt […] > + /* > + * determine if this a valid base64 encoded string > + * TODO: look into refactoring the SCRAM decode code in > libpq/auth-scram.c > + */ > + salt_str_dec_len = pg_b64_dec_len(strlen(salt_str_enc)); > + salt_str_dec = palloc(salt_str_dec_len); > + salt_str_dec_len = pg_b64_decode(salt_str_enc, strlen(salt_str_enc), > + salt_str_dec, > salt_str_dec_len); > + if (salt_str_dec_len < 0) > + { > + ereport(ERROR, > + (errcode(ERRCODE_DATA_EXCEPTION), > + errmsg("invalid base64 encoded string"), > + errhint("Use the \"encode\" function to > convert to valid base64 string."))); > + } Instead of going through all these machinations to base64-decode the salt and tell the user off if they encoded it wrong, why not accept the binary salt directly as a bytea? - ilmari