The CAST5 algorithm defines a maintenance test:
B.2. Full Maintenance Test A maintenance test for CAST-128 has been defined to verify the correctness of implementations. It is defined in pseudo-code as follows, where a and b are 128-bit vectors, aL and aR are the leftmost and rightmost halves of a, bL and bR are the leftmost and rightmost halves of b, and encrypt(d,k) is the encryption in ECB mode of block d under key k. Initial a = 01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A (hex) Initial b = 01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A (hex) do 1,000,000 times { aL = encrypt(aL,b) aR = encrypt(aR,b) bL = encrypt(bL,a) bR = encrypt(bR,a) } Verify a == EE A9 D0 A2 49 FD 3B A6 B3 43 6F B8 9D 6D CA 92 (hex) Verify b == B2 C9 5E B0 0C 31 AD 71 80 AC 05 B8 E8 3D 69 6E (hex)
In my code I had a comment "takes about an hour to run", dating from about the end of 1998. Trying today, I got
- In shiny new NetBeans 6.0, run from a JUnit 3.8.2 unit test with cobertura coverage instrumentation: 885s
- With instrumentation disabled: 6s
- In VS 2005 as a post-build run of NCover 1.5.8 running the ported test as a debug build: 34s
- In VS 2005 as a post-build run of NCover 1.5.8 running the ported test as a release build: 17s
- In VS 2005 as a command-line run of the test as a release build (100 lines of output piped to a file, rather than the console): 6s
So, you pay through the nose (~150 times slower) for your branch coverage instrumentation, as opposed to line coverage (~6 times). And both JVM and CLR are seriously faster, even allowing for the maybe 20x faster processor, than what I was running a decade ago.
Oh, yeah, today's unit test…
It passes.
No comments:
Post a Comment