summary history branches tags files
commit:761fab6c94200c7f2f15ead5eb6597817977ac2f
author:mrmekon
committer:mrmekon
date:Thu Nov 3 19:55:13 2011 -0400
parents:89fa31382e07f92775738b2cc03cda6b1cac3bce
Fingerprint generating works.
diff --git a/simplepgp.xcodeproj/trevor.mode1v3 b/simplepgp.xcodeproj/trevor.mode1v3
line changes: +8/-7
index de15309..a5ca541
--- a/simplepgp.xcodeproj/trevor.mode1v3
+++ b/simplepgp.xcodeproj/trevor.mode1v3
@@ -299,7 +299,7 @@
 							<real>186</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>-1348 610 1095 755 -1680 385 1680 1050 </string>
+						<string>-1193 552 1095 755 -1680 385 1680 1050 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
@@ -329,7 +329,7 @@
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>6926A0F01463428800F69705</string>
+										<string>6926A2CD1463613E00F69705</string>
 										<key>history</key>
 										<array>
 											<string>69868BD11460F42D004C5D9B</string>
@@ -338,8 +338,9 @@
 											<string>69269F5214620FC500F69705</string>
 											<string>69269F5314620FC500F69705</string>
 											<string>69269FBE14623A5A00F69705</string>
-											<string>6926A0EE1463428800F69705</string>
-											<string>6926A0EF1463428800F69705</string>
+											<string>6926A15B146350B600F69705</string>
+											<string>6926A1C81463585300F69705</string>
+											<string>6926A29114635F5E00F69705</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
@@ -353,7 +354,7 @@
 								<key>Frame</key>
 								<string>{{0, 0}, {887, 623}}</string>
 								<key>RubberWindowFrame</key>
-								<string>-1348 610 1095 755 -1680 385 1680 1050 </string>
+								<string>-1193 552 1095 755 -1680 385 1680 1050 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
@@ -373,7 +374,7 @@
 								<key>Frame</key>
 								<string>{{0, 628}, {887, 86}}</string>
 								<key>RubberWindowFrame</key>
-								<string>-1348 610 1095 755 -1680 385 1680 1050 </string>
+								<string>-1193 552 1095 755 -1680 385 1680 1050 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
@@ -543,7 +544,7 @@
 		<string>/Users/trevor/Documents/Cocoa Projects/libsimplepgp/simplepgp.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>-1348 610 1095 755 -1680 385 1680 1050 </string>
+	<string>-1193 552 1095 755 -1680 385 1680 1050 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>

