guint32: 32bit, msbf
time_t: 2 * guint32
strings: uint32 + bytes, no padding, NULL is encoded as 0xffffffff
reserved, must be zero

string hash: 16 bytes md5
guint32 hash: 0xdeadbeef ^ x ^ (x>>16 | x&0xffff << 16)


Header:

"GnomeKeyring\n\r\0\n"
2 byte version, 1 byte cryto, 1 byte hash

keyring data:

string: keyring name
time_t ctime
time_t mtime
guint32 flags (flag 0 == lock_on_idle)
guint32 lock_timeout
guint32 hash_iterations
byte[8] salt
guint32 reserved[4]

hashed items:

guint32 num_items

num_items *

 guint32 id
 guint32 type
 guint32 num_attributes

 num_attributes *
  string name
  guint32 type
  guint32 int_hash, or string str_hash

guin32 num_encrypted bytes
 encrypted data:
  bytes[16] encryted hash, (for decrypt ok verify)

  num_items *
   string display_name
   string secret
   time_t ctime
   time_t mtime

   string reserved_str
   guint[4] reserved_int2

   guint32 num_attributes
   num_attributes *
    string name
    guint32 type
    guint32 or string val

   guint acl_len
    acl_len *
     guint32 types_allowed
     string display_name
     string pathname
     string reserved_str
     guint32 reserved_uint

  zero padding to make even multiple of 16
