From c55b79d72f7e2520e1f4bebd5877bbfa927feab7 Mon Sep 17 00:00:00 2001 From: siddharth Date: Sat, 9 Oct 2021 16:37:51 -0400 Subject: lib: add BytesToUint32s --- lib/byte.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'lib') diff --git a/lib/byte.go b/lib/byte.go index 48f3a38..fbdfae9 100644 --- a/lib/byte.go +++ b/lib/byte.go @@ -43,3 +43,25 @@ func ByteIsUpper(b byte) bool { func BytesEqual(a, b []byte) bool { return BlocksEqual(a, b) } + +func BytesToUint32s(bs []byte) []uint32 { + u32s := make([]uint32, 0) + + ui := uint32(0) // 32-bit word. + ab := uint(32) // Available bits in ui. + for _, b := range bs { + if ab == 0 { + // ui full; add to u32s and reset ui. + u32s = append(u32s, ui) + ui = uint32(0) + ab = 32 + } + // Stuff byte into ui. + ui = ui | uint32(b)<<(ab-8) + ab = ab - 8 + } + if ui > 0 { + u32s = append(u32s, ui) + } + return u32s +} -- cgit v1.2.3