CRYPTOGAMS by <appro@openssl.org>


Q. What are cryptogams?
A. Cryptogams are lower plants, which reproduce by spores.

Q. Huh? What do plants have to do with you?
A. Nothing really, it's just a name I've chosen (though naturally not without simple covert meaning in mind ;-) to denote a collection of low-level cryptographic primitives written in assembler by yours truly for the OpenSSL project. Being the original author of these modules I've chosen to exercise the freedom to license my work under multiple licenses. The licensing terms is the key and the only difference between given OpenSSL modules and the corresponding ones provided as part of CRYPTOGAMS. If obtained as a part of the OpenSSL Toolkit the modules are covered by the OpenSSL license, while if obtained as a part of the CRYPTOGAMS distribution - by the CRYPTOGAMS License.

Q. What is the license then?
A. The license is "new" BSD one [see below], but for the record I'm using it kind of under protest. The problem I have with the readily available licenses is that they address the complete chain up to the end-users. While CRYPTOGAMS by themselves are quite useless [they have to be wrapped in a higher level API and should never be called by end-user application directly], I originally wanted their license to address exclusively cryptographic toolkit developers, but grant the them right to re-license the incorporated code under any OSI approved [copyleft] license. But I was advised against it with argumentation that license text is not actually plain English words and I would definitely have trouble proliferating it. To a degree I have to agree at least with the former, because I've got headache reading license texts looking for suitable one. Yet, I don't quite understand why does it have to be the case [e.g. BSD license didn't actually contribute to the migraine], so if anybody feels like giving me a hand here, I would appreciate it very much...

Q. Why did you do it?
A. Because I was kindly asked to, with reference to the fact that the OpenSSL licensing terms were not an option for certain Open Source project in need of high-performance crypto [which my work was recognized for]. By doing so I also seek wider adoption of my work and consequently inspiration for implementing more algorithms and/or on more platforms.

Q. What do I get?
A. As of the moment of this writing CRYPTOGAMS version 0 contain raw SHA1 code for various platforms. There is no documentation, not even header file describing calling interface. The idea behind this pre-release is to figure out what is sensible to provide with this kind of primitives collection, so I'm open for suggestions. Version 1 will include more algorithms, at the very least a header file and a sample Makefile.


Copyright (c) 2006, CRYPTOGAMS by <appro@openssl.org> All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain copyright notices, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the CRYPTOGAMS nor the names of its copyright holder and contributors may be used to endorse or promote products derived from this software without specific prior written permission. ALTERNATIVELY, provided that this notice is retained in full, this product may be distributed under the terms of the GNU General Public License (GPL), in which case the provisions of the GPL apply INSTEAD OF those given above. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.