Changeset View
Changeset View
Standalone View
Standalone View
head/sys/geom/eli/g_eli.c
Show First 20 Lines • Show All 1,080 Lines • ▼ Show 20 Lines | tries = g_eli_tries; | ||||
if ((keybuf = get_keybuf()) != NULL) { | if ((keybuf = get_keybuf()) != NULL) { | ||||
/* Scan the key buffer, try all GELI keys. */ | /* Scan the key buffer, try all GELI keys. */ | ||||
for (i = 0; i < keybuf->kb_nents; i++) { | for (i = 0; i < keybuf->kb_nents; i++) { | ||||
if (keybuf->kb_ents[i].ke_type == KEYBUF_TYPE_GELI) { | if (keybuf->kb_ents[i].ke_type == KEYBUF_TYPE_GELI) { | ||||
memcpy(key, keybuf->kb_ents[i].ke_data, | memcpy(key, keybuf->kb_ents[i].ke_data, | ||||
sizeof(key)); | sizeof(key)); | ||||
if (g_eli_mkey_decrypt(&md, key, | if (g_eli_mkey_decrypt_any(&md, key, | ||||
mkey, &nkey) == 0 ) { | mkey, &nkey) == 0 ) { | ||||
explicit_bzero(key, sizeof(key)); | explicit_bzero(key, sizeof(key)); | ||||
goto have_key; | goto have_key; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | tries = g_eli_tries; | ||||
explicit_bzero(dkey, sizeof(dkey)); | explicit_bzero(dkey, sizeof(dkey)); | ||||
} | } | ||||
g_eli_crypto_hmac_final(&ctx, key, 0); | g_eli_crypto_hmac_final(&ctx, key, 0); | ||||
/* | /* | ||||
* Decrypt Master-Key. | * Decrypt Master-Key. | ||||
*/ | */ | ||||
error = g_eli_mkey_decrypt(&md, key, mkey, &nkey); | error = g_eli_mkey_decrypt_any(&md, key, mkey, &nkey); | ||||
bzero(key, sizeof(key)); | bzero(key, sizeof(key)); | ||||
if (error == -1) { | if (error == -1) { | ||||
if (i == tries) { | if (i == tries) { | ||||
G_ELI_DEBUG(0, | G_ELI_DEBUG(0, | ||||
"Wrong key for %s. No tries left.", | "Wrong key for %s. No tries left.", | ||||
pp->name); | pp->name); | ||||
g_eli_keyfiles_clear(pp->name); | g_eli_keyfiles_clear(pp->name); | ||||
return (NULL); | return (NULL); | ||||
▲ Show 20 Lines • Show All 164 Lines • Show Last 20 Lines |