diff --git a/util/ipaccess-auth.c b/util/ipaccess-auth.c
new file mode 100644
index 0000000..e550f4a
--- /dev/null
+++ b/util/ipaccess-auth.c
@@ -0,0 +1,80 @@
+/* ipaccess nanoBTS proprietary telnet authentication,
+ * written by Dieter Spaar <spaar@mirider.augusta.de> */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <openssl/md5.h>
+
+#define CLI_USER "CLICLIENT\n"
+#define KEY "Sh1n30nY0uCra2yD1am0nd"
+
+static void compute_response(unsigned char *ubChallenge, unsigned char *ubResponse) 
+{
+	MD5_CTX md5;
+	int i;
+
+	MD5_Init(&md5);
+
+	for(i = 0; i < 4; i++) {
+		MD5_Update(&md5, (unsigned char *)KEY, strlen(KEY));
+		MD5_Update(&md5, ubChallenge, 16);
+	}
+	MD5_Final(ubResponse, &md5);
+}
+
+// nanoBTS Challenge/Response
+int ipaccess_telnet_auth(int sock)
+{
+	char buffer[512];
+	int rs;
+        unsigned char  ubResponse[18];
+    
+        // send client name
+        
+    	if ((rs = send(sock, CLI_USER, strlen(CLI_USER), 0)) == -1) {
+			fprintf(stderr, "send() failed: %s\n", strerror(errno));
+			exit(1);
+		} else if (rs == 0) {
+			fprintf(stderr, "send() unexpectedly returned 0\n");
+			exit(1);
+		}
+		
+        // receive challenge
+
+        if ((rs = recv(sock, buffer, sizeof(buffer), 0)) > 0) {
+            if(rs != 18 || buffer[0] != '<' || buffer[17] != '>') {
+              fprintf(stderr, "unexpected response\n");
+              exit(1);
+            }
+        } else if (rs == 0) {
+			fprintf(stderr, "recv(client) unexpectedly returned 0\n");
+			exit(1);
+        } else {
+            fprintf(stderr, "recv(client) failed: %s\n",
+                    strerror(errno));
+            exit(1);
+        }
+        
+        // calculate response
+        
+        memset(&ubResponse, 0, sizeof(ubResponse));
+  		compute_response(buffer + 1, ubResponse + 1);
+        ubResponse[0] = '<';
+        ubResponse[17] = '>';
+        
+        // send response
+        if ((rs = send(sock, ubResponse, sizeof(ubResponse), 0)) == -1) {
+		fprintf(stderr, "send() failed: %s\n", strerror(errno));
+		exit(1);
+	} else if (rs == 0) {
+		fprintf(stderr, "send() unexpectedly returned 0\n");
+		exit(1);
+	}        
+}
