{"id":802695,"url":"http://patchwork.ozlabs.org/api/1.2/patches/802695/?format=json","web_url":"http://patchwork.ozlabs.org/project/swupdate/patch/20170817141546.31426-2-christian.storm@siemens.com/","project":{"id":58,"url":"http://patchwork.ozlabs.org/api/1.2/projects/58/?format=json","name":"swupdate development","link_name":"swupdate","list_id":"swupdate.googlegroups.com","list_email":"swupdate@googlegroups.com","web_url":"https://github.com/sbabic/swupdate","scm_url":"git://github.com/sbabic/swupdate","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170817141546.31426-2-christian.storm@siemens.com>","list_archive_url":null,"date":"2017-08-17T14:15:46","name":"[resent,2/2] crypt: add unit tests for crypt functions","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"59b5a531d65c2321405447fbb241102bd6988f32","submitter":{"id":72180,"url":"http://patchwork.ozlabs.org/api/1.2/people/72180/?format=json","name":"Storm, Christian","email":"christian.storm@siemens.com"},"delegate":{"id":1693,"url":"http://patchwork.ozlabs.org/api/1.2/users/1693/?format=json","username":"sbabic","first_name":"Stefano","last_name":"Babic","email":"sbabic@denx.de"},"mbox":"http://patchwork.ozlabs.org/project/swupdate/patch/20170817141546.31426-2-christian.storm@siemens.com/mbox/","series":[],"comments":"http://patchwork.ozlabs.org/api/patches/802695/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/802695/checks/","tags":{},"related":[],"headers":{"Return-Path":"<swupdate+bncBDD6BWV65QPBBY6L23GAKGQE4I4LX3Y@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:400c:c0c::23f;\n\thelo=mail-wr0-x23f.google.com;\n\tenvelope-from=swupdate+bncbdd6bwv65qpbby6l23gakgqe4i4lx3y@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=\"iTpD5q/D\"; dkim-atps=neutral"],"Received":["from mail-wr0-x23f.google.com (mail-wr0-x23f.google.com\n\t[IPv6:2a00:1450:400c:c0c::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 3xY7d30hlGz9t4V\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 18 Aug 2017 00:19:18 +1000 (AEST)","by mail-wr0-x23f.google.com with SMTP id z91sf674716wrc.2\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 17 Aug 2017 07:19:18 -0700 (PDT)","by 10.28.24.143 with SMTP id 137ls797754wmy.4.gmail; Thu, 17 Aug\n\t2017 07:19:15 -0700 (PDT)","from goliath.siemens.de (goliath.siemens.de. [192.35.17.28])\n\tby gmr-mx.google.com with ESMTPS id\n\tk84si6493wmh.5.2017.08.17.07.19.15 for <swupdate@googlegroups.com>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 17 Aug 2017 07:19:15 -0700 (PDT)","from mail2.siemens.de (mail2.siemens.de [139.25.208.11])\n\tby goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id v7HEJEKJ019039\n\t(version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK)\n\tfor <swupdate@googlegroups.com>; Thu, 17 Aug 2017 16:19:15 +0200","from MD1KR9XC.ww002.siemens.net ([139.25.68.253])\n\tby mail2.siemens.de (8.15.2/8.15.2) with ESMTP id v7HEJEvd031432;\n\tThu, 17 Aug 2017 16:19:14 +0200"],"ARC-Seal":["i=2; a=rsa-sha256; t=1502979555; cv=pass;\n\td=google.com; s=arc-20160816;\n\tb=s50qdTOLAUPVSoojMPxnQnF0i9eh6bbbVbIZGC3eFJr+q6jGt8o02wWzj+ysIfNRwa\n\t8WvT9vhNVOhLz0rCaTqq77PKBE9UP+3MhzXt0qU9Qql1663gcqUXv6MJM9GLNKX5FLmV\n\tXzLbP2jFM5NpIlNOk/YaEd/HoycPG+kXX6Wn5bOakQhNHjWpaYd6I/uI29eHVSGCE1In\n\tu+o4R8Yv+HK6ivCQreMeK9Qlyf1VJD51Rn+P7c8wwyP0AsnzNtdHhRQGkwUiBPY1cT6G\n\tWHNx+pyXcG7wYmgsyEiSSUWIwt5t25WuPkM4w3AfIE4cSZJdONLBflSmqrlc/DwezAT4\n\tcqkA==","i=1; a=rsa-sha256; t=1502979555; cv=none;\n\td=google.com; s=arc-20160816;\n\tb=n6G6g6Vi3kFscZ+pu7iyQqSPqCvSsUhWQKNGirjiVPka7DeMEMfjOrU8nxR7AUkyrY\n\tMvbkB6nVzaVF43/ZWjf5kddHfa9twJJpBRCj4yZtaE4sPuElwEgNS9NSl9Pqog6dRL8L\n\tKcKo3M6NwqemFfbga4wridpTKNyRlBV0lR+mTncFQSHMMUbC9lMfKONJQHj7riRpJtap\n\tyAnN3jPG5U/F70xg879kahbWSrAlmxPZYE6TxouKU8wo4QDOQzi0Cu9nsB/rNV9Ou/aV\n\tgYMxVCdkrMbyWyzs0ZdTG7mm9oIPAAA1yNls5r6AQwNRO+9uP+h51lyoi/7ajrl8BS4P\n\tspbA=="],"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:references:in-reply-to:message-id\n\t:date:subject:cc:to:from:arc-authentication-results\n\t:arc-message-signature:mime-version:sender:dkim-signature\n\t:arc-authentication-results;\n\tbh=MmI8kj03YZ63RtWL3z4GOuPIAKPF3+oBxGbtBfz2ios=;\n\tb=dIb0/65fzlROIGYYdzkCNfzcma2slTjA6Sm6mwgNO2pT5lJYAw9vP3A2at/2NvoR8a\n\t7J2EbEUQmO9r4rg2+x0/tGpl/N1m1fiB2BA3OVQkLn7kQKES0e+SsOwkBZHNM/vRj5IP\n\tKEnpg/lnlFUVQyyz9Nqhoa3RQT8kfW9/juGyMaBwFLMpLIMMAaCguorgbxRkVQRavB1Y\n\tkS4pqpXc6wpk+yAR/saj+Cc90Q0HRavk1cCDamSMGKN9Hxp1yI9zyJWrBe7cksHcGCHa\n\tSlSP9o3pJEEU00Yu1YRMbTGBggjC0nh3U4P7HnTh8iYPKGrYI1xDtDpx9gURAQvJ2U9K\n\tovHA==","i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20160816; \n\th=references:in-reply-to:message-id:date:subject:cc:to:from\n\t:arc-authentication-results;\n\tbh=OqwiRtw8WIFge6Q8dUMWeuFvc4AcEmBIMx9gtdb9f7s=;\n\tb=VnVpBkoaIoNz9eAiL7j758E2YHpJ/pq7iSr2vzu827pOKv6IYHoL2OlUUQ9SktTMTz\n\ta9VE/YiilFUGHv4LkQPF/8BQhyBWB4jcWIfEnwh5LFgcHh/azWjFxmLNSF+IVXAT5yOn\n\tXCc2i4fMOOSQhroS/sfvQYi5KCrjkQUqoJpcA47CuXDaFd1dsgDFAHrlp7+i3sZ9tRNr\n\tXdm6NOj/JQNXfPCSODc6LDKXEpKkL86tzJ/wn6rMmHLdSJ1nLK7UyMR01DucGgYmUh7E\n\t/CPzdDxHQbDwUl1fvBNzsGC/MiMWHrkM1XY2r8GR5yaDD7WQEYox4SSzQ3+t+9iQw7jj\n\t4EFA=="],"ARC-Authentication-Results":["i=2; gmr-mx.google.com;\n\tspf=neutral (google.com: 192.35.17.28 is neither permitted nor denied\n\tby best guess record for domain of\n\tchristian.storm@siemens.com)\n\tsmtp.mailfrom=christian.storm@siemens.com","i=1; gmr-mx.google.com;\n\tspf=neutral (google.com: 192.35.17.28 is neither permitted nor denied\n\tby best guess record for domain of\n\tchristian.storm@siemens.com)\n\tsmtp.mailfrom=christian.storm@siemens.com"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=googlegroups.com; s=20161025;\n\th=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:x-original-sender:x-original-authentication-results\n\t:precedence:mailing-list:list-id:list-post:list-help:list-archive\n\t:list-subscribe:list-unsubscribe;\n\tbh=MmI8kj03YZ63RtWL3z4GOuPIAKPF3+oBxGbtBfz2ios=;\n\tb=iTpD5q/DJ8UFSjTZZ9VNtnFj4RR9pN6LU5y0A4TRGjLD9TaV9g5BfAIyWWCSlZkSzG\n\tXY6luXyH39DBmwcmVN2RRA0UgSDDWWDq/dROix4yO+36t1zPz6zv6AbudUtoyKnHTfVc\n\tzo+i/rhHtw+ObP/8T9k5QBaVxORroSYYqTnxPj6aIZjRYZTnHGlHY+1VMyJIrld/NlvB\n\tpAOam6C+vI0YFbmN+RqLP41/j//CUxBVpv+uRt+lhjFvK2YXo5RJMM0SEhQNjQpsPXz6\n\tOTEK2bhIegLksORJHhA31CzLdJUgmQE2dRDoPcUD/HRD3l+ywmTkaM0YpFwY3/83p8/Y\n\tyoxA==","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:mime-version:from:to:cc:subject:date\n\t:message-id:in-reply-to:references:x-original-sender\n\t:x-original-authentication-results:precedence:mailing-list:list-id\n\t:x-spam-checked-in-group:list-post:list-help:list-archive\n\t:list-subscribe:list-unsubscribe;\n\tbh=MmI8kj03YZ63RtWL3z4GOuPIAKPF3+oBxGbtBfz2ios=;\n\tb=j22IFJD0uYSlZ0pjzkV+8WksxhX/16vNMOzArS2nKr7jrHSAhyaVtkmJk4hE7arMEx\n\tpzVQc5iCRxnWRoNKiYbO2Dk7zjLUy996z5OaL8/CnWR7dXlgndWp4zSNVxHBdIZzgJp5\n\tWsMlZSo0LKpV6PJvRpzTU3UkL1DzJZ7/o8Y4pYNWiD84eWI/nIvDINSQd5eKuq58ES9u\n\tmqfaSmtNQC3+8LoZJWXrPWXIc8S/JncLVHExfzwX+rN1b5V1vUKcmIQsXTMnjR0aiIXq\n\tZnmDxc2Ja1QazdXVTP33QbMMcRPr5l+g5z+eCigUytNz205THsbf7/go10IyVVR4OFVM\n\t3htg==","Sender":"swupdate@googlegroups.com","X-Gm-Message-State":"AHYfb5gi9OfmkcXRARQCVQ34SvoNGNoja3dc2hfy48rfiAgCKIqnY7fz\n\ttMQsFSFuvkAGwg==","X-Received":["by 10.28.209.199 with SMTP id i190mr3058wmg.11.1502979555748;\n\tThu, 17 Aug 2017 07:19:15 -0700 (PDT)","by 10.223.172.172 with SMTP id o41mr56612wrc.19.1502979555335;\n\tThu, 17 Aug 2017 07:19:15 -0700 (PDT)"],"MIME-Version":"1.0","X-BeenThere":"swupdate@googlegroups.com","Received-SPF":"neutral (google.com: 192.35.17.28 is neither permitted nor\n\tdenied by best guess record for domain of\n\tchristian.storm@siemens.com) client-ip=192.35.17.28; ","From":"Christian Storm <christian.storm@siemens.com>","To":"swupdate@googlegroups.com","Cc":"Christian Storm <christian.storm@siemens.com>","Subject":"[swupdate] [PATCH resent 2/2] crypt: add unit tests for crypt\n\tfunctions","Date":"Thu, 17 Aug 2017 16:15:46 +0200","Message-Id":"<20170817141546.31426-2-christian.storm@siemens.com>","X-Mailer":"git-send-email 2.14.1","In-Reply-To":"<20170817141546.31426-1-christian.storm@siemens.com>","References":"<20170817141546.31426-1-christian.storm@siemens.com>","X-Original-Sender":"christian.storm@siemens.com","X-Original-Authentication-Results":"gmr-mx.google.com;       spf=neutral\n\t(google.com: 192.35.17.28 is neither permitted nor denied by best\n\tguess\n\trecord for domain of christian.storm@siemens.com)\n\tsmtp.mailfrom=christian.storm@siemens.com","Content-Type":"text/plain; charset=\"UTF-8\"","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>"},"content":"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","diff":"diff --git a/Makefile b/Makefile\nindex 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) ;\ndiff --git a/corelib/test/Makefile b/corelib/test/Makefile\nnew file mode 100644\nindex 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)\ndiff --git a/corelib/test/test_crypt.c b/corelib/test/test_crypt.c\nnew file mode 100644\nindex 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","prefixes":["resent","2/2"]}