void ssh_blf_key(ssh_blf_ctx *c, const uint8_t *k, uint16_t len) { /* Initialize S-boxes and subkeys with Pi */ Blowfish_initstate(c); /* Transform S-boxes and subkeys with key */ Blowfish_expand0state(c, k, len); }
static ERL_NIF_TERM bf_expand(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary state; char key[1024]; char salt[1024]; uint8_t key_len; unsigned long key_len_arg; uint8_t salt_len; if (argc != 4 || !enif_inspect_binary(env, argv[0], &state)) return enif_make_badarg(env); if (!enif_get_string(env, argv[1], key, sizeof(key), ERL_NIF_LATIN1) || !enif_get_ulong(env, argv[2], &key_len_arg) || !enif_get_string(env, argv[3], salt, sizeof(salt), ERL_NIF_LATIN1)) return enif_make_badarg(env); key_len = key_len_arg; salt_len = BCRYPT_MAXSALT; Blowfish_expand0state((blf_ctx *) state.data, (uint8_t *) key, key_len); Blowfish_expand0state((blf_ctx *) state.data, (uint8_t *) salt, salt_len); return enif_make_binary(env, &state); }