1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  *  http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19  /*******************************************************************************
20 *
21 * This software is a port of the open source MCUBoot project.
22 *
23 * This file was modified to fit PSoC6-based MCUBoot applications.
24 *
25 * Portions of this software, including source code, documentation and related
26 * materials ("Software"), are owned by Cypress Semiconductor
27 * Corporation or one of its subsidiaries ("Cypress") and is protected by
28 * and subject to worldwide patent protection (United States and foreign),
29 * United States copyright laws and international treaty provisions.
30 * Therefore, you may use this Software only as provided in the license
31 * agreement accompanying the software package from which you
32 * obtained this Software ("EULA").
33 *
34 * If no EULA applies, Cypress hereby grants you a personal, non-
35 * exclusive, non-transferable license to copy, modify, and compile the
36 * Software source code solely for use in connection with Cypress's
37 * integrated circuit products. Any reproduction, modification, translation,
38 * compilation, or representation of this Software except as specified
39 * above is prohibited without the express written permission of Cypress.
40 *
41 * Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO
42 * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING,
43 * BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
44 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
45 * PARTICULAR PURPOSE. Cypress reserves the right to make
46 * changes to the Software without notice. Cypress does not assume any
47 * liability arising out of the application or use of the Software or any
48 * product or circuit described in the Software. Cypress does not
49 * authorize its products for use in any products where a malfunction or
50 * failure of the Cypress product may reasonably be expected to result in
51 * significant property damage, injury or death ("High Risk Product"). By
52 * including Cypress's product in a High Risk Product, the manufacturer
53 * of such system or application assumes all risk of such use and in doing
54 * so agrees to indemnify Cypress against all liability.
55 *
56 ********************************************************************************/
57 #include <bootutil/sign_key.h>
58 #include <mcuboot_config/mcuboot_config.h>
59 
60 #if !defined(MCUBOOT_HW_KEY)
61 #if defined(MCUBOOT_SIGN_RSA)
62 const unsigned char rsa_pub_key[] = {
63     0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xd1, 0x06, 0x08,
64     0x1a, 0x18, 0x44, 0x2c, 0x18, 0xe8, 0xfb, 0xfd, 0xf7, 0x0d, 0xa3, 0x4f,
65     0x1f, 0xbb, 0xee, 0x5e, 0xf9, 0xaa, 0xd2, 0x4b, 0x18, 0xd3, 0x5a, 0xe9,
66     0x6d, 0x18, 0x80, 0x19, 0xf9, 0xf0, 0x9c, 0x34, 0x1b, 0xcb, 0xf3, 0xbc,
67     0x74, 0xdb, 0x42, 0xe7, 0x8c, 0x7f, 0x10, 0x53, 0x7e, 0x43, 0x5e, 0x0d,
68     0x57, 0x2c, 0x44, 0xd1, 0x67, 0x08, 0x0f, 0x0d, 0xbb, 0x5c, 0xee, 0xec,
69     0xb3, 0x99, 0xdf, 0xe0, 0x4d, 0x84, 0x0b, 0xaa, 0x77, 0x41, 0x60, 0xed,
70     0x15, 0x28, 0x49, 0xa7, 0x01, 0xb4, 0x3c, 0x10, 0xe6, 0x69, 0x8c, 0x2f,
71     0x5f, 0xac, 0x41, 0x4d, 0x9e, 0x5c, 0x14, 0xdf, 0xf2, 0xf8, 0xcf, 0x3d,
72     0x1e, 0x6f, 0xe7, 0x5b, 0xba, 0xb4, 0xa9, 0xc8, 0x88, 0x7e, 0x47, 0x3c,
73     0x94, 0xc3, 0x77, 0x67, 0x54, 0x4b, 0xaa, 0x8d, 0x38, 0x35, 0xca, 0x62,
74     0x61, 0x7e, 0xb7, 0xe1, 0x15, 0xdb, 0x77, 0x73, 0xd4, 0xbe, 0x7b, 0x72,
75     0x21, 0x89, 0x69, 0x24, 0xfb, 0xf8, 0x65, 0x6e, 0x64, 0x3e, 0xc8, 0x0e,
76     0xd7, 0x85, 0xd5, 0x5c, 0x4a, 0xe4, 0x53, 0x0d, 0x2f, 0xff, 0xb7, 0xfd,
77     0xf3, 0x13, 0x39, 0x83, 0x3f, 0xa3, 0xae, 0xd2, 0x0f, 0xa7, 0x6a, 0x9d,
78     0xf9, 0xfe, 0xb8, 0xce, 0xfa, 0x2a, 0xbe, 0xaf, 0xb8, 0xe0, 0xfa, 0x82,
79     0x37, 0x54, 0xf4, 0x3e, 0xe1, 0x2b, 0xd0, 0xd3, 0x08, 0x58, 0x18, 0xf6,
80     0x5e, 0x4c, 0xc8, 0x88, 0x81, 0x31, 0xad, 0x5f, 0xb0, 0x82, 0x17, 0xf2,
81     0x8a, 0x69, 0x27, 0x23, 0xf3, 0xab, 0x87, 0x3e, 0x93, 0x1a, 0x1d, 0xfe,
82     0xe8, 0xf8, 0x1a, 0x24, 0x66, 0x59, 0xf8, 0x1c, 0xab, 0xdc, 0xce, 0x68,
83     0x1b, 0x66, 0x64, 0x35, 0xec, 0xfa, 0x0d, 0x11, 0x9d, 0xaf, 0x5c, 0x3a,
84     0xa7, 0xd1, 0x67, 0xc6, 0x47, 0xef, 0xb1, 0x4b, 0x2c, 0x62, 0xe1, 0xd1,
85     0xc9, 0x02, 0x03, 0x01, 0x00, 0x01
86 };
87 const unsigned int rsa_pub_key_len = 270;
88 #elif defined(MCUBOOT_SIGN_EC256)
89 /* Format of PEM :
90  * -----BEGIN PUBLIC KEY-----
91  * base64encode(DER)
92  * -----END PUBLIC KEY----- */
93 #if defined(ECC256_KEY_FILE)
94 #include ECC256_KEY_FILE
95 #else
96 #warning "Used default ECC256 ecdsa_pub_key"
97 /* It is OEM_PUB_KEY at this moment for debug purposes */
98 const unsigned char ecdsa_pub_key[] = {
99     0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86,
100     0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a,
101     0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
102     0x42, 0x00, 0x04, 0xbd, 0x59, 0x9d, 0x15, 0xe0,
103     0xff, 0x66, 0x12, 0x37, 0x28, 0xdf, 0x50, 0x38,
104     0xb1, 0x9a, 0x73, 0x9b, 0xbd, 0xd1, 0xb3, 0x8a,
105     0x6f, 0xd2, 0x70, 0xed, 0x7f, 0xdb, 0x57, 0x53,
106     0xde, 0x9e, 0x77, 0x0f, 0x9c, 0x17, 0x22, 0x69,
107     0xa6, 0x75, 0x48, 0x1f, 0xa4, 0xbc, 0x49, 0xe2,
108     0x01, 0xe0, 0x5e, 0x3d, 0xec, 0xa8, 0xc1, 0xca,
109     0xc5, 0x5c, 0xa2, 0xc6, 0xfd, 0xb0, 0x24, 0xb1,
110     0x0a, 0x46, 0xf5,
111 };
112 const unsigned int ecdsa_pub_key_len = 91;
113 #endif
114 #else
115 #warning "No public key available for given signing algorithm."
116 #endif
117 
118 #if defined(MCUBOOT_SIGN_RSA) || \
119     defined(MCUBOOT_SIGN_EC256)
120 const struct bootutil_key bootutil_keys[] = {
121 #if defined(MCUBOOT_SIGN_RSA)
122     {
123         .key = rsa_pub_key,
124         .len = &rsa_pub_key_len,
125     },
126 #elif defined(MCUBOOT_SIGN_EC256)
127     {
128         .key = ecdsa_pub_key,
129         .len = &ecdsa_pub_key_len,
130     },
131 #else
132     {
133         .key = NULL,
134         .len = 0x00,
135     },
136 #endif
137 };
138 const int bootutil_key_cnt = 1;
139 #endif
140 #else
141 unsigned int pub_key_len;
142 struct bootutil_key bootutil_keys[1] = {
143     {
144         .key = 0,
145         .len = &pub_key_len,
146     }
147 };
148 const int bootutil_key_cnt = 1;
149 #endif /* !MCUBOOT_HW_KEY */
150 
151 unsigned char enc_priv_key[] = {
152   0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86,
153   0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
154   0x03, 0x01, 0x07, 0x04, 0x6d, 0x30, 0x6b, 0x02, 0x01, 0x01, 0x04, 0x20,
155   0xf6, 0x1e, 0x51, 0x9d, 0xf8, 0xfa, 0xdd, 0xa1, 0xb7, 0xd9, 0xa9, 0x64,
156   0x64, 0x3b, 0x54, 0xd0, 0x3d, 0xd0, 0x1f, 0xe5, 0x78, 0xd9, 0x17, 0x98,
157   0xa5, 0x28, 0xca, 0xcc, 0x6b, 0x67, 0x9e, 0x06, 0xa1, 0x44, 0x03, 0x42,
158   0x00, 0x04, 0x8a, 0x44, 0x73, 0x00, 0x94, 0xc9, 0x80, 0x27, 0x31, 0x0d,
159   0x23, 0x36, 0x6b, 0xe9, 0x69, 0x9f, 0xcb, 0xc5, 0x7c, 0xc8, 0x44, 0x1a,
160   0x93, 0xe6, 0xee, 0x7d, 0x86, 0xa6, 0xae, 0x5e, 0x93, 0x72, 0x74, 0xd9,
161   0xe1, 0x5a, 0x1c, 0x9b, 0x65, 0x1a, 0x2b, 0x61, 0x41, 0x28, 0x02, 0x73,
162   0x84, 0x12, 0x97, 0x3a, 0x2d, 0xa2, 0xa0, 0x67, 0x77, 0x02, 0xda, 0x67,
163   0x1a, 0x4b, 0xdd, 0xd7, 0x71, 0xcc,
164 };
165 static unsigned int enc_priv_key_len = 138;
166 const struct bootutil_key bootutil_enc_key = {
167     .key = enc_priv_key,
168     .len = &enc_priv_key_len,
169 };
170