TASK: Write encryption component of a Jabber chat client.
I give you a VERY detailed spec, which basically tells you what each line of code will do. About 3,000 lines of C++ code.
Uses QT and OpenSSL.
I will also give you a project plan with an initial small task to test your ability.
I have more work after this also if you want.
The specification I will provide you is for an encryption library to be used in a chat application that will allow encrypted messages to be received and sent over the internet using public servers.
The library’s name shall be encrypt.lib. It will be made up of 5 main parts:
1. Conversion utilities.
2. Functions for random numbers.
3. Functions for Diffie Hellman encryption.
4. Functions for AES encryption.
5. Functions for preparing forms to transmit encryption information.
The specified software will make use of the following software development products:
1. OpenSSL: available from [login to view URL]
2. QT: available from [login to view URL]
3. Visual Studio 2005: available from Microsoft.
## Deliverables
All the utilities and functions are described in great detail in a
specification document with the following table of contents. This is VERY
detailed spec, with over 27,000 words (in English):
TOPIC PAGE
Introduction 6
Dictionary 7
Encryption Constants 7
Public Primes 7
Random 8
The Class Function 8
The Private Data 8
The Private Functions 8
The Public Data 8
The Public Functions 8
Class Initialization 8
EncryptRand 9
getEntropy 10
getEntropySample 11
randSeed 12
Encryption Utilities 12
ByteArraytoBN 13
BNtoByteArray 14
Hash256 15
Base64Hash256 16
str2val 17
Diffie-Hellman 18
The Class Function 18
The Private Data 18
The Private Functions 18
The Public Data 18
The Public Functions 19
Class Initialization 19
Access Functions 19
Computational Functions 19
EncryptDH 19
computeKey 20
set_generator 21
set_prime 21
genDHs 22
checkPublicKey 23
calcSessionKeys 25
getPublicKey 26
getqHe 27
getKMA 27
getKMB 27
getKSA 27
getKSB 28
AES-128 29
The Class Functions 29
The Private Data 29
The Private Functions 29
The Public Data 29
The Public Functions 30
Class Initialization 30
Class Termination 30
Access Functions 30
Computational Functions 30
EncryptAES 31
~EncryptAES 31
setCounters 32
resetCountersA 33
setThreadID 34
getThreadID 34
resetThreadID 34
setDHPointer 35
getDHPointer 35
setRandomNonce 36
getRandomNonce 36
setMAb 36
getMAb 36
setMBb 36
getMBb 37
setIDAb 37
getIDAb 37
setIDBb 38
getIDBb 38
setEncryptKeys 38
encryptMessage 39
decryptMessage 42
calcBMac 44
calculateMac 45
calcMXB 46
hmacMac 47
checkSameKey 48
encryptResult 49
decypherMac 50
checkMac 50
myAES_ctr128_inc 51
myAES_ctr128_encryptA 52
myAES_ctr128_encryptB 53
getInitialCA 53
getInitialCB 53
getCA 54
getCB 54
getMyCtr 54
getEncodedMFinal 54
getEncodedAMac 54
Forms 55
Form Constants 55
Form Name Space Constants 55
Form Types 55
Form Fields 56
Form Field Indices 57
Forms Class 58
xqThe Class Functions 58
The Private Data 58
The Private Functions 58
The Public Data 59
The Public Functions 60
Class Initialization 60
Access Functions 60
Computational Functions 60
Forms 62
initializeFormA 63
initializeFormB 66
initializeFormA2 67
initializeFormB2 67
initializeFormTerm 68
initializeFormTerm2 68
prepareAndGenFormA 69
prepareAndGenFormB 70
prepareAndGenFormTerm 71
prepareAndGenFormTerm2 72
B2Calculations 73
generateFormHeaderStart 74
generateFormHeader 75
generateFormEnding 77
regenFormA 79
genFormA2Minus 80
regenFormA2Minus 81
regenFormB2Minus 82
regenFormB 83
genFormB2Minus 84
genFormAField 85
regenFormAField 86
genFormA2Field 87
regenFormA2Field 88
genFormBField 89
regenFormBField 89
genFormB2Field 90
regenFormB2Field 90
prepareFormA 91
prepareFormB 91
prepareFormB2 92
prepareFormB2Minus 92
prepareFormA2 93
prepareFormA2Minus 93
checkFormA 94
checkFormA2 94
checkFormB 95
checkFormB2 95
checkFormAConstants 96
checkFormBConstants 97
checkFormA2Constants 97
checkFormB2Constants 97
checkFormAModp 98
checkFormBModp 98
checkFormASecurity 99
checkFormBSecurity 99
checkFormA2Key 99
saveFormAData 100
saveFormBData 100
saveFormA2Data 101
saveFormB2Data 101
calcIdentity 102
checkFormA2Identity 104
checkFormB2Identity 106
sasAlg 108