[{"id":1752660,"web_url":"http://patchwork.ozlabs.org/comment/1752660/","msgid":"<540f947e-b635-cbb5-7eb4-258e88a178ed@denx.de>","list_archive_url":null,"date":"2017-08-21T10:36:53","subject":"Re: [swupdate] [PATCH resent 2/2] crypt: add unit tests for crypt\n\tfunctions","submitter":{"id":5771,"url":"http://patchwork.ozlabs.org/api/people/5771/","name":"Stefano Babic","email":"sbabic@denx.de"},"content":"On 17/08/2017 16:15, Christian Storm wrote:\n> Signed-off-by: Christian Storm <christian.storm@siemens.com>\n> ---\n>  Makefile                  |   7 ++-\n>  corelib/test/Makefile     |  64 ++++++++++++++++++++\n>  corelib/test/test_crypt.c | 148 ++++++++++++++++++++++++++++++++++++++++++++++\n>  3 files changed, 218 insertions(+), 1 deletion(-)\n>  create mode 100644 corelib/test/Makefile\n>  create mode 100644 corelib/test/test_crypt.c\n> \n> diff --git a/Makefile b/Makefile\n> index 0edb03a..92cc500 100644\n> --- a/Makefile\n> +++ b/Makefile\n> @@ -406,7 +406,8 @@ install: all\n>  PHONY += run-tests\n>  tests: \\\n>  \tacceptance-tests \\\n> -\tsuricatta-tests\n> +\tsuricatta-tests \\\n> +\tcorelib-tests\n>  \n>  PHONY += acceptance-tests\n>  acceptance-tests: FORCE\n> @@ -416,6 +417,10 @@ PHONY += suricatta-tests\n>  suricatta-tests: FORCE\n>  \t$(Q)$(MAKE) $(build)=suricatta/test SWOBJS=\"$(swupdate-objs)\" SWLIBS=\"$(swupdate-libs)\" LDLIBS=\"$(LDLIBS)\" tests\n>  \n> +PHONY += corelib-tests\n> +corelib-tests: FORCE\n> +\t$(Q)$(MAKE) $(build)=corelib/test SWOBJS=\"$(swupdate-objs)\" SWLIBS=\"$(swupdate-libs)\" LDLIBS=\"$(LDLIBS)\" tests\n> +\n>  # The actual objects are generated when descending,\n>  # make sure no implicit rule kicks in\n>  $(sort $(swupdate-all)): $(swupdate-dirs) ;\n> diff --git a/corelib/test/Makefile b/corelib/test/Makefile\n> new file mode 100644\n> index 0000000..b071177\n> --- /dev/null\n> +++ b/corelib/test/Makefile\n> @@ -0,0 +1,64 @@\n> +## Author: Christian Storm\n> +## Copyright (C) 2017, Siemens AG\n> +##\n> +## This program is free software; you can redistribute it and/or\n> +## modify it under the terms of the GNU General Public License as\n> +## published by the Free Software Foundation; either version 2 of\n> +## the License, or (at your option) any later version.\n> +##\n> +## This program is distributed in the hope that it will be useful,\n> +## but WITHOUT ANY WARRANTY; without even the implied warranty of\n> +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n> +## GNU General Public License for more details.\n> +##\n> +## You should have received a copy of the GNU General Public License\n> +## along with this program; if not, write to the Free Software\n> +## Foundation, Inc.\n> +\n> +tests-$(CONFIG_ENCRYPTED_IMAGES) += test_crypt\n> +\n> +ccflags-y += -I$(src)/../\n> +\n> +TARGETS    = $(addprefix $(obj)/, $(tests-y))\n> +tests-objs = $(addsuffix .o,   $(TARGETS))\n> +tests-lnk  = $(addsuffix .lnk, $(TARGETS))\n> +targets   += $(addsuffix .o,   $(tests-y))\n> +\n> +ifneq ($(CONFIG_EXTRA_LDFLAGS),)\n> +EXTRA_LDFLAGS += $(strip $(subst \",,$(CONFIG_EXTRA_LDFLAGS)))#\"))\n> +endif\n> +\n> +## transfer __mock_*() functions to according linker flags via rudimentary regex awk parsing\n> +LDMOCKS = `/usr/bin/awk '/^[^(extern)|(static)]*([\\*_[:alnum:]]+[[:blank:]]+)+[\\*]*__wrap_/{where = match($$0,\"__wrap_[_[:alnum:]]+\"); if (RSTART > 0) { print \"-Wl,--wrap=\" substr($$0, RSTART+7, RLENGTH-7);}}' $(basename $@).c`\n> +\n> +quiet_cmd_linktestexe = LD      $(basename $@)\n> +      cmd_linktestexe = $(srctree)/scripts/trylink \\\n> +\t\t\t\t\t\t\"$(basename $@)\" \\\n> +\t\t\t\t\t\t\"$(CC)\" \\\n> +\t\t\t\t\t\t\"$(KBUILD_CFLAGS)\" \\\n> +\t\t\t\t\t\t\"$(LDFLAGS) $(EXTRA_LDFLAGS) $(LDMOCKS)\" \\\n> +\t\t\t\t\t\t\"$(basename $@).o $(subst core/built-in.o,core/built-in.o.tmp,$(SWOBJS))\" \\\n> +\t\t\t\t\t\t\"$(SWLIBS)\" \\\n> +\t\t\t\t\t\t\"$(LDLIBS) cmocka\"\n> +\n> +EXECUTE_TEST = echo \"RUN $(subst $(obj)/,,$(var))\"; CMOCKA_MESSAGE_OUTPUT=TAP $(var)\n> +\n> +PHONY += default\n> +default:\n> +\t$(info please run 'make corelib-tests' in swupdate main directory)\n> +\n> +PHONY += tests\n> +ifneq \"$(tests-y)\" \"\"\n> +tests: $(tests-objs) $(tests-lnk)\n> +\t@+$(foreach var,$(TARGETS),$(EXECUTE_TEST);)\n> +else\n> +tests:\n> +\t@$(info crypto functions are disabled, nothing to test.)\n> +\t@:\n> +endif\n> +\n> +$(obj)/%.lnk: $(objtree)/core/built-in.o\n> +\t$(Q)strip -N main -o $(objtree)/core/built-in.o.tmp $(objtree)/core/built-in.o\n> +\t$(Q)$(call cmd,linktestexe)\n> +\n> +.PHONY: $(PHONY)\n> diff --git a/corelib/test/test_crypt.c b/corelib/test/test_crypt.c\n> new file mode 100644\n> index 0000000..84ac6ed\n> --- /dev/null\n> +++ b/corelib/test/test_crypt.c\n> @@ -0,0 +1,148 @@\n> +/*\n> + * Author: Christian Storm\n> + * Copyright (C) 2017, Siemens AG\n> + *\n> + * This program is free software; you can redistribute it and/or\n> + * modify it under the terms of the GNU General Public License as\n> + * published by the Free Software Foundation; either version 2 of\n> + * the License, or (at your option) any later version.\n> + *\n> + * This program is distributed in the hope that it will be useful,\n> + * but WITHOUT ANY WARRANTY; without even the implied warranty of\n> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n> + * GNU General Public License for more details.\n> + *\n> + * You should have received a copy of the GNU General Public License\n> + * along with this program; if not, write to the Free Software\n> + * Foundation, Inc.\n> + */\n> +\n> +#include <stdlib.h>\n> +#include <stdarg.h>\n> +#include <stddef.h>\n> +#include <setjmp.h>\n> +#include <cmocka.h>\n> +#include <util.h>\n> +#include <sslapi.h>\n> +\n> +struct cryptdata {\n> +\tunsigned char *key;\n> +\tunsigned char *iv;\n> +\tunsigned char *salt;\n> +\tunsigned char *crypttext;\n> +};\n> +\n> +static void hex2bin(unsigned char *dest, const unsigned char *source)\n> +{\n> +\tunsigned int val;\n> +\tfor (unsigned int i = 0; i < strlen((const char *)source); i += 2) {\n> +\t\tval = from_ascii((const char *)&source[i], 2, LG_16);\n> +\t\tdest[i / 2] = val;\n> +\t}\n> +}\n> +\n> +static void do_crypt(struct cryptdata *crypt, unsigned char *CRYPTTEXT, unsigned char *PLAINTEXT)\n> +{\n> +\tint len;\n> +\tvoid *dcrypt = swupdate_DECRYPT_init(crypt->key, crypt->iv, crypt->salt);\n> +\tassert_non_null(dcrypt);\n> +\n> +\tunsigned char *buffer = calloc(1, strlen((const char *)CRYPTTEXT) + EVP_MAX_BLOCK_LENGTH);\n> +\tint ret = swupdate_DECRYPT_update(dcrypt, buffer, &len, crypt->crypttext, strlen((const char *)CRYPTTEXT) / 2);\n> +\tassert_true(ret >= 0);\n> +\tassert_true(len == 0);\n> +\n> +\tret = swupdate_DECRYPT_final(dcrypt, crypt->crypttext, &len);\n> +\tassert_true(ret == 0);\n> +\tassert_true(len == (int)strlen((const char *)PLAINTEXT));\n> +\tassert_true(strncmp((const char *)buffer, (const char *)PLAINTEXT, len) == 0);\n> +\tfree(buffer);\n> +}\n> +\n> +static void test_crypt_nosalt(void **state)\n> +{\n> +\t(void)state;\n> +\n> +\tunsigned char KEY[] = \"E5E9FA1BA31ECD1AE84F75CAAA474F3A663F05F412028F81DA65D26EE56424B2\";\n> +\tunsigned char IV[] = \"E93DA465B309C53FEC5FF93C9637DA58\";\n> +\tunsigned char CRYPTTEXT[] = \"E4B7745CA14039555CECD548BB33E0C3\";\n> +\tunsigned char PLAINTEXT[] = \"CRYPTTEST\";\n> +\n> +\tstruct cryptdata crypt;\n> +\thex2bin((crypt.key = calloc(1, strlen((const char *)KEY))), KEY);\n> +\thex2bin((crypt.iv = calloc(1, strlen((const char *)IV))), IV);\n> +\tcrypt.salt = NULL;\n> +\thex2bin((crypt.crypttext = calloc(1, strlen((const char *)CRYPTTEXT))), CRYPTTEXT);\n> +\n> +\tdo_crypt(&crypt, &CRYPTTEXT[0], &PLAINTEXT[0]);\n> +\n> +\tfree(crypt.key);\n> +\tfree(crypt.iv);\n> +\tfree(crypt.crypttext);\n> +}\n> +\n> +static void test_crypt_salt(void **state)\n> +{\n> +\t(void)state;\n> +\n> +\tunsigned char KEY[] = \"69D54287F856D30B51B812FDF714556778CF31E1B104D9C68BD90C669C37D1AB\";\n> +\tunsigned char IV[] = \"E7039ABFCA63EB8EB1D320F7918275B2\";\n> +\tunsigned char SALT[] = \"F75A9C11F7F63C08\";\n> +\tunsigned char CRYPTTEXT[] = \"A17EBBB1A28459352FE3A994404E35AA\";\n> +\tunsigned char PLAINTEXT[] = \"CRYPTTEST\";\n> +\n> +\tstruct cryptdata crypt;\n> +\thex2bin((crypt.key = calloc(1, strlen((const char *)KEY))), KEY);\n> +\thex2bin((crypt.iv = calloc(1, strlen((const char *)IV))), IV);\n> +\thex2bin((crypt.salt = calloc(1, strlen((const char *)SALT))), SALT);\n> +\thex2bin((crypt.crypttext = calloc(1, strlen((const char *)CRYPTTEXT))), CRYPTTEXT);\n> +\n> +\tdo_crypt(&crypt, &CRYPTTEXT[0], &PLAINTEXT[0]);\n> +\n> +\tfree(crypt.key);\n> +\tfree(crypt.iv);\n> +\tfree(crypt.salt);\n> +\tfree(crypt.crypttext);\n> +}\n> +\n> +static void test_crypt_failure(void **state)\n> +{\n> +\t(void)state;\n> +\n> +\tunsigned char KEY[] = \"E5E9FA1BA31ECD1AE84F75CAAA474F3A663F05F412028F81DA65D26EE56424B2\";\n> +\tunsigned char IV[] = \"E93DA465B309C53FEC5FF93C9637DA58\";\n> +\tunsigned char CRYPTTEXT[] = \"CAFECAFECAFECAFECAFECAFECAFECAFE\";\n> +\n> +\tstruct cryptdata crypt;\n> +\thex2bin((crypt.key = calloc(1, strlen((const char *)KEY))), KEY);\n> +\thex2bin((crypt.iv = calloc(1, strlen((const char *)IV))), IV);\n> +\tcrypt.salt = NULL;\n> +\thex2bin((crypt.crypttext = calloc(1, strlen((const char *)CRYPTTEXT))), CRYPTTEXT);\n> +\n> +\tint len;\n> +\tvoid *dcrypt = swupdate_DECRYPT_init(crypt.key, crypt.iv, crypt.salt);\n> +\tassert_non_null(dcrypt);\n> +\n> +\tunsigned char *buffer = calloc(1, strlen((const char *)CRYPTTEXT) + EVP_MAX_BLOCK_LENGTH);\n> +\tint ret = swupdate_DECRYPT_update(dcrypt, buffer, &len, crypt.crypttext, strlen((const char *)CRYPTTEXT) / 2);\n> +\tret = swupdate_DECRYPT_final(dcrypt, crypt.crypttext, &len);\n> +\tassert_true(ret != 0);\n> +\tfree(buffer);\n> +\n> +\tfree(crypt.key);\n> +\tfree(crypt.iv);\n> +\tfree(crypt.salt);\n> +\tfree(crypt.crypttext);\n> +}\n> +\n> +int main(void)\n> +{\n> +\tint error_count = 0;\n> +\tconst struct CMUnitTest crypt_tests[] = {\n> +\t\tcmocka_unit_test(test_crypt_nosalt),\n> +\t\tcmocka_unit_test(test_crypt_failure),\n> +\t\tcmocka_unit_test(test_crypt_salt)\n> +\t};\n> +\terror_count += cmocka_run_group_tests_name(\"crypt\", crypt_tests, NULL, NULL);\n> +\treturn error_count;\n> +}\n> \n\nApplied to -master, thanks !\n\nBest regards,\nStefano Babic","headers":{"Return-Path":"<swupdate+bncBAABBTHP5LGAKGQEAR2V3ZQ@googlegroups.com>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=googlegroups.com\n\t(client-ip=2a00:1450:4010:c07::23f;\n\thelo=mail-lf0-x23f.google.com;\n\tenvelope-from=swupdate+bncbaabbthp5lgakgqear2v3zq@googlegroups.com;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=googlegroups.com header.i=@googlegroups.com\n\theader.b=\"pPuhNQo6\"; dkim-atps=neutral"],"Received":["from mail-lf0-x23f.google.com (mail-lf0-x23f.google.com\n\t[IPv6:2a00:1450:4010:c07::23f])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xbVVm20yFz9sR8\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 21 Aug 2017 20:37:04 +1000 (AEST)","by mail-lf0-x23f.google.com with SMTP id f123sf1218561lfe.0\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 21 Aug 2017 03:37:03 -0700 (PDT)","by 10.28.174.203 with SMTP id x194ls32812wme.18.canary-gmail; Mon,\n\t21 Aug 2017 03:37:00 -0700 (PDT)","from mail-out.m-online.net (mail-out.m-online.net. [212.18.0.9])\n\tby gmr-mx.google.com with ESMTPS id\n\t72si2599975wmo.9.2017.08.21.03.37.00\n\tfor <swupdate@googlegroups.com>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tMon, 21 Aug 2017 03:37:00 -0700 (PDT)","from frontend01.mail.m-online.net (unknown [192.168.8.182])\n\tby mail-out.m-online.net (Postfix) with ESMTP id 3xbVVh2Kk0z1rCgK;\n\tMon, 21 Aug 2017 12:37:00 +0200 (CEST)","from localhost (dynscan1.mnet-online.de [192.168.6.70])\n\tby mail.m-online.net (Postfix) with ESMTP id 3xbVVh1pzbz3j379;\n\tMon, 21 Aug 2017 12:37:00 +0200 (CEST)","from mail.mnet-online.de ([192.168.8.182])\n\tby localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new,\n\tport 10024)\n\twith ESMTP id j-St9qICJDaB; Mon, 21 Aug 2017 12:36:59 +0200 (CEST)","from babic.homelinux.org\n\t(host-88-217-136-221.customer.m-online.net [88.217.136.221])\n\t(using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mail.mnet-online.de (Postfix) with ESMTPS;\n\tMon, 21 Aug 2017 12:36:58 +0200 (CEST)","from localhost (mail.babic.homelinux.org [127.0.0.1])\n\tby babic.homelinux.org (Postfix) with ESMTP id A2BE145404AE;\n\tMon, 21 Aug 2017 12:36:56 +0200 (CEST)","from babic.homelinux.org ([127.0.0.1])\n\tby localhost (mail.babic.homelinux.org [127.0.0.1]) (amavisd-new,\n\tport 10024)\n\twith ESMTP id 5inB_MBV2CfW; Mon, 21 Aug 2017 12:36:54 +0200 (CEST)","from [192.168.178.132] (papero.fritz.box [192.168.178.132])\n\tby babic.homelinux.org (Postfix) with ESMTP id C5FC7454019C;\n\tMon, 21 Aug 2017 12:36:53 +0200 (CEST)"],"ARC-Seal":["i=2; a=rsa-sha256; t=1503311820; cv=pass;\n\td=google.com; s=arc-20160816;\n\tb=Oo8tBLxcGfu2b26NR7+VJZ+L+vk+UexerufCabigHnJKSqOpMAtXbZ8+qUFA4dqpB5\n\tBI/zjfWXOitPKrFqA/tE3XTfSxFsuYK89zM8oGsMlxi9ljMNqak9dM1il3x0Ar6ZG1SL\n\tcFYnewY+BK0J7wSWvDNVE76VrH1WyWL4oPdDE71UtLZZetI372TSzsyjhShIlKdpVZgu\n\tQX9BRvLRW+P+C+QnsdIXg/67NfiYRz/XX9tdn1sxdFePdG3KN7hmqfbCKkD8x/U8X+RP\n\tv2arENkbBi8kWOLz0aVznCBcHkp0h/h0Wy1jOBlnYZa86S4/XDrDhgxadswPCf8cfwe/\n\thSrQ==","i=1; a=rsa-sha256; t=1503311820; cv=none;\n\td=google.com; s=arc-20160816;\n\tb=w/jmSTs3s7Fejlv15HmHzviHWe/FfjDZS/QSWxbtUuE8kd/YB9WqJibcFOTeXSsvMe\n\tE3IGddAGHPJuzuoRwJ/vk2UZANQ1iNqNJAuCIqFtzByEWwatTQVbJV1e9lhliIfphXn4\n\tr/R2T6R355upzIe5X4oboagwkU4QiRVdjuZGJjbm3BPv+JzvCgHBFQrc2aS+RSJCGgph\n\t26EcBHeqtVVNkIFvZs223Gh7549/Azc8fwdruHrQ7gVusjZnvPqcfHCf1BvGqLOnGxvQ\n\tQYAsRYed6QKfxoMylZxQN0PttXKq+ut183qb9uPZBvY7CT34JVswTd9UBieZAGwkkijj\n\tj72w=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20160816; \n\th=list-unsubscribe:list-subscribe:list-archive:list-help:list-post\n\t:list-id:mailing-list:precedence:content-language:in-reply-to\n\t:mime-version:user-agent:date:message-id:from:references:to:subject\n\t:arc-authentication-results:arc-message-signature:sender\n\t:dkim-signature:arc-authentication-results;\n\tbh=DiVM1gwSUSfrl7nTBUC+Ju4YYm9UGWpVjgbMSGp9ryU=;\n\tb=yLZE8njyad4MBd9RVZWgIrncURm6NdL0tmJA88DF/KhPlBtwHZCmtFM9cc/2FZodES\n\tYy21x7o0JxE/3nP6eA9VCBpxQZsN3Au5Q2n8yy5hE7L3QLr6X69YOPcWabD4pgLsf4Rb\n\tFEGHXqO0orLaFPz7r6mc+cRRp5hAk3sR1fAPaWg3LCtdDgps4PHX6tHpLOfhqRYo1I6G\n\tWec6PvJccijrx+shfQyVEg1xqKD9dAVfyFCeuv5LKIHCKoa/o3vELJKsi3vdCdhcWtgv\n\tmC0L2Wt/qmwRQDJE8nvNiTJMm1zqzSaHEb6eHwkG0Nuj65G60fh8YtdynHq+6wRWjcOy\n\tuecA==","i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20160816; \n\th=content-transfer-encoding:content-language:in-reply-to:mime-version\n\t:user-agent:date:message-id:from:references:to:subject\n\t:arc-authentication-results;\n\tbh=ujwDV7tK6yphycOIJP8ElZsrXBhiL5YnzoF9Xzlam64=;\n\tb=UQoECpRi+Ma0SKRbHjYesgBPqP0JAyj8hwGBnT0SOpJvEM99qn+x/jwuASVuRNxgES\n\t+8Y9hKYnlfBMLK8Fk+hfKTnzd+Xx54iFUS3+sz6m7O+usQm0wJ219ud+u8utiaIValNp\n\toHGVQxiYL/YG5IFTQUA1o6wGfel0QI6QGgBTGlRRfz/HQxaFwyUI5EKtNKMAkcu6y5Ow\n\t/G9tZuyzzVZqvksKibqSqCoZ08AvAjkeNp+JwoSZKBI2zLwrrIxqnlu+iyMB073n9oZR\n\t85p3JVroVkunD3ZHhgT7Dj2UeSYnwXIiVq0TXEm/TBxXcJBFgjtKuQeYYPC0hjYvBwzo\n\t9now=="],"ARC-Authentication-Results":["i=2; gmr-mx.google.com;\n\tspf=neutral (google.com: 212.18.0.9 is neither permitted nor denied\n\tby best guess record for domain of sbabic@denx.de)\n\tsmtp.mailfrom=sbabic@denx.de","i=1; gmr-mx.google.com;\n\tspf=neutral (google.com: 212.18.0.9 is neither permitted nor denied\n\tby best guess record for domain of sbabic@denx.de)\n\tsmtp.mailfrom=sbabic@denx.de"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=googlegroups.com; s=20161025;\n\th=sender:subject:to:references:from:message-id:date:user-agent\n\t:mime-version:in-reply-to:content-language:x-original-sender\n\t:x-original-authentication-results:precedence:mailing-list:list-id\n\t:list-post:list-help:list-archive:list-subscribe:list-unsubscribe;\n\tbh=DiVM1gwSUSfrl7nTBUC+Ju4YYm9UGWpVjgbMSGp9ryU=;\n\tb=pPuhNQo6P+0SZvS30lfKKXyQTclD0XnWeOFHT9EvFWNY8gS0Y+0+tCuNI7PMCeShmS\n\tXD63Q1HPjT3pe/Hna4qJ5keRu4p96sNeYkIAjEDe9AgvC1sJ1HDNGwwJSnC6p2v4ekcM\n\tDyHD6hD2zYdo/HZS9vXlcc+cV/5gfFuvr7tgay4V52UCR1OTeBmLHOTloSLze125FqT/\n\tU8zZe7IQOmdqBDki13wZju/+/7uy0iULTDr+BTAZb0vVSacIwIIIMc7WUqJGHwxCSSoP\n\t2oMksPZj6hrr7REv7ri12GmgeCpAx+BrgeRhbbkwETneCOT7McGvn4nxi2MvT3Q5lrf7\n\t0gRg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=sender:x-gm-message-state:subject:to:references:from:message-id\n\t:date:user-agent:mime-version:in-reply-to:content-language\n\t:x-original-sender:x-original-authentication-results:precedence\n\t:mailing-list:list-id:x-spam-checked-in-group:list-post:list-help\n\t:list-archive:list-subscribe:list-unsubscribe;\n\tbh=DiVM1gwSUSfrl7nTBUC+Ju4YYm9UGWpVjgbMSGp9ryU=;\n\tb=a/ACLVhsVRLEeuCLsf8bGAoIRx3ILTV8a1/gAjY4ZZbWDnzhRrcubxDE9Y7TJGQdQs\n\tEJE2GrlTOHrEHBx7bgGjvEE9nqvBpJKtkkWSYGuElX/dCXFJ5OW79n0I4RtEFfTW1piC\n\tDmAEvD+CGsv7S24An96R/mLbkatusLQt3BUiBBs9HGhSJ6OQaJwgprbzUOVyirwoY5jD\n\t0ew2eaiFZQx2UVdVrWPAaj3qcn6g51o6bXXvYhPiTeCeaPG6G/m/Ive6lWALrSxIGVeE\n\tQtat9skwxShJ2qpgSPABzuP+ODUvy/WXN/J79Y4QvUoLtUlgRfSPSHRrPyaPoUB47A7s\n\tBVoQ==","Sender":"swupdate@googlegroups.com","X-Gm-Message-State":"AHYfb5ibYUHtBfAwqnBAq6ZFkG/rP7rjUbLaPt8wYKVie0gPJylvuf1G\n\tKfZ00UrXKbOBGw==","X-Received":["by 10.28.30.138 with SMTP id e132mr9484wme.9.1503311820873;\n\tMon, 21 Aug 2017 03:37:00 -0700 (PDT)","by 10.28.153.77 with SMTP id b74mr1654274wme.10.1503311820529;\n\tMon, 21 Aug 2017 03:37:00 -0700 (PDT)"],"X-BeenThere":"swupdate@googlegroups.com","Received-SPF":"neutral (google.com: 212.18.0.9 is neither permitted nor\n\tdenied by best guess record for domain of sbabic@denx.de)\n\tclient-ip=212.18.0.9; ","X-Virus-Scanned":["amavisd-new at mnet-online.de","Debian amavisd-new at babic.homelinux.org"],"Subject":"Re: [swupdate] [PATCH resent 2/2] crypt: add unit tests for crypt\n\tfunctions","To":"Christian Storm <christian.storm@siemens.com>, swupdate@googlegroups.com","References":"<20170817141546.31426-1-christian.storm@siemens.com>\n\t<20170817141546.31426-2-christian.storm@siemens.com>","From":"Stefano Babic <sbabic@denx.de>","Message-ID":"<540f947e-b635-cbb5-7eb4-258e88a178ed@denx.de>","Date":"Mon, 21 Aug 2017 12:36:53 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<20170817141546.31426-2-christian.storm@siemens.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Language":"en-GB","X-Original-Sender":"sbabic@denx.de","X-Original-Authentication-Results":"gmr-mx.google.com;       spf=neutral\n\t(google.com: 212.18.0.9 is neither permitted nor denied by best guess\n\trecord\n\tfor domain of sbabic@denx.de) smtp.mailfrom=sbabic@denx.de","Precedence":"list","Mailing-list":"list swupdate@googlegroups.com;\n\tcontact swupdate+owners@googlegroups.com","List-ID":"<swupdate.googlegroups.com>","X-Spam-Checked-In-Group":"swupdate@googlegroups.com","X-Google-Group-Id":"605343134186","List-Post":"<https://groups.google.com/group/swupdate/post>,\n\t<mailto:swupdate@googlegroups.com>","List-Help":"<https://groups.google.com/support/>,\n\t<mailto:swupdate+help@googlegroups.com>","List-Archive":"<https://groups.google.com/group/swupdate","List-Subscribe":"<https://groups.google.com/group/swupdate/subscribe>,\n\t<mailto:swupdate+subscribe@googlegroups.com>","List-Unsubscribe":"<mailto:googlegroups-manage+605343134186+unsubscribe@googlegroups.com>,\n\t<https://groups.google.com/group/swupdate/subscribe>"}}]