Friday, March 31, 2006

 

The World's Most Perlish Newsletter

Perl.com update
--------------------------------------
The Email for www.perl.com Subscribers

===================================================================
Open with Confidence.

Join the Affordable Solutions for the Open Enterprise Web seminar series
April 11 and 12, hosted by Novell, Dell, JBoss and MySQL.

Running a successful small business and a cost-efficient edge
infrastructure at the same time isn't easy. But with the right network
edge computing solution, it is possible. Discover Open Enterprise
Solutions at an SMB price that only Dell can offer. Register today at:

http://www.oreilly.com/go/novell_perl

===================================================================

Hello, Perl hackers. Since the last newsletter two weeks ago, spring has
arrived in the northern hemisphere (at least if you go by the evidence
that your editor's cats have clustered against the open windows to smell
all of the smells of growing things and drying mud). Here's what you
should read if you haven't set Perl.com as your home page yet.

* Perl News in the Wild

Registration has opened for YAPC::NA, June 26 through 28 in Chicago,
Illinois. Now if the conference people would just confirm your editor's
talk....

<http://use.perl.org/article.pl?sid=06/03/28/087215>

Similarly, YAPC::EU has announced the dates of its conference in
Birmingham, U.K.--30 August through 01 September, 2006. Say goodbye to
summer with Old World Hackers:

<http://use.perl.org/article.pl?sid=06/03/28/2327245>

Perlcast has published an interview with Pugs/Bugs developer Audrey Tang.
If you're quick, you can also win access to the Rough Cuts version of Perl
Hacks:

<http://perlcast.com/2006/03/29/interview-with-audrey-tang/>

Dave Mitchell, Perl 5 porter, scared and impressed everyone by converting
the regular expression engine from recursive to iterative:

<http://use.perl.org/article.pl?sid=06/03/30/1337208>

* Perl on ORN

Your editor reviewed the recently released CPAN distribution Jifty::DBI:

<http://www.oreillynet.com/onlamp/blog/2006/03/cpan_module_review_jiftydbi.html>

Dave Cross posted slides from a recent talk about what Perl's
database-object bridges often lack:

<http://www.oreillynet.com/onlamp/blog/2006/03/whats_wrong_with_objectrelatio.html>

Your editor convinced Allison Randal to pair program with him using
Parrot's compiler tools (yes, the ones intended to put Perl 6 on Parrot):

<http://www.oreillynet.com/onlamp/blog/2006/03/inside_parrots_compiler_tools.html>

Finally, your editor posted the first five parts of a six-part series on
designing the world's most maintainable language. (Don't miss the
conclusion on Saturday morning):

<http://www.oreillynet.com/onlamp/blog/2006/03/the_worlds_most_maintainable_p.html>

That's it for this week. Next week, watch for an article on making the
most of the Perl debugger, an interview with maintperl Pumpking Nicholas
Clark, and the start of an extended series on refactoring a legacy
codebase--in real time.

Not sure what "in real time means" but it sounds cool,
- c
chromatic@oreilly.com
Editor, Perl.com, et cetera

===================================================================
Your Skills Are in Demand. More Skills. More Demand.

Choose from 45 webcasts organized by track--JSP, PHP, and ColdFusion. Each
track has been designed to take advantage of your existing Web development
skills and includes insightful content contributed by Dr. Dobb's and
O'Reilly.

http://www.oreilly.com/go/learn2asp_perl

===================================================================

*** Featured Articles ***

Using Ajax from Perl
The recently rediscovered Ajax technique makes the client side of web
programming much more useful and pleasant. However, it also means revising
your existing web applications to take advantage of this new power.
Dominic Mitchell shows how to use CGI::Ajax to give your Perl applications
access to this new power.

<http://www.perl.com/pub/a/2006/03/02/ajax_and_perl.html>

***

Advanced Subroutine Techniques
Subroutines seem like a basic building block of code. They're simple and
easy to understand and use, right? That's true--but there are a few
advanced techniques to make your code more maintainable and robust. Rob
Kinyon goes beyond making sense of subroutines to making subroutines work
for you.

<http://www.perl.com/pub/a/2006/02/23/advanced_subroutines.html>

***

Managing Rich Data Structures
Perl is so good at handling plain text files that it's seductively easy to
use them when you need something better. Yet sometimes using a
full-fledged database is just Too Much Work. If only Dave Baker had
written an article on using complex, persistent data structures with
MLDBM.

<http://www.perl.com/pub/a/2006/02/16/mldbm.html>

***

Debugging and Profiling mod_perl Applications
How do you use the debugger on a mod_perl application? How do you profile
an application embedded in a web server, with multiple child processes?
Don't worry. Where there's Perl, there's a way. Frank Wiles demonstrates
how to debug and profile mod_perl applications.

<http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html>

***

Test-Driving X11 GUIs
Is GUI testing as difficult as it seems? Maybe not, with the right testing
libraries. George Nistorica shows what X11::GUITest can and can't do to
make your Unix and Unix-like applications more robust.

<http://www.perl.com/pub/a/2006/02/02/x11_gui_testing.html>

***

More Advancements in Perl Programming
What's advanced Perl programming? The definition has changed over the
years. For a while it was XS and GUIs and typeglobs and OO. Now a lot of
it is using CPAN effectively. Since completing Advanced Perl Programming,
Second Edition, Simon Cozens has discovered even more ways to work more
smartly and effectively. Here's what he's learned.

<http://www.perl.com/pub/a/2006/01/26/more_advanced_perl.html>

***
===================================================================
BUY 2 BOOKS DIRECT, GET 1 FREE

Take advantage of O'Reilly's "Buy 2 Books, Get 1 Free" offer by cutting
and pasting code "OPC10" into our shopping cart. Any orders over $29.95
also qualify for free shipping in the US.

http://www.oreilly.com/store/?CMP=NLC-0Z7E11150382&ATT=perl1

===================================================================
------------------------------------------------------------------
Interested in sponsoring the Perl.com newsletter? Please email us at
advertising@oreilly.com for rate and availability information.
Thank you!
------------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
------------------------------------------------------------------


Thursday, March 30, 2006

 

httplib2: HTTP Persistence and Authentication

XML.com Xtra!
---------------------------------
The Email for XML.com Subscribers

=================================================================
Open with Confidence.

Join the Affordable Solutions for the Open Enterprise Web seminar series
April 11 and 12, hosted by Novell, Dell, JBoss and MySQL.

Running a successful small business and a cost-efficient edge
infrastructure at the same time isn't easy. But with the right network
edge computing solution, it is possible. Discover Open Enterprise
Solutions at an SMB price that only Dell can offer. Register today at:
http://www.oreilly.com/go/novell_xml

=================================================================

Dear Reader,

Welcome to another issue of XML.com.

Joe Gregorio continues his excellent explication of various parts of HTTP
that, if used correctly, will make your web service or application run
better. Joe's httplib2 is shaping up to be the best-of-breed HTTP library
for Python, and in his next article he'll show us some of the hard-core
techie details to using it.

httplib2: HTTP Persistence and Authentication
<http://www.xml.com/pub/a/2006/03/29/httplib2-http-persistence-and-authentication.html>

As always, thanks for reading.

Kendall Clark
kendall@xml.com
Managing Editor, XML.com

=================================================================
O'Reilly's latest PDF, "What Are Syndication Feeds," provides everything
you need to know about the elements that make up a feed, the different
formats (RSS 1.0, RSS 2.0, Atom), and the tools you need to manage
incoming and outgoing feeds.

Buy this PDF for just $7.95 now!
<http://www.oreilly.com/catalog/syndicationfeeds/?CMP=NLC-T5Z960052371&ATT=w11>

=================================================================
------------------------------------------------------------------
Interested in sponsoring the XML.com newsletter? Please email us at
advertising@oreilly.com for rate and availability information.
Thank you!
-----------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
-----------------------------------------------------------------


 

Object-Oriented Data Programming: C# Meets Cache

The Windows DevCenter Newsletter
---------------------------------------------------
The latest from http://www.windowsdevcenter.com

=====================================================================
Open with Confidence.

Join the Affordable Solutions for the Open Enterprise Web seminar series
April 11 and 12, hosted by Novell, Dell, JBoss and MySQL.

Running a successful small business and a cost-efficient edge
infrastructure at the same time isn't easy. But with the right network
edge computing solution, it is possible. Discover Open Enterprise
Solutions at an SMB price that only Dell can offer. Register today at:
http://www.oreilly.com/go/novell_win

=====================================================================

Object-Oriented Data Programming: C# Meets Cache
There are plenty of legacy databases using MUMPS and Cache--but what do
you do when you need to bring them into the modern world? Jesse Liberty
shows you how to bridge the worlds of object-oriented data programming and
old-time databases.
<http://www.windowsdevcenter.com/pub/a/windows/2006/03/28/oop-c-meets-cache.html>

From the Windows DevCenter Blogosphere
Has Microsoft Gotten Too Fat?
The New York Times points out that in the five years since the last
revision of Windows, Apple has released four new versions of its OS,
beating Microsoft with many features such as widgets and desktop search.
Why is Microsoft so slow? Find out in my blog.
<http://www.oreillynet.com/windows/blog/2006/03/has_microsoft_gotten_too_fat.html>

Mac to Run Windows? Huh... Didn't See That One Coming...
Ever since Apple announced Macs would run on Intel hardware, the rumor
mill has been working overtime about what this means. M. David Peterson
tries to track down the truth.
<http://www.oreillynet.com/windows/blog/2006/03/mac_to_run_windows_huh_didnt_s.html>

Microsoft Team Blogs
Microsoft product groups are into blogging in a big way. Mitch Tulloch
provides you with a list of all the "team blogs" he's been able to find on
MSDN and TechNet.
<http://www.oreillynet.com/windows/blog/2006/03/microsoft_team_blogs.html>

