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