1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright 2002-2003 Sun Microsystems, Inc. All rights reserved. 24*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 28*7c478bd9Sstevel@tonic-gate 29*7c478bd9Sstevel@tonic-gate /* 30*7c478bd9Sstevel@tonic-gate * sha1_test.c 31*7c478bd9Sstevel@tonic-gate * 32*7c478bd9Sstevel@tonic-gate * Description: 33*7c478bd9Sstevel@tonic-gate * This file will exercise the SHA-1 code performing the three 34*7c478bd9Sstevel@tonic-gate * tests documented in FIPS PUB 180-1 plus one which calls 35*7c478bd9Sstevel@tonic-gate * SHA1Input with an exact multiple of 512 bits, plus a few 36*7c478bd9Sstevel@tonic-gate * error test checks. 37*7c478bd9Sstevel@tonic-gate * 38*7c478bd9Sstevel@tonic-gate * Portability Issues: 39*7c478bd9Sstevel@tonic-gate * None. 40*7c478bd9Sstevel@tonic-gate * 41*7c478bd9Sstevel@tonic-gate */ 42*7c478bd9Sstevel@tonic-gate 43*7c478bd9Sstevel@tonic-gate #include <stdio.h> 44*7c478bd9Sstevel@tonic-gate #include <strings.h> 45*7c478bd9Sstevel@tonic-gate 46*7c478bd9Sstevel@tonic-gate #include <sys/sha1.h> 47*7c478bd9Sstevel@tonic-gate #include "sha1_test.h" 48*7c478bd9Sstevel@tonic-gate #include "cmn_test.h" 49*7c478bd9Sstevel@tonic-gate 50*7c478bd9Sstevel@tonic-gate /* 51*7c478bd9Sstevel@tonic-gate * Define patterns for testing 52*7c478bd9Sstevel@tonic-gate */ 53*7c478bd9Sstevel@tonic-gate #define TEST1 "abc" 54*7c478bd9Sstevel@tonic-gate #define TEST2a "abcdbcdecdefdefgefghfghighijhi" 55*7c478bd9Sstevel@tonic-gate #define TEST2b "jkijkljklmklmnlmnomnopnopq" 56*7c478bd9Sstevel@tonic-gate #define TEST2 TEST2a TEST2b 57*7c478bd9Sstevel@tonic-gate #define TEST3 "a" 58*7c478bd9Sstevel@tonic-gate #define TEST4a "01234567012345670123456701234567" 59*7c478bd9Sstevel@tonic-gate #define TEST4b "01234567012345670123456701234567" 60*7c478bd9Sstevel@tonic-gate 61*7c478bd9Sstevel@tonic-gate /* an exact multiple of 512 bits */ 62*7c478bd9Sstevel@tonic-gate #define TEST4 TEST4a TEST4b 63*7c478bd9Sstevel@tonic-gate 64*7c478bd9Sstevel@tonic-gate static char *testarray[4] = { 65*7c478bd9Sstevel@tonic-gate TEST1, 66*7c478bd9Sstevel@tonic-gate TEST2, 67*7c478bd9Sstevel@tonic-gate TEST3, 68*7c478bd9Sstevel@tonic-gate TEST4 69*7c478bd9Sstevel@tonic-gate }; 70*7c478bd9Sstevel@tonic-gate 71*7c478bd9Sstevel@tonic-gate static int repeatcount[4] = { 1, 1, 1000000, 10 }; 72*7c478bd9Sstevel@tonic-gate 73*7c478bd9Sstevel@tonic-gate static char *resultarray[4] = { 74*7c478bd9Sstevel@tonic-gate "A9993E364706816ABA3E25717850C26C9CD0D89D", 75*7c478bd9Sstevel@tonic-gate "84983E441C3BD26EBAAE4AA1F95129E5E54670F1", 76*7c478bd9Sstevel@tonic-gate "34AA973CD4C4DAA4F61EEB2BDBAD27316534016F", 77*7c478bd9Sstevel@tonic-gate "DEA356A2CDDD90C7A7ECEDC5EBB563934F460452" 78*7c478bd9Sstevel@tonic-gate }; 79*7c478bd9Sstevel@tonic-gate 80*7c478bd9Sstevel@tonic-gate int 81*7c478bd9Sstevel@tonic-gate sha1test(void) 82*7c478bd9Sstevel@tonic-gate { 83*7c478bd9Sstevel@tonic-gate SHA1_CTX sha; 84*7c478bd9Sstevel@tonic-gate int fail; 85*7c478bd9Sstevel@tonic-gate int i; 86*7c478bd9Sstevel@tonic-gate int j; 87*7c478bd9Sstevel@tonic-gate uint8_t digest[20]; 88*7c478bd9Sstevel@tonic-gate uint8_t rdigest[20]; 89*7c478bd9Sstevel@tonic-gate 90*7c478bd9Sstevel@tonic-gate /* 91*7c478bd9Sstevel@tonic-gate * Perform SHA-1 tests 92*7c478bd9Sstevel@tonic-gate */ 93*7c478bd9Sstevel@tonic-gate for (j = 0; j < 4; ++j) { 94*7c478bd9Sstevel@tonic-gate fail = 0; 95*7c478bd9Sstevel@tonic-gate (void) printf("Test #%d ", j+1); 96*7c478bd9Sstevel@tonic-gate 97*7c478bd9Sstevel@tonic-gate SHA1Init(&sha); 98*7c478bd9Sstevel@tonic-gate 99*7c478bd9Sstevel@tonic-gate for (i = 0; i < repeatcount[j]; ++i) { 100*7c478bd9Sstevel@tonic-gate SHA1Update(&sha, (unsigned char *)testarray[j], 101*7c478bd9Sstevel@tonic-gate strlen(testarray[j])); 102*7c478bd9Sstevel@tonic-gate } 103*7c478bd9Sstevel@tonic-gate 104*7c478bd9Sstevel@tonic-gate SHA1Final(digest, &sha); 105*7c478bd9Sstevel@tonic-gate 106*7c478bd9Sstevel@tonic-gate getxdata(rdigest, resultarray[j], 20); 107*7c478bd9Sstevel@tonic-gate if (bcmp(digest, rdigest, 20) != 0) { 108*7c478bd9Sstevel@tonic-gate (void) printf("FAILED\n"); 109*7c478bd9Sstevel@tonic-gate fail++; 110*7c478bd9Sstevel@tonic-gate } else { 111*7c478bd9Sstevel@tonic-gate (void) printf("PASSED\n"); 112*7c478bd9Sstevel@tonic-gate } 113*7c478bd9Sstevel@tonic-gate } 114*7c478bd9Sstevel@tonic-gate 115*7c478bd9Sstevel@tonic-gate return (fail); 116*7c478bd9Sstevel@tonic-gate } 117