[{"id":4392,"web_url":"https://patchwork.libcamera.org/comment/4392/","msgid":"<20200407194817.GH1716317@oden.dyn.berto.se>","date":"2020-04-07T19:48:17","subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your work.\n\nOn 2020-04-04 04:56:15 +0300, Laurent Pinchart wrote:\n> Add infrastructure to generate an RSA private key and sign IPA modules.\n> The signatures are stored in separate files with a .sign suffix.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/ipa/gen-ipa-priv-key.sh |  9 +++++++++\n>  src/ipa/ipa-sign.sh         | 10 ++++++++++\n>  src/ipa/meson.build         |  2 ++\n>  src/ipa/rkisp1/meson.build  | 25 +++++++++++++++++--------\n>  src/ipa/vimc/meson.build    | 12 +++++++++++-\n>  src/meson.build             |  5 +++++\n>  6 files changed, 54 insertions(+), 9 deletions(-)\n>  create mode 100755 src/ipa/gen-ipa-priv-key.sh\n>  create mode 100755 src/ipa/ipa-sign.sh\n> \n> diff --git a/src/ipa/gen-ipa-priv-key.sh b/src/ipa/gen-ipa-priv-key.sh\n> new file mode 100755\n> index 000000000000..2b19c001d6c5\n> --- /dev/null\n> +++ b/src/ipa/gen-ipa-priv-key.sh\n> @@ -0,0 +1,9 @@\n> +#!/bin/sh\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# Copyright (C) 2020, Google Inc.\n> +#\n> +# Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> +#\n> +# gen-ipa-priv-key.sh - Generate an RSA private key to sign IPA modules\n> +\n> +openssl genpkey -algorithm RSA -out \"$1\" -pkeyopt rsa_keygen_bits:2048\n> diff --git a/src/ipa/ipa-sign.sh b/src/ipa/ipa-sign.sh\n> new file mode 100755\n> index 000000000000..d41e67e00ad0\n> --- /dev/null\n> +++ b/src/ipa/ipa-sign.sh\n> @@ -0,0 +1,10 @@\n> +#!/bin/sh\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# Generate a signature for an IPA module\n\nThe asymmetry between gen-ipa-priv-key.sh and ipa-sign.sh bugs me. One \nstates copyright and author the other one do not :-)\n\n> +\n> +key=\"$1\"\n> +input=\"$2\"\n> +output=\"$3\"\n> +\n> +openssl dgst -sha256 -sign \"${key}\" -out \"${output}\" \"${input}\"\n> diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> index 73278a60a99f..cb4e3ab3388f 100644\n> --- a/src/ipa/meson.build\n> +++ b/src/ipa/meson.build\n> @@ -10,6 +10,8 @@ config_h.set('IPA_MODULE_DIR',\n>  \n>  subdir('libipa')\n>  \n> +ipa_sign = find_program('ipa-sign.sh')\n> +\n>  ipas = ['rkisp1', 'vimc']\n>  \n>  foreach pipeline : get_option('pipelines')\n> diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> index 521518bd1237..6ccadcfbbe64 100644\n> --- a/src/ipa/rkisp1/meson.build\n> +++ b/src/ipa/rkisp1/meson.build\n> @@ -1,8 +1,17 @@\n> -rkisp1_ipa = shared_module('ipa_rkisp1',\n> -                           'rkisp1.cpp',\n> -                           name_prefix : '',\n> -                           include_directories : [ipa_includes, libipa_includes],\n> -                           dependencies : libcamera_dep,\n> -                           link_with : libipa,\n> -                           install : true,\n> -                           install_dir : ipa_install_dir)\n> +ipa_name = 'ipa_rkisp1'\n> +\n> +mod = shared_module(ipa_name,\n> +                    'rkisp1.cpp',\n> +                    name_prefix : '',\n> +                    include_directories : [ipa_includes, libipa_includes],\n> +                    dependencies : libcamera_dep,\n> +                    link_with : libipa,\n> +                    install : true,\n> +                    install_dir : ipa_install_dir)\n> +\n> +custom_target(ipa_name + '.so.sign',\n> +              input : mod,\n> +              output : ipa_name + '.so.sign',\n> +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> +              install : true,\n> +              install_dir : ipa_install_dir)\n\nThe pattern used here seems to be repeating. Shall we instead add all \nIPAs to a list that is then looped over to generate .so.sign files for \nall of them to ensure they are all generated the same way?\n\n> diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> index e827e75f9f91..3097a12f964a 100644\n> --- a/src/ipa/vimc/meson.build\n> +++ b/src/ipa/vimc/meson.build\n> @@ -1,4 +1,7 @@\n> -ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> +ipa_name = 'ipa_vimc'\n> +\n> +mod = shared_module(ipa_name,\n> +                    'vimc.cpp',\n>                      name_prefix : '',\n>                      include_directories : [ipa_includes, libipa_includes],\n>                      dependencies : libcamera_dep,\n> @@ -6,3 +9,10 @@ ipa = shared_module('ipa_vimc', 'vimc.cpp',\n>                      install : true,\n>                      install_dir : ipa_install_dir,\n>                      cpp_args : '-DLICENSE=\"LGPL-2.1-or-later\"')\n> +\n> +custom_target(ipa_name + '.so.sign',\n> +              input : mod,\n> +              output : ipa_name + '.so.sign',\n> +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> +              install : true,\n> +              install_dir : ipa_install_dir)\n> diff --git a/src/meson.build b/src/meson.build\n> index d818d8b86d93..dc0e0c82b900 100644\n> --- a/src/meson.build\n> +++ b/src/meson.build\n> @@ -2,6 +2,11 @@ if get_option('android')\n>      subdir('android')\n>  endif\n>  \n> +ipa_gen_priv_key = find_program('ipa/gen-ipa-priv-key.sh')\n> +ipa_priv_key = custom_target('ipa-priv-key',\n> +                             output : [ 'ipa-priv-key.pem' ],\n> +                             command : [ ipa_gen_priv_key, '@OUTPUT@' ])\n> +\n>  subdir('libcamera')\n>  subdir('ipa')\n>  subdir('cam')\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x244.google.com (mail-lj1-x244.google.com\n\t[IPv6:2a00:1450:4864:20::244])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9D4E6600F0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Apr 2020 21:48:19 +0200 (CEST)","by mail-lj1-x244.google.com with SMTP id q22so1364619ljg.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 07 Apr 2020 12:48:19 -0700 (PDT)","from localhost (h-200-138.A463.priv.bahnhof.se. [176.10.200.138])\n\tby smtp.gmail.com with ESMTPSA id\n\tu7sm6424718lfu.3.2020.04.07.12.48.17\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 07 Apr 2020 12:48:17 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected)\n\theader.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com header.b=\"DKcwcuQE\"; \n\tdkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=eYOztZ33+Kw/bWqC717s2gkAsPuKxNFDgi8m62m4RCg=;\n\tb=DKcwcuQEQW2p2mDBODab0JXhFAVzkTPTJYABLjPYnbXxzz/mMGAYNkisBTxkmARgda\n\tS4OpfzshOas24p/EsMGvqkO75J4MBdYgKOM7W5o8NKNjwJFDrruvHuSuKoGTcRDw3hv0\n\tOcsCZW70VBdPQyhSqvMATnp/BBefsS8wauEIGu9Yx2MyvE1vOrMd9R225o6jrb/o8u+i\n\tNiNopZi2uGl3qRFTZ1ito9JqQpPHOcnDP/QA66PkZqwp8v5T1n1pYKb3hke+PRN2h3/m\n\tE4bT14i9c13cAc0QvmubgtalnwdMB61Ffa0o0zDblr7/HG1a6Jd/jRV2GiRVhcQ9/j9S\n\tzwXQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=eYOztZ33+Kw/bWqC717s2gkAsPuKxNFDgi8m62m4RCg=;\n\tb=r3VsBLnRljz78yU0DjVDkmPnrfKtGl1+LUB/K2/E5QPGMgXqybM3VsFir1KnvoNEQ9\n\tQeljCQaZJssyjBxWTpsyIIcZxWymZEtiQ+P9+nvuhXoUIDNZoQS4JVsjw58OXT09XBda\n\tEFZtacXjcBsmdoW68eupTKjh6d+yE0/FDNJjODjtARx+c1Zm5bFScZBXBqIzJ2siNFzb\n\tXSK2i21Depo+m2UeXOAEp5z9B3T8uaFg1IZfmwUYWO1wtOUASWVzvnPc6I/wm/I7Bc7f\n\tn8psOATTSY5r0Kw9MD3SfEep7TdoDBkAbn/n7mAr3QkGnQc+37m6bvj5TIk4zwmH1Kf6\n\twa/w==","X-Gm-Message-State":"AGi0PuZj/lwDfJIaQ4AimefEzubKDUcXvkVa/mPUixWntqSbsj6Mb+zH\n\tV98UvNwPy2glnNplMJQ1xHoVAy+OrqM=","X-Google-Smtp-Source":"APiQypIlVGdqEghqaFbDNTlbim0FYSUEKUXZHQMCaAJMctHktnURAYzYdXnXsWNBLu+3KK//oQ/40w==","X-Received":"by 2002:a2e:8652:: with SMTP id\n\ti18mr2841682ljj.265.1586288898782; \n\tTue, 07 Apr 2020 12:48:18 -0700 (PDT)","Date":"Tue, 7 Apr 2020 21:48:17 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200407194817.GH1716317@oden.dyn.berto.se>","References":"<20200404015624.30440-1-laurent.pinchart@ideasonboard.com>\n\t<20200404015624.30440-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200404015624.30440-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 07 Apr 2020 19:48:19 -0000"}},{"id":4403,"web_url":"https://patchwork.libcamera.org/comment/4403/","msgid":"<20200407225030.GK4751@pendragon.ideasonboard.com>","date":"2020-04-07T22:50:30","subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nOn Tue, Apr 07, 2020 at 09:48:17PM +0200, Niklas Söderlund wrote:\n> On 2020-04-04 04:56:15 +0300, Laurent Pinchart wrote:\n> > Add infrastructure to generate an RSA private key and sign IPA modules.\n> > The signatures are stored in separate files with a .sign suffix.\n> > \n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/ipa/gen-ipa-priv-key.sh |  9 +++++++++\n> >  src/ipa/ipa-sign.sh         | 10 ++++++++++\n> >  src/ipa/meson.build         |  2 ++\n> >  src/ipa/rkisp1/meson.build  | 25 +++++++++++++++++--------\n> >  src/ipa/vimc/meson.build    | 12 +++++++++++-\n> >  src/meson.build             |  5 +++++\n> >  6 files changed, 54 insertions(+), 9 deletions(-)\n> >  create mode 100755 src/ipa/gen-ipa-priv-key.sh\n> >  create mode 100755 src/ipa/ipa-sign.sh\n> > \n> > diff --git a/src/ipa/gen-ipa-priv-key.sh b/src/ipa/gen-ipa-priv-key.sh\n> > new file mode 100755\n> > index 000000000000..2b19c001d6c5\n> > --- /dev/null\n> > +++ b/src/ipa/gen-ipa-priv-key.sh\n> > @@ -0,0 +1,9 @@\n> > +#!/bin/sh\n> > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > +# Copyright (C) 2020, Google Inc.\n> > +#\n> > +# Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > +#\n> > +# gen-ipa-priv-key.sh - Generate an RSA private key to sign IPA modules\n> > +\n> > +openssl genpkey -algorithm RSA -out \"$1\" -pkeyopt rsa_keygen_bits:2048\n> > diff --git a/src/ipa/ipa-sign.sh b/src/ipa/ipa-sign.sh\n> > new file mode 100755\n> > index 000000000000..d41e67e00ad0\n> > --- /dev/null\n> > +++ b/src/ipa/ipa-sign.sh\n> > @@ -0,0 +1,10 @@\n> > +#!/bin/sh\n> > +\n> > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > +# Generate a signature for an IPA module\n> \n> The asymmetry between gen-ipa-priv-key.sh and ipa-sign.sh bugs me. One \n> states copyright and author the other one do not :-)\n\nGood point, I'll add a copyright notice here.\n\n> > +\n> > +key=\"$1\"\n> > +input=\"$2\"\n> > +output=\"$3\"\n> > +\n> > +openssl dgst -sha256 -sign \"${key}\" -out \"${output}\" \"${input}\"\n> > diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> > index 73278a60a99f..cb4e3ab3388f 100644\n> > --- a/src/ipa/meson.build\n> > +++ b/src/ipa/meson.build\n> > @@ -10,6 +10,8 @@ config_h.set('IPA_MODULE_DIR',\n> >  \n> >  subdir('libipa')\n> >  \n> > +ipa_sign = find_program('ipa-sign.sh')\n> > +\n> >  ipas = ['rkisp1', 'vimc']\n> >  \n> >  foreach pipeline : get_option('pipelines')\n> > diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> > index 521518bd1237..6ccadcfbbe64 100644\n> > --- a/src/ipa/rkisp1/meson.build\n> > +++ b/src/ipa/rkisp1/meson.build\n> > @@ -1,8 +1,17 @@\n> > -rkisp1_ipa = shared_module('ipa_rkisp1',\n> > -                           'rkisp1.cpp',\n> > -                           name_prefix : '',\n> > -                           include_directories : [ipa_includes, libipa_includes],\n> > -                           dependencies : libcamera_dep,\n> > -                           link_with : libipa,\n> > -                           install : true,\n> > -                           install_dir : ipa_install_dir)\n> > +ipa_name = 'ipa_rkisp1'\n> > +\n> > +mod = shared_module(ipa_name,\n> > +                    'rkisp1.cpp',\n> > +                    name_prefix : '',\n> > +                    include_directories : [ipa_includes, libipa_includes],\n> > +                    dependencies : libcamera_dep,\n> > +                    link_with : libipa,\n> > +                    install : true,\n> > +                    install_dir : ipa_install_dir)\n> > +\n> > +custom_target(ipa_name + '.so.sign',\n> > +              input : mod,\n> > +              output : ipa_name + '.so.sign',\n> > +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> > +              install : true,\n> > +              install_dir : ipa_install_dir)\n> \n> The pattern used here seems to be repeating. Shall we instead add all \n> IPAs to a list that is then looped over to generate .so.sign files for \n> all of them to ensure they are all generated the same way?\n\nI had troubles when I initially tried that, but I gave it another shot\nand it seems to work. I'll include that change in v2.\n\nIdeally we should use a generator for this purpose, but they don't\nsupport using an \"object\" object as the input argument as far as I can\ntell, unlike custom_target.\n\n> > diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> > index e827e75f9f91..3097a12f964a 100644\n> > --- a/src/ipa/vimc/meson.build\n> > +++ b/src/ipa/vimc/meson.build\n> > @@ -1,4 +1,7 @@\n> > -ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> > +ipa_name = 'ipa_vimc'\n> > +\n> > +mod = shared_module(ipa_name,\n> > +                    'vimc.cpp',\n> >                      name_prefix : '',\n> >                      include_directories : [ipa_includes, libipa_includes],\n> >                      dependencies : libcamera_dep,\n> > @@ -6,3 +9,10 @@ ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> >                      install : true,\n> >                      install_dir : ipa_install_dir,\n> >                      cpp_args : '-DLICENSE=\"LGPL-2.1-or-later\"')\n> > +\n> > +custom_target(ipa_name + '.so.sign',\n> > +              input : mod,\n> > +              output : ipa_name + '.so.sign',\n> > +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> > +              install : true,\n> > +              install_dir : ipa_install_dir)\n> > diff --git a/src/meson.build b/src/meson.build\n> > index d818d8b86d93..dc0e0c82b900 100644\n> > --- a/src/meson.build\n> > +++ b/src/meson.build\n> > @@ -2,6 +2,11 @@ if get_option('android')\n> >      subdir('android')\n> >  endif\n> >  \n> > +ipa_gen_priv_key = find_program('ipa/gen-ipa-priv-key.sh')\n> > +ipa_priv_key = custom_target('ipa-priv-key',\n> > +                             output : [ 'ipa-priv-key.pem' ],\n> > +                             command : [ ipa_gen_priv_key, '@OUTPUT@' ])\n> > +\n> >  subdir('libcamera')\n> >  subdir('ipa')\n> >  subdir('cam')","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E596E600F3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2020 00:50:40 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 506BB59E;\n\tWed,  8 Apr 2020 00:50:40 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"QEtcTtMC\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1586299840;\n\tbh=HMiB+VjY9APe6npFYVnpF+u0MEq83FtE+z+MaTkjMHU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=QEtcTtMCQndwqHy+HXhz0KxOXvIPsX8mw2bse/aN6K1A6WplUajP8VWwtGHVuN/21\n\to+4Y2BAC1AKGxOjclw897tgONi9w1j7qXRDnYeAVFBgyRhptrqE4iRYiW6FVtkYQb/\n\t350ibH7iPTOB2yYj5G2gcxKA3ixu81NfC86Ib0/s=","Date":"Wed, 8 Apr 2020 01:50:30 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200407225030.GK4751@pendragon.ideasonboard.com>","References":"<20200404015624.30440-1-laurent.pinchart@ideasonboard.com>\n\t<20200404015624.30440-3-laurent.pinchart@ideasonboard.com>\n\t<20200407194817.GH1716317@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200407194817.GH1716317@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 07 Apr 2020 22:50:41 -0000"}},{"id":4420,"web_url":"https://patchwork.libcamera.org/comment/4420/","msgid":"<20200408001531.GA12280@pendragon.ideasonboard.com>","date":"2020-04-08T00:15:31","subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nOn Wed, Apr 08, 2020 at 01:50:30AM +0300, Laurent Pinchart wrote:\n> On Tue, Apr 07, 2020 at 09:48:17PM +0200, Niklas Söderlund wrote:\n> > On 2020-04-04 04:56:15 +0300, Laurent Pinchart wrote:\n> > > Add infrastructure to generate an RSA private key and sign IPA modules.\n> > > The signatures are stored in separate files with a .sign suffix.\n> > > \n> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > ---\n> > >  src/ipa/gen-ipa-priv-key.sh |  9 +++++++++\n> > >  src/ipa/ipa-sign.sh         | 10 ++++++++++\n> > >  src/ipa/meson.build         |  2 ++\n> > >  src/ipa/rkisp1/meson.build  | 25 +++++++++++++++++--------\n> > >  src/ipa/vimc/meson.build    | 12 +++++++++++-\n> > >  src/meson.build             |  5 +++++\n> > >  6 files changed, 54 insertions(+), 9 deletions(-)\n> > >  create mode 100755 src/ipa/gen-ipa-priv-key.sh\n> > >  create mode 100755 src/ipa/ipa-sign.sh\n> > > \n> > > diff --git a/src/ipa/gen-ipa-priv-key.sh b/src/ipa/gen-ipa-priv-key.sh\n> > > new file mode 100755\n> > > index 000000000000..2b19c001d6c5\n> > > --- /dev/null\n> > > +++ b/src/ipa/gen-ipa-priv-key.sh\n> > > @@ -0,0 +1,9 @@\n> > > +#!/bin/sh\n> > > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > > +# Copyright (C) 2020, Google Inc.\n> > > +#\n> > > +# Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > +#\n> > > +# gen-ipa-priv-key.sh - Generate an RSA private key to sign IPA modules\n> > > +\n> > > +openssl genpkey -algorithm RSA -out \"$1\" -pkeyopt rsa_keygen_bits:2048\n> > > diff --git a/src/ipa/ipa-sign.sh b/src/ipa/ipa-sign.sh\n> > > new file mode 100755\n> > > index 000000000000..d41e67e00ad0\n> > > --- /dev/null\n> > > +++ b/src/ipa/ipa-sign.sh\n> > > @@ -0,0 +1,10 @@\n> > > +#!/bin/sh\n> > > +\n> > > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > > +# Generate a signature for an IPA module\n> > \n> > The asymmetry between gen-ipa-priv-key.sh and ipa-sign.sh bugs me. One \n> > states copyright and author the other one do not :-)\n> \n> Good point, I'll add a copyright notice here.\n> \n> > > +\n> > > +key=\"$1\"\n> > > +input=\"$2\"\n> > > +output=\"$3\"\n> > > +\n> > > +openssl dgst -sha256 -sign \"${key}\" -out \"${output}\" \"${input}\"\n> > > diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> > > index 73278a60a99f..cb4e3ab3388f 100644\n> > > --- a/src/ipa/meson.build\n> > > +++ b/src/ipa/meson.build\n> > > @@ -10,6 +10,8 @@ config_h.set('IPA_MODULE_DIR',\n> > >  \n> > >  subdir('libipa')\n> > >  \n> > > +ipa_sign = find_program('ipa-sign.sh')\n> > > +\n> > >  ipas = ['rkisp1', 'vimc']\n> > >  \n> > >  foreach pipeline : get_option('pipelines')\n> > > diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> > > index 521518bd1237..6ccadcfbbe64 100644\n> > > --- a/src/ipa/rkisp1/meson.build\n> > > +++ b/src/ipa/rkisp1/meson.build\n> > > @@ -1,8 +1,17 @@\n> > > -rkisp1_ipa = shared_module('ipa_rkisp1',\n> > > -                           'rkisp1.cpp',\n> > > -                           name_prefix : '',\n> > > -                           include_directories : [ipa_includes, libipa_includes],\n> > > -                           dependencies : libcamera_dep,\n> > > -                           link_with : libipa,\n> > > -                           install : true,\n> > > -                           install_dir : ipa_install_dir)\n> > > +ipa_name = 'ipa_rkisp1'\n> > > +\n> > > +mod = shared_module(ipa_name,\n> > > +                    'rkisp1.cpp',\n> > > +                    name_prefix : '',\n> > > +                    include_directories : [ipa_includes, libipa_includes],\n> > > +                    dependencies : libcamera_dep,\n> > > +                    link_with : libipa,\n> > > +                    install : true,\n> > > +                    install_dir : ipa_install_dir)\n> > > +\n> > > +custom_target(ipa_name + '.so.sign',\n> > > +              input : mod,\n> > > +              output : ipa_name + '.so.sign',\n> > > +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> > > +              install : true,\n> > > +              install_dir : ipa_install_dir)\n> > \n> > The pattern used here seems to be repeating. Shall we instead add all \n> > IPAs to a list that is then looped over to generate .so.sign files for \n> > all of them to ensure they are all generated the same way?\n> \n> I had troubles when I initially tried that, but I gave it another shot\n> and it seems to work. I'll include that change in v2.\n\nBacktracking a bit on this. If I move signature generation to a foreach\nloop in src/ipa/meson.build, the .so.sign files will be created in\nsrc/ipa/, not in the subdirectories. This isn't an issue at build time,\nand all files will still be installed where they belong, but when\nrunning tests from the build tree, IPA modules and their signatures will\nall of a sudden be in different directories.\n\nI can handle that at runtime by loading the signature from the parent\ndirectory if libcamera isn't installed, but that adds more complexity to\nthe code. Do you think that would be better than duplicating the\ncustom_target until generators are fixed in meson ?\n\n> Ideally we should use a generator for this purpose, but they don't\n> support using an \"object\" object as the input argument as far as I can\n> tell, unlike custom_target.\n> \n> > > diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> > > index e827e75f9f91..3097a12f964a 100644\n> > > --- a/src/ipa/vimc/meson.build\n> > > +++ b/src/ipa/vimc/meson.build\n> > > @@ -1,4 +1,7 @@\n> > > -ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> > > +ipa_name = 'ipa_vimc'\n> > > +\n> > > +mod = shared_module(ipa_name,\n> > > +                    'vimc.cpp',\n> > >                      name_prefix : '',\n> > >                      include_directories : [ipa_includes, libipa_includes],\n> > >                      dependencies : libcamera_dep,\n> > > @@ -6,3 +9,10 @@ ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> > >                      install : true,\n> > >                      install_dir : ipa_install_dir,\n> > >                      cpp_args : '-DLICENSE=\"LGPL-2.1-or-later\"')\n> > > +\n> > > +custom_target(ipa_name + '.so.sign',\n> > > +              input : mod,\n> > > +              output : ipa_name + '.so.sign',\n> > > +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> > > +              install : true,\n> > > +              install_dir : ipa_install_dir)\n> > > diff --git a/src/meson.build b/src/meson.build\n> > > index d818d8b86d93..dc0e0c82b900 100644\n> > > --- a/src/meson.build\n> > > +++ b/src/meson.build\n> > > @@ -2,6 +2,11 @@ if get_option('android')\n> > >      subdir('android')\n> > >  endif\n> > >  \n> > > +ipa_gen_priv_key = find_program('ipa/gen-ipa-priv-key.sh')\n> > > +ipa_priv_key = custom_target('ipa-priv-key',\n> > > +                             output : [ 'ipa-priv-key.pem' ],\n> > > +                             command : [ ipa_gen_priv_key, '@OUTPUT@' ])\n> > > +\n> > >  subdir('libcamera')\n> > >  subdir('ipa')\n> > >  subdir('cam')","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E3FF3600F3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2020 02:15:41 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0045B59E;\n\tWed,  8 Apr 2020 02:15:40 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"KzJ64j+f\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1586304941;\n\tbh=WRcluOqLGr6KxWht6ou0V0sSer7sai63oJkbCKxK49E=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=KzJ64j+fQQyuH7GnUroeUey15F57U9794EM7ej76ZRd5ALI5Jmk84Bc/WkvofYU6M\n\t5zmoRJWtWTMvknxPWoXBgixVTKuf2EQ/Uq7pLs/shA/5cgsHHa2eS/iVOM1PD7BYbk\n\tv9p6k45t5pRqK8HGzEYzGCR/ZcumPD8XsxnWzJX8=","Date":"Wed, 8 Apr 2020 03:15:31 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200408001531.GA12280@pendragon.ideasonboard.com>","References":"<20200404015624.30440-1-laurent.pinchart@ideasonboard.com>\n\t<20200404015624.30440-3-laurent.pinchart@ideasonboard.com>\n\t<20200407194817.GH1716317@oden.dyn.berto.se>\n\t<20200407225030.GK4751@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200407225030.GK4751@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Wed, 08 Apr 2020 00:15:42 -0000"}},{"id":4421,"web_url":"https://patchwork.libcamera.org/comment/4421/","msgid":"<20200408002021.GJ1716317@oden.dyn.berto.se>","date":"2020-04-08T00:20:21","subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nOn 2020-04-08 03:15:31 +0300, Laurent Pinchart wrote:\n> Hi Niklas,\n> \n> On Wed, Apr 08, 2020 at 01:50:30AM +0300, Laurent Pinchart wrote:\n> > On Tue, Apr 07, 2020 at 09:48:17PM +0200, Niklas Söderlund wrote:\n> > > On 2020-04-04 04:56:15 +0300, Laurent Pinchart wrote:\n> > > > Add infrastructure to generate an RSA private key and sign IPA modules.\n> > > > The signatures are stored in separate files with a .sign suffix.\n> > > > \n> > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > > ---\n> > > >  src/ipa/gen-ipa-priv-key.sh |  9 +++++++++\n> > > >  src/ipa/ipa-sign.sh         | 10 ++++++++++\n> > > >  src/ipa/meson.build         |  2 ++\n> > > >  src/ipa/rkisp1/meson.build  | 25 +++++++++++++++++--------\n> > > >  src/ipa/vimc/meson.build    | 12 +++++++++++-\n> > > >  src/meson.build             |  5 +++++\n> > > >  6 files changed, 54 insertions(+), 9 deletions(-)\n> > > >  create mode 100755 src/ipa/gen-ipa-priv-key.sh\n> > > >  create mode 100755 src/ipa/ipa-sign.sh\n> > > > \n> > > > diff --git a/src/ipa/gen-ipa-priv-key.sh b/src/ipa/gen-ipa-priv-key.sh\n> > > > new file mode 100755\n> > > > index 000000000000..2b19c001d6c5\n> > > > --- /dev/null\n> > > > +++ b/src/ipa/gen-ipa-priv-key.sh\n> > > > @@ -0,0 +1,9 @@\n> > > > +#!/bin/sh\n> > > > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > > > +# Copyright (C) 2020, Google Inc.\n> > > > +#\n> > > > +# Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > > +#\n> > > > +# gen-ipa-priv-key.sh - Generate an RSA private key to sign IPA modules\n> > > > +\n> > > > +openssl genpkey -algorithm RSA -out \"$1\" -pkeyopt rsa_keygen_bits:2048\n> > > > diff --git a/src/ipa/ipa-sign.sh b/src/ipa/ipa-sign.sh\n> > > > new file mode 100755\n> > > > index 000000000000..d41e67e00ad0\n> > > > --- /dev/null\n> > > > +++ b/src/ipa/ipa-sign.sh\n> > > > @@ -0,0 +1,10 @@\n> > > > +#!/bin/sh\n> > > > +\n> > > > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > > > +# Generate a signature for an IPA module\n> > > \n> > > The asymmetry between gen-ipa-priv-key.sh and ipa-sign.sh bugs me. One \n> > > states copyright and author the other one do not :-)\n> > \n> > Good point, I'll add a copyright notice here.\n> > \n> > > > +\n> > > > +key=\"$1\"\n> > > > +input=\"$2\"\n> > > > +output=\"$3\"\n> > > > +\n> > > > +openssl dgst -sha256 -sign \"${key}\" -out \"${output}\" \"${input}\"\n> > > > diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> > > > index 73278a60a99f..cb4e3ab3388f 100644\n> > > > --- a/src/ipa/meson.build\n> > > > +++ b/src/ipa/meson.build\n> > > > @@ -10,6 +10,8 @@ config_h.set('IPA_MODULE_DIR',\n> > > >  \n> > > >  subdir('libipa')\n> > > >  \n> > > > +ipa_sign = find_program('ipa-sign.sh')\n> > > > +\n> > > >  ipas = ['rkisp1', 'vimc']\n> > > >  \n> > > >  foreach pipeline : get_option('pipelines')\n> > > > diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\n> > > > index 521518bd1237..6ccadcfbbe64 100644\n> > > > --- a/src/ipa/rkisp1/meson.build\n> > > > +++ b/src/ipa/rkisp1/meson.build\n> > > > @@ -1,8 +1,17 @@\n> > > > -rkisp1_ipa = shared_module('ipa_rkisp1',\n> > > > -                           'rkisp1.cpp',\n> > > > -                           name_prefix : '',\n> > > > -                           include_directories : [ipa_includes, libipa_includes],\n> > > > -                           dependencies : libcamera_dep,\n> > > > -                           link_with : libipa,\n> > > > -                           install : true,\n> > > > -                           install_dir : ipa_install_dir)\n> > > > +ipa_name = 'ipa_rkisp1'\n> > > > +\n> > > > +mod = shared_module(ipa_name,\n> > > > +                    'rkisp1.cpp',\n> > > > +                    name_prefix : '',\n> > > > +                    include_directories : [ipa_includes, libipa_includes],\n> > > > +                    dependencies : libcamera_dep,\n> > > > +                    link_with : libipa,\n> > > > +                    install : true,\n> > > > +                    install_dir : ipa_install_dir)\n> > > > +\n> > > > +custom_target(ipa_name + '.so.sign',\n> > > > +              input : mod,\n> > > > +              output : ipa_name + '.so.sign',\n> > > > +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> > > > +              install : true,\n> > > > +              install_dir : ipa_install_dir)\n> > > \n> > > The pattern used here seems to be repeating. Shall we instead add all \n> > > IPAs to a list that is then looped over to generate .so.sign files for \n> > > all of them to ensure they are all generated the same way?\n> > \n> > I had troubles when I initially tried that, but I gave it another shot\n> > and it seems to work. I'll include that change in v2.\n> \n> Backtracking a bit on this. If I move signature generation to a foreach\n> loop in src/ipa/meson.build, the .so.sign files will be created in\n> src/ipa/, not in the subdirectories. This isn't an issue at build time,\n> and all files will still be installed where they belong, but when\n> running tests from the build tree, IPA modules and their signatures will\n> all of a sudden be in different directories.\n> \n> I can handle that at runtime by loading the signature from the parent\n> directory if libcamera isn't installed, but that adds more complexity to\n> the code. Do you think that would be better than duplicating the\n> custom_target until generators are fixed in meson ?\n\nI think it's better to keep the code clean and duplicated code in the \nmake files. Thanks for giving it a try!\n\n> \n> > Ideally we should use a generator for this purpose, but they don't\n> > support using an \"object\" object as the input argument as far as I can\n> > tell, unlike custom_target.\n> > \n> > > > diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\n> > > > index e827e75f9f91..3097a12f964a 100644\n> > > > --- a/src/ipa/vimc/meson.build\n> > > > +++ b/src/ipa/vimc/meson.build\n> > > > @@ -1,4 +1,7 @@\n> > > > -ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> > > > +ipa_name = 'ipa_vimc'\n> > > > +\n> > > > +mod = shared_module(ipa_name,\n> > > > +                    'vimc.cpp',\n> > > >                      name_prefix : '',\n> > > >                      include_directories : [ipa_includes, libipa_includes],\n> > > >                      dependencies : libcamera_dep,\n> > > > @@ -6,3 +9,10 @@ ipa = shared_module('ipa_vimc', 'vimc.cpp',\n> > > >                      install : true,\n> > > >                      install_dir : ipa_install_dir,\n> > > >                      cpp_args : '-DLICENSE=\"LGPL-2.1-or-later\"')\n> > > > +\n> > > > +custom_target(ipa_name + '.so.sign',\n> > > > +              input : mod,\n> > > > +              output : ipa_name + '.so.sign',\n> > > > +              command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],\n> > > > +              install : true,\n> > > > +              install_dir : ipa_install_dir)\n> > > > diff --git a/src/meson.build b/src/meson.build\n> > > > index d818d8b86d93..dc0e0c82b900 100644\n> > > > --- a/src/meson.build\n> > > > +++ b/src/meson.build\n> > > > @@ -2,6 +2,11 @@ if get_option('android')\n> > > >      subdir('android')\n> > > >  endif\n> > > >  \n> > > > +ipa_gen_priv_key = find_program('ipa/gen-ipa-priv-key.sh')\n> > > > +ipa_priv_key = custom_target('ipa-priv-key',\n> > > > +                             output : [ 'ipa-priv-key.pem' ],\n> > > > +                             command : [ ipa_gen_priv_key, '@OUTPUT@' ])\n> > > > +\n> > > >  subdir('libcamera')\n> > > >  subdir('ipa')\n> > > >  subdir('cam')\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x242.google.com (mail-lj1-x242.google.com\n\t[IPv6:2a00:1450:4864:20::242])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4B60F600F3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Apr 2020 02:20:23 +0200 (CEST)","by mail-lj1-x242.google.com with SMTP id 142so1170803ljj.7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 07 Apr 2020 17:20:23 -0700 (PDT)","from localhost (h-200-138.A463.priv.bahnhof.se. [176.10.200.138])\n\tby smtp.gmail.com with ESMTPSA id\n\tg4sm8007549ljn.105.2020.04.07.17.20.21\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 07 Apr 2020 17:20:22 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected)\n\theader.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com header.b=\"IOIC1ryd\"; \n\tdkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=plh7fqhdwXGq2wzMY+KZTox079Bj63sQ7d2fbtCy0U4=;\n\tb=IOIC1rydWKAHIuq1rNvsjFrYOl58dS4uoAFPdbyQQixKdQ0n7F1mkuailqSyTjjn/j\n\tM7vh6zXOoVs6dXuLHRGaNZ7sRJ9ZJQOnAlfbvlTveL4CyhPjWh2th0CcSWjEcwXhb+38\n\tNh0cHZsswMJSXSqmwLRD/poGNuFWXj9s34FgKbpfY7Etw6Mxn3M3s/q/OT+KLfEYc2oX\n\tUO0r9yVDYWUEwxGBlYLY2YhI7ldJnmCi2BSUu+DElAM/CrBP2m/B15TrqGufWWEon0Na\n\tPrMohRcZgfUsGuCoV24m5BYpvHvaS01TyQmxLweVWbNacIxLZLcWQgBf0leaRHKjzFiS\n\t+Bow==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=plh7fqhdwXGq2wzMY+KZTox079Bj63sQ7d2fbtCy0U4=;\n\tb=Bx/9ToBe5rXSulWOHTeVL7ojekOpF8h+q5JHUYerPBBOy4EtM3S8/frkYzRnstiY++\n\tkwOpsa3F18xFqQYSB4B78vG4UILB7DGMOWx6SsKd9tMRATmIxEzvIa/XaTk4gfWdECvT\n\t7xKq2oqv3BJU7xurAw5h2FhI/KJpm1+H+22vlxyB9UsUWb/kHbatsmsfbhyPr/8N7ygV\n\tM80x2eoaJoEICYHXxNKi9Yrb0/IcbLxaIk5GUfC4waOUOm47hmHAd8zs8mvU5cH4o3a+\n\tBq1VUlFG9z/p0h6WCpcOZM4TOjagOdXOg8jA/0pPoataPYeHejI4SyAWeu1rk/TAWf2h\n\tqysA==","X-Gm-Message-State":"AGi0PuZtCEzU3rqf3VOQ7D1jKm/9zGLQQrabKCB+5QWZGh3VpYVG21Ew\n\tFpYoECE7fnsP/+JaeEgAAXcge2HNHQM=","X-Google-Smtp-Source":"APiQypJQAar5V0eAlapnuolWoLfnsydYzvcXy8tOR4GtP3OtLgqEuXy4UczFRPZiuE7r6/fkDpNm8g==","X-Received":"by 2002:a2e:8ed1:: with SMTP id e17mr102751ljl.66.1586305222603; \n\tTue, 07 Apr 2020 17:20:22 -0700 (PDT)","Date":"Wed, 8 Apr 2020 02:20:21 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200408002021.GJ1716317@oden.dyn.berto.se>","References":"<20200404015624.30440-1-laurent.pinchart@ideasonboard.com>\n\t<20200404015624.30440-3-laurent.pinchart@ideasonboard.com>\n\t<20200407194817.GH1716317@oden.dyn.berto.se>\n\t<20200407225030.GK4751@pendragon.ideasonboard.com>\n\t<20200408001531.GA12280@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200408001531.GA12280@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 02/11] libcamera: Add IPA module\n\tsigning infrastructure","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Wed, 08 Apr 2020 00:20:23 -0000"}}]