<br>forwarding the email to the mailing list because my initial reply was  sent privately( again,should pay more attention to where i send my emails :-) )<br><div class="gmail_quote">On Mon, Apr 2, 2012 at 2:15 PM, .. ink .. <span dir="ltr"><<a href="mailto:mhogomchungu@gmail.com">mhogomchungu@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">
- for LUKS, if keyslot status is in some unexpected state<br>
(either not active or active) - well, this one can be caused by<br>
partial header corruption.<br>
(This check should be perhaps in crypt_load as well...<br>
Anyway, slot with invalid status is the same like non-active slot<br>
- cannot be used for unlocking.<br></div><span><font color="#888888"><br>
Milan<br>
</font></span></blockquote></div>this part perfectly explains what i was observing.<br><br>did another test:<br><br>[ink@mtz ~]$ ./test luks1 256 yyyyyyyyyyyyyyyyyyyy<br>[ink@mtz ~]$ zuluCrypt-cli -b -d luks1<br>12100000<br>

<br>[ink@mtz ~]$./test luks1 256 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy<br>[ink@mtz ~]$ zuluCrypt-cli -b -d luks1<br>device "luks1" is not a luks device<br><br>the test program is at the end of the email.<br>

<br>so currently,it is possible to corrupt the header in a way that crypt_load()  will not detect the corruption but but crypt_keyslot_status() will if the minor corruption is in a key slot it run on.<br><br>This explains why i couldnt seem to trigger the invalid key error that was being reported.My corruption wasnt big enough.<br>

<br>the luks disk specification says key slot field in the header takes 48 units of length(48 bytes??) and is of data type "key slot". what is data type "key slot"? i am asking purest as a matter of couriosity and not because i want to parse the header in any shape or form.<br>

<br><br>int main( int argc,char * argv[] )<br>{<br>    const char * path = argv[1];<br>    size_t offset = atoi(argv[2]);<br>    const char * data = argv[3];<br>    size_t len = strlen(data);<br>    <br>    int i = open(path,O_WRONLY);<br>

    lseek(i,offset,SEEK_SET);    <br>    write(i,data,len);<br>    close(i);<br>    return 0 ;    <br>}<br><br>
</blockquote></div><br>