diff --git a/.gitattributes b/.gitattributes index 861176c..8d35638 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ # Preserve upstream firmware and notice bytes exactly, including line endings. *.bin binary +*.fw binary LICENSES/* -text -whitespace diff --git a/LICENSES/qcom-adreno.txt b/LICENSES/qcom-adreno.txt new file mode 100644 index 0000000..faacf9c --- /dev/null +++ b/LICENSES/qcom-adreno.txt @@ -0,0 +1,206 @@ +PLEASE READ THIS LICENSE AGREEMENT ("AGREEMENT") CAREFULLY. THIS AGREEMENT IS +A BINDING LEGAL AGREEMENT ENTERED INTO BY AND BETWEEN YOU (OR IF YOU ARE +ENTERING INTO THIS AGREEMENT ON BEHALF OF AN ENTITY, THEN THE ENTITY THAT YOU +REPRESENT) AND QUALCOMM TECHNOLOGIES, INC. ("QTI" "WE" "OUR" OR "US"). THIS IS +THE AGREEMENT THAT APPLIES TO YOUR USE OF THE DESIGNATED AND/OR LINKED +APPLICATIONS, THE ENCLOSED QUALCOMM TECHNOLOGIES' MATERIALS, INCLUDING RELATED +DOCUMENTATION AND ANY UPDATES OR IMPROVEMENTS THEREOF +(COLLECTIVELY, "MATERIALS"). BY USING OR COMPLETING THE INSTALLATION OF THE +MATERIALS, YOU ARE ACCEPTING THIS AGREEMENT AND YOU AGREE TO BE BOUND BY ITS +TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO THESE TERMS, QTI IS UNWILLING TO +AND DOES NOT LICENSE THE MATERIALS TO YOU. IF YOU DO NOT AGREE TO THESE TERMS +YOU MUST DISCONTINUE THE INSTALLATION PROCESS AND YOU MAY NOT USE THE MATERIALS +OR RETAIN ANY COPIES OF THE MATERIALS. ANY USE OR POSSESSION OF THE MATERIALS +BY YOU IS SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT. + +1. RIGHT TO USE DELIVERABLES; RESTRICTIONS. + + 1.1 License. Subject to the terms and conditions of this Agreement, + including, without limitation, the restrictions, conditions, limitations and + exclusions set forth in this Agreement, QTI hereby grants to you a + nonexclusive, limited license under QTI's copyrights to: (i) install and use + the Materials; and (ii) to reproduce and redistribute the binary code portions + of the Materials (the "Redistributable Binary Code"). You may make and use a + reasonable number of copies of any documentation. + + 1.2 Redistribution Restrictions. Distribution of the Redistributable Binary + Code is subject to the following restrictions: (i) Redistributable Binary Code + may only be distributed in binary format and may not be distributed in source + code format:; (ii) the Redistributable Binary Code may only operate in + conjunction with platforms incorporating Qualcomm Technologies, Inc. chipsets; + (iii) redistribution of the Redistributable Binary Code must include the .txt + file setting forth the terms and condition of this Agreement; (iv) you may not + use Qualcomm Technologies' or its affiliates or subsidiaries name, logo or + trademarks; and (v) copyright, trademark, patent and any other notices that + appear on the Materials may not be removed or obscured. + + 1.3 Additional Restrictions. Except as expressly permitted by this Agreement, + you shall have no right to sublicense, transfer or otherwise disclose the + Materials to any third party. You shall not reverse engineer, reverse + assemble, reverse translate, decompile or reduce to source code form any + portion of the Materials provided in object code form or executable form. + Except for the purposes expressly permitted in this Agreement, You shall not + use the Materials for any other purpose. QTI (or its licensors) shall retain + title and all ownership rights in and to the Materials and any alterations, + modifications (including all derivative works), translations or adaptations + made of the Materials, and all copies thereof, and nothing herein shall be + deemed to grant any right to You under any of QTI's or its affiliates' + patents. You shall not subject the Materials to any third party license + terms (e.g., open source license terms). You shall not use the Materials for + the purpose of identifying or providing evidence to support any potential + patent infringement claim against QTI, its affiliates, or any of QTI's or + QTI's affiliates' suppliers and/or direct or indirect customers. QTI hereby + reserves all rights not expressly granted herein. + + 1.4 Third Party Software and Materials. The Software may contain or link to + certain software and/or materials that are written or owned by third parties. + Such third party code and materials may be licensed under separate or + different terms and conditions and are not licensed to you under the terms of + this Agreement. You agree to comply with all terms and conditions imposed on + you in the applicable third party licenses. Such terms and conditions may + impose certain obligations on you as a condition to the permitted use of such + third party code and materials. QTI does not represent or warrant that such + third party licensors have or will continue to license or make available their + code and materials to you. + + 1.5 Feedback. QTI may from time to time receive suggestions, feedback or + other information from You regarding the Materials. Any suggestions, feedback + or other disclosures received from You are and shall be entirely voluntary on + the part of You. Notwithstanding any other term in this Agreement, QTI shall + be free to use suggestions, feedback or other information received from You, + without obligation of any kind to You. The Parties agree that all inventions, + product improvements, and modifications conceived of or made by QTI that are + based, either in whole or in part, on ideas, feedback, suggestions, or + recommended improvements received from You are the exclusive property of QTI, + and all right, title and interest in and to any such inventions, product + improvements, and modifications will vest solely in QTI. + + 1.6 No Technical Support. QTI is under no obligation to provide any form of + technical support for the Materials, and if QTI, in its sole discretion, + chooses to provide any form of support or information relating to the + Materials, such support and information shall be deemed confidential and + proprietary to QTI. + +2. WARRANTY DISCLAIMER. YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT THE USE OF +THE MATERIALS IS AT YOUR SOLE RISK. THE MATERIALS AND TECHNICAL SUPPORT, IF +ANY, ARE PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR +IMPLIED. QTI ITS LICENSORS AND AFFILIATES MAKE NO WARRANTIES, EXPRESS OR +IMPLIED, WITH RESPECT TO THE MATERIALS OR ANY OTHER INFORMATION OR DOCUMENTATION +PROVIDED UNDER THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR +ANY EXPRESS OR IMPLIED WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE OF +DEALING OR COURSE OF PERFORMANCE. NOTHING CONTAINED IN THIS AGREEMENT SHALL BE +CONSTRUED AS (I) A WARRANTY OR REPRESENTATION BY QTI, ITS LICENSORS OR +AFFILIATES AS TO THE VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER +INTELLECTUAL PROPERTY RIGHT OR (II) A WARRANTY OR REPRESENTATION BY QTI THAT ANY +MANUFACTURE OR USE WILL BE FREE FROM INFRINGEMENT OF PATENTS, COPYRIGHTS OR +OTHER INTELLECTUAL PROPERTY RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE +RESPONSIBILITY OF YOU TO MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT TO +THE ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY OF +THIRD PARTIES. + +3. NO OTHER LICENSES OR INTELLECTUAL PROPERTY RIGHTS. Neither this Agreement, +nor any act by QTI or any of its affiliates pursuant to this Agreement or +relating to the Materials (including, without limitation, the provision by QTI +or its affiliates of the Materials), shall provide to You any license or any +other rights whatsoever under any patents, trademarks, trade secrets, copyrights +or any other intellectual property of QTI or any of its affiliates, except for +the copyright rights expressly licensed under this Agreement. You understand and +agree that: + + (i) Neither this Agreement, nor delivery of the Materials, grants any right to + practice, or any other right at all with respect to, any patent of QTI or any + of its affiliates; and + + (ii) A separate license agreement from QUALCOMM Incorporated is needed to use + or practice any patent of QUALCOMM Incorporated. You agree not to contend in + any context that, as a result of the provision or use of the Materials, either + QTI or any of its affiliates has any obligation to extend, or You or any other + party has obtained any right to, any license, whether express or implied, with + respect to any patent of QTI or any of its affiliates for any purpose. + +4. TERMINATION. This Agreement shall be effective upon acceptance, or access or +use of the Materials (whichever occurs first) by You and shall continue until +terminated. You may terminate the Agreement at any time by deleting and +destroying all copies of the Materials and all related information in Your +possession or control. This Agreement terminates immediately and automatically, +with or without notice, if You fail to comply with any provision hereof. +Additionally, QTI may at any time terminate this Agreement, without cause, upon +notice to You. Upon termination You must, to the extent possible, delete or +destroy all copies of the Materials in Your possession and the license granted +to You in this Agreement shall terminate. Sections 1.2 through 10 shall survive +the termination of this Agreement. In the event that any restrictions, +conditions, limitations are found to be either invalid or unenforceable, the +rights granted to You in Section 1 (License) shall be null, void and ineffective +from the Effective Date, and QTI shall also have the right to terminate this +Agreement immediately, and with retroactive effect to the effective date. + +5. LIMITATION OF LIABILITY. IN NO EVENT SHALL QTI, QTI's AFFILIATES OR ITS +LICENSORS BE LIABLE TO YOU FOR ANY INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, +INCLUDING BUT NOT LIMITED TO ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL +DAMAGES, ARISING OUT OF THE USE OR INABILITY TO USE, OR THE DELIVERY OR FAILURE +TO DELIVER, ANY OF THE DELIVERABLES, OR ANY BREACH OF ANY OBLIGATION UNDER THIS +AGREEMENT, EVEN IF QTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +THE FOREGOING LIMITATION OF LIABILITY SHALL REMAIN IN FULL FORCE AND EFFECT +REGARDLESS OF WHETHER YOUR REMEDIES HEREUNDER ARE DETERMINED TO HAVE FAILED OF +THEIR ESSENTIAL PURPOSE. THE ENTIRE LIABILITY OF QTI, QTI's AFFILIATES AND ITS +LICENSORS, AND THE SOLE AND EXCLUSIVE REMEDY OF YOU, FOR ANY CLAIM OR CAUSE OF +ACTION ARISING HEREUNDER (WHETHER IN CONTRACT, TORT, OR OTHERWISE) SHALL NOT +EXCEED US$50. + +6. INDEMNIFICATION. You agree to indemnify and hold harmless QTI and its +officers, directors, employees and successors and assigns against any and all +third party claims, demands, causes of action, losses, liabilities, damages, +costs and expenses, incurred by QTI (including but not limited to costs of +defense, investigation and reasonable attorney's fees) arising out of, resulting +from or related to: (i) any breach of this Agreement by You; and (ii) your acts, +omissions, products and services. If requested by QTI, You agree to defend QTI +in connection with any third party claims, demands, or causes of action +resulting from, arising out of or in connection with any of the foregoing. + +7. ASSIGNMENT. You shall not assign this Agreement or any right or interest +under this Agreement, nor delegate any obligation to be performed under this +Agreement, without QTI's prior written consent. For purposes of this Section 7, +an "assignment" by You under this Section shall be deemed to include, without +limitation, any merger, consolidation, sale of all or substantially all of its +assets, or any substantial change in the management or control of You. +Any attempted assignment in contravention of this Section 9 shall be void. +QTI may freely assign this Agreement or delegate any or all of its rights and +obligations hereunder to any third party. + +8. COMPLIANCE WITH LAWS; APPLICABLE LAW. You agree to comply with all +applicable local, international and national laws and regulations and with U.S. +Export Administration Regulations, as they apply to the subject matter of this +Agreement. This Agreement is governed by the laws of the State of California, +excluding California's choice of law rules. + +9. CONTRACTING PARTIES. If the Materials are downloaded on any computer owned +by a corporation or other legal entity, then this Agreement is formed by and +between QTI and such entity. The individual accepting the terms of this +Agreement represents and warrants to QTI that they have the authority to bind +such entity to the terms and conditions of this Agreement. + +10. MISCELLANEOUS PROVISIONS. This Agreement, together with all exhibits +attached hereto, which are incorporated herein by this reference, constitutes +the entire agreement between QTI and You and supersedes all prior negotiations, +representations and agreements between the parties with respect to the subject +matter hereof. No addition or modification of this Agreement shall be effective +unless made in writing and signed by the respective representatives of QTI and +You. The restrictions, limitations, exclusions and conditions set forth in this +Agreement shall apply even if QTI or any of its affiliates becomes aware of or +fails to act in a manner to address any violation or failure to comply +therewith. You hereby acknowledge and agree that the restrictions, limitations, +conditions and exclusions imposed in this Agreement on the rights granted in +this Agreement are not a derogation of the benefits of such rights. You further +acknowledges that, in the absence of such restrictions, limitations, conditions +and exclusions, QTI would not have entered into this Agreement with You. Each +party shall be responsible for and shall bear its own expenses in connection +with this Agreement. If any of the provisions of this Agreement are determined +to be invalid, illegal, or otherwise unenforceable, the remaining provisions +shall remain in full force and effect. This Agreement is entered into solely +in the English language, and if for any reason any other language version is +prepared by any party, it shall be solely for convenience and the English +version shall govern and control all aspects. If You are located in the +province of Quebec, Canada, the following applies: The Parties hereby confirm +they have requested this Agreement and all related documents be prepared +in English. diff --git a/LICENSES/qcom-notice.txt b/LICENSES/qcom-notice.txt new file mode 100644 index 0000000..184f88f --- /dev/null +++ b/LICENSES/qcom-notice.txt @@ -0,0 +1,506 @@ +This NOTICE.txt file contains certain notices Qualcomm Technologies, Inc. ("QTI") +is required to provide with certain software components. Notwithstanding anything +in the notices in this file, your use of such software components together with +the QTI software ("Software") is subject to the terms of your separate license +from QTI. Compliance with all copyright laws and software licenses included in +this file are the responsibility of the user. Except as may be granted by +separate express written agreement, this file provides no license to any +patents, trademarks, copyrights, or other intellectual property of QTI or its +affiliates. +Software provided with this notice is NOT A CONTRIBUTION to any open source +project. If alternative licensing is available for any of the components with +licenses or attributions provided below, a license choice is made for receiving +such code by QTI. + +Copyright (c) 2013-2017 Qualcomm Technologies, Inc. All rights reserved. + +Qualcomm is a trademark of Qualcomm Incorporated, registered in the +United States and other countries. All Qualcomm Incorporated trademarks are used +with permission. Other products and brand names may be trademarks or registered +trademarks of their respective owners. + + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style + Open Source licenses. In case of any license issues related to OpenSSL + please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + + +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + +/* ==================================================================== + * Copyright (C) 1995-2005 Jean-loup Gailly + * Copyright (C) 1995-2009 Mark Adler + * Copyright (C) 1995-2003, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + + + /* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + + +------------------------------------------------------------------------------ + + // +// Copyright (c) 2004-2006 Qualphone, Inc. All rights reserved. +// +// +/* + * This code implements the MD5 message-digest algorithm. + * The algorithm is due to Ron Rivest. This code was + * written by Colin Plumb in 1993, no copyright is claimed. + * This code is in the public domain; do with it what you wish. + * + * Equivalent code is available from RSA Data Security, Inc. + * This code has been tested against that, and is equivalent, + * except that you don't need to include two pages of legalese + * with every copy. + * + * To compute the message digest of a chunk of bytes, declare an + * MD5Context structure, pass it to MD5Init, call MD5Update as + * needed on buffers full of bytes, and then call MD5Final, which + * will fill a supplied 16-byte array with the digest. + */ + + +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + + + +/* + * Written by Aaron D. Gifford + * + * Copyright 2000 Aaron D. Gifford. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + +/*- + * COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or + * code or tables extracted from it, as desired without restriction. + * + * First, the polynomial itself and its table of feedback terms. The + * polynomial is + * X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 + * + * Note that we take it "backwards" and put the highest-order term in + * the lowest-order bit. The X^32 term is "implied"; the LSB is the + * X^31 term, etc. The X^0 term (usually shown as "+1") results in + * the MSB being 1 + * + * Note that the usual hardware shift register implementation, which + * is what we're using (we're merely optimizing it by doing eight-bit + * chunks at a time) shifts bits into the lowest-order term. In our + * implementation, that means shifting towards the right. Why do we + * do it this way? Because the calculated CRC must be transmitted in + * order from highest-order term to lowest-order term. UARTs transmit + * characters in order from LSB to MSB. By storing the CRC this way + * we hand it to the UART in the order low-byte to high-byte; the UART + * sends each low-bit to hight-bit; and the result is transmission bit + * by bit from highest- to lowest-order term without requiring any bit + * shuffling on our part. Reception works similarly + * + * The feedback terms table consists of 256, 32-bit entries. Notes + * + * The table can be generated at runtime if desired; code to do so + * is shown later. It might not be obvious, but the feedback + * terms simply represent the results of eight shift/xor opera + * tions for all combinations of data and CRC register values + * + * The values must be right-shifted by eight bits by the "updcrc + * logic; the shift must be unsigned (bring in zeroes). On some + * hardware you could probably optimize the shift in assembler by + * using byte-swap instructions + * polynomial $edb88320 + * + + + ------------------------------------------------------------------------------ + + /* + The AES algorithm Rijndael implemented for block and key sizes of 128, + 192 and 256 bits (16, 24 and 32 bytes) by Brian Gladman. + + I retain copyright in this code but I encourage its free use provided + that I don't carry any responsibility for the results. I am especially + happy to see it used in free and open source software. If you do use + it I would appreciate an acknowledgement of its origin in the code or + the product that results and I would also appreciate knowing a liitle + about the use to which it is being put. I am grateful to Frank Yellin + for some ideas that are used in this implementation. + + Dr B. R. Gladman 1st June 2001. + + ------------------------------------------------------------------------------ + + /* + * hash_32 - 32 bit Fowler/Noll/Vo hash code + * + * Fowler/Noll/Vo hash + * + * Please do not copyright this code. This code is in the public domain. + * + * LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO + * EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + ------------------------------------------------------------------------------ + /* + * sha1.c + * + * Originally witten by Steve Reid + * + * Modified by Aaron D. Gifford + * + * NO COPYRIGHT - THIS IS 100% IN THE PUBLIC DOMAIN + * + * The original unmodified version is available at: + * ftp://ftp.funet.fi/pub/crypt/hash/sha/sha1.c + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +------------------------------------------------------------------------------ + +/* + * AES-based functions + * + * - AES Key Wrap Algorithm (128-bit KEK) (RFC3394) + * - One-Key CBC MAC (OMAC1) hash with AES-128 + * - AES-128 CTR mode encryption + * - AES-128 EAX mode encryption/decryption + * - AES-128 CBC + * + * Copyright (c) 2003-2005, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + ------------------------------------------------------------------------------ + /* + * SHA1 hash implementation and interface functions + * Copyright (c) 2003-2005, Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Alternatively, this software may be distributed under the terms of BSD + * license. + * + * See README and COPYING for more details. + */ + ------------------------------------------------------------------------------ + /* + * hmac_sha1.c + * + * Version 1.0.0 + * + * Written by Aaron D. Gifford + * + * Copyright 1998, 2000 Aaron D. Gifford. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + +/* +* AUTHOR: Aaron D. Gifford +* +* Copyright (c) 2000-2001, Aaron D. Gifford +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. Neither the name of the copyright holder nor the names of contributors +* may be used to endorse or promote products derived from this software +* without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGE. +*/ + +------------------------------------------------------------------------------ + +/* + * Copyright (c) 1998 Todd C. Miller + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + ------------------------------------------------------------------------------ + + /* + * Copyright (c) 1998 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ diff --git a/README.md b/README.md index 7235043..c4ad834 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ all catalogued binaries are present in the checkout. No per-vendor fetch step is needed, and verification works offline. The catalog contains seven Intel images pinned by Kore and the Realtek RTL8922AE -image pinned by Kore PR #936, plus the AMDGPU development set described below. The +image pinned by Kore PR #936, plus the AMDGPU development set and the Qualcomm +Adreno microcode described below. The layout accepts additional vendors and device families as their firmware is reviewed; inclusion does not imply that a consuming driver supports the device. @@ -16,6 +17,7 @@ reviewed; inclusion does not imply that a consuming driver supports the device. | Intel GPU (`intel/xe`) | MTL / DG2 GuC | [Intel GPU](LICENSES/intel-guc.txt) | | Intel GPU (`intel/xe`) | LNL / BMG GuC | [Intel Xe](LICENSES/intel-xe.txt) | | AMD GPU (`amd/amdgpu`) | GC 11/12 and companion PSP / SMU / SDMA development inventory | [AMD](LICENSES/amd-amdgpu.txt) | +| Qualcomm GPU (`qcom/adreno`) | Adreno X1-45 and X2-85 SQE / GMU / AQE microcode | [Qualcomm](LICENSES/qcom-adreno.txt) with [notices](LICENSES/qcom-notice.txt) | | Realtek Wi-Fi (`realtek/rtw89`) | RTL8922AE format-4 container | [Realtek](LICENSES/realtek-rtw89.txt) | The Realtek container is stored under the consumer name `rtw8922a_fw.bin`; @@ -40,12 +42,36 @@ inclusion verifies storage provenance, not runtime compatibility or hardware support. Kore’s AMD acceptance manifest remains unpinned until loader research establishes those contracts. +## Qualcomm Adreno microcode + +The five Qualcomm images are the generic, SoC-wide GPU microcode from +linux-firmware commit `fb0889c0d3dec1e10a9a593a2602e832a752cd2f` (unchanged +at upstream HEAD on 2026-10-21), stored under their upstream names: + +| GPU | Chip ID | Images | WHENCE versions | +| --- | --- | --- | --- | +| Adreno X1-45 (Snapdragon X, X1P42100 "Purwa") | `0x43030c00` | `gen71500_sqe.fw`, `gen71500_gmu.bin` | SQE v1.81, GMU v4.06.04 | +| Adreno X2-85 (Snapdragon X2 Elite, "Glymur") | `0x44070001` | `gen80100_sqe.fw`, `gen80100_gmu.bin`, `gen80100_aqe.fw` | SQE v1.00, GMU v5.02.26, AQE v0.30 | + +The upstream msm driver loads SQE and GMU for both GPUs; `gen80100_aqe.fw` is +published alongside the X2-85 set but is not referenced by the upstream X2-85 +catalog entry at the time of import. Qualcomm’s terms require the license text +and its NOTICE file to accompany redistribution, restrict use to platforms with +Qualcomm chipsets, and forbid reverse engineering the binaries. + +Zap shaders and remote-processor images (`*_zap.mbn`, `qcdxkmsuc*.mbn`, +`qccdsp*.mbn`, `cdsp_dtbs.elf`, and similar) are deliberately excluded. They are +signed for a specific SoC or OEM key and authenticated by TrustZone, so a given +machine needs the copy signed for it, which comes from that machine’s own +firmware rather than from this catalog. + ## Catalog and verification [`manifest.toml`](manifest.toml) maps each stable image ID to its vendor, family, repository-relative filename, byte size, BLAKE3 digest, exact upstream source -commit/path, and license entry. License entries retain their own source and -BLAKE3 digest. Original binary bytes and notice texts are preserved unchanged. +commit/path, and license entry. An image may also list `notices`: additional +license entries (such as a vendor NOTICE file) that must accompany it. License +entries retain their own source and BLAKE3 digest. Original binary bytes and notice texts are preserved unchanged. With Python 3.11+ and `b3sum`: diff --git a/manifest.toml b/manifest.toml index 23f66b7..44066eb 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1424,3 +1424,63 @@ size = 327424 blake3 = "a2370afb2095bda6721702714f7784e95d9be5c0ab324a01ea72c0d518bb170c" source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:amdgpu/smu_14_0_3_kicker.bin" license = "amdgpu" + +[licenses.qcom-adreno] +file = "LICENSES/qcom-adreno.txt" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:LICENSE.qcom" +blake3 = "36c402e893d3ed5c0afd6eb54a5c5be36633cc2f49f72e8f50bd3aed5cc60508" + +[licenses.qcom-notice] +file = "LICENSES/qcom-notice.txt" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:qcom/NOTICE.txt" +blake3 = "0399cc9615048b0c327af0a4569a7afbb68074e0760eacc61e1b8d5a00d74eef" + +[firmware.qcom_gen71500_sqe] +vendor = "qcom" +family = "adreno" +file = "qcom/adreno/gen71500_sqe.fw" +size = 67348 +blake3 = "5d591ca5445d92089a7d0180d30ea4187a48f4ba336f783850510a97262d2d03" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:qcom/gen71500_sqe.fw" +license = "qcom-adreno" +notices = ["qcom-notice"] + +[firmware.qcom_gen71500_gmu] +vendor = "qcom" +family = "adreno" +file = "qcom/adreno/gen71500_gmu.bin" +size = 80268 +blake3 = "1bfea4508b9cddbfd4c515d5bbc7403069e558e8f169906ac7447e34c45d2cc4" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:qcom/gen71500_gmu.bin" +license = "qcom-adreno" +notices = ["qcom-notice"] + +[firmware.qcom_gen80100_sqe] +vendor = "qcom" +family = "adreno" +file = "qcom/adreno/gen80100_sqe.fw" +size = 119828 +blake3 = "5ba4e3ef13817738e53d177a94dd35579e3ca71ba46c69422d5830cd50bc7c64" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:qcom/gen80100_sqe.fw" +license = "qcom-adreno" +notices = ["qcom-notice"] + +[firmware.qcom_gen80100_gmu] +vendor = "qcom" +family = "adreno" +file = "qcom/adreno/gen80100_gmu.bin" +size = 117596 +blake3 = "e6cb58d470208182a77962dc8c9b53768c7c87422d739370c243d102ac9e19b8" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:qcom/gen80100_gmu.bin" +license = "qcom-adreno" +notices = ["qcom-notice"] + +[firmware.qcom_gen80100_aqe] +vendor = "qcom" +family = "adreno" +file = "qcom/adreno/gen80100_aqe.fw" +size = 31940 +blake3 = "61721e0cc7b750ecfd9b60b4b7575399c769ccee0dd3d6286f55fd97f4576d42" +source = "kernelorg-mirror/linux_kernel_git_firmware_linux-firmware@fb0889c0d3dec1e10a9a593a2602e832a752cd2f:qcom/gen80100_aqe.fw" +license = "qcom-adreno" +notices = ["qcom-notice"] diff --git a/qcom/adreno/gen71500_gmu.bin b/qcom/adreno/gen71500_gmu.bin new file mode 100644 index 0000000..4814e48 Binary files /dev/null and b/qcom/adreno/gen71500_gmu.bin differ diff --git a/qcom/adreno/gen71500_sqe.fw b/qcom/adreno/gen71500_sqe.fw new file mode 100644 index 0000000..944a6af Binary files /dev/null and b/qcom/adreno/gen71500_sqe.fw differ diff --git a/qcom/adreno/gen80100_aqe.fw b/qcom/adreno/gen80100_aqe.fw new file mode 100644 index 0000000..fd6c86d Binary files /dev/null and b/qcom/adreno/gen80100_aqe.fw differ diff --git a/qcom/adreno/gen80100_gmu.bin b/qcom/adreno/gen80100_gmu.bin new file mode 100644 index 0000000..7f8947a Binary files /dev/null and b/qcom/adreno/gen80100_gmu.bin differ diff --git a/qcom/adreno/gen80100_sqe.fw b/qcom/adreno/gen80100_sqe.fw new file mode 100644 index 0000000..a6c1105 Binary files /dev/null and b/qcom/adreno/gen80100_sqe.fw differ diff --git a/test_verify.py b/test_verify.py index 14e90f9..b1bc909 100644 --- a/test_verify.py +++ b/test_verify.py @@ -37,6 +37,14 @@ def test_path_escape(self): with self.assertRaisesRegex(ValueError, 'path escapes catalog'): verify.verify(self.root, ['b3sum']) + def test_missing_notice_mapping(self): + path = self.root / 'manifest.toml' + text = path.read_text() + self.assertIn('notices = ["qcom-notice"]', text) + path.write_text(text.replace('notices = ["qcom-notice"]', 'notices = ["qcom-missing"]', 1)) + with self.assertRaisesRegex(ValueError, 'missing license mapping'): + verify.verify(self.root, ['b3sum']) + if __name__ == '__main__': unittest.main() diff --git a/verify.py b/verify.py index c7ed11c..72c3b6b 100644 --- a/verify.py +++ b/verify.py @@ -42,8 +42,12 @@ def verify(root, hasher): raise ValueError(f"missing vendor/family: {name}") if not re.fullmatch(r"[^@]+@[0-9a-f]{40}:.+", entry["source"]): raise ValueError(f"source must pin a full commit: {name}") - if entry["license"] not in catalog["licenses"]: - raise ValueError(f"missing license mapping: {name}") + notices = entry.get("notices", []) + if not isinstance(notices, list) or len(set(notices)) != len(notices): + raise ValueError(f"notices must be a list of distinct license entries: {name}") + for notice in [entry["license"], *notices]: + if notice not in catalog["licenses"]: + raise ValueError(f"missing license mapping: {name}") if path.stat().st_size != entry["size"] or digest(path, hasher) != entry["blake3"]: raise ValueError(f"firmware size or digest mismatch: {name}") print(f"firmware: verified {len(paths)} blobs and {len(catalog['licenses'])} license notices")