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