diff --git a/simplepgp.xcodeproj/trevor.pbxuser b/simplepgp.xcodeproj/trevor.pbxuser
line changes: +927/-73
index a19b6ea..60bcfa4
--- a/simplepgp.xcodeproj/trevor.pbxuser
+++ b/simplepgp.xcodeproj/trevor.pbxuser
@@ -9,7 +9,7 @@
 		breakpoints = (
 			69868C9D14618450004C5D9B /* packet.c:9 */,
 			69868EE41461AA6F004C5D9B /* packet.c:207 */,
-			69269F4E14620FC200F69705 /* packet.c:175 */,
+			69269F4E14620FC200F69705 /* packet.c:179 */,
 		);
 		codeSenseManager = 69868AD51460E35F004C5D9B /* Code sense */;
 		perUserDictionary = {
@@ -304,6 +304,83 @@
 			6926A0EE1463428800F69705 /* PBXTextBookmark */ = 6926A0EE1463428800F69705 /* PBXTextBookmark */;
 			6926A0EF1463428800F69705 /* PBXTextBookmark */ = 6926A0EF1463428800F69705 /* PBXTextBookmark */;
 			6926A0F01463428800F69705 /* PBXTextBookmark */ = 6926A0F01463428800F69705 /* PBXTextBookmark */;
+			6926A0FE1463434000F69705 /* PBXTextBookmark */ = 6926A0FE1463434000F69705 /* PBXTextBookmark */;
+			6926A0FF1463434000F69705 /* PBXTextBookmark */ = 6926A0FF1463434000F69705 /* PBXTextBookmark */;
+			6926A1001463434000F69705 /* PBXTextBookmark */ = 6926A1001463434000F69705 /* PBXTextBookmark */;
+			6926A109146348FB00F69705 /* PBXTextBookmark */ = 6926A109146348FB00F69705 /* PBXTextBookmark */;
+			6926A10A146348FB00F69705 /* PBXTextBookmark */ = 6926A10A146348FB00F69705 /* PBXTextBookmark */;
+			6926A10B146348FB00F69705 /* PBXTextBookmark */ = 6926A10B146348FB00F69705 /* PBXTextBookmark */;
+			6926A11B14634A1600F69705 /* PBXTextBookmark */ = 6926A11B14634A1600F69705 /* PBXTextBookmark */;
+			6926A11C14634A1600F69705 /* PBXTextBookmark */ = 6926A11C14634A1600F69705 /* PBXTextBookmark */;
+			6926A11D14634A1600F69705 /* PBXTextBookmark */ = 6926A11D14634A1600F69705 /* PBXTextBookmark */;
+			6926A12614634ACB00F69705 /* PBXTextBookmark */ = 6926A12614634ACB00F69705 /* PBXTextBookmark */;
+			6926A13014634B6900F69705 /* PBXTextBookmark */ = 6926A13014634B6900F69705 /* PBXTextBookmark */;
+			6926A13114634B6900F69705 /* PBXTextBookmark */ = 6926A13114634B6900F69705 /* PBXTextBookmark */;
+			6926A13214634B6900F69705 /* PBXTextBookmark */ = 6926A13214634B6900F69705 /* PBXTextBookmark */;
+			6926A13914634C0A00F69705 /* PBXTextBookmark */ = 6926A13914634C0A00F69705 /* PBXTextBookmark */;
+			6926A13E14634C5000F69705 /* PBXTextBookmark */ = 6926A13E14634C5000F69705 /* PBXTextBookmark */;
+			6926A14414634C9E00F69705 /* PBXTextBookmark */ = 6926A14414634C9E00F69705 /* PBXTextBookmark */;
+			6926A14914634FF400F69705 /* PBXTextBookmark */ = 6926A14914634FF400F69705 /* PBXTextBookmark */;
+			6926A14A14634FF400F69705 /* PBXTextBookmark */ = 6926A14A14634FF400F69705 /* PBXTextBookmark */;
+			6926A14B14634FF400F69705 /* PBXTextBookmark */ = 6926A14B14634FF400F69705 /* PBXTextBookmark */;
+			6926A14F1463503900F69705 /* PBXTextBookmark */ = 6926A14F1463503900F69705 /* PBXTextBookmark */;
+			6926A1551463508400F69705 /* PBXTextBookmark */ = 6926A1551463508400F69705 /* PBXTextBookmark */;
+			6926A1561463508400F69705 /* PBXTextBookmark */ = 6926A1561463508400F69705 /* PBXTextBookmark */;
+			6926A1571463508400F69705 /* PBXTextBookmark */ = 6926A1571463508400F69705 /* PBXTextBookmark */;
+			6926A15B146350B600F69705 /* PBXTextBookmark */ = 6926A15B146350B600F69705 /* PBXTextBookmark */;
+			6926A15C146350B600F69705 /* PBXTextBookmark */ = 6926A15C146350B600F69705 /* PBXTextBookmark */;
+			6926A15D146350B600F69705 /* PBXTextBookmark */ = 6926A15D146350B600F69705 /* PBXTextBookmark */;
+			6926A15E146350B600F69705 /* PBXTextBookmark */ = 6926A15E146350B600F69705 /* PBXTextBookmark */;
+			6926A160146350E300F69705 /* PBXTextBookmark */ = 6926A160146350E300F69705 /* PBXTextBookmark */;
+			6926A1621463511900F69705 /* PBXTextBookmark */ = 6926A1621463511900F69705 /* PBXTextBookmark */;
+			6926A1661463513900F69705 /* PBXTextBookmark */ = 6926A1661463513900F69705 /* PBXTextBookmark */;
+			6926A16A1463517900F69705 /* PBXTextBookmark */ = 6926A16A1463517900F69705 /* PBXTextBookmark */;
+			6926A1701463518E00F69705 /* PBXTextBookmark */ = 6926A1701463518E00F69705 /* PBXTextBookmark */;
+			6926A1771463520200F69705 /* PBXTextBookmark */ = 6926A1771463520200F69705 /* PBXTextBookmark */;
+			6926A17C1463521400F69705 /* PBXTextBookmark */ = 6926A17C1463521400F69705 /* PBXTextBookmark */;
+			6926A1831463522C00F69705 /* PBXTextBookmark */ = 6926A1831463522C00F69705 /* PBXTextBookmark */;
+			6926A18A1463560A00F69705 /* PBXTextBookmark */ = 6926A18A1463560A00F69705 /* PBXTextBookmark */;
+			6926A18B1463560A00F69705 /* PBXTextBookmark */ = 6926A18B1463560A00F69705 /* PBXTextBookmark */;
+			6926A18C1463560A00F69705 /* PBXTextBookmark */ = 6926A18C1463560A00F69705 /* PBXTextBookmark */;
+			6926A1951463569500F69705 /* PBXTextBookmark */ = 6926A1951463569500F69705 /* PBXTextBookmark */;
+			6926A19C1463574C00F69705 /* PBXTextBookmark */ = 6926A19C1463574C00F69705 /* PBXTextBookmark */;
+			6926A19D1463574C00F69705 /* PBXTextBookmark */ = 6926A19D1463574C00F69705 /* PBXTextBookmark */;
+			6926A19E1463574C00F69705 /* PBXTextBookmark */ = 6926A19E1463574C00F69705 /* PBXTextBookmark */;
+			6926A1A51463576100F69705 /* PBXTextBookmark */ = 6926A1A51463576100F69705 /* PBXTextBookmark */;
+			6926A1AC1463578B00F69705 /* PBXTextBookmark */ = 6926A1AC1463578B00F69705 /* PBXTextBookmark */;
+			6926A1B3146357A900F69705 /* PBXTextBookmark */ = 6926A1B3146357A900F69705 /* PBXTextBookmark */;
+			6926A1C81463585300F69705 /* PBXTextBookmark */ = 6926A1C81463585300F69705 /* PBXTextBookmark */;
+			6926A1C91463585300F69705 /* PBXTextBookmark */ = 6926A1C91463585300F69705 /* PBXTextBookmark */;
+			6926A1CA1463585300F69705 /* PBXTextBookmark */ = 6926A1CA1463585300F69705 /* PBXTextBookmark */;
+			6926A1D0146358C100F69705 /* PBXTextBookmark */ = 6926A1D0146358C100F69705 /* PBXTextBookmark */;
+			6926A1D1146358C100F69705 /* PBXTextBookmark */ = 6926A1D1146358C100F69705 /* PBXTextBookmark */;
+			6926A1D71463595400F69705 /* PBXTextBookmark */ = 6926A1D71463595400F69705 /* PBXTextBookmark */;
+			6926A1E1146359AE00F69705 /* PBXTextBookmark */ = 6926A1E1146359AE00F69705 /* PBXTextBookmark */;
+			6926A1E6146359BE00F69705 /* PBXTextBookmark */ = 6926A1E6146359BE00F69705 /* PBXTextBookmark */;
+			6926A1F314635B3B00F69705 /* PBXTextBookmark */ = 6926A1F314635B3B00F69705 /* PBXTextBookmark */;
+			6926A1FA14635B4E00F69705 /* PBXTextBookmark */ = 6926A1FA14635B4E00F69705 /* PBXTextBookmark */;
+			6926A20A14635B7E00F69705 /* PBXTextBookmark */ = 6926A20A14635B7E00F69705 /* PBXTextBookmark */;
+			6926A21B14635B9D00F69705 /* PBXTextBookmark */ = 6926A21B14635B9D00F69705 /* PBXTextBookmark */;
+			6926A22E14635BE700F69705 /* PBXTextBookmark */ = 6926A22E14635BE700F69705 /* PBXTextBookmark */;
+			6926A23E14635C4500F69705 /* PBXTextBookmark */ = 6926A23E14635C4500F69705 /* PBXTextBookmark */;
+			6926A24B14635C6E00F69705 /* PBXTextBookmark */ = 6926A24B14635C6E00F69705 /* PBXTextBookmark */;
+			6926A25C14635CF500F69705 /* PBXTextBookmark */ = 6926A25C14635CF500F69705 /* PBXTextBookmark */;
+			6926A26714635D4A00F69705 /* PBXTextBookmark */ = 6926A26714635D4A00F69705 /* PBXTextBookmark */;
+			6926A26D14635D8200F69705 /* PBXTextBookmark */ = 6926A26D14635D8200F69705 /* PBXTextBookmark */;
+			6926A27314635DEA00F69705 /* PBXTextBookmark */ = 6926A27314635DEA00F69705 /* PBXTextBookmark */;
+			6926A28114635EEC00F69705 /* PBXTextBookmark */ = 6926A28114635EEC00F69705 /* PBXTextBookmark */;
+			6926A28A14635EF900F69705 /* PBXTextBookmark */ = 6926A28A14635EF900F69705 /* PBXTextBookmark */;
+			6926A28B14635EF900F69705 /* PBXTextBookmark */ = 6926A28B14635EF900F69705 /* PBXTextBookmark */;
+			6926A29114635F5E00F69705 /* PBXTextBookmark */ = 6926A29114635F5E00F69705 /* PBXTextBookmark */;
+			6926A29214635F5E00F69705 /* PBXTextBookmark */ = 6926A29214635F5E00F69705 /* PBXTextBookmark */;
+			6926A29914635FBD00F69705 /* PBXTextBookmark */ = 6926A29914635FBD00F69705 /* PBXTextBookmark */;
+			6926A2A214635FF000F69705 /* PBXTextBookmark */ = 6926A2A214635FF000F69705 /* PBXTextBookmark */;
+			6926A2AB1463601300F69705 /* PBXTextBookmark */ = 6926A2AB1463601300F69705 /* PBXTextBookmark */;
+			6926A2B21463603600F69705 /* PBXTextBookmark */ = 6926A2B21463603600F69705 /* PBXTextBookmark */;
+			6926A2B91463605A00F69705 /* PBXTextBookmark */ = 6926A2B91463605A00F69705 /* PBXTextBookmark */;
+			6926A2BC1463607D00F69705 /* PBXTextBookmark */ = 6926A2BC1463607D00F69705 /* PBXTextBookmark */;
+			6926A2C4146360ED00F69705 /* PBXTextBookmark */ = 6926A2C4146360ED00F69705 /* PBXTextBookmark */;
+			6926A2CD1463613E00F69705 /* PBXTextBookmark */ = 6926A2CD1463613E00F69705 /* PBXTextBookmark */;
 			69868BD11460F42D004C5D9B = 69868BD11460F42D004C5D9B /* PBXTextBookmark */;
 			69868BD91460F468004C5D9B = 69868BD91460F468004C5D9B /* PBXTextBookmark */;
 			69868C931460F7C3004C5D9B = 69868C931460F7C3004C5D9B /* PBXTextBookmark */;
@@ -2044,19 +2121,19 @@
 	};
 	69269F2314620D0F00F69705 /* packet.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {826, 8840}}";
-			sepNavSelRange = "{12828, 0}";
-			sepNavVisRange = "{12198, 1453}";
+			sepNavIntBoundsRect = "{{0, 0}, {826, 10283}}";
+			sepNavSelRange = "{13453, 0}";
+			sepNavVisRange = "{13421, 1351}";
 		};
 	};
 	69269F2414620D0F00F69705 /* packet.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {826, 1989}}";
-			sepNavSelRange = "{855, 0}";
-			sepNavVisRange = "{865, 740}";
+			sepNavIntBoundsRect = "{{0, 0}, {826, 1911}}";
+			sepNavSelRange = "{1291, 0}";
+			sepNavVisRange = "{834, 852}";
 		};
 	};
-	69269F4E14620FC200F69705 /* packet.c:175 */ = {
+	69269F4E14620FC200F69705 /* packet.c:179 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
 		);
@@ -2068,9 +2145,9 @@
 		functionName = "spgp_decode_message()";
 		hitCount = 0;
 		ignoreCount = 0;
-		lineNumber = 175;
+		lineNumber = 179;
 		location = duckdog;
-		modificationTime = 342028224.343937;
+		modificationTime = 342057198.551;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -2099,7 +2176,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 168";
 		rLen = 0;
-		rLoc = 5131;
+		rLoc = 5341;
 		rType = 0;
 		vrLen = 1715;
 		vrLoc = 3704;
@@ -2109,7 +2186,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 168";
 		rLen = 0;
-		rLoc = 5131;
+		rLoc = 5341;
 		rType = 0;
 		vrLen = 1715;
 		vrLoc = 3704;
@@ -2119,7 +2196,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 168";
 		rLen = 0;
-		rLoc = 5131;
+		rLoc = 5341;
 		rType = 0;
 		vrLen = 1715;
 		vrLoc = 3704;
@@ -2129,7 +2206,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 171";
 		rLen = 0;
-		rLoc = 5217;
+		rLoc = 5427;
 		rType = 0;
 		vrLen = 1762;
 		vrLoc = 3553;
@@ -2139,7 +2216,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 171";
 		rLen = 0;
-		rLoc = 5217;
+		rLoc = 5427;
 		rType = 0;
 		vrLen = 1762;
 		vrLoc = 3553;
@@ -2149,7 +2226,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 168";
 		rLen = 0;
-		rLoc = 5131;
+		rLoc = 5341;
 		rType = 0;
 		vrLen = 1766;
 		vrLoc = 3553;
@@ -2159,7 +2236,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 59";
 		rLen = 7;
-		rLoc = 1663;
+		rLoc = 1533;
 		rType = 0;
 		vrLen = 1144;
 		vrLoc = 313;
@@ -2169,7 +2246,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 209";
 		rLen = 0;
-		rLoc = 6367;
+		rLoc = 6593;
 		rType = 0;
 		vrLen = 1536;
 		vrLoc = 4539;
@@ -2179,7 +2256,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 197";
 		rLen = 0;
-		rLoc = 5913;
+		rLoc = 6123;
 		rType = 0;
 		vrLen = 1317;
 		vrLoc = 5272;
@@ -2189,7 +2266,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 200";
 		rLen = 0;
-		rLoc = 6053;
+		rLoc = 6263;
 		rType = 0;
 		vrLen = 1337;
 		vrLoc = 5272;
@@ -2199,7 +2276,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 235";
 		rLen = 0;
-		rLoc = 7104;
+		rLoc = 7330;
 		rType = 0;
 		vrLen = 1333;
 		vrLoc = 5302;
@@ -2209,7 +2286,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 211";
 		rLen = 0;
-		rLoc = 6327;
+		rLoc = 6553;
 		rType = 0;
 		vrLen = 1370;
 		vrLoc = 5279;
@@ -2219,7 +2296,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 167";
 		rLen = 0;
-		rLoc = 5131;
+		rLoc = 5341;
 		rType = 0;
 		vrLen = 1805;
 		vrLoc = 4194;
@@ -2239,7 +2316,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 379";
 		rLen = 0;
-		rLoc = 11752;
+		rLoc = 11978;
 		rType = 0;
 		vrLen = 1458;
 		vrLoc = 10100;
@@ -2249,7 +2326,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 382";
 		rLen = 0;
-		rLoc = 12197;
+		rLoc = 12423;
 		rType = 0;
 		vrLen = 1447;
 		vrLoc = 10529;
@@ -2279,7 +2356,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 369";
 		rLen = 0;
-		rLoc = 11345;
+		rLoc = 11571;
 		rType = 0;
 		vrLen = 1552;
 		vrLoc = 10245;
@@ -2289,7 +2366,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 390";
 		rLen = 0;
-		rLoc = 11752;
+		rLoc = 11978;
 		rType = 0;
 		vrLen = 1554;
 		vrLoc = 10245;
@@ -2309,7 +2386,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 376";
 		rLen = 0;
-		rLoc = 11812;
+		rLoc = 12038;
 		rType = 0;
 		vrLen = 1419;
 		vrLoc = 10245;
@@ -2319,7 +2396,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 383";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1448;
 		vrLoc = 10536;
@@ -2329,7 +2406,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 156";
 		rLen = 0;
-		rLoc = 4522;
+		rLoc = 4732;
 		rType = 0;
 		vrLen = 1441;
 		vrLoc = 10487;
@@ -2339,7 +2416,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 389";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1430;
 		vrLoc = 10361;
@@ -2349,7 +2426,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 389";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1431;
 		vrLoc = 10361;
@@ -2359,7 +2436,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 389";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1431;
 		vrLoc = 10361;
@@ -2369,7 +2446,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 389";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1658;
 		vrLoc = 14213;
@@ -2379,7 +2456,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 389";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1658;
 		vrLoc = 14213;
@@ -2389,7 +2466,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 500";
 		rLen = 0;
-		rLoc = 16147;
+		rLoc = 18748;
 		rType = 0;
 		vrLen = 1664;
 		vrLoc = 14213;
@@ -2399,7 +2476,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 500";
 		rLen = 0;
-		rLoc = 16147;
+		rLoc = 18748;
 		rType = 0;
 		vrLen = 1664;
 		vrLoc = 14213;
@@ -2409,7 +2486,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 500";
 		rLen = 0;
-		rLoc = 16147;
+		rLoc = 18748;
 		rType = 0;
 		vrLen = 1377;
 		vrLoc = 10784;
@@ -2419,7 +2496,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 377";
 		rLen = 0;
-		rLoc = 11381;
+		rLoc = 11607;
 		rType = 0;
 		vrLen = 1425;
 		vrLoc = 10784;
@@ -2429,7 +2506,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 158";
 		rLen = 0;
-		rLoc = 4522;
+		rLoc = 4732;
 		rType = 0;
 		vrLen = 1595;
 		vrLoc = 3882;
@@ -2439,7 +2516,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 386";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1542;
 		vrLoc = 10812;
@@ -2449,7 +2526,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 385";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1588;
 		vrLoc = 10812;
@@ -2459,7 +2536,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 385";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1590;
 		vrLoc = 10812;
@@ -2469,7 +2546,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 385";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1591;
 		vrLoc = 10812;
@@ -2479,7 +2556,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 385";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1591;
 		vrLoc = 10812;
@@ -2489,7 +2566,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 380";
 		rLen = 0;
-		rLoc = 11829;
+		rLoc = 12055;
 		rType = 0;
 		vrLen = 1542;
 		vrLoc = 10812;
@@ -2499,7 +2576,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 387";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1543;
 		vrLoc = 10812;
@@ -2509,7 +2586,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 387";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1542;
 		vrLoc = 10812;
@@ -2519,7 +2596,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 385";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1578;
 		vrLoc = 10812;
@@ -2529,7 +2606,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 386";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1542;
 		vrLoc = 10812;
@@ -2549,7 +2626,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 379";
 		rLen = 0;
-		rLoc = 11345;
+		rLoc = 11571;
 		rType = 0;
 		vrLen = 1398;
 		vrLoc = 10541;
@@ -2559,7 +2636,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 390";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1408;
 		vrLoc = 10541;
@@ -2569,7 +2646,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 387";
 		rLen = 0;
-		rLoc = 11951;
+		rLoc = 12177;
 		rType = 0;
 		vrLen = 1395;
 		vrLoc = 10541;
@@ -2579,7 +2656,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 387";
 		rLen = 0;
-		rLoc = 11951;
+		rLoc = 12177;
 		rType = 0;
 		vrLen = 1400;
 		vrLoc = 10541;
@@ -2589,7 +2666,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 388";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1398;
 		vrLoc = 10541;
@@ -2599,7 +2676,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 388";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1412;
 		vrLoc = 10541;
@@ -2609,7 +2686,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 388";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1412;
 		vrLoc = 10541;
@@ -2619,7 +2696,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 388";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1442;
 		vrLoc = 10541;
@@ -2639,7 +2716,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 388";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1442;
 		vrLoc = 10541;
@@ -2649,7 +2726,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 394";
 		rLen = 0;
-		rLoc = 12064;
+		rLoc = 12290;
 		rType = 0;
 		vrLen = 1443;
 		vrLoc = 10541;
@@ -2669,7 +2746,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 233";
 		rLen = 0;
-		rLoc = 6814;
+		rLoc = 7040;
 		rType = 0;
 		vrLen = 1202;
 		vrLoc = 5740;
@@ -2679,7 +2756,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 408";
 		rLen = 0;
-		rLoc = 12105;
+		rLoc = 12331;
 		rType = 0;
 		vrLen = 1545;
 		vrLoc = 11119;
@@ -2689,7 +2766,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 408";
 		rLen = 0;
-		rLoc = 12188;
+		rLoc = 12414;
 		rType = 0;
 		vrLen = 1553;
 		vrLoc = 11119;
@@ -2699,7 +2776,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 520";
 		rLen = 0;
-		rLoc = 16147;
+		rLoc = 18748;
 		rType = 0;
 		vrLen = 1557;
 		vrLoc = 14733;
@@ -2709,7 +2786,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 498";
 		rLen = 0;
-		rLoc = 15376;
+		rLoc = 17841;
 		rType = 0;
 		vrLen = 1552;
 		vrLoc = 14619;
@@ -2719,7 +2796,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 402";
 		rLen = 0;
-		rLoc = 11884;
+		rLoc = 12110;
 		rType = 0;
 		vrLen = 1394;
 		vrLoc = 11116;
@@ -2729,7 +2806,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 421";
 		rLen = 0;
-		rLoc = 12560;
+		rLoc = 14924;
 		rType = 0;
 		vrLen = 1533;
 		vrLoc = 11555;
@@ -2739,7 +2816,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 421";
 		rLen = 0;
-		rLoc = 12560;
+		rLoc = 14924;
 		rType = 0;
 		vrLen = 1481;
 		vrLoc = 11607;
@@ -2749,7 +2826,7 @@
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 68";
 		rLen = 0;
-		rLoc = 1717;
+		rLoc = 1587;
 		rType = 0;
 		vrLen = 787;
 		vrLoc = 785;
@@ -2779,7 +2856,7 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 421";
 		rLen = 0;
-		rLoc = 12560;
+		rLoc = 14924;
 		rType = 0;
 		vrLen = 1449;
 		vrLoc = 11882;
@@ -2789,11 +2866,781 @@
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 431";
 		rLen = 0;
-		rLoc = 12828;
+		rLoc = 15308;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 12198;
 	};
+	6926A0FE1463434000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 37";
+		rLen = 0;
+		rLoc = 855;
+		rType = 0;
+		vrLen = 764;
+		vrLoc = 865;
+	};
+	6926A0FF1463434000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 209";
+		rLen = 0;
+		rLoc = 6296;
+		rType = 0;
+		vrLen = 1189;
+		vrLoc = 5552;
+	};
+	6926A1001463434000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 217";
+		rLen = 0;
+		rLoc = 6545;
+		rType = 0;
+		vrLen = 1196;
+		vrLoc = 5552;
+	};
+	6926A109146348FB00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 66";
+		rLen = 0;
+		rLoc = 1355;
+		rType = 0;
+		vrLen = 927;
+		vrLoc = 161;
+	};
+	6926A10A146348FB00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 420";
+		rLen = 0;
+		rLoc = 14610;
+		rType = 0;
+		vrLen = 1439;
+		vrLoc = 11208;
+	};
+	6926A10B146348FB00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 682";
+		rLen = 162;
+		rLoc = 22669;
+		rType = 0;
+		vrLen = 1147;
+		vrLoc = 20107;
+	};
+	6926A11B14634A1600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 66";
+		rLen = 0;
+		rLoc = 1355;
+		rType = 0;
+		vrLen = 804;
+		vrLoc = 739;
+	};
+	6926A11C14634A1600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 427";
+		rLen = 0;
+		rLoc = 13333;
+		rType = 0;
+		vrLen = 1251;
+		vrLoc = 11759;
+	};
+	6926A11D14634A1600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 550";
+		rLen = 0;
+		rLoc = 18710;
+		rType = 0;
+		vrLen = 1460;
+		vrLoc = 16196;
+	};
+	6926A12614634ACB00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 429";
+		rLen = 0;
+		rLoc = 13028;
+		rType = 0;
+		vrLen = 1246;
+		vrLoc = 11884;
+	};
+	6926A13014634B6900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 66";
+		rLen = 0;
+		rLoc = 1355;
+		rType = 0;
+		vrLen = 942;
+		vrLoc = 1407;
+	};
+	6926A13114634B6900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 462";
+		rLen = 0;
+		rLoc = 15254;
+		rType = 0;
+		vrLen = 1560;
+		vrLoc = 8486;
+	};
+	6926A13214634B6900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 429";
+		rLen = 0;
+		rLoc = 13015;
+		rType = 0;
+		vrLen = 1235;
+		vrLoc = 12111;
+	};
+	6926A13914634C0A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 435";
+		rLen = 0;
+		rLoc = 13155;
+		rType = 0;
+		vrLen = 1218;
+		vrLoc = 12111;
+	};
+	6926A13E14634C5000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 441";
+		rLen = 0;
+		rLoc = 13375;
+		rType = 0;
+		vrLen = 1228;
+		vrLoc = 12474;
+	};
+	6926A14414634C9E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 567";
+		rLen = 0;
+		rLoc = 18665;
+		rType = 0;
+		vrLen = 1522;
+		vrLoc = 16617;
+	};
+	6926A14914634FF400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 62";
+		rLen = 0;
+		rLoc = 1266;
+		rType = 0;
+		vrLen = 862;
+		vrLoc = 804;
+	};
+	6926A14A14634FF400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 450";
+		rLen = 0;
+		rLoc = 13902;
+		rType = 0;
+		vrLen = 1106;
+		vrLoc = 12333;
+	};
+	6926A14B14634FF400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 450";
+		rLen = 0;
+		rLoc = 13902;
+		rType = 0;
+		vrLen = 1153;
+		vrLoc = 12472;
+	};
+	6926A14F1463503900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 451";
+		rLen = 0;
+		rLoc = 14107;
+		rType = 0;
+		vrLen = 1180;
+		vrLoc = 12474;
+	};
+	6926A1551463508400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 90";
+		rLen = 0;
+		rLoc = 1842;
+		rType = 0;
+		vrLen = 927;
+		vrLoc = 1499;
+	};
+	6926A1561463508400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 426";
+		rLen = 0;
+		rLoc = 12730;
+		rType = 0;
+		vrLen = 1174;
+		vrLoc = 12474;
+	};
+	6926A1571463508400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 455";
+		rLen = 0;
+		rLoc = 14594;
+		rType = 0;
+		vrLen = 1106;
+		vrLoc = 12474;
+	};
+	6926A15B146350B600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69868BC91460F386004C5D9B /* gcrypt.h */;
+		name = "gcrypt.h: 75";
+		rLen = 0;
+		rLoc = 2337;
+		rType = 0;
+		vrLen = 1486;
+		vrLoc = 41191;
+	};
+	6926A15C146350B600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 90";
+		rLen = 0;
+		rLoc = 1842;
+		rType = 0;
+		vrLen = 927;
+		vrLoc = 1499;
+	};
+	6926A15D146350B600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 11";
+		rLen = 0;
+		rLoc = 172;
+		rType = 0;
+		vrLen = 877;
+		vrLoc = 0;
+	};
+	6926A15E146350B600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 453";
+		rLen = 0;
+		rLoc = 13902;
+		rType = 0;
+		vrLen = 1102;
+		vrLoc = 12474;
+	};
+	6926A160146350E300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 455";
+		rLen = 0;
+		rLoc = 14149;
+		rType = 0;
+		vrLen = 1048;
+		vrLoc = 12474;
+	};
+	6926A1621463511900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 460";
+		rLen = 0;
+		rLoc = 14450;
+		rType = 0;
+		vrLen = 1059;
+		vrLoc = 12538;
+	};
+	6926A1661463513900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 461";
+		rLen = 0;
+		rLoc = 14433;
+		rType = 0;
+		vrLen = 1220;
+		vrLoc = 13027;
+	};
+	6926A16A1463517900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 458";
+		rLen = 0;
+		rLoc = 14382;
+		rType = 0;
+		vrLen = 1093;
+		vrLoc = 12627;
+	};
+	6926A1701463518E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 423";
+		rLen = 0;
+		rLoc = 12666;
+		rType = 0;
+		vrLen = 1165;
+		vrLoc = 12475;
+	};
+	6926A1771463520200F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 452";
+		rLen = 0;
+		rLoc = 13418;
+		rType = 0;
+		vrLen = 1105;
+		vrLoc = 12627;
+	};
+	6926A17C1463521400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 455";
+		rLen = 0;
+		rLoc = 13418;
+		rType = 0;
+		vrLen = 1114;
+		vrLoc = 12627;
+	};
+	6926A1831463522C00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 455";
+		rLen = 0;
+		rLoc = 13418;
+		rType = 0;
+		vrLen = 1115;
+		vrLoc = 12627;
+	};
+	6926A18A1463560A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 90";
+		rLen = 0;
+		rLoc = 1842;
+		rType = 0;
+		vrLen = 902;
+		vrLoc = 711;
+	};
+	6926A18B1463560A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 431";
+		rLen = 0;
+		rLoc = 12842;
+		rType = 0;
+		vrLen = 1102;
+		vrLoc = 12608;
+	};
+	6926A18C1463560A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 472";
+		rLen = 0;
+		rLoc = 13972;
+		rType = 0;
+		vrLen = 1064;
+		vrLoc = 13301;
+	};
+	6926A1951463569500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 469";
+		rLen = 0;
+		rLoc = 14066;
+		rType = 0;
+		vrLen = 1073;
+		vrLoc = 12919;
+	};
+	6926A19C1463574C00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 56";
+		rLen = 12;
+		rLoc = 1145;
+		rType = 0;
+		vrLen = 874;
+		vrLoc = 739;
+	};
+	6926A19D1463574C00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 469";
+		rLen = 0;
+		rLoc = 14066;
+		rType = 0;
+		vrLen = 1153;
+		vrLoc = 12636;
+	};
+	6926A19E1463574C00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 465";
+		rLen = 0;
+		rLoc = 13854;
+		rType = 0;
+		vrLen = 1342;
+		vrLoc = 12868;
+	};
+	6926A1A51463576100F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 467";
+		rLen = 0;
+		rLoc = 13902;
+		rType = 0;
+		vrLen = 1273;
+		vrLoc = 12868;
+	};
+	6926A1AC1463578B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 466";
+		rLen = 0;
+		rLoc = 13896;
+		rType = 0;
+		vrLen = 1185;
+		vrLoc = 12957;
+	};
+	6926A1B3146357A900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 459";
+		rLen = 0;
+		rLoc = 13580;
+		rType = 0;
+		vrLen = 1192;
+		vrLoc = 12957;
+	};
+	6926A1C81463585300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 63";
+		rLen = 0;
+		rLoc = 1291;
+		rType = 0;
+		vrLen = 852;
+		vrLoc = 834;
+	};
+	6926A1C91463585300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 459";
+		rLen = 0;
+		rLoc = 13580;
+		rType = 0;
+		vrLen = 1155;
+		vrLoc = 13024;
+	};
+	6926A1CA1463585300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 463";
+		rLen = 0;
+		rLoc = 13752;
+		rType = 0;
+		vrLen = 1155;
+		vrLoc = 13024;
+	};
+	6926A1D0146358C100F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 769";
+		rLen = 0;
+		rLoc = 23073;
+		rType = 0;
+		vrLen = 1069;
+		vrLoc = 22396;
+	};
+	6926A1D1146358C100F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 769";
+		rLen = 0;
+		rLoc = 23073;
+		rType = 0;
+		vrLen = 1099;
+		vrLoc = 22366;
+	};
+	6926A1D71463595400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 775";
+		rLen = 0;
+		rLoc = 23292;
+		rType = 0;
+		vrLen = 1068;
+		vrLoc = 22357;
+	};
+	6926A1E1146359AE00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 775";
+		rLen = 0;
+		rLoc = 23292;
+		rType = 0;
+		vrLen = 1068;
+		vrLoc = 22357;
+	};
+	6926A1E6146359BE00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 775";
+		rLen = 0;
+		rLoc = 23292;
+		rType = 0;
+		vrLen = 1068;
+		vrLoc = 22357;
+	};
+	6926A1F314635B3B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 489";
+		rLen = 0;
+		rLoc = 14594;
+		rType = 0;
+		vrLen = 1124;
+		vrLoc = 13260;
+	};
+	6926A1FA14635B4E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 489";
+		rLen = 0;
+		rLoc = 14594;
+		rType = 0;
+		vrLen = 1124;
+		vrLoc = 13260;
+	};
+	6926A20A14635B7E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 460";
+		rLen = 0;
+		rLoc = 13546;
+		rType = 0;
+		vrLen = 1124;
+		vrLoc = 13260;
+	};
+	6926A21B14635B9D00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 468";
+		rLen = 0;
+		rLoc = 13902;
+		rType = 0;
+		vrLen = 1124;
+		vrLoc = 13260;
+	};
+	6926A22E14635BE700F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 469";
+		rLen = 0;
+		rLoc = 13964;
+		rType = 0;
+		vrLen = 1242;
+		vrLoc = 12919;
+	};
+	6926A23E14635C4500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 782";
+		rLen = 0;
+		rLoc = 23440;
+		rType = 0;
+		vrLen = 1072;
+		vrLoc = 22386;
+	};
+	6926A24B14635C6E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 470";
+		rLen = 0;
+		rLoc = 13964;
+		rType = 0;
+		vrLen = 1108;
+		vrLoc = 13491;
+	};
+	6926A25C14635CF500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 462";
+		rLen = 0;
+		rLoc = 13699;
+		rType = 0;
+		vrLen = 1167;
+		vrLoc = 13436;
+	};
+	6926A26714635D4A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 459";
+		rLen = 0;
+		rLoc = 13565;
+		rType = 0;
+		vrLen = 1084;
+		vrLoc = 13292;
+	};
+	6926A26D14635D8200F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 482";
+		rLen = 0;
+		rLoc = 14424;
+		rType = 0;
+		vrLen = 1084;
+		vrLoc = 13292;
+	};
+	6926A27314635DEA00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 471";
+		rLen = 0;
+		rLoc = 13991;
+		rType = 0;
+		vrLen = 1084;
+		vrLoc = 13292;
+	};
+	6926A28114635EEC00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 507";
+		rLen = 0;
+		rLoc = 14404;
+		rType = 0;
+		vrLen = 1058;
+		vrLoc = 14071;
+	};
+	6926A28A14635EF900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 507";
+		rLen = 0;
+		rLoc = 14404;
+		rType = 0;
+		vrLen = 1122;
+		vrLoc = 13911;
+	};
+	6926A28B14635EF900F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 507";
+		rLen = 0;
+		rLoc = 14404;
+		rType = 0;
+		vrLen = 1122;
+		vrLoc = 13911;
+	};
+	6926A29114635F5E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 494";
+		rLen = 0;
+		rLoc = 14093;
+		rType = 0;
+		vrLen = 1540;
+		vrLoc = 15275;
+	};
+	6926A29214635F5E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 494";
+		rLen = 0;
+		rLoc = 14093;
+		rType = 0;
+		vrLen = 1540;
+		vrLoc = 15275;
+	};
+	6926A29914635FBD00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 486";
+		rLen = 0;
+		rLoc = 13854;
+		rType = 0;
+		vrLen = 1333;
+		vrLoc = 13359;
+	};
+	6926A2A214635FF000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 511";
+		rLen = 0;
+		rLoc = 14382;
+		rType = 0;
+		vrLen = 1003;
+		vrLoc = 14064;
+	};
+	6926A2AB1463601300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 426";
+		rLen = 0;
+		rLoc = 12687;
+		rType = 0;
+		vrLen = 1196;
+		vrLoc = 13710;
+	};
+	6926A2B21463603600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 485";
+		rLen = 0;
+		rLoc = 14557;
+		rType = 0;
+		vrLen = 1183;
+		vrLoc = 13591;
+	};
+	6926A2B91463605A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 481";
+		rLen = 0;
+		rLoc = 14397;
+		rType = 0;
+		vrLen = 1194;
+		vrLoc = 13591;
+	};
+	6926A2BC1463607D00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 478";
+		rLen = 0;
+		rLoc = 14382;
+		rType = 0;
+		vrLen = 1292;
+		vrLoc = 13301;
+	};
+	6926A2C4146360ED00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 479";
+		rLen = 0;
+		rLoc = 14183;
+		rType = 0;
+		vrLen = 1285;
+		vrLoc = 13495;
+	};
+	6926A2CD1463613E00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 456";
+		rLen = 0;
+		rLoc = 13453;
+		rType = 0;
+		vrLen = 1351;
+		vrLoc = 13421;
+	};
 	69868AD41460E35F004C5D9B /* Source Control */ = {
 		isa = PBXSourceControlManager;
 		fallbackIsa = XCSourceControlManager;
@@ -2849,6 +3696,13 @@
 			sepNavVisRange = "{0, 824}";
 		};
 	};
