!strcmp(value_buf, "TRUE"))
                emptyauth = 1;
 
-       memset(value_buf, 0, 4);
-       value_buflen = 4;
+       memset(value_buf, 0, 5);
+       value_buflen = 5;
        err = asn1_read_value(tpmkey, "parent", value_buf, &value_buflen);
        if (err == ASN1_ELEMENT_NOT_FOUND)
                parent = 0x40000001; // RH_OWNER
        else if (err != ASN1_SUCCESS) {
+       badparent:
                vpn_progress(vpninfo, PRG_ERR,
                             _("Failed to parse TPM2 key parent: %s\n"),
                             asn1_strerror(err));
                goto out_tpmkey;
        } else {
-               int i;
+               int i = 0;
                parent = 0;
 
-               for (i = 0; i < value_buflen; i++)
-                       parent |= value_buf[value_buflen - i - 1] << (8 * i);
+               if (value_buflen == 5) {
+                       if (value_buf[0])
+                               goto badparent;
+                       /* Skip the leading zero */
+                       i++;
+               }
+               for ( ; i < value_buflen; i++) {
+                       parent <<= 8;
+                       parent |= value_buf[i];
+               }
        }
 
        if (decode_data(asn1_find_node(tpmkey, "pubkey"), &pubdata) < 0) {