|
46 | 46 | HDR_IMG_TYPE_AUTH_ED25519 = 0x0100 |
47 | 47 | HDR_IMG_TYPE_AUTH_ECC256 = 0x0200 |
48 | 48 | HDR_IMG_TYPE_AUTH_RSA2048 = 0x0300 |
| 49 | +HDR_IMG_TYPE_AUTH_RSA4096 = 0x0400 |
49 | 50 |
|
50 | 51 | HDR_IMG_TYPE_WOLFBOOT = 0x0000 |
51 | 52 | HDR_IMG_TYPE_APP = 0x0001 |
|
59 | 60 | argv = sys.argv |
60 | 61 |
|
61 | 62 | if (argc < 4) or (argc > 6): |
62 | | - print("Usage: %s [--ed25519 | --ecc256 | --rsa2048 ] [--wolfboot-update] image key.der fw_version\n" % sys.argv[0]) |
| 63 | + print("Usage: %s [--ed25519 | --ecc256 | --rsa2048 | --rsa4096 ] [--wolfboot-update] image key.der fw_version\n" % sys.argv[0]) |
63 | 64 | sys.exit(1) |
64 | 65 | for i in range(1, len(argv)): |
65 | 66 | if (argv[i] == '--ed25519'): |
|
68 | 69 | sign='ecc256' |
69 | 70 | elif (argv[i] == '--rsa2048'): |
70 | 71 | sign='rsa2048' |
| 72 | + elif (argv[i] == '--rsa4096'): |
| 73 | + sign='rsa4096' |
71 | 74 | elif (argv[i] == '--wolfboot-update'): |
72 | 75 | self_update = True |
73 | 76 | else: |
|
114 | 117 | if sign == 'auto': |
115 | 118 | sign = 'ecc256' |
116 | 119 | print("'ecc256' key autodetected.") |
| 120 | +elif (wolfboot_private_key_len > 512): |
| 121 | + if (sign == 'auto'): |
| 122 | + print("'rsa4096' key autodetected.") |
117 | 123 | elif (wolfboot_private_key_len > 128): |
118 | 124 | if (sign == 'auto'): |
119 | 125 | print("'rsa2048' key autodetected.") |
|
134 | 140 | pubkey = wolfboot_private_key[0:64] |
135 | 141 |
|
136 | 142 | if sign == 'rsa2048': |
137 | | - WOLFBOOT_HEADER_SIZE = 512 |
| 143 | + WOLFBOOT_HEADER_SIZE = 512 |
138 | 144 | HDR_SIGNATURE_LEN = 256 |
139 | 145 | rsa = ciphers.RsaPrivate(wolfboot_private_key) |
140 | 146 | privkey,pubkey = rsa.encode_key() |
141 | 147 |
|
| 148 | +if sign == 'rsa4096': |
| 149 | + WOLFBOOT_HEADER_SIZE = 1024 |
| 150 | + HDR_SIGNATURE_LEN = 512 |
| 151 | + rsa = ciphers.RsaPrivate(wolfboot_private_key) |
| 152 | + privkey,pubkey = rsa.encode_key() |
| 153 | + |
142 | 154 |
|
143 | 155 | img_size = os.path.getsize(image_file) |
144 | 156 | # Magic header (spells 'WOLF') |
145 | 157 | header = struct.pack('<L', WOLFBOOT_MAGIC) |
146 | | -# Image size |
| 158 | +# Image size |
147 | 159 | header += struct.pack('<L', img_size) |
148 | 160 |
|
149 | 161 | # No pad bytes, version is aligned |
|
168 | 180 | img_type = HDR_IMG_TYPE_AUTH_ECC256 |
169 | 181 | if (sign == 'rsa2048'): |
170 | 182 | img_type = HDR_IMG_TYPE_AUTH_RSA2048 |
| 183 | +if (sign == 'rsa4096'): |
| 184 | + img_type = HDR_IMG_TYPE_AUTH_RSA4096 |
171 | 185 |
|
172 | 186 | if (not self_update): |
173 | 187 | img_type |= HDR_IMG_TYPE_APP |
|
209 | 223 | elif (sign == 'ecc256'): |
210 | 224 | r, s = ecc.sign_raw(digest) |
211 | 225 | signature = r + s |
212 | | -elif (sign == 'rsa2048'): |
| 226 | +elif (sign == 'rsa2048') or (sign == 'rsa4096'): |
213 | 227 | signature = rsa.sign(digest) |
214 | 228 | #plain = rsa.verify(signature) |
215 | 229 | #print("plain:%d " % len(plain)) |
|
0 commit comments