You can often find me hanging out in realtime on the #haskell and #haskell-blah channels on [[irc.freenode.net|http://www.freenode.net/]].\n\nI'm also currently active on the [[haskell libraries|http://www.haskell.org/mailman/listinfo/libraries]] and [[cryptography|mailto:firstname.lastname@example.org]] and many other mailing lists, and the [[Haskell Wiki|http://www.haskell.org/hawiki]].
InitialRelease Motivation PaperAbstract ExportRestrictions
The Shaskell distribution site is at [[davidmercer.nfshost.com/projects/shaskell|http://davidmercer.nfshost.com/projects/shaskell/]] and includes this document. Any future binary releases and archival copies of all released versions will also be in that directory.\n\nThe latest source file only release will always be at [[davidmercer.nfshost.com/projects/shaskell/shaskell.hs|http://davidmercer.nfshost.com/projects/shaskell/shaskell.hs]]. \n\nThe complete source release in a gzipped tarball with all ancilliary distribution files, including this document is at [[davidmercer.nfshost.com/projects/shaskell/shaskell.tar.gz|http://davidmercer.nfshost.com/projects/shaskell/shaskell.tar.gz]]
You are completely authorized by US and other law to download, view and discuss Shaskell if you live in the United States, Canada, Austria, Australia, Belgium, Cyprus, Czech Republic, Estonia, Denmark, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Japan, Latvia, Lithuania, Luxembourg, Malta, Netherlands, NewZealand, Norway, Poland, Portugal, Slovakia, Slovenia, Spain, Sweden, Switzerland, or UK.\n\nYou are utterly barred by US law from downloading, viewing source code, explainations, etc. about Shaskell if you live in Cuba, Iran, Iraq, Libya, North Korea, Sudan or Syria, and any legitimate user of Shaskell is likewise barred from transmitting or discussing it with a national or resident of such a country.\n\nIf you live in a country that's not on that list, I can't definitively say if you can or can't download it, as I'm not an export lawyer! See my [[export disclaimer file|http://davidmercer.nfshost.com/projects/shaskell/export.txt]] for pertinent urls and text of the most relevant snippest of the US Federal Regulations.\n\nYes, I had to email the NSA with the url at which Shaskell is available for download from. It's YOUR responsibility to ensure that it is legal for you to view and download crypto software from the US. Which is at least better than the old regime pre-2000, where I'd have had to check your IP address to see where it comes from and tell them about who came here. We don't even have access logging turned on for this web site, on purpose.\n\nHey, I don't like it either, so don't complain to me, write to Congress!\n\nEnd Free Speech and Crypto Rant :-)\n
Federal Information Processing Standard 180-2 defines the Secure Hash Algorithms that must be used in all other, higher level crytography and encryption software sold to the United States Federal Government. It is published by [[NIST]] and is in the public domain. Nearly all commercial systems implement FIPS compliant (if not validated) encryption.\n\nFIPS 180-2 also continues to define the older SHA1 algorithm for backward compatibility in Federal software, but it is not implemented in Shaskell.\n\nOur local mirror copy is availalbe [[here|http://davidmercer.nfshost.com/projects/shaskell/fips180-2withchangenotice.pdf]].
We are pleased to announce the initial functioning release of Shaskell, Version 0.21a.\n\nIt exports functions sha256 and sha512, both of which take an array of bytes and return an array of 32 and 64 bit words, respectively, containing the corresponding hash. sha224 and sha384 are slated for the next release, followed by a wrapper to conform to the Haskell Hierarchal Libraries' naming conventions, and also providing convenience functions to read from a file or other source where the message length is not known ahead of time.
The public release of this software available for download on this site is realeased under version 2 of [[the GNU General Public License|http://davidmercer.nfshost.com/projects/shaskell/COPYING.txt]], as it contains vestigal ancestral code that was released under it.\n\nFuture releases may be able to be licensed under the more liberal [[BSD license]], and a for-publication version that is cleared of all encumberances for copyright assignment upon publication is currently being incorprated into the research paper on Shaskell for eventual journal submission.
I have so far completed all of the non-stateful (pure and lazy!) portions of\nthe FIPS 180-2 specification, up through section 6.2.1 inclusive, and step\n1. only from section 6.2.2. That last is the tricky bit, where all of the\nstateful computation takes place and entropy is disturbed with prime number\nmixing and overflowing bit operations. It's only a few lines of the spec that\nI have remaining (aside from message length padding), and I intend to\nimplement them as a monad.
[[Motivation]]\nMainFeatures\nPaperAbstract\n[[Community]]\nExportRestrictions\n[[License]]\nDownloadSoftware\n[[ThankYou]]\n\n© 2005 [[David Mercer|http://davidmercer.nfshost.com]]\n\nsite built with [[TiddlyWiki|http://www.osmosoft.com/]]\n\n<<newTiddler>>\n<<newJournal "DD MMM YYYY">>
This project was begun as an alternative to my updating\nthe openssl wrappers that I found that already supported [[SHA1]], and\nneeded to be extended to use the [[SHA2]] family of message digests, which\nof course have been in openssl for a long while (I'm acquainted with\nBen Laurie from a number of mailing lists and online fora for years\nrunning now).\n\nI have found the C and C++ implementations of the FIPS 180-2 spec to\nbe, while certainly fast, very hard to read and correlate with that\nspec. Wrappers in other languages, which is how almost all obtain\ntheir crypto functions, are little better. None of them can ever\n(feasibly) have any runtime or termination properties formally proved.\n Finding this state of affairs deeply unsatisfying on aesthetic\ngrounds (which I have for years, just not specifically in regard to\nHaskell), I began this project to implement SHA2 completely in Haskell.
The [[National Institutes of Standards and Technology|http://www.nist.gov/]], the Federal Agency that is the successor to ANSI and other bureaus.
Title: Shaskell, an implementation of the FIPS 180-2 standard in Haskell\nAuthor: David Mercer, email@example.com\n\nAbstract: Shaskell is an implementation of the message digest algorithms\ndefined in the NIST FIPS 180-2 standard in the functional programming language\nHaskell. Unlike other currently validated open source implementations, it is\ncompletely written in a memory and type safe language, Haskell. Nearly all of\nthe FIPS 180-2 specification is directly expressed, line per line, in Shaskell,\nand all source code lines carrying out mathematical operators individually\ncite the FIPS 180-2 specification in that line's comments. \nFuture work: Funding for FIPS 180-2 validation for Shaskell is currently being\nsought. Research to formally prove runtime and termination characteristics of\nShaskell using computer proof assistants that operate on Haskell programs,\nspecifically Agda and similar software, is currently under way.\n
The same message digest computation as [[SHA-256]], but with a different starting constant and the output truncated to 224 bits.
SHA-256 modifies and extends the SHA-1 secure message digest algorithm with longer bit length constants and operations, and an enhanced mixing of entropy in the inner loop.
SHA-384 is the same as SHA-512,but with different starting constants and the output truncated to 384 bits.
SHA-512 is the same as SHA-256, but with all words twice as long and more iterations of the inner loop. Of course it has it's own initial constants and hash state as well.
An older, now considered insecure, message disgest algorithm that is still very widely used on the Internet for many purposes in cryptography. It is defined in FIPS 180-1.
The family of message digest algorithms defined in the [[FIPS 180-2]] standard published by [[NIST.]], it includes [[SHA-224]], [[SHA-256]],[[SHA-384]] and [[SHA-512]].
An SHA2 library in Haskell
This release is dedicated to Dominic Steinitz, without who's suggestions and advice it would not have been possible, and of course my wife, who has put up of with quite a lot along the way, especially during the debugging of multi-block chunking! :-)\n\nAnd to everyone on the #haskell irc channel on irc.freenode.net, who also rendered many invaluable suggestions.