Skip to content

Commit 3cac628

Browse files
author
Palmer Cox
committed
Sha2: Remove the result_X() methods; move logic into the Digest impls.
The result_X() methods just calculate an output of a fixed size. They don't really have much to do with running the actually hash algorithm until the very last step - the output. It makes much more sense to put all this logic into the Digest impls for each specific variation on the hash function.
1 parent 5b01555 commit 3cac628

File tree

1 file changed

+50
-73
lines changed

1 file changed

+50
-73
lines changed

src/libextra/crypto/sha2.rs

Lines changed: 50 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -267,48 +267,6 @@ impl Engine512 {
267267

268268
self.finished = true;
269269
}
270-
271-
fn result_512(&mut self, out: &mut [u8]) {
272-
self.finish();
273-
274-
from_u64(self.H0, out.mut_slice(0, 8));
275-
from_u64(self.H1, out.mut_slice(8, 16));
276-
from_u64(self.H2, out.mut_slice(16, 24));
277-
from_u64(self.H3, out.mut_slice(24, 32));
278-
from_u64(self.H4, out.mut_slice(32, 40));
279-
from_u64(self.H5, out.mut_slice(40, 48));
280-
from_u64(self.H6, out.mut_slice(48, 56));
281-
from_u64(self.H7, out.mut_slice(56, 64));
282-
}
283-
284-
fn result_384(&mut self, out: &mut [u8]) {
285-
self.finish();
286-
287-
from_u64(self.H0, out.mut_slice(0, 8));
288-
from_u64(self.H1, out.mut_slice(8, 16));
289-
from_u64(self.H2, out.mut_slice(16, 24));
290-
from_u64(self.H3, out.mut_slice(24, 32));
291-
from_u64(self.H4, out.mut_slice(32, 40));
292-
from_u64(self.H5, out.mut_slice(40, 48));
293-
}
294-
295-
fn result_256(&mut self, out: &mut [u8]) {
296-
self.finish();
297-
298-
from_u64(self.H0, out.mut_slice(0, 8));
299-
from_u64(self.H1, out.mut_slice(8, 16));
300-
from_u64(self.H2, out.mut_slice(16, 24));
301-
from_u64(self.H3, out.mut_slice(24, 32));
302-
}
303-
304-
fn result_224(&mut self, out: &mut [u8]) {
305-
self.finish();
306-
307-
from_u64(self.H0, out.mut_slice(0, 8));
308-
from_u64(self.H1, out.mut_slice(8, 16));
309-
from_u64(self.H2, out.mut_slice(16, 24));
310-
from_u32((self.H3 >> 32) as u32, out.mut_slice(24, 28));
311-
}
312270
}
313271

314272
// Constants necessary for SHA-2 512 family of digests.
@@ -372,7 +330,17 @@ impl Digest for Sha512 {
372330
}
373331

374332
fn result(&mut self, out: &mut [u8]) {
375-
self.engine.result_512(out)
333+
self.engine.finish();
334+
335+
from_u64(self.engine.H0, out.mut_slice(0, 8));
336+
from_u64(self.engine.H1, out.mut_slice(8, 16));
337+
from_u64(self.engine.H2, out.mut_slice(16, 24));
338+
from_u64(self.engine.H3, out.mut_slice(24, 32));
339+
from_u64(self.engine.H4, out.mut_slice(32, 40));
340+
from_u64(self.engine.H5, out.mut_slice(40, 48));
341+
from_u64(self.engine.H6, out.mut_slice(48, 56));
342+
from_u64(self.engine.H7, out.mut_slice(56, 64));
343+
376344
}
377345

