aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt16
-rw-r--r--README.md4
-rw-r--r--afm-main.pc.in3
-rw-r--r--certs/CMakeLists.txt31
-rw-r--r--certs/developer.cert.pem33
-rw-r--r--certs/developer.key.pem52
-rw-r--r--certs/partner.cert.pem33
-rw-r--r--certs/partner.key.pem52
-rw-r--r--certs/platform.cert.pem33
-rw-r--r--certs/platform.key.pem52
-rw-r--r--certs/public.cert.pem33
-rw-r--r--certs/public.key.pem52
-rw-r--r--certs/root.cert.pem33
-rw-r--r--certs/root.key.pem52
-rw-r--r--certs/sample/developer.cert.pem33
-rw-r--r--certs/sample/developer.key.pem52
-rwxr-xr-xcerts/sample/gen-certs.sh (renamed from certs/gen-certs.sh)3
-rw-r--r--certs/sample/partner.cert.pem33
-rw-r--r--certs/sample/partner.key.pem52
-rw-r--r--certs/sample/platform.cert.pem33
-rw-r--r--certs/sample/platform.key.pem52
-rw-r--r--certs/sample/public.cert.pem33
-rw-r--r--certs/sample/public.key.pem52
-rw-r--r--certs/sample/root.cert.pem33
-rw-r--r--certs/sample/root.key.pem52
-rw-r--r--docs/2.1-widgets.md2
-rw-r--r--src/CMakeLists.txt12
-rw-r--r--src/README.md8
-rw-r--r--src/main-wgtpkg-info.c (renamed from src/wgtpkg-info.c)0
-rw-r--r--src/main-wgtpkg-install.c (renamed from src/wgtpkg-installer.c)2
-rw-r--r--src/main-wgtpkg-pack.c (renamed from src/wgtpkg-pack.c)18
-rw-r--r--src/main-wgtpkg-sign.c (renamed from src/wgtpkg-sign.c)72
-rw-r--r--src/wgtpkg-digsig.c110
-rw-r--r--src/wgtpkg-digsig.h6
-rw-r--r--src/wgtpkg-install.c9
35 files changed, 653 insertions, 493 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1d80ce..453e88e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,6 +35,7 @@ option(USE_LIBZIP "Should try to use libzip?" ON)
option(USE_SIMULATION "If set simulates security manager and smack" OFF)
option(USE_SDK "If set, avoids installating system runtime files" OFF)
option(ALLOW_NO_SIGNATURE "If set, widgets without signature are accepted" OFF)
+option(INSTALL_SAMPLE_KEYS "install the sample keys and certificates" OFF)
option(SIMULATE_SECMGR "If set, the security manager is simulated" OFF)
option(SIMULATE_SMACK "If set, the smack environment is simulated" OFF)
@@ -51,7 +52,9 @@ set(afm_prefix "urn:AGL:" CACHE STRING "Prefix for uniform resource
set(afm_user_appdir "app-data" CACHE STRING "User subdirectory for applications")
set(afm_user_appdir_label "User::App-Shared" CACHE STRING "Smack label of the user subdirectory for applications")
set(systemd_units_root "${CMAKE_INSTALL_FULL_LIBDIR}/systemd" CACHE STRING "Place where unit files are to be set")
-set(wgtpkg_trusted_cert_dir "${afm_confdir}/certs" CACHE STRING "Path to internal certificates")
+set(wgtpkg_trusted_certs_dir "${afm_confdir}/certs" CACHE STRING "Path to internal certificates")
+set(wgtpkg_sample_keys_dir "${CMAKE_INSTALL_FULL_DATADIR}/${afm_name}/keys" CACHE STRING "Path to internal keys")
+set(wgtpkg_sample_certs_dir "${CMAKE_INSTALL_FULL_DATADIR}/${afm_name}/certs" CACHE STRING "Path to internal certs")
set(afm_platform_rundir "/run/platform" CACHE STRING "Path to location of platform runtime sockets")
set(afm_users_rundir "/run/user" CACHE STRING "Path to location of users runtime sockets")
set(afm_scope_platform_dir "/var/scope-platform" CACHE STRING "Path to home of scope-platform apps")
@@ -67,7 +70,7 @@ add_definitions(
-DFWK_ICON_DIR="${afm_icondir}"
-DFWK_APP_DIR="${afm_appdir}"
-DFWK_USER_APP_DIR="${afm_user_appdir}"
- -DWGTPKG_TRUSTED_CERT_DIR="${wgtpkg_trusted_cert_dir}"
+ -DWGTPKG_TRUSTED_CERT_DIR="${wgtpkg_trusted_certs_dir}"
-DFWK_LAUNCH_CONF="${afm_confdir}/afm-launch.conf"
-DFWK_UNIT_CONF="${afm_confdir}/afm-unit.conf"
-DFWK_USER_APP_DIR_LABEL="${afm_user_appdir_label}"
@@ -75,15 +78,16 @@ add_definitions(
-DAFM_VERSION="${PROJECT_VERSION}"
)
if(ALLOW_NO_SIGNATURE)
- add_definitions(-DDEFAULT_ALLOW_NO_SIGNATURE=1)
-else(ALLOW_NO_SIGNATURE)
- add_definitions(-DDEFAULT_ALLOW_NO_SIGNATURE=0)
+ add_definitions(-DALLOW_NO_SIGNATURE=1)
endif(ALLOW_NO_SIGNATURE)
if(DISTINCT_VERSIONS)
add_definitions(-DDISTINCT_VERSIONS=1)
else(DISTINCT_VERSIONS)
add_definitions(-DDISTINCT_VERSIONS=0)
endif(DISTINCT_VERSIONS)
+if(INSTALL_SAMPLE_KEYS)
+ add_definitions(-DWITH_SAMPLE_KEYS=1)
+endif(INSTALL_SAMPLE_KEYS)
add_subdirectory(src)
add_subdirectory(conf)
@@ -98,6 +102,6 @@ INSTALL(FILES
${CMAKE_CURRENT_BINARY_DIR}/afm-main.pc
DESTINATION
${CMAKE_INSTALL_LIBDIR}/pkgconfig
- )
+)
diff --git a/README.md b/README.md
index 49993bf..9c040f5 100644
--- a/README.md
+++ b/README.md
@@ -74,7 +74,7 @@ The installed programs are:
- ***wgtpkg-info***: command line tool to display
information about a widget file.
-- ***wgtpkg-installer***: command line tool to
+- ***wgtpkg-install***: command line tool to
install a widget file.
- ***wgtpkg-pack***: command line tool to create
@@ -199,7 +199,7 @@ The current version of afm allows to install widgets
from local files (either pre-installed or downloaded).
To install a widget, you can use either the program
-***wgtpkg-installer*** while being the framework user.
+***wgtpkg-install*** while being the framework user.
TO BE CONTINUED
diff --git a/afm-main.pc.in b/afm-main.pc.in
index c9ec05d..788e583 100644
--- a/afm-main.pc.in
+++ b/afm-main.pc.in
@@ -19,6 +19,9 @@
icondir=@afm_icondir@
installdir=@afm_appdir@
+trusted_certs_dir=@wgtpkg_trusted_certs_dir@
+sample_certs_dir=@wgtpkg_sample_certs_dir@
+sample_keys_dir=@wgtpkg_sample_keys_dir@
Name: @PROJECT_PRETTY_NAME@
Description: @PROJECT_DESCRIPTION@
diff --git a/certs/CMakeLists.txt b/certs/CMakeLists.txt
index 7fda654..933d608 100644
--- a/certs/CMakeLists.txt
+++ b/certs/CMakeLists.txt
@@ -16,15 +16,28 @@
# limitations under the License.
###########################################################################
-cmake_minimum_required(VERSION 2.8)
+if(NOT USE_SDK)
+ install(DIRECTORY DESTINATION ${wgtpkg_trusted_certs_dir})
+endif()
-set(CERTIFICATES
- developer.cert.pem
- partner.cert.pem
- platform.cert.pem
- public.cert.pem
- root.cert.pem
-)
+if(INSTALL_SAMPLE_KEYS)
+ if(NOT USE_SDK)
+ #foreach(f root) TODO: install only root certificate
+ foreach(f root developer partner platform public)
+ install(FILES sample/${f}.cert.pem
+ DESTINATION ${wgtpkg_trusted_certs_dir}
+ RENAME sample-cert-${f}.pem
+ )
+ endforeach(f)
+ endif()
+ foreach(f developer partner platform public)
+ install(FILES sample/${f}.cert.pem
+ DESTINATION ${wgtpkg_sample_certs_dir}
+ )
+ install(FILES sample/${f}.key.pem
+ DESTINATION ${wgtpkg_sample_keys_dir}
+ )
+ endforeach(f)
+endif()
-install(FILES ${CERTIFICATES} DESTINATION ${wgtpkg_trusted_cert_dir})
diff --git a/certs/developer.cert.pem b/certs/developer.cert.pem
deleted file mode 100644
index 445acda..0000000
--- a/certs/developer.cert.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN TRUSTED CERTIFICATE-----
-MIIFkjCCA3qgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
-MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
-LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xNTExMDkxMjU1NDda
-Fw0yNTExMDkxMjU1NDdaMFwxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
-eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRcwFQYDVQQDDA5S
-b290IGRldmVsb3BlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3m
-p4vZi/LdLa2qkikJBcKbIsDK8XT4mXVhKRSPmOMvppMEBMnBg1nZR+daptVIIGq1
-O57i2D+1xCdqDSIfFcUWFoWjKYjZ28UNMep4z8QSqqCUI8LqpvHtWzgt7vBH50N7
-L2UDWOP3wE5c14b9pGfBjQtjRQ9C7nBFwckSq8g/ezsDPbCsFfAfUJhzYJ8z7u1L
-vJtw+Yht43uarGx/t8zYbCZttF6JPLhMJwCszXeJXQGQbTpcC8g2ae8gdtb56c8j
-bMg3X/TAQEishorYrceeSdsbgoHrbPyK0WGSMVyXsaiYMe6EvV3+aC4cgsF+EBdu
-Cu5HRqq83DQV5IkYKoYJcQVot2a1nsFG9RZ5OsyKUNwEVjMQGDOqhSav/InVJEcb
-KgHtCJlqeVLC63vVzff8x7DxK7SpBojqH/KF22V91Zj1g5W6AkHAYuQo8HwzI5Ts
-e8AX0Qr/KAz4oQY90CDtiMsImz2DjMNPJQFnwgYO+0+BXxExvoeIgg/+XgHj6sxT
-PKiVBJyybh8RLlCoa7x1emQwGoXWU2+Z3z6BI6puV3KV1ZEJVc0wcPkxf1nJ+WUy
-zcqXIwiGgzATcvjqTLagRaeAXR5C57eMGRI/3Y6489wEWMD43DNx7I/8OJ2r3IiW
-3qurCh7beqXiI4ep22QsjBzfz2PB3OpJB/nu41ZtAgMBAAGjXTBbMAwGA1UdEwQF
-MAMBAf8wCwYDVR0PBAQDAgKEMB0GA1UdDgQWBBSrv/IpNDZqsNSZ8XmNR1W9YxY4
-PDAfBgNVHSMEGDAWgBR5jMvcF0Q8bPDoNWafG4rcGXFizDANBgkqhkiG9w0BAQsF
-AAOCAgEAWrtbQRwM9QGacT2xkSRwkm9UXzWjfqiHwsjXyuCO2VSG4do1gtFCMNho
-4C705XhLvy51HmRXlyBW01NpSdaGZhUrH+duyfzpkyFPDUhWZq2HHeT5gx2aXBxN
-HCoYTT9G+jL8ONozZEqok6EXegVFMGLoB95fmrS9u3D4msoNCXuUj8KiMGaNus4g
-Kd4A31BNMKBXHt4zqXWM9Dzc8Djfz0ZYjfOTJdb2ygmpUYQPySzngdyHOLZ0zeoO
-nNWVoYE1PJ9hr5HJBVAUFEEhW56zFdwpSUxXbGqVs5B6pihvLzVKZiRYB4libDZw
-+Br3MK7V6Gq6Uh95DdNGBaSGoqvvG6uKogtF/lQsLgL6WeatVDYQIEu3wPH4wJXk
-JUfb0kglwe3S/9mo4qHQahffKZS/wdd3BpMwOc++lwUriObGy1YUpGki0m85FSxo
-/yLhqOmn6C0ckx2vYreA06CwanISotS+BQ4AqCxcxgtXOraRJL1sq4J6yshJqi39
-BZyU6VB7aeNIDHKI1phmjBZSFYFfPocPR7pckbKJIJAUufO0Kdl1Bx6LzBfDtaL8
-UZcKx6c8s6AbDUC1uGVtCqNQ6rUYsG+MB2y7cpQV2hem1rbx9Pat+7O/rMPpusl3
-PVRdwfHA7czVLIjEObrsZyI7ussZ1/a5pWlP9x50auESxk0c4SowEAwOUm9vdCBk
-ZXZlbG9wZXI=
------END TRUSTED CERTIFICATE-----
diff --git a/certs/developer.key.pem b/certs/developer.key.pem
deleted file mode 100644
index 0393301..0000000
--- a/certs/developer.key.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-2wQCVq5babjCVJnpIaXjdsubN5Ut
------END PRIVATE KEY-----
diff --git a/certs/partner.cert.pem b/certs/partner.cert.pem
deleted file mode 100644
index 5911db7..0000000
--- a/certs/partner.cert.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN TRUSTED CERTIFICATE-----
-MIIFkDCCA3igAwIBAgIBBDANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
-MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
-LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xNTExMDkxMjU1NDda
-Fw0yNTExMDkxMjU1NDdaMFoxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
-eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRUwEwYDVQQDDAxS
-b290IHBhcnRuZXIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM7fxE
-oniPPpCikFoM3tNlTwtz5mZiX9UEoyHBkgPF3Rf9IRXPMJ3+3My6Ji5ePuq+cF8w
-bGmQflq9vc7LnBGGuplGjxEzQGKEqvV1IYLHI9wZGHBEnrMVpBTexLlpr5HLtUjt
-BgLpjx0V4ZIXGzdkTpGogObxSaPvCPmKT6voIg1MRhNaLgW0jvJ6LPFuiviKjS7H
-kJTdOWmi6nvCLHQfzuNfAvfYqi3zkvjKFD6G8pjD+QUfUwdcvECLPYBDQgHvPKT5
-5TPLeo/ZuRandfRNjjvyynXclBbKebpNteoaejI95Mu4w0RpFpBXeuOyPES5D16D
-HK/bZOv6wwsLkdMmdI4mis9W9AbeCRBwNlVQyoGEgxr7gOC/xD6wIH0IryPgBU7p
-TioKmEoIoE2p/SY2J7v76KUhXIBlE/8k9g9VR6oAcuPWdTC4OShPxLKAuMOWnwHI
-UetIuoGtc6aT2u1ztoZpDWnDHfShN2gRx5/XJtcrh6VZxWWOALCtLdOluhHXfxsI
-LmDjPJfPIBCqqLch04GQvq4K8GVgVYNmqInzOAiF+nX5LcGn/qVH/kEgvJWpsWmA
-NJWtlrvsNL/9K+qj0qPEqRENyAeFSQWZitTldjJinHsFP7ZNQPt8jaDs58XmjPr4
-Oz0B7vYO9O7idOYnl1IaxHlVNCFDNTXol5Vd5wIDAQABo10wWzAMBgNVHRMEBTAD
-AQH/MAsGA1UdDwQEAwIChDAdBgNVHQ4EFgQUWjJrDJ22ZOMGVEmNmpIaJDw1kQcw
-HwYDVR0jBBgwFoAUeYzL3BdEPGzw6DVmnxuK3BlxYswwDQYJKoZIhvcNAQELBQAD
-ggIBAKZN5idSof+jD4JeVm/M/snXk7nLzqpqaPb/Q3xuus+pv69UrR8MKHBdz5Ag
-tlIpU1Hk9Fhgis3suQr3SNJIN/UoLv1Uw6opj/pazIGYFrP9jj6dj/6DEaiGG/oi
-4/efV2rjBd+2tFQWjz2aG3mxBl/lWKXz+sX+pveYMzd5aMpGvPaI6mdPyCHmPQ3q
-uOOdDwMT7gIF+bVGWcvc6TG5qFX1C2HTa90XYeddEyD+FOpye93wKkptKtdgXXA+
-TpUghz9s0l2BSsVKEyLoFu/4ATJZBxk7qwqgRfuLZAzizXuIBQ8/KbW9k7crkAqw
-oEGeYj2yUzmHYOrXwqG1nt7xryl5U626+JLGLBja2LCrI47ZBGOlgK4xIag3LBI6
-qBry/0GEJUTy8RUG27mfnp5ypiHe/J8+b/HFyXJeyTQaaeXPpPuRx0htrskwKsKW
-6VBGCF7O8Hlg18scUJ6JOKrScNbsYfmGfgZB7kZ8wX6FLaUg1hAdptK1LjbixJ+1
-kijVE0ZpCSqLSjBfqHAKi//xWPTkcuO4+DrvhJ3iBOLu0fp5L5X0UvWT1JrThWVq
-HlJ75IOZo/1YA7EBefDMGCho4TdVmNxy4C/+4qpfyZQhoL2kptZ0O9Xp3T6o/1Us
-LGIFk5stZTuexWa0NIRDSCXFDjDrRHKB6gRudkE3+4QqOWAmMA4MDFJvb3QgcGFy
-dG5lcg==
------END TRUSTED CERTIFICATE-----
diff --git a/certs/partner.key.pem b/certs/partner.key.pem
deleted file mode 100644
index 5a9d515..0000000
--- a/certs/partner.key.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-vRpIvTLOmwiZts8Ygw9/HlL1APeE7bY=
------END PRIVATE KEY-----
diff --git a/certs/platform.cert.pem b/certs/platform.cert.pem
deleted file mode 100644
index 838178d..0000000
--- a/certs/platform.cert.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN TRUSTED CERTIFICATE-----
-MIIFkTCCA3mgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
-MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
-LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xNTExMDkxMjU1NDda
-Fw0yNTExMDkxMjU1NDdaMFsxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
-eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRYwFAYDVQQDDA1S
-b290IHBsYXRmb3JtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5Ykp
-3b9gQlP+1Jdaoxu4QTmycP8f+GsWq6o+lZy9GCoH5ECxybYpbrjn5jIh2Fq8Mt6m
-HSwWi5mO9jALhbL63zYbHD4g4FjaoqwdyN3II/ECROx/+PCXxK9Lvlk2cTvlMjEu
-uD3hKl3fHw4Xi+B9fVkvtrbiirav6dfiibdsTQE2m+w6QuAlTKsF77btVvJlicpl
-yVoJkjL/ct2A+nsP4o8j7ZPz49uaQuSq7UnwzDKcvVgB11hIm0OsCMpA3omGOOro
-ipe675Yq5xVG6G3hgnHb9wRaK3hOPRSyvN5GeS2GL/rOc4I1JdReKT1U83mwUIm8
-tHNNp6tmRUQAsThXvd7016EIQbonmTHmdAEiA3uErQkNnTjGTBF4hCaDaHaj/bag
-jSkA4yvzzvV+pZjPadjAHNVtpuGQdxQ4jciSZq3lZiLq8v7nUxCi0LO5E5VB+QII
-uIABJIA+xNMEKYs307imOx2ex7JGvqgpLmfhutLwG1GiJuWRYUoKyUjHH4+RrmYf
-HU9NhhjcNQGBo8LO4WjfMbXKqgabKMM+PHyUN+5GFKSMLwF+pGECnxV+1St+zEc5
-JmI/lPkCg30ghmRL0gpLXZywDXSVzmZXcfiUIem08Z8RVTRwBySUsqYTZCBhLbRz
-w3garE+u7DUab7obnWYGMqK95jJe7966K3H3r5MCAwEAAaNdMFswDAYDVR0TBAUw
-AwEB/zALBgNVHQ8EBAMCAoQwHQYDVR0OBBYEFJUmGLv09YZRimCCdJoV1kJfW1RI
-MB8GA1UdIwQYMBaAFHmMy9wXRDxs8Og1Zp8bitwZcWLMMA0GCSqGSIb3DQEBCwUA
-A4ICAQAQpzTy7Qi4tyUpKcXug8GTmCAVytbRmY/2cmYILApRyPg2Sk7U9zrjMS0J
-iDN8WnwW3C0d5FLyqkynNxMto+Kd4jPlvPFEA2/zDek4QFfeQzB2Ddg6OdM2S2u2
-WBRMxTCvYTnD/uFEHxhxAKWbjEb25xoPRgS3kkxlkqfYaw1kOqtmMxAng62CVsvh
-3194xlkT5toD6PWcYR9woWXiL/Bb4iMWV71+bO8YMixb/4kFRkX5StncjLAA6IwK
-LXXk4Q0fxLanZwNpjIrOFyzyQzpMrUTOZ64Ju7x8K7cYm1taaLp6aY9aMlYp0Zo2
-pYkY0k3MLkDJwHlSz0k3ZiFUPlSXcSItvsIUS8TTrb5qz9gr6i3JO6IBj/hwA2O3
-4PFCWYsYHV5QF4vlXWXHJ8XC3suQuixuFou/W8ngsgQH90IiUEHYlsoPBbta9xdF
-cM74c9sCivjoVng9swr4nToSyw6MWZVNSIvyn+RW53FNOv5AKJiDJ0xbCCwUlgwg
-1Z35Epj44r46wYCh6IepQHf0erjAF6n929mLOEms8r7ph0MaaQ3joMOpPU2iDb9i
-usY4EyA4di3e39PKvdLbWBP2vMhbZSy8uW4sCn3PRkVQFXStXNSx5JpuOMY+cLGo
-yrMV5Tt9OIMffTvmdb/NVnTAS0uOTW+jXxPS6i0UeqdzN4Th7jAPDA1Sb290IHBs
-YXRmb3Jt
------END TRUSTED CERTIFICATE-----
diff --git a/certs/platform.key.pem b/certs/platform.key.pem
deleted file mode 100644
index 6445e2d..0000000
--- a/certs/platform.key.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-dScfb3I0zsUNIYhmwaqS494AwZPah6Zh
------END PRIVATE KEY-----
diff --git a/certs/public.cert.pem b/certs/public.cert.pem
deleted file mode 100644
index 12bdea8..0000000
--- a/certs/public.cert.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN TRUSTED CERTIFICATE-----
-MIIFjzCCA3egAwIBAgIBBTANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
-MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
-LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xNTExMDkxMjU1NDda
-Fw0yNTExMDkxMjU1NDdaMFkxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
-eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRQwEgYDVQQDDAtS
-b290IHB1YmxpYzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKZCZFjk
-w51t5FbDXMCRagoTMKF84945jcypfFl1uR9nracYINj3aNxmCqb3ImxQnQU7kzlA
-deIIrUVEbt0AO3TpO9nCViUXCPwcT805nKc5pmLvSSkCNu+GSKx/y/naACCZRnkB
-PlqdV9iwR9dbK8oByLLjzwdDQEGzRx1cyFxa17oRgcxo/EoQMAMiIRGwnD9yRPkY
-34tJyaqyY3k9wAlhre3J/UHMKIkgUIaU4//R6/6JTG5oegsqZxGoRaCTEMPy0OY6
-yzQVixZKYXuJt+XjpJsxgd/SJKJ/9NCnPG/Arfu+zuiFYl7jqDU9lABJ+XnJkIBu
-FoRCDbqzk6dURb61M4WRw9wgBHXzUWlGGfkP5ZvD6+FLdwq1eE0KkwCLcWFpxU8a
-QzRjZ6a7OB5xVorJ2mt75BivsF5ggrQGa6TM3+OM/OAGR274lTVdsbdtezNLbQxA
-OirkTHOUchjsf8r32kIIHoarnrbPh+20Fno2Vbr+AXRWi8w8DIMVD8I81sX/5oiC
-mIvtkL0SYumb6t9BB/Q92w8WBWYqvsKaPymloJy+4j7TXb/W05ubVqWDUVKrj1uf
-criqG+3Gqndojt2qGowyc/aul4LZhCGI0aUfW5PRJFIIVf1GbVxPRP49whst5O+f
-lhFJziHWqHmjlXxL4yC1M+qta4xAIPYCe76HAgMBAAGjXTBbMAwGA1UdEwQFMAMB
-Af8wCwYDVR0PBAQDAgKEMB0GA1UdDgQWBBQpgcN4yic4+ikYIksXFyfHMjLDPzAf
-BgNVHSMEGDAWgBR5jMvcF0Q8bPDoNWafG4rcGXFizDANBgkqhkiG9w0BAQsFAAOC
-AgEApJptFh2hdqqpi1HA5Pe/nbNFvvBSUk1ST7OEnddOvcQyJiiP2SnRFuovRZsR
-3VsDgQtzYqsY0HE7bnIT2E9w+49AXLJDRJKBDHi7p3tpFMVzppdwWAbW4I+CFQaD
-/tztqBH1MstgDfZSz5/eXDoBDwb0Drc/mXnfqB9LinAzlua6NZ2qHRTvE6GT4FW8
-Zp0nRfiXKxL9ADcj/+GUE6+/JTOrsLJ1/RhTeRvPdlUzvSktcYsYJu+VOMTpwMZf
-9WC+sfL7oiN0r0LrjD1+bMeOMQlKwFigIFGh2VTkYpw7eIX1o1OGL8ZCy9VnOvBy
-rkNBbI5xaW5TFR70hXtwhJM7jqGx1cbCt/zpZj4qqOkUNNIzkXrootLWzSFpfzl2
-kvYtKPl+t7Q3l9Uqj1b7+hOmZvNMvgrqDNoVtq7GX6nvx/w3dt99GEWYZUFB0UKk
-mQOkqkV8HLdp/iD2w1t9hVU0qzF0SF/CyM1CPcjQDVMjNGgYdnAjoTDe3yQkKk2t
-jWKOr3BtoGsULSUQeJr/BbTL3vjNS6y4DQNEzIGuKSALMaQYz5NUYL6/sj5XeaTP
-tPZfBCattnFpuorTRxMKKqjVixuqhYjfiQcdjA8l1Dy9KgY54EH9Rzim6vC/NTP1
-kigr7rToYPeyJJ7w6DlIgzWPXEu74gi8/gwzlEYkBMIb6cYwDQwLUm9vdCBwdWJs
-aWM=
------END TRUSTED CERTIFICATE-----
diff --git a/certs/public.key.pem b/certs/public.key.pem
deleted file mode 100644
index e4b5152..0000000
--- a/certs/public.key.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-tZLaTB3Qg+XgMWjozpD8b1zbSJMbX2U=
------END PRIVATE KEY-----
diff --git a/certs/root.cert.pem b/certs/root.cert.pem
deleted file mode 100644
index b76294f..0000000
--- a/certs/root.cert.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN TRUSTED CERTIFICATE-----
-MIIFlDCCA3ygAwIBAgIBATANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
-MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
-LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xNTExMDkxMjU1NDda
-Fw0yNTExMDkxMjU1NDdaMF4xCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
-eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRkwFwYDVQQDDBBS
-b290IGNlcnRpZmljYXRlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
-rH/HL57mkfr5NsSb0ZEQ600D2w+NNxfA7n/YU2WwxXKhQQyZ1QWiGXLG7NxrZoEB
-QH8C0YMi1sWch8a3AxajOUueHCGTNCpvIvV/UL0rC7aqPjxliLrmJBv5JhDoUv01
-lG6P7NcTVWelEUc+RzPKDEWYCWVjK+t/BbR5Z/+0NlBcqwGNmI/Vfw/+hLy7Q+ff
-VPD8/5HRDVFDGezQlhuhWAi7iVMrBfwpJfLr5he+tuPdvXKnMdbA3WAIIREUrkT/
-2TbZUINxc/M/HQRec8/DOhcfw8ReluLl43s0wZVTdJiqIiLfNUX1Eu7Yr7QmX2X0
-73T3C6nNFiqZF0VqbbSmyjDUW9XCAcUC3xYCDP6ocS9rKmZQZK5NsI4t/tanDDR+
-KXuzrKp6Oo2wuvv1Z4wGaKTJ7bcqYOZzwkFOQXEajVzGioo89Jh0+m80Pah/R/L5
-O7kQGSlbYpTJPxeHazjgyozZKE3JRi1NiWHi2g5wbi/OJGh/EkWimuX5jDnF7Ksd
-EN7Lua30jgFlKXswfNLNsz20AMqjUsqwzn4V2cyNah4/a1ZuAjgRHZJuVBxYjeav
-fKE8MtZTRilo4WWzmbnpt9kmm1eP0Y3E5Y5IWLcSOKFEdIa5LAVJAhOrQCuGE30r
-3OSpV1NxEJvNeCGUZ1BECzigFYhTD8gmC+SXbQb39UcCAwEAAaNdMFswDAYDVR0T
-BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYDVR0OBBYEFHmMy9wXRDxs8Og1Zp8bitwZ
-cWLMMB8GA1UdIwQYMBaAFHmMy9wXRDxs8Og1Zp8bitwZcWLMMA0GCSqGSIb3DQEB
-CwUAA4ICAQCpcUJgAD2ktdZv2l0gsJp6PxtCi2yTqQVP0AFKXqDem4dTJ6wmAuub
-0I3IlsZlFcsGwUtjKZkJfNcsGnOD3WML/Shtp508pXM1jCtHcNZsg2nbbnMQNw24
-AxdlUK96bBC3AGfYg1OPTdDPszHrdF4BCByEvhYakyf6+IdOwAJy09pI644yoVLd
-QhdTqk4vLBwUweu4Yd6lhgGQd9ejxV2e4Gdgf2VI/K2WwLOIEiNnyKJt67o20g/x
-rjqIA6X4UpcMY9xvSewMS5MJodCsRNVLRctsqV+LXviTo/lo/DvzOVRPRo8Of8v7
-5B7a36/gqqDYIbxA2/dVojbRH+giR9hx2KLeG0af77MKZ4gdDPfCKUOXWNezcPBj
-7u7SUVFM/6411H2ybzIjoA+4cxS2u9bPDJDPlZ/q+JsoD6x1CJ4rUmNX9e5tv1bb
-eQl6Y7CZ4PPJ84vQw7YAimUjagvfRjAGXJEORwOkr4CG+J94NZTYEvbNweGHZ6Ts
-4IMpAOc7tCtZUdYyHwY6bzy3P9TcLL1VDFXn1r9NdMIv2JU2QfTdiKCThMeXCXFK
-zcCYBgG0b1ZP4FB/OocPg8+1LaGsgkAHUS+L9suaCvYlrz8yWMuXrszUfb+V+68E
-INH/Vdi+KsimdlAdeQCBTHjS32raCOW1q5EG2drwkbZ50KPjQRHj5zASDBBSb290
-IGNlcnRpZmljYXRl
------END TRUSTED CERTIFICATE-----
diff --git a/certs/root.key.pem b/certs/root.key.pem
deleted file mode 100644
index 9b7d07d..0000000
--- a/certs/root.key.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-2FQAHcMR86xUHWO7tIkSM2V6pqm1zQ==
------END PRIVATE KEY-----
diff --git a/certs/sample/developer.cert.pem b/certs/sample/developer.cert.pem
new file mode 100644
index 0000000..0268749
--- /dev/null
+++ b/certs/sample/developer.cert.pem
@@ -0,0 +1,33 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIFkjCCA3qgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
+MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
+LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xOTA5MTYwODAyNTRa
+Fw0yOTA5MTYwODAyNTRaMFwxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
+eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRcwFQYDVQQDDA5S
+b290IGRldmVsb3BlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKxn
+8AkSDYVatbNrMFNvMuUUyvSJn2KBesV4s777mThF+5Pslfs9/9G+3n6pGHpKhczI
+tdy+A7LLUFgJxhcRktzWL9MWrxKuc5FFMoK0LrsK9DsW4+58ty8Mcj4/ofbggn9q
+BMdL+X0GzKZmw/FUzptuHgaOV54OSXdNXpIcN0g9rsNYqU+IUooUIQNOukVLth6Q
+dY9oJqaieaiOnAEDS89sSZ8qZCK0t01qEdwYGry7kmyXMwGxnHGtK9rxA85Vt2i0
+x2qERR7RQYFaOPOZGignpxy5qPIqHy9kTk4O5mUUwAY3Tv+iSATtDT56j9gh4g0y
+Y1ENLCOLk700R0/Bi6Wf6MDbK421+Mqa+ej+Zr9zvUbzxXFIIHuTA7z9MhvdRo/Y
+mFeFvWtqhLFgHBQ1Ow62HPirmiZbuCrl8b2KSpB52UJevh9FtqCtSyb1Pdkz22J4
+i2Vi1m7YszV+GD5f3liDN8ha6ePKxx6hrltZpliyKweCMzvc1aeQoEnCTn90izaY
+7aLmDY6owVG9kv0JyQvv3V6TmzcNbH3lnFcrETPSxU52mb+XrDRHp5BAKjP2CGZG
+WmfIvEjWNV0v7UVR5WrgiDiS6soGvtgyO5ap+KkVds1qGiZrDMPacQwyMqvozdUe
+JdFX5R03TQh2B1Y+fQ3bQRNcEP0gZvEclw1bfTG1AgMBAAGjXTBbMAwGA1UdEwQF
+MAMBAf8wCwYDVR0PBAQDAgKEMB0GA1UdDgQWBBSI2dm3JXrWQEHg3Vhb3S0XlSiD
+8zAfBgNVHSMEGDAWgBS005/0PkDqUH+8bbviL9U6uSjywDANBgkqhkiG9w0BAQsF
+AAOCAgEABgfdzivT2Lw/DeoohzfMDhXlydI14baGFK/Af/X+VCObLOYVcHXpQf3P
+XPd5+CBRzXsb9eEKXrCwhYaACPMllcGIk6hZPe1nZPbuKc7MTNvgi+S7iwd/Xied
+53b9irR2y2XrpUBqxxPSY2gEpojlhZAuAQzRJ1nGy4V5hf0nnMZ4qdgJacIYDyS6
+XUydQ/uvnM+bb9ry2pqwemeCsp2eGErnYBIPaTrJurvxXYD7XIwLla5QrbnYCCM7
+R9HtRNtmKFW4Q3x5lBbs68ppyY8i8WHT07hNA7e3kzH1CNCDkj9RhGpV5AZs27Lz
+FxzTCNd7WEKgsTSWLfKrFqRMKg78x5dMXu43/anoCOkNVBdXpqD5LYkEAbwllXyJ
+kuue/BCZvEPUNhBWeqKlVDw3vxLagfBx3IDX/lFszuFWBZBnA8s6AuKzh4l4e7fN
+6aFUsKeDiyLeoMuOUghPQv3dZ7V+9mzyyU0eqjpWgQcYf1fV+ih4BMiZ3uxWR8R/
+TDALJrlHOL3c6GH8IGL6QsqhmnxWp0q6/sp5evxrl4HGHzcidLkq7fxZ0ArDaY+4
+DgPOkpDkCJ4Qx3nMMgmKngORZ4A/X48kDv1TAYx837ZL/qTCJt/lVdENlIp944+l
+z8FocT+YK0XciJ3oIiPkxWWddxNiCuNsVHQvSwr43W1yUsuF2QgwEAwOUm9vdCBk
+ZXZlbG9wZXI=
+-----END TRUSTED CERTIFICATE-----
diff --git a/certs/sample/developer.key.pem b/certs/sample/developer.key.pem
new file mode 100644
index 0000000..59139eb
--- /dev/null
+++ b/certs/sample/developer.key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+SJma4hj+ETuczbFDz+jgMA1gLnk32lw=
+-----END PRIVATE KEY-----
diff --git a/certs/gen-certs.sh b/certs/sample/gen-certs.sh
index b432ce6..f0aa135 100755
--- a/certs/gen-certs.sh
+++ b/certs/sample/gen-certs.sh
@@ -5,7 +5,7 @@
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
-ORG="/C=FR/ST=Brittany/L=Vannes/O=IoT.bzh"
+ORG="/C=FR/ST=Brittany/L=Lorient/O=IoT.bzh"
cat > extensions << EOC
[root]
@@ -58,7 +58,6 @@ fi
}
-
genroot() {
local s="$1" n="$2" cn="$3"
generate "$s" "$n" "$cn" "-signkey $(keyof "$n") -extensions root"
diff --git a/certs/sample/partner.cert.pem b/certs/sample/partner.cert.pem
new file mode 100644
index 0000000..9a99243
--- /dev/null
+++ b/certs/sample/partner.cert.pem
@@ -0,0 +1,33 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIFkDCCA3igAwIBAgIBBDANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
+MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
+LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xOTA5MTYwODAyNTVa
+Fw0yOTA5MTYwODAyNTVaMFoxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
+eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRUwEwYDVQQDDAxS
+b290IHBhcnRuZXIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDvCwKp
+OldrbvDkSsW/UKS6Zyqc059ZAJM0+6S3j+Om2dbrqOlcKgy/6X7fGrmpuU2gtxde
+s1KKhZ5A3rrL8RLOygDV/XO9tVvkZq6nGc1gaQwJh2cbYX6uLhfoRTQhTuOBumJb
+qIppPVTLzNDQdEZdT5VotjJfBmFWwE7LhfCb9Jw/tF1eY7mJ6GMB4k58exxuKzH2
+FThp02Wm6JcfyuaDDz36pkVEj8DarzPkI+fzQYXRk072egg+7Yy8yo5QJWciJtJ+
+8bEn5c84wHZltu37dHtweUvAo+okpjfci2j50mmRs5goMQRdPw7UOMt5pt9NxDze
+tp4koXyS2l5HpItPGum6yKPrlCztZaguX2ab2UNIVNM/SbecWHjXO7R3MyWvrG98
+K0s9HUlT/9q/N2+1F5qcYQcUpW2DNEoTZfyjwkjkmPJX13kvHHrji+ednAlwKfpD
+l6S48pciQu63SMc515fLVL9J2Ivr6GYi6s1QRbr8K2eiqJh4vZSyH7zR0VOhJ2Xd
+KA8fe8Ns6eUwhzMJRNEcLrgi+QmRYEIE7BjmgXVsWhLeCZXty4TDNjGRQSi+fvdW
+LNkvanu9tQEEHwYJEd6dQ88cRuHsELXdeaCGyJAfCqHgD03rYLqxOp2Z5qk5r6jT
+l5+qNDdYAMnhWyix5ygJ7k5oL1R9jcN/KGJQSwIDAQABo10wWzAMBgNVHRMEBTAD
+AQH/MAsGA1UdDwQEAwIChDAdBgNVHQ4EFgQU4cWCoUI+Y5cbe5c6GLhnLBvnrzAw
+HwYDVR0jBBgwFoAUtNOf9D5A6lB/vG274i/VOrko8sAwDQYJKoZIhvcNAQELBQAD
+ggIBAD9VXCplK4FqQG/mlgBqfe3H8OznYJHCBaoeawBwhW4NWMveyleHCUTf4B8X
+aBBTMetzNnCjSObGK930WGkvldBHr0nhTI51a6oN+d/2VWEaNtuQqEYV6m+br0OF
+2soR1wD+h8yy/f+DRWfMjPO+IhjvsNdi3gkB/A9NiLBeAP+M5tKyVU99et15wkLd
+pwhNRwFtPf909OLmnb0Kt21n3Efn+gTVFAHp0UDVbMZXlWpE7t0zds0g8pIyR8Ds
+QP2+OC76wwWUZW9ndG67XS9dF0ph+o8/URiycEh3yqcGRZk7+uTzl3qCib7pUF3M
+vtcKWFJ2ZECO3DBYvNZWWuVPz26i5f8TucTttQ7FVCJEfCqISbPpduntFjT7CfAN
+Nn2qsG5uTIQWRAn3rtou7pc6ygSiW/iv5DkuBa/xu7lCZLxwiRLibn93B5qFaWR3
+nwo1cgM3yrUcAd4xJgted+OcXVF/qcodBXZpJdV8338HelQhrRcstPKSkxBxoyTQ
+E5LWpL8ryX42H91OuPvQy+93vxZ0ZcAQ5WF+0HGygjT6gURSMQrrakD9BGtfe5Rf
+dRQulX1fjeSdz12L9Z+twUkbrv/ywlXpB03BOeK2SjzXZZGCwIByT4rnkWeFwQB/
+9a12gdpY7GnUGXDfUiQa1oYxF6+UmZWIozKkCis+9WPIC0cqMA4MDFJvb3QgcGFy
+dG5lcg==
+-----END TRUSTED CERTIFICATE-----
diff --git a/certs/sample/partner.key.pem b/certs/sample/partner.key.pem
new file mode 100644
index 0000000..b3c79fc
--- /dev/null
+++ b/certs/sample/partner.key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+8O4rwulTwljYIkcvepGMQCgCjmPDGQ==
+-----END PRIVATE KEY-----
diff --git a/certs/sample/platform.cert.pem b/certs/sample/platform.cert.pem
new file mode 100644
index 0000000..f0847f6
--- /dev/null
+++ b/certs/sample/platform.cert.pem
@@ -0,0 +1,33 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIFkTCCA3mgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
+MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
+LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xOTA5MTYwODAyNTRa
+Fw0yOTA5MTYwODAyNTRaMFsxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
+eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRYwFAYDVQQDDA1S
+b290IHBsYXRmb3JtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAm/mg
+WIuAeBA17NaKZX21SAfJDLm0Dtxex9mOCCQxhmUFilFG+bONE+iulUTl/2nKlxsO
+Q6XjMh9PiOj626Xko5d6Y+/NUz+iYJszKVP3uJHoqJFb95UTNljGmdgPXFHlfaMD
+S0t1MecCJlSWqu66Yt90YNs45UcIwq7mlMGLG+/ebnE7QIHL9fw9wrVd+eMbL5UJ
+eqqM+BpnuzCGhu7/+53a+B559nfzLK8wmnSjJvBmOaIJEGYQrG5+iysWFf53HeIC
+0TNJwoNrUOWlE/XqmaZ9mtq/Hk562PYNcPHLiC306gedF/+2OY1zI8J7NbeIVrAj
+bjOAqnmlSL0nq4dc29yiC9dIr+2/hOVxLF6a8c3biKN6U7z7lvV87U0ZXAapSvJ5
+5TKh6Uzx1tmki/Z8Th5N4VvFEWH6aMM7wWFWGgCtu4y0EJPUgImHSyx90KigCWIQ
+TBi8SwY7caqURl3RufdC4RHudB4bB6sqVRo+QmIBV7b0Y8rPClVwHNYShc6nbHTa
+v+27wiquoQDnyypdqlB8Y7ao3yeGFeZY1DpopuConZLtlqUzFJcJyu9C6cqodRZB
+rJyYZM00zbekM0auSz6G4PxZcm8Wv3oLWwRnlboSp8eBpyR7mjz0lFkf954c2P8T
+dxC6EZ/FfOyoekmubhBOaAWDUaf8pLCgr34dH7sCAwEAAaNdMFswDAYDVR0TBAUw
+AwEB/zALBgNVHQ8EBAMCAoQwHQYDVR0OBBYEFGTEh6z9lILJrkb7F6Gk4pZVAAOl
+MB8GA1UdIwQYMBaAFLTTn/Q+QOpQf7xtu+Iv1Tq5KPLAMA0GCSqGSIb3DQEBCwUA
+A4ICAQAp5bKzi06LQreHg9noCa2Tvx7yRRDXPhcJWMfEXmFz7tyxqKjXR0Orlqrv
+HFS7EyAMbHwnMOIbVks13dqWMHxDeXXHIYuZUpEBbS7CQWglt47G1YUnBhSTsFtf
+8r2CpXMkdoCbkQf04DS/w0G0G0Jx/1taXCwJyiKewFN/vrChPRsjYQJM4TDnYYpM
+GgaMgOxkyYvMkttO0tdXrUgaL6V2XfhQuonFRMRjeikA0f5yORea5vkU3FJ2e4eo
+ETkD0UyWmiWf7LMseewX4Pit7j11swhzTzTZhRWCzDrEXksjYZuslFy7bc2Epllr
+3WMPq9ywuCMcRcpwc3SKoFjNk+QCgoDdbsHVqkSAJH2RTgA/sZkIgjnr8ho81evs
+He3/dEmdorpFow1CU40zkFTRod5fWEKv5RSzYJzHiXbOZC0kp4WqGIQmM78JU8PR
+FXiTFJAwl0mBwD1/qjk59/9aWawxd+bR4utrfmvBb1TfzlC7Wy4ddxO1bSg/2T/a
+CzP41PVfl5DGXxdbiqWUed+aCrKp+9LVsyOUyvTC5l0zLuGwccsuzwe59YAJzUEu
+pMGP1o6GTr9PbURUP+NGqTsPnOO2sDA7/bnPMbQLzS3bj4JafY6EdQd6g+Qp4Lhp
+g3zmJZwBLlcC3kjvFhIRkPmWfn9R9smEaDJbRgeFtvE+r3rBLjAPDA1Sb290IHBs
+YXRmb3Jt
+-----END TRUSTED CERTIFICATE-----
diff --git a/certs/sample/platform.key.pem b/certs/sample/platform.key.pem
new file mode 100644
index 0000000..ae665c1
--- /dev/null
+++ b/certs/sample/platform.key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+xKny+RHcaKqOHhd8faazOPThNKqdG44=
+-----END PRIVATE KEY-----
diff --git a/certs/sample/public.cert.pem b/certs/sample/public.cert.pem
new file mode 100644
index 0000000..0bbbef0
--- /dev/null
+++ b/certs/sample/public.cert.pem
@@ -0,0 +1,33 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIFjzCCA3egAwIBAgIBBTANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
+MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
+LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xOTA5MTYwODAyNTZa
+Fw0yOTA5MTYwODAyNTZaMFkxCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
+eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRQwEgYDVQQDDAtS
+b290IHB1YmxpYzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPhNQOmF
+yU8QHB97Gt8yRjsB3LFk7/WFi7EyVMN2F65ASi4BcinaNGLG+ExW0+qAw8C+hmO6
+6OyXGqnJyYA7dgR+G78a39DLNYIUiNlsCN9SDj9LOgEZnEDIrMNjn03ctjwHxrDn
+Tmwozo4Pdl9GVDwUcLF46+JgOy3mvZMqO4GhUsiKzzC/pJ0DN9ZAZQl16/CwdrzM
+RHvEME60LG5VobjCBmgoLb0NlVDheTl/DZb9xv/fChZUGqzMo86WYtEfh/PmGSNU
+2gBjPSlgLvsqSTzq9msXpRl9yRfK+Y1Mzuo9fv3VzLxsxDT/LvYLUuMOZr+sMcsD
+9PRXUUJobZKrJSYE4RlLSz+Khezu96QkFheuTXqzp0k6NECSvPacJ3ZeChtNOUAP
+4EjUots6yFxWmdCcIhLqIpvyezjsJYPxpkJsopfClvJzeAEVGX8/yeD9GyWUXSzl
+m9dF5cMeZ8PfENjJhJlmyOPCGv1lFM79HinY8Y81EHCYCANfOLIgxFcrDwZsNmno
+VwMNmPuENbJ55ivNuJf7z+Bk1GRckVcQOP7tHPy6/wtYZDpFF4yWK/0RnsGnfx7c
+xnwcJNKpf9zjsPl9anw0btyLVG9AdFYowrA6cHVd23Iw1wohEw9YjQ5Xi2VKPtdC
+eIsff2oJTJwC+qrMltKW1FED/9mTEfdjzp8HAgMBAAGjXTBbMAwGA1UdEwQFMAMB
+Af8wCwYDVR0PBAQDAgKEMB0GA1UdDgQWBBRWAPsXtl3tQsQvm1a5D9ytY98bETAf
+BgNVHSMEGDAWgBS005/0PkDqUH+8bbviL9U6uSjywDANBgkqhkiG9w0BAQsFAAOC
+AgEATY9QnIGJVgKNQUVLjNNnn+ZHUzdPx3A5nGDFXXCmhz4l5RZPY+NU1LJ8OP9o
+TxiWp6mi3slrhl+0kbXjdhO9soZClIvOXyd9UShuCvUsizd1BSC+ltOtbxxCyp8q
+nz+7dEWdBe18OE3MdZGkw6uqhHZoE5Lirvi221aZFQibpJ4UnhYfnNUrsT2bx83w
+X9rIpsVS6fVoMncpvv0bSkrwMwBmsaywt5ETVfnzgc62HWZkrdhTiTwoTDxlMy1m
+1o+bvaPY0ZNY+4cHj6VUP4YZwuzjt2K/6uArM2r8VCNXVQQwwrO8zS/LjENO91K3
+BVgA8A98h2kR6OPz9QLI1Zl0Aer/fjpacjMOHTIINQIQJxhdQeQ0S9N/n2Vk5G87
+Y9RLP0ZnF18V4OIR4GoagxjGtYkLn4qrx26KzExOvBkb0b9khikUfQE7d0xPbwn9
+uc6i91+iRYDUUwnfjOudssgQIcd+GrD4E5Q1tTsnlWqepaPWKwh5hqD73t6EjO5i
+BVnyHJgOC0udV8mB9uxLBSCUTyOrgBNQ3BefZeWGVOJo+7zi1aPF7ei1dVpJ3bud
+PXDJ6NgR+46h4ir6yDnjBKTQYPBJww0cuVqHa+V5dK8tMvcroGjsqcdftL0qeD8f
+ek5xNNcPkvTZ1JfjiiwpmVf/lc9JyUnIZAVH1qm4MsYwgk8wDQwLUm9vdCBwdWJs
+aWM=
+-----END TRUSTED CERTIFICATE-----
diff --git a/certs/sample/public.key.pem b/certs/sample/public.key.pem
new file mode 100644
index 0000000..416da0f
--- /dev/null
+++ b/certs/sample/public.key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+wdoYnQ4L440Y1488vRqSzalA4FPApaQ=
+-----END PRIVATE KEY-----
diff --git a/certs/sample/root.cert.pem b/certs/sample/root.cert.pem
new file mode 100644
index 0000000..df6d89b
--- /dev/null
+++ b/certs/sample/root.cert.pem
@@ -0,0 +1,33 @@
+-----BEGIN TRUSTED CERTIFICATE-----
+MIIFlDCCA3ygAwIBAgIBATANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJGUjER
+MA8GA1UECAwIQnJpdHRhbnkxDzANBgNVBAcMBlZhbm5lczEQMA4GA1UECgwHSW9U
+LmJ6aDEZMBcGA1UEAwwQUm9vdCBjZXJ0aWZpY2F0ZTAeFw0xOTA5MTYwODAyNTRa
+Fw0yOTA5MTYwODAyNTRaMF4xCzAJBgNVBAYTAkZSMREwDwYDVQQIDAhCcml0dGFu
+eTEPMA0GA1UEBwwGVmFubmVzMRAwDgYDVQQKDAdJb1QuYnpoMRkwFwYDVQQDDBBS
+b290IGNlcnRpZmljYXRlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+p8MMg7OPSs5eELwTxGr5LEWevAKidu4t+Il07USnqHsMWGEHbX8Fcpfn6iyn8eno
+stVM149rDPxhwa8XM+B9RoR8zzWUEj77Ums/fSkJwvHZFqqk3s9saL11J8ypILMD
+o0LSr3pA9zHK2fcRmREKbjaCAhNJdpNnKbu3eYL2i9YQFFqUi+ilk+4Fgs4szQex
+a0UOq68v9FQc/4bPtOZp6JdZn06sT5ItaG3lEm/Lr/utc8kFE1c/ZcGlBoPO2hSG
+TVOzU4FabNa+JsfTfVj7yeQT1gGcXOeqSc1urefl9OashlqsPaB4BUoKIHZ9OXjS
+ckTFt1a+Eq2Zo7DgGmPjJxFp9lTMYpkez+KmQ+c4eUnImsV6krHMUrKlUB5BkbGl
+uAj4r/J6f1ReGiw6Ap687zLf6GdRz1R9fIUj5fYYWwEXsbDuS7F32Ad1lyd0L1La
+qXeQ3bhh2vaxKHPSONWmW//5+aGU9hyLQFQiC3BN34sf6yo0zGUspGRNhpzI6DRy
+cU2n54KMVLDZCkthNguz2fLM/mPlfQNdXZ62sn03Xy71uU5rAxO3JAmn+3oO8PGp
+k5/AtsHCfYWisKj4N8q1l89l50B6VviDEmsthOfr4SR0kHtQdJWjL1nunCPywfrV
+Jlf1AZYQaTP1UN7r+qjsCNx3a+OpWsBRqPWbVcCf4H8CAwEAAaNdMFswDAYDVR0T
+BAUwAwEB/zALBgNVHQ8EBAMCAgQwHQYDVR0OBBYEFLTTn/Q+QOpQf7xtu+Iv1Tq5
+KPLAMB8GA1UdIwQYMBaAFLTTn/Q+QOpQf7xtu+Iv1Tq5KPLAMA0GCSqGSIb3DQEB
+CwUAA4ICAQA7sf3SVkzWt2SbV/U5Is2RJmKeGWtbShmdnbFsDi1V2d0lJ+RsRu2k
+YuLUwNa9CuAva9AqzN0VRYcOoGoUMQJQYy7Fp0NqyxaIKzGwp6D/gDp1Bbjr0GvH
+OghddX893SI6Hq08RXVBsBIZhZ53Qdw4W2MzI55AGuJYQaGeql4dDqQuvP6jZ5wh
+6u+dE7XNrEup4lujSu66HQ8JSaEP1kGYv9CJMbXSqN2qKFt9S1cNfRFeI6//vfOa
+I6e/AeYtggyzguPj5T0iWLnl8VCagm0j3S0UvmoQ8+eAxBsiaMRGlqKF1PVcz2OM
+zlQMwY9opjyzZQP+140xo9vyK9jUA+U49hviurPo0f3+hU2OoOmB+V3u91iwIo5H
+euD9zEQvYT1DxbihOlwU+QikGaVcNdPR/UMkQU4jIbkk3qzR9rraR7WKOSXc1tuZ
+X+vxufXu/NZwl3Idfc2RT//lvo8sacmrMoHZBYb9mf1x7ZMwSmd10QhlmugVOGe+
+IMiPfCqdnMm4J9ZDGWm4Q91YXd91BBstIBHGmXtCp3wYhUiAg3GlLZaCvx26NQxE
+7kmRPdTXsYeUjJnHdkWCY+RTHIjXx/euX/3M7433GLrGGz87o2t8jtYfhi9de7on
+1QUUj+WWCJ5eXmUvCQeekzJTiBwDcrVsS+Izs/i7XXbutZtM1W0YKDASDBBSb290
+IGNlcnRpZmljYXRl
+-----END TRUSTED CERTIFICATE-----
diff --git a/certs/sample/root.key.pem b/certs/sample/root.key.pem
new file mode 100644
index 0000000..6ac1b41
--- /dev/null
+++ b/certs/sample/root.key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+6M/Xfpi9f8TQmDRKTkiWFePEpBafCwI=
+-----END PRIVATE KEY-----
diff --git a/docs/2.1-widgets.md b/docs/2.1-widgets.md
index f799133..f41e2d9 100644
--- a/docs/2.1-widgets.md
+++ b/docs/2.1-widgets.md
@@ -6,7 +6,7 @@ These tools are:
- ***wgtpkg-info***: command line tool to display
informations about a widget file.
-- ***wgtpkg-installer***: command line tool to
+- ***wgtpkg-install***: command line tool to
install a widget file.
- ***wgtpkg-pack***: command line tool to create
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0fde569..3a94d0d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -148,19 +148,19 @@ add_library(afm STATIC
MESSAGE(STATUS "Creating packaging tools")
-add_executable(wgtpkg-sign wgtpkg-sign.c)
+add_executable(wgtpkg-sign main-wgtpkg-sign.c)
target_link_libraries(wgtpkg-sign wgtpkg utils)
-add_executable(wgtpkg-pack wgtpkg-pack.c)
+add_executable(wgtpkg-pack main-wgtpkg-pack.c)
target_link_libraries(wgtpkg-pack wgtpkg utils)
-add_executable(wgtpkg-info wgtpkg-info.c)
+add_executable(wgtpkg-info main-wgtpkg-info.c)
target_link_libraries(wgtpkg-info wgtpkg wgt utils)
-add_executable(wgtpkg-installer wgtpkg-installer.c)
-target_link_libraries(wgtpkg-installer wgtpkg wgt secwrp utils)
+add_executable(wgtpkg-install main-wgtpkg-install.c)
+target_link_libraries(wgtpkg-install wgtpkg wgt secwrp utils)
-install(TARGETS wgtpkg-sign wgtpkg-pack wgtpkg-info wgtpkg-installer DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(TARGETS wgtpkg-sign wgtpkg-pack wgtpkg-info wgtpkg-install DESTINATION ${CMAKE_INSTALL_BINDIR})
###########################################################################
# dynamic tool daemons
diff --git a/src/README.md b/src/README.md
index df62fe3..49c48e9 100644
--- a/src/README.md
+++ b/src/README.md
@@ -53,13 +53,13 @@ widget package management
wgtpkg-certs.c
wgtpkg-digsig.c
wgtpkg-files.c
-wgtpkg-info.c
+main-wgtpkg-info.c
wgtpkg-install.c
-wgtpkg-installer.c
+main-wgtpkg-instal.c
wgtpkg-mustach.c
-wgtpkg-pack.c
+main-wgtpkg-pack.c
wgtpkg-permissions.c
-wgtpkg-sign.c
+main-wgtpkg-sign.c
wgtpkg-uninstall.c
wgtpkg-unit.c
wgtpkg-workdir.c
diff --git a/src/wgtpkg-info.c b/src/main-wgtpkg-info.c
index a6d7e6e..a6d7e6e 100644
--- a/src/wgtpkg-info.c
+++ b/src/main-wgtpkg-info.c
diff --git a/src/wgtpkg-installer.c b/src/main-wgtpkg-install.c
index a19c21a..7f6f187 100644
--- a/src/wgtpkg-installer.c
+++ b/src/main-wgtpkg-install.c
@@ -35,7 +35,7 @@
#include "wgt-info.h"
#include "wgtpkg-install.h"
-static const char appname[] = "wgtpkg-installer";
+static const char appname[] = "wgtpkg-install";
static const char *root;
static int force;
diff --git a/src/wgtpkg-pack.c b/src/main-wgtpkg-pack.c
index e448497..5e9a18f 100644
--- a/src/wgtpkg-pack.c
+++ b/src/main-wgtpkg-pack.c
@@ -31,6 +31,7 @@
#include "wgtpkg-files.h"
#include "wgtpkg-workdir.h"
#include "wgtpkg-zip.h"
+#include "wgtpkg-digsig.h"
const char appname[] = "wgtpkg-pack";
@@ -55,7 +56,9 @@ static void usage()
"\n"
" -o wgtfile the output widget file\n"
" -f force overwriting\n"
+ " -N no auto-sign"
" -q quiet\n"
+ " -S auto-sign"
" -v verbose\n"
" -V version\n"
"\n",
@@ -67,7 +70,9 @@ static struct option options[] = {
{ "output", required_argument, NULL, 'o' },
{ "force", no_argument, NULL, 'f' },
{ "help", no_argument, NULL, 'h' },
+ { "no-auto-sign",no_argument, NULL, 'N' },
{ "quiet", no_argument, NULL, 'q' },
+ { "auto-sign", no_argument, NULL, 'S' },
{ "verbose", no_argument, NULL, 'v' },
{ "version", no_argument, NULL, 'V' },
{ NULL, 0, NULL, 0 }
@@ -76,12 +81,13 @@ static struct option options[] = {
/* install the widgets of the list */
int main(int ac, char **av)
{
- int i, force;
+ int i, force, autosign;
char *wgtfile, *directory, *x;
struct stat s;
LOGUSER(appname);
+ autosign = 1;
force = 0;
wgtfile = directory = NULL;
for (;;) {
@@ -105,9 +111,15 @@ int main(int ac, char **av)
case 'h':
usage();
return 0;
+ case 'N':
+ autosign = 0;
+ break;
case 'V':
version();
return 0;
+ case 'S':
+ autosign = 1;
+ break;
case ':':
ERROR("missing argument");
return 1;
@@ -174,10 +186,12 @@ int main(int ac, char **av)
if (set_workdir(".", 0))
return 1;
-
if (fill_files())
return 1;
+ if (autosign && create_auto_digsig() < 0)
+ return 1;
+
return !!zwrite(wgtfile);
}
diff --git a/src/wgtpkg-sign.c b/src/main-wgtpkg-sign.c
index 4e2adf2..d40ddaf 100644
--- a/src/wgtpkg-sign.c
+++ b/src/main-wgtpkg-sign.c
@@ -60,6 +60,16 @@ static unsigned int get_number(const char *value)
return (unsigned int)val;
}
+static void make_realpath(char **x)
+{
+ char *p = realpath(*x, NULL);
+ if (p == NULL) {
+ ERROR("realpath failed for %s", *x);
+ exit(1);
+ }
+ *x = p;
+}
+
static void version()
{
printf(
@@ -92,25 +102,27 @@ static void usage()
);
}
-static struct option options[] = {
- { "key", required_argument, NULL, 'k' },
+static struct option options_l[] = {
+ { "author", no_argument, NULL, 'a' },
{ "certificate", required_argument, NULL, 'c' },
{ "distributor", required_argument, NULL, 'd' },
- { "author", no_argument, NULL, 'a' },
{ "force", no_argument, NULL, 'f' },
{ "help", no_argument, NULL, 'h' },
+ { "key", required_argument, NULL, 'k' },
{ "quiet", no_argument, NULL, 'q' },
{ "verbose", no_argument, NULL, 'v' },
{ "version", no_argument, NULL, 'V' },
{ NULL, 0, NULL, 0 }
};
+static const char options_s[] = "ac:d:fhk:qvV";
+
/* install the widgets of the list */
int main(int ac, char **av)
{
int i, force, ncert, author;
unsigned int number;
- char *keyfile, *certfiles[MAXCERT+1], *directory, **x;
+ char *keyfile, *certfiles[MAXCERT+1], *directory;
struct stat s;
LOGUSER(appname);
@@ -119,7 +131,7 @@ int main(int ac, char **av)
number = UINT_MAX;
keyfile = directory = NULL;
for (;;) {
- i = getopt_long(ac, av, "hfqvVak:c:d:", options, NULL);
+ i = getopt_long(ac, av, options_s, options_l, NULL);
if (i < 0)
break;
switch (i) {
@@ -129,13 +141,33 @@ int main(int ac, char **av)
return 1;
}
certfiles[ncert++] = optarg;
- continue;
- case 'k': x = &keyfile; break;
- case 'd': number = get_number(optarg); continue;
- case 'f': force = 1; continue;
- case 'a': author = 1; continue;
- case 'h': usage(); return 0;
- case 'V': version(); return 0;
+ break;
+ case 'k':
+ if (keyfile) {
+ ERROR("key already set");
+ return 1;
+ }
+ keyfile = optarg;
+ break;
+ case 'd':
+ if (number != UINT_MAX) {
+ ERROR("number already set");
+ return 1;
+ }
+ number = get_number(optarg);
+ break;
+ case 'f':
+ force = 1;
+ break;
+ case 'a':
+ author = 1;
+ break;
+ case 'h':
+ usage();
+ return 0;
+ case 'V':
+ version();
+ return 0;
case 'q':
if (verbosity)
verbosity--;
@@ -150,11 +182,6 @@ int main(int ac, char **av)
ERROR("unrecognized option");
return 1;
}
- if (*x != NULL) {
- ERROR("option set twice");
- return 1;
- }
- *x = optarg;
}
/* remaining arguments and final checks */
@@ -187,7 +214,7 @@ int main(int ac, char **av)
ERROR("can't access private key %s", keyfile);
return 1;
}
- for(i = 0 ; i < ncert ; i++)
+ for(i = 0 ; i < ncert ; i++)
if (access(certfiles[i], R_OK) != 0) {
ERROR("can't access certificate %s", certfiles[i]);
return 1;
@@ -197,13 +224,10 @@ int main(int ac, char **av)
if (xmlsec_init())
return 1;
-
/* compute absolutes paths */
-#define rp(x) do { char *p = realpath(x, NULL); if (p != NULL) x = p; else { ERROR("realpath failed for %s",x); return 1; } } while(0)
- rp(keyfile);
- for(i = 0 ; i < ncert ; i++)
- rp(certfiles[i]);
-#undef rp
+ make_realpath(&keyfile);
+ for(i = 0 ; i < ncert ; i++)
+ make_realpath(&certfiles[i]);
/* set and enter the workdir */
if (set_workdir(directory, 0))
diff --git a/src/wgtpkg-digsig.c b/src/wgtpkg-digsig.c
index d8ec58e..94f1d28 100644
--- a/src/wgtpkg-digsig.c
+++ b/src/wgtpkg-digsig.c
@@ -308,7 +308,7 @@ int verify_digsig(struct filedesc *fdesc)
int res, fd;
assert ((fdesc->flags & flag_signature) != 0);
- DEBUG("-- checking file %s",fdesc->name);
+ DEBUG("-- checking file %s", fdesc->name);
/* reset the flags */
file_clear_flags();
@@ -343,13 +343,23 @@ int check_all_signatures(int allow_none)
struct filedesc *fdesc;
n = signature_count();
- if (n == 0 && !allow_none) {
- ERROR("no signature found");
- return -1;
+ if (n == 0) {
+ if (!allow_none) {
+ ERROR("no signature found");
+ return -1;
+ }
+ return 0;
+ }
+
+ rc = xmlsec_init();
+ if (rc < 0) {
+ ERROR("can't check signature");
+ return rc;
}
+
rc = 0;
- for (i = n ; i-- > 0 ; ) {
- fdesc = signature_of_index(i);
+ for (i = n ; i ; ) {
+ fdesc = signature_of_index(--i);
irc = verify_digsig(fdesc);
if (irc < 0)
rc = irc;
@@ -409,4 +419,92 @@ error:
return rc;
}
+/* create a digital signature(s) from environment data */
+int create_auto_digsig()
+{
+ static const char envvar_prefix[] = "WGTPKG_AUTOSIGN_";
+ extern char **environ;
+
+ char **enviter;
+ char *var;
+ char *iter;
+ char *equal;
+ unsigned int num;
+ char *keyfile;
+ const char *certfiles[10];
+ int ncert;
+ int rc;
+ int i;
+
+ rc = 0;
+ /* enumerate environment variables */
+ enviter = environ;
+ while (rc == 0 && (var = *enviter++) != NULL) {
+ /* check the prefix */
+ if (0 != strncmp(var, envvar_prefix, sizeof(envvar_prefix) - 1))
+ continue; /* not an auto sign variable */
+ DEBUG("autosign found %s", var);
+
+ /* check the num */
+ iter = &var[sizeof(envvar_prefix) - 1];
+ if (*iter < '0' || *iter > '9') {
+ ERROR("bad autosign key found: %s", var);
+ rc = -1;
+ continue;
+ }
+
+ /* compute the number */
+ num = (unsigned int)(*iter++ - '0');
+ while (*iter >= '0' && *iter <= '9')
+ num = 10 * num + (unsigned int)(*iter++ - '0');
+
+ /* next char must be = */
+ if (*iter != '=' || !iter[1]) {
+ /* it is not an error to have an empty autosign */
+ WARNING("ignoring autosign key %.*s", (int)(iter - var), var);
+ continue;
+ }
+
+ /* auto signing with num */
+ INFO("autosign key %u found", num);
+
+ /* compute key and certificates */
+ equal = iter++;
+ keyfile = iter;
+ *equal = 0;
+ ncert = 0;
+ while (ncert < (int)((sizeof certfiles / sizeof *certfiles) - 1)
+ && (iter = strchr(iter, ':')) != NULL) {
+ *iter++ = 0;
+ certfiles[ncert++] = iter;
+ }
+ certfiles[ncert] = NULL;
+
+ /* check the parameters */
+ if (access(keyfile, R_OK) != 0) {
+ ERROR("autosign %u can't access private key %s", num, keyfile);
+ rc = -1;
+ }
+ for(i = 0 ; i < ncert ; i++) {
+ if (access(certfiles[i], R_OK) != 0) {
+ ERROR("autosign %u can't access certificate %s", num, certfiles[i]);
+ rc = -1;
+ }
+ }
+
+ /* sign now */
+ if (rc == 0) {
+ rc = xmlsec_init();
+ if (rc == 0) {
+ rc = create_digsig(num, keyfile, certfiles);
+ }
+ }
+
+ /* restore stolen chars */
+ while(ncert)
+ *(char*)(certfiles[--ncert] - 1) = ':';
+ *equal = '=';
+ }
+ return rc;
+}
diff --git a/src/wgtpkg-digsig.h b/src/wgtpkg-digsig.h
index 8c105d6..a1cc32d 100644
--- a/src/wgtpkg-digsig.h
+++ b/src/wgtpkg-digsig.h
@@ -26,6 +26,6 @@ extern int create_digsig(unsigned int index, const char *key, const char **certs
/* check the signatures of the current directory */
extern int check_all_signatures(int allow_none);
-#if !defined(DEFAULT_ALLOW_NO_SIGNATURE)
-#define DEFAULT_ALLOW_NO_SIGNATURE 0
-#endif
+/* create a digital signature(s) from environment data */
+extern int create_auto_digsig();
+
diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c
index 386d70b..c7de1f8 100644
--- a/src/wgtpkg-install.c
+++ b/src/wgtpkg-install.c
@@ -567,7 +567,7 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force
struct wgt_info *ifo;
const struct wgt_desc *desc;
char installdir[PATH_MAX];
- int err;
+ int err, rc;
struct unitconf uconf;
NOTICE("-- INSTALLING widget %s to %s --", wgtfile, root);
@@ -582,7 +582,12 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force
if (zread(wgtfile, 0))
goto error2;
- if (check_all_signatures(DEFAULT_ALLOW_NO_SIGNATURE))
+#if defined(ALLOW_NO_SIGNATURE)
+ rc = check_all_signatures(1);
+#else
+ rc = check_all_signatures(0);
+#endif
+ if (rc)
goto error2;
ifo = wgt_info_createat(workdirfd, NULL, 1, 1, 1);