Check Out the ASP.NET 2.0 Training Center
As I mentioned last week, O'Reilly, CMP's Dr. Dobbs Journal, and Microsoft
have launched a new site, the ASP.NET 2.0 Training Center, which offers a
comprehensive set of development tools, how-to's, and training to help
programmers master ASP.NET 2.0.
You'll find articles from your favorite O'Reilly authors, such as Jesse
Liberty and others, and articles from Dr. Dobbs Journal. And there is an
excellent webcast series to help you get more out of ASP.NET 2.0 as well.
Sign up for the site's webcast series and you also get more than $400 in
tools and information, including Visual Studio(R) 2005 Standard Edition.
Visit the site at http://aspnet.cmp.com/, sign up for the webcasts, and
get more than $400 in goodies at
<http://www.oreilly.com/go/learn2asp_wdc>

See you next week.
Preston Gralla, editor
WindowsDevCenter.com
pgralla@oreilly.com

=====================================================================
Your Skills Are in Demand. More Skills. More Demand.

Choose from 45 webcasts organized by track--JSP, PHP, and ColdFusion. Each
track has been designed to take advantage of your existing Web development
skills and includes insightful content contributed by Dr. Dobb's and
O'Reilly.

http://www.oreilly.com/go/learn2asp_mak

=====================================================================

*** Top Five Windows and .NET Articles Last Week ***

1. Run Mac OS X on a PC
You can get the best of both worlds--you can run the real Mac OS X on your
own PC. Wei-Meng Lee shows you how to run the Mac operating system on an
emulator called PearPC.

<http://www.windowsdevcenter.com/pub/a/windows/2005/01/18/PearPC.html>

***

2. Windows Server Hacks: Remotely Enable Remote Desktop
What to do when you need to enable Remote Desktop on a remote server?
Mitch Tulloch, author of Windows Server Hacks, walks you through the
steps.

<http://www.windowsdevcenter.com/pub/a/windows/2004/05/04/serverhacks_remote.html>

***

3. Getting Your Bluetooth Headset to Work in XP
With Bluetooth support built into SP2, getting a Bluetooth headset to work
should be a breeze. But it ain't necessarily so. Wei-Meng Lee shows you
how to do it.

<http://www.windowsdevcenter.com/pub/a/windows/2005/07/05/bluetooth.html>

***

4. Enhancing ASP.NET Pages with JavaScript
A sprinkling of JavaScript code can enhance the reach and responsiveness
of your ASP.NET web pages without sacrificing ASP.NET's secure,
server-based model for your coding. Matthew MacDonald, coauthor of ASP.NET
in a Nutshell, 2nd Edition, shows you how to use JavaScript in an ASP.NET
web page to perform three common tasks: showing a pop-up window, changing
control focus, and handling frame navigation. You can use these tricks to
quickly solve problems that have no native .NET solution.

<http://www.ondotnet.com/pub/a/dotnet/2003/09/15/aspnet.html>

***

5. ASP.NET File Uploading
File upload and download are much simpler tasks in ASP.NET than in classic
ASP, thanks to the extensive .NET Framework class library. While file
upload in ASP.NET is as easy as retrieving an HTML form value, file
download is still a bit tricky.

<http://www.ondotnet.com/pub/a/dotnet/2002/04/01/asp.html>

***

---------------------------------------------------------------------
Interested in sponsoring the Windows DevCenter newsletter? Please
email us at advertising@oreilly.com for rate and availability
information. Thank you!
---------------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
---------------------------------------------------------------------


 

Maven 2.0, Dreaming in Java, and Zeroconf gaming

O'REILLY NETWORK'S ONJava.com NEWSLETTER
--------------------------------------------------
The Independent Source for Enterprise Java

==================================================================
Open with Confidence.

Join the Affordable Solutions for the Open Enterprise Web seminar series
April 11 and 12, hosted by Novell, Dell, JBoss and MySQL.

Running a successful small business and a cost-efficient edge
infrastructure at the same time isn't easy. But with the right network
edge computing solution, it is possible. Discover Open Enterprise
Solutions at an SMB price that only Dell can offer. Register today at:
http://www.oreilly.com/go/novell_jav

==================================================================

Greetings--

