Changeset View
Changeset View
Standalone View
Standalone View
dev/cgd/t_cgd_adiantum.c
- This file was added.
/* $NetBSD: t_cgd_adiantum.c,v 1.5 2020/08/20 13:33:54 riastradh Exp $ */ | |||||
/*- | |||||
* Copyright (c) 2020 The NetBSD Foundation, Inc. | |||||
* All rights reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | |||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
* POSSIBILITY OF SUCH DAMAGE. | |||||
*/ | |||||
#include <sys/types.h> | |||||
#include <fcntl.h> | |||||
#include <stdint.h> | |||||
#include <stdint.h> | |||||
#include <stdio.h> | |||||
#include <unistd.h> | |||||
#include <util.h> | |||||
#include <dev/cgdvar.h> | |||||
#include <rump/rump.h> | |||||
#include <rump/rump_syscalls.h> | |||||
#include <atf-c.h> | |||||
#include "h_macros.h" | |||||
#define MAXSECSIZE 512 /* for now; should be cgd parameter */ | |||||
#define IMGSIZE 0x101*512 | |||||
/* Used as buffer for cgd device I/O, must be at least 32-bit aligned. */ | |||||
static const uint8_t zerosector[512] __aligned(4); | |||||
static const struct { | |||||
uint8_t key[32]; | |||||
uint64_t blkno; | |||||
unsigned secsize; | |||||
const uint8_t *ptxt; | |||||
const uint8_t *ctxt; | |||||
} C[] = { | |||||
[0] = { | |||||
.key = {0}, | |||||
.blkno = 0, | |||||
.secsize = 512, | |||||
.ptxt = zerosector, | |||||
.ctxt = (const uint8_t[512]) { | |||||
0x51,0x6d,0xe2,0x81, 0x26,0xd5,0xc8,0xd7, | |||||
0xff,0xc6,0xc2,0xff, 0x39,0xbf,0x15,0x15, | |||||
0x46,0x80,0x44,0x65, 0x76,0xa1,0x56,0xae, | |||||
0xa0,0xb6,0x44,0x05, 0xb7,0xb1,0x32,0x23, | |||||
0x80,0x07,0xdd,0x31, 0x57,0x69,0xf5,0x10, | |||||
0x2d,0x53,0x54,0x8a, 0x1c,0x30,0x15,0x53, | |||||
0x40,0xb4,0x75,0xb2, 0xa1,0x8a,0xbe,0xdf, | |||||
0xf7,0x10,0xe0,0x38, 0xf9,0x70,0x29,0xda, | |||||
0xf0,0x95,0xcd,0xe9, 0x47,0xa1,0x32,0xa3, | |||||
0x83,0xca,0xe3,0x36, 0xc3,0x21,0x00,0xc2, | |||||
0x0a,0xb4,0x0e,0x67, 0x69,0xe6,0xe8,0x14, | |||||
0x74,0x98,0x69,0xd0, 0x6e,0xab,0x23,0xbc, | |||||
0xa9,0x1e,0xf8,0x2d, 0x98,0x59,0x98,0x81, | |||||
0x29,0x70,0xa8,0x1e, 0x26,0x13,0xba,0x53, | |||||
0x9e,0x83,0xe9,0x35, 0x73,0x8c,0xf9,0xb6, | |||||
0x10,0x17,0xda,0xe8, 0x21,0xcc,0x7d,0xd2, | |||||
0x8e,0x23,0xb9,0x63, 0xde,0xcf,0xa7,0x53, | |||||
0x56,0x1c,0xc8,0x53, 0x91,0x17,0x8f,0xec, | |||||
0x93,0x66,0x8b,0x0f, 0x18,0x6e,0xa5,0x9d, | |||||
0x8e,0x99,0x36,0x1c, 0x23,0xb6,0x0f,0x5d, | |||||
0x75,0xc3,0xfd,0x35, 0xc5,0x68,0x9c,0xe1, | |||||
0xba,0x19,0x1a,0x09, 0xca,0x40,0x1f,0xee, | |||||
0x0f,0x76,0x84,0x92, 0x72,0xdf,0x62,0x1b, | |||||
0x2e,0xa9,0x36,0xbe, 0xca,0x7e,0xc6,0x69, | |||||
0xc6,0x27,0xf8,0x12, 0xbf,0x6e,0xd3,0xf0, | |||||
0xb0,0x10,0x9c,0x67, 0x76,0x40,0xc8,0x36, | |||||
0x8e,0x73,0xec,0xa2, 0xdb,0x4a,0x0a,0xd9, | |||||
0x1b,0xa3,0x28,0x30, 0x84,0xa4,0xff,0xa0, | |||||
0xe7,0x1e,0xf4,0xb2, 0xfe,0x59,0x79,0xdf, | |||||
0x8d,0x66,0x12,0xac, 0xf6,0x1a,0x0f,0xa6, | |||||
0x4e,0x86,0x8c,0x80, 0x95,0x11,0xee,0x55, | |||||
0xe3,0xe0,0x43,0x56, 0xa2,0xfc,0xa2,0xbd, | |||||
0xad,0x6f,0xfc,0xf9, 0x4c,0x04,0x51,0xf4, | |||||
0xd9,0x17,0x96,0xdc, 0xd3,0xd0,0xd7,0xeb, | |||||
0xa8,0xdc,0x34,0x65, 0xc7,0xcf,0xed,0x06, | |||||
0xf8,0xa3,0xff,0x31, 0x3e,0x15,0x2f,0x62, | |||||
0x8c,0x73,0x7f,0x8c, 0x80,0x4d,0x4b,0x6d, | |||||
0xcf,0xc6,0xd0,0xdd, 0x7e,0x3a,0x1e,0x88, | |||||
0xb7,0xdd,0x23,0xa6, 0xa0,0x0d,0x6c,0xaf, | |||||
0xd6,0x5b,0xfd,0x76, 0x66,0xee,0x02,0xa6, | |||||
0x10,0xda,0x42,0xfb, 0x15,0xc3,0xe4,0xa7, | |||||
0x8b,0x2b,0xfa,0x5d, 0xba,0xce,0xcd,0x9f, | |||||
0x76,0x38,0x66,0xff, 0x74,0x08,0x34,0xf3, | |||||
0x3d,0x12,0xf4,0x8d, 0x5e,0x54,0x2b,0x37, | |||||
0x06,0xd3,0x03,0xc9, 0xd9,0x29,0x53,0x65, | |||||
0x76,0x00,0x24,0x50, 0x30,0x06,0x6c,0x69, | |||||
0x31,0xcc,0x89,0x7c, 0x97,0xae,0xac,0x74, | |||||
0x35,0x43,0xa3,0xe5, 0x40,0x58,0x3d,0xb9, | |||||
0x08,0x46,0x5e,0x5f, 0x07,0xc5,0x41,0x32, | |||||
0xab,0xa4,0x5a,0xab, 0x59,0x2b,0x54,0xee, | |||||
0x24,0x92,0xd3,0x08, 0xb8,0x99,0x9e,0x13, | |||||
0x3c,0x2c,0x05,0xe6, 0xc1,0x6f,0xa1,0x5d, | |||||
0xa9,0x09,0x1a,0x96, 0x76,0xe4,0x31,0xc6, | |||||
0xcc,0xad,0x28,0x58, 0x73,0x4d,0x1a,0x19, | |||||
0x3d,0xcd,0xaf,0x8c, 0xd8,0x24,0xff,0x72, | |||||
0xdc,0x4e,0x07,0x6e, 0xd8,0xbc,0x3b,0x2b, | |||||
0xf5,0xe5,0xfa,0x30, 0x7d,0xaa,0x59,0x40, | |||||
0x78,0x01,0xa4,0x55, 0xdc,0xe6,0x7b,0xae, | |||||
0x87,0x8e,0x11,0xbb, 0x65,0xf7,0x8a,0x4f, | |||||
0x37,0x7e,0xe1,0xac, 0x62,0xf1,0x64,0x8f, | |||||
0xc1,0xfd,0x3e,0x34, 0x1f,0x60,0xba,0x61, | |||||
0x98,0xae,0x19,0xce, 0x54,0x22,0x64,0x09, | |||||
0x67,0x82,0x6b,0x4b, 0xdf,0x26,0x77,0xde, | |||||
0xd6,0x13,0x00,0xee, 0x2c,0x18,0x49,0xd9, | |||||
}, | |||||
}, | |||||
[1] = { | |||||
.key = {0}, | |||||
.blkno = 1, | |||||
.secsize = 512, | |||||
.ptxt = zerosector, | |||||
.ctxt = (const uint8_t[512]) { | |||||
0xf2,0x23,0x68,0x5a, 0x15,0x11,0x56,0xa1, | |||||
0x71,0x57,0x5c,0x5e, 0x32,0xd4,0xdd,0xbb, | |||||
0x7a,0x0c,0x84,0x23, 0xe9,0x2f,0x1b,0x63, | |||||
0x3c,0x4d,0xad,0xfd, 0x6e,0xc0,0xdb,0x79, | |||||
0x23,0xa5,0x13,0xfe, 0x17,0x3c,0x4a,0x27, | |||||
0xb9,0xbc,0xf0,0xf6, 0x67,0x98,0xa8,0x64, | |||||
0xce,0xf0,0x17,0x0a, 0xa8,0x05,0x0f,0xf2, | |||||
0xff,0xb0,0x7a,0x9e, 0x1a,0xcf,0x5d,0x0e, | |||||
0x9f,0xb0,0x9a,0xd0, 0x7c,0xf2,0x88,0x96, | |||||
0xe2,0x8d,0xdb,0xa2, 0x19,0x30,0x3d,0x5d, | |||||
0x66,0x28,0x40,0x53, 0xb9,0x8d,0xbb,0x24, | |||||
0x3a,0x4c,0x00,0xac, 0x20,0x86,0x96,0x83, | |||||
0x2c,0x77,0x5e,0x18, 0x0c,0xfa,0x27,0x51, | |||||
0xe1,0x5d,0xd3,0xd9, 0xe1,0x5d,0x27,0x1f, | |||||
0x49,0x74,0xfd,0x2a, 0xc3,0xe5,0xa0,0xf6, | |||||
0x5a,0x58,0xe3,0x1f, 0x4a,0xa6,0xc2,0x25, | |||||
0xe4,0xb5,0xc8,0x0d, 0x9f,0xa7,0xc0,0x6e, | |||||
0xab,0xb3,0xfc,0x9f, 0xe1,0x72,0x8a,0x69, | |||||
0xf1,0xc6,0x54,0xb8, 0xeb,0x70,0xed,0xfe, | |||||
0x95,0xf7,0x0d,0x55, 0x95,0x13,0x7a,0x82, | |||||
0xac,0x83,0xd2,0xa3, 0xdc,0x5b,0xba,0x4e, | |||||
0xae,0xdd,0xe9,0x22, 0x9e,0xe2,0x72,0xaf, | |||||
0x9a,0xc0,0x53,0x96, 0xb9,0x7d,0x47,0x28, | |||||
0x4a,0x93,0x6a,0xfb, 0x59,0x25,0x49,0x39, | |||||
0xda,0x23,0xe8,0x28, 0x42,0xba,0x58,0x26, | |||||
0x29,0xf5,0x4c,0x85, 0xbb,0x62,0xfc,0x12, | |||||
0x28,0xbd,0xec,0x3f, 0xf4,0x86,0x80,0xf0, | |||||
0x69,0x81,0x99,0xe3, 0x95,0x0d,0xe8,0x8f, | |||||
0xeb,0x60,0xb6,0x2a, 0xbf,0xf1,0x41,0xe4, | |||||
0x68,0x4f,0x4b,0xe3, 0x49,0x2c,0x1e,0xad, | |||||
0x0d,0x8f,0x63,0x40, 0xb9,0xee,0x4d,0x09, | |||||
0x12,0x45,0x97,0x64, 0x97,0xd5,0x5f,0xa3, | |||||
0xb0,0x4b,0xdf,0x3f, 0x59,0x9f,0xab,0x12, | |||||
0x3d,0x4b,0x54,0xdc, 0xea,0xe0,0x55,0x5e, | |||||
0x1c,0xfd,0xe9,0x7e, 0x40,0x24,0x88,0x6c, | |||||
0x8d,0xfc,0xc2,0x57, 0xd2,0x37,0xb2,0x12, | |||||
0xc2,0x03,0x0d,0xac, 0xb8,0x9b,0x62,0x61, | |||||
0x23,0xc0,0x7a,0x06, 0xdb,0x62,0x86,0x06, | |||||
0xaf,0xa5,0x98,0x75, 0xd9,0x4e,0x8a,0xf2, | |||||
0xc5,0x64,0xad,0xf2, 0xf4,0xc2,0x7f,0xa2, | |||||
0x25,0xf4,0xd0,0x44, 0x57,0x8b,0x89,0xe2, | |||||
0x08,0xea,0x86,0x72, 0x37,0xe3,0x7e,0x92, | |||||
0x22,0xa0,0x32,0x05, 0x30,0x90,0xcc,0x44, | |||||
0x6f,0x2c,0x75,0xae, 0x28,0x90,0x34,0xe3, | |||||
0x05,0x88,0xcd,0x77, 0x1d,0x6a,0x72,0x56, | |||||
0x49,0x3f,0x3d,0x0b, 0x49,0x04,0x98,0x65, | |||||
0x66,0x0e,0xfd,0x7d, 0xca,0x32,0x74,0x66, | |||||
0xa0,0xd7,0x04,0xdb, 0x83,0x4b,0x7f,0x83, | |||||
0x22,0x43,0x98,0x93, 0x0d,0x0b,0xb1,0x8d, | |||||
0x8c,0x8b,0x9e,0x08, 0xb9,0xb0,0xd9,0x82, | |||||
0xcd,0x20,0x5e,0x19, 0x5d,0xa0,0x6a,0x71, | |||||
0x05,0xf9,0x18,0x3d, 0x6b,0xb7,0xb6,0x56, | |||||
0x03,0xa3,0x53,0x58, 0x7d,0xf8,0x25,0xca, | |||||
0x26,0x02,0xc1,0xa6, 0x72,0x70,0xc3,0xe3, | |||||
0x59,0x64,0xe1,0x25, 0x34,0x79,0xb3,0x5e, | |||||
0x08,0xe9,0xb8,0x91, 0xb6,0x5d,0x3a,0x44, | |||||
0x20,0x60,0x61,0xf4, 0x28,0x93,0x8f,0x89, | |||||
0xbe,0xea,0x55,0xda, 0x43,0x38,0x96,0xc8, | |||||
0x50,0x01,0x09,0xaf, 0x76,0x92,0x83,0xae, | |||||
0x3b,0x82,0x6f,0x49, 0x0b,0x18,0x9c,0xef, | |||||
0x92,0x06,0x11,0xeb, 0x41,0x34,0xf4,0x7b, | |||||
0xc4,0x9a,0x9f,0xe4, 0xb4,0xe7,0x1a,0x84, | |||||
0xd8,0x8b,0x3a,0x29, 0xb5,0x4e,0xf3,0x97, | |||||
0x6c,0xef,0xe9,0x62, 0x21,0x89,0x23,0xfd, | |||||
}, | |||||
}, | |||||
[2] = { | |||||
.key = {0}, | |||||
.blkno = 0x100, | |||||
.secsize = 512, | |||||
.ptxt = zerosector, | |||||
.ctxt = (const uint8_t[512]) { | |||||
0x32,0x26,0xaf,0x56, 0xbc,0x43,0xac,0x37, | |||||
0xb2,0x8d,0xa4,0xfb, 0x32,0xdc,0x09,0x03, | |||||
0xd9,0x44,0xce,0x4e, 0x70,0xaf,0xed,0x83, | |||||
0x4b,0x9c,0x85,0x11, 0xd2,0x6a,0x70,0x15, | |||||
0xea,0x7b,0x5e,0xac, 0x5d,0x08,0x25,0xd7, | |||||
0x8c,0x23,0x7c,0x15, 0xb7,0x20,0xd1,0x08, | |||||
0xe0,0x81,0x71,0xbe, 0x68,0xca,0xe2,0xcd, | |||||
0x98,0xe5,0x40,0xe0, 0xf5,0x84,0xcc,0x6a, | |||||
0x3c,0xa0,0xe8,0x2c, 0x02,0x4c,0x95,0xb5, | |||||
0x58,0x86,0x86,0x61, 0x71,0x7f,0xd7,0xf9, | |||||
0xd9,0x64,0x80,0xf6, 0xea,0x92,0xbc,0x65, | |||||
0x3b,0x07,0x77,0xaa, 0xb1,0xb1,0xf5,0xd6, | |||||
0x6d,0x89,0x63,0x14, 0xc0,0xcc,0x7a,0x2b, | |||||
0xc4,0x32,0x63,0xda, 0xa6,0xc6,0xc8,0xc6, | |||||
0x4c,0x4e,0x10,0x63, 0x3b,0x93,0x80,0x77, | |||||
0x3e,0x54,0xd2,0x38, 0x13,0x79,0xbc,0x6c, | |||||
0x0b,0xd4,0x71,0x5c, 0x26,0xc0,0x81,0x09, | |||||
0xc7,0xd8,0x7a,0x04, 0x58,0x2e,0x50,0x6a, | |||||
0x3d,0xca,0xa1,0x66, 0x72,0xca,0xee,0x5a, | |||||
0xdd,0x13,0x67,0xb1, 0x54,0x72,0x41,0x2d, | |||||
0xfd,0x95,0x24,0xe3, 0x96,0x4a,0x41,0x03, | |||||
0xeb,0xeb,0x99,0x49, 0x52,0xac,0x3a,0x28, | |||||
0x81,0x54,0x1a,0xfb, 0xc3,0xcd,0x8e,0x9d, | |||||
0x0c,0x64,0x95,0xbb, 0x27,0xb8,0x6b,0x51, | |||||
0x7b,0xc4,0x57,0xc9, 0x29,0x4e,0x85,0x31, | |||||
0x1c,0xaa,0x63,0x2e, 0x7a,0x37,0x2e,0x06, | |||||
0xdc,0x58,0x39,0x3b, 0x60,0x34,0x59,0x15, | |||||
0x4f,0xba,0x33,0x52, 0x13,0xb0,0x7b,0x7c, | |||||
0x7e,0x00,0x0b,0x49, 0x15,0x9c,0x48,0xf4, | |||||
0x67,0xdd,0xc6,0x72, 0x87,0xbe,0xe7,0xf7, | |||||
0x21,0x95,0x82,0xc3, 0x41,0x3b,0x19,0xe3, | |||||
0xf3,0x28,0xcc,0x14, 0x5f,0xae,0x6f,0x07, | |||||
0x35,0x94,0x05,0x46, 0x02,0x5c,0x3c,0x46, | |||||
0xb1,0x2d,0xeb,0x6e, 0xa0,0x0f,0xea,0x40, | |||||
0x3e,0x35,0x6e,0x50, 0xc4,0x22,0xeb,0x93, | |||||
0xba,0x49,0xfb,0xf0, 0x8e,0x2a,0xa1,0xaf, | |||||
0xf4,0x91,0xb2,0xc5, 0x7d,0x8e,0xba,0x45, | |||||
0x53,0x75,0xc3,0xcc, 0x3e,0x02,0x0e,0x4d, | |||||
0x2e,0xda,0x45,0xd2, 0x31,0xc7,0x1b,0x6b, | |||||
0x99,0x71,0x8d,0xd8, 0x8c,0x94,0xa2,0x02, | |||||
0x6c,0xb0,0x32,0x8f, 0xce,0x04,0x61,0x0a, | |||||
0x3f,0x17,0x3a,0x28, 0xda,0x31,0xdc,0xec, | |||||
0xbc,0xea,0x1b,0x37, 0x9b,0x36,0x04,0xb1, | |||||
0xb5,0x7f,0xfe,0x1a, 0xd8,0x11,0xb7,0x0a, | |||||
0x77,0x2e,0x6d,0x22, 0x79,0x9e,0x54,0x47, | |||||
0xea,0xf5,0x17,0x38, 0xd0,0xe2,0x23,0x68, | |||||
0x92,0x88,0x42,0x59, 0x2c,0x61,0x53,0x2b, | |||||
0x99,0xed,0x7b,0x85, 0xfb,0xb8,0xe8,0x0c, | |||||
0x4b,0x81,0x1e,0x0f, 0x42,0x04,0x8b,0x55, | |||||
0x2c,0x34,0x46,0x98, 0x9c,0x47,0x08,0x70, | |||||
0x46,0x45,0x5e,0xa8, 0x62,0x92,0x94,0xcd, | |||||
0x73,0x1c,0xef,0x8b, 0x96,0x5f,0x6d,0x76, | |||||
0x07,0x99,0x6f,0xe0, 0x1d,0xdc,0x1d,0x1c, | |||||
0x3f,0xb4,0x5f,0x9b, 0x34,0x0c,0x75,0x10, | |||||
0x7e,0x0d,0xf8,0xbb, 0xc3,0x8a,0x2a,0x15, | |||||
0x01,0x3a,0x56,0x73, 0x5b,0xe9,0x5f,0xf2, | |||||
0x6a,0x1b,0x17,0xce, 0xf3,0x3e,0xc9,0xdf, | |||||
0x76,0xe8,0xcd,0xf2, 0x6d,0xb1,0xdc,0x29, | |||||
0x8c,0xa3,0x89,0x73, 0x69,0x86,0xa9,0x05, | |||||
0xbe,0x63,0xc8,0x7c, 0x36,0xc0,0x88,0x74, | |||||
0x64,0x91,0xdd,0xb7, 0x92,0x73,0x7e,0xc1, | |||||
0x01,0x95,0xb3,0x95, 0x53,0x33,0x16,0xcd, | |||||
0xe9,0xd7,0x56,0x61, 0x71,0x49,0x24,0x9b, | |||||
0x9a,0x10,0x7e,0x50, 0x7e,0xd3,0xe2,0x9d, | |||||
}, | |||||
}, | |||||
}; | |||||
static void | |||||
hexdump(const void *buf, size_t len) | |||||
{ | |||||
const unsigned char *p = buf; | |||||
size_t i; | |||||
for (i = 0; i < len; i++) { | |||||
if (i % 16 == 8) | |||||
printf(" "); | |||||
printf(" %02hhx", p[i]); | |||||
if ((i + 1) % 16 == 0) | |||||
printf("\n"); | |||||
} | |||||
if (i % 16) | |||||
printf("\n"); | |||||
} | |||||
static int | |||||
configure_cgd(int fd, const char *dkpath, const char *alg, | |||||
const char *ivmethod, const void *key, size_t keybytes) | |||||
{ | |||||
struct cgd_ioctl ci; | |||||
memset(&ci, 0, sizeof(ci)); | |||||
ci.ci_disk = dkpath; | |||||
ci.ci_alg = alg; | |||||
ci.ci_ivmethod = ivmethod; | |||||
ci.ci_keylen = 8*keybytes; | |||||
ci.ci_key = key; | |||||
ci.ci_blocksize = (size_t)-1; | |||||
return rump_sys_ioctl(fd, CGDIOCSET, &ci); | |||||
} | |||||
static int | |||||
unconfigure_cgd(int fd) | |||||
{ | |||||
struct cgd_ioctl ci; | |||||
return rump_sys_ioctl(fd, CGDIOCCLR, &ci); | |||||
} | |||||
ATF_TC(cgd_adiantum); | |||||
ATF_TC_HEAD(cgd_adiantum, tc) | |||||
{ | |||||
atf_tc_set_md_var(tc, "descr", "Adiantum tests"); | |||||
} | |||||
ATF_TC_BODY(cgd_adiantum, tc) | |||||
{ | |||||
static uint8_t buf[MAXSECSIZE]; | |||||
static const char imgpath[] = "adiantum.img"; | |||||
static const char dkpath[] = "/dev/dk"; | |||||
char cgdpath[MAXPATHLEN]; | |||||
int dkfd, cgdfd; | |||||
unsigned i; | |||||
ssize_t nwrit, nread; | |||||
rump_init(); | |||||
RL(dkfd = open(imgpath, O_CREAT|O_RDWR|O_TRUNC, 0600)); | |||||
RL(ftruncate(dkfd, IMGSIZE)); | |||||
RL(rump_pub_etfs_register_withsize(dkpath, imgpath, RUMP_ETFS_BLK, 0, | |||||
IMGSIZE)); | |||||
snprintf(cgdpath, sizeof cgdpath, "/dev/rcgd0%c", | |||||
getrawpartition() + 'a'); | |||||
RL(cgdfd = rump_sys_open(cgdpath, O_RDWR)); | |||||
for (i = 0; i < __arraycount(C); i++) { | |||||
/* write the plaintext out via cgd */ | |||||
RL(configure_cgd(cgdfd, dkpath, "adiantum", "encblkno1", | |||||
C[i].key, 32)); | |||||
RL(nwrit = rump_sys_pwrite(cgdfd, C[i].ptxt, C[i].secsize, | |||||
C[i].blkno * C[i].secsize)); | |||||
RL(unconfigure_cgd(cgdfd)); | |||||
if ((size_t)nwrit != C[i].secsize) { | |||||
atf_tc_fail_nonfatal("truncated write: %zd != %u", | |||||
nwrit, C[i].secsize); | |||||
continue; | |||||
} | |||||
/* read the ciphertext out from the underlying file */ | |||||
RL(nread = pread(dkfd, buf, C[i].secsize, | |||||
C[i].blkno * C[i].secsize)); | |||||
if ((size_t)nread != C[i].secsize) { | |||||
atf_tc_fail_nonfatal("truncated read: %zd != %u", | |||||
nread, C[i].secsize); | |||||
continue; | |||||
} | |||||
if (memcmp(buf, C[i].ctxt, C[i].secsize)) { | |||||
hexdump(buf, C[i].secsize); | |||||
hexdump(C[i].ctxt, C[i].secsize); | |||||
atf_tc_fail_nonfatal("case %u ctxt mismatch", i); | |||||
continue; | |||||
} | |||||
/* read the plaintext back via cgd */ | |||||
RL(configure_cgd(cgdfd, dkpath, "adiantum", "encblkno1", | |||||
C[i].key, 32)); | |||||
RL(nread = rump_sys_pread(cgdfd, buf, C[i].secsize, | |||||
C[i].blkno * C[i].secsize)); | |||||
RL(unconfigure_cgd(cgdfd)); | |||||
if ((size_t)nread != C[i].secsize) { | |||||
atf_tc_fail_nonfatal("truncated read: %zd != %u", | |||||
nread, C[i].secsize); | |||||
continue; | |||||
} | |||||
if (memcmp(buf, C[i].ptxt, C[i].secsize)) { | |||||
hexdump(buf, C[i].secsize); | |||||
atf_tc_fail_nonfatal("case %u ptxt mismatch", i); | |||||
continue; | |||||
} | |||||
} | |||||
RL(rump_sys_close(cgdfd)); | |||||
RL(close(dkfd)); | |||||
} | |||||
ATF_TP_ADD_TCS(tp) | |||||
{ | |||||
ATF_TP_ADD_TC(tp, cgd_adiantum); | |||||
return atf_no_error(); | |||||
} |