Code aus Form1.frm
Option ExplicitPublic Partei As String, p As Currency, g As Currency
Public alpha As Currency, beta As Currency
Public Function Connect(IP As String, Port As Long) As Currency
Dim k As Currency, a As Currency
If ws.State <> sckClosed Then
ws.Close
End If
Partei = "A"
g = 0: p = 0: alpha = 0: beta = 0
ws.LocalPort = 0
ws.Connect IP, Port
Do: DoEvents: Loop Until ws.State >= sckConnected
If ws.State <> sckConnected Then
MsgBox "Fehler aufgetreten"
Exit Function
End If
p = 80107: g = 5
ws.SendData CStr(g) & vbCrLf: DoEvents
ws.SendData CStr(p) & vbCrLf: DoEvents
a = Int(Rnd * 5000 + 100)
alpha = PowerMod(g, a, p)
ws.SendData CStr(alpha) & vbCrLf
Do: DoEvents: Loop Until beta <> 0
k = PowerMod(beta, a, p)
ws.Close
Connect = k
End Function
Private Sub Command1_Click()
Dim k As Currency
k = Connect("127.0.0.1", 11532)
Label1.Caption = "Schlüssel k: " & k
End Sub
Private Sub Form_Load()
On Error Resume Next
Randomize Timer
ws.LocalPort = 11532
ws.Listen
If Err.Number > 0 Then
Label2.Caption = "Kein Server"
Else
Command1.Enabled = False
End If
End Sub
Private Sub ws_Close()
ws.Close
End Sub
Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.Close
ws.Accept requestID
End Sub
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Static Buffer As String, i As Long
Dim Temp As String, Zahl As String, k As Currency
ws.GetData Temp, vbString
Buffer = Buffer & Temp
While InStr(Buffer, vbCrLf)
Zahl = Left$(Buffer, InStr(Buffer, vbCrLf) - 1)
Buffer = Mid$(Buffer, InStr(Buffer, vbCrLf) + 2)
If Partei = "A" Then
beta = Val(Zahl)
Else
Select Case i
Case 0
g = Val(Zahl)
Case 1
p = Val(Zahl)
Case 2
i = -1
alpha = Val(Zahl)
k = DH_Key_B
Label1.Caption = "Schlüssel k: " & k
ws.Close
DoEvents
ws.LocalPort = 11532
ws.Listen
End Select
i = i + 1
End If
Wend
End Sub
Public Function DH_Key_B() As Currency
Dim b As Currency, k As Currency
b = Rnd * 5000 + 100
beta = PowerMod(g, b, p)
ws.SendData CStr(beta) & vbCrLf: DoEvents
k = PowerMod(alpha, b, p)
DH_Key_B = k
End Function
Public Function PowerMod(Basis As Currency, ByVal Exponent As _
Currency, Modul As Currency) As Currency
PowerMod = 1
While Exponent > 0
PowerMod = Modulo((PowerMod * Basis), Modul)
Exponent = Exponent - 1
Wend
End Function
Public Function Modulo(ByVal a As Currency, b As Currency) As Currency
While a > b: a = a - b: Wend
Modulo = a
End Function