1231200Smm/*- 2231200Smm * Copyright (c) 2003-2007 Tim Kientzle 3231200Smm * Copyright (c) 2011 Andres Mejia 4231200Smm * All rights reserved. 5231200Smm * 6231200Smm * Redistribution and use in source and binary forms, with or without 7231200Smm * modification, are permitted provided that the following conditions 8231200Smm * are met: 9231200Smm * 1. Redistributions of source code must retain the above copyright 10231200Smm * notice, this list of conditions and the following disclaimer. 11231200Smm * 2. Redistributions in binary form must reproduce the above copyright 12231200Smm * notice, this list of conditions and the following disclaimer in the 13231200Smm * documentation and/or other materials provided with the distribution. 14231200Smm * 15231200Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16231200Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17231200Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18231200Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19231200Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20231200Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21231200Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22231200Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23231200Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24231200Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25231200Smm */ 26231200Smm#include "test.h" 27231200Smm 28231200Smm/* Sanity test of internal crypto functionality */ 29231200Smm 30231200Smm#define __LIBARCHIVE_BUILD 1 31231200Smm#include "archive_crypto_private.h" 32231200Smm 33231200SmmDEFINE_TEST(test_archive_md5) 34231200Smm{ 35231200Smm archive_md5_ctx ctx; 36231200Smm unsigned char buf[] = ""; 37231200Smm unsigned char md[16]; 38231200Smm unsigned char actualmd[] = "\x93\xb8\x85\xad\xfe\x0d\xa0\x89" 39231200Smm "\xcd\xf6\x34\x90\x4f\xd5\x9f\x71"; 40231200Smm 41231200Smm if (ARCHIVE_OK != archive_md5_init(&ctx)) { 42231200Smm skipping("This platform does not support MD5"); 43231200Smm return; 44231200Smm } 45231200Smm assertEqualInt(ARCHIVE_OK, archive_md5_update(&ctx, buf, sizeof(buf))); 46231200Smm assertEqualInt(ARCHIVE_OK, archive_md5_final(&ctx, md)); 47231200Smm assertEqualMem(md, actualmd, sizeof(md)); 48231200Smm} 49231200Smm 50231200SmmDEFINE_TEST(test_archive_rmd160) 51231200Smm{ 52231200Smm archive_rmd160_ctx ctx; 53231200Smm unsigned char buf[] = ""; 54231200Smm unsigned char md[20]; 55231200Smm unsigned char actualmd[] = "\xc8\x1b\x94\x93\x34\x20\x22\x1a\x7a\xc0" 56231200Smm "\x04\xa9\x02\x42\xd8\xb1\xd3\xe5\x07\x0d"; 57231200Smm 58231200Smm if (ARCHIVE_OK != archive_rmd160_init(&ctx)) { 59231200Smm skipping("This platform does not support RMD160"); 60231200Smm return; 61231200Smm } 62231200Smm assertEqualInt(ARCHIVE_OK, archive_rmd160_update(&ctx, buf, sizeof(buf))); 63231200Smm assertEqualInt(ARCHIVE_OK, archive_rmd160_final(&ctx, md)); 64231200Smm assertEqualMem(md, actualmd, sizeof(md)); 65231200Smm} 66231200Smm 67231200SmmDEFINE_TEST(test_archive_sha1) 68231200Smm{ 69231200Smm archive_sha1_ctx ctx; 70231200Smm unsigned char buf[] = ""; 71231200Smm unsigned char md[20]; 72231200Smm unsigned char actualmd[] = "\x5b\xa9\x3c\x9d\xb0\xcf\xf9\x3f\x52\xb5" 73231200Smm "\x21\xd7\x42\x0e\x43\xf6\xed\xa2\x78\x4f"; 74231200Smm 75231200Smm if (ARCHIVE_OK != archive_sha1_init(&ctx)) { 76231200Smm skipping("This platform does not support SHA1"); 77231200Smm return; 78231200Smm } 79231200Smm assertEqualInt(ARCHIVE_OK, archive_sha1_update(&ctx, buf, sizeof(buf))); 80231200Smm assertEqualInt(ARCHIVE_OK, archive_sha1_final(&ctx, md)); 81231200Smm assertEqualMem(md, actualmd, sizeof(md)); 82231200Smm} 83231200Smm 84231200SmmDEFINE_TEST(test_archive_sha256) 85231200Smm{ 86231200Smm archive_sha256_ctx ctx; 87231200Smm unsigned char buf[] = ""; 88231200Smm unsigned char md[32]; 89231200Smm unsigned char actualmd[] = "\x6e\x34\x0b\x9c\xff\xb3\x7a\x98" 90231200Smm "\x9c\xa5\x44\xe6\xbb\x78\x0a\x2c" 91231200Smm "\x78\x90\x1d\x3f\xb3\x37\x38\x76" 92231200Smm "\x85\x11\xa3\x06\x17\xaf\xa0\x1d"; 93231200Smm 94231200Smm if (ARCHIVE_OK != archive_sha256_init(&ctx)) { 95231200Smm skipping("This platform does not support SHA256"); 96231200Smm return; 97231200Smm } 98231200Smm assertEqualInt(ARCHIVE_OK, archive_sha256_update(&ctx, buf, sizeof(buf))); 99231200Smm assertEqualInt(ARCHIVE_OK, archive_sha256_final(&ctx, md)); 100231200Smm assertEqualMem(md, actualmd, sizeof(md)); 101231200Smm} 102231200Smm 103231200SmmDEFINE_TEST(test_archive_sha384) 104231200Smm{ 105231200Smm archive_sha384_ctx ctx; 106231200Smm unsigned char buf[] = ""; 107231200Smm unsigned char md[48]; 108231200Smm unsigned char actualmd[] = "\xbe\xc0\x21\xb4\xf3\x68\xe3\x06" 109231200Smm "\x91\x34\xe0\x12\xc2\xb4\x30\x70" 110231200Smm "\x83\xd3\xa9\xbd\xd2\x06\xe2\x4e" 111231200Smm "\x5f\x0d\x86\xe1\x3d\x66\x36\x65" 112231200Smm "\x59\x33\xec\x2b\x41\x34\x65\x96" 113231200Smm "\x68\x17\xa9\xc2\x08\xa1\x17\x17"; 114231200Smm 115231200Smm if (ARCHIVE_OK != archive_sha384_init(&ctx)) { 116231200Smm skipping("This platform does not support SHA384"); 117231200Smm return; 118231200Smm } 119231200Smm assertEqualInt(ARCHIVE_OK, archive_sha384_update(&ctx, buf, sizeof(buf))); 120231200Smm assertEqualInt(ARCHIVE_OK, archive_sha384_final(&ctx, md)); 121231200Smm assertEqualMem(md, actualmd, sizeof(md)); 122231200Smm} 123231200Smm 124231200SmmDEFINE_TEST(test_archive_sha512) 125231200Smm{ 126231200Smm archive_sha512_ctx ctx; 127231200Smm unsigned char buf[] = ""; 128231200Smm unsigned char md[64]; 129231200Smm unsigned char actualmd[] = "\xb8\x24\x4d\x02\x89\x81\xd6\x93" 130231200Smm "\xaf\x7b\x45\x6a\xf8\xef\xa4\xca" 131231200Smm "\xd6\x3d\x28\x2e\x19\xff\x14\x94" 132231200Smm "\x2c\x24\x6e\x50\xd9\x35\x1d\x22" 133231200Smm "\x70\x4a\x80\x2a\x71\xc3\x58\x0b" 134231200Smm "\x63\x70\xde\x4c\xeb\x29\x3c\x32" 135231200Smm "\x4a\x84\x23\x34\x25\x57\xd4\xe5" 136231200Smm "\xc3\x84\x38\xf0\xe3\x69\x10\xee"; 137231200Smm 138231200Smm if (ARCHIVE_OK != archive_sha512_init(&ctx)) { 139231200Smm skipping("This platform does not support SHA512"); 140231200Smm return; 141231200Smm } 142231200Smm assertEqualInt(ARCHIVE_OK, archive_sha512_update(&ctx, buf, sizeof(buf))); 143231200Smm assertEqualInt(ARCHIVE_OK, archive_sha512_final(&ctx, md)); 144231200Smm assertEqualMem(md, actualmd, sizeof(md)); 145231200Smm} 146