avb_vbmeta_image.c revision 0155e6b158bdc5b3a442f16a5dc124d5dee9c71c
121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/*
221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Copyright (C) 2016 The Android Open Source Project
321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
4c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * Permission is hereby granted, free of charge, to any person
5c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * obtaining a copy of this software and associated documentation
6c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * files (the "Software"), to deal in the Software without
7c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * restriction, including without limitation the rights to use, copy,
8c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * modify, merge, publish, distribute, sublicense, and/or sell copies
9c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * of the Software, and to permit persons to whom the Software is
10c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * furnished to do so, subject to the following conditions:
1121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
12c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * The above copyright notice and this permission notice shall be
13c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * included in all copies or substantial portions of the Software.
1421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen *
15c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * SOFTWARE.
2321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */
2421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
2521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include "avb_vbmeta_image.h"
2621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include "avb_rsa.h"
2721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include "avb_sha.h"
2821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include "avb_util.h"
2921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
3021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* NOTE: The PKC1-v1.5 padding is a blob of binary DER of ASN.1 and is
3121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * obtained from section 5.2.2 of RFC 4880.
3221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */
3321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
3421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic const uint8_t
3521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    padding_RSA2048_SHA256[AVB_RSA2048_NUM_BYTES - AVB_SHA256_DIGEST_SIZE] = {
3621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
4921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
5021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
5121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
5221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
5321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65,
5421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20};
5521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
5621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic const uint8_t
5721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    padding_RSA4096_SHA256[AVB_RSA4096_NUM_BYTES - AVB_SHA256_DIGEST_SIZE] = {
5821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
5921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
7921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
9621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60,
9721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20};
9821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
9921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic const uint8_t
10021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    padding_RSA8192_SHA256[AVB_RSA8192_NUM_BYTES - AVB_SHA256_DIGEST_SIZE] = {
10121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
11921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
12921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
13921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
14921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
15921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
16921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
18021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
18121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
18221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65,
18321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20};
18421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
18521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic const uint8_t
18621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    padding_RSA2048_SHA512[AVB_RSA2048_NUM_BYTES - AVB_SHA512_DIGEST_SIZE] = {
18721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
18821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
18921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
19921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
20021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
20121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60,
20221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40};
20321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
20421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic const uint8_t
20521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    padding_RSA4096_SHA512[AVB_RSA4096_NUM_BYTES - AVB_SHA512_DIGEST_SIZE] = {
20621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
20721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
20821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
20921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
21921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
22921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
23921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
24021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
24121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x51, 0x30,
24221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03,
24321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x05, 0x00, 0x04, 0x40};
24421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
24521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic const uint8_t
24621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    padding_RSA8192_SHA512[AVB_RSA8192_NUM_BYTES - AVB_SHA512_DIGEST_SIZE] = {
24721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
24821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
24921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
25921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
26921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
27921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60,
32621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen        0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40};
32721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
32821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthentypedef struct {
32921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  const uint8_t* padding;
33021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  size_t padding_len;
33121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  size_t hash_len;
33221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen} AvbAlgorithmData;
33321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
33421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenstatic AvbAlgorithmData algorithm_data[_AVB_ALGORITHM_NUM_TYPES] = {
33521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_NONE */
33621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = NULL, .padding_len = 0, .hash_len = 0},
33721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_SHA256_RSA2048 */
33821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = padding_RSA2048_SHA256,
33921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .padding_len = sizeof(padding_RSA2048_SHA256),
34021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .hash_len = AVB_SHA256_DIGEST_SIZE},
34121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_SHA256_RSA4096 */
34221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = padding_RSA4096_SHA256,
34321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .padding_len = sizeof(padding_RSA4096_SHA256),
34421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .hash_len = AVB_SHA256_DIGEST_SIZE},
34521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_SHA256_RSA8192 */
34621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = padding_RSA8192_SHA256,
34721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .padding_len = sizeof(padding_RSA8192_SHA256),
34821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .hash_len = AVB_SHA256_DIGEST_SIZE},
34921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_SHA512_RSA2048 */
35021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = padding_RSA2048_SHA512,
35121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .padding_len = sizeof(padding_RSA2048_SHA512),
35221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .hash_len = AVB_SHA512_DIGEST_SIZE},
35321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_SHA512_RSA4096 */
35421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = padding_RSA4096_SHA512,
35521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .padding_len = sizeof(padding_RSA4096_SHA512),
35621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .hash_len = AVB_SHA512_DIGEST_SIZE},
35721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* AVB_ALGORITHM_TYPE_SHA512_RSA8192 */
35821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    {.padding = padding_RSA8192_SHA512,
35921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .padding_len = sizeof(padding_RSA8192_SHA512),
36021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen     .hash_len = AVB_SHA512_DIGEST_SIZE},
36121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen};
36221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
36321e95266704e572ced1c633bbc4aea9f42afa0a5David ZeuthenAvbVBMetaVerifyResult avb_vbmeta_image_verify(
36421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    const uint8_t* data, size_t length, const uint8_t** out_public_key_data,
36521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    size_t* out_public_key_length) {
36621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  AvbVBMetaVerifyResult ret;
36721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  AvbVBMetaImageHeader h;
36821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  uint8_t* computed_hash;
36921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  AvbAlgorithmData* algorithm;
37021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  AvbSHA256Ctx sha256_ctx;
37121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  AvbSHA512Ctx sha512_ctx;
37221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  const uint8_t* header_block;
37321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  const uint8_t* authentication_block;
37421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  const uint8_t* auxiliary_block;
37521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  int verification_result;
37621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
37721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  ret = AVB_VBMETA_VERIFY_RESULT_INVALID_VBMETA_HEADER;
37821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
3790155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  if (out_public_key_data != NULL) {
3800155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    *out_public_key_data = NULL;
3810155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  }
3820155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  if (out_public_key_length != NULL) {
3830155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    *out_public_key_length = 0;
3840155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  }
38521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
38621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure magic is correct. */
38721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (avb_safe_memcmp(data, AVB_MAGIC, AVB_MAGIC_LEN) != 0) {
38821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Magic is incorrect.\n");
38921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
39021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
39121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
39221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Before we byteswap, ensure length is long enough. */
39321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (length < sizeof(AvbVBMetaImageHeader)) {
39421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Length is smaller than header.\n");
39521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
39621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
39721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  avb_vbmeta_image_header_to_host_byte_order((const AvbVBMetaImageHeader*)data,
39821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                                             &h);
39921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
40021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure we don't attempt to access any fields if the major version
40121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen   * is not supported.
40221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen   */
40321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (h.header_version_major > AVB_MAJOR_VERSION) {
40421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("No support for given major version.\n");
40521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
40621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
40721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
40821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure inner block sizes are multiple of 64. */
40921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if ((h.authentication_data_block_size & 0x3f) != 0 ||
41021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      (h.auxiliary_data_block_size & 0x3f) != 0) {
41121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Block size is not a multiple of 64.\n");
41221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
41321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
41421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
41521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure block sizes all add up to at most |length|. */
41621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  uint64_t block_total = sizeof(AvbVBMetaImageHeader);
41721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (!avb_safe_add_to(&block_total, h.authentication_data_block_size) ||
41821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      !avb_safe_add_to(&block_total, h.auxiliary_data_block_size)) {
41921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Overflow while computing size of boot image.\n");
42021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
42121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
42221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (block_total > length) {
42321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Block sizes add up to more than given length.\n");
42421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
42521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
42621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
42721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  uintptr_t data_ptr = (uintptr_t)data;
42821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure passed in memory doesn't wrap. */
42921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (!avb_safe_add(NULL, (uint64_t)data_ptr, length)) {
43021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Boot image location and length mismatch.\n");
43121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
43221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
43321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
43421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure hash and signature are entirely in the Authentication data block. */
43521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  uint64_t hash_end;
43621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (!avb_safe_add(&hash_end, h.hash_offset, h.hash_size) ||
43721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      hash_end > h.authentication_data_block_size) {
43821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Hash is not entirely in its block.\n");
43921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
44021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
44121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  uint64_t signature_end;
44221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (!avb_safe_add(&signature_end, h.signature_offset, h.signature_size) ||
44321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      signature_end > h.authentication_data_block_size) {
44421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Signature is not entirely in its block.\n");
44521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
44621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
44721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
44821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure public key is entirely in the Auxiliary data block. */
44921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  uint64_t pubkey_end;
45021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (!avb_safe_add(&pubkey_end, h.public_key_offset, h.public_key_size) ||
45121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      pubkey_end > h.auxiliary_data_block_size) {
45221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Public key is not entirely in its block.\n");
45321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
45421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
45521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
45618666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen  /* Ensure public key metadata (if set) is entirely in the Auxiliary
45718666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen   * data block. */
45818666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen  if (h.public_key_metadata_size > 0) {
45918666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen    uint64_t pubkey_md_end;
46018666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen    if (!avb_safe_add(&pubkey_md_end, h.public_key_metadata_offset,
46118666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen                      h.public_key_metadata_size) ||
46218666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen        pubkey_md_end > h.auxiliary_data_block_size) {
46318666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen      avb_error("Public key metadata is not entirely in its block.\n");
46418666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen      goto out;
46518666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen    }
46618666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen  }
46718666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen
46821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Ensure algorithm field is supported. */
46921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (h.algorithm_type >= _AVB_ALGORITHM_NUM_TYPES) {
47021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Invalid or unknown algorithm.\n");
47121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
47221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
47321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  algorithm = &algorithm_data[h.algorithm_type];
47421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
47521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Bail early if there's no hash or signature. */
47621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (h.algorithm_type == AVB_ALGORITHM_TYPE_NONE) {
47721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    ret = AVB_VBMETA_VERIFY_RESULT_OK_NOT_SIGNED;
47821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
47921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
48021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
48121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* Bail if the embedded hash size doesn't match the chosen algorithm. */
48221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (h.hash_size != algorithm->hash_len) {
48321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Embedded hash has wrong size.\n");
48421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
48521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
48621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
48721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  /* No overflow checks needed from here-on after since all block
48821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen   * sizes and offsets have been verified above.
48921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen   */
49021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
49121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  header_block = data;
49221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  authentication_block = header_block + sizeof(AvbVBMetaImageHeader);
49321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  auxiliary_block = authentication_block + h.authentication_data_block_size;
49421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
49521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  switch (h.algorithm_type) {
49621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* Explicit fall-through: */
49721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    case AVB_ALGORITHM_TYPE_SHA256_RSA2048:
49821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    case AVB_ALGORITHM_TYPE_SHA256_RSA4096:
49921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    case AVB_ALGORITHM_TYPE_SHA256_RSA8192:
50021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_sha256_init(&sha256_ctx);
50121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_sha256_update(&sha256_ctx, header_block,
50221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                        sizeof(AvbVBMetaImageHeader));
50321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_sha256_update(&sha256_ctx, auxiliary_block,
50421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                        h.auxiliary_data_block_size);
50521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      computed_hash = avb_sha256_final(&sha256_ctx);
50621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      break;
50721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    /* Explicit fall-through: */
50821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    case AVB_ALGORITHM_TYPE_SHA512_RSA2048:
50921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    case AVB_ALGORITHM_TYPE_SHA512_RSA4096:
51021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    case AVB_ALGORITHM_TYPE_SHA512_RSA8192:
51121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_sha512_init(&sha512_ctx);
51221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_sha512_update(&sha512_ctx, header_block,
51321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                        sizeof(AvbVBMetaImageHeader));
51421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_sha512_update(&sha512_ctx, auxiliary_block,
51521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                        h.auxiliary_data_block_size);
51621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      computed_hash = avb_sha512_final(&sha512_ctx);
51721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      break;
51821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    default:
51921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_error("Unknown algorithm.\n");
52021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      goto out;
52121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
52221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
52321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (avb_safe_memcmp(authentication_block + h.hash_offset, computed_hash,
52421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                      h.hash_size) != 0) {
52521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    avb_error("Hash does not match!\n");
52621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    ret = AVB_VBMETA_VERIFY_RESULT_HASH_MISMATCH;
52721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
52821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
52921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
53021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  verification_result =
53121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_rsa_verify(auxiliary_block + h.public_key_offset, h.public_key_size,
53221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                     authentication_block + h.signature_offset,
53321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                     h.signature_size, authentication_block + h.hash_offset,
53421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                     h.hash_size, algorithm->padding, algorithm->padding_len);
53521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
53621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  if (verification_result == 0) {
53721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    ret = AVB_VBMETA_VERIFY_RESULT_SIGNATURE_MISMATCH;
53821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen    goto out;
53921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  }
54021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
5410155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  if (h.public_key_size > 0) {
5420155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    if (out_public_key_data != NULL) {
5430155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      *out_public_key_data = auxiliary_block + h.public_key_offset;
5440155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    }
5450155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    if (out_public_key_length != NULL) {
5460155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      *out_public_key_length = h.public_key_size;
5470155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    }
5480155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  }
54921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
55021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  ret = AVB_VBMETA_VERIFY_RESULT_OK;
55121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
55221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenout:
55321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  return ret;
55421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen}
55521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
55621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenvoid avb_vbmeta_image_header_to_host_byte_order(const AvbVBMetaImageHeader* src,
55721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen                                                AvbVBMetaImageHeader* dest) {
55821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  avb_memcpy(dest, src, sizeof(AvbVBMetaImageHeader));
55921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
56021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->header_version_major = avb_be32toh(dest->header_version_major);
56121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->header_version_minor = avb_be32toh(dest->header_version_minor);
56221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
56321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->authentication_data_block_size =
56421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_be64toh(dest->authentication_data_block_size);
56521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->auxiliary_data_block_size =
56621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen      avb_be64toh(dest->auxiliary_data_block_size);
56721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
56821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->algorithm_type = avb_be32toh(dest->algorithm_type);
56921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
57021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->hash_offset = avb_be64toh(dest->hash_offset);
57121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->hash_size = avb_be64toh(dest->hash_size);
57221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
57321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->signature_offset = avb_be64toh(dest->signature_offset);
57421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->signature_size = avb_be64toh(dest->signature_size);
57521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
57621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->public_key_offset = avb_be64toh(dest->public_key_offset);
57721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->public_key_size = avb_be64toh(dest->public_key_size);
57821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
57918666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen  dest->public_key_metadata_offset =
58018666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen      avb_be64toh(dest->public_key_metadata_offset);
58118666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen  dest->public_key_metadata_size = avb_be64toh(dest->public_key_metadata_size);
58218666abc5d8276a743111e6c3608e66f6c85fb51David Zeuthen
58321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->descriptors_offset = avb_be64toh(dest->descriptors_offset);
58421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->descriptors_size = avb_be64toh(dest->descriptors_size);
58521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen
58621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen  dest->rollback_index = avb_be64toh(dest->rollback_index);
58721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen}
5880155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen
5890155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthenconst char* avb_vbmeta_verify_result_to_string(AvbVBMetaVerifyResult result) {
5900155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  const char* ret = NULL;
5910155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen
5920155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  switch (result) {
5930155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    case AVB_VBMETA_VERIFY_RESULT_OK:
5940155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      ret = "OK";
5950155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      break;
5960155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    case AVB_VBMETA_VERIFY_RESULT_OK_NOT_SIGNED:
5970155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      ret = "OK_NOT_SIGNED";
5980155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      break;
5990155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    case AVB_VBMETA_VERIFY_RESULT_INVALID_VBMETA_HEADER:
6000155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      ret = "INVALID_VBMETA_HEADER";
6010155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      break;
6020155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    case AVB_VBMETA_VERIFY_RESULT_HASH_MISMATCH:
6030155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      ret = "HASH_MISMATCH";
6040155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      break;
6050155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    case AVB_VBMETA_VERIFY_RESULT_SIGNATURE_MISMATCH:
6060155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      ret = "SIGNATURE_MISMATCH";
6070155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      break;
6080155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen      /* Do not add a 'default:' case here because of -Wswitch. */
6090155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  }
6100155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen
6110155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  if (ret == NULL) {
6120155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    avb_error("Unknown AvbVBMetaVerifyResult value.\n");
6130155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen    ret = "(unknown)";
6140155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  }
6150155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen
6160155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen  return ret;
6170155e6b158bdc5b3a442f16a5dc124d5dee9c71cDavid Zeuthen}
618