Changeset View
Changeset View
Standalone View
Standalone View
sys/boot/geli/geliboot.c
Show First 20 Lines • Show All 328 Lines • ▼ Show 20 Lines | if (geli_same_device(geli_e, dskp) == 0) { | ||||
return (0); | return (0); | ||||
} | } | ||||
} | } | ||||
return (1); | return (1); | ||||
} | } | ||||
int | int | ||||
geli_read(struct dsk *dskp, off_t offset, u_char *buf, size_t bytes) | geli_io(struct dsk *dskp, enum geli_switch enc, off_t offset, u_char *buf, | ||||
size_t bytes) | |||||
{ | { | ||||
u_char iv[G_ELI_IVKEYLEN]; | u_char iv[G_ELI_IVKEYLEN]; | ||||
u_char *pbuf; | u_char *pbuf; | ||||
int error; | int error; | ||||
off_t dstoff; | off_t dstoff; | ||||
uint64_t keyno; | uint64_t keyno; | ||||
size_t n, nsec, secsize; | size_t n, nsec, secsize; | ||||
struct g_eli_key gkey; | struct g_eli_key gkey; | ||||
Show All 21 Lines | for (n = 0, dstoff = offset; n < nsec; n++, dstoff += secsize) { | ||||
g_eli_crypto_ivgen(&geli_e->sc, dstoff, iv, | g_eli_crypto_ivgen(&geli_e->sc, dstoff, iv, | ||||
G_ELI_IVKEYLEN); | G_ELI_IVKEYLEN); | ||||
/* Get the key that corresponds to this offset. */ | /* Get the key that corresponds to this offset. */ | ||||
keyno = (dstoff >> G_ELI_KEY_SHIFT) / secsize; | keyno = (dstoff >> G_ELI_KEY_SHIFT) / secsize; | ||||
g_eli_key_fill(&geli_e->sc, &gkey, keyno); | g_eli_key_fill(&geli_e->sc, &gkey, keyno); | ||||
error = geliboot_crypt(geli_e->sc.sc_ealgo, 0, pbuf, | error = geliboot_crypt(geli_e->sc.sc_ealgo, enc, pbuf, | ||||
secsize, gkey.gek_key, | secsize, gkey.gek_key, | ||||
geli_e->sc.sc_ekeylen, iv); | geli_e->sc.sc_ekeylen, iv); | ||||
if (error != 0) { | if (error != 0) { | ||||
explicit_bzero(&gkey, sizeof(gkey)); | explicit_bzero(&gkey, sizeof(gkey)); | ||||
printf("Failed to decrypt in geli_read()!"); | printf("Failed to %s in geli_io()!", | ||||
enc ? "encrypt" : "decrypt"); | |||||
return (error); | return (error); | ||||
} | } | ||||
pbuf += secsize; | pbuf += secsize; | ||||
} | } | ||||
explicit_bzero(&gkey, sizeof(gkey)); | explicit_bzero(&gkey, sizeof(gkey)); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 48 Lines • Show Last 20 Lines |