+	69868BC91460F386004C5D9B /* gcrypt.h */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {826, 23972}}";
+			sepNavSelRange = "{2337, 0}";
+			sepNavVisRange = "{41191, 1486}";
+		};
+	};
 	69868BD11460F42D004C5D9B /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 69868BC61460F37E004C5D9B /* gpg-error.h */;
@@ -2899,7 +3753,7 @@
 		ignoreCount = 0;
 		lineNumber = 9;
 		location = duckdog;
-		modificationTime = 342028224.342515;
+		modificationTime = 342057198.549462;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -2977,7 +3831,7 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 207;
-		modificationTime = 342028224.343386;
+		modificationTime = 342057198.550455;
 		originalNumberOfMultipleMatches = 0;
 		state = 2;
 	};

diff --git a/src/packet.c b/src/packet.c
line changes: +126/-30
index 186d67a..5995b20
--- a/src/packet.c
+++ b/src/packet.c
@@ -70,10 +70,14 @@ static uint8_t spgp_parse_header(uint8_t *msg, uint32_t *idx,
 
 static uint8_t spgp_parse_user_id(uint8_t *msg, uint32_t *idx, 
           												uint32_t length, spgp_packet_t *pkt);
-                                                              
+                                      
+static uint8_t spgp_generate_fingerprint(spgp_packet_t *pkt);
+                                                                                      
 static uint8_t spgp_parse_secret_key(uint8_t *msg, uint32_t *idx, 
           													 uint32_t length, spgp_packet_t *pkt);
-                                     
+                          
+static uint32_t spgp_mpi_length(uint8_t *mpi);
+                                                
 static spgp_mpi_t *spgp_read_mpi(uint8_t *msg, uint32_t *idx,
 														 uint32_t length);
                              
@@ -206,15 +210,15 @@ void spgp_free_packet(spgp_packet_t **pkt) {
   if (((*pkt)->header->type == PKT_TYPE_SECRET_KEY ||
   		(*pkt)->header->type == PKT_TYPE_SECRET_SUBKEY) &&
       (*pkt)->c.secret != NULL) {
-  	if ((*pkt)->c.secret->mpiCount > 0) {
-    	curMpi = (*pkt)->c.secret->mpiHead;
+  	if ((*pkt)->c.secret->pub.mpiCount > 0) {
+    	curMpi = (*pkt)->c.secret->pub.mpiHead;
       while (curMpi->next) {
       	nextMpi = curMpi->next;
         free(curMpi);
         curMpi = nextMpi;
       }
-      (*pkt)->c.secret->mpiHead = NULL;
-      (*pkt)->c.secret->mpiCount = 0;
+      (*pkt)->c.secret->pub.mpiHead = NULL;
+      (*pkt)->c.secret->pub.mpiCount = 0;
     }
     if ((*pkt)->c.secret->s2kSalt) {
     	free((*pkt)->c.secret->s2kSalt);
@@ -411,6 +415,85 @@ static uint8_t spgp_parse_user_id(uint8_t *msg, uint32_t *idx,
 	return 0;                                     
 }
 
+static uint8_t spgp_generate_fingerprint(spgp_packet_t *pkt) {
+	uint16_t packetSize;
+  uint8_t packetHeaderSize;
+  spgp_mpi_t *curMpi;
+  uint8_t targetMpiCount;
+  gcry_md_hd_t md;
+  unsigned char *hash;
+  int i;
+  
+  if (NULL == pkt) RAISE(INVALID_ARGS);
+  
+  // Start with header info: 1 version, 4 creation time, 1 algorithm
+  packetHeaderSize = sizeof(pkt->c.pub->version) +
+  	sizeof(pkt->c.pub->creationTime) +
+    sizeof(pkt->c.pub->asymAlgo);
+  packetSize = packetHeaderSize;
+
+  // Figure out how many MPIs to add
+  switch(pkt->c.pub->asymAlgo) {
+  	case ASYM_ALGO_DSA:
+    	targetMpiCount = 4;
+      break;
+    case ASYM_ALGO_ELGAMAL:
+    	targetMpiCount = 3;
+      break;
+    default:
+    	RAISE(FORMAT_UNSUPPORTED);
+  }
+  
+  // Add size of each MPI
+  curMpi = pkt->c.pub->mpiHead;
+  i = 0;
+  while (curMpi && i < targetMpiCount) {
+  	packetSize += curMpi->count + 2; // add 2 for MPI header
+		curMpi = curMpi->next;
+    i++;
+  }
+      
+  // Give data to hash to gcrypt
+	if (gcry_md_open (&md, GCRY_MD_SHA1, 0) > 0) RAISE(GCRY_ERROR);
+  gcry_md_putc(md, 0x99 );
+  gcry_md_putc(md, packetSize >> 8);
+  gcry_md_putc(md, packetSize);
+  gcry_md_putc(md, pkt->c.pub->version);
+  gcry_md_putc(md, pkt->c.pub->creationTime);
+  gcry_md_putc(md, pkt->c.pub->creationTime >> 8);
+  gcry_md_putc(md, pkt->c.pub->creationTime >> 16);
+  gcry_md_putc(md, pkt->c.pub->creationTime >> 24);
+  gcry_md_putc(md, pkt->c.pub->asymAlgo);
+  
+	// Write the public key MPIs
+  curMpi = pkt->c.pub->mpiHead;
+  i = 0;
+  while (curMpi && i < targetMpiCount) {
+  	gcry_md_write(md, curMpi->data, curMpi->count + 2);
+		curMpi = curMpi->next;
+    i++;
+  }
+  
+  // Perform SHA-1 hash
+  gcry_md_final(md);
+  hash = gcry_md_read(md, 0);
+
+	// Copy hash results (20-bytes) into fingerprint
+  pkt->c.pub->fingerprint = malloc(20);
+  if (NULL == pkt->c.pub->fingerprint) RAISE(OUT_OF_MEMORY);
+  memcpy(pkt->c.pub->fingerprint, hash, 20);
+  
+  LOG_PRINT("HASH: ");
+  for (targetMpiCount=0; targetMpiCount < 20; targetMpiCount++) {
+  	fprintf(stderr, "%.2X", pkt->c.pub->fingerprint[targetMpiCount]);
+  }
+  fprintf(stderr,"\n");
+  
+  gcry_md_close(md);
+  
+  return 0;
+}
+
 static uint8_t spgp_parse_secret_key(uint8_t *msg, uint32_t *idx, 
           													 uint32_t length, spgp_packet_t *pkt) {
   spgp_secret_pkt_t *secret;
@@ -425,6 +508,9 @@ static uint8_t spgp_parse_secret_key(uint8_t *msg, uint32_t *idx,
 	// Allocate secret key in packet  
   pkt->c.secret = malloc(sizeof(*(pkt->c.secret)));
   if (NULL == pkt->c.secret) RAISE(OUT_OF_MEMORY);
+  memset(pkt->c.secret, 0, sizeof(*(pkt->c.secret)));
+  
+  // Convenient pointers to secret key, and public portion
 	secret = pkt->c.secret;
   pub = pkt->c.pub;
   
@@ -432,23 +518,23 @@ static uint8_t spgp_parse_secret_key(uint8_t *msg, uint32_t *idx,
   SAFE_IDX_INCREMENT(*idx, length);
   
   // First byte is the version.
-  if (secret->version != 4) RAISE(FORMAT_UNSUPPORTED);
+  if (pub->version != 4) RAISE(FORMAT_UNSUPPORTED);
   
   // Next 4 bytes are big-endian 'key creation time'
   if (length - *idx < 4) RAISE(BUFFER_OVERFLOW);
-  memcpy(&(secret->creationTime), msg+*idx, 4);
+  memcpy(&(pub->creationTime), msg+*idx, 4);
   *idx += 3; // this puts us on last byte of creation time
   SAFE_IDX_INCREMENT(*idx, length); // this goes to next byte (safely)
 
 	// Next byte identifies asymmetric algorithm
-	secret->asymAlgo = msg[*idx];
+	pub->asymAlgo = msg[*idx];
 	SAFE_IDX_INCREMENT(*idx, length);
-  LOG_PRINT("Asymmetric algorithm: %d\n", secret->asymAlgo);
+  LOG_PRINT("Asymmetric algorithm: %d\n", pub->asymAlgo);
   
   // Read variable number of MPIs (depends on asymmetric algorithm), each
   // of which are variable size.
 	spgp_read_all_public_mpis(msg, idx, length, secret);
-  LOG_PRINT("Read %u MPIs\n", secret->mpiCount);
+  LOG_PRINT("Read %u MPIs\n", pub->mpiCount);
   
   // S2K Type byte tells how to (or if to) decrypt secret exponent
   secret->s2kType = msg[*idx];
@@ -524,6 +610,10 @@ static uint8_t spgp_parse_secret_key(uint8_t *msg, uint32_t *idx,
     LOG_PRINT("Stored %u encrypted bytes.\n", remaining);
     // This is the end of the data, so we do NOT do a final idx increment
   }
+  
+  // Create and store fingerprint for this packet
+  if (pkt->header->type == PKT_TYPE_SECRET_KEY)
+	  spgp_generate_fingerprint(pkt);
     
 	return 0;
 }
@@ -595,47 +685,47 @@ static uint8_t spgp_read_all_public_mpis(uint8_t *msg,
 														 						 uint32_t length, 
                                          spgp_secret_pkt_t *secret) {
   spgp_mpi_t *curMpi, *newMpi;
+  spgp_public_pkt_t *pub = (spgp_public_pkt_t*)secret;
   uint32_t i;
   
   if (NULL == msg || NULL == idx || 0 == length || NULL == secret)
   	RAISE(INVALID_ARGS);
 
   // Read all the MPIs
-	if (secret->asymAlgo == ASYM_ALGO_DSA) {
+	if (pub->asymAlgo == ASYM_ALGO_DSA) {
   	// DSA public MPIs: prime p, order q, generator g, value y
     for (i = 0; i < 4; i++) {
       newMpi = spgp_read_mpi(msg, idx, length);
       if (i == 0) {
-        secret->mpiHead = newMpi;
-        curMpi = secret->mpiHead;
+        pub->mpiHead = newMpi;
+        curMpi = pub->mpiHead;
       }
       else {
         curMpi->next = newMpi;
         curMpi = curMpi->next;
       }
     }
-    secret->mpiCount = 4;
+    pub->mpiCount = 4;
 	}
-  else if (secret->asymAlgo == ASYM_ALGO_ELGAMAL) {
-  	// DSA public MPIs: prime p, order q, generator g, value y
+  else if (pub->asymAlgo == ASYM_ALGO_ELGAMAL) {
     for (i = 0; i < 3; i++) {
       newMpi = spgp_read_mpi(msg, idx, length);
       if (i == 0) {
-        secret->mpiHead = newMpi;
-        curMpi = secret->mpiHead;
+        pub->mpiHead = newMpi;
+        curMpi = pub->mpiHead;
       }
       else {
         curMpi->next = newMpi;
         curMpi = curMpi->next;
       }
     }
-    secret->mpiCount = 3;  
+    pub->mpiCount = 3;  
   }
   else {
   	RAISE(FORMAT_UNSUPPORTED);
   }
   
-	return secret->mpiCount;
+	return pub->mpiCount;
 }
 
 static uint8_t spgp_read_all_secret_mpis(uint8_t *msg, 
@@ -643,19 +733,20 @@ static uint8_t spgp_read_all_secret_mpis(uint8_t *msg,
 														 						 uint32_t length, 
                                          spgp_secret_pkt_t *secret) {
   spgp_mpi_t *curMpi;
+  spgp_public_pkt_t *pub = (spgp_public_pkt_t*)secret;
   
   if (NULL == msg || NULL == idx || 0 == length || NULL == secret)
   	RAISE(INVALID_ARGS);
 
 	// Set curMpi to last valid Mpi in linked list
-	curMpi = secret->mpiHead;
+	curMpi = pub->mpiHead;
   while (curMpi->next) curMpi = curMpi->next;
 
   // Read all the MPIs
-	if (secret->asymAlgo == ASYM_ALGO_DSA) {
+	if (pub->asymAlgo == ASYM_ALGO_DSA) {
   	// DSA secte MPIs: exponent x
     curMpi->next = spgp_read_mpi(msg, idx, length);
-    secret->mpiCount++;
+    pub->mpiCount++;
     *idx += length - 1;
     // This is the end of the data, so we do NOT do a final increment. 
 	}
@@ -663,7 +754,14 @@ static uint8_t spgp_read_all_secret_mpis(uint8_t *msg,
   	RAISE(FORMAT_UNSUPPORTED);
   }
   
-	return secret->mpiCount;
+	return pub->mpiCount;
+}
+
+static uint32_t spgp_mpi_length(uint8_t *mpi) {
+	uint32_t bits;
+	if (NULL == mpi) RAISE(INVALID_ARGS);
+  bits = ((mpi[0] << 8) | mpi[1]);
+  return (bits+7)/8;  
 }
 
 static spgp_mpi_t *spgp_read_mpi(uint8_t *msg, uint32_t *idx,
@@ -679,19 +777,17 @@ static spgp_mpi_t *spgp_read_mpi(uint8_t *msg, uint32_t *idx,
   // First two bytes are big-endian count of bits in MPI
   if (length - *idx < 2) RAISE(BUFFER_OVERFLOW);
   mpi->bits = ((msg[*idx] << 8) | msg[*idx + 1]);
-  *idx += 1;
-  SAFE_IDX_INCREMENT(*idx, length);
   
   mpi->count = (mpi->bits+7)/8;
   LOG_PRINT("MPI Bits: %u\n", mpi->bits);
   
   // Allocate space for MPI data
-  mpi->data = malloc(mpi->count);
+  mpi->data = malloc(mpi->count + 2);
   if (NULL == mpi->data) RAISE(OUT_OF_MEMORY);
   
   // Copy data from input buffer to mpi buffer
-  memcpy(mpi->data, msg, mpi->count);
-  *idx += mpi->count - 1;
+  memcpy(mpi->data, msg+*idx, mpi->count + 2);
+  *idx += mpi->count + 1;
   SAFE_IDX_INCREMENT(*idx, length);
   
   return mpi;

diff --git a/src/packet.h b/src/packet.h
line changes: +2/-10
index 6aa7a19..42f4d3a
--- a/src/packet.h
+++ b/src/packet.h
@@ -59,19 +59,10 @@ struct spgp_public_packet_struct {
   spgp_mpi_t *mpiHead;
   uint8_t mpiCount;
   uint8_t *fingerprint;
-};
+} __attribute__((packed));
 
 struct spgp_secret_packet_struct {
 // This is public key stuff
-/*
-	uint8_t version;
-  uint32_t creationTime;
-	uint8_t asymAlgo;
-  uint8_t symAlgo;
-  spgp_mpi_t *mpiHead;
-  uint8_t mpiCount;
-  uint8_t *fingerprint;
-*/
 	spgp_public_pkt_t pub;
 // This is secret key stuff  
 	uint8_t isDecrypted;
@@ -96,6 +87,7 @@ typedef enum {
   FORMAT_UNSUPPORTED,
 	INVALID_ARGS,
 	BUFFER_OVERFLOW,
+  GCRY_ERROR,
 } spgp_error_t;
 
 typedef enum {