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;