Skip to content

Commit 9cc7573

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 2e95ccc commit 9cc7573

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
@@ -270,48 +270,6 @@ impl Engine512 {
270270

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

317275
// Constants necessary for SHA-2 512 family of digests.
@@ -375,7 +333,17 @@ impl Digest for Sha512 {
375333
}
376334

377335
fn result(&mut self, out: &mut [u8]) {
378-
self.engine.result_512(out)
336+
self.engine.finish();
337+
338+
from_u64(self.engine.H0, out.mut_slice(0, 8));
339+
from_u64(self.engine.H1, out.mut_slice(8, 16));
340+
from_u64(self.engine.H2, out.mut_slice(16, 24));
341+
from_u64(self.engine.H3, out.mut_slice(24, 32));
342+
from_u64(self.engine.H4, out.mut_slice(32, 40));
343+
from_u64(self.engine.H5, out.mut_slice(40, 48));
344+
from_u64(self.engine.H6, out.mut_slice(48, 56));
345+
from_u64(self.engine.H7, out.mut_slice(56, 64));
346+
379347
}
380348

381349
fn reset(&mut self) {
@@ -431,7 +399,14 @@ impl Digest for Sha384 {
431399
}
432400

433401
fn result(&mut self, out: &mut [u8]) {
434-
self.engine.result_384(out)
402+
self.engine.finish();
403+
404+
from_u64(self.engine.H0, out.mut_slice(0, 8));
405+
from_u64(self.engine.H1, out.mut_slice(8, 16));
406+
from_u64(self.engine.H2, out.mut_slice(16, 24));
407+
from_u64(self.engine.H3, out.mut_slice(24, 32));
408+
from_u64(self.engine.H4, out.mut_slice(32, 40));
409+
from_u64(self.engine.H5, out.mut_slice(40, 48));
435410
}
436411

437412
fn reset(&mut self) {
@@ -487,7 +462,12 @@ impl Digest for Sha512Trunc256 {
487462
}
488463

489464
fn result(&mut self, out: &mut [u8]) {
490-
self.engine.result_256(out)
465+
self.engine.finish();
466+
467+
from_u64(self.engine.H0, out.mut_slice(0, 8));
468+
from_u64(self.engine.H1, out.mut_slice(8, 16));
469+
from_u64(self.engine.H2, out.mut_slice(16, 24));
470+
from_u64(self.engine.H3, out.mut_slice(24, 32));
491471
}
492472

493473
fn reset(&mut self) {
@@ -543,7 +523,12 @@ impl Digest for Sha512Trunc224 {
543523
}
544524

545525
fn result(&mut self, out: &mut [u8]) {
546-
self.engine.result_224(out)
526+
self.engine.finish();
527+
528+
from_u64(self.engine.H0, out.mut_slice(0, 8));
529+
from_u64(self.engine.H1, out.mut_slice(8, 16));
530+
from_u64(self.engine.H2, out.mut_slice(16, 24));
531+
from_u32((self.engine.H3 >> 32) as u32, out.mut_slice(24, 28));
547532
}
548533

549534
fn reset(&mut self) {
@@ -777,31 +762,6 @@ impl Engine256 {
777762

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

807767
static K32: [u32, ..64] = [
@@ -860,7 +820,16 @@ impl Digest for Sha256 {
860820
}
861821

862822
fn result(&mut self, out: &mut [u8]) {
863-
self.engine.result_256(out)
823+
self.engine.finish();
824+
825+
from_u32(self.engine.H0, out.mut_slice(0, 4));
826+
from_u32(self.engine.H1, out.mut_slice(4, 8));
827+
from_u32(self.engine.H2, out.mut_slice(8, 12));
828+
from_u32(self.engine.H3, out.mut_slice(12, 16));
829+
from_u32(self.engine.H4, out.mut_slice(16, 20));
830+
from_u32(self.engine.H5, out.mut_slice(20, 24));
831+
from_u32(self.engine.H6, out.mut_slice(24, 28));
832+
from_u32(self.engine.H7, out.mut_slice(28, 32));
864833
}
865834

866835
fn reset(&mut self) {
@@ -916,7 +885,15 @@ impl Digest for Sha224 {
916885
}
917886

918887
fn result(&mut self, out: &mut [u8]) {
919-
self.engine.result_224(out)
888+
self.engine.finish();
889+
890+
from_u32(self.engine.H0, out.mut_slice(0, 4));
891+
from_u32(self.engine.H1, out.mut_slice(4, 8));
892+
from_u32(self.engine.H2, out.mut_slice(8, 12));
893+
from_u32(self.engine.H3, out.mut_slice(12, 16));
894+
from_u32(self.engine.H4, out.mut_slice(16, 20));
895+
from_u32(self.engine.H5, out.mut_slice(20, 24));
896+
from_u32(self.engine.H6, out.mut_slice(24, 28));
920897
}
921898

922899
fn reset(&mut self) {

0 commit comments

Comments
 (0)