<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6557826183025294520</id><updated>2011-11-13T16:57:17.090-05:00</updated><title type='text'>Crypto Objects</title><subtitle type='html'>Random thoughts from the developer of the Ada Cryptographic Objects library.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-7218059248383903696</id><published>2010-09-08T21:33:00.002-04:00</published><updated>2010-09-08T21:52:52.393-04:00</updated><title type='text'>The libsparkcrypto Library</title><content type='html'>&lt;p&gt;Recently Alexander Senier announced on comp.lang.ada his library of cryptographic algorithms in SPARK called &lt;a href="http://senier.net/libsparkcrypto/"&gt;libsparkcrypto&lt;/a&gt;. Based on the project's web page it looks like libsparkcrypto's basic goals overlap considerably with my goals for ACO. Also at the moment libsparkcrypto contains a much richer collection of algorithm implementations than the meager set in ACO and is more polished than ACO. If you have an immediate need for a cryptography library in SPARK, libsparkcrypto is in a better position to meet that need.&lt;/p&gt;

&lt;p&gt;Of course who knows what the future will bring. ACO contains a collection of high level object-oriented wrappers intended to abstract out various cryptographic interfaces in a useful way. Those wrappers are not SPARK but for applications that don't need SPARK they might be more convenient than interacting with the low level algorithms directly. Also my long term plans for ACO entail supporting various cryptographic and security services beyond "just" algorithm implementations. On the other hand talk is cheap. It is entirely possible that those plans will never be realized.&lt;/p&gt;

&lt;p&gt;In any case it is good to have options. When I started ACO it appeared to me that the other Ada cryptographic libraries I found were either dead projects or did not have the sort of algorithms I needed. It is good for the Ada ecology in general and for SPARK in particular to have two SPARK cryptography libraries being actively developed. Since ACO is primarily a hobby project for me, I don't mind reinventing the wheel as long as I'm having fun doing it!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-7218059248383903696?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/7218059248383903696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=7218059248383903696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/7218059248383903696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/7218059248383903696'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2010/09/libsparkcrypto-library.html' title='The libsparkcrypto Library'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-2621509081293744552</id><published>2010-09-02T08:18:00.005-04:00</published><updated>2010-09-02T08:43:56.467-04:00</updated><title type='text'>Extended Integer Support</title><content type='html'>&lt;p&gt;Several years ago I wrote, largely as an exercise, a general purpose extended precision integer class for C++. Knowing that extended precision integers were needed for certain cryptographic algorithms, I later translated my C++ class into Ada with the intention of using it with ACO.&lt;/p&gt;

