summaryrefslogtreecommitdiff
path: root/wmspeer.h
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-10-19 18:45:03 +0200
committerJavier <dev.git@javispedro.com>2014-10-19 18:45:03 +0200
commitd8d8fc7a0d139e7b864eee3b573bd208f823ad4f (patch)
treea9b54d6e6e6941c620f4f10cef4b5def9be86f82 /wmspeer.h
downloadsapd-d8d8fc7a0d139e7b864eee3b573bd208f823ad4f.tar.gz
sapd-d8d8fc7a0d139e7b864eee3b573bd208f823ad4f.zip
initial import, no crypto
Diffstat (limited to 'wmspeer.h')
-rw-r--r--wmspeer.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/wmspeer.h b/wmspeer.h
new file mode 100644
index 0000000..446e747
--- /dev/null
+++ b/wmspeer.h
@@ -0,0 +1,46 @@
+#ifndef WMSPEER_H
+#define WMSPEER_H
+
+#include <QtCore/QObject>
+#include <openssl/ec.h>
+
+#include "saprotocol.h"
+
+class WMSPeer : public QObject
+{
+ Q_OBJECT
+
+public:
+ WMSPeer(SAProtocol::Role role, const QString &localName, const QString &peerName, QObject *parent = 0);
+ ~WMSPeer();
+
+ SAProtocol::SecurityFrame respondToServerChallenge(const SAProtocol::SecurityFrame &challenge);
+ bool verifyServerResponse(const SAProtocol::SecurityFrame &challenge);
+
+private:
+ bool generateEccKey();
+
+ QByteArray computeSharedSecret(const QByteArray &remotePubKey) const;
+ QByteArray expandTemporaryKey();
+
+ static QByteArray getExpandedPskKey(quint16 index);
+
+ static QByteArray sha256(const QByteArray &message);
+
+private:
+ EC_KEY *_key;
+ QByteArray _pubKey;
+ quint32 _id;
+
+ QString _serverName;
+ QString _clientName;
+
+ QByteArray _sharedSecret;
+
+ quint16 _clientTmpNum;
+ QByteArray _clientTmpKey;
+ quint16 _serverTmpNum;
+ QByteArray _serverTmpKey;
+};
+
+#endif // WMSPEER_H