Most weeks, I use this first part of the newsletter to talk about one or
more of the new articles on the site, but this time, I want to point out
one of our blogs. Robert Cooper, one of our more prolific bloggers (and
that's in addition to his contributions to his "Temple of the Screaming
Penguin" site <http://www.screaming-penguin.com/>), has checked in with a
dense download of arguments, assertions and arcana in his blog entry
"Dreaming in Java." You'll find the link below. Covering everything from
the proposed invokedynamic JVM instruction to integrating XML into the
language to applets vs. Flash to Swing to--well, I could go on for a
while, and I still don't think I'd capture it all. Maybe I can express
the importance of what he calls his "braindump" by saying this: with
development on Java SE 7 ("Dolphin") about to get started, this is exactly
the time for developers to make their voices heard about they're happy and
unhappy about in Java, and what they want Java to be. Waiting to be
shocked, frustrated, or disappointed at the JavaOne 2007 keynote is not
going to do--now is the time to engage the community. Post comments on
blogs like Rob's, write your own blog, kick off an open source project
that does things your way--there are lots of ways to make your voice
heard.

"The hardest part of getting started with a Java application is, well,
getting started. So many logistical decisions have to be made up front.
Where should the Java source files go? Where do I place unit testing?
Where will we store dependency .jars? How will the project be built,
documented, tested, and deployed? The choices made at this stage will
follow a developer for the rest of the project." Chris Hardin suggests
that instead of having to become an expert in all these realms, you can
let Maven do the driving. In "Maven 2.0: Compile, Test, Run, Deploy, and
More," he looks at the new version of this popular project
building/testing/reporting/managing toolkit.

<http://www.onjava.com/pub/a/onjava/2006/03/29/maven-2-0.html>

Following two excerpts that exposed the Java APIs to the
Zeroconf/Bonjour/Rendezvous API, we close out our look at Stuart Cheshire
and Daniel H. Steinberg's "Zero Configuration Networking: The Definitive
Guide" with a thorough code example. "Zero Configuration Networking:
Using the Java APIs, Part 3" features a self-networking tic-tac-toe game,
in which each client advertises itself to the network and discovers
potential opponents. Look past the details of the Xs and Os and this
could be the foundation of any Zeroconf-enabled game or other network
application, written in Java.

<http://www.onjava.com/pub/a/onjava/excerpt/bonjour_ch08/index2.html>

Want to write an instant messenger, voice, or video chat client, or an
internet game? The process begins with the initiation of a "call" between
the participants, and if you want to work with the established standard in
this realm, you'll want to learn SIP. In the dev2dev article "An
Introduction to SIP, Part 1: Meet SIP," Emmanuel Proulx exposes the
anatomy of a SIP call and introduces some of the Java frameworks that work
with SIP, laying the groundwork for a part two that shows off a chat-room
application written with the SIP servlet API.

<http://dev2dev.bea.com/pub/a/2005/09/introduction-sip-part-1.html>

In this week's feature article from java.net, Chet Haase shows off some
"Smooth Moves." "Are you interested in doing some animations in your Java
applications, but find yourself plagued by results that seem stuttery and
choppy? Want to figure out the problems and smooth out those animations to
make them better and more seamless in your application? This article
examines some of the factors that affect animation smoothness and things
that you can do in your code to make your animations look better."

<http://today.java.net/pub/a/today/2006/02/23/smooth-moves-solutions.html>

Recent O'Reilly Network weblogs of interest to Java developers:

Robert Cooper: "Dreaming in Java"
<http://www.oreillynet.com/onjava/blog/2006/03/dreaming_in_java_1.html>

Bill Siggelkow: "A Tale of Two Tools: Maven 2 and StatCVS"
<http://www.oreillynet.com/onjava/blog/2006/03/a_tale_of_two_tools_maven2_and_1.html>

Check out more O'Reilly Network Java weblogs at:
<http://www.oreillynet.com/pub/q/weblog_s?x-subject=3&>

Please join us again next week.

Chris Adamson, Editor
ONJava.com
cadamson@oreilly.com

==================================================================
Your Skills Are in Demand. More Skills. More Demand.

Choose from 45 webcasts organized by track--JSP, PHP, and ColdFusion. Each
track has been designed to take advantage of your existing Web development
skills and includes insightful content contributed by Dr. Dobb's and
O'Reilly.

http://www.oreilly.com/go/learn2asp_jav

==================================================================

*** Java News and Weblogs ***

java.net Weblogs
http://weblogs.java.net/

O'Reilly Network Java Weblogs
http://www.oreillynet.com/pub/q/weblog_s?x-subject=3

Other Java News (channel -- LANG: JAVA)
http://www.oreillynet.com/meerkat/index.php

Java Cookbook Recipe of the Day
http://www.onjava.com/onjava/javacook/solution.csp?day=1

Java Events
http://www.onjava.com/onjava/events/

==================================================================
O'Reilly Learning Special Offer: Save 25% Now
<http://oreillylearning.com/promotion/>

"I would never, and I mean never, have imagined that a computer learning
course would actually be fun too."
-Kerry Beck, PR Specialist

O'Reilly Learning has an exciting year in store! You're invited to join
thousands of satisfied students worldwide who have discovered just how
much fun it can be to gain skills and experience in programming or system
administration with our unique system. And until March 31st, enjoy 25% off
tuition for our online University of Illinois Certificate courses.

Enroll today and make your daily accomplishment:
<https://oreillylearning.com/enroll/>

==================================================================

*** Other Related O'Reilly Network sites ***

O'Reilly Network
http://www.oreillynet.com

XML.com
http://xml.com/

ONLamp.com
http://onlamp.com

O'Reilly Media
http://www.oreilly.com/

O'Reilly Java
http://java.oreilly.com/

***

ONJava.com Affiliates

Servlets.com
http://www.servlets.com/

JDOM.org
http://www.jdom.org/

------------------------------------------------------------------
Interested in sponsoring the ONJava.com newsletter? Please email us
at advertising@oreilly.com for rate and availability information.
Thank you!
------------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
------------------------------------------------------------------


Tuesday, March 28, 2006

 

MAKE NEWS No. 37 -- MAKE Faire, MAKE takes home two web awards!

MAKE NEWS No. 37 -- MAKE Faire, MAKE takes home two web awards!

-----------------------------------------------------------------
Open with Confidence.

Join the Affordable Solutions for the Open Enterprise Web seminar series
April 11 and 12, hosted by Novell, Dell, JBoss and MySQL.

Running a successful small business and a cost-efficient edge
infrastructure at the same time isn't easy. But with the right network
edge computing solution, it is possible. Discover Open Enterprise
Solutions at an SMB price that only Dell can offer. Register today at:
http://www.oreilly.com/go/novell_mak

-----------------------------------------------------------------

March 28, 2006
================
Only a few weeks left before MAKER FAIRE! Join the creators of MAKE
magazine, the MythBusters, Robot magazine, and thousands of tech DIY
enthusiasts, crafters, educators, tinkerers, hobbyists, science clubs,
students, and authors at MAKE's first ever Maker Faire!

Meet all kinds of people who make amazing things in garages, basements,
and backyards for inspiration, know-how, and spirited mischief-making. An
incredible learning experience for the entire family, students of all ages
and their teachers are welcome.

<http://www.makezine.com/faire/>

Featured Makers...
===================

Squid Labs shows off laser cutting work, large-format printing, SmartRope,
and more.

A laser cutter is 45 watts of pure cutting power. It slices, it dices, it
makes French fries 20 different ways! The system can cut two-dimensional
patterns into wood, plastic, paper, foil, chocolate, glass, cake, etc. The
crew at Squid Labs will be engraving their faces into the sides of
pumpkins, making origami, designing microfluidic chips, and anything else
that they happen to come up with while fooling around.

What do you get when you combine the Gutenberg Project's text repository
with a 43" large format printer? A single page book! Come help Squid Labs
and MAKE print out all of "Alice in Wonderland" as a single, wall-spanning
work of art.

Squid Labs has developed a SmartRope technology (a rope that senses
electronically how much it's being pulled on) and will be building a
gigantic harp out of the ropes. You can make music while climbing -- how
hot is that?

One of the best parts of building stuff yourself is sharing what you've
done with the world. Instructables <http://instructables.com> is a
community website where people document what they've made, share their
ideas, and collaborate on building ever-better projects. Squid Labs will
have a large screen showing off some of the best projects and will do some
quick walkthroughs on using the system.

They'll also bring random tools, materials, electronics, equipment, and,
while hanging out, will inevitably start building something. Feel free to
provide advice, support, or inspiration. (Oh yeah, and they'll also have
some really big kites!)

Read more from the program overview:
<http://www.makezine.com/faire/program/>

====
MAKER FAIRE Sponsors:

Lego
Yahoo!
Geek Squad
Microsoft
Hobby Engineering
Robot Magazine

Exhibitors/Media Sponsors:

Amazing Magnets
blurb, Inc.
BoingBoing.net
Cornel Lab of Ornithology
Crafters.org
IFixit
Laughing Squid
Ready Made magazine
Mozes
Parallax, Inc.
treehugger.com

MAKE: Blog
===========
Makezine.com Wins SXSW Web Award and Bloggie!

At the 9th annual South By Southwest Festival Web Awards, makezine.com
took home the award for "Best Educational Resource." At the 6th annual
Weblog Awards, makezine.com took home a "Bloggie" for "Best Craft
Weblog."

We would like to thank all our readers and folks who voted for us! You
like us, you really do!

<http://2006.sxsw.com/interactive/web_awards/winners/>
<http://2006.bloggies.com/>

-----------------------------------------------------------------
Your Skills Are in Demand. More Skills. More Demand.

Choose from 45 webcasts organized by track--JSP, PHP, and ColdFusion. Each
track has been designed to take advantage of your existing Web development
skills and includes insightful content contributed by Dr. Dobb's and
O'Reilly.

http://www.oreilly.com/go/learn2asp_mak

-----------------------------------------------------------------

MAKE Flickr and MAKE del.icio.us
=================================

There are over 880 members of the MAKE Flickr photo pool with over 1,724
photos - and they're doing incredibly weird things.

Here are our faves for the week:

Wood Claw:
<http://www.flickr.com/photos/ocell/116802931/in/pool-make/>

DOOM-Playing LOTTO Machine:
<http://www.flickr.com/photos/command-tab/116979506/in/pool-make/>

Wi-Fi Bunny:
<http://www.flickr.com/photos/pmtorrone/114942817/in/pool-make/>

Final Days of Bracewell Observatory:
<http://www.flickr.com/photos/cyberspace/112754509/in/pool-make/>

RFID:
<http://www.flickr.com/photos/chadvavra/tags/rfid/>

=====

Over on our bookmark page, there are over 3,573 links to hacks, mods, DIY
projects, and all-around tinkering goodness. Be a MAKE voyeur and read
what we're reading:

Roomba Does Frogger Rumba:
<http://news.com.com/2300-1041_3-6049976-5.html?tag=ne.gall.pg>

Roomba Fights!:
<http://www.alternet.org/columnists/story/33526/>

Electrical Engineering Calculators:
<http://www.ifigure.com/engineer/electric/electric.htm>

Pimp My Segway:
<http://www.segwaychat.com/forum/topic.asp?TOPIC_ID=13068>

Mad Hatter's Tea Party:
<http://www.flickr.com/photos/laughingsquid/sets/72057594070949343/>

MAKE, Volume 05!
=================
We're working hard on the next issue of MAKE, but let us not forget the
fabulous MAKE Vol. 05, the first MAKE for 2006! Homemade electric
vehicles, high-powered water rockets, electricity-generating windmill, jet
engine in a jam jar, and a backyard zip line... You need this volume.

<http://www.makezine.com/05/>

Check out this great movie from the water rocket project:
<http://downloads.oreilly.com/make/05/rocket.mov>

Last up, if you're a MAKE subscriber, don't forget that you can log in to
see all of MAKE 05 with MAKE's digital edition.
<http://www.make-digital.com/make/vol05/>

=======

Don't buy what you can make, and don't make what you can find!

*The MAKE Team*

-----------------------------------------------------------------
O'Reilly Learning Special Offer: Save 25% Now
<http://oreillylearning.com/promotion/>

"I would never, and I mean never, have imagined that a computer learning
course would actually be fun too."
-Kerry Beck, PR Specialist

O'Reilly Learning has an exciting year in store! You're invited to join
thousands of satisfied students worldwide who have discovered just how
much fun it can be to gain skills and experience in programming or system
administration with our unique system. And until March 31st, enjoy 25% off
tuition for our online University of Illinois Certificate courses.

Enroll today and make your daily accomplishment:
<https://oreillylearning.com/enroll/>

-----------------------------------------------------------------
Interested in sponsoring the MAKE: newsletter? Please contact Dan Woods
for rate and availability information at 1-800-998-9938 ext.
7068, or email advertise@makezine.com. Thank you!
-----------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
-----------------------------------------------------------------


Monday, March 27, 2006

 

Apple vs. IBM vs. Linux

LINUX NEWS FROM O'REILLY NETWORK
----------------------------------------
The Latest from http://www.linuxdevcenter.com and http://ONLamp.com

=================================================================
Your Skills Are in Demand. More Skills. More Demand.

Choose from 45 webcasts organized by track--JSP, PHP, and ColdFusion. Each
track has been designed to take advantage of your existing Web development
skills and includes insightful content contributed by Dr. Dobb's and
O'Reilly.

http://www.oreilly.com/go/learn2asp_lnx

=================================================================

Welcome readers, to the final Linux newsletter of March 2006. In this
paragraph, your author tries to say something slightly unique and new
every week, while also explaining that "Linux newsletter" is merely easier
to explain than "LAMP." Here's what's new on the related O'Reilly Network
sites this week.

If most reviews of Linux distributions are worth reading (and they really
aren't), installing Linux is within the power of moderately experienced
and patient people these days. That doesn't make said installers experts,
however, and if there's one thing dangerous on the internet, it's people
with lots of power but not wise experience. At least with Linux and other
free Unixes, you can increase your security in well-documented and easily
explained ways. Aaron Brazell gives several simple and effective tips to
secure your new Linux server:

<http://www.linuxdevcenter.com/pub/a/linux/2006/03/23/secure-your-server.html>

Apple's actually migrated to Intel-based processors just as the PS3 is
about to get ready to come out. The Cell processor may resurrect the
PowerPC architecture. The PS3 may be a general-purpose Linux box sold
stealthily as a game device. What does this all mean for Linux? Is Apple
getting pinned between IBM and Linux? What do processor architectures
have to do with operating systems and the future of software? Adrien
Lamothe speculates how Apple's risks might open more doors for truly free
software:

<http://www.onlamp.com/pub/a/onlamp/2006/03/23/apple_vs_everyone.html>

In weblogs this week, brian d foy announces The Perl Review's Spring 2006
issue:

<http://www.oreillynet.com/onlamp/blog/2006/03/the_perl_review_spring_2006_th.html>

Dave Cross finds the expertise of so-called experts lacking:

<http://www.oreillynet.com/onlamp/blog/2006/03/experts.html>

Your editor writes a short overview of the Parrot compiler tools being
written and used for Perl 6:

<http://www.oreillynet.com/onlamp/blog/2006/03/inside_parrots_compiler_tools.html>

Kevin Shockey announces a mini-seminar about using Linux on the desktop:

<http://www.oreillynet.com/onlamp/blog/2006/03/tux_magazine_and_the_abcs_of_d.html>

Jeremy Jones documents the process of upgrading his laptop to Ubuntu
Dapper:

<http://www.oreillynet.com/onlamp/blog/2006/03/upgrading_to_ubuntu_dapper.html>
<http://www.oreillynet.com/onlamp/blog/2006/03/networkmanager_is_now_working.html>
<http://www.oreillynet.com/onlamp/blog/2006/03/high_cpu_utilization_in_dapper.html>

Steve Mallett anticipates the Best of Ruby Quiz book:

<http://www.oreillynet.com/ruby/blog/2006/03/best_of_ruby_quiz_available.html>

Tom Adelstein walks through securely removing a user:

<http://www.oreillynet.com/sysadmin/blog/2006/03/howto_remove_an_user_and_impro.html>

Anton Chuvakin hopes for a standard in the world of audit logging:

<http://www.oreillynet.com/sysadmin/blog/2006/03/audit_logging_standard_a_chanc.html>

That's all for this week. Come back again next week for the start of your
editor's five-part series on designing a truly maintainable programming
language.

No joke,
- c

chromatic
chromatic@oreilly.com
Technical Editor
O'Reilly Network

================================================================
Free on Safari
Quicken 2006 Missing Manual: Setting Up Your Quicken Environment
http://safari.oreilly.com/0596101279/quickenfstmm-CHP-1

After you install Quicken, you're merely a few steps away from
experiencing the joys of electronic personal finance. Chapter 1 of Quicken
2006 for Starters: The Missing Manual helps you come out of the gate
running by guiding you through launching and setting up Quicken as well as
the intricacies of Quicken preferences.

If you like this chapter, read the whole book (and up to nine others) on
Safari with a free trial subscription:
http://oreillynet.com/safari-trial/

================================================================

ONLamp.com and Linux Devcenter Top Five Articles Last Week

1. Apple's High-Water Mark?
Apple's latest moves have impressed observers, but the environment is
about to change drastically, with Apple likely facing its greatest
challenges. Where do the company and its users face competition? IBM,
Sony, and ... Linux? Adrien Lamothe explores the computing landscape of
2006.

<http://www.onlamp.com/pub/a/onlamp/2006/03/23/apple_vs_everyone.html>

***

2. Ajax on Rails
XMLHttpRequest and Ruby on Rails are two hot topics in web development. As
you ought to expect by now, they work really well together. Curt Hibbs
explains the minimal Ajax you need to know and the minimal Ruby you need
to write to Ajax-ify your Rails applications.

<http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html>

***

3. Secure Your Linux Server
Linux is a powerful and popular operating system kernel. That popularity
means you might be running it even if you're not a dedicated Unix
administrator or high-powered programmer. That doesn't mean that
rock-solid security is out of your reach, though. Aaron Brazell shows how
to make Red Hat 9 (and other Linux distributions) much more secure in a
few easy steps.

<http://www.linuxdevcenter.com/pub/a/linux/2006/03/23/secure-your-server.html>

***

4. Fine-Tuning Kubuntu
Ubuntu is a well-maintained, well-organized Linux distribution. Kubuntu
adds the popular and powerful KDE desktop environment. As nice as Kubuntu
is, the default installation doesn't fit every user. Carla Schroder shows
how to get help, get access to more software packages, set up a firewall,
and review and get rid of unnecessary services.

<http://www.linuxdevcenter.com/pub/a/linux/2006/03/09/tuning-kubuntu.html>

***

5. PHP Form Handling
If your PHP program is a dynamic web page (and it probably is) and your
PHP program is dealing with user input (and it probably is), then you need
to work with HTML forms. David Sklar, author of Learning PHP 5, offers
tips for simplifying, securing, and organizing your form-handling PHP
code.

<http://www.onlamp.com/pub/a/php/2004/08/26/PHPformhandling.html>

***
=================================================================
O'Reilly Learning Special Offer: Save 25% Now
<http://oreillylearning.com/promotion/>

"I would never, and I mean never, have imagined that a computer learning
course would actually be fun too."
-Kerry Beck, PR Specialist

O'Reilly Learning has an exciting year in store! You're invited to join
thousands of satisfied students worldwide who have discovered just how
much fun it can be to gain skills and experience in programming or system
administration with our unique system. And until March 31st, enjoy 25% off
tuition for our online University of Illinois Certificate courses.

Enroll today and make your daily accomplishment:
<https://oreillylearning.com/enroll/>

=================================================================
------------------------------------------------------------------
Interested in sponsoring the Linux DevCenter newsletter? Please
email us at advertising@oreilly.com for rate and availability
information. Thank you!
-----------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
-----------------------------------------------------------------


Friday, March 24, 2006

 

Daily Dose of Mac

THE MAC DEVCENTER NEWSLETTER
-------------------------------------------
The latest from http://www.macdevcenter.com/

==================================================================
O'Reilly's latest PDF, "What Are Syndication Feeds," provides everything
you need to know about the elements that make up a feed, the different
formats (RSS 1.0, RSS 2.0, Atom), and the tools you need to manage
incoming and outgoing feeds.

Buy this PDF for just $7.95 now!
<http://www.oreilly.com/catalog/syndicationfeeds/?CMP=NLC-5YS097949027&ATT=w10>

==================================================================

Dear Mac Reader,

Have you been following our webloggers lately? Every day they're
adding clever and fascinating posts to Mac DevCenter. They cover Mac-
o-sphere culture, technology issues, software tricks, and reviews.
Our writers are smart, curious, and pure Mac to the (dual) core. If
you don't have time to stop by the home page, you can subscribe to
their posts via syndication: <http://www.oreillynet.com/pub/feed/3>.

We're still publishing articles too. Our current piece, "Getting
Started with Quartz Composer," by Erica Sadun (also one of our
esteemed webloggers) shows you how to create great animated graphics
with Apple's free developer tool. I had a ball working with this
tutorial, and I think you will too.

You may have noticed, however, that we're only publishing one
article per week right now instead of two. Quite honestly, this is the
result of a budget cut for all of our websites. Fear not! I have a
plan. We're going to start offering PDFs by summer that will have
more depth than our standard articles and will be downloadable for a
very reasonable price. I'll keep you posted as this project takes shape.

In the meantime, I hope you enjoy the daily news, the weblogs, and the
weekly article on Mac DevCenter. If you want to contribute, just drop
me a line.

Until next time,

-Derrick

Derrick Story
O'Reilly Network Editorial Director
derrick@oreilly.com

==================================================================
Free on Safari
Quicken 2006 Missing Manual: Setting Up Your Quicken Environment
http://safari.oreilly.com/0596101279/quickenfstmm-CHP-1

After you install Quicken, you're merely a few steps away from
experiencing the joys of electronic personal finance. Chapter 1 of Quicken
2006 for Starters: The Missing Manual helps you come out of the gate
running by guiding you through launching and setting up Quicken as well as
the intricacies of Quicken preferences.

If you like this chapter, read the whole book (and up to nine others) on
Safari with a free trial subscription:
http://oreillynet.com/safari-trial/

==================================================================

*** Featured Articles ***

Getting Started with Quartz Composer
Apple's free developer tool collection contains many overlooked gems. These aren't limited to programming-specific utilities. Take Quartz Composer, for example. It's a free utility that can bring new life and interest to your iMovie projects. In this article, you'll learn how to use your own pictures to create a simple but flashy animation.

<http://www.macdevcenter.com/pub/a/mac/2006/03/23/quartz-composer.html>

***

Digital Bookmark Mods
Matthew Russell shows you how to add better bookmarks to your audio books,
add slideshows to your music files, create enhanced podcasts, and share
your favorite mods with others--even if they're on protected audio.

<http://www.macdevcenter.com/pub/a/mac/2006/03/15/digital-bookmarks-mod.html>

***

Mac OS X Website Builder Face-Off
You may be a web expert, but surely everyone you know isn't. What tools do
you recommend to others? And, what would you use for those quick sites
that you don't want to code from scratch? Giles Turnbull compares three
potent offerings: iWeb, Sandvox, and RapidWeaver. The results are
surprising.

<http://www.macdevcenter.com/pub/a/mac/2006/03/08/web_builder.html>

***

*** Mac Devcenter Top Five Articles Last Week ***

1. Mac OS X Website Builder Face-Off
You may be a web expert, but surely everyone you know isn't. What tools do
you recommend to others? And, what would you use for those quick sites
that you don't want to code from scratch? Giles Turnbull compares three
potent offerings: iWeb, Sandvox, and RapidWeaver. The results are
surprising.

<http://www.macdevcenter.com/pub/a/mac/2006/03/08/web_builder.html>

***

2. iPod shuffle Tips and Tricks
The iPod shuffle is the easiest-to-use iPod to date. But that doesn't mean
you can't customize how you listen and upload music. Scott Knaster shows
you some very handy tips and tricks for the shuffle and iTunes 4.7.1.

<http://www.macdevcenter.com/pub/a/mac/2005/02/15/shuffle.html>

***

3. Getting the Video out of Your New iPod--for Cheap!
Yes, you can spend extra dollars for Apple's sleek white video cable for
TV connectivity, or you can hack your own together for cheap. Erica Sadun
shows you how.

<http://www.macdevcenter.com/pub/a/mac/2005/11/18/video-ipod.html>

***

4. Connecting Mac OS X to Windows PCs
A hands-on look at how you can share files between your Mac and your
Windows machines, then explore how Windows applications can be run on your
Mac

<http://www.macdevcenter.com/pub/a/mac/2002/11/19/mac_pc.html>

***

5. Top Ten Digital Photography Tips
You have a digital camera and have taken the typical shots of family and
friends. Now what? Here are ten tips to make your next batch of digital
images so impressive that people will ask: "Hey, what type of camera do
you have?" Guess what? It's not the camera.

<http://www.macdevcenter.com/pub/a/mac/2002/10/22/digi_photo_tips.html>

***
==================================================================
O'Reilly Learning Special Offer: Save 25% Now
<http://oreillylearning.com/promotion/>

"I would never, and I mean never, have imagined that a computer learning
course would actually be fun too."
-Kerry Beck, PR Specialist

O'Reilly Learning has an exciting year in store! You're invited to join
thousands of satisfied students worldwide who have discovered just how
much fun it can be to gain skills and experience in programming or system
administration with our unique system. And until March 31st, enjoy 25% off
tuition for our online University of Illinois Certificate courses.

Enroll today and make your daily accomplishment:
<https://oreillylearning.com/enroll/>

==================================================================
------------------------------------------------------------------
Interested in sponsoring the Mac DevCenter newsletter? Please email
us at advertising@oreilly.com for rate and availability information.
Thank you!
---------------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
---------------------------------------------------------------------


Thursday, March 23, 2006

 

Spring Configuration and Zero Configuration

O'REILLY NETWORK'S ONJava.com NEWSLETTER
--------------------------------------------------
The Independent Source for Enterprise Java

==================================================================
FREE Cross Training For Web Developers

FREE training webcasts, software, and how to's from Dr. Dobb's, O'Reilly
Media, and Microsoft. Choose from more than 40 webcasts, and see if you're
eligible to receive a FREE copy of Visual Studio Standard (NFR).
Complimentary copies of Visual Studio Standard (NFR) are limited, so act
today! http://www.oreilly.com/go/learn2asp_jav

==================================================================

Greetings--

Isn't sharing configuration files with source control great? I think I
was pretty much over this concept the first time I checked out a project
and it created a directory called "C:" on my Mac. And that's just
location. Source control is great for capturing the structure of config
files, but in all likelihood, it's a bad way to attend to the contents,
since the point of a config file is to put different values in for
different situations. So what do you do? Put in dummy data? Write a
heroic shell script or Ant task that tries to fix everything for you?
This week's first article takes a look at this very common problem from
the Spring space, and advocates a solution.

Developer box, integration box, production box. They'll all need the same
Spring configuration files, but with profoundly different values for most,
if not all, of the items to be configured. Merely annoying for
hand-editing name-value pairs, this becomes a real problem if you choose
to vary your bean wiring between deployments. In "Advanced Configuration
of the Spring MVC Framework," Dejan Bosanac shows how to synchronize bean
properties and wirings to get yourself out of this mess.

<http://www.onjava.com/pub/a/onjava/2006/03/22/advanced-spring-configuration.html>

Continuing with an excerpt from "Zero Configuration Networking, The
Definitive Guide," Stuart Cheshire and Daniel H. Steinberg move to the
client side in "Zero Configuration Networking: Using the Java APIs, Part
2." They show how to browse for and resolve services with Java, and how
to register a service with DNS TXT attributes.

<http://www.onjava.com/pub/a/onjava/excerpt/bonjour_ch08/index1.html>

"It sometimes seems like widely popular web-standards innovation halted
around 2000, and the last few years have been a period of very slow
catch-up. Various visions of a new Web, a better Web, have come and gone,
leaving behind useful parts but not yet transforming the Web. Are we on
the edge of the next big thing? It may make sense to look at the last few
big things, comparing their visions with what's happening today." In the
xml.com article "The Next Web?" Simon St. Laurent traces the promises and
progress of various "Next Big Thing" contenders: the XML Web, the Semantic
Web, the Services Web, the Next XHTML, and AJAX.

<http://www.xml.com/pub/a/2006/03/15/next-web-xhtml2-ajax.html>

In a feature article from java.net, Joshua Marinacci looks at "Building
GUIs with SwiXml." "In recent years, many developers have decided that it
is a good practice to separate the GUI layout from event handling and
program logic. This keeps the program logic cleaner and allows the layout
to be maintained separately, often by a different developer. Some have
gone a step further to specify layout in a language other than Java. These
days, the natural choice for any new language is of course XML, and a
quick internet search for 'java xml gui layout' will return many
commercial and open source layout products. One of the best is SwiXml, a
tiny but powerful library that transforms simple XML descriptions into
attractive user interfaces."

<http://today.java.net/pub/a/today/2006/02/21/building-guis-with-swixml.html>

Recent O'Reilly Network weblogs of interest to Java developers:

Dejan Bosanac: "Apache XML-RPC Adapter for Spring"
<http://www.oreillynet.com/onjava/blog/2006/03/apache_xmlrpc_adapter_for_spri.html>

Robert Cooper: "This Week in Java"
<http://www.oreillynet.com/onjava/blog/2006/03/this_week_in_java.html>

Check out more O'Reilly Network Java weblogs at:
<http://www.oreillynet.com/pub/q/weblog_s?x-subject=3&>

Please join us again next week.

Chris Adamson, Editor
ONJava.com
cadamson@oreilly.com

==================================================================
Free on Safari
Quicken 2006 Missing Manual: Setting Up Your Quicken Environment
http://safari.oreilly.com/0596101279/quickenfstmm-CHP-1

After you install Quicken, you're merely a few steps away from
experiencing the joys of electronic personal finance. Chapter 1 of Quicken
2006 for Starters: The Missing Manual helps you come out of the gate
running by guiding you through launching and setting up Quicken as well as
the intricacies of Quicken preferences.

If you like this chapter, read the whole book (and up to nine others) on
Safari with a free trial subscription:
http://oreillynet.com/safari-trial/

==================================================================

*** Java News and Weblogs ***

java.net Weblogs
http://weblogs.java.net/

O'Reilly Network Java Weblogs
http://www.oreillynet.com/pub/q/weblog_s?x-subject=3

Other Java News (channel -- LANG: JAVA)
http://www.oreillynet.com/meerkat/index.php

Java Cookbook Recipe of the Day
http://www.onjava.com/onjava/javacook/solution.csp?day=1

Java Events
http://www.onjava.com/onjava/events/

==================================================================
O'Reilly Learning Special Offer: Save 25% Now
<http://oreillylearning.com/promotion/>

"I would never, and I mean never, have imagined that a computer learning
course would actually be fun too."
-Kerry Beck, PR Specialist

O'Reilly Learning has an exciting year in store! You're invited to join
thousands of satisfied students worldwide who have discovered just how
much fun it can be to gain skills and experience in programming or system
administration with our unique system. And until March 31st, enjoy 25% off
tuition for our online University of Illinois Certificate courses.

Enroll today and make your daily accomplishment:
<https://oreillylearning.com/enroll/>

==================================================================

*** Other Related O'Reilly Network sites ***

O'Reilly Network
http://www.oreillynet.com

XML.com
http://xml.com/

ONLamp.com
http://onlamp.com

O'Reilly Media
http://www.oreilly.com/

O'Reilly Java
http://java.oreilly.com/

***

ONJava.com Affiliates

Servlets.com
http://www.servlets.com/

JDOM.org
http://www.jdom.org/

------------------------------------------------------------------
Interested in sponsoring the ONJava.com newsletter? Please email us
at advertising@oreilly.com for rate and availability information.
Thank you!
------------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
------------------------------------------------------------------


 

RSS Feeds for FTP Servers

XML.com Xtra!
---------------------------------
The Email for XML.com Subscribers

=================================================================
FREE Cross Training For Web Developers

FREE training webcasts, software, and how to's from Dr. Dobb's, O'Reilly
Media, and Microsoft. Choose from more than 40 webcasts, and see if you're
eligible to receive a FREE copy of Visual Studio Standard (NFR).

Complimentary copies of Visual Studio Standard (NFR) are limited, so act
today! http://www.oreilly.com/go/learn2asp_xml

=================================================================

Dear Reader,

Welcome to another issue of XML.com.

This week, Mark Woodman returns with an interesting PHP library for adding
RSS feeds to an FTP site. FTP is still an important part of the internet
infrastructure, and having RSS feeds for your favorite FTP site is going
to make life a lot easier.

"RSS Feeds for FTP Servers"
<http://www.xml.com/pub/a/2006/03/22/rss-feeds-for-ftp-servers.html>

Also worth reading:

"Why XForms Matter, Revisited"
<http://www.oreillynet.com/xml/blog/2006/03/why_xforms_matter_revisited.html>

As always, thanks for reading.

Kendall Clark
kendall@xml.com
Managing editor, XML.com

=================================================================
O'Reilly's latest PDF, "What Are Syndication Feeds," provides everything
you need to know about the elements that make up a feed, the different
formats (RSS 1.0, RSS 2.0, Atom), and the tools you need to manage
incoming and outgoing feeds.

Buy this PDF for just $7.95 now!
<http://www.oreilly.com/catalog/syndicationfeeds/?CMP=NLC-T5Z960052371&ATT=w10>

=================================================================

*** XML News from the XML Cover Pages by Robin Cover ***

WS-Transfer, WS-Eventing, and WS-Enumeration Specifications Submitted to W3C

For more information on any of these stories visit:
http://www.xml.com/pub/a/coverpage/newspage.html

***

=================================================================
O'Reilly Learning Special Offer: Save 25% Now
<http://oreillylearning.com/promotion/>

"I would never, and I mean never, have imagined that a computer learning
course would actually be fun too."
-Kerry Beck, PR Specialist

O'Reilly Learning has an exciting year in store! You're invited to join
thousands of satisfied students worldwide who have discovered just how
much fun it can be to gain skills and experience in programming or system
administration with our unique system. And until March 31st, enjoy 25% off
tuition for our online University of Illinois Certificate courses.

Enroll today and make your daily accomplishment:
<https://oreillylearning.com/enroll/>

=================================================================
------------------------------------------------------------------
Interested in sponsoring the XML.com newsletter? Please email us at
advertising@oreilly.com for rate and availability information.
Thank you!
-----------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
-----------------------------------------------------------------


 

Using the MultiView and Wizard Controls in ASP.NET 2.0

The Windows DevCenter Newsletter
---------------------------------------------------
The latest from http://www.windowsdevcenter.com

=====================================================================
Your Skills Are in Demand. More Skills. More Demand.

Choose from 45 webcasts organized by track--JSP, PHP, and ColdFusion.
Each track has been designed to take advantage of your existing Web
development skills and includes insightful content contributed by
Dr. Dobb's and O'Reilly.

http://www.oreilly.com/go/learn2asp_wdc

=====================================================================

Using the MultiView and Wizard Controls in ASP.NET 2.0
If you need to collect data from web pages, you need help, especially if
you want to create multiple pages for the task. But ASP.NET 2.0 makes it
easy with the use of MultiView and Wizard controls. Wei-Meng Lee shows you
how to take advantage of them.
<http://www.windowsdevcenter.com/pub/a/windows/2006/03/21/multiview-and-wizard-controls-in-aspnet-20.html>

From the Windows DevCenter Blogosphere
Vista Delay: Why Can't Microsoft Get Its Act Together?
Microsoft's announcement today that the consumer version of Vista won't be
ready until January 2007 is one of the more shocking pieces of news to
come out of Redmond in recent years. What's going on? Check out my blog
for details.
<http://www.oreillynet.com/windows/blog/2006/03/vista_delay_why_cant_microsoft.html>

Best Practices Analyzer Tools
Microsoft recently released a Best Practices Analyzer Tool (BPAT) for its
ISA Server 2004 product. This BPAT can be used to check the health of your
ISA server to make sure it's configured properly according to Microsoft
best practices. Mitch Tulloch has details.
<http://www.oreillynet.com/windows/blog/2006/03/best_practices_analyzer_tools.html>

From C# to VB.NET to Boo and Back, in Three Easy Steps
In a recent Amazon Developers Forum post, there was a question regarding
the availability of an S3 VB.NET Sample. There is an extremely easy way to
go from C# (a C# REST and SOAP sample was provided by the Amazon folks) to
VB.NET and/or Boo and back. M. David Peterson fills you in.
<http://www.oreillynet.com/windows/blog/2006/03/from_c_to_vbnet_to_boo_and_bac.html>

Check Out the ASP.NET 2.0 Training Center
As I mentioned last week, O'Reilly, CMP's Dr. Dobbs Journal, and Microsoft
have launched a new site, the ASP.NET 2.0 Training Center, which offers a
comprehensive set of development tools, how-to's, and training to help
programmers master ASP.NET 2.0.

You'll find articles from your favorite O'Reilly authors, such as Jesse
Liberty and others, and articles from Dr. Dobbs Journal. And there is an
excellent webcast series to help you get more out of ASP.NET 2.0 as well.
Sign up for the site's webcast series and you also get more than $400 in
tools and information, including Visual Studio(R) 2005 Standard Edition.

Visit the site at <http://aspnet.cmp.com/>, sign up for the webcasts, and
get more than $400 in goodies at
<https://www.learn2asp.net/CMP/Default.aspx>

See you next week.

Preston Gralla, editor
WindowsDevCenter.com
pgralla@oreilly.com

=====================================================================
O'Reilly's latest PDF, "What Are Syndication Feeds," provides everything
you need to know about the elements that make up a feed, the different
formats (RSS 1.0, RSS 2.0, Atom), and the tools you need to manage
incoming and outgoing feeds.

Buy this PDF for just $7.95 now!
<http://www.oreilly.com/catalog/syndicationfeeds/?CMP=NLC-UW7102220707&ATT=w10>

=====================================================================

*** Top Five Windows and .NET Articles Last Week ***

1. Run Mac OS X on a PC
You can get the best of both worlds--you can run the real Mac OS X on your
own PC. Wei-Meng Lee shows you how to run the Mac operating system on an
emulator called PearPC.

<http://www.windowsdevcenter.com/pub/a/windows/2005/01/18/PearPC.html>

***

2. Windows Server Hacks: Remotely Enable Remote Desktop
What to do when you need to enable Remote Desktop on a remote server?
Mitch Tulloch, author of Windows Server Hacks, walks you through the
steps.

<http://www.windowsdevcenter.com/pub/a/windows/2004/05/04/serverhacks_remote.html>

***

3. Getting Your Bluetooth Headset to Work in XP
With Bluetooth support built into SP2, getting a Bluetooth headset to work
should be a breeze. But it ain't necessarily so. Wei-Meng Lee shows you
how to do it.

<http://www.windowsdevcenter.com/pub/a/windows/2005/07/05/bluetooth.html>

***

4. Enhancing ASP.NET Pages with JavaScript
A sprinkling of JavaScript code can enhance the reach and responsiveness
of your ASP.NET web pages without sacrificing ASP.NET's secure,
server-based model for your coding. Matthew MacDonald, coauthor of ASP.NET
in a Nutshell, 2nd Edition, shows you how to use JavaScript in an ASP.NET
web page to perform three common tasks: showing a pop-up window, changing
control focus, and handling frame navigation. You can use these tricks to
quickly solve problems that have no native .NET solution.

<http://www.ondotnet.com/pub/a/dotnet/2003/09/15/aspnet.html>

***

5. ASP.NET File Uploading
File upload and download are much simpler tasks in ASP.NET than in classic
ASP, thanks to the extensive .NET Framework class library. While file
upload in ASP.NET is as easy as retrieving an HTML form value, file
download is still a bit tricky.

<http://www.ondotnet.com/pub/a/dotnet/2002/04/01/asp.html>

***

---------------------------------------------------------------------
Interested in sponsoring the Windows DevCenter newsletter? Please
email us at advertising@oreilly.com for rate and availability
information. Thank you!
---------------------------------------------------------------------
To change your newsletter subscription options, please visit
http://www.oreillynet.com/cs/nl/home

For assistance, email help@oreillynet.com

O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(707) 827-7000
---------------------------------------------------------------------


Wednesday, March 22, 2006

 

Algorithms Explained By Ankit Fadia

Encryption has become a part and parcel of our lives and we have accepted the fact that data is going to encrypted and decrypted at various stages. However, there is not a single encryption algorithm followed everywhere. There are a number of algorithms existing, and I feel there is a need to understand how they work. So this text explains a number of popular encryption algorithms and makes you look at them as mathematical formulas.

Data Encryption Standard or DES

The U.S government in 1977 adopted the Data Encryption Standard (DES) algorithm. According to it’s developer the DES algorithm is:

“ It is a block cipher system which transforms 64-bit data blocks under a 56-bit secret key under a 56-bit secret key, by means of permutation and substitution.”

Now, this tutorial will guide you through the various steps of the DES encryption algorithm making you more confident in dealing with DES encryption.

The following is a step by step guide to the DES algorithm, which was originally written by Matthew Fischer and has been edited by me-:

1.) Firstly, we need to process the key.

1.1 Get a 64-bit key from the user. (Every 8th bit is considered a parity bit. For a key to have correct parity, each byte should contain an odd number of "1" bits.)

1.2 Calculate the key schedule.

1.2.1 Perform the following permutation on the 64-bit key. (The parity bits are discarded, reducing the key to 56 bits. Bit 1 of the permuted block is bit 57 of the original key, bit 2 is bit 49, and so on with bit
56 being bit 4 of the original key.)

Permuted Choice 1 (PC-1)

57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

1.2.2 Split the permuted key into two halves. The first 28 bits are called C[0] and the last 28 bits are called D[0].

1.2.3 Calculate the 16 subkeys. Start with i = 1.

1.2.3.1 Perform one or two circular left shifts on both C[i-1] and D[i-1] to get C[i] and D[i], respectively. The number of shifts per iteration are given in the table below.

Iteration # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Left Shifts 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

1.2.3.2 Permute the concatenation C[i]D[i] as indicated below. This will yield K[i], which is 48 bits long.

Permuted Choice 2 (PC-2)

14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

1.2.3.3 Loop back to 1.2.3.1 until K[16] has been calculated.

2 Process a 64-bit data block.

2.1 Get a 64-bit data block. If the block is shorter than 64 bits, it should be padded as appropriate for the application.

2.2 Perform the following permutation on the data block.

Initial Permutation (IP)

58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

2.3 Split the block into two halves. The first 32 bits are called L[0], and the last 32 bits are called R[0].

2.4 Apply the 16 subkeys to the data block. Start with i = 1.

2.4.1 Expand the 32-bit R[i-1] into 48 bits according to the bit-selection function below.

Expansion (E)

32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1

2.4.2 Exclusive-or E(R[i-1]) with K[i].

2.4.3 Break E(R[i-1]) xor K[i] into eight 6-bit blocks. Bits 1-6 are B[1], bits 7-12 are B[2], and so on with bits 43-48 being B[8].

2.4.4 Substitute the values found in the S-boxes for all B[j]. Start with j = 1. All values in the S-boxes should be considered 4 bits wide.

2.4.4.1 Take the 1st and 6th bits of B[j] together as a 2-bit value (call it m) indicating the row in S[j] to look in for the substitution.

2.4.4.2 Take the 2nd through 5th bits of B[j] together as a 4-bit value (call it n) indicating the column in S[j] to find the substitution.

2.4.4.3 Replace B[j] with S[j][m][n].

Substitution Box 1 (S[1])

14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

S[2]

15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

S[3]

10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

S[4]

7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

S[5]

2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

S[6]

12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

S[7]

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

S[8]

13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

2.4.4.4 Loop back to 2.4.4.1 until all 8 blocks have been replaced.

2.4.5 Permute the concatenation of B[1] through B[8] as indicated below.

Permutation P

16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25

2.4.6 Exclusive-or the resulting value with L[i-1]. Thus, all together, your R[i] = L[i-1] xor P(S[1](B[1])...S[8](B[8])), where B[j] is a 6-bit block of E(R[i-1]) xor K[i]. (The function for R[i] is written as, R[i] = L[i-1] xor f(R[i-1], K[i]).)

2.4.7 L[i] = R[i-1].

2.4.8 Loop back to 2.4.1 until K[16] has been applied.

2.5 Perform the following permutation on the block R[16]L[16].

Final Permutation (IP**-1)

40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25


This has been a description of how to use the DES algorithm to encrypt one 64-bit block. To decrypt, use the same process, but just use the keys K[i] in reverse order. That is, instead of applying K[1] for the first
iteration, apply K[16], and then K[15] for the second, on down to K[1].

Summaries:

Key schedule:
C[0]D[0] = PC1(key)
for 1 <= i <= 16
C[i] = LS[i](C[i-1])
D[i] = LS[i](D[i-1])
K[i] = PC2(C[i]D[i])

Encipherment:
L[0]R[0] = IP(plain block)
for 1 <= i <= 16
L[i] = R[i-1]
R[i] = L[i-1] xor f(R[i-1], K[i])
cipher block = FP(R[16]L[16])

Decipherment:
R[16]L[16] = IP(cipher block)
for 1 <= i <= 16
R[i-1] = L[i]
L[i-1] = R[i] xor f(L[i], K[i])
plain block = FP(L[0]R[0])


To encrypt or decrypt more than 64 bits there are four official modes (defined in FIPS PUB 81). One is to go through the above-described process for each block in succession. This is called Electronic Codebook
(ECB) mode. A stronger method is to exclusive-or each plaintext block with the preceding ciphertext block prior to encryption. (The first block is exclusive-or'ed with a secret 64-bit initialization vector (IV).) This is called Cipher Block Chaining (CBC) mode. The other two modes are Output Feedback (OFB) and Cipher Feedback (CFB).

When it comes to padding the data block, there are several options. One is to simply append zeros. Two suggested by FIPS PUB 81 are, if the data is binary data, fill up the block with bits that are the opposite of the last bit of data, or, if the data is ASCII data, fill up the block with random bytes and put the ASCII character for the number of pad bytes in the last byte of the block. Another technique is to pad the block with random bytes and in the last 3 bits store the original number of data bytes.

The DES algorithm can also be used to calculate checksums up to 64 bits long (see FIPS PUB 113). If the number of data bits to be check summed is not a multiple of 64, the last data block should be padded with zeros. If the data is ASCII data, the first bit of each byte should be set to 0. The data is then encrypted in CBC mode with IV = 0. The leftmost n bits (where 16 <= n <= 64, and n is a multiple of 8) of the final ciphertext block are an n-bit checksum.

Wow, that was one heck of a paper on DES. That would be all you need to
implement DES. Well, if you still have not understood how the DES algorithm is
implemented, then I suggest you go through the following C program:

#include

static int keyout[17][48];

void des_init(),lshift(),cypher(),des_encrypt(),des_descrypt();

void des_init(unsigned char *key){
unsigned char c[28],d[28];
static int pc1[56] = {57,49,41,33,25,17,9,
01,58,50,42,34,26,18,
10,02,59,51,43,35,27,
19,11,03,60,52,44,36,
63,55,47,39,31,23,15,
07,62,54,46,38,30,22,
14,06,61,53,45,37,29,
21,13,05,28,20,12,04};
static int pc2[48] = {14,17,11,24,1,5,
3,28,15,6,21,10,
23,19,12,4,26,8,
16,7,27,20,13,2,
41,52,31,37,47,55,
30,40,51,45,33,48,
44,49,39,56,34,53,
46,42,50,36,29,32};
static int nls[17] = {
0,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

static int cd[56],keyb[64];
static int cnt,n=0;
register int i,j;

for(i=0;i<8;i++) /*Read in key*/
for(j=0;j<8;j++) keyb[n++]=(key[i]>>j&0x01);

for(i=0;i<56;i++) /*Permuted choice 1*/
cd[i]=keyb[pc1[1]-1];
for(i=0;i<28;i++){
c[i]=cd[i];
d[i]=cd[i+28];
}
for(cnt=1;cnt<=16;cnt++){
for(i=0;i lshift(c); lshift(d);
}
for(i=0;i<28;i++){
cd[i]=c[i];
cd[i+28]=d[i];
}
for(i=0;i<48;i++) /*Permuted Choice 2*/
keyout[cnt][i]=cd[pc2[i]-1];
}
}

static void lshift(unsigned char shft[]){
register int temp,i;

temp=shft[0];
for(i=0;i<27;i++) shft[i]=shft[i+1];
shft[27]=temp;
}

static void cypher(int *r, int cnt, int *fout){
static int expand[48],b[8][6],sout[8],pin[48];
register int i,j;
static int n,row,col,scnt;
static int p[32]={
16,7,20,21,29,12,28,17,1,15,23,26,
5,18,31,10,2,8,24,14,32,27,3,9,
19,13,30,6,22,11,4,25};

static int e[48] = {32,1,2,3,4,5,
4,5,6,7,8,9,
8,9,10,11,12,13,
12,13,14,15,16,17,
16,17,18,19,20,21,
20,21,22,23,24,25,
24,25,26,27,28,29,
28,29,30,31,32,1};

static char s[8][64] = {
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, /*s1*/
0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, /*s2*/
3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, /*s3*/
13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,/*s4*/
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,/*s5*/
14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, /*s6*/
10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,/*s7*/
13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, /*s8*/
1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
};

for(i=0;i<48;i++) expand[i]=r[e[i]-1]; /*Expansion Function*/
for(i=n=0;i<8;i++) {
for(j=0;j<6;j++,n++) b[i][j]=expand[n]^keyout[cnt][n];
}

/*Selection functions*/

for(scnt=n=0;scnt<8;scnt++){
row=(b[scnt][0]<<1)+b[scnt][5];
col=(b[scnt][1]<<3)+(b[scnt][2]<<2)+(b[scnt][3]<<1)+b[scnt][4];
sout[scnt]=s[scnt][(row<<4)+col];
for(i=3;i>=0;i--){
pin[n]=sout[scnt]>>i;
sout[scnt]=sout[scnt]-(pin[n++]< }
}
for(i=0;i<32;i++) fout[i]=pin[p[i]-1]; /*Permutation Function*/
}

static int p[64] = {58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
5 = {58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7};

static int invp[64]={
40, 8,48,16,56,24,64,32,39, 7,47,15,55,23,63,31,
38, 6,46,14,54,22,62,30,37, 5,45,13,53,21,61,29,
36, 4,44,12,52,20,60,28,35, 3,43,11,51,19,59,27,
34, 2,42,10,50,18,58,26,33, 1,41, 9,49,17,57,25};

void des_encrypt(unsigned char *input){
static unsigned char out[64];
static int inputb[64],lr[64],l[32],r[32];
static int fn[32];
static int cnt,n;
register int i,j;

for(i=n=0;i<8;i++)
for(j=0;j<8;j++) inputb[n++]=(input[i]>>j&0x01);

for(i=0;i<64;i++){ /*Initial Permutation*/
lr[i]=inputb[p[i]-1];
if(i<32) l[i]=lr[i];
else r[i-32]=lr[i];
}
for(cnt=1;cnt<=16;cnt++){ /*Main encryption loop*/
cypher(r,cnt,fn);
for(i=0;i<32;i++){
j=r[i];
r[i]=l[i]^fn[i];
l[i]=j;
}
}
for(i=0;i<32;i++){
lr[i]=r[i];
lr[i+32]=l[i];
}
for(i=0;i<64;i++) out[i]=lr[invp[i]-1]; /*Inverse IP*/

for(i=1;i<=8;i++)
for(j=1;j<=8;j++) input[i-1]=(input[i-1]<<1)|out[i*8-j];
}

void des_decrypt(unsigned char *input){
static unsigned char out[64];
static int inputb[64],lr[64],l[32],r[32];
static int fn[32];
static int cnt,rtemp,n;
register int i,j;

for(i=n=0;i<8;i++)
for(j=0;j<8;j++) inputb[n++]=(input[i]>>j&0x01);
for(i=0;i<64;i++){ /*Initial Permutation*/
lr[i]=inputb[p[i]-1];
if(i<32) l[i]=lr[i];
else r[i-32]=lr[i];
}
for(cnt=16;cnt>0;cnt--){ /*Main decryption loop*/
cypher(r,cnt,fn);
for(i=0;i<32;i++){
rtemp=r[i];
if(l[i]==1 && fn[i]==1) r[i]=0;
else r[i]=(l[i] || fn[i]);
l[i]=rtemp;
}
}
for(i=0;i<32;i++){
lr[i]=r[i];
lr[i+32]=l[i];
}
for(i=0;i<64;i++) out[i]=lr[invp[i]-1]; /*Inverse IP*/

for(i=1;i<=8;i++)
for(j=1;j<=8;j++) input[i-1]=(input[i-1]<<1) | out[i*8-j];
}
int main(int argc, char *argv[]){
unsigned char *key;
unsigned char data[8];
int n;
FILE *in;
FILE *out;

if (argc!=4) {
printf("\r\nUsage: des [e][d] \r\n");
return 1;
}

key=(unsigned char*)getpass("Enter Key:");
des_init(key);

if((in=fopen(argv[2],"rb"))==NULL){
fprintf(stderr,"\r\nCould not open input file: %s",argv[2]);
return 2;
}

if((out=fopen(argv[3],"wb"))==NULL){
fprintf(stderr,"\r\nCould not open output file: %s",argv[3]);
return 3;
}

if(argv[1][0]=='e'){
while ((n=fread(data,1,8,in)) >0){
des_encrypt(data);
printf("data enctyted");
if(fwrite(data,1,8,out) < 8){
fprintf(stderr,"\r\nError writing to output file\r\n");
return(3);
}
}
}

if(argv[1][0]=='d'){
while ((n=fread(data,1,8,in)) >0){
des_decrypt(data);
if(fwrite(data,1,8,out) < 8){
fprintf(stderr,"\r\nError writing to output file\r\n");
return(3);
}
}
}

fclose(in); fclose(out);
return 0;
}ntf(stderr,"\r\nError writing to output file\r\n");
return(3);
}
}
}
fclose(in); fclose(out);
return 0;
}

The RSA Encryption Algorithm

RSA is one of the most popular encryption algorithms around. It was invented in
1977 by three MIT scientists; Ronald Rivest, Adi Shamir and Leonard Adelman.
This algorithm uses very very large prime numbers to generate public and private
keys. For more details about the implementation of the RSA algorithm, read on.

The entire RSA algorithm is based on the concept of factoring. Factoring is
very easy to calculate i.e. an algorithm based on factoring can easily be
carried out, however, the strength of an algorithm based on factoring lies in
the fact that factoring is quite difficult to reverse. So, encrypting data using
a factoring algorithm can be done without much of a problem, however to decrypt
or crack an algorithm using a factoring algorithm is not that easy.

Say you have two numbers x and y. Now it is relatively easier to find out the
final numbers when they are multiplied by a number N, however on the other hand,
if only N is know to us, then it is not easy to calculate x and y. On top of
this in RSA, N is very large number. This makes the calculation all the more
difficult. RSA uses factors of around 150 digits, making it not only impossible
for manual calculation but also making sure that the RSA encryption cannot be
cracked within a feasible amount of time.

In case of the encryption process, as RSA is a block encryption algorithm, the
entire data is broken into blocks and each block is treated as a sequence of
bits, with the number of digits being just a little less than N. Each block is
considered as a single digit, and multiplied ‘e’ number of times by itself, [In
the case of PGP, e is normally 17]. The result thus obtained, is divided by N
and the remainder obtained is the final encrypted message.

In case of the decryption process, the recipient, makes use of another special
number; ‘k’ where (ke-1) is divisible by (p-1)(q-1). The value k is chosen such
that multiplying the encrypted message k times by itself and then dividing by N,
gives the original message as the remainder. So basically to find out k, p and q
should be known.

e and N constitute the public key which can be freely distributed, while k forms
the private key, which should be kept a secret.

Note: In this case, e and k and symmetric.

To understand the working of the RSA algorithm, study the following Perl program
which implements it.

#!/usr/local/bin/perl -s-- #export-a-crypto-system sig, RSA in 4 lines PERL:
#
# -d (decrypt)
# or -e (encrypt)
#
# $k is exponent, $n is modulus; $k and $n in hex
#
# use of -s was contributed by Jeff Friedl, a cool perl hacker
#
# the $e-$d (grok that? awesome hack by Jeff also) checks for -d or -e:
#
# when perl -s sets $x for -x so that means $d is set for -d, $e for -e
# if they are both set 1-1 = 0 so it fails if neither are set it fails
# and if either one is set we're ok! This is to get around using | ,
# as | has higher precedence than & things group wrongly.
#
$e-$d&(($k,$n)=@ARGV)==2||die"$0 -d|-e key mod out\n";

#
# $v will be the digits of output per block, $w the digits of input per block.
# If encrypting need to reduce $w so input is guaranteed to be less than
# modulus; for decrypting reduce $v to match.
#
# blocks are based on modulus size in hex digits rounded up to nearest even
# length (~1&1+length$n) so that things will unpack properly
#
$v=$w=1+length$n&~1;
$v-=$d*2:$w-=$e*2;

#
# Make $_ be the exponent $k as a binary bit string
#
# Add a leading 0 to make length of $k be even so that it will fill
# Bytes when packed as 2 digits per byte
#
$_=unpack('B*',pack('H*',1&length$k?"0$k":$k));

#
# strip leading 0's from $_
#
s/^0+//;

#
# Turn every 0 into "d*ln%", every 1 into "d*ln%lm*ln%". These are dc codes
# which construct an exponentiation algorithm for that exponent.
# "d*ln%" is duplicate, square, load n, modulus; e.g. square the number
# on the stack, mod n. "d*ln%lm*ln%" does this then, load m, multiply,
# load n, modulus; e.g. then multiply by m mod n. This is the square and
# multiply algorithm for modular exponentiation.
#
# (Kudos to Hal for shortened this one by 4 chars)
#

s/1/0lM*ln%/g;
s/0/d*ln%/g;

#
# Encryption/decryption loop. Read $w/2 bytes of data to $m.
#
while(read(STDIN,$m,$w/2)){

#
# Turn data into equivalent hex digits in $m
#
$m=unpack("H$w",$m);

#
# Run dc: 16 bit radix for input and output; $m into dc register "M";
# $n into dc register "n"; execute $_, the exponentiation program above.
# "\U...\E" forces upper case on the hex digits as dc requires.
# Put the result in $e.
#
$a=`echo 16oOi\U$m SM$n\Esn1$_ p|dc`;

#
# Pad the result with leading 0's to $v digits, pack to raw data and output.
#
print pack("H$v",'0'x($v+1-length$a).$a);

}

Blowfish

Blowfish is yet another popular encryption algorithm which is based on:

The following C program demonstrates the implementation of the Blowfish
encryption algorithm:

/*********************blowfish.h********************/

/* $Id: blowfish.h,v 1.3 1995/01/23 12:38:02 pr Exp pr $*/

#define MAXKEYBYTES 56 /* 448 bits */
#define bf_N 16
#define noErr 0
#define DATAERROR -1
#define KEYBYTES 8
#define subkeyfilename "Blowfish.dat"


#define UWORD_32bits unsigned long
#define UWORD_16bits unsigned short
#define UBYTE_08bits unsigned char

/* choose a byte order for your hardware */
/* ABCD - big endian - motorola */
#ifdef ORDER_ABCD
union aword {
UWORD_32bits word;
UBYTE_08bits byte [4];
struct {
unsigned int byte0:8;
unsigned int byte1:8;
unsigned int byte2:8;
unsigned int byte3:8;
} w;
};
#endif /* ORDER_ABCD */

/* DCBA - little endian - intel */
#ifdef ORDER_DCBA
union aword {
UWORD_32bits word;
UBYTE_08bits byte [4];
struct {
unsigned int byte3:8;
unsigned int byte2:8;
unsigned int byte1:8;
unsigned int byte0:8;
} w;
};
#endif /* ORDER_DCBA */

/* BADC - vax */
#ifdef ORDER_BADC
union aword {
UWORD_32bits word;
UBYTE_08bits byte [4];
struct {
unsigned int byte1:8;
unsigned int byte0:8;
unsigned int byte3:8;
unsigned int byte2:8;
} w;
};
#endif /* ORDER_BADC */


short opensubkeyfile(void);
unsigned long F(unsigned long x);
void Blowfish_encipher(unsigned long *xl, unsigned long *xr);
void Blowfish_decipher(unsigned long *xl, unsigned long *xr);
short InitializeBlowfish(unsigned char key[], short keybytes);


/*********************blowfish.c*********************/

/* TODO: test with zero length key */
/* TODO: test with a through z as key and plain text */
/* TODO: make this byte order independent */

#include /* used for debugging */
#ifdef MACINTOSH
#include /* FIXME: do we need this? */
#endif

#include "blowfish.h"
#include "bf_tab.h" /* P-box P-array, S-box */

#define S(x,i) (bf_S[i][x.w.byte##i])
#define bf_F(x) (((S(x,0) + S(x,1)) ^ S(x,2)) + S(x,3))
#define ROUND(a,b,n) (a.word ^= bf_F(b) ^ bf_P[n])

inline
void Blowfish_encipher(UWORD_32bits *xl, UWORD_32bits *xr)
{
union aword Xl;
union aword Xr;

Xl.word = *xl;
Xr.word = *xr;

Xl.word ^= bf_P[0];
ROUND (Xr, Xl, 1); ROUND (Xl, Xr, 2);
ROUND (Xr, Xl, 3); ROUND (Xl, Xr, 4);
ROUND (Xr, Xl, 5); ROUND (Xl, Xr, 6);
ROUND (Xr, Xl, 7); ROUND (Xl, Xr, 8);
ROUND (Xr, Xl, 9); ROUND (Xl, Xr, 10);
ROUND (Xr, Xl, 11); ROUND (Xl, Xr, 12);
ROUND (Xr, Xl, 13); ROUND (Xl, Xr, 14);
ROUND (Xr, Xl, 15); ROUND (Xl, Xr, 16);
Xr.word ^= bf_P[17];

*xr = Xl.word;
*xl = Xr.word;
}

void Blowfish_decipher(UWORD_32bits *xl, UWORD_32bits *xr)
{
union aword Xl;
union aword Xr;

Xl = *xl;
Xr = *xr;

Xl.word ^= bf_P[17];
ROUND (Xr, Xl, 16); ROUND (Xl, Xr, 15);
ROUND (Xr, Xl, 14); ROUND (Xl, Xr, 13);
ROUND (Xr, Xl, 12); ROUND (Xl, Xr, 11);
ROUND (Xr, Xl, 10); ROUND (Xl, Xr, 9);
ROUND (Xr, Xl, 8); ROUND (Xl, Xr, 7);
ROUND (Xr, Xl, 6); ROUND (Xl, Xr, 5);
ROUND (Xr, Xl, 4); ROUND (Xl, Xr, 3);
ROUND (Xr, Xl, 2); ROUND (Xl, Xr, 1);
Xr.word ^= bf_P[0];

*xl = Xr.word;
*xr = Xl.word;
}

/* FIXME: Blowfish_Initialize() ??? */
short InitializeBlowfish(UBYTE_08bits key[], short keybytes)
{
short i; /* FIXME: unsigned int, char? */
short j; /* FIXME: unsigned int, char? */
UWORD_32bits data;
UWORD_32bits datal;
UWORD_32bits datar;
union aword temp;

/* fprintf (stderr, "0x%x 0x%x ", bf_P[0], bf_P[1]); /* DEBUG */
/* fprintf (stderr, "%d %d\n", bf_P[0], bf_P[1]); /* DEBUG */

j = 0;
for (i = 0; i < bf_N + 2; ++i) {
temp.word = 0;
temp.w.byte0 = key[j];
temp.w.byte1 = key[(j+1)%keybytes];
temp.w.byte2 = key[(j+2)%keybytes];
temp.w.byte3 = key[(j+3)%keybytes];
data = temp.word;
bf_P[i] = bf_P[i] ^ data;
j = (j + 4) % keybytes;
}

datal = 0x00000000;
datar = 0x00000000;

for (i = 0; i < bf_N + 2; i += 2) {
Blowfish_encipher(&datal, &datar);

bf_P[i] = datal;
bf_P[i + 1] = datar;
}

for (i = 0; i < 4; ++i) {
for (j = 0; j < 256; j += 2) {

Blowfish_encipher(&datal, &datar);

bf_S[i][j] = datal;
bf_S[i][j + 1] = datar;
}
}
return 0;
}
=============== bf_tab.h ==============
/* bf_tab.h: Blowfish P-box and S-box tables */

static UWORD_32bits bf_P[bf_N + 2] = {
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
0x9216d5d9, 0x8979fb1b,
};
static UWORD_32bits bf_S[4][256] = {
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,
};


************** TEST VECTORS ***********************************

This is a test vector.
Plaintext is "BLOWFISH".
The key is "abcdefghijklmnopqrstuvwxyz".

#define PL 0x424c4f57l
#define PR 0x46495348l
#define CL 0x324ed0fel
#define CR 0xf413a203l
static char keey[]="abcdefghijklmnopqrstuvwxyz";

This is another test vector.
The key is "Who is John Galt?"

#define PL 0xfedcba98l
#define PR 0x76543210l
#define CL 0xcc91732bl
#define CR 0x8022f684l
--------------------------------------------------------

This page is powered by Blogger. Isn't yours?