diff options
author | Russ Cox <rsc@golang.org> | 2009-01-16 10:14:28 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-01-16 10:14:28 -0800 |
commit | 07b29e74deba1289f518d5f49147c966b119d1f3 (patch) | |
tree | 6453ca224997b8e87efdd4fb770d568ca0126324 | |
parent | c77e1ca9cb4a953da748987a5288eff236502328 (diff) | |
download | golang-07b29e74deba1289f518d5f49147c966b119d1f3.tar.gz |
casify hash
R=r
DELTA=235 (6 added, 26 deleted, 203 changed)
OCL=22907
CL=22938
-rw-r--r-- | src/lib/hash/adler32.go | 18 | ||||
-rw-r--r-- | src/lib/hash/adler32_test.go | 66 | ||||
-rw-r--r-- | src/lib/hash/crc32.go | 4 | ||||
-rw-r--r-- | src/lib/hash/crc32_test.go | 66 | ||||
-rw-r--r-- | src/lib/hash/md5.go | 36 | ||||
-rw-r--r-- | src/lib/hash/md5_test.go | 81 | ||||
-rw-r--r-- | src/lib/hash/md5block.go | 154 | ||||
-rw-r--r-- | src/lib/hash/sha1.go | 40 | ||||
-rw-r--r-- | src/lib/hash/sha1_test.go | 81 | ||||
-rw-r--r-- | src/lib/hash/sha1block.go | 26 |
10 files changed, 276 insertions, 296 deletions
diff --git a/src/lib/hash/adler32.go b/src/lib/hash/adler32.go index 4d32fd8d8..22d82bc64 100644 --- a/src/lib/hash/adler32.go +++ b/src/lib/hash/adler32.go @@ -19,8 +19,10 @@ export type Digest struct { n int; } -const Mod = 65521; -const Maxiter = 5552; // max mod-free iterations before would overflow uint32 +const ( + _Mod = 65521; + _MaxIter = 5552; // max mod-free iterations before would overflow uint32 +) export func NewDigest() *Digest { return &Digest{1, 0, 0}; @@ -32,9 +34,9 @@ func (d *Digest) Write(p []byte) (nn int, err *os.Error) { a += uint32(p[i]); b += a; n++; - if n == Maxiter { - a %= Mod; - b %= Mod; + if n == _MaxIter { + a %= _Mod; + b %= _Mod; n = 0; } } @@ -44,9 +46,9 @@ func (d *Digest) Write(p []byte) (nn int, err *os.Error) { func (d *Digest) Sum32() uint32 { a, b := d.a, d.b; - if a >= Mod || b >= Mod { - a %= Mod; - b %= Mod; + if a >= _Mod || b >= _Mod { + a %= _Mod; + b %= _Mod; } return b<<16 | a; } diff --git a/src/lib/hash/adler32_test.go b/src/lib/hash/adler32_test.go index 4b5dab929..92aae5760 100644 --- a/src/lib/hash/adler32_test.go +++ b/src/lib/hash/adler32_test.go @@ -10,43 +10,43 @@ import ( "testing"; ) -type Adler32Test struct { +type _Adler32Test struct { out uint32; in string; } -var golden = []Adler32Test { - Adler32Test{ 0x1, "" }, - Adler32Test{ 0x620062, "a" }, - Adler32Test{ 0x12600c4, "ab" }, - Adler32Test{ 0x24d0127, "abc" }, - Adler32Test{ 0x3d8018b, "abcd" }, - Adler32Test{ 0x5c801f0, "abcde" }, - Adler32Test{ 0x81e0256, "abcdef" }, - Adler32Test{ 0xadb02bd, "abcdefg" }, - Adler32Test{ 0xe000325, "abcdefgh" }, - Adler32Test{ 0x118e038e, "abcdefghi" }, - Adler32Test{ 0x158603f8, "abcdefghij" }, - Adler32Test{ 0x3f090f02, "Discard medicine more than two years old." }, - Adler32Test{ 0x46d81477, "He who has a shady past knows that nice guys finish last." }, - Adler32Test{ 0x40ee0ee1, "I wouldn't marry him with a ten foot pole." }, - Adler32Test{ 0x16661315, "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, - Adler32Test{ 0x5b2e1480, "The days of the digital watch are numbered. -Tom Stoppard" }, - Adler32Test{ 0x8c3c09ea, "Nepal premier won't resign." }, - Adler32Test{ 0x45ac18fd, "For every action there is an equal and opposite government program." }, - Adler32Test{ 0x53c61462, "His money is twice tainted: 'taint yours and 'taint mine." }, - Adler32Test{ 0x7e511e63, "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, - Adler32Test{ 0xe4801a6a, "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, - Adler32Test{ 0x61b507df, "size: a.out: bad magic" }, - Adler32Test{ 0xb8631171, "The major problem is with sendmail. -Mark Horton" }, - Adler32Test{ 0x8b5e1904, "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, - Adler32Test{ 0x7cc6102b, "If the enemy is within range, then so are you." }, - Adler32Test{ 0x700318e7, "It's well we cannot hear the screams/That we create in others' dreams." }, - Adler32Test{ 0x1e601747, "You remind me of a TV show, but that's all right: I watch it anyway." }, - Adler32Test{ 0xb55b0b09, "C is as portable as Stonehedge!!" }, - Adler32Test{ 0x39111dd0, "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, - Adler32Test{ 0x91dd304f, "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, - Adler32Test{ 0x2e5d1316, "How can you write a big system without C++? -Paul Glick" }, +var golden = []_Adler32Test { + _Adler32Test{ 0x1, "" }, + _Adler32Test{ 0x620062, "a" }, + _Adler32Test{ 0x12600c4, "ab" }, + _Adler32Test{ 0x24d0127, "abc" }, + _Adler32Test{ 0x3d8018b, "abcd" }, + _Adler32Test{ 0x5c801f0, "abcde" }, + _Adler32Test{ 0x81e0256, "abcdef" }, + _Adler32Test{ 0xadb02bd, "abcdefg" }, + _Adler32Test{ 0xe000325, "abcdefgh" }, + _Adler32Test{ 0x118e038e, "abcdefghi" }, + _Adler32Test{ 0x158603f8, "abcdefghij" }, + _Adler32Test{ 0x3f090f02, "Discard medicine more than two years old." }, + _Adler32Test{ 0x46d81477, "He who has a shady past knows that nice guys finish last." }, + _Adler32Test{ 0x40ee0ee1, "I wouldn't marry him with a ten foot pole." }, + _Adler32Test{ 0x16661315, "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, + _Adler32Test{ 0x5b2e1480, "The days of the digital watch are numbered. -Tom Stoppard" }, + _Adler32Test{ 0x8c3c09ea, "Nepal premier won't resign." }, + _Adler32Test{ 0x45ac18fd, "For every action there is an equal and opposite government program." }, + _Adler32Test{ 0x53c61462, "His money is twice tainted: 'taint yours and 'taint mine." }, + _Adler32Test{ 0x7e511e63, "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, + _Adler32Test{ 0xe4801a6a, "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, + _Adler32Test{ 0x61b507df, "size: a.out: bad magic" }, + _Adler32Test{ 0xb8631171, "The major problem is with sendmail. -Mark Horton" }, + _Adler32Test{ 0x8b5e1904, "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, + _Adler32Test{ 0x7cc6102b, "If the enemy is within range, then so are you." }, + _Adler32Test{ 0x700318e7, "It's well we cannot hear the screams/That we create in others' dreams." }, + _Adler32Test{ 0x1e601747, "You remind me of a TV show, but that's all right: I watch it anyway." }, + _Adler32Test{ 0xb55b0b09, "C is as portable as Stonehedge!!" }, + _Adler32Test{ 0x39111dd0, "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, + _Adler32Test{ 0x91dd304f, "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, + _Adler32Test{ 0x2e5d1316, "How can you write a big system without C++? -Paul Glick" }, } export func TestGolden(t *testing.T) { diff --git a/src/lib/hash/crc32.go b/src/lib/hash/crc32.go index dca75793b..63e6b8cd6 100644 --- a/src/lib/hash/crc32.go +++ b/src/lib/hash/crc32.go @@ -44,7 +44,7 @@ export func MakeTable(poly uint32) Table { return t; } -export var ieee = MakeTable(IEEE); +export var IEEETable = MakeTable(IEEE); export type Digest struct { crc uint32; @@ -56,7 +56,7 @@ export func NewDigest(tab Table) *Digest { } export func NewIEEEDigest() *Digest { - return NewDigest(ieee); + return NewDigest(IEEETable); } func (d *Digest) Write(p []byte) (n int, err *os.Error) { diff --git a/src/lib/hash/crc32_test.go b/src/lib/hash/crc32_test.go index c1c0b565f..a5a206f8b 100644 --- a/src/lib/hash/crc32_test.go +++ b/src/lib/hash/crc32_test.go @@ -10,43 +10,43 @@ import ( "testing"; ) -type Crc32Test struct { +type _Crc32Test struct { out uint32; in string; } -var golden = []Crc32Test { - Crc32Test{ 0x0, "" }, - Crc32Test{ 0xe8b7be43, "a" }, - Crc32Test{ 0x9e83486d, "ab" }, - Crc32Test{ 0x352441c2, "abc" }, - Crc32Test{ 0xed82cd11, "abcd" }, - Crc32Test{ 0x8587d865, "abcde" }, - Crc32Test{ 0x4b8e39ef, "abcdef" }, - Crc32Test{ 0x312a6aa6, "abcdefg" }, - Crc32Test{ 0xaeef2a50, "abcdefgh" }, - Crc32Test{ 0x8da988af, "abcdefghi" }, - Crc32Test{ 0x3981703a, "abcdefghij" }, - Crc32Test{ 0x6b9cdfe7, "Discard medicine more than two years old." }, - Crc32Test{ 0xc90ef73f, "He who has a shady past knows that nice guys finish last." }, - Crc32Test{ 0xb902341f, "I wouldn't marry him with a ten foot pole." }, - Crc32Test{ 0x42080e8, "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, - Crc32Test{ 0x154c6d11, "The days of the digital watch are numbered. -Tom Stoppard" }, - Crc32Test{ 0x4c418325, "Nepal premier won't resign." }, - Crc32Test{ 0x33955150, "For every action there is an equal and opposite government program." }, - Crc32Test{ 0x26216a4b, "His money is twice tainted: 'taint yours and 'taint mine." }, - Crc32Test{ 0x1abbe45e, "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, - Crc32Test{ 0xc89a94f7, "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, - Crc32Test{ 0xab3abe14, "size: a.out: bad magic" }, - Crc32Test{ 0xbab102b6, "The major problem is with sendmail. -Mark Horton" }, - Crc32Test{ 0x999149d7, "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, - Crc32Test{ 0x6d52a33c, "If the enemy is within range, then so are you." }, - Crc32Test{ 0x90631e8d, "It's well we cannot hear the screams/That we create in others' dreams." }, - Crc32Test{ 0x78309130, "You remind me of a TV show, but that's all right: I watch it anyway." }, - Crc32Test{ 0x7d0a377f, "C is as portable as Stonehedge!!" }, - Crc32Test{ 0x8c79fd79, "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, - Crc32Test{ 0xa20b7167, "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, - Crc32Test{ 0x8e0bb443, "How can you write a big system without C++? -Paul Glick" }, +var golden = []_Crc32Test { + _Crc32Test{ 0x0, "" }, + _Crc32Test{ 0xe8b7be43, "a" }, + _Crc32Test{ 0x9e83486d, "ab" }, + _Crc32Test{ 0x352441c2, "abc" }, + _Crc32Test{ 0xed82cd11, "abcd" }, + _Crc32Test{ 0x8587d865, "abcde" }, + _Crc32Test{ 0x4b8e39ef, "abcdef" }, + _Crc32Test{ 0x312a6aa6, "abcdefg" }, + _Crc32Test{ 0xaeef2a50, "abcdefgh" }, + _Crc32Test{ 0x8da988af, "abcdefghi" }, + _Crc32Test{ 0x3981703a, "abcdefghij" }, + _Crc32Test{ 0x6b9cdfe7, "Discard medicine more than two years old." }, + _Crc32Test{ 0xc90ef73f, "He who has a shady past knows that nice guys finish last." }, + _Crc32Test{ 0xb902341f, "I wouldn't marry him with a ten foot pole." }, + _Crc32Test{ 0x42080e8, "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, + _Crc32Test{ 0x154c6d11, "The days of the digital watch are numbered. -Tom Stoppard" }, + _Crc32Test{ 0x4c418325, "Nepal premier won't resign." }, + _Crc32Test{ 0x33955150, "For every action there is an equal and opposite government program." }, + _Crc32Test{ 0x26216a4b, "His money is twice tainted: 'taint yours and 'taint mine." }, + _Crc32Test{ 0x1abbe45e, "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, + _Crc32Test{ 0xc89a94f7, "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, + _Crc32Test{ 0xab3abe14, "size: a.out: bad magic" }, + _Crc32Test{ 0xbab102b6, "The major problem is with sendmail. -Mark Horton" }, + _Crc32Test{ 0x999149d7, "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, + _Crc32Test{ 0x6d52a33c, "If the enemy is within range, then so are you." }, + _Crc32Test{ 0x90631e8d, "It's well we cannot hear the screams/That we create in others' dreams." }, + _Crc32Test{ 0x78309130, "You remind me of a TV show, but that's all right: I watch it anyway." }, + _Crc32Test{ 0x7d0a377f, "C is as portable as Stonehedge!!" }, + _Crc32Test{ 0x8c79fd79, "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, + _Crc32Test{ 0xa20b7167, "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, + _Crc32Test{ 0x8e0bb443, "How can you write a big system without C++? -Paul Glick" }, } export func TestGolden(t *testing.T) { diff --git a/src/lib/hash/md5.go b/src/lib/hash/md5.go index 37dd2a4e6..b9a79dec3 100644 --- a/src/lib/hash/md5.go +++ b/src/lib/hash/md5.go @@ -8,54 +8,52 @@ package md5 import "os" -package const ( - Chunk = 64 -) - const ( - A = 0x67452301; - B = 0xEFCDAB89; - C = 0x98BADCFE; - D = 0x10325476; + _Chunk = 64; + + _Init0 = 0x67452301; + _Init1 = 0xEFCDAB89; + _Init2 = 0x98BADCFE; + _Init3 = 0x10325476; ) export type Digest struct { s [4]uint32; - x [Chunk]byte; + x [_Chunk]byte; nx int; len uint64; } export func NewDigest() *Digest { d := new(Digest); - d.s[0] = A; - d.s[1] = B; - d.s[2] = C; - d.s[3] = D; + d.s[0] = _Init0; + d.s[1] = _Init1; + d.s[2] = _Init2; + d.s[3] = _Init3; return d; } -package func Block(dig *Digest, p []byte) int +func _Block(dig *Digest, p []byte) int func (d *Digest) Write(p []byte) (nn int, err *os.Error) { nn = len(p); d.len += uint64(nn); if d.nx > 0 { n := len(p); - if n > Chunk-d.nx { - n = Chunk-d.nx; + if n > _Chunk-d.nx { + n = _Chunk-d.nx; } for i := 0; i < n; i++ { d.x[d.nx+i] = p[i]; } d.nx += n; - if d.nx == Chunk { - Block(d, d.x); + if d.nx == _Chunk { + _Block(d, d.x); d.nx = 0; } p = p[n:len(p)]; } - n := Block(d, p); + n := _Block(d, p); p = p[n:len(p)]; if len(p) > 0 { for i := 0; i < len(p); i++ { diff --git a/src/lib/hash/md5_test.go b/src/lib/hash/md5_test.go index c99cfa5a6..377df0375 100644 --- a/src/lib/hash/md5_test.go +++ b/src/lib/hash/md5_test.go @@ -5,58 +5,49 @@ package md5 import ( - "md5"; + "fmt"; "io"; + "md5"; "testing"; ) -type Md5Test struct { +type md5Test struct { out string; in string; } -var golden = []Md5Test { - Md5Test{ "d41d8cd98f00b204e9800998ecf8427e", "" }, - Md5Test{ "0cc175b9c0f1b6a831c399e269772661", "a" }, - Md5Test{ "187ef4436122d1cc2f40dc2b92f0eba0", "ab" }, - Md5Test{ "900150983cd24fb0d6963f7d28e17f72", "abc" }, - Md5Test{ "e2fc714c4727ee9395f324cd2e7f331f", "abcd" }, - Md5Test{ "ab56b4d92b40713acc5af89985d4b786", "abcde" }, - Md5Test{ "e80b5017098950fc58aad83c8c14978e", "abcdef" }, - Md5Test{ "7ac66c0f148de9519b8bd264312c4d64", "abcdefg" }, - Md5Test{ "e8dc4081b13434b45189a720b77b6818", "abcdefgh" }, - Md5Test{ "8aa99b1f439ff71293e95357bac6fd94", "abcdefghi" }, - Md5Test{ "a925576942e94b2ef57a066101b48876", "abcdefghij" }, - Md5Test{ "d747fc1719c7eacb84058196cfe56d57", "Discard medicine more than two years old." }, - Md5Test{ "bff2dcb37ef3a44ba43ab144768ca837", "He who has a shady past knows that nice guys finish last." }, - Md5Test{ "0441015ecb54a7342d017ed1bcfdbea5", "I wouldn't marry him with a ten foot pole." }, - Md5Test{ "9e3cac8e9e9757a60c3ea391130d3689", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, - Md5Test{ "a0f04459b031f916a59a35cc482dc039", "The days of the digital watch are numbered. -Tom Stoppard" }, - Md5Test{ "e7a48e0fe884faf31475d2a04b1362cc", "Nepal premier won't resign." }, - Md5Test{ "637d2fe925c07c113800509964fb0e06", "For every action there is an equal and opposite government program." }, - Md5Test{ "834a8d18d5c6562119cf4c7f5086cb71", "His money is twice tainted: 'taint yours and 'taint mine." }, - Md5Test{ "de3a4d2fd6c73ec2db2abad23b444281", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, - Md5Test{ "acf203f997e2cf74ea3aff86985aefaf", "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, - Md5Test{ "e1c1384cb4d2221dfdd7c795a4222c9a", "size: a.out: bad magic" }, - Md5Test{ "c90f3ddecc54f34228c063d7525bf644", "The major problem is with sendmail. -Mark Horton" }, - Md5Test{ "cdf7ab6c1fd49bd9933c43f3ea5af185", "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, - Md5Test{ "83bc85234942fc883c063cbd7f0ad5d0", "If the enemy is within range, then so are you." }, - Md5Test{ "277cbe255686b48dd7e8f389394d9299", "It's well we cannot hear the screams/That we create in others' dreams." }, - Md5Test{ "fd3fb0a7ffb8af16603f3d3af98f8e1f", "You remind me of a TV show, but that's all right: I watch it anyway." }, - Md5Test{ "469b13a78ebf297ecda64d4723655154", "C is as portable as Stonehedge!!" }, - Md5Test{ "63eb3a2f466410104731c4b037600110", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, - Md5Test{ "72c2ed7592debca1c90fc0100f931a2f", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, - Md5Test{ "132f7619d33b523b1d9e5bd8e0928355", "How can you write a big system without C++? -Paul Glick" }, -} - -func Hex(p []byte) string { - s := ""; - for i := 0; i < len(p); i++ { - v := p[i]; - s += string("0123456789abcdef"[v>>4]); - s += string("0123456789abcdef"[v&15]); - } - return s; +var golden = []md5Test { + md5Test{ "d41d8cd98f00b204e9800998ecf8427e", "" }, + md5Test{ "0cc175b9c0f1b6a831c399e269772661", "a" }, + md5Test{ "187ef4436122d1cc2f40dc2b92f0eba0", "ab" }, + md5Test{ "900150983cd24fb0d6963f7d28e17f72", "abc" }, + md5Test{ "e2fc714c4727ee9395f324cd2e7f331f", "abcd" }, + md5Test{ "ab56b4d92b40713acc5af89985d4b786", "abcde" }, + md5Test{ "e80b5017098950fc58aad83c8c14978e", "abcdef" }, + md5Test{ "7ac66c0f148de9519b8bd264312c4d64", "abcdefg" }, + md5Test{ "e8dc4081b13434b45189a720b77b6818", "abcdefgh" }, + md5Test{ "8aa99b1f439ff71293e95357bac6fd94", "abcdefghi" }, + md5Test{ "a925576942e94b2ef57a066101b48876", "abcdefghij" }, + md5Test{ "d747fc1719c7eacb84058196cfe56d57", "Discard medicine more than two years old." }, + md5Test{ "bff2dcb37ef3a44ba43ab144768ca837", "He who has a shady past knows that nice guys finish last." }, + md5Test{ "0441015ecb54a7342d017ed1bcfdbea5", "I wouldn't marry him with a ten foot pole." }, + md5Test{ "9e3cac8e9e9757a60c3ea391130d3689", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, + md5Test{ "a0f04459b031f916a59a35cc482dc039", "The days of the digital watch are numbered. -Tom Stoppard" }, + md5Test{ "e7a48e0fe884faf31475d2a04b1362cc", "Nepal premier won't resign." }, + md5Test{ "637d2fe925c07c113800509964fb0e06", "For every action there is an equal and opposite government program." }, + md5Test{ "834a8d18d5c6562119cf4c7f5086cb71", "His money is twice tainted: 'taint yours and 'taint mine." }, + md5Test{ "de3a4d2fd6c73ec2db2abad23b444281", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, + md5Test{ "acf203f997e2cf74ea3aff86985aefaf", "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, + md5Test{ "e1c1384cb4d2221dfdd7c795a4222c9a", "size: a.out: bad magic" }, + md5Test{ "c90f3ddecc54f34228c063d7525bf644", "The major problem is with sendmail. -Mark Horton" }, + md5Test{ "cdf7ab6c1fd49bd9933c43f3ea5af185", "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, + md5Test{ "83bc85234942fc883c063cbd7f0ad5d0", "If the enemy is within range, then so are you." }, + md5Test{ "277cbe255686b48dd7e8f389394d9299", "It's well we cannot hear the screams/That we create in others' dreams." }, + md5Test{ "fd3fb0a7ffb8af16603f3d3af98f8e1f", "You remind me of a TV show, but that's all right: I watch it anyway." }, + md5Test{ "469b13a78ebf297ecda64d4723655154", "C is as portable as Stonehedge!!" }, + md5Test{ "63eb3a2f466410104731c4b037600110", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, + md5Test{ "72c2ed7592debca1c90fc0100f931a2f", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, + md5Test{ "132f7619d33b523b1d9e5bd8e0928355", "How can you write a big system without C++? -Paul Glick" }, } export func TestGolden(t *testing.T) { @@ -64,7 +55,7 @@ export func TestGolden(t *testing.T) { g := golden[i]; c := NewDigest(); io.WriteString(c, g.in); - s := Hex(c.Sum()); + s := fmt.Sprintf("%x", c.Sum()); if s != g.out { t.Errorf("md5(%s) = %s want %s", g.in, s, g.out); t.FailNow(); diff --git a/src/lib/hash/md5block.go b/src/lib/hash/md5block.go index fcea12193..7974dbf0b 100644 --- a/src/lib/hash/md5block.go +++ b/src/lib/hash/md5block.go @@ -10,79 +10,79 @@ package md5 import "md5" -// T[i] = int((1<<32) * abs(sin(i+1 radians))). -var T = []uint32 { +// table[i] = int((1<<32) * abs(sin(i+1 radians))). +var table = []uint32 { // round 1 - 0xd76aa478, + 0xd76aa478, 0xe8c7b756, - 0x242070db, - 0xc1bdceee, - 0xf57c0faf, - 0x4787c62a, - 0xa8304613, - 0xfd469501, - 0x698098d8, - 0x8b44f7af, - 0xffff5bb1, - 0x895cd7be, - 0x6b901122, - 0xfd987193, - 0xa679438e, + 0x242070db, + 0xc1bdceee, + 0xf57c0faf, + 0x4787c62a, + 0xa8304613, + 0xfd469501, + 0x698098d8, + 0x8b44f7af, + 0xffff5bb1, + 0x895cd7be, + 0x6b901122, + 0xfd987193, + 0xa679438e, 0x49b40821, // round 2 - 0xf61e2562, - 0xc040b340, - 0x265e5a51, - 0xe9b6c7aa, - 0xd62f105d, - 0x2441453, - 0xd8a1e681, - 0xe7d3fbc8, - 0x21e1cde6, - 0xc33707d6, - 0xf4d50d87, - 0x455a14ed, - 0xa9e3e905, - 0xfcefa3f8, - 0x676f02d9, + 0xf61e2562, + 0xc040b340, + 0x265e5a51, + 0xe9b6c7aa, + 0xd62f105d, + 0x2441453, + 0xd8a1e681, + 0xe7d3fbc8, + 0x21e1cde6, + 0xc33707d6, + 0xf4d50d87, + 0x455a14ed, + 0xa9e3e905, + 0xfcefa3f8, + 0x676f02d9, 0x8d2a4c8a, // round3 - 0xfffa3942, - 0x8771f681, - 0x6d9d6122, - 0xfde5380c, - 0xa4beea44, - 0x4bdecfa9, - 0xf6bb4b60, - 0xbebfbc70, - 0x289b7ec6, - 0xeaa127fa, - 0xd4ef3085, - 0x4881d05, - 0xd9d4d039, - 0xe6db99e5, - 0x1fa27cf8, - 0xc4ac5665, + 0xfffa3942, + 0x8771f681, + 0x6d9d6122, + 0xfde5380c, + 0xa4beea44, + 0x4bdecfa9, + 0xf6bb4b60, + 0xbebfbc70, + 0x289b7ec6, + 0xeaa127fa, + 0xd4ef3085, + 0x4881d05, + 0xd9d4d039, + 0xe6db99e5, + 0x1fa27cf8, + 0xc4ac5665, // round 4 - 0xf4292244, - 0x432aff97, - 0xab9423a7, - 0xfc93a039, - 0x655b59c3, - 0x8f0ccc92, - 0xffeff47d, - 0x85845dd1, - 0x6fa87e4f, - 0xfe2ce6e0, - 0xa3014314, - 0x4e0811a1, - 0xf7537e82, - 0xbd3af235, - 0x2ad7d2bb, - 0xeb86d391, + 0xf4292244, + 0x432aff97, + 0xab9423a7, + 0xfc93a039, + 0x655b59c3, + 0x8f0ccc92, + 0xffeff47d, + 0x85845dd1, + 0x6fa87e4f, + 0xfe2ce6e0, + 0xa3014314, + 0x4e0811a1, + 0xf7537e82, + 0xbd3af235, + 0x2ad7d2bb, + 0xeb86d391, } var shift1 = []uint { 7, 12, 17, 22 }; @@ -90,16 +90,16 @@ var shift2 = []uint { 5, 9, 14, 20 }; var shift3 = []uint { 4, 11, 16, 23 }; var shift4 = []uint { 6, 10, 15, 21 }; -package func Block(dig *Digest, p []byte) int { +func _Block(dig *Digest, p []byte) int { a := dig.s[0]; b := dig.s[1]; c := dig.s[2]; d := dig.s[3]; n := 0; var X [16]uint32; - for len(p) >= Chunk { + for len(p) >= _Chunk { aa, bb, cc, dd := a, b, c, d; - + for i := 0; i < 16; i++ { j := i*4; X[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24; @@ -119,43 +119,43 @@ package func Block(dig *Digest, p []byte) int { t := i; s := shift1[i%4]; f := ((c ^ d) & b) ^ d; - a += f + X[x] + T[t]; + a += f + X[x] + table[t]; a = a<<s | a>>(32-s); a += b; a, b, c, d = d, a, b, c; } - + // Round 2. for i := 0; i < 16; i++ { x := (1+5*i)%16; t := 16+i; s := shift2[i%4]; g := ((b ^ c) & d) ^ c; - a += g + X[x] + T[t]; + a += g + X[x] + table[t]; a = a<<s | a>>(32-s); a += b; a, b, c, d = d, a, b, c; } - + // Round 3. for i := 0; i < 16; i++ { x := (5+3*i)%16; t := 32+i; s := shift3[i%4]; h := b ^ c ^ d; - a += h + X[x] + T[t]; + a += h + X[x] + table[t]; a = a<<s | a>>(32-s); a += b; a, b, c, d = d, a, b, c; } - + // Round 4. for i := 0; i < 16; i++ { x := (7*i)%16; s := shift4[i%4]; t := 48+i; ii := c ^ (b | ^d); - a += ii + X[x] + T[t]; + a += ii + X[x] + table[t]; a = a<<s | a>>(32-s); a += b; a, b, c, d = d, a, b, c; @@ -165,11 +165,11 @@ package func Block(dig *Digest, p []byte) int { b += bb; c += cc; d += dd; - - p = p[Chunk:len(p)]; - n += Chunk; + + p = p[_Chunk:len(p)]; + n += _Chunk; } - + dig.s[0] = a; dig.s[1] = b; dig.s[2] = c; diff --git a/src/lib/hash/sha1.go b/src/lib/hash/sha1.go index da50e46e8..1cb766840 100644 --- a/src/lib/hash/sha1.go +++ b/src/lib/hash/sha1.go @@ -8,56 +8,54 @@ package sha1 import "os" -package const ( - Chunk = 64; -) - const ( - H0 = 0x67452301; - H1 = 0xEFCDAB89; - H2 = 0x98BADCFE; - H3 = 0x10325476; - H4 = 0xC3D2E1F0; + _Chunk = 64; + + _Init0 = 0x67452301; + _Init1 = 0xEFCDAB89; + _Init2 = 0x98BADCFE; + _Init3 = 0x10325476; + _Init4 = 0xC3D2E1F0; ) export type Digest struct { h [5]uint32; - x [Chunk]byte; + x [_Chunk]byte; nx int; len uint64; } export func NewDigest() *Digest { d := new(Digest); - d.h[0] = H0; - d.h[1] = H1; - d.h[2] = H2; - d.h[3] = H3; - d.h[4] = H4; + d.h[0] = _Init0; + d.h[1] = _Init1; + d.h[2] = _Init2; + d.h[3] = _Init3; + d.h[4] = _Init4; return d; } -package func Block(dig *Digest, p []byte) int +func _Block(dig *Digest, p []byte) int func (d *Digest) Write(p []byte) (nn int, err *os.Error) { nn = len(p); d.len += uint64(nn); if d.nx > 0 { n := len(p); - if n > Chunk-d.nx { - n = Chunk-d.nx; + if n > _Chunk-d.nx { + n = _Chunk-d.nx; } for i := 0; i < n; i++ { d.x[d.nx+i] = p[i]; } d.nx += n; - if d.nx == Chunk { - Block(d, d.x); + if d.nx == _Chunk { + _Block(d, d.x); d.nx = 0; } p = p[n:len(p)]; } - n := Block(d, p); + n := _Block(d, p); p = p[n:len(p)]; if len(p) > 0 { for i := 0; i < len(p); i++ { diff --git a/src/lib/hash/sha1_test.go b/src/lib/hash/sha1_test.go index 15ce2b779..21194f346 100644 --- a/src/lib/hash/sha1_test.go +++ b/src/lib/hash/sha1_test.go @@ -7,58 +7,49 @@ package sha1 import ( - "sha1"; + "fmt"; "io"; + "sha1"; "testing"; ) -type Sha1Test struct { +type sha1Test struct { out string; in string; } -var golden = []Sha1Test { - Sha1Test{ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "" }, - Sha1Test{ "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", "a" }, - Sha1Test{ "da23614e02469a0d7c7bd1bdab5c9c474b1904dc", "ab" }, - Sha1Test{ "a9993e364706816aba3e25717850c26c9cd0d89d", "abc" }, - Sha1Test{ "81fe8bfe87576c3ecb22426f8e57847382917acf", "abcd" }, - Sha1Test{ "03de6c570bfe24bfc328ccd7ca46b76eadaf4334", "abcde" }, - Sha1Test{ "1f8ac10f23c5b5bc1167bda84b833e5c057a77d2", "abcdef" }, - Sha1Test{ "2fb5e13419fc89246865e7a324f476ec624e8740", "abcdefg" }, - Sha1Test{ "425af12a0743502b322e93a015bcf868e324d56a", "abcdefgh" }, - Sha1Test{ "c63b19f1e4c8b5f76b25c49b8b87f57d8e4872a1", "abcdefghi" }, - Sha1Test{ "d68c19a0a345b7eab78d5e11e991c026ec60db63", "abcdefghij" }, - Sha1Test{ "ebf81ddcbe5bf13aaabdc4d65354fdf2044f38a7", "Discard medicine more than two years old." }, - Sha1Test{ "e5dea09392dd886ca63531aaa00571dc07554bb6", "He who has a shady past knows that nice guys finish last." }, - Sha1Test{ "45988f7234467b94e3e9494434c96ee3609d8f8f", "I wouldn't marry him with a ten foot pole." }, - Sha1Test{ "55dee037eb7460d5a692d1ce11330b260e40c988", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, - Sha1Test{ "b7bc5fb91080c7de6b582ea281f8a396d7c0aee8", "The days of the digital watch are numbered. -Tom Stoppard" }, - Sha1Test{ "c3aed9358f7c77f523afe86135f06b95b3999797", "Nepal premier won't resign." }, - Sha1Test{ "6e29d302bf6e3a5e4305ff318d983197d6906bb9", "For every action there is an equal and opposite government program." }, - Sha1Test{ "597f6a540010f94c15d71806a99a2c8710e747bd", "His money is twice tainted: 'taint yours and 'taint mine." }, - Sha1Test{ "6859733b2590a8a091cecf50086febc5ceef1e80", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, - Sha1Test{ "514b2630ec089b8aee18795fc0cf1f4860cdacad", "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, - Sha1Test{ "c5ca0d4a7b6676fc7aa72caa41cc3d5df567ed69", "size: a.out: bad magic" }, - Sha1Test{ "74c51fa9a04eadc8c1bbeaa7fc442f834b90a00a", "The major problem is with sendmail. -Mark Horton" }, - Sha1Test{ "0b4c4ce5f52c3ad2821852a8dc00217fa18b8b66", "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, - Sha1Test{ "3ae7937dd790315beb0f48330e8642237c61550a", "If the enemy is within range, then so are you." }, - Sha1Test{ "410a2b296df92b9a47412b13281df8f830a9f44b", "It's well we cannot hear the screams/That we create in others' dreams." }, - Sha1Test{ "841e7c85ca1adcddbdd0187f1289acb5c642f7f5", "You remind me of a TV show, but that's all right: I watch it anyway." }, - Sha1Test{ "163173b825d03b952601376b25212df66763e1db", "C is as portable as Stonehedge!!" }, - Sha1Test{ "32b0377f2687eb88e22106f133c586ab314d5279", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, - Sha1Test{ "0885aaf99b569542fd165fa44e322718f4a984e0", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, - Sha1Test{ "6627d6904d71420b0bf3886ab629623538689f45", "How can you write a big system without C++? -Paul Glick" }, -} - -func Hex(p []byte) string { - s := ""; - for i := 0; i < len(p); i++ { - v := p[i]; - s += string("0123456789abcdef"[v>>4]); - s += string("0123456789abcdef"[v&15]); - } - return s; +var golden = []sha1Test { + sha1Test{ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "" }, + sha1Test{ "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", "a" }, + sha1Test{ "da23614e02469a0d7c7bd1bdab5c9c474b1904dc", "ab" }, + sha1Test{ "a9993e364706816aba3e25717850c26c9cd0d89d", "abc" }, + sha1Test{ "81fe8bfe87576c3ecb22426f8e57847382917acf", "abcd" }, + sha1Test{ "03de6c570bfe24bfc328ccd7ca46b76eadaf4334", "abcde" }, + sha1Test{ "1f8ac10f23c5b5bc1167bda84b833e5c057a77d2", "abcdef" }, + sha1Test{ "2fb5e13419fc89246865e7a324f476ec624e8740", "abcdefg" }, + sha1Test{ "425af12a0743502b322e93a015bcf868e324d56a", "abcdefgh" }, + sha1Test{ "c63b19f1e4c8b5f76b25c49b8b87f57d8e4872a1", "abcdefghi" }, + sha1Test{ "d68c19a0a345b7eab78d5e11e991c026ec60db63", "abcdefghij" }, + sha1Test{ "ebf81ddcbe5bf13aaabdc4d65354fdf2044f38a7", "Discard medicine more than two years old." }, + sha1Test{ "e5dea09392dd886ca63531aaa00571dc07554bb6", "He who has a shady past knows that nice guys finish last." }, + sha1Test{ "45988f7234467b94e3e9494434c96ee3609d8f8f", "I wouldn't marry him with a ten foot pole." }, + sha1Test{ "55dee037eb7460d5a692d1ce11330b260e40c988", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" }, + sha1Test{ "b7bc5fb91080c7de6b582ea281f8a396d7c0aee8", "The days of the digital watch are numbered. -Tom Stoppard" }, + sha1Test{ "c3aed9358f7c77f523afe86135f06b95b3999797", "Nepal premier won't resign." }, + sha1Test{ "6e29d302bf6e3a5e4305ff318d983197d6906bb9", "For every action there is an equal and opposite government program." }, + sha1Test{ "597f6a540010f94c15d71806a99a2c8710e747bd", "His money is twice tainted: 'taint yours and 'taint mine." }, + sha1Test{ "6859733b2590a8a091cecf50086febc5ceef1e80", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" }, + sha1Test{ "514b2630ec089b8aee18795fc0cf1f4860cdacad", "It's a tiny change to the code and not completely disgusting. - Bob Manchek" }, + sha1Test{ "c5ca0d4a7b6676fc7aa72caa41cc3d5df567ed69", "size: a.out: bad magic" }, + sha1Test{ "74c51fa9a04eadc8c1bbeaa7fc442f834b90a00a", "The major problem is with sendmail. -Mark Horton" }, + sha1Test{ "0b4c4ce5f52c3ad2821852a8dc00217fa18b8b66", "Give me a rock, paper and scissors and I will move the world. CCFestoon" }, + sha1Test{ "3ae7937dd790315beb0f48330e8642237c61550a", "If the enemy is within range, then so are you." }, + sha1Test{ "410a2b296df92b9a47412b13281df8f830a9f44b", "It's well we cannot hear the screams/That we create in others' dreams." }, + sha1Test{ "841e7c85ca1adcddbdd0187f1289acb5c642f7f5", "You remind me of a TV show, but that's all right: I watch it anyway." }, + sha1Test{ "163173b825d03b952601376b25212df66763e1db", "C is as portable as Stonehedge!!" }, + sha1Test{ "32b0377f2687eb88e22106f133c586ab314d5279", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" }, + sha1Test{ "0885aaf99b569542fd165fa44e322718f4a984e0", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" }, + sha1Test{ "6627d6904d71420b0bf3886ab629623538689f45", "How can you write a big system without C++? -Paul Glick" }, } export func TestGolden(t *testing.T) { @@ -66,7 +57,7 @@ export func TestGolden(t *testing.T) { g := golden[i]; c := NewDigest(); io.WriteString(c, g.in); - s := Hex(c.Sum()); + s := fmt.Sprintf("%x", c.Sum()); if s != g.out { t.Errorf("sha1(%s) = %s want %s", g.in, s, g.out); t.FailNow(); diff --git a/src/lib/hash/sha1block.go b/src/lib/hash/sha1block.go index b5052b712..f4555b2a4 100644 --- a/src/lib/hash/sha1block.go +++ b/src/lib/hash/sha1block.go @@ -11,18 +11,18 @@ package sha1 import "sha1" const ( - K0 = 0x5A827999; - K1 = 0x6ED9EBA1; - K2 = 0x8F1BBCDC; - K3 = 0xCA62C1D6; + _K0 = 0x5A827999; + _K1 = 0x6ED9EBA1; + _K2 = 0x8F1BBCDC; + _K3 = 0xCA62C1D6; ) -package func Block(dig *Digest, p []byte) int { +func _Block(dig *Digest, p []byte) int { var w [80]uint32; n := 0; h0, h1, h2, h3, h4 := dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4]; - for len(p) >= Chunk { + for len(p) >= _Chunk { // Can interlace the computation of w with the // rounds below if needed for speed. for i := 0; i < 16; i++ { @@ -41,33 +41,33 @@ package func Block(dig *Digest, p []byte) int { // Each of the four 20-iteration rounds // differs only in the computation of f and - // the choice of K (K0, K1, etc). + // the choice of K (_K0, _K1, etc). for i := 0; i < 20; i++ { f := b&c | (^b)&d; a5 := a<<5 | a>>(32-5); b30 := b<<30 | b>>(32-30); - t := a5 + f + e + w[i] + K0; + t := a5 + f + e + w[i] + _K0; a, b, c, d, e = t, a, b30, c, d; } for i := 20; i < 40; i++ { f := b ^ c ^ d; a5 := a<<5 | a>>(32-5); b30 := b<<30 | b>>(32-30); - t := a5 + f + e + w[i] + K1; + t := a5 + f + e + w[i] + _K1; a, b, c, d, e = t, a, b30, c, d; } for i := 40; i < 60; i++ { f := b&c | b&d | c&d; a5 := a<<5 | a>>(32-5); b30 := b<<30 | b>>(32-30); - t := a5 + f + e + w[i] + K2; + t := a5 + f + e + w[i] + _K2; a, b, c, d, e = t, a, b30, c, d; } for i := 60; i < 80; i++ { f := b ^ c ^ d; a5 := a<<5 | a>>(32-5); b30 := b<<30 | b>>(32-30); - t := a5 + f + e + w[i] + K3; + t := a5 + f + e + w[i] + _K3; a, b, c, d, e = t, a, b30, c, d; } @@ -77,8 +77,8 @@ package func Block(dig *Digest, p []byte) int { h3 += d; h4 += e; - p = p[Chunk:len(p)]; - n += Chunk; + p = p[_Chunk:len(p)]; + n += _Chunk; } dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4] = h0, h1, h2, h3, h4; |