From: Michael D. C. <cra...@go...> - 2003-01-07 13:29:16
|
Friends, My client WiebeTech will be demonstrating their product FireWire Encrypt at the MacWorld Expo starting today. (Booth 1651) FireWire encrypt is a sector-level hard drive encryptor. It is very easy to use, because the encryption algorithm is entirely embedded in a FireWire to IDE bridge. The only host software required is a simple applet for passphrase entry. That applet, FireWire Encrypt Login, is a ZooLib application! WiebeTech is demonstrating FireWire Encrypt working with Mac OS X, but in good part due to ZooLib's cross-platform capabilities, the product is expected to also support Windows, Linux and classic Mac OS when it is released to the public. MacCentral just posted some coverage of it at: http://maccentral.macworld.com/news/0301/07.wiebetech.php Now you know why I was looking into ZooLib's one-way hashing algorithms the other day. The encryption key for the Rijndael algorithm can be a 16, 24 or 32 byte binary value, but nobody's going to remember a 32-byte binary value. What you normally do, and what FireWire Encrypt Login does, is allow the user to enter a textual passphrase of any length, and then hash it into a key of the desired length. I encountered a couple unexpected challenges in writing FireWire Encrypt Login. The latest CodeWarrior I have is CodeWarrior 6, which claims to support OS X but turns out not to work very well at all on OS X. I tried for a while to get ZooLib to build with Project Builder, but I couldn't get ZooLib to actually work with Project Builder (I was trying out the ButtonMessage demo, which is about as simple a ZooLib application as you can get). I do plan to go back and figure out the problem and get ZooLib to support Project Builder, though. I ended up doing most of the UI work on OS 9.2, where CW6 works fine, and then adding in a user space firewire drive that I had been able to write in command-line form in Project Builder. But that presented another challenge - CodeWarrior 6 can only do Code Fragment Manager applications, and the IOKit is only supported when used from Mach-O applications. With Andy's help I found out there is some DTS sample code called "CallMachOFramework", that did most of what I needed. What it allows you to do is manually link to a Mach-O library at runtime. Then my last problem was that my Mach-O calls would only work up to a point, and then consistently crash. I had a hard time figuring it out because the CW6 debugger wouldn't work for me on OS X. It turns out that the problem was that the calling conventions for dereferencing pointers to functions are different between CFM and Mach-O! A Mach-O function pointer points to real code, but a CFM function pointer is a pointer to a small data structure called a transition vector, or TVector. What you do is make an array of two void*'s. Put the Mach-O function pointer into the first one, and set the other to NULL. Cast the address of the first array element to your function pointer type, and call it. Scary, no? It looks like you're jumping into data! But it worked great. James Wiebe was very pleased at the look of FireWire Encrypt. Thanks to all the ZooLib developers for making this possible for me. I'll try to post a screen shot soon. Regards, Mike Crawford Regards, Mike Crawford -- Michael D. Crawford GoingWare Inc. - Expert Software Development and Consulting http://www.goingware.com/ cra...@go... Tilting at Windmills for a Better Tomorrow. |