
KEYRING DATABASE FORMAT

03.11.2004: CATEGORIES updated; minimal5.pdb inserted
24.11.2004: CATEGORIES updated
01.12.2004: FIELD inserted
23.09.2005: RECORD ENTRY DESCRIPTOR updated


minimal5.pdb (422 bytes, v2.0-pre1):
0	78	HEADER
78	8	RECORD ENTRY DESCRIPTOR 0
86	2	0x0000
88	276	CATEGORIES
364	20	SALTHASHTYPE
384	x	RECORD_5 0


minimal4.pdb (402 bytes, v1.2.3):
0	78	HEADER
78	8	RECORD ENTRY DESCRIPTOR 0
86	8	RECORD ENTRY DESCRIPTOR 1
94	2	0x0000
96	276	CATEGORIES
372	20	ENCRYPTED RECORD 0 (Password information)
392	10	ENCRYPTED RECORD 1
EOF


HEADER (78 byte):
0	32	name
32	2	flags
34	2	version
36	4	creation time
40	4	modification time
44	4	backup time
48	4	modification number
52	4	application info offset
56	4	sort info offset
60	4	type
64	4	creator
68	4	unique id seed
72	4	0x00
76	2	number of records

RECORD ENTRY DESCRIPTOR (8 byte):
	4	offset
	1	record attributes = (category & 0x0F) | 0x40 {0x50 for first record entry}
	3	unique id

CATEGORIES (276 byte):
	1	0x1F renamed categories = pdpAppInfoOffset (application info offset)
	1	0x1F renamed categories
	256	category labels (16 * 16 bytes) => 15 byte label + \0
	16	unique ids
	1	0x0F last unique id
	1	0x00 padding

ENCRYPTED RECORD:
title + \0 + ENCRYPTED DATA

UNENCRYPTED DATA:
account + \0 + password + \0 + notes + \0 + DateType (2 bytes) + zero padding to multiple of 8 bytes


SALT HASH TYPE (20 bytes):
	8	Salt
	2	Iteration
	2	Cipher /* 0: None, 1: DES-EDE3, 2: AES128, 3: AES256 */
	8	Hash

RECORD_5:
unencrypted:
	FIELD_5	nameField
	IVec		ivec
encrypted:
	FIELD_5	field1
	FIELD_5	field2
	...
	0xff
	0xff
	random padding to multiple of 8 bytes

FIELD_5:
	2	len    /* length of field including header, 0 for last field */
	1	label  /* 0:name,1:account,2:password,3:lastchanged,255:notes */
	1	font   /* Only stdfont(0) allowed */
		data
		0/1 byte padding for next even address


<<<<< Information >>>>>>

http://www.pilot-link.org
- pilot-link-0.11.8\libpisock\pi_file.c

http://gnukeyring.sourceforge.net
- keyring-link-0.1.1/keyring.c
- keyring-link-2.0-pre1/keyring5.c