Hi, Jim, Mostly agree.
> 1. I would define an abstract class for each class of algorithm > 2. I would encapsulate each algorithm in a single class implementing > its respective abstract class > 3. I would define abstract classes for filters and sinks > 4. I would layer filters and sinks on their abstract classes > 5. I would layer modes on top of filters. Maybe above you mentioned is similar to the approach of .net security namespace. I think Crypto++ LIB should have two interesting points: (1) easy to use (2) easy to adapt. Unfortunately, for (1), it lacks sample codes while for (2) it lacks documentation. The conclusion may be, the LIB is lovely however thorny. Thanks.
