예제 #1
0
        public async Task <String> RetrieveDHSessionKey(String PublickKey)
        {
            String DecryptedServerNumber;
            String readString = await ActivitySocket.read();

            ReadObj = JsonParse.ReadObject(readString);
            if (FingerPrint.Verification(ReadObj.getServerPrimeNumber(), PublickKey, ReadObj.getFingerPrint()))
            {
                if (MacAlgProvider.VerifyHMAC(ReadObj.getServerPrimeNumber(), SymmetricKey.StrKeyBase64,
                                              ReadObj.getHmacHash()))
                {
                    DecryptedServerNumber = AesEncryption.AES_Decrypt(ReadObj.getServerPrimeNumber(),
                                                                      SymmetricKey.StrKeyBase64);
                }
                else
                {
                    throw new Exception("Integrity of SymmetricKey canot verified");
                }
            }

            else
            {
                throw new Exception("Integrity of RSA canot verified");
            }

            return(GeneratoreMachine.SessionDHGenerator(DecryptedServerNumber));
        }
예제 #2
0
        public async Task SendDHEncryptedMessage(String Message)
        {
            String encryptedMessage = (AesEncryption.AES_Encrypt(Message, sessionKey.SessionKey));
            String HmacHash         = MacAlgProvider.CreateHMAC(encryptedMessage, sessionKey.SessionKey);

            WriteObj.setEncryptedMessage(encryptedMessage);
            WriteObj.setHmacHash(HmacHash);

            await ActivitySocket.send(JsonParse.WriteObject(WriteObj));
        }
예제 #3
0
        public async Task <String> ReceiveDHEncryptedMessage(String PublicKey)
        {
            ReadObj = JsonParse.ReadObject(await ActivitySocket.read());

            if (FingerPrint.Verification(ReadObj.getEncryptedMessage(), PublicKey, ReadObj.getFingerPrint()))
            {
                if (MacAlgProvider.VerifyHMAC(ReadObj.getEncryptedMessage(), sessionKey.SessionKey,
                                              ReadObj.getHmacHash()))
                {
                    return(AesEncryption.AES_Decrypt(ReadObj.getEncryptedMessage(),
                                                     sessionKey.SessionKey));
                }
                else
                {
                    throw new Exception("Integrity of SymmetricKey canot verified");
                }
            }
            else
            {
                throw new Exception("Integrity of RSA canot verified");
            }
        }
예제 #4
0
        public async Task StartDHSession()
        {
            String EncryptedClientNumber = AesEncryption.AES_Encrypt(GeneratoreMachine.GetClientPublicNumber(),
                                                                     SymmetricKey.StrKeyBase64);

            String HmacHash = MacAlgProvider.CreateHMAC(EncryptedClientNumber, SymmetricKey.StrKeyBase64);

            WriteObj.setClientEncryptedPrimeNumber(EncryptedClientNumber);
            WriteObj.setHmacHash(HmacHash);



            WriteObj.setEncryptedSymetricClientKey(RsaEncryption.RsaEncrypt(
                                                       SymmetricKey.StrKeyBase64,
                                                       ReadObj.getRSAPublicKey())
                                                   );


            String StringTOsentWithRsa = JsonParse.WriteObject(WriteObj);

            await ActivitySocket.send(StringTOsentWithRsa);
        }