annotate sha1-asm-ltc.c @ 911:367205a2c1c4 asm

Include license information for Cryptogams routines
author Matt Johnston <matt@ucc.asn.au>
date Thu, 27 Feb 2014 22:30:56 +0800
parents e4b75744acab
children
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 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
22 Initialize the hash state
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
23 @param md The hash state you wish to initialize
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
24 @return CRYPT_OK if successful
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
25 */
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
26 static int sha1_asm_init(hash_state * md)
908
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 LTC_ARGCHK(md != NULL);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
29 md->sha1.state[0] = 0x67452301UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
30 md->sha1.state[1] = 0xefcdab89UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
31 md->sha1.state[2] = 0x98badcfeUL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
32 md->sha1.state[3] = 0x10325476UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
33 md->sha1.state[4] = 0xc3d2e1f0UL;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
34 md->sha1.curlen = 0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
35 md->sha1.length = 0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
36 return CRYPT_OK;
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
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
39 void sha1_block_data_order(void* sha1s, const unsigned char *buf, size_t num);
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
40
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
41 static int sha1_asm_compress(hash_state *md, unsigned char *buf, size_t num)
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
42 {
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
43 sha1_block_data_order(&md->sha1.state, buf, num);
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
44 return CRYPT_OK;
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
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
47 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
48 Process a block of memory though the hash
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
49 @param md The hash state
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
50 @param in The data to hash
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
51 @param inlen The length of the data (octets)
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
52 @return CRYPT_OK if successful
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
53 */
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
54 int sha1_asm_process (hash_state * md, const unsigned char *in, unsigned long inlen) \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
55 { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
56 unsigned long n; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
57 int err; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
58 LTC_ARGCHK(md != NULL); \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
59 LTC_ARGCHK(in != NULL); \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
60 if (md-> sha1 .curlen > sizeof(md-> sha1 .buf)) { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
61 return CRYPT_INVALID_ARG; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
62 } \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
63 while (inlen > 0) { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
64 if (md-> sha1 .curlen == 0 && inlen >= 64) { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
65 //const size_t num = inlen / 64;
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
66 const size_t num = 1;
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
67 if ((err = sha1_asm_compress (md, (unsigned char *)in, num)) != CRYPT_OK) { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
68 return err; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
69 } \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
70 md-> sha1 .length += 64 * 8 * num; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
71 in += 64 * num; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
72 inlen -= 64 * num; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
73 } else { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
74 n = MIN(inlen, (64 - md-> sha1 .curlen)); \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
75 memcpy(md-> sha1 .buf + md-> sha1.curlen, in, (size_t)n); \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
76 md-> sha1 .curlen += n; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
77 in += n; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
78 inlen -= n; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
79 if (md-> sha1 .curlen == 64) { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
80 if ((err = sha1_asm_compress (md, md-> sha1 .buf, 1)) != CRYPT_OK) { \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
81 return err; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
82 } \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
83 md-> sha1 .length += 8*64; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
84 md-> sha1 .curlen = 0; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
85 } \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
86 } \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
87 } \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
88 return CRYPT_OK; \
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
89 }
908
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 /**
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
92 Terminate the hash to get the digest
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
93 @param md The hash state
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
94 @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
95 @return CRYPT_OK if successful
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
96 */
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
97 int sha1_asm_done(hash_state * md, unsigned char *out)
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
98 {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
99 int i;
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 LTC_ARGCHK(md != NULL);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
102 LTC_ARGCHK(out != NULL);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
103
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
104 if (md->sha1.curlen >= sizeof(md->sha1.buf)) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
105 return CRYPT_INVALID_ARG;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
106 }
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 /* increase the length of the message */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
109 md->sha1.length += md->sha1.curlen * 8;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
110
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
111 /* append the '1' bit */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
112 md->sha1.buf[md->sha1.curlen++] = (unsigned char)0x80;
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 /* 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
115 * 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
116 * encoding like normal.
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 if (md->sha1.curlen > 56) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
119 while (md->sha1.curlen < 64) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
120 md->sha1.buf[md->sha1.curlen++] = (unsigned char)0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
121 }
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
122 sha1_asm_compress(md, md->sha1.buf, 1);
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
123 md->sha1.curlen = 0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
124 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
125
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
126 /* pad upto 56 bytes of zeroes */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
127 while (md->sha1.curlen < 56) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
128 md->sha1.buf[md->sha1.curlen++] = (unsigned char)0;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
129 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
130
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
131 /* store length */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
132 STORE64H(md->sha1.length, md->sha1.buf+56);
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
133 sha1_asm_compress(md, md->sha1.buf, 1);
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
134
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
135 /* copy output */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
136 for (i = 0; i < 5; i++) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
137 STORE32H(md->sha1.state[i], out+(4*i));
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
138 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
139 #ifdef LTC_CLEAN_STACK
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
140 zeromem(md, sizeof(hash_state));
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
141 #endif
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
142 return CRYPT_OK;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
143 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
144
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 Self-test the hash
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
147 @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
148 */
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
149 int sha1_asm_test(void)
908
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 #ifndef LTC_TEST
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
152 return CRYPT_NOP;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
153 #else
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
154 static const struct {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
155 char *msg;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
156 unsigned char hash[20];
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
157 } tests[] = {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
158 { "abc",
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
159 { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
160 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
161 0x9c, 0xd0, 0xd8, 0x9d }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
162 },
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
163 { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
164 { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
165 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5,
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
166 0xE5, 0x46, 0x70, 0xF1 }
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
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
170 int i;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
171 unsigned char tmp[20];
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
172 hash_state md;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
173
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
174 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
175 sha1_init(&md);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
176 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
177 sha1_done(&md, tmp);
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
178 if (XMEMCMP(tmp, tests[i].hash, 20) != 0) {
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
179 return CRYPT_FAIL_TESTVECTOR;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
180 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
181 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
182 return CRYPT_OK;
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
183 #endif
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
184 }
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
185
909
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
186 const struct ltc_hash_descriptor sha1_asm_desc =
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
187 {
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
188 "sha1_asm",
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
189 102,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
190 20,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
191 64,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
192
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
193 /* OID */
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
194 { 1, 3, 14, 3, 2, 26, },
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
195 6,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
196
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
197 &sha1_asm_init,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
198 &sha1_asm_process,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
199 &sha1_asm_done,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
200 &sha1_asm_test,
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
201 NULL
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
202 };
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
203
e4b75744acab - Call the asm with multiple blocks
Matt Johnston <matt@ucc.asn.au>
parents: 908
diff changeset
204
908
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
205 #endif
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
206
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
207
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
208
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
209 /* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha1.c,v $ */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
210 /* $Revision: 1.8 $ */
3ca7113936c1 aes and sha1 for arm
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
211 /* $Date: 2006/11/01 09:28:17 $ */