Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: base/security/sha.c

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/security/sha.h ('k') | base/serializable_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2007-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15 //
16 // Optimized for minimal code size.
17
18 #include "sha.h"
19
20 #include <stdio.h>
21 #include <string.h>
22 #include <inttypes.h>
23
24 #define rol(bits, value) (((value) << (bits)) | ((value) >> (32 - (bits))))
25
26 static void SHA1_Transform(SHA_CTX* ctx) {
27 uint32_t W[80];
28 uint32_t A, B, C, D, E;
29 uint8_t* p = ctx->buf;
30 int t;
31
32 for(t = 0; t < 16; ++t) {
33 uint32_t tmp = *p++ << 24;
34 tmp |= *p++ << 16;
35 tmp |= *p++ << 8;
36 tmp |= *p++;
37 W[t] = tmp;
38 }
39
40 for(; t < 80; t++) {
41 W[t] = rol(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
42 }
43
44 A = ctx->state[0];
45 B = ctx->state[1];
46 C = ctx->state[2];
47 D = ctx->state[3];
48 E = ctx->state[4];
49
50 for(t = 0; t < 80; t++) {
51 uint32_t tmp = rol(5,A) + E + W[t];
52
53 if (t < 20)
54 tmp += (D^(B&(C^D))) + 0x5A827999;
55 else if ( t < 40)
56 tmp += (B^C^D) + 0x6ED9EBA1;
57 else if ( t < 60)
58 tmp += ((B&C)|(D&(B|C))) + 0x8F1BBCDC;
59 else
60 tmp += (B^C^D) + 0xCA62C1D6;
61
62 E = D;
63 D = C;
64 C = rol(30,B);
65 B = A;
66 A = tmp;
67 }
68
69 ctx->state[0] += A;
70 ctx->state[1] += B;
71 ctx->state[2] += C;
72 ctx->state[3] += D;
73 ctx->state[4] += E;
74 }
75
76 static const HASH_VTAB SHA_VTAB = {
77 SHA_init,
78 SHA_update,
79 SHA_final,
80 SHA,
81 SHA_DIGEST_SIZE
82 };
83
84 void SHA_init(SHA_CTX* ctx) {
85 ctx->f = &SHA_VTAB;
86 ctx->state[0] = 0x67452301;
87 ctx->state[1] = 0xEFCDAB89;
88 ctx->state[2] = 0x98BADCFE;
89 ctx->state[3] = 0x10325476;
90 ctx->state[4] = 0xC3D2E1F0;
91 ctx->count = 0;
92 }
93
94
95 void SHA_update(SHA_CTX* ctx, const void* data, int len) {
96 int i = ctx->count & 63;
97 const uint8_t* p = (const uint8_t*)data;
98
99 ctx->count += len;
100
101 while (len--) {
102 ctx->buf[i++] = *p++;
103 if (i == 64) {
104 SHA1_Transform(ctx);
105 i = 0;
106 }
107 }
108 }
109
110
111 const uint8_t* SHA_final(SHA_CTX* ctx) {
112 uint8_t *p = ctx->buf;
113 uint64_t cnt = ctx->count * 8;
114 int i;
115
116 SHA_update(ctx, (uint8_t*)"\x80", 1);
117 while ((ctx->count & 63) != 56) {
118 SHA_update(ctx, (uint8_t*)"\0", 1);
119 }
120 for (i = 0; i < 8; ++i) {
121 uint8_t tmp = cnt >> ((7 - i) * 8);
122 SHA_update(ctx, &tmp, 1);
123 }
124
125 for (i = 0; i < 5; i++) {
126 uint32_t tmp = ctx->state[i];
127 *p++ = tmp >> 24;
128 *p++ = tmp >> 16;
129 *p++ = tmp >> 8;
130 *p++ = tmp >> 0;
131 }
132
133 return ctx->buf;
134 }
135
136 /* Convenience function */
137 const uint8_t* SHA(const void* data, int len, uint8_t* digest) {
138 SHA_CTX ctx;
139 SHA_init(&ctx);
140 SHA_update(&ctx, data, len);
141 memcpy(digest, SHA_final(&ctx), SHA_DIGEST_SIZE);
142 return digest;
143 }
OLDNEW
« no previous file with comments | « base/security/sha.h ('k') | base/serializable_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698