annotate sha1-asm-ltc.c @ 908:3ca7113936c1 asm

aes and sha1 for arm
author Matt Johnston <matt@ucc.asn.au>
date Sun, 06 Oct 2013 21:49:15 +0800
parents
children e4b75744acab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
2 *
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
3 * LibTomCrypt is a library that provides various cryptographic
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
4 * algorithms in a highly modular and flexible manner.
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
5 *
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
6 * The library is free for all purposes without any express
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
7 * guarantee it works.
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
8 *
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
9 * Tom St Denis, [email protected], http://libtomcrypt.com
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
10 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
11 #include "tomcrypt.h"
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
12
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
13 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
14 @file sha1.c
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
15 SHA1 code by Tom St Denis
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
16 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
17
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
18
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
19 #ifdef DROPBEAR_SHA1_ASM
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
20
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
21 const struct ltc_hash_descriptor sha1_asm_desc =
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
22 {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
23 "sha1_asm",
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
24 102,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
25 20,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
26 64,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
27
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
28 /* OID */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
29 { 1, 3, 14, 3, 2, 26, },
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
30 6,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
31
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
32 &sha1_init,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
33 &sha1_process,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
34 &sha1_done,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
35 &sha1_test,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
36 NULL
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
37 };
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
38
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
39 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
40 Initialize the hash state
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
41 @param md The hash state you wish to initialize
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
42 @return CRYPT_OK if successful
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
43 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
44 int sha1_init(hash_state * md)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
45 {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
46 LTC_ARGCHK(md != NULL);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
47 md->sha1.state[0] = 0x67452301UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
48 md->sha1.state[1] = 0xefcdab89UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
49 md->sha1.state[2] = 0x98badcfeUL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
50 md->sha1.state[3] = 0x10325476UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
51 md->sha1.state[4] = 0xc3d2e1f0UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
52 md->sha1.curlen = 0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
53 md->sha1.length = 0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
54 return CRYPT_OK;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
55 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
56
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
57 void sha1_block_data_order(void* state_vars, const unsigned char *buf, size_t num);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
58
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
59 static int sha1_asm_compress(hash_state *md, unsigned char *buf)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
60 {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
61 sha1_block_data_order(&md->sha1.state, buf, 1);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
62 return CRYPT_OK;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
63 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
64
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
65 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
66 Process a block of memory though the hash
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
67 @param md The hash state
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
68 @param in The data to hash
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
69 @param inlen The length of the data (octets)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
70 @return CRYPT_OK if successful
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
71 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
72 HASH_PROCESS(sha1_process, sha1_asm_compress, sha1, 64)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
73
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
74 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
75 Terminate the hash to get the digest
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
76 @param md The hash state
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
77 @param out [out] The destination of the hash (20 bytes)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
78 @return CRYPT_OK if successful
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
79 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
80 int sha1_done(hash_state * md, unsigned char *out)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
81 {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
82 int i;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
83
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
84 LTC_ARGCHK(md != NULL);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
85 LTC_ARGCHK(out != NULL);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
86
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
87 if (md->sha1.curlen >= sizeof(md->sha1.buf)) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
88 return CRYPT_INVALID_ARG;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
89 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
90
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
91 /* increase the length of the message */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
92 md->sha1.length += md->sha1.curlen * 8;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
93
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
94 /* append the '1' bit */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
95 md->sha1.buf[md->sha1.curlen++] = (unsigned char)0x80;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
96
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
97 /* if the length is currently above 56 bytes we append zeros
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
98 * then compress. Then we can fall back to padding zeros and length
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
99 * encoding like normal.
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
100 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
101 if (md->sha1.curlen > 56) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
102 while (md->sha1.curlen < 64) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
103 md->sha1.buf[md->sha1.curlen++] = (unsigned char)0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
104 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
105 sha1_asm_compress(md, md->sha1.buf);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
106 md->sha1.curlen = 0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
107 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
108
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
109 /* pad upto 56 bytes of zeroes */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
110 while (md->sha1.curlen < 56) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
111 md->sha1.buf[md->sha1.curlen++] = (unsigned char)0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
112 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
113
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
114 /* store length */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
115 STORE64H(md->sha1.length, md->sha1.buf+56);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
116 sha1_asm_compress(md, md->sha1.buf);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
117
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
118 /* copy output */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
119 for (i = 0; i < 5; i++) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
120 STORE32H(md->sha1.state[i], out+(4*i));
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
121 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
122 #ifdef LTC_CLEAN_STACK
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
123 zeromem(md, sizeof(hash_state));
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
124 #endif
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
125 return CRYPT_OK;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
126 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
127
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
128 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
129 Self-test the hash
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
130 @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
131 */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
132 int sha1_test(void)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
133 {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
134 #ifndef LTC_TEST
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
135 return CRYPT_NOP;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
136 #else
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
137 static const struct {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
138 char *msg;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
139 unsigned char hash[20];
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
140 } tests[] = {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
141 { "abc",
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
142 { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
143 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
144 0x9c, 0xd0, 0xd8, 0x9d }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
145 },
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
146 { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
147 { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
148 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
149 0xE5, 0x46, 0x70, 0xF1 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
150 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
151 };
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
152
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
153 int i;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
154 unsigned char tmp[20];
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
155 hash_state md;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
156
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
157 for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
158 sha1_init(&md);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
159 sha1_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg));
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
160 sha1_done(&md, tmp);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
161 if (XMEMCMP(tmp, tests[i].hash, 20) != 0) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
162 return CRYPT_FAIL_TESTVECTOR;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
163 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
164 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
165 return CRYPT_OK;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
166 #endif
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
167 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
168
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
169 #endif
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
170
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
171
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
172
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
173 /* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha1.c,v $ */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
174 /* $Revision: 1.8 $ */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
175 /* $Date: 2006/11/01 09:28:17 $ */