AESWiki scrapes the AES Sbox Wikipedia page checking the
SBox/Inverse tables bytes match the given C++ init bytes on the page.
https://en.wikipedia.org/wiki/Rijndael_S-box
Uses goquery to scrape the pre tags.
Possible speed ups:
- Set initial capacity for the buffers returned in parseSBox* functions (done)
- Move away from strings and use bytes from (Scanner).Bytes() to reduce allocations (not needed)
- Remove the prees map and run each parseSBox* in parallel
Profiling
1.aeswiki.bench0 - Benchmark stats after completing (#1) above
$ go test -bench=BenchmarkParse
PASS
BenchmarkParseSBoxTable-4 100000 21976 ns/op 7200 B/op 83 allocs/op
BenchmarkParseSBoxBytes-4 30000 53323 ns/op 12080 B/op 132 allocs/op
ok github.com/alexmullins/aeswiki 4.577s
2.After profiling both functions, most of the cumulative time was spent in the Replace func.
After testing the Replace() in the strings and bytes packages there was little to
no performance difference to warrant a change.
$ go test -bench=BenchmarkReplace
PASS
BenchmarkReplaceString-4 10000000 204 ns/op 32 B/op 2 allocs/op
BenchmarkReplaceByte-4 10000000 203 ns/op 16 B/op 1 allocs/op
ok github.com/alexmullins/aeswiki 4.513s
Above there is no timing difference, half the bytes/op and allocs/op. The string.Replace
is fine for this use case.