Treat csalt as binary bytes instead of string
diff --git a/lib/bcrypt/c_src/bcrypt_erlang.c b/lib/bcrypt/c_src/bcrypt_erlang.c
index 34ad1cc..4b4d43e 100644
--- a/lib/bcrypt/c_src/bcrypt_erlang.c
+++ b/lib/bcrypt/c_src/bcrypt_erlang.c
@@ -115,15 +115,15 @@
{
int retval = 0;
ETERM *pattern, *cslt, *lr;
- char *csalt = NULL;
+ byte *csalt = NULL;
long log_rounds = -1;
int csaltlen = -1;
char ret[64];
pattern = erl_format("{Csalt, LogRounds}");
if (erl_match(pattern, data)) {
cslt = erl_var_content(pattern, "Csalt");
- csalt = erl_iolist_to_string(cslt);
- csaltlen = erl_iolist_length(cslt);
+ csaltlen = ERL_BIN_SIZE(cslt);
+ csalt = ERL_BIN_PTR(cslt);
lr = erl_var_content(pattern, "LogRounds");
log_rounds = ERL_INT_UVALUE(lr);
if (16 != csaltlen) {
@@ -131,12 +131,11 @@
} else if (log_rounds < 4 || log_rounds > 31) {
retval = process_reply(pid, CMD_SALT, "Invalid number of rounds");
} else {
- encode_salt(ret, csalt, csaltlen, log_rounds);
+ encode_salt(ret, (u_int8_t*)csalt, csaltlen, log_rounds);
retval = process_reply(pid, CMD_SALT, ret);
}
erl_free_term(cslt);
erl_free_term(lr);
- erl_free(csalt);
};
erl_free_term(pattern);
return retval;