Home | History | Annotate | Line # | Download | only in cgd
      1  1.5  riastrad /*	$NetBSD: t_cgd_adiantum.c,v 1.5 2020/08/20 13:33:54 riastradh Exp $	*/
      2  1.1  riastrad 
      3  1.1  riastrad /*-
      4  1.1  riastrad  * Copyright (c) 2020 The NetBSD Foundation, Inc.
      5  1.1  riastrad  * All rights reserved.
      6  1.1  riastrad  *
      7  1.1  riastrad  * Redistribution and use in source and binary forms, with or without
      8  1.1  riastrad  * modification, are permitted provided that the following conditions
      9  1.1  riastrad  * are met:
     10  1.1  riastrad  * 1. Redistributions of source code must retain the above copyright
     11  1.1  riastrad  *    notice, this list of conditions and the following disclaimer.
     12  1.1  riastrad  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  riastrad  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  riastrad  *    documentation and/or other materials provided with the distribution.
     15  1.1  riastrad  *
     16  1.1  riastrad  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17  1.1  riastrad  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18  1.1  riastrad  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  1.1  riastrad  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20  1.1  riastrad  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  1.1  riastrad  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  1.1  riastrad  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  1.1  riastrad  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  1.1  riastrad  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  1.1  riastrad  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  1.1  riastrad  * POSSIBILITY OF SUCH DAMAGE.
     27  1.1  riastrad  */
     28  1.1  riastrad 
     29  1.1  riastrad #include <sys/types.h>
     30  1.1  riastrad 
     31  1.1  riastrad #include <fcntl.h>
     32  1.1  riastrad #include <stdint.h>
     33  1.1  riastrad #include <stdint.h>
     34  1.1  riastrad #include <stdio.h>
     35  1.1  riastrad #include <unistd.h>
     36  1.1  riastrad #include <util.h>
     37  1.1  riastrad 
     38  1.1  riastrad #include <dev/cgdvar.h>
     39  1.1  riastrad 
     40  1.1  riastrad #include <rump/rump.h>
     41  1.1  riastrad #include <rump/rump_syscalls.h>
     42  1.1  riastrad 
     43  1.1  riastrad #include <atf-c.h>
     44  1.1  riastrad 
     45  1.1  riastrad #include "h_macros.h"
     46  1.1  riastrad 
     47  1.1  riastrad #define	MAXSECSIZE	512	/* for now; should be cgd parameter */
     48  1.1  riastrad #define	IMGSIZE		0x101*512
     49  1.1  riastrad 
     50  1.5  riastrad /* Used as buffer for cgd device I/O, must be at least 32-bit aligned.  */
     51  1.5  riastrad static const uint8_t zerosector[512] __aligned(4);
     52  1.5  riastrad 
     53  1.1  riastrad static const struct {
     54  1.1  riastrad 	uint8_t		key[32];
     55  1.1  riastrad 	uint64_t	blkno;
     56  1.1  riastrad 	unsigned	secsize;
     57  1.1  riastrad 	const uint8_t	*ptxt;
     58  1.1  riastrad 	const uint8_t	*ctxt;
     59  1.1  riastrad } C[] = {
     60  1.1  riastrad 	[0] = {
     61  1.1  riastrad 		.key = {0},
     62  1.1  riastrad 		.blkno = 0,
     63  1.1  riastrad 		.secsize = 512,
     64  1.5  riastrad 		.ptxt = zerosector,
     65  1.1  riastrad 		.ctxt = (const uint8_t[512]) {
     66  1.1  riastrad 			0x51,0x6d,0xe2,0x81, 0x26,0xd5,0xc8,0xd7,
     67  1.1  riastrad 			0xff,0xc6,0xc2,0xff, 0x39,0xbf,0x15,0x15,
     68  1.1  riastrad 			0x46,0x80,0x44,0x65, 0x76,0xa1,0x56,0xae,
     69  1.1  riastrad 			0xa0,0xb6,0x44,0x05, 0xb7,0xb1,0x32,0x23,
     70  1.1  riastrad 			0x80,0x07,0xdd,0x31, 0x57,0x69,0xf5,0x10,
     71  1.1  riastrad 			0x2d,0x53,0x54,0x8a, 0x1c,0x30,0x15,0x53,
     72  1.1  riastrad 			0x40,0xb4,0x75,0xb2, 0xa1,0x8a,0xbe,0xdf,
     73  1.1  riastrad 			0xf7,0x10,0xe0,0x38, 0xf9,0x70,0x29,0xda,
     74  1.1  riastrad 			0xf0,0x95,0xcd,0xe9, 0x47,0xa1,0x32,0xa3,
     75  1.1  riastrad 			0x83,0xca,0xe3,0x36, 0xc3,0x21,0x00,0xc2,
     76  1.1  riastrad 			0x0a,0xb4,0x0e,0x67, 0x69,0xe6,0xe8,0x14,
     77  1.1  riastrad 			0x74,0x98,0x69,0xd0, 0x6e,0xab,0x23,0xbc,
     78  1.1  riastrad 			0xa9,0x1e,0xf8,0x2d, 0x98,0x59,0x98,0x81,
     79  1.1  riastrad 			0x29,0x70,0xa8,0x1e, 0x26,0x13,0xba,0x53,
     80  1.1  riastrad 			0x9e,0x83,0xe9,0x35, 0x73,0x8c,0xf9,0xb6,
     81  1.1  riastrad 			0x10,0x17,0xda,0xe8, 0x21,0xcc,0x7d,0xd2,
     82  1.1  riastrad 			0x8e,0x23,0xb9,0x63, 0xde,0xcf,0xa7,0x53,
     83  1.1  riastrad 			0x56,0x1c,0xc8,0x53, 0x91,0x17,0x8f,0xec,
     84  1.1  riastrad 			0x93,0x66,0x8b,0x0f, 0x18,0x6e,0xa5,0x9d,
     85  1.1  riastrad 			0x8e,0x99,0x36,0x1c, 0x23,0xb6,0x0f,0x5d,
     86  1.1  riastrad 			0x75,0xc3,0xfd,0x35, 0xc5,0x68,0x9c,0xe1,
     87  1.1  riastrad 			0xba,0x19,0x1a,0x09, 0xca,0x40,0x1f,0xee,
     88  1.1  riastrad 			0x0f,0x76,0x84,0x92, 0x72,0xdf,0x62,0x1b,
     89  1.1  riastrad 			0x2e,0xa9,0x36,0xbe, 0xca,0x7e,0xc6,0x69,
     90  1.1  riastrad 			0xc6,0x27,0xf8,0x12, 0xbf,0x6e,0xd3,0xf0,
     91  1.1  riastrad 			0xb0,0x10,0x9c,0x67, 0x76,0x40,0xc8,0x36,
     92  1.1  riastrad 			0x8e,0x73,0xec,0xa2, 0xdb,0x4a,0x0a,0xd9,
     93  1.1  riastrad 			0x1b,0xa3,0x28,0x30, 0x84,0xa4,0xff,0xa0,
     94  1.1  riastrad 			0xe7,0x1e,0xf4,0xb2, 0xfe,0x59,0x79,0xdf,
     95  1.1  riastrad 			0x8d,0x66,0x12,0xac, 0xf6,0x1a,0x0f,0xa6,
     96  1.1  riastrad 			0x4e,0x86,0x8c,0x80, 0x95,0x11,0xee,0x55,
     97  1.1  riastrad 			0xe3,0xe0,0x43,0x56, 0xa2,0xfc,0xa2,0xbd,
     98  1.1  riastrad 			0xad,0x6f,0xfc,0xf9, 0x4c,0x04,0x51,0xf4,
     99  1.1  riastrad 			0xd9,0x17,0x96,0xdc, 0xd3,0xd0,0xd7,0xeb,
    100  1.1  riastrad 			0xa8,0xdc,0x34,0x65, 0xc7,0xcf,0xed,0x06,
    101  1.1  riastrad 			0xf8,0xa3,0xff,0x31, 0x3e,0x15,0x2f,0x62,
    102  1.1  riastrad 			0x8c,0x73,0x7f,0x8c, 0x80,0x4d,0x4b,0x6d,
    103  1.1  riastrad 			0xcf,0xc6,0xd0,0xdd, 0x7e,0x3a,0x1e,0x88,
    104  1.1  riastrad 			0xb7,0xdd,0x23,0xa6, 0xa0,0x0d,0x6c,0xaf,
    105  1.1  riastrad 			0xd6,0x5b,0xfd,0x76, 0x66,0xee,0x02,0xa6,
    106  1.1  riastrad 			0x10,0xda,0x42,0xfb, 0x15,0xc3,0xe4,0xa7,
    107  1.1  riastrad 			0x8b,0x2b,0xfa,0x5d, 0xba,0xce,0xcd,0x9f,
    108  1.1  riastrad 			0x76,0x38,0x66,0xff, 0x74,0x08,0x34,0xf3,
    109  1.1  riastrad 			0x3d,0x12,0xf4,0x8d, 0x5e,0x54,0x2b,0x37,
    110  1.1  riastrad 			0x06,0xd3,0x03,0xc9, 0xd9,0x29,0x53,0x65,
    111  1.1  riastrad 			0x76,0x00,0x24,0x50, 0x30,0x06,0x6c,0x69,
    112  1.1  riastrad 			0x31,0xcc,0x89,0x7c, 0x97,0xae,0xac,0x74,
    113  1.1  riastrad 			0x35,0x43,0xa3,0xe5, 0x40,0x58,0x3d,0xb9,
    114  1.1  riastrad 			0x08,0x46,0x5e,0x5f, 0x07,0xc5,0x41,0x32,
    115  1.1  riastrad 			0xab,0xa4,0x5a,0xab, 0x59,0x2b,0x54,0xee,
    116  1.1  riastrad 			0x24,0x92,0xd3,0x08, 0xb8,0x99,0x9e,0x13,
    117  1.1  riastrad 			0x3c,0x2c,0x05,0xe6, 0xc1,0x6f,0xa1,0x5d,
    118  1.1  riastrad 			0xa9,0x09,0x1a,0x96, 0x76,0xe4,0x31,0xc6,
    119  1.1  riastrad 			0xcc,0xad,0x28,0x58, 0x73,0x4d,0x1a,0x19,
    120  1.1  riastrad 			0x3d,0xcd,0xaf,0x8c, 0xd8,0x24,0xff,0x72,
    121  1.1  riastrad 			0xdc,0x4e,0x07,0x6e, 0xd8,0xbc,0x3b,0x2b,
    122  1.1  riastrad 			0xf5,0xe5,0xfa,0x30, 0x7d,0xaa,0x59,0x40,
    123  1.1  riastrad 			0x78,0x01,0xa4,0x55, 0xdc,0xe6,0x7b,0xae,
    124  1.1  riastrad 			0x87,0x8e,0x11,0xbb, 0x65,0xf7,0x8a,0x4f,
    125  1.1  riastrad 			0x37,0x7e,0xe1,0xac, 0x62,0xf1,0x64,0x8f,
    126  1.1  riastrad 			0xc1,0xfd,0x3e,0x34, 0x1f,0x60,0xba,0x61,
    127  1.1  riastrad 			0x98,0xae,0x19,0xce, 0x54,0x22,0x64,0x09,
    128  1.1  riastrad 			0x67,0x82,0x6b,0x4b, 0xdf,0x26,0x77,0xde,
    129  1.1  riastrad 			0xd6,0x13,0x00,0xee, 0x2c,0x18,0x49,0xd9,
    130  1.1  riastrad 		},
    131  1.1  riastrad 	},
    132  1.1  riastrad 	[1] = {
    133  1.1  riastrad 		.key = {0},
    134  1.1  riastrad 		.blkno = 1,
    135  1.1  riastrad 		.secsize = 512,
    136  1.5  riastrad 		.ptxt = zerosector,
    137  1.1  riastrad 		.ctxt = (const uint8_t[512]) {
    138  1.1  riastrad 			0xf2,0x23,0x68,0x5a, 0x15,0x11,0x56,0xa1,
    139  1.1  riastrad 			0x71,0x57,0x5c,0x5e, 0x32,0xd4,0xdd,0xbb,
    140  1.1  riastrad 			0x7a,0x0c,0x84,0x23, 0xe9,0x2f,0x1b,0x63,
    141  1.1  riastrad 			0x3c,0x4d,0xad,0xfd, 0x6e,0xc0,0xdb,0x79,
    142  1.1  riastrad 			0x23,0xa5,0x13,0xfe, 0x17,0x3c,0x4a,0x27,
    143  1.1  riastrad 			0xb9,0xbc,0xf0,0xf6, 0x67,0x98,0xa8,0x64,
    144  1.1  riastrad 			0xce,0xf0,0x17,0x0a, 0xa8,0x05,0x0f,0xf2,
    145  1.1  riastrad 			0xff,0xb0,0x7a,0x9e, 0x1a,0xcf,0x5d,0x0e,
    146  1.1  riastrad 			0x9f,0xb0,0x9a,0xd0, 0x7c,0xf2,0x88,0x96,
    147  1.1  riastrad 			0xe2,0x8d,0xdb,0xa2, 0x19,0x30,0x3d,0x5d,
    148  1.1  riastrad 			0x66,0x28,0x40,0x53, 0xb9,0x8d,0xbb,0x24,
    149  1.1  riastrad 			0x3a,0x4c,0x00,0xac, 0x20,0x86,0x96,0x83,
    150  1.1  riastrad 			0x2c,0x77,0x5e,0x18, 0x0c,0xfa,0x27,0x51,
    151  1.1  riastrad 			0xe1,0x5d,0xd3,0xd9, 0xe1,0x5d,0x27,0x1f,
    152  1.1  riastrad 			0x49,0x74,0xfd,0x2a, 0xc3,0xe5,0xa0,0xf6,
    153  1.1  riastrad 			0x5a,0x58,0xe3,0x1f, 0x4a,0xa6,0xc2,0x25,
    154  1.1  riastrad 			0xe4,0xb5,0xc8,0x0d, 0x9f,0xa7,0xc0,0x6e,
    155  1.1  riastrad 			0xab,0xb3,0xfc,0x9f, 0xe1,0x72,0x8a,0x69,
    156  1.1  riastrad 			0xf1,0xc6,0x54,0xb8, 0xeb,0x70,0xed,0xfe,
    157  1.1  riastrad 			0x95,0xf7,0x0d,0x55, 0x95,0x13,0x7a,0x82,
    158  1.1  riastrad 			0xac,0x83,0xd2,0xa3, 0xdc,0x5b,0xba,0x4e,
    159  1.1  riastrad 			0xae,0xdd,0xe9,0x22, 0x9e,0xe2,0x72,0xaf,
    160  1.1  riastrad 			0x9a,0xc0,0x53,0x96, 0xb9,0x7d,0x47,0x28,
    161  1.1  riastrad 			0x4a,0x93,0x6a,0xfb, 0x59,0x25,0x49,0x39,
    162  1.1  riastrad 			0xda,0x23,0xe8,0x28, 0x42,0xba,0x58,0x26,
    163  1.1  riastrad 			0x29,0xf5,0x4c,0x85, 0xbb,0x62,0xfc,0x12,
    164  1.1  riastrad 			0x28,0xbd,0xec,0x3f, 0xf4,0x86,0x80,0xf0,
    165  1.1  riastrad 			0x69,0x81,0x99,0xe3, 0x95,0x0d,0xe8,0x8f,
    166  1.1  riastrad 			0xeb,0x60,0xb6,0x2a, 0xbf,0xf1,0x41,0xe4,
    167  1.1  riastrad 			0x68,0x4f,0x4b,0xe3, 0x49,0x2c,0x1e,0xad,
    168  1.1  riastrad 			0x0d,0x8f,0x63,0x40, 0xb9,0xee,0x4d,0x09,
    169  1.1  riastrad 			0x12,0x45,0x97,0x64, 0x97,0xd5,0x5f,0xa3,
    170  1.1  riastrad 			0xb0,0x4b,0xdf,0x3f, 0x59,0x9f,0xab,0x12,
    171  1.1  riastrad 			0x3d,0x4b,0x54,0xdc, 0xea,0xe0,0x55,0x5e,
    172  1.1  riastrad 			0x1c,0xfd,0xe9,0x7e, 0x40,0x24,0x88,0x6c,
    173  1.1  riastrad 			0x8d,0xfc,0xc2,0x57, 0xd2,0x37,0xb2,0x12,
    174  1.1  riastrad 			0xc2,0x03,0x0d,0xac, 0xb8,0x9b,0x62,0x61,
    175  1.1  riastrad 			0x23,0xc0,0x7a,0x06, 0xdb,0x62,0x86,0x06,
    176  1.1  riastrad 			0xaf,0xa5,0x98,0x75, 0xd9,0x4e,0x8a,0xf2,
    177  1.1  riastrad 			0xc5,0x64,0xad,0xf2, 0xf4,0xc2,0x7f,0xa2,
    178  1.1  riastrad 			0x25,0xf4,0xd0,0x44, 0x57,0x8b,0x89,0xe2,
    179  1.1  riastrad 			0x08,0xea,0x86,0x72, 0x37,0xe3,0x7e,0x92,
    180  1.1  riastrad 			0x22,0xa0,0x32,0x05, 0x30,0x90,0xcc,0x44,
    181  1.1  riastrad 			0x6f,0x2c,0x75,0xae, 0x28,0x90,0x34,0xe3,
    182  1.1  riastrad 			0x05,0x88,0xcd,0x77, 0x1d,0x6a,0x72,0x56,
    183  1.1  riastrad 			0x49,0x3f,0x3d,0x0b, 0x49,0x04,0x98,0x65,
    184  1.1  riastrad 			0x66,0x0e,0xfd,0x7d, 0xca,0x32,0x74,0x66,
    185  1.1  riastrad 			0xa0,0xd7,0x04,0xdb, 0x83,0x4b,0x7f,0x83,
    186  1.1  riastrad 			0x22,0x43,0x98,0x93, 0x0d,0x0b,0xb1,0x8d,
    187  1.1  riastrad 			0x8c,0x8b,0x9e,0x08, 0xb9,0xb0,0xd9,0x82,
    188  1.1  riastrad 			0xcd,0x20,0x5e,0x19, 0x5d,0xa0,0x6a,0x71,
    189  1.1  riastrad 			0x05,0xf9,0x18,0x3d, 0x6b,0xb7,0xb6,0x56,
    190  1.1  riastrad 			0x03,0xa3,0x53,0x58, 0x7d,0xf8,0x25,0xca,
    191  1.1  riastrad 			0x26,0x02,0xc1,0xa6, 0x72,0x70,0xc3,0xe3,
    192  1.1  riastrad 			0x59,0x64,0xe1,0x25, 0x34,0x79,0xb3,0x5e,
    193  1.1  riastrad 			0x08,0xe9,0xb8,0x91, 0xb6,0x5d,0x3a,0x44,
    194  1.1  riastrad 			0x20,0x60,0x61,0xf4, 0x28,0x93,0x8f,0x89,
    195  1.1  riastrad 			0xbe,0xea,0x55,0xda, 0x43,0x38,0x96,0xc8,
    196  1.1  riastrad 			0x50,0x01,0x09,0xaf, 0x76,0x92,0x83,0xae,
    197  1.1  riastrad 			0x3b,0x82,0x6f,0x49, 0x0b,0x18,0x9c,0xef,
    198  1.1  riastrad 			0x92,0x06,0x11,0xeb, 0x41,0x34,0xf4,0x7b,
    199  1.1  riastrad 			0xc4,0x9a,0x9f,0xe4, 0xb4,0xe7,0x1a,0x84,
    200  1.1  riastrad 			0xd8,0x8b,0x3a,0x29, 0xb5,0x4e,0xf3,0x97,
    201  1.1  riastrad 			0x6c,0xef,0xe9,0x62, 0x21,0x89,0x23,0xfd,
    202  1.1  riastrad 		},
    203  1.1  riastrad 	},
    204  1.1  riastrad 	[2] = {
    205  1.1  riastrad 		.key = {0},
    206  1.1  riastrad 		.blkno = 0x100,
    207  1.1  riastrad 		.secsize = 512,
    208  1.5  riastrad 		.ptxt = zerosector,
    209  1.1  riastrad 		.ctxt = (const uint8_t[512]) {
    210  1.1  riastrad 			0x32,0x26,0xaf,0x56, 0xbc,0x43,0xac,0x37,
    211  1.1  riastrad 			0xb2,0x8d,0xa4,0xfb, 0x32,0xdc,0x09,0x03,
    212  1.1  riastrad 			0xd9,0x44,0xce,0x4e, 0x70,0xaf,0xed,0x83,
    213  1.1  riastrad 			0x4b,0x9c,0x85,0x11, 0xd2,0x6a,0x70,0x15,
    214  1.1  riastrad 			0xea,0x7b,0x5e,0xac, 0x5d,0x08,0x25,0xd7,
    215  1.1  riastrad 			0x8c,0x23,0x7c,0x15, 0xb7,0x20,0xd1,0x08,
    216  1.1  riastrad 			0xe0,0x81,0x71,0xbe, 0x68,0xca,0xe2,0xcd,
    217  1.1  riastrad 			0x98,0xe5,0x40,0xe0, 0xf5,0x84,0xcc,0x6a,
    218  1.1  riastrad 			0x3c,0xa0,0xe8,0x2c, 0x02,0x4c,0x95,0xb5,
    219  1.1  riastrad 			0x58,0x86,0x86,0x61, 0x71,0x7f,0xd7,0xf9,
    220  1.1  riastrad 			0xd9,0x64,0x80,0xf6, 0xea,0x92,0xbc,0x65,
    221  1.1  riastrad 			0x3b,0x07,0x77,0xaa, 0xb1,0xb1,0xf5,0xd6,
    222  1.1  riastrad 			0x6d,0x89,0x63,0x14, 0xc0,0xcc,0x7a,0x2b,
    223  1.1  riastrad 			0xc4,0x32,0x63,0xda, 0xa6,0xc6,0xc8,0xc6,
    224  1.1  riastrad 			0x4c,0x4e,0x10,0x63, 0x3b,0x93,0x80,0x77,
    225  1.1  riastrad 			0x3e,0x54,0xd2,0x38, 0x13,0x79,0xbc,0x6c,
    226  1.1  riastrad 			0x0b,0xd4,0x71,0x5c, 0x26,0xc0,0x81,0x09,
    227  1.1  riastrad 			0xc7,0xd8,0x7a,0x04, 0x58,0x2e,0x50,0x6a,
    228  1.1  riastrad 			0x3d,0xca,0xa1,0x66, 0x72,0xca,0xee,0x5a,
    229  1.1  riastrad 			0xdd,0x13,0x67,0xb1, 0x54,0x72,0x41,0x2d,
    230  1.1  riastrad 			0xfd,0x95,0x24,0xe3, 0x96,0x4a,0x41,0x03,
    231  1.1  riastrad 			0xeb,0xeb,0x99,0x49, 0x52,0xac,0x3a,0x28,
    232  1.1  riastrad 			0x81,0x54,0x1a,0xfb, 0xc3,0xcd,0x8e,0x9d,
    233  1.1  riastrad 			0x0c,0x64,0x95,0xbb, 0x27,0xb8,0x6b,0x51,
    234  1.1  riastrad 			0x7b,0xc4,0x57,0xc9, 0x29,0x4e,0x85,0x31,
    235  1.1  riastrad 			0x1c,0xaa,0x63,0x2e, 0x7a,0x37,0x2e,0x06,
    236  1.1  riastrad 			0xdc,0x58,0x39,0x3b, 0x60,0x34,0x59,0x15,
    237  1.1  riastrad 			0x4f,0xba,0x33,0x52, 0x13,0xb0,0x7b,0x7c,
    238  1.1  riastrad 			0x7e,0x00,0x0b,0x49, 0x15,0x9c,0x48,0xf4,
    239  1.1  riastrad 			0x67,0xdd,0xc6,0x72, 0x87,0xbe,0xe7,0xf7,
    240  1.1  riastrad 			0x21,0x95,0x82,0xc3, 0x41,0x3b,0x19,0xe3,
    241  1.1  riastrad 			0xf3,0x28,0xcc,0x14, 0x5f,0xae,0x6f,0x07,
    242  1.1  riastrad 			0x35,0x94,0x05,0x46, 0x02,0x5c,0x3c,0x46,
    243  1.1  riastrad 			0xb1,0x2d,0xeb,0x6e, 0xa0,0x0f,0xea,0x40,
    244  1.1  riastrad 			0x3e,0x35,0x6e,0x50, 0xc4,0x22,0xeb,0x93,
    245  1.1  riastrad 			0xba,0x49,0xfb,0xf0, 0x8e,0x2a,0xa1,0xaf,
    246  1.1  riastrad 			0xf4,0x91,0xb2,0xc5, 0x7d,0x8e,0xba,0x45,
    247  1.1  riastrad 			0x53,0x75,0xc3,0xcc, 0x3e,0x02,0x0e,0x4d,
    248  1.1  riastrad 			0x2e,0xda,0x45,0xd2, 0x31,0xc7,0x1b,0x6b,
    249  1.1  riastrad 			0x99,0x71,0x8d,0xd8, 0x8c,0x94,0xa2,0x02,
    250  1.1  riastrad 			0x6c,0xb0,0x32,0x8f, 0xce,0x04,0x61,0x0a,
    251  1.1  riastrad 			0x3f,0x17,0x3a,0x28, 0xda,0x31,0xdc,0xec,
    252  1.1  riastrad 			0xbc,0xea,0x1b,0x37, 0x9b,0x36,0x04,0xb1,
    253  1.1  riastrad 			0xb5,0x7f,0xfe,0x1a, 0xd8,0x11,0xb7,0x0a,
    254  1.1  riastrad 			0x77,0x2e,0x6d,0x22, 0x79,0x9e,0x54,0x47,
    255  1.1  riastrad 			0xea,0xf5,0x17,0x38, 0xd0,0xe2,0x23,0x68,
    256  1.1  riastrad 			0x92,0x88,0x42,0x59, 0x2c,0x61,0x53,0x2b,
    257  1.1  riastrad 			0x99,0xed,0x7b,0x85, 0xfb,0xb8,0xe8,0x0c,
    258  1.1  riastrad 			0x4b,0x81,0x1e,0x0f, 0x42,0x04,0x8b,0x55,
    259  1.1  riastrad 			0x2c,0x34,0x46,0x98, 0x9c,0x47,0x08,0x70,
    260  1.1  riastrad 			0x46,0x45,0x5e,0xa8, 0x62,0x92,0x94,0xcd,
    261  1.1  riastrad 			0x73,0x1c,0xef,0x8b, 0x96,0x5f,0x6d,0x76,
    262  1.1  riastrad 			0x07,0x99,0x6f,0xe0, 0x1d,0xdc,0x1d,0x1c,
    263  1.1  riastrad 			0x3f,0xb4,0x5f,0x9b, 0x34,0x0c,0x75,0x10,
    264  1.1  riastrad 			0x7e,0x0d,0xf8,0xbb, 0xc3,0x8a,0x2a,0x15,
    265  1.1  riastrad 			0x01,0x3a,0x56,0x73, 0x5b,0xe9,0x5f,0xf2,
    266  1.1  riastrad 			0x6a,0x1b,0x17,0xce, 0xf3,0x3e,0xc9,0xdf,
    267  1.1  riastrad 			0x76,0xe8,0xcd,0xf2, 0x6d,0xb1,0xdc,0x29,
    268  1.1  riastrad 			0x8c,0xa3,0x89,0x73, 0x69,0x86,0xa9,0x05,
    269  1.1  riastrad 			0xbe,0x63,0xc8,0x7c, 0x36,0xc0,0x88,0x74,
    270  1.1  riastrad 			0x64,0x91,0xdd,0xb7, 0x92,0x73,0x7e,0xc1,
    271  1.1  riastrad 			0x01,0x95,0xb3,0x95, 0x53,0x33,0x16,0xcd,
    272  1.1  riastrad 			0xe9,0xd7,0x56,0x61, 0x71,0x49,0x24,0x9b,
    273  1.1  riastrad 			0x9a,0x10,0x7e,0x50, 0x7e,0xd3,0xe2,0x9d,
    274  1.1  riastrad 		},
    275  1.1  riastrad 	},
    276  1.1  riastrad };
    277  1.1  riastrad 
    278  1.1  riastrad static void
    279  1.1  riastrad hexdump(const void *buf, size_t len)
    280  1.1  riastrad {
    281  1.1  riastrad 	const unsigned char *p = buf;
    282  1.1  riastrad 	size_t i;
    283  1.1  riastrad 
    284  1.1  riastrad 	for (i = 0; i < len; i++) {
    285  1.1  riastrad 		if (i % 16 == 8)
    286  1.1  riastrad 			printf(" ");
    287  1.1  riastrad 		printf(" %02hhx", p[i]);
    288  1.1  riastrad 		if ((i + 1) % 16 == 0)
    289  1.1  riastrad 			printf("\n");
    290  1.1  riastrad 	}
    291  1.1  riastrad 	if (i % 16)
    292  1.1  riastrad 		printf("\n");
    293  1.1  riastrad }
    294  1.1  riastrad 
    295  1.1  riastrad static int
    296  1.1  riastrad configure_cgd(int fd, const char *dkpath, const char *alg,
    297  1.1  riastrad     const char *ivmethod, const void *key, size_t keybytes)
    298  1.1  riastrad {
    299  1.1  riastrad 	struct cgd_ioctl ci;
    300  1.1  riastrad 
    301  1.1  riastrad 	memset(&ci, 0, sizeof(ci));
    302  1.1  riastrad 	ci.ci_disk = dkpath;
    303  1.1  riastrad 	ci.ci_alg = alg;
    304  1.1  riastrad 	ci.ci_ivmethod = ivmethod;
    305  1.1  riastrad 	ci.ci_keylen = 8*keybytes;
    306  1.1  riastrad 	ci.ci_key = key;
    307  1.1  riastrad 	ci.ci_blocksize = (size_t)-1;
    308  1.1  riastrad 
    309  1.1  riastrad 	return rump_sys_ioctl(fd, CGDIOCSET, &ci);
    310  1.1  riastrad }
    311  1.1  riastrad 
    312  1.1  riastrad static int
    313  1.1  riastrad unconfigure_cgd(int fd)
    314  1.1  riastrad {
    315  1.1  riastrad 	struct cgd_ioctl ci;
    316  1.1  riastrad 
    317  1.1  riastrad 	return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
    318  1.1  riastrad }
    319  1.1  riastrad 
    320  1.1  riastrad ATF_TC(cgd_adiantum);
    321  1.1  riastrad ATF_TC_HEAD(cgd_adiantum, tc)
    322  1.1  riastrad {
    323  1.1  riastrad 
    324  1.1  riastrad 	atf_tc_set_md_var(tc, "descr", "Adiantum tests");
    325  1.1  riastrad }
    326  1.1  riastrad 
    327  1.1  riastrad ATF_TC_BODY(cgd_adiantum, tc)
    328  1.1  riastrad {
    329  1.1  riastrad 	static uint8_t buf[MAXSECSIZE];
    330  1.1  riastrad 	static const char imgpath[] = "adiantum.img";
    331  1.1  riastrad 	static const char dkpath[] = "/dev/dk";
    332  1.1  riastrad 	char cgdpath[MAXPATHLEN];
    333  1.1  riastrad 	int dkfd, cgdfd;
    334  1.1  riastrad 	unsigned i;
    335  1.1  riastrad 	ssize_t nwrit, nread;
    336  1.1  riastrad 
    337  1.1  riastrad 	rump_init();
    338  1.1  riastrad 
    339  1.1  riastrad 	RL(dkfd = open(imgpath, O_CREAT|O_RDWR|O_TRUNC, 0600));
    340  1.1  riastrad 	RL(ftruncate(dkfd, IMGSIZE));
    341  1.1  riastrad 	RL(rump_pub_etfs_register_withsize(dkpath, imgpath, RUMP_ETFS_BLK, 0,
    342  1.1  riastrad 		IMGSIZE));
    343  1.1  riastrad 	snprintf(cgdpath, sizeof cgdpath, "/dev/rcgd0%c",
    344  1.1  riastrad 	    getrawpartition() + 'a');
    345  1.1  riastrad 	RL(cgdfd = rump_sys_open(cgdpath, O_RDWR));
    346  1.1  riastrad 
    347  1.1  riastrad 	for (i = 0; i < __arraycount(C); i++) {
    348  1.1  riastrad 		/* write the plaintext out via cgd */
    349  1.1  riastrad 		RL(configure_cgd(cgdfd, dkpath, "adiantum", "encblkno1",
    350  1.1  riastrad 			C[i].key, 32));
    351  1.1  riastrad 		RL(nwrit = rump_sys_pwrite(cgdfd, C[i].ptxt, C[i].secsize,
    352  1.1  riastrad 			C[i].blkno * C[i].secsize));
    353  1.1  riastrad 		RL(unconfigure_cgd(cgdfd));
    354  1.3  riastrad 		if ((size_t)nwrit != C[i].secsize) {
    355  1.1  riastrad 			atf_tc_fail_nonfatal("truncated write: %zd != %u",
    356  1.1  riastrad 			    nwrit, C[i].secsize);
    357  1.1  riastrad 			continue;
    358  1.1  riastrad 		}
    359  1.1  riastrad 
    360  1.1  riastrad 		/* read the ciphertext out from the underlying file */
    361  1.1  riastrad 		RL(nread = pread(dkfd, buf, C[i].secsize,
    362  1.1  riastrad 			C[i].blkno * C[i].secsize));
    363  1.2  riastrad 		if ((size_t)nread != C[i].secsize) {
    364  1.1  riastrad 			atf_tc_fail_nonfatal("truncated read: %zd != %u",
    365  1.1  riastrad 			    nread, C[i].secsize);
    366  1.1  riastrad 			continue;
    367  1.1  riastrad 		}
    368  1.1  riastrad 		if (memcmp(buf, C[i].ctxt, C[i].secsize)) {
    369  1.1  riastrad 			hexdump(buf, C[i].secsize);
    370  1.1  riastrad 			hexdump(C[i].ctxt, C[i].secsize);
    371  1.1  riastrad 			atf_tc_fail_nonfatal("case %u ctxt mismatch", i);
    372  1.1  riastrad 			continue;
    373  1.1  riastrad 		}
    374  1.1  riastrad 
    375  1.1  riastrad 		/* read the plaintext back via cgd */
    376  1.1  riastrad 		RL(configure_cgd(cgdfd, dkpath, "adiantum", "encblkno1",
    377  1.1  riastrad 			C[i].key, 32));
    378  1.1  riastrad 		RL(nread = rump_sys_pread(cgdfd, buf, C[i].secsize,
    379  1.1  riastrad 			C[i].blkno * C[i].secsize));
    380  1.1  riastrad 		RL(unconfigure_cgd(cgdfd));
    381  1.2  riastrad 		if ((size_t)nread != C[i].secsize) {
    382  1.1  riastrad 			atf_tc_fail_nonfatal("truncated read: %zd != %u",
    383  1.1  riastrad 			    nread, C[i].secsize);
    384  1.1  riastrad 			continue;
    385  1.1  riastrad 		}
    386  1.1  riastrad 		if (memcmp(buf, C[i].ptxt, C[i].secsize)) {
    387  1.1  riastrad 			hexdump(buf, C[i].secsize);
    388  1.1  riastrad 			atf_tc_fail_nonfatal("case %u ptxt mismatch", i);
    389  1.1  riastrad 			continue;
    390  1.1  riastrad 		}
    391  1.1  riastrad 	}
    392  1.1  riastrad 
    393  1.1  riastrad 	RL(rump_sys_close(cgdfd));
    394  1.1  riastrad 	RL(close(dkfd));
    395  1.1  riastrad }
    396  1.1  riastrad 
    397  1.1  riastrad ATF_TP_ADD_TCS(tp)
    398  1.1  riastrad {
    399  1.1  riastrad 
    400  1.1  riastrad 	ATF_TP_ADD_TC(tp, cgd_adiantum);
    401  1.1  riastrad 
    402  1.1  riastrad 	return atf_no_error();
    403  1.1  riastrad }
    404