> -----Original Message-----
> From: Stephen Warren [mailto:[email protected]]
> Sent: Monday, September 21, 2015 12:55 PM
> To: Jimmy Zhang
> Cc: Allen Martin; Stephen Warren; [email protected]
> Subject: Re: [cbootimage PATCH v1 1/8] Enable --update | -u option support
> for t210
>
> On 09/02/2015 03:19 PM, Jimmy Zhang wrote:
> > Added routines to allow updating pkc pubkey and rsa pss signatures.
>
> "pkc" and "pss" should be explained.
Do you mean it should be written like Public-Key Cryptography (pkc) and
Probabilistic Signature Scheme (pss)?
>
> > Specifically, added following configuration keywords:
> >
> > RsaKeyModulus: set pubkey
> > RsaPssSigBl: set bootloader rsa pss signature
> > RsaPssSigBct: set bct rsa pss signature
> >
> > Sample Configuration file update_bl_sig.cfg
> > RsaKeyModulus = pubkey.mod;
> > RsaPssSigBl = bl.sig;
>
> Oh, RsaKeyModulus is a file not an inline value? Better put "File" or
> "Filename" into the keywords then?
OK. We use filename inside configuration file for bct and boot loader. For
example, use keyword "BootLoader" to specify boot loader:
BootLoader = u-boot.bin,0x80108000,0x80108000,Complete;
Should the keywords be changed to:
RsaKeyModulusFile = <...>;
RsaPssSigBlFile = <...>;
>
> How can the user generate the value for RsaPssSigBct if this tool is
> generating
> the BCT? Why doesn't this tool generate the signatures itself internally?
>
This patch is only about option "--update". Signing function is added in patch
6 and 7.
To test out this patch, I used nv internal tool tegrasign to generate signature
files.
> > Commandline example:
> > $ cbootimage -s tegra210 -u update_bl_sig.cfg image.bin
> > image.bin-bl-signed
>
> This commit appears to be two unrelated changes squashed into one. This
> commit description is entirely unrelated to the commit subject for example.
>
> > diff --git a/src/cbootimage.c b/src/cbootimage.c
>
> > printf(" -u|--update Copy input image data and update
> bct\n");
> > printf(" configs into new image file.\n");
> > - printf(" This feature is only for
> > tegra114/124.\n");
> > + printf(" This feature is only for
> > tegra114/124/210.\n");
>
> I assume this feature will be enabled by default going forward. I think it'd
> be
> better to rephrase that as "This feature is not supported on Tegra20/30".
>
> BTW, is there a particular reason the feature won't work there? If not, can
> we simply enable it for all chips?
>
> > if (context->boot_data_version !=
> BOOTDATA_VERSION_T114 &&
> > - context->boot_data_version !=
> BOOTDATA_VERSION_T124) {
> > - printf("Update image feature is only for Tegra114 and
> Tegra124.\n");
> > + context->boot_data_version !=
> BOOTDATA_VERSION_T124 &&
> > + context->boot_data_version !=
> BOOTDATA_VERSION_T210) {
> > + printf("Update image feature is only for Tegra114,
> Tegra124"
> > + " and Tegra210.\n");
> > return -EINVAL;
>
> To avoid that if expanding forever, can it not check for == T20/30 rather than
> != all other chips?
>
>
I can split this patch into two patches.
"--update | -u" option was added since T114. If there is any needs for T20 and
T30, it can be added in.
> > diff --git a/src/cbootimage.h b/src/cbootimage.h
>
> > @@ -105,6 +109,7 @@ typedef struct build_image_context_rec
> > u_int32_t mts_attr;
> >
> > char *bct_filename;
> > + char *rsa_filename;
>
> RSA *what* filename? This patch introduces 3 different RSA-related
> keywords. A more complete variable name would be useful so it's obvious
> which keyword's value is being stored here. Comments would be useful too.
>
Agree. In fact, it was replaced by pkckey. I forgot to remove it.
> > diff --git a/src/parse.c b/src/parse.c
>
> > @@ -116,6 +118,9 @@ static parse_item s_top_level_items[] = {
> > { "ChipUid=", token_unique_chip_id, parse_value_chipuid
> },
> > { "JtagCtrl=", token_secure_jtag_control, parse_value_u32 },
> > { "DebugCtrl=", token_secure_debug_control,
> parse_value_u32 },
> > + { "RsaKeyModulus=", token_pub_key_modulus,
> parse_rsa_param },
>
> Why "RsaKey" in the keyword name but "pub_key" in the enumeration?
Agree. It is a bit confusion. I guess I generally followed what have been used
in nv internal tool. RsaKeyModulus is value n, ie p*q. pub_key in RSA scheme is
a pair value of (n, e). Since e is a constant 0x10001, RsaKeyModulus is then
simply handled as public key.
I will change pub_key_modulus to rsa_key_modulus.
>
> > diff --git a/src/set.c b/src/set.c
>
> > +int
> > +set_rsa_param(build_image_context *context, parse_token token,
> > + const char *filename)
> ...
> > + if (result || (actual_size != ARSE_RSA_PARAM_MAX_BYTES)) {
> > + if (result)
> > + printf("Error reading file %s.\n", filename);
> > + else
> > + printf("Error: invalid size, file %s.\n", filename);
> > + exit(1);
> > + }
>
> Since those are two entirely separate error cases, writing two entirely
> separate if conditions would be better:
>
> if (result) {
> printf
> exit
> }
> if (actual_size != ... {
> printf
> exit
> }
>
OK.
> > diff --git a/src/t210/nvbctlib_t210.c b/src/t210/nvbctlib_t210.c
>
> > @@ -2198,6 +2201,21 @@ t210_bct_set_value(parse_token id, void *data,
> u_int8_t *bct)
> > memcpy(&bct_ptr->unique_chip_id, data,
> sizeof(nvboot_ecid));
> > break;
> >
> > + case token_pub_key_modulus:
> > + memcpy(&bct_ptr->key, data,
> sizeof(nvboot_rsa_key_modulus));
> > + break;
> > +
> > + case token_rsa_pss_sig_bl:
> > + /* ONLY support one bl */
> > + memcpy(&bct_ptr->bootloader[0].signature.rsa_pss_sig,
> > + data, sizeof(nvboot_rsa_pss_sig));
>
> That comment is unfortunate. Can we not make this keyword an array, so
> that this limitation does not exist? If not, won't this require a
> non-backwards-compatible syntax change when we add support for more
> than
> one bootloader (which incidentally is a feature I expect will be
> implemented not too far down the road...)
Since day one, cbootimage can only support one boot loader. Ie, form a bootable
image that contains only one copy of bootloader. This is determined by
configuration file key word "BootLoader". I guess adding multi copies
bootloader support propably belongs to another series of patches.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html