&lt;p&gt;My original Ada version followed my C++ class's design and featured support for signed integers of arbitrary size. This is fine as far as it goes, but the implementation also used dynamic memory allocation (via the Ada 2005 Vectors package). When I decided to implement the core algorithms in ACO using SPARK I needed to rework my extended integer package to conform to SPARK rules. I removed the ability to dynamically resize the integers and I also dropped support for negative integers. I don't believe I will need negative values in my intended cryptographic applications (but we'll see).&lt;/p&gt;

&lt;p&gt;The result is a package providing a type &lt;code&gt;Very_Long&lt;/code&gt; that, currently, only supports 160-bit unsigned values. All operations on a &lt;code&gt;Very_Long&lt;/code&gt; object are implicitly done modulo 2&lt;sup&gt;160&lt;/sup&gt;. My choice of 160-bit values is tied to my immediate need. I anticipate soon adding support in ACO for &lt;a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography"&gt;elliptic curve&lt;/a&gt; based (ECC) public key algorithms. Such algorithms do their computations in an underlying field such as &lt;i&gt;F&lt;sub&gt;p&lt;/sub&gt;&lt;/i&gt; for some large prime &lt;i&gt;p&lt;/i&gt;. It turns out that 160-bit field sizes provides reasonable security with ECC algorithms. Focusing on that size should be sufficient for now.&lt;/p&gt;

&lt;p&gt;Ultimately I would like to support various field sizes, of course, and also use &lt;code&gt;Very_Long&lt;/code&gt; objects to support other public key schemes besides ECC. A secure application of the RSA algorithm, for example, needs much larger integers. However, writing generalized SPARK code is a little tricky because SPARK currently supports neither generics nor object oriented techniques. Since everything in SPARK needs to be statically sized it seems likely that a general purpose &lt;code&gt;Very_Long&lt;/code&gt; type would need to always allocate enough memory for the largest values that would ever be needed. Of course this is an inefficient use of memory for applications that need only small values. My plan is to address this issue at a later time.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-2621509081293744552?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/2621509081293744552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=2621509081293744552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/2621509081293744552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/2621509081293744552'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2010/09/extended-integer-support.html' title='Extended Integer Support'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-1496214897647405498</id><published>2010-02-19T08:41:00.004-05:00</published><updated>2011-02-14T09:33:18.414-05:00</updated><title type='text'>Development Site Moved to Assembla</title><content type='html'>&lt;p&gt;I moved the development site for ACO from SourceForge to Assembla. I have nothing against SourceForge, but I'm using Assembla for another project (the &lt;a href="http://www.assembla.com/spaces/cubesatlab/"&gt;VTC CubeSat Laboratory&lt;/a&gt;), and I find that I like it fairly well. Assembla feels lighter weight than SourceForge and that seems like a better fit for a small scale project of this nature. Also Assembla's site does not use ads which provides a nicer experience for visitors.&lt;/p&gt;

&lt;p&gt;The Assembla site is a little rough at the moment. I hope to get it configured in the next few weeks. I also hope to pick up the pace of development on ACO itself. This work deserves more attention than I've been giving it recently.&lt;/p&gt;

&lt;p&gt;The old SourceForge site still exists and is basically frozen. SourceForge's policy is to hold moved projects in an archived state for reference purposes. That seems like a reasonable policy. In fact, I could even imagine moving ACO development back to SourceForge at some future time depending on how things unfold.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-1496214897647405498?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/1496214897647405498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=1496214897647405498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/1496214897647405498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/1496214897647405498'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2010/02/development-site-moved-to-assembla.html' title='Development Site Moved to Assembla'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-606641351551296290</id><published>2009-10-21T20:53:00.003-04:00</published><updated>2009-10-21T21:16:33.151-04:00</updated><title type='text'>Draft SHA-1 Implementation</title><content type='html'>&lt;p&gt;I recently committed a draft implementation of the SHA-1 hash algorithm to the ACO repository. This implementation is only a draft because it currently lacks any test cases and documentation. I thus consider it to be incomplete at this time. However, this is the first activity in the ACO project in a while so I thought it would be good to post a message about it anyway. I am alive! Hopefully I will be able to make steady progress from now on.&lt;/p&gt;

&lt;p&gt;My SHA-1 implementation follows as directly as possible the description of the primary algorithm given in &lt;a href="http://www.itl.nist.gov/fipspubs/fip180-1.htm"&gt;FIPS 180-1&lt;/a&gt;. My idea was to create an implementation that could eventually be proved correct with respect to the specification. I assumed that would be easier if I followed the specification as literally as possible. Alas, constructing a proof of correctness will be complicated by the fact that the specification isn't as formal as one might like. I will worry about that problem later. In the meantime it is my hope that my implementation is at least easy to review manually.&lt;/p&gt;

&lt;p&gt;Ultimately I would also like to provide an implementation of the low memory consuming "alternate" algorithm described in FIPS 180-1. Of course it will additionally be necessary to formally show that the alternate algorithm produces the same result as the primary algorithm (FIPS 180-1 doesn't really do this), and that my implementation of it is correct with respect to its specification. What fun!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-606641351551296290?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/606641351551296290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=606641351551296290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/606641351551296290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/606641351551296290'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2009/10/draft-sha-1-implementation.html' title='Draft SHA-1 Implementation'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-5823597417901595273</id><published>2009-02-10T14:34:00.003-05:00</published><updated>2009-02-10T15:03:24.649-05:00</updated><title type='text'>Refactoring for SPARK</title><content type='html'>&lt;p&gt;I decided to try using SPARK after I had already started the design of the ACO library and implemented one encryption algorithm (Blowfish). Once I decided to use SPARK for the core algorithms, I knew that I needed to refactor my existing code to make it conform to SPARK rules. I wasn't sure how that was going to work out so I felt the refactoring had to be done right away to ensure that it was even going to be possible.&lt;/p&gt;

&lt;p&gt;I just completed the refactoring yesterday. I had to rearrange a number of packages, as expected, but overall it went fine and the resulting code is quite reasonable. The main tricky aspect was related to the intrinsic shift procedures. GNAT provides &lt;code&gt;Shift_Left&lt;/code&gt; and &lt;code&gt;Shift_Right&lt;/code&gt; procedures as "intrinsics" in package &lt;code&gt;Interfaces&lt;/code&gt;. This means that they are compiled directly into single machine instructions without procedure call overhead. However,
I didn't want to use the types defined in package &lt;code&gt;Interfaces&lt;/code&gt; because I wanted to use representation clauses to define the properties of my basic types precisely (specifically, the size). Such clauses must appear in the same package as where the type is defined, and I don't have the option of editing the library package &lt;code&gt;Interfaces&lt;/code&gt;.

&lt;p&gt;However, my benchmark experiments with Blowfish showed that it was very important to performance to use the intrinsic procedures. Correctness may have first priority in ACO, but performance is important too. I didn't feel like I could worry about this matter later. Fortunately GNAT allows me to specify procedures of my own as intrinsic provided the procedures have the proper names and operate on types with appropriate properties. This allowed me to define &lt;code&gt;Shift_Left&lt;/code&gt; and &lt;code&gt;Shift_Right&lt;/code&gt; procedures for my type &lt;code&gt;ACO.Octet&lt;/code&gt; while retaining the speed of the intrinsic operations.&lt;/p&gt;

&lt;p&gt;The complication that arose was that I also wanted to do the same for the types &lt;code&gt;ACO.Double_Octet&lt;/code&gt;, &lt;code&gt;ACO.Quadruple_Octet&lt;/code&gt;, and &lt;code&gt;ACO.Octuple_Octet&lt;/code&gt;. To make all the necessary shifts intrinsic I had to use particular procedure names. However, SPARK does not allow overloading of procedure names so this created a conflict between SPARK rules and my desire for an efficient implementation. To work around this, I created separate packages for the operations on each type. This caused something of a proliferation of packages, but it worked out to be a reasonable approach.&lt;/p&gt;

&lt;p&gt;I also factored out the core algorithms from the object oriented interfaces so that the core algorithms could be made SPARKable while still retaining the convenient interfaces for users who want them. This went smoothly. There is now slightly more overhead involved when using the object oriented interfaces than there used to be because of the extra layer of procedure calling involved. However, benchmark tests on Blowfish show only a slight slowdown due to this effect. The beauty of this approach is that while the main algorithms are (will be) SPARKable, the high level interfaces made available by the library can continue to use full Ada 2005.&lt;/p&gt;

&lt;p&gt;So far I have only applied flow annotations to the packages that I intend to be SPARKable. This helps increase confidence in those packages somewhat, but I believe the real gain in reliability will come when I start using the proof annotations. I intend to put that off for a while, however, until the library has been fleshed out a bit more. Yet even the flow annotations are useful. They forced me to properly check error status on all called procedures; something I hadn't been doing consistently before.&lt;/p&gt;

&lt;p&gt;I feel that now the basic structure of ACO is complete and what remains is mostly a matter of building on that structure with actual algorithm implementations. I will probably continue by implementing SHA1 next.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-5823597417901595273?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/5823597417901595273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=5823597417901595273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/5823597417901595273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/5823597417901595273'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2009/02/refactoring-for-spark.html' title='Refactoring for SPARK'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-4899363461571631543</id><published>2008-11-18T11:51:00.005-05:00</published><updated>2010-09-02T08:45:03.337-04:00</updated><title type='text'>Testing Crypto Implementations</title><content type='html'>&lt;p&gt;How does one test an implementation of a cryptographic algorithm? This question is surprisingly tricky. In general many algorithms have at least some easy to determine correct results, so writing test cases for them is relatively straight forward. For example consider red-black trees. If one inserts a collection of integers into a red-black tree it is easy to see that a &lt;code&gt;search&lt;/code&gt; operation on one of those integers should succeed. The test case author can now focus on writing test cases that search for particularly "interesting" integers so the insertion and search code are well exercised. However, the output of an encryption algorithm looks indistinguishable from random data. How can one know what the correct "random" data should be? Of course one could decrypt the result of encryption and verify that it agrees with the original input. Such round trip testing is certainly valuable but it's not enough. A round trip might succeed even though the ciphertext produced by the encryption is wrong. The implementation of decryption would have to be flawed in a complementary way, but it is easy to imagine that happening.&lt;/p&gt;

&lt;p&gt;It seems like the only way to really test the validity of an encryption implementation is to check its output against a known correct implementation. The problem is how do we know a correct implementation when we see it? Certainly if multiple &lt;em&gt;independently written&lt;/em&gt; implementations produce the same output that increases confidence in the correctness of all of them. However, how many implementations of an algorithm are really independently written?&lt;/p&gt;

&lt;p&gt;For example, the &lt;a href="http://www.schneier.com/blowfish.html"&gt;Blowfish&lt;/a&gt; algorithm is initialized with 4168 digits from the hexadecimal expansion of Pi. The implementation of Blowfish currently in ACO uses the values for those digits that are &lt;a href="http://www.schneier.com/code/constants.txt"&gt;posted on Bruce Schneier's web site&lt;/a&gt;. As a result ACO's implementation of Blowfish is not 100% independent of Schneier's. If those digits of Pi are wrong, we are both wrong in the same way. Even when multiple implementations of an algorithm are written independently there is still a possibility of them all making the same error, each on their own. While this might seem unlikely, it is certainly conceivable.&lt;/p&gt;

&lt;p&gt;Published cryptographic algorithms are analyzed for security using mathematical methods. That analysis is done based on the published formal description of the algorithm. In order to ensure that an implementation of a cryptographic algorithm actually provides the security the theoretical results suggest, it is important to be using code that actually implements the algorithm's specification correctly. No amount of checking against other implementations will verify that the formal mathematical specification is being followed. Thus I submit that one should instead try to prove that an implementation is correct using formal methods.&lt;/p&gt;

&lt;p&gt;It is for this reason that I intend to use the SPARK tools during the development of ACO. Although ACO is not at this point yet, I hope to eventually use SPARK to formally prove the correctness of all the core algorithms in the library. Of course formal proof at the level of the source code will not find errors in the compiler's code generator, or in numerous other places where errors might arise. Thus I fully intend to &lt;em&gt;also&lt;/em&gt; check ACO's output against other implementations. It is my hope that the combination of testing and formal proof will give users a high level of confidence that ACO library actually provides the security assurances claimed by the published mathematical analysis.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-4899363461571631543?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/4899363461571631543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=4899363461571631543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/4899363461571631543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/4899363461571631543'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2008/11/testing-crypto-implementations.html' title='Testing Crypto Implementations'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6557826183025294520.post-1925215798797045636</id><published>2008-11-15T13:00:00.005-05:00</published><updated>2008-11-16T07:51:54.161-05:00</updated><title type='text'>Introduction</title><content type='html'>&lt;p&gt;This is a blog about the &lt;a href="http://adacrypto.sourceforge.net/"&gt;Ada Cryptographic Objects&lt;/a&gt; (ACO) library and all things related to it. ACO is a pet project of mine to build a high quality crypto library in Ada. I have a number of Ada projects in mind that could use cryptography and for various reasons none of the existing free crypto libraries really suited my tastes. In any case, as a hobby project this effort is not necessarily about quick development or maximum software reuse. Rather this project is just for my own enjoyment. Using other people's code, while highly practical, isn't nearly as much fun as writing my own.&lt;/p&gt;

&lt;p&gt;Right now ACO is in its early stages. Most of my work has been focused on organizing the library rather than actually implementing cryptographic algorithms. I believe this is as it should be since I want to create a good foundation for the library before spending a lot of time writing the wrong code. I am using the &lt;a href="https://libre2.adacore.com/aunit/"&gt;AUnit&lt;/a&gt; unit test framework for my unit tests, I am building benchmark programs to check the performance of my algorithm implementations, and I am writing detailed documentation for ACO &lt;em&gt;as I write the code&lt;/em&gt;. I hate dealing with software that has incomplete documentation and I don't want ACO to have that problem.&lt;/p&gt;

&lt;p&gt;My plan is also to use the &lt;a href="http://www.praxis-his.com/sparkada/"&gt;SPARK&lt;/a&gt; tool set to analyze my implementation of the core algorithms. SPARK is a powerful static analysis tool that can be used, for example, to help prove the correctness of one's code. I'm not sure right now how far I will take my use of SPARK; I'm using it here partly to learn about SPARK's issues and capabilities.&lt;/p&gt;

&lt;p&gt;Right now &lt;a href="http://sourceforge.net/projects/adacrypto/"&gt;ACO lives on SourceForge&lt;/a&gt;. I have been using the developers forum there to make notes about my work as I go along. My thought was that if another developer joins me in the future he or she might want to review those notes to get a better understanding of my design decisions and why I made them. After making a few entries in the developers forum, I realized that I probably really should be posting such material in a public place. Others who are interested in Ada, cryptography, or highly reliable software might be interested in following or commenting on ACO's development. It is in that spirit that I created this blog.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6557826183025294520-1925215798797045636?l=crypto-objects.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crypto-objects.blogspot.com/feeds/1925215798797045636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6557826183025294520&amp;postID=1925215798797045636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/1925215798797045636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6557826183025294520/posts/default/1925215798797045636'/><link rel='alternate' type='text/html' href='http://crypto-objects.blogspot.com/2008/11/introduction.html' title='Introduction'/><author><name>Peter</name><uri>http://www.blogger.com/profile/02226454409235252576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-rER9VOp4m1Y/TlFiySVqyLI/AAAAAAAAAQc/UDoOVdaa0-c/s220/Rabbit-with-glasses.gif'/></author><thr:total>0</thr:total></entry></feed>