378346
fn reset(&mut self) {
@@ -428,7 +396,14 @@ impl Digest for Sha384 {
428396
}
429397

430398
fn result(&mut self, out: &mut [u8]) {
431-
self.engine.result_384(out)
399+
self.engine.finish();
400+
401+
from_u64(self.engine.H0, out.mut_slice(0, 8));
402+
from_u64(self.engine.H1, out.mut_slice(8, 16));
403+
from_u64(self.engine.H2, out.mut_slice(16, 24));
404+
from_u64(self.engine.H3, out.mut_slice(24, 32));
405+
from_u64(self.engine.H4, out.mut_slice(32, 40));
406+
from_u64(self.engine.H5, out.mut_slice(40, 48));
432407
}
433408

434409
fn reset(&mut self) {
@@ -484,7 +459,12 @@ impl Digest for Sha512Trunc256 {
484459
}
485460

486461
fn result(&mut self, out: &mut [u8]) {
487-
self.engine.result_256(out)
462+
self.engine.finish();
463+
464+
from_u64(self.engine.H0, out.mut_slice(0, 8));
465+
from_u64(self.engine.H1, out.mut_slice(8, 16));
466+
from_u64(self.engine.H2, out.mut_slice(16, 24));
467+
from_u64(self.engine.H3, out.mut_slice(24, 32));
488468
}
489469

490470
fn reset(&mut self) {
@@ -540,7 +520,12 @@ impl Digest for Sha512Trunc224 {
540520
}
541521

542522
fn result(&mut self, out: &mut [u8]) {
543-
self.engine.result_224(out)
523+
self.engine.finish();
524+
525+
from_u64(self.engine.H0, out.mut_slice(0, 8));
526+
from_u64(self.engine.H1, out.mut_slice(8, 16));
527+
from_u64(self.engine.H2, out.mut_slice(16, 24));
528+
from_u32((self.engine.H3 >> 32) as u32, out.mut_slice(24, 28));
544529
}
545530

546531
fn reset(&mut self) {
@@ -774,31 +759,6 @@ impl Engine256 {
774759

775760
self.finished = true;
776761
}
777-
778-
fn result_256(&mut self, out: &mut [u8]) {
779-
self.finish();
780-
781-
from_u32(self.H0, out.mut_slice(0, 4));
782-
from_u32(self.H1, out.mut_slice(4, 8));
783-
from_u32(self.H2, out.mut_slice(8, 12));
784-
from_u32(self.H3, out.mut_slice(12, 16));
785-
from_u32(self.H4, out.mut_slice(16, 20));
786-
from_u32(self.H5, out.mut_slice(20, 24));
787-
from_u32(self.H6, out.mut_slice(24, 28));
788-
from_u32(self.H7, out.mut_slice(28, 32));
789-
}
790-
791-
fn result_224(&mut self, out: &mut [u8]) {
792-
self.finish();
793-
794-
from_u32(self.H0, out.mut_slice(0, 4));
795-
from_u32(self.H1, out.mut_slice(4, 8));
796-
from_u32(self.H2, out.mut_slice(8, 12));
797-
from_u32(self.H3, out.mut_slice(12, 16));
798-
from_u32(self.H4, out.mut_slice(16, 20));
799-
from_u32(self.H5, out.mut_slice(20, 24));
800-
from_u32(self.H6, out.mut_slice(24, 28));
801-
}
802762
}
803763

804764
static K32: [u32, ..64] = [
@@ -857,7 +817,16 @@ impl Digest for Sha256 {
857817
}
858818

859819
fn result(&mut self, out: &mut [u8]) {
860-
self.engine.result_256(out)
820+
self.engine.finish();
821+
822+
from_u32(self.engine.H0, out.mut_slice(0, 4));
823+
from_u32(self.engine.H1, out.mut_slice(4, 8));
824+
from_u32(self.engine.H2, out.mut_slice(8, 12));
825+
from_u32(self.engine.H3, out.mut_slice(12, 16));
826+
from_u32(self.engine.H4, out.mut_slice(16, 20));
827+
from_u32(self.engine.H5, out.mut_slice(20, 24));
828+
from_u32(self.engine.H6, out.mut_slice(24, 28));
829+
from_u32(self.engine.H7, out.mut_slice(28, 32));
861830
}
862831

863832
fn reset(&mut self) {
@@ -913,7 +882,15 @@ impl Digest for Sha224 {
913882
}
914883

915884
fn result(&mut self, out: &mut [u8]) {
916-
self.engine.result_224(out)
885+
self.engine.finish();
886+
887+
from_u32(self.engine.H0, out.mut_slice(0, 4));
888+
from_u32(self.engine.H1, out.mut_slice(4, 8));
889+
from_u32(self.engine.H2, out.mut_slice(8, 12));
890+
from_u32(self.engine.H3, out.mut_slice(12, 16));
891+
from_u32(self.engine.H4, out.mut_slice(16, 20));
892+
from_u32(self.engine.H5, out.mut_slice(20, 24));
893+
from_u32(self.engine.H6, out.mut_slice(24, 28));
917894
}
918895

919896
fn reset(&mut self) {

0 commit comments

Comments
 (0)