diff --git a/gatekeeper.cpp b/gatekeeper.cpp
index fe427bd..9097491 100644
--- a/gatekeeper.cpp
+++ b/gatekeeper.cpp
@@ -37,6 +37,10 @@
         // Password handle does not match what is stored, generate new SecureID
         GetRandom(&user_id, sizeof(secure_id_t));
     } else {
+        if (request.password_handle.length < sizeof(password_handle_t)) {
+            response->error = ERROR_INVALID;
+            return;
+        }
         password_handle_t *pw_handle =
             reinterpret_cast<password_handle_t *>(request.password_handle.buffer.get());
 
@@ -109,6 +113,11 @@
         return;
     }
 
+    if (request.password_handle.length < sizeof(password_handle_t)) {
+        response->error = ERROR_INVALID;
+        return;
+    }
+
     password_handle_t *password_handle = reinterpret_cast<password_handle_t *>(
             request.password_handle.buffer.get());
 
@@ -232,7 +241,7 @@
     token->challenge = challenge;
     token->user_id = user_id;
     token->authenticator_id = authenticator_id;
-    token->authenticator_type = htonl(HW_AUTH_PASSWORD);
+    token->authenticator_type = htobe32(HW_AUTH_PASSWORD);
     token->timestamp = htobe64(timestamp);
 
     const uint8_t *auth_token_key = NULL;
@@ -253,11 +262,11 @@
  * Calculates the timeout in milliseconds as a function of the failure
  * counter 'x' as follows:
  *
- * [0. 5) -> 0
+ * [0, 4] -> 0
  * 5 -> 30
- * [6, 10) -> 0
- * [11, 30) -> 30
- * [30, 140) -> 30 * (2^((x - 30)/10))
+ * [6, 10] -> 0
+ * [11, 29] -> 30
+ * [30, 139] -> 30 * (2^((x - 30)/10))
  * [140, inf) -> 1 day
  *
  */
diff --git a/gatekeeper_messages.cpp b/gatekeeper_messages.cpp
index d6d028d..dfa9b18 100644
--- a/gatekeeper_messages.cpp
+++ b/gatekeeper_messages.cpp
@@ -103,18 +103,21 @@
 }
 
 gatekeeper_error_t GateKeeperMessage::Deserialize(const uint8_t *payload, const uint8_t *end) {
-    if (payload + sizeof(uint32_t) > end) return ERROR_INVALID;
+    if (payload + sizeof(serial_header_t) > end) return ERROR_INVALID;
     const serial_header_t *header = reinterpret_cast<const serial_header_t *>(payload);
+    payload += sizeof(serial_header_t);
+    user_id = header->user_id;
     if (header->error == ERROR_NONE) {
-        if (payload == end) return ERROR_INVALID;
-        user_id = header->user_id;
-        error = nonErrorDeserialize(payload + sizeof(*header), end);
+        error = nonErrorDeserialize(payload, end);
     } else {
         error = static_cast<gatekeeper_error_t>(header->error);
-        user_id = header->user_id;
         if (error == ERROR_RETRY) {
-            if (payload + sizeof(serial_header_t) < end) {
-                memcpy(&retry_timeout, payload + sizeof(serial_header_t), sizeof(retry_timeout));
+            if (payload < end) {
+                if (payload + sizeof(retry_timeout) <= end) {
+                    memcpy(&retry_timeout, payload, sizeof(retry_timeout));
+                } else {
+                    error = ERROR_INVALID;
+                }
             } else {
                 retry_timeout = 0;
             }
@@ -179,6 +182,9 @@
         provided_password.buffer.reset();
     }
 
+    if (payload + sizeof(challenge) > end) {
+        return ERROR_INVALID;
+    }
     memcpy(&challenge, payload, sizeof(challenge));
     payload += sizeof(challenge);
 
@@ -231,6 +237,10 @@
         return err;
     }
 
+    if (payload + sizeof(request_reenroll) > end) {
+        return ERROR_INVALID;
+    }
+
     memcpy(&request_reenroll, payload, sizeof(request_reenroll));
     return ERROR_NONE;
 }
diff --git a/rules.mk b/rules.mk
index 46f3df8..831c05a 100644
--- a/rules.mk
+++ b/rules.mk
@@ -14,7 +14,6 @@
 	$(LOCAL_DIR)/../../hardware/libhardware/include
 
 MODULE_DEPS := \
-	lib/libc \
-	lib/libc-trusty \
+	trusty/user/base/lib/libc-trusty \
 
 include make/module.mk
diff --git a/tests/gatekeeper_device_test.cpp b/tests/gatekeeper_device_test.cpp
index 0e7ace6..f166ca8 100644
--- a/tests/gatekeeper_device_test.cpp
+++ b/tests/gatekeeper_device_test.cpp
@@ -98,7 +98,7 @@
     hat = reinterpret_cast<hw_auth_token_t *>(auth_token);
 
     ASSERT_EQ(HW_AUTH_TOKEN_VERSION, hat->version);
-    ASSERT_EQ(htonl(HW_AUTH_PASSWORD), hat->authenticator_type);
+    ASSERT_EQ(htobe32(HW_AUTH_PASSWORD), hat->authenticator_type);
 }
 
 TEST_F(GateKeeperDeviceTest, EnrollAndVerifyTimeout) {
