Archive for 2012

Delve Into Windows Phone 8 (Emulator) Files

As you may know already, the all new Windows Phone 8 emulator runs on Windows Hyper-V, which means that you can start the WP8 OS directly from Hyper-V, and better, you can have total control to explore the files on the system's emulator.

This is pretty useful (I'm sure the folks over xda-developers are already on this) to see around the different parameters in the registry files; to have access to the executable files of the system etc.

For this, all one needs is to attach the virtual hard drive of the emulator. Open the "Administrative Tools" in the (old) control panel then "Computer Management." Choose "Disk Management" and then on the "Action" menu choose "Attach VHD." Now all that is needed is to locate the VHDs of the emulator located in C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Emulation\Images.

Following are the registry files from the mounted VHD.

Happy hacking...

Single-Block AES Encryption/Decryption in .NET

While trying to solve the 2nd programming assignment from the excellent crypto class on coursera, it was required to implement the CBC and CTR modes of operation starting from a simple AES block encryption/decryption.

To get this done using .NET's Cryptography.AesManaged or Cryptography.RijndaelManaged, the example on the MSDN documentation was not enough to have a one block encryption. Indeed, the example codes show how to encrypt/decrypt complete clear/cipher texts; this implies applying the chaining in the CBC mode and the underlying padding.

After some tinkering, I used the TransformBlock method of the ICryptoTransform interface. This method does exactly one block transformation of the underlying block cipher (AES in our case), there is no explicit padding involved nor chaining in the case of CBC.

To get a consistent AES block encryption/decryption, it was mandatory to eliminate the XOR with the Initial Vector (IV). This can be achieved whether by using the ECB mode or using the CBC mode with an initial IV = 0^{128}.

The following two methods show the encryption/decryption of a single block using AES. Notice that it is considered cheating if you use the built-in encryption to find the solution to the coursera problem.

Fun(c) with OCaml and Mazes

So today I stumbled upon a post I've wrote almost 3 years ago about solving mazes using OCaml (with graphics yes), and it was actually cool to download the code, type the compiling command and see it run without any issues (C programmers! behold).

So I decided to put the code on github for anyone to test and use (and fall in love with OCaml probably afterwards).

The code is available here, and it requires no more than a command to compile and run, it solves mazes with square and hexagon shapes.

Posted in |

Twitter on Windows Phone vs Twitter on Android

They say A picture is worth a thousand words, here is a comparison of the twitter app on Windows Phone and on Android. If they were both application on a desktop Windows computer for example!

Twitter on Windows Phone vs Android (Click to enlarge) 

Posted in , , |

Panoramic View of Paris [Xperia Arc S]

I've received the Xperia™ arc S yesterday which I love very much. One of the features I like about this phone is the fact that one can take panoramic photos on the fly, and the great HD video shots along with the great screen.

Here are some shots I took today around Paris, use the mouse to navigate left/right; enjoy.
(You can view the pics in better dimensions here.)

Posted in |

Workaround to Access Windows 8 Start Menu Programs Again

Much of the search queries to this blog are about this post, or how to access the old start menu on windows 8.

There are great applications that mimic the old start menu. One of the preferred features is that once a user logs in, she is taken directly to the standard desktop. Personally I have been using Stardock's Start 8 (the same guys who developed the awesome Fences application) which I find excellent, it is not free however (costs over $5). Following are screenshots of Start 8 on my Windows 8 laptop.

Start 8

Start 8
Another option is to use the free "Classic Shell" which can be found here Following is a screenshot of  Classic Shell's start menu:

Old post

If you have already tried the Windows 8 consumer preview, you have surely noticed that there is no start button anymore, which means no easy way to access your programs using the start menu as we used to do since forever.

Start Button missing in Windows 8
This is impractical since it means: whether you have to put some shortcuts on the desktop, or go to the metro start screen each time hoping to find the application icon there.

However, you can do a simple trick to access the whole start menu again.

To do this, right click the Super Bar and choose Toolbars -> New toolbar. In the dialog, choose the folder C:\ProgramData\Microsoft\Windows\Start Menu\Programs and click "Select folder".

Once added, you can click the arrows to access the programs and folders of the start menu, you can also drag it to the left so that it takes the start button's original place.

Start Menu items without a start button on Windows 8
You can also still access some parameters without having to go through the Control Panel shortcuts etc. by hovering over the left bottom corner of the screen and right clicking to get the following menu :

Posted in |

Factoring Large Numbers With Distributed Quadratic Sieve

Integer factorization is a problem that has its roots in the very far history, it is a fascinating problem (to me especially) that has gained a lot of attention in the recent years for cracking the RSA cryptosystem for example.

While having no time to blog about the internals of one of the very efficient methods to factorize relatively large numbers, I present here a simple implementation I have developed of the Quadratic Sieve to factorize relatively big RSA numbers. For a reference about the mathematical premises, the 6th chapter entitled Subexponential Factoring Algorithms of the Prime Numbers, A Computational Perspective book is pretty great.

The program available here is composed of 4 different versions, 3 centralized (sequential) and 1 distributed using MPI. The distributed version needs to be run on at least 2 nodes. The centralized versions consist of different implementation experiments : 
  • The first one keeps the exponent vector of each smooth number (impractical due to the huge memory needed to keep the vectors).
  • The second one sieves at an interval centralized at sqrt(N); according to my testing, this has no visible improvements over the standard one. 
  • The last version which is the same as the first one but which uses only a binary exponent vector (saving one bit for each prime in the base) for the smooth numbers.

One of the caveats of this implementation is the linear algebra step that performs the Gaussian elimination. The method I am using is the most naive one (though goes pretty fast using XOR operations on GMP integers) which keeps an identity matrix besides the effective matrix while performing the Gaussian elimination, and hence the program needs twice the memory needed for the matrix.

The distributed version spawns as many nodes as needed and makes them all perform the sieving step, after some very hundreds of thousands of steps, the slaves communicate their found smooth numbers to the master which decides if they must stop or should continue sieving for more numbers. Sending GMP integers mpz_t over MPI was very challenging due to the way MPI handles the string representation of these numbers (sometimes '\0' are included at the end and the length returned does not represent exactly the number of characters in the string).  You can take a look at the functions doing the MPI send/receive of mpz_t here.

You will need the mpfr library too (for logarithm calculations) in case you want to test the programs, for the distributed version, compile with mpicc and run with mpirun as usual.

Centralized version:
Distributed version (60 intel i7 nodes):

Posted in , , |

Swedish Greys - a WordPress theme from Nordic Themepark. Converted by