On 10/09/2015 07:46 PM, Jimmy Zhang wrote:
Create new configuration keywords:
    RsaKeyModulusFile: pubkey modulus
    RsaPssSigBlFile:   bootloader rsa pss signature
    RsaPssSigBctFile:  bct rsa pss signature

Sample Configuration file update_bl_sig.cfg
    RsaKeyModulusFile = pubkey.mod;
    RsaPssSigBlFile = bl.sig;

where pubkey.mod and bl.sig are files that contain the public key
modulus and bootloader's rsa-pss signature respectively.

public key modulus and signature are created through utilities
outside cbootimage.

Command line example:
  $ cbootimage -s tegra210 -u update_bl_sig.cfg image.bin image.bin-bl-signed

Above three new keywords added in this CL are only implemented support
for T210.

I'd like to see a changelog per patch so I don't have to refer back to the cover letter each time.

diff --git a/src/crypto.c b/src/crypto.c

+void
+swap_endianness(

Nit: It's more like "byte order" (serialization) rather than endianness, although they're related concepts.

+       u_int8_t *out,
+       u_int8_t *in,

Nit: You could make "in" const to since it's not written.

+       const u_int32_t size)

... certainly that'd be more useful than making size const.

+{
+       u_int32_t i;
+
+       for (i = 0; i < size / 2; i++) {
+               u_int8_t b1 = in[i];
+               u_int8_t b2 = in[size - 1 - i];
+               out[i] = b2;
+               out[size - 1 - i] = b1;

Nit: It'd be nice to put "size - 1 - i" into a variable rather than duplicate the calculation.

diff --git a/src/set.c b/src/set.c

+int
+set_rsa_param(build_image_context *context, parse_token token,
+               char *filename)
+{
+       int     result;
+       u_int8_t *rsa_storage;  /* Holds the rsa param after reading */
+       u_int32_t size;         /* Bytes to read */
+       u_int32_t actual_size;  /* In bytes */
+
+       if (g_soc_config->get_value_size == NULL) {
+               printf("Error: get_value_size() is not supported.\n");

I think code that calls that function should be able to assume the function pointer is non-NULL. This could be achieved by either having each SoC-specific file provide an implementation of that function. For the SoCs that don't support this, you could share a common dummy implementation that always returns an error.

diff --git a/src/parse.h b/src/parse.h

        /*
+        * Get the size of specified bct field
+        *
+        * @param id    The parse token
+        * @param data  Return size from bct field
+        * @param bct   Bct pointer
+        * @return 0 and -ENODATA for success and failure
+        */
+       int (*get_value_size)(parse_token id,
+                       void *data,
+                       u_int8_t *bct);

The existing get/set functions use a void* since they can operate on different fields with different data types. However, the result of retrieving a field's size is always a size_t. The "bct" parameter also doesn't seem to be used; do you think there could ever be a use for it? I think the following prototype should be used so that we can get as much type safety as possible:

// Returns >0 for size, -ve for error, never returns 0.
size_t (*get_value_size)(parse_token id);
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to