1 /* 2 * Copyright (c) 2022-2024, Arm Limited and Contributors. All rights reserved. 3 * Copyright (c) 2024, Linaro Limited and Contributors. All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #include <errno.h> 9 #include <string.h> 10 11 #include <plat/common/platform.h> 12 13 /* 14 * This is the CBOR serialization of the CCA platform token described at 15 * https://git.trustedfirmware.org/TF-M/tf-m-tools/+/refs/heads/main/iat-verifier/tests/data/cca_example_platform_token.yaml 16 */ 17 static const uint8_t sample_platform_token[] = { 18 0xd2, 0x84, 0x44, 0xa1, 0x01, 0x38, 0x22, 0xa0, 19 0x59, 0x05, 0x7a, 0xa9, 0x19, 0x01, 0x09, 0x78, 20 0x1c, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 21 0x61, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 22 0x43, 0x43, 0x41, 0x2d, 0x53, 0x53, 0x44, 0x2f, 23 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x0a, 0x58, 0x20, 24 0xb5, 0x97, 0x3c, 0xb6, 0x8b, 0xaa, 0x9f, 0xc5, 25 0x55, 0x58, 0x78, 0x6b, 0x7e, 0xc6, 0x7f, 0x69, 26 0xe4, 0x0d, 0xf5, 0xba, 0x5a, 0xa9, 0x21, 0xcd, 27 0x0c, 0x27, 0xf4, 0x05, 0x87, 0xa0, 0x11, 0xea, 28 0x19, 0x09, 0x5c, 0x58, 0x20, 0x7f, 0x45, 0x4c, 29 0x46, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 30 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x3e, 31 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x58, 0x00, 32 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 33 0x58, 0x21, 0x01, 0x07, 0x06, 0x05, 0x04, 0x03, 34 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 35 0x0a, 0x09, 0x08, 0x17, 0x16, 0x15, 0x14, 0x13, 36 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 37 0x1a, 0x19, 0x18, 0x19, 0x09, 0x61, 0x44, 0xcf, 38 0xcf, 0xcf, 0xcf, 0x19, 0x09, 0x5b, 0x19, 0x30, 39 0x03, 0x19, 0x09, 0x62, 0x67, 0x73, 0x68, 0x61, 40 0x2d, 0x32, 0x35, 0x36, 0x19, 0x09, 0x60, 0x78, 41 0x3a, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 42 0x2f, 0x76, 0x65, 0x72, 0x61, 0x69, 0x73, 0x6f, 43 0x6e, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 44 0x65, 0x2f, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 45 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x76, 0x65, 46 0x72, 0x61, 0x69, 0x73, 0x6f, 0x6e, 0x2f, 0x76, 47 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 48 0x69, 0x6f, 0x6e, 0x19, 0x09, 0x5f, 0x8d, 0xa4, 49 0x01, 0x69, 0x52, 0x53, 0x45, 0x5f, 0x42, 0x4c, 50 0x31, 0x5f, 0x32, 0x05, 0x58, 0x20, 0x53, 0x78, 51 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 0x8d, 52 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 0x41, 53 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 0x38, 54 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 0x58, 55 0x20, 0x9a, 0x27, 0x1f, 0x2a, 0x91, 0x6b, 0x0b, 56 0x6e, 0xe6, 0xce, 0xcb, 0x24, 0x26, 0xf0, 0xb3, 57 0x20, 0x6e, 0xf0, 0x74, 0x57, 0x8b, 0xe5, 0x5d, 58 0x9b, 0xc9, 0x4f, 0x6f, 0x3f, 0xe3, 0xab, 0x86, 59 0xaa, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 0x32, 60 0x35, 0x36, 0xa4, 0x01, 0x67, 0x52, 0x53, 0x45, 61 0x5f, 0x42, 0x4c, 0x32, 0x05, 0x58, 0x20, 0x53, 62 0x78, 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 63 0x8d, 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 64 0x41, 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 65 0x38, 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 66 0x58, 0x20, 0x53, 0xc2, 0x34, 0xe5, 0xe8, 0x47, 67 0x2b, 0x6a, 0xc5, 0x1c, 0x1a, 0xe1, 0xca, 0xb3, 68 0xfe, 0x06, 0xfa, 0xd0, 0x53, 0xbe, 0xb8, 0xeb, 69 0xfd, 0x89, 0x77, 0xb0, 0x10, 0x65, 0x5b, 0xfd, 70 0xd3, 0xc3, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 71 0x32, 0x35, 0x36, 0xa4, 0x01, 0x65, 0x52, 0x53, 72 0x45, 0x5f, 0x53, 0x05, 0x58, 0x20, 0x53, 0x78, 73 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 0x8d, 74 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 0x41, 75 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 0x38, 76 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 0x58, 77 0x20, 0x11, 0x21, 0xcf, 0xcc, 0xd5, 0x91, 0x3f, 78 0x0a, 0x63, 0xfe, 0xc4, 0x0a, 0x6f, 0xfd, 0x44, 79 0xea, 0x64, 0xf9, 0xdc, 0x13, 0x5c, 0x66, 0x63, 80 0x4b, 0xa0, 0x01, 0xd1, 0x0b, 0xcf, 0x43, 0x02, 81 0xa2, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 0x32, 82 0x35, 0x36, 0xa4, 0x01, 0x66, 0x41, 0x50, 0x5f, 83 0x42, 0x4c, 0x31, 0x05, 0x58, 0x20, 0x53, 0x78, 84 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 0x8d, 85 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 0x41, 86 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 0x38, 87 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 0x58, 88 0x20, 0x15, 0x71, 0xb5, 0xec, 0x78, 0xbd, 0x68, 89 0x51, 0x2b, 0xf7, 0x83, 0x0b, 0xb6, 0xa2, 0xa4, 90 0x4b, 0x20, 0x47, 0xc7, 0xdf, 0x57, 0xbc, 0xe7, 91 0x9e, 0xb8, 0xa1, 0xc0, 0xe5, 0xbe, 0xa0, 0xa5, 92 0x01, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 0x32, 93 0x35, 0x36, 0xa4, 0x01, 0x66, 0x41, 0x50, 0x5f, 94 0x42, 0x4c, 0x32, 0x05, 0x58, 0x20, 0x53, 0x78, 95 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 0x8d, 96 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 0x41, 97 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 0x38, 98 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 0x58, 99 0x20, 0x10, 0x15, 0x9b, 0xaf, 0x26, 0x2b, 0x43, 100 0xa9, 0x2d, 0x95, 0xdb, 0x59, 0xda, 0xe1, 0xf7, 101 0x2c, 0x64, 0x51, 0x27, 0x30, 0x16, 0x61, 0xe0, 102 0xa3, 0xce, 0x4e, 0x38, 0xb2, 0x95, 0xa9, 0x7c, 103 0x58, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 0x32, 104 0x35, 0x36, 0xa4, 0x01, 0x67, 0x53, 0x43, 0x50, 105 0x5f, 0x42, 0x4c, 0x31, 0x05, 0x58, 0x20, 0x53, 106 0x78, 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 107 0x8d, 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 108 0x41, 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 109 0x38, 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 110 0x58, 0x20, 0x10, 0x12, 0x2e, 0x85, 0x6b, 0x3f, 111 0xcd, 0x49, 0xf0, 0x63, 0x63, 0x63, 0x17, 0x47, 112 0x61, 0x49, 0xcb, 0x73, 0x0a, 0x1a, 0xa1, 0xcf, 113 0xaa, 0xd8, 0x18, 0x55, 0x2b, 0x72, 0xf5, 0x6d, 114 0x6f, 0x68, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 115 0x32, 0x35, 0x36, 0xa4, 0x01, 0x67, 0x53, 0x43, 116 0x50, 0x5f, 0x42, 0x4c, 0x32, 0x05, 0x58, 0x20, 117 0xf1, 0x4b, 0x49, 0x87, 0x90, 0x4b, 0xcb, 0x58, 118 0x14, 0xe4, 0x45, 0x9a, 0x05, 0x7e, 0xd4, 0xd2, 119 0x0f, 0x58, 0xa6, 0x33, 0x15, 0x22, 0x88, 0xa7, 120 0x61, 0x21, 0x4d, 0xcd, 0x28, 0x78, 0x0b, 0x56, 121 0x02, 0x58, 0x20, 0xaa, 0x67, 0xa1, 0x69, 0xb0, 122 0xbb, 0xa2, 0x17, 0xaa, 0x0a, 0xa8, 0x8a, 0x65, 123 0x34, 0x69, 0x20, 0xc8, 0x4c, 0x42, 0x44, 0x7c, 124 0x36, 0xba, 0x5f, 0x7e, 0xa6, 0x5f, 0x42, 0x2c, 125 0x1f, 0xe5, 0xd8, 0x06, 0x67, 0x73, 0x68, 0x61, 126 0x2d, 0x32, 0x35, 0x36, 0xa4, 0x01, 0x67, 0x41, 127 0x50, 0x5f, 0x42, 0x4c, 0x33, 0x31, 0x05, 0x58, 128 0x20, 0x53, 0x78, 0x79, 0x63, 0x07, 0x53, 0x5d, 129 0xf3, 0xec, 0x8d, 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 130 0x56, 0x41, 0x41, 0x9c, 0x3d, 0x30, 0x60, 0xcf, 131 0xe3, 0x22, 0x38, 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 132 0xa3, 0x02, 0x58, 0x20, 0x2e, 0x6d, 0x31, 0xa5, 133 0x98, 0x3a, 0x91, 0x25, 0x1b, 0xfa, 0xe5, 0xae, 134 0xfa, 0x1c, 0x0a, 0x19, 0xd8, 0xba, 0x3c, 0xf6, 135 0x01, 0xd0, 0xe8, 0xa7, 0x06, 0xb4, 0xcf, 0xa9, 136 0x66, 0x1a, 0x6b, 0x8a, 0x06, 0x67, 0x73, 0x68, 137 0x61, 0x2d, 0x32, 0x35, 0x36, 0xa4, 0x01, 0x63, 138 0x52, 0x4d, 0x4d, 0x05, 0x58, 0x20, 0x53, 0x78, 139 0x79, 0x63, 0x07, 0x53, 0x5d, 0xf3, 0xec, 0x8d, 140 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 0x56, 0x41, 0x41, 141 0x9c, 0x3d, 0x30, 0x60, 0xcf, 0xe3, 0x22, 0x38, 142 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 0xa3, 0x02, 0x58, 143 0x20, 0xa1, 0xfb, 0x50, 0xe6, 0xc8, 0x6f, 0xae, 144 0x16, 0x79, 0xef, 0x33, 0x51, 0x29, 0x6f, 0xd6, 145 0x71, 0x34, 0x11, 0xa0, 0x8c, 0xf8, 0xdd, 0x17, 146 0x90, 0xa4, 0xfd, 0x05, 0xfa, 0xe8, 0x68, 0x81, 147 0x64, 0x06, 0x67, 0x73, 0x68, 0x61, 0x2d, 0x32, 148 0x35, 0x36, 0xa4, 0x01, 0x69, 0x48, 0x57, 0x5f, 149 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x05, 0x58, 150 0x20, 0x53, 0x78, 0x79, 0x63, 0x07, 0x53, 0x5d, 151 0xf3, 0xec, 0x8d, 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 152 0x56, 0x41, 0x41, 0x9c, 0x3d, 0x30, 0x60, 0xcf, 153 0xe3, 0x22, 0x38, 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 154 0xa3, 0x02, 0x58, 0x20, 0x1a, 0x25, 0x24, 0x02, 155 0x97, 0x2f, 0x60, 0x57, 0xfa, 0x53, 0xcc, 0x17, 156 0x2b, 0x52, 0xb9, 0xff, 0xca, 0x69, 0x8e, 0x18, 157 0x31, 0x1f, 0xac, 0xd0, 0xf3, 0xb0, 0x6e, 0xca, 158 0xae, 0xf7, 0x9e, 0x17, 0x06, 0x67, 0x73, 0x68, 159 0x61, 0x2d, 0x32, 0x35, 0x36, 0xa4, 0x01, 0x69, 160 0x46, 0x57, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 161 0x47, 0x05, 0x58, 0x20, 0x53, 0x78, 0x79, 0x63, 162 0x07, 0x53, 0x5d, 0xf3, 0xec, 0x8d, 0x8b, 0x15, 163 0xa2, 0xe2, 0xdc, 0x56, 0x41, 0x41, 0x9c, 0x3d, 164 0x30, 0x60, 0xcf, 0xe3, 0x22, 0x38, 0xc0, 0xfa, 165 0x97, 0x3f, 0x7a, 0xa3, 0x02, 0x58, 0x20, 0x9a, 166 0x92, 0xad, 0xbc, 0x0c, 0xee, 0x38, 0xef, 0x65, 167 0x8c, 0x71, 0xce, 0x1b, 0x1b, 0xf8, 0xc6, 0x56, 168 0x68, 0xf1, 0x66, 0xbf, 0xb2, 0x13, 0x64, 0x4c, 169 0x89, 0x5c, 0xcb, 0x1a, 0xd0, 0x7a, 0x25, 0x06, 170 0x67, 0x73, 0x68, 0x61, 0x2d, 0x32, 0x35, 0x36, 171 0xa4, 0x01, 0x6c, 0x54, 0x42, 0x5f, 0x46, 0x57, 172 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x05, 173 0x58, 0x20, 0x53, 0x78, 0x79, 0x63, 0x07, 0x53, 174 0x5d, 0xf3, 0xec, 0x8d, 0x8b, 0x15, 0xa2, 0xe2, 175 0xdc, 0x56, 0x41, 0x41, 0x9c, 0x3d, 0x30, 0x60, 176 0xcf, 0xe3, 0x22, 0x38, 0xc0, 0xfa, 0x97, 0x3f, 177 0x7a, 0xa3, 0x02, 0x58, 0x20, 0x23, 0x89, 0x03, 178 0x18, 0x0c, 0xc1, 0x04, 0xec, 0x2c, 0x5d, 0x8b, 179 0x3f, 0x20, 0xc5, 0xbc, 0x61, 0xb3, 0x89, 0xec, 180 0x0a, 0x96, 0x7d, 0xf8, 0xcc, 0x20, 0x8c, 0xdc, 181 0x7c, 0xd4, 0x54, 0x17, 0x4f, 0x06, 0x67, 0x73, 182 0x68, 0x61, 0x2d, 0x32, 0x35, 0x36, 0xa4, 0x01, 183 0x6d, 0x53, 0x4f, 0x43, 0x5f, 0x46, 0x57, 0x5f, 184 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x05, 0x58, 185 0x20, 0x53, 0x78, 0x79, 0x63, 0x07, 0x53, 0x5d, 186 0xf3, 0xec, 0x8d, 0x8b, 0x15, 0xa2, 0xe2, 0xdc, 187 0x56, 0x41, 0x41, 0x9c, 0x3d, 0x30, 0x60, 0xcf, 188 0xe3, 0x22, 0x38, 0xc0, 0xfa, 0x97, 0x3f, 0x7a, 189 0xa3, 0x02, 0x58, 0x20, 0xe6, 0xc2, 0x1e, 0x8d, 190 0x26, 0x0f, 0xe7, 0x18, 0x82, 0xde, 0xbd, 0xb3, 191 0x39, 0xd2, 0x40, 0x2a, 0x2c, 0xa7, 0x64, 0x85, 192 0x29, 0xbc, 0x23, 0x03, 0xf4, 0x86, 0x49, 0xbc, 193 0xe0, 0x38, 0x00, 0x17, 0x06, 0x67, 0x73, 0x68, 194 0x61, 0x2d, 0x32, 0x35, 0x36, 0x58, 0x60, 0x21, 195 0x51, 0x20, 0x92, 0xd6, 0xd0, 0x2a, 0xe6, 0xbe, 196 0x2f, 0xe3, 0x93, 0x0e, 0xa5, 0x1f, 0xd6, 0x98, 197 0x96, 0x32, 0x24, 0x56, 0xe9, 0xdf, 0xc7, 0x32, 198 0x5e, 0x0b, 0x78, 0x68, 0xb6, 0x90, 0x73, 0x2a, 199 0x0c, 0x0f, 0x07, 0x77, 0xc1, 0x15, 0x40, 0x4b, 200 0xe1, 0xfc, 0x83, 0x9b, 0x7d, 0x30, 0x4f, 0x4f, 201 0xe6, 0xfa, 0x46, 0xae, 0x12, 0xa3, 0x08, 0x3a, 202 0xcf, 0x24, 0x06, 0x67, 0x91, 0x06, 0xbf, 0xae, 203 0x50, 0x31, 0x79, 0xdd, 0x50, 0x33, 0x49, 0x12, 204 0xbf, 0xc6, 0xda, 0x33, 0x6d, 0xd6, 0x18, 0x25, 205 0x43, 0x54, 0x4d, 0xb5, 0x88, 0xd6, 0xae, 0x67, 206 0x35, 0x7a, 0xfd, 0xb0, 0x5f, 0x95, 0xb7 207 }; 208 static uint64_t platform_token_offset; 209 210 /* 211 * Get the hardcoded platform attestation token as FVP does not support 212 * RSE. 213 * 214 * Note: This implementation caters for retrieval of the platform token 215 * in hunks to facilitate EL3-RMM interface testing. For most platforms, 216 * since the shared buffer size is known, the implementation can be more 217 * optimized. 218 */ 219 int plat_rmmd_get_cca_attest_token(uintptr_t buf, size_t *len, 220 uintptr_t hash, size_t hash_size, 221 size_t *remaining_len) 222 { 223 (void)hash; 224 (void)hash_size; 225 size_t platform_token_size = sizeof(sample_platform_token); 226 size_t local_hunk_len; 227 size_t local_remaining_len; 228 229 if (hash_size != 0) { 230 platform_token_offset = 0; 231 } else if (platform_token_offset == 0) { 232 return -EINVAL; 233 } 234 235 local_hunk_len = *len; 236 local_remaining_len = platform_token_size - platform_token_offset; 237 238 /* 239 * If the buffer is enough to fit the remaining bytes of the token, 240 * return only the remaining bytes of the token. 241 */ 242 if (local_hunk_len >= local_remaining_len) { 243 local_hunk_len = local_remaining_len; 244 } 245 /* Update remaining bytes according to hunk size */ 246 local_remaining_len -= local_hunk_len; 247 248 (void)memcpy((void *)buf, 249 (const void *)sample_platform_token 250 + platform_token_offset, 251 local_hunk_len); 252 253 platform_token_offset += local_hunk_len; 254 *len = local_hunk_len; 255 *remaining_len = local_remaining_len; 256 257 return 0; 258 } 259