This is a bid request for a DLL written in C++ (Visual Studio .NET 2008).
For my company I am researching the possibility to build a user-friendly, easy to deploy identity management (IDM) application.
One of the crucial factors in the decision whether or not this project will be feasible is the possibility to synchronise passwords between different applications and directory systems.
To test this requirement I need a DLL that does the following;
The DLL will be installed on all domain controllers in a Windows 2003 or Windows 2008 domain and will run as a password filter as described in this article:
[login to view URL]
The DLL will always be the last password filter in the chain.
When the DLL registers a password change it will make a string containing the distinguished name of the user object, a tab and the users password.
The string will look like this:
CN=John Doe,OU=Staff,DC=WorldTraders,DC=Local s3cr3tp@ssw0rd
The DLL will encrypt the string using blowfish encryption in CBC mode.
The key for the encryption will be compiled into the DLL and be configurable in code as a string constant.
The encrypted string will be written to the end of a file, located in the %SystemRoot%\system32 (where the DLL will also be located).
Each encrypted string will be on a new line.
## Deliverables
I will (re)compile the DLL using Visual Studio 2008 after filling in the aforementioned encryption key. (the encryption will not use an initialisation vector).
I will install and test the DLL manually on a Windows2003 (32-bit) and a Windows2008 (64-bit) domain controller. After testing the DLL I will attempt to decrypt the blowfish encrypted files using PHP's mcrypt functions.
If all works as expected, I will accept your work. Quick turn-around and neat code will be rewarded with a bonus.
If you require any external libraries, make sure they will be statically linked to the DLL.
I don't require any formal documentation other than the following:
- Document each function in your code with it's intended purpose, input and output (as comments in the code)
- Create clean readable code in small functions and well seperated libraries (if needed)