Deleted Added
full compact
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 ---