diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
index 69191d3..aca2c76 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
@@ -46,8 +46,6 @@
     // TODO: need to be configurable
     private static final String AUTH_KEY = "onos";
 
-    private static final short AUTH_DATA_LENGTH = 20;
-
     // TODO: need to be configurable
     private static final short AUTH_METHOD = 1;
 
@@ -79,11 +77,11 @@
         // build temp notify message
         NotifyBuilder authNotifyBuilder = new DefaultNotifyBuilder();
         authNotifyBuilder.withKeyId(AUTH_METHOD);
-        authNotifyBuilder.withAuthDataLength(AUTH_DATA_LENGTH);
+        authNotifyBuilder.withAuthDataLength(valueOf(AUTH_METHOD).getHashLength());
         authNotifyBuilder.withNonce(register.getNonce());
         authNotifyBuilder.withMapRecords(register.getMapRecords());
 
-        byte[] authData = new byte[AUTH_DATA_LENGTH];
+        byte[] authData = new byte[valueOf(AUTH_METHOD).getHashLength()];
         Arrays.fill(authData, (byte) 0);
         authNotifyBuilder.withAuthenticationData(authData);
 
@@ -97,13 +95,13 @@
         byte[] bytes = new byte[byteBuf.readableBytes()];
         byteBuf.readBytes(bytes);
 
-        byte[] sha1AuthData =
-                factory.createAuthenticationData(valueOf(register.getKeyId()), AUTH_KEY, bytes);
+        byte[] calcAuthData = factory.createAuthenticationData(
+                                valueOf(register.getKeyId()), AUTH_KEY, bytes);
 
         NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
         notifyBuilder.withKeyId(AUTH_METHOD);
-        notifyBuilder.withAuthDataLength((short) sha1AuthData.length);
-        notifyBuilder.withAuthenticationData(sha1AuthData);
+        notifyBuilder.withAuthDataLength((short) calcAuthData.length);
+        notifyBuilder.withAuthenticationData(calcAuthData);
         notifyBuilder.withNonce(register.getNonce());
         notifyBuilder.withMapRecords(register.getMapRecords());
 
@@ -123,10 +121,10 @@
     }
 
     /**
-     * Checks the integrity of the received Map-Register message by calculating
-     * authentication data from received Map-Register message.
+     * Checks the integrity of the received map-register message by calculating
+     * authentication data from received map-register message.
      *
-     * @param register Map-Register message
+     * @param register map-register message
      * @return evaluation result
      */
     private boolean checkAuthData(LispMapRegister register) {
@@ -154,8 +152,8 @@
         byte[] bytes = new byte[byteBuf.readableBytes()];
         byteBuf.readBytes(bytes);
 
-        byte[] calculatedAuthData =
-                factory.createAuthenticationData(valueOf(register.getKeyId()), AUTH_KEY, bytes);
+        byte[] calculatedAuthData = factory.createAuthenticationData(
+                                    valueOf(register.getKeyId()), AUTH_KEY, bytes);
         return Arrays.equals(calculatedAuthData, register.getAuthenticationData());
     }
 }
