diff --git a/command/rakp12.cpp b/command/rakp12.cpp
index 5963cef..c52d188 100644
--- a/command/rakp12.cpp
+++ b/command/rakp12.cpp
@@ -3,6 +3,7 @@
 #include <openssl/rand.h>
 
 #include <algorithm>
+#include <cstring>
 #include <iomanip>
 #include <iostream>
 
@@ -45,6 +46,29 @@
         return outPayload;
     }
 
+    auto rakp1Size = sizeof(RAKP1request) -
+            (userNameMaxLen - request->user_name_len);
+
+    // Validate user name length in the message
+    if (request->user_name_len > userNameMaxLen ||
+        inPayload.size() !=  rakp1Size)
+    {
+        response->rmcpStatusCode =
+            static_cast<uint8_t>(RAKP_ReturnCode::INVALID_NAME_LENGTH);
+        return outPayload;
+    }
+
+    session->userName.assign(request->user_name, request->user_name_len);
+
+    // Validate the user name if the username is provided
+    if (request->user_name_len &&
+        (session->userName != cipher::rakp_auth::userName))
+    {
+        response->rmcpStatusCode =
+            static_cast<uint8_t>(RAKP_ReturnCode::UNAUTH_NAME);
+        return outPayload;
+    }
+
     // Update transaction time
     session->updateLastTransactionTime();
 
@@ -70,7 +94,8 @@
                  cipher::rakp_auth::REMOTE_CONSOLE_RANDOM_NUMBER_LEN +
                  cipher::rakp_auth::BMC_RANDOM_NUMBER_LEN +
                  BMC_GUID_LEN + sizeof(request->req_max_privilege_level) +
-                 sizeof(request->user_name_len));
+                 sizeof(request->user_name_len) +
+                 session->userName.size());
 
     auto iter = input.begin();
 
@@ -127,6 +152,9 @@
     // User Name Length Byte
     std::copy_n(&(request->user_name_len), sizeof(request->user_name_len),
                 iter);
+    std::advance(iter, sizeof(request->user_name_len));
+
+    std::copy_n(session->userName.data(), session->userName.size(), iter);
 
     // Generate Key Exchange Authentication Code - RAKP2
     auto output = authAlgo->generateHMAC(input);
diff --git a/command/rakp12.hpp b/command/rakp12.hpp
index fb9a499..189b5e5 100644
--- a/command/rakp12.hpp
+++ b/command/rakp12.hpp
@@ -8,6 +8,8 @@
 namespace command
 {
 
+constexpr size_t userNameMaxLen = 16;
+
 /**
  * @struct RAKP1request
  *
@@ -23,7 +25,7 @@
     uint8_t req_max_privilege_level;
     uint16_t reserved3;
     uint8_t user_name_len;
-    char user_name[16];
+    char user_name[userNameMaxLen];
 } __attribute__((packed));
 
 /**
diff --git a/command/rakp34.cpp b/command/rakp34.cpp
index 71b1e52..37335a8 100644
--- a/command/rakp34.cpp
+++ b/command/rakp34.cpp
@@ -125,12 +125,12 @@
     auto sessPrivLevel = static_cast<uint8_t>(session->curPrivLevel);
 
     // User Name Length Byte
-    uint8_t userLength = 0;
+    auto userLength = static_cast<uint8_t>(session->userName.size());
 
     std::vector<uint8_t> input;
     input.resize(cipher::rakp_auth::BMC_RANDOM_NUMBER_LEN +
                  sizeof(rcSessionID) + sizeof(sessPrivLevel) +
-                 sizeof(userLength));
+                 sizeof(userLength) + userLength);
 
     auto iter = input.begin();
 
@@ -151,6 +151,9 @@
 
     // User Name Length Byte
     std::copy_n(&userLength, sizeof(userLength), iter);
+    std::advance(iter, sizeof(userLength));
+
+    std::copy_n(session->userName.data(), userLength, iter);
 
     // Generate Key Exchange Authentication Code - RAKP2
     auto output = authAlgo->generateHMAC(input);
@@ -187,7 +190,7 @@
 
     input.resize(cipher::rakp_auth::REMOTE_CONSOLE_RANDOM_NUMBER_LEN +
                  cipher::rakp_auth::BMC_RANDOM_NUMBER_LEN +
-                 sizeof(sessPrivLevel) + sizeof(userLength));
+                 sizeof(sessPrivLevel) + sizeof(userLength) + userLength);
     iter = input.begin();
 
     // Remote Console Random Number
@@ -207,6 +210,9 @@
 
     // User Name Length Byte
     std::copy_n(&userLength, sizeof(userLength), iter);
+    std::advance(iter, sizeof(userLength));
+
+    std::copy_n(session->userName.data(), userLength, iter);
 
     // Generate Session Integrity Key
     auto sikOutput = authAlgo->generateHMAC(input);
