geom_aes.c (109623) | geom_aes.c (111119) |
---|---|
1/*- 2 * Copyright (c) 2002 Poul-Henning Kamp 3 * Copyright (c) 2002 Networks Associates Technology, Inc. 4 * All rights reserved. 5 * 6 * This software was developed for the FreeBSD Project by Poul-Henning Kamp 7 * and NAI Labs, the Security Research Division of Network Associates, Inc. 8 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the --- 18 unchanged lines hidden (view full) --- 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * | 1/*- 2 * Copyright (c) 2002 Poul-Henning Kamp 3 * Copyright (c) 2002 Networks Associates Technology, Inc. 4 * All rights reserved. 5 * 6 * This software was developed for the FreeBSD Project by Poul-Henning Kamp 7 * and NAI Labs, the Security Research Division of Network Associates, Inc. 8 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the --- 18 unchanged lines hidden (view full) --- 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * |
35 * $FreeBSD: head/sys/geom/geom_aes.c 109623 2003-01-21 08:56:16Z alfred $ | 35 * $FreeBSD: head/sys/geom/geom_aes.c 111119 2003-02-19 05:47:46Z imp $ |
36 * 37 * This method provides AES encryption with a compiled in key (default 38 * all zeroes). 39 * 40 * XXX: This could probably save a lot of code by pretending to be a slicer. 41 */ 42 43#include <sys/param.h> --- 99 unchanged lines hidden (view full) --- 143 struct g_geom *gp; 144 struct g_aes_softc *sc; 145 u_char *p, *b, *e, *sb; 146 keyInstance dkey; 147 off_t o; 148 149 gp = bp->bio_from->geom; 150 sc = gp->softc; | 36 * 37 * This method provides AES encryption with a compiled in key (default 38 * all zeroes). 39 * 40 * XXX: This could probably save a lot of code by pretending to be a slicer. 41 */ 42 43#include <sys/param.h> --- 99 unchanged lines hidden (view full) --- 143 struct g_geom *gp; 144 struct g_aes_softc *sc; 145 u_char *p, *b, *e, *sb; 146 keyInstance dkey; 147 off_t o; 148 149 gp = bp->bio_from->geom; 150 sc = gp->softc; |
151 sb = g_malloc(sc->sectorsize, 0); | 151 sb = g_malloc(sc->sectorsize, M_WAITOK); |
152 b = bp->bio_data; 153 e = bp->bio_data; 154 e += bp->bio_length; 155 o = bp->bio_offset - sc->sectorsize; 156 for (p = b; p < e; p += sc->sectorsize) { 157 g_aes_makekey(sc, o, &dkey, DIR_DECRYPT); 158 rijndael_blockDecrypt(&sc->ci, &dkey, p, sc->sectorsize * 8, sb); 159 bcopy(sb, p, sc->sectorsize); --- 46 unchanged lines hidden (view full) --- 206 case BIO_WRITE: 207 bp2 = g_clone_bio(bp); 208 if (bp2 == NULL) { 209 g_io_deliver(bp, ENOMEM); 210 return; 211 } 212 bp2->bio_done = g_aes_write_done; 213 bp2->bio_offset += sc->sectorsize; | 152 b = bp->bio_data; 153 e = bp->bio_data; 154 e += bp->bio_length; 155 o = bp->bio_offset - sc->sectorsize; 156 for (p = b; p < e; p += sc->sectorsize) { 157 g_aes_makekey(sc, o, &dkey, DIR_DECRYPT); 158 rijndael_blockDecrypt(&sc->ci, &dkey, p, sc->sectorsize * 8, sb); 159 bcopy(sb, p, sc->sectorsize); --- 46 unchanged lines hidden (view full) --- 206 case BIO_WRITE: 207 bp2 = g_clone_bio(bp); 208 if (bp2 == NULL) { 209 g_io_deliver(bp, ENOMEM); 210 return; 211 } 212 bp2->bio_done = g_aes_write_done; 213 bp2->bio_offset += sc->sectorsize; |
214 bp2->bio_data = g_malloc(bp->bio_length, 0); | 214 bp2->bio_data = g_malloc(bp->bio_length, M_WAITOK); |
215 b = bp->bio_data; 216 e = bp->bio_data; 217 e += bp->bio_length; 218 p2 = bp2->bio_data; 219 o = bp->bio_offset; 220 for (p1 = b; p1 < e; p1 += sc->sectorsize) { 221 g_aes_makekey(sc, o, &ekey, DIR_ENCRYPT); 222 rijndael_blockEncrypt(&sc->ci, &ekey, --- 94 unchanged lines hidden (view full) --- 317 if (gp->rank != 2) 318 break; 319 sectorsize = cp->provider->sectorsize; 320 mediasize = cp->provider->mediasize; 321 buf = g_read_data(cp, 0, sectorsize, &error); 322 if (buf == NULL || error != 0) { 323 break; 324 } | 215 b = bp->bio_data; 216 e = bp->bio_data; 217 e += bp->bio_length; 218 p2 = bp2->bio_data; 219 o = bp->bio_offset; 220 for (p1 = b; p1 < e; p1 += sc->sectorsize) { 221 g_aes_makekey(sc, o, &ekey, DIR_ENCRYPT); 222 rijndael_blockEncrypt(&sc->ci, &ekey, --- 94 unchanged lines hidden (view full) --- 317 if (gp->rank != 2) 318 break; 319 sectorsize = cp->provider->sectorsize; 320 mediasize = cp->provider->mediasize; 321 buf = g_read_data(cp, 0, sectorsize, &error); 322 if (buf == NULL || error != 0) { 323 break; 324 } |
325 sc = g_malloc(sizeof(struct g_aes_softc), M_ZERO); | 325 sc = g_malloc(sizeof(struct g_aes_softc), M_WAITOK | M_ZERO); |
326 if (!memcmp(buf, aes_magic, strlen(aes_magic))) { 327 sc->keying = KEY_ZERO; 328 } else if (!memcmp(buf, aes_magic_random, 329 strlen(aes_magic_random))) { 330 sc->keying = KEY_RANDOM; 331 } else if (!memcmp(buf, aes_magic_test, 332 strlen(aes_magic_test))) { 333 sc->keying = KEY_TEST; --- 59 unchanged lines hidden --- | 326 if (!memcmp(buf, aes_magic, strlen(aes_magic))) { 327 sc->keying = KEY_ZERO; 328 } else if (!memcmp(buf, aes_magic_random, 329 strlen(aes_magic_random))) { 330 sc->keying = KEY_RANDOM; 331 } else if (!memcmp(buf, aes_magic_test, 332 strlen(aes_magic_test))) { 333 sc->keying = KEY_TEST; --- 59 unchanged lines hidden --- |