Changes to include J-PAKE sources and dependencies. experimental
authorstefan
Fri, 22 Oct 2010 13:08:22 -0400
branchexperimental
changeset 182 acc2f52b762e5ff1f4d8f7e9a149094b5fd7748f
parent 181 8b54072f1632c795ff1dd4f76f02915fefe77fc6
child 183 3585b1c166a60bc34cf5495d24cedf2b3623c39c
push id114
push userstefan@arentz.ca
push dateFri, 22 Oct 2010 18:25:05 +0000
Changes to include J-PAKE sources and dependencies.
ExternalSources/checkout.sh
Sources/NetworkAndStorage/CryptoUtils.h
Sources/NetworkAndStorage/CryptoUtils.m
Sources/Weave.xcodeproj/project.pbxproj
--- a/ExternalSources/checkout.sh
+++ b/ExternalSources/checkout.sh
@@ -1,11 +1,12 @@
 #!/bin/sh
 
 # Check out the sources we depend on. Since everything is in development we
 # grab trunk/head/tip for all projects. This needs to change when we settle
 # on a more specific release.
 
 git clone git://github.com/st3fan/ios-jpake.git
+git clone git://github.com/st3fan/ios-jpake-test.git
 git clone git://github.com/st3fan/ios-openssl.git
 
 git clone git://github.com/pokeb/asi-http-request.git
 
--- a/Sources/NetworkAndStorage/CryptoUtils.h
+++ b/Sources/NetworkAndStorage/CryptoUtils.h
@@ -129,11 +129,11 @@
 @end
 
 
 @interface NSData (AES)
 - (NSData *) AESencryptWithKey:(NSData *)key andIV:(NSData *)iv;
 - (NSData *) AESdecryptWithKey:(NSData *)key andIV:(NSData *)iv;
 @end
 
-int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
+int MY_PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
                            const unsigned char *salt, int saltlen, int iter,
                            int keylen, unsigned char *out);
--- a/Sources/NetworkAndStorage/CryptoUtils.m
+++ b/Sources/NetworkAndStorage/CryptoUtils.m
@@ -696,17 +696,17 @@ static CryptoUtils* _cryptoManager = nil
 	/* Let's try to decrypt the user's private key */
 	unsigned char final[32];
 	unsigned char tsalt[50];
 	NSData *salt = [[NSData alloc] initWithBase64EncodedString:
                   [payload objectForKey:@"salt"]];
 	
 	[salt getBytes:tsalt];
   const char* secretBytes = [passphrase UTF8String];
-	PKCS5_PBKDF2_HMAC_SHA1(secretBytes,
+	MY_PKCS5_PBKDF2_HMAC_SHA1(secretBytes,
                           -1, 
                          (void*)tsalt, 
                          [salt length], 
                          4096, 
                          32, 
                          final);
 	[salt release];
 	
@@ -1152,17 +1152,17 @@ static CryptoUtils* _cryptoManager = nil
   
 	free(buffer);
 	return nil;
 }
 
 @end
 
 // PBKDF2, password key derivation
-int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
+int MY_PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
                            const unsigned char *salt, int saltlen, int iter,
                            int keylen, unsigned char *out) {
 	unsigned char digtmp[CC_SHA1_DIGEST_LENGTH], *p, itmp[4];
 	int cplen, j, k, tkeylen;
 	unsigned long i = 1;
 	CCHmacContext hctx;
 	p = out;
 	tkeylen = keylen;
--- a/Sources/Weave.xcodeproj/project.pbxproj
+++ b/Sources/Weave.xcodeproj/project.pbxproj
@@ -107,16 +107,34 @@
 		E6EDAE1E11C04461002C8B15 /* button-large-default.png in Resources */ = {isa = PBXBuildFile; fileRef = E6EDAE1611C04461002C8B15 /* button-large-default.png */; };
 		E6EDAE1F11C04461002C8B15 /* button-large-pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = E6EDAE1711C04461002C8B15 /* button-large-pressed.png */; };
 		E6EDAE2011C04461002C8B15 /* button-medium-default.png in Resources */ = {isa = PBXBuildFile; fileRef = E6EDAE1811C04461002C8B15 /* button-medium-default.png */; };
 		E6EDAE2111C04461002C8B15 /* button-medium-pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = E6EDAE1911C04461002C8B15 /* button-medium-pressed.png */; };
 		E6EDAE2211C04461002C8B15 /* button-small-default.png in Resources */ = {isa = PBXBuildFile; fileRef = E6EDAE1A11C04461002C8B15 /* button-small-default.png */; };
 		E6EDAE2311C04461002C8B15 /* button-small-pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = E6EDAE1B11C04461002C8B15 /* button-small-pressed.png */; };
 		E6F311A111879E25002BF55F /* LoginBG.png in Resources */ = {isa = PBXBuildFile; fileRef = E6F311A011879E25002BF55F /* LoginBG.png */; };
 		F801888F127115AA00215F00 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F801888E127115AA00215F00 /* Settings.bundle */; };
+		F8018A8A1271F66100215F00 /* ASIAuthenticationDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189341271F66000215F00 /* ASIAuthenticationDialog.m */; };
+		F8018A8B1271F66100215F00 /* ASIDownloadCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189371271F66000215F00 /* ASIDownloadCache.m */; };
+		F8018A8C1271F66100215F00 /* ASIFormDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189391271F66000215F00 /* ASIFormDataRequest.m */; };
+		F8018A8D1271F66100215F00 /* ASIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F801893B1271F66000215F00 /* ASIHTTPRequest.m */; };
+		F8018A8E1271F66100215F00 /* ASIInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F801893F1271F66000215F00 /* ASIInputStream.m */; };
+		F8018A8F1271F66100215F00 /* ASINetworkQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189411271F66000215F00 /* ASINetworkQueue.m */; };
+		F8018AE31271F66100215F00 /* JPAKEClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189E11271F66000215F00 /* JPAKEClient.m */; };
+		F8018AE41271F66100215F00 /* JPAKEParty.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189E31271F66000215F00 /* JPAKEParty.m */; };
+		F8018AE51271F66100215F00 /* JPAKEViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F80189E51271F66000215F00 /* JPAKEViewController.m */; };
+		F8018AE61271F66100215F00 /* JPAKEViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F80189E61271F66000215F00 /* JPAKEViewController.xib */; };
+		F8018B051271F66100215F00 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F8018A6B1271F66100215F00 /* libcrypto.a */; };
+		F8018B061271F66100215F00 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F8018A6C1271F66100215F00 /* libssl.a */; };
+		F8018BF41271F86600215F00 /* NSData+AES.m in Sources */ = {isa = PBXBuildFile; fileRef = F8018B6A1271F86600215F00 /* NSData+AES.m */; };
+		F8018BF51271F86600215F00 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = F8018B6C1271F86600215F00 /* NSData+Base64.m */; };
+		F8018BF61271F86600215F00 /* NSData+SHA256.m in Sources */ = {isa = PBXBuildFile; fileRef = F8018B6E1271F86600215F00 /* NSData+SHA256.m */; };
+		F8018C3A1271FADA00215F00 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8018C391271FADA00215F00 /* CFNetwork.framework */; };
+		F8018C3F1271FAF500215F00 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F8018C3E1271FAF500215F00 /* libz.dylib */; };
+		F8018C7B1271FB6900215F00 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8018C7A1271FB6900215F00 /* MobileCoreServices.framework */; };
 		F8B3E3F6126F1F60008178BA /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8B3E3F5126F1F60008178BA /* MessageUI.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
 		1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		1D6058910D05DD3D006BFB54 /* FirefoxHome.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirefoxHome.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
 		288765070DF74369002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
@@ -434,16 +452,123 @@
 		E6EDAE1611C04461002C8B15 /* button-large-default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-large-default.png"; sourceTree = "<group>"; };
 		E6EDAE1711C04461002C8B15 /* button-large-pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-large-pressed.png"; sourceTree = "<group>"; };
 		E6EDAE1811C04461002C8B15 /* button-medium-default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-medium-default.png"; sourceTree = "<group>"; };
 		E6EDAE1911C04461002C8B15 /* button-medium-pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-medium-pressed.png"; sourceTree = "<group>"; };
 		E6EDAE1A11C04461002C8B15 /* button-small-default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-small-default.png"; sourceTree = "<group>"; };
 		E6EDAE1B11C04461002C8B15 /* button-small-pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-small-pressed.png"; sourceTree = "<group>"; };
 		E6F311A011879E25002BF55F /* LoginBG.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = LoginBG.png; sourceTree = "<group>"; };
 		F801888E127115AA00215F00 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
+		F80189331271F66000215F00 /* ASIAuthenticationDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIAuthenticationDialog.h; sourceTree = "<group>"; };
+		F80189341271F66000215F00 /* ASIAuthenticationDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIAuthenticationDialog.m; sourceTree = "<group>"; };
+		F80189351271F66000215F00 /* ASICacheDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASICacheDelegate.h; sourceTree = "<group>"; };
+		F80189361271F66000215F00 /* ASIDownloadCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIDownloadCache.h; sourceTree = "<group>"; };
+		F80189371271F66000215F00 /* ASIDownloadCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIDownloadCache.m; sourceTree = "<group>"; };
+		F80189381271F66000215F00 /* ASIFormDataRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIFormDataRequest.h; sourceTree = "<group>"; };
+		F80189391271F66000215F00 /* ASIFormDataRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIFormDataRequest.m; sourceTree = "<group>"; };
+		F801893A1271F66000215F00 /* ASIHTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIHTTPRequest.h; sourceTree = "<group>"; };
+		F801893B1271F66000215F00 /* ASIHTTPRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIHTTPRequest.m; sourceTree = "<group>"; };
+		F801893C1271F66000215F00 /* ASIHTTPRequestConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIHTTPRequestConfig.h; sourceTree = "<group>"; };
+		F801893D1271F66000215F00 /* ASIHTTPRequestDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIHTTPRequestDelegate.h; sourceTree = "<group>"; };
+		F801893E1271F66000215F00 /* ASIInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIInputStream.h; sourceTree = "<group>"; };
+		F801893F1271F66000215F00 /* ASIInputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIInputStream.m; sourceTree = "<group>"; };
+		F80189401271F66000215F00 /* ASINetworkQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASINetworkQueue.h; sourceTree = "<group>"; };
+		F80189411271F66000215F00 /* ASINetworkQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASINetworkQueue.m; sourceTree = "<group>"; };
+		F80189421271F66000215F00 /* ASIProgressDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIProgressDelegate.h; sourceTree = "<group>"; };
+		F80189E01271F66000215F00 /* JPAKEClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPAKEClient.h; sourceTree = "<group>"; };
+		F80189E11271F66000215F00 /* JPAKEClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPAKEClient.m; sourceTree = "<group>"; };
+		F80189E21271F66000215F00 /* JPAKEParty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPAKEParty.h; sourceTree = "<group>"; };
+		F80189E31271F66000215F00 /* JPAKEParty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPAKEParty.m; sourceTree = "<group>"; };
+		F80189E41271F66000215F00 /* JPAKEViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPAKEViewController.h; sourceTree = "<group>"; };
+		F80189E51271F66000215F00 /* JPAKEViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPAKEViewController.m; sourceTree = "<group>"; };
+		F80189E61271F66000215F00 /* JPAKEViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = JPAKEViewController.xib; sourceTree = "<group>"; };
+		F8018A211271F66100215F00 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
+		F8018A221271F66100215F00 /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = "<group>"; };
+		F8018A231271F66100215F00 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = "<group>"; };
+		F8018A241271F66100215F00 /* asn1t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1t.h; sourceTree = "<group>"; };
+		F8018A251271F66100215F00 /* bio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = "<group>"; };
+		F8018A261271F66100215F00 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = "<group>"; };
+		F8018A271271F66100215F00 /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bn.h; sourceTree = "<group>"; };
+		F8018A281271F66100215F00 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
+		F8018A291271F66100215F00 /* camellia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = "<group>"; };
+		F8018A2A1271F66100215F00 /* cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast.h; sourceTree = "<group>"; };
+		F8018A2B1271F66100215F00 /* cms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cms.h; sourceTree = "<group>"; };
+		F8018A2C1271F66100215F00 /* comp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comp.h; sourceTree = "<group>"; };
+		F8018A2D1271F66100215F00 /* conf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf.h; sourceTree = "<group>"; };
+		F8018A2E1271F66100215F00 /* conf_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf_api.h; sourceTree = "<group>"; };
+		F8018A2F1271F66100215F00 /* crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto.h; sourceTree = "<group>"; };
+		F8018A301271F66100215F00 /* des.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = "<group>"; };
+		F8018A311271F66100215F00 /* des_old.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des_old.h; sourceTree = "<group>"; };
+		F8018A321271F66100215F00 /* dh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dh.h; sourceTree = "<group>"; };
+		F8018A331271F66100215F00 /* dsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsa.h; sourceTree = "<group>"; };
+		F8018A341271F66100215F00 /* dso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dso.h; sourceTree = "<group>"; };
+		F8018A351271F66100215F00 /* dtls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtls1.h; sourceTree = "<group>"; };
+		F8018A361271F66100215F00 /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = "<group>"; };
+		F8018A371271F66100215F00 /* ebcdic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ebcdic.h; sourceTree = "<group>"; };
+		F8018A381271F66100215F00 /* ec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ec.h; sourceTree = "<group>"; };
+		F8018A391271F66100215F00 /* ecdh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdh.h; sourceTree = "<group>"; };
+		F8018A3A1271F66100215F00 /* ecdsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = "<group>"; };
+		F8018A3B1271F66100215F00 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = "<group>"; };
+		F8018A3C1271F66100215F00 /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = "<group>"; };
+		F8018A3D1271F66100215F00 /* evp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evp.h; sourceTree = "<group>"; };
+		F8018A3E1271F66100215F00 /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = "<group>"; };
+		F8018A3F1271F66100215F00 /* idea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = idea.h; sourceTree = "<group>"; };
+		F8018A401271F66100215F00 /* jpake.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpake.h; sourceTree = "<group>"; };
+		F8018A411271F66100215F00 /* krb5_asn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = krb5_asn.h; sourceTree = "<group>"; };
+		F8018A421271F66100215F00 /* kssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kssl.h; sourceTree = "<group>"; };
+		F8018A431271F66100215F00 /* lhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lhash.h; sourceTree = "<group>"; };
+		F8018A441271F66100215F00 /* md4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = "<group>"; };
+		F8018A451271F66100215F00 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = "<group>"; };
+		F8018A461271F66100215F00 /* mdc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mdc2.h; sourceTree = "<group>"; };
+		F8018A471271F66100215F00 /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = "<group>"; };
+		F8018A481271F66100215F00 /* obj_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = obj_mac.h; sourceTree = "<group>"; };
+		F8018A491271F66100215F00 /* objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objects.h; sourceTree = "<group>"; };
+		F8018A4A1271F66100215F00 /* ocsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ocsp.h; sourceTree = "<group>"; };
+		F8018A4B1271F66100215F00 /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = "<group>"; };
+		F8018A4C1271F66100215F00 /* opensslv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslv.h; sourceTree = "<group>"; };
+		F8018A4D1271F66100215F00 /* ossl_typ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ossl_typ.h; sourceTree = "<group>"; };
+		F8018A4E1271F66100215F00 /* pem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem.h; sourceTree = "<group>"; };
+		F8018A4F1271F66100215F00 /* pem2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem2.h; sourceTree = "<group>"; };
+		F8018A501271F66100215F00 /* pkcs12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs12.h; sourceTree = "<group>"; };
+		F8018A511271F66100215F00 /* pkcs7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs7.h; sourceTree = "<group>"; };
+		F8018A521271F66100215F00 /* pqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pqueue.h; sourceTree = "<group>"; };
+		F8018A531271F66100215F00 /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = "<group>"; };
+		F8018A541271F66100215F00 /* rc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc2.h; sourceTree = "<group>"; };
+		F8018A551271F66100215F00 /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = "<group>"; };
+		F8018A561271F66100215F00 /* ripemd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripemd.h; sourceTree = "<group>"; };
+		F8018A571271F66100215F00 /* rsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsa.h; sourceTree = "<group>"; };
+		F8018A581271F66100215F00 /* safestack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = safestack.h; sourceTree = "<group>"; };
+		F8018A591271F66100215F00 /* seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seed.h; sourceTree = "<group>"; };
+		F8018A5A1271F66100215F00 /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = "<group>"; };
+		F8018A5B1271F66100215F00 /* ssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl.h; sourceTree = "<group>"; };
+		F8018A5C1271F66100215F00 /* ssl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl2.h; sourceTree = "<group>"; };
+		F8018A5D1271F66100215F00 /* ssl23.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl23.h; sourceTree = "<group>"; };
+		F8018A5E1271F66100215F00 /* ssl3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl3.h; sourceTree = "<group>"; };
+		F8018A5F1271F66100215F00 /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = "<group>"; };
+		F8018A601271F66100215F00 /* symhacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = symhacks.h; sourceTree = "<group>"; };
+		F8018A611271F66100215F00 /* tls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.h; sourceTree = "<group>"; };
+		F8018A621271F66100215F00 /* ts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts.h; sourceTree = "<group>"; };
+		F8018A631271F66100215F00 /* txt_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = txt_db.h; sourceTree = "<group>"; };
+		F8018A641271F66100215F00 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = "<group>"; };
+		F8018A651271F66100215F00 /* ui_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_compat.h; sourceTree = "<group>"; };
+		F8018A661271F66100215F00 /* whrlpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = whrlpool.h; sourceTree = "<group>"; };
+		F8018A671271F66100215F00 /* x509.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509.h; sourceTree = "<group>"; };
+		F8018A681271F66100215F00 /* x509_vfy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509_vfy.h; sourceTree = "<group>"; };
+		F8018A691271F66100215F00 /* x509v3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509v3.h; sourceTree = "<group>"; };
+		F8018A6B1271F66100215F00 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = "<group>"; };
+		F8018A6C1271F66100215F00 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = "<group>"; };
+		F8018B691271F86600215F00 /* NSData+AES.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+AES.h"; sourceTree = "<group>"; };
+		F8018B6A1271F86600215F00 /* NSData+AES.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+AES.m"; sourceTree = "<group>"; };
+		F8018B6B1271F86600215F00 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = "<group>"; };
+		F8018B6C1271F86600215F00 /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = "<group>"; };
+		F8018B6D1271F86600215F00 /* NSData+SHA256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+SHA256.h"; sourceTree = "<group>"; };
+		F8018B6E1271F86600215F00 /* NSData+SHA256.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+SHA256.m"; sourceTree = "<group>"; };
+		F8018C391271FADA00215F00 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
+		F8018C3E1271FAF500215F00 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		F8018C7A1271FB6900215F00 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
 		F875D0DC124AB138000BCAC9 /* FFHome-Stefan-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "FFHome-Stefan-Info.plist"; sourceTree = "<group>"; };
 		F8B3E3F5126F1F60008178BA /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
 		1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -451,16 +576,21 @@
 				1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
 				1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
 				288765080DF74369002DB57D /* CoreGraphics.framework in Frameworks */,
 				4AFBD436108BC67500C4FD32 /* Security.framework in Frameworks */,
 				4AFBD47A108BC68500C4FD32 /* libsqlite3.0.dylib in Frameworks */,
 				4AFBD47C108BC68A00C4FD32 /* QuartzCore.framework in Frameworks */,
 				4AFBD480108BC68F00C4FD32 /* SystemConfiguration.framework in Frameworks */,
 				F8B3E3F6126F1F60008178BA /* MessageUI.framework in Frameworks */,
+				F8018B051271F66100215F00 /* libcrypto.a in Frameworks */,
+				F8018B061271F66100215F00 /* libssl.a in Frameworks */,
+				F8018C3A1271FADA00215F00 /* CFNetwork.framework in Frameworks */,
+				F8018C3F1271FAF500215F00 /* libz.dylib in Frameworks */,
+				F8018C7B1271FB6900215F00 /* MobileCoreServices.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
 		080E96DDFE201D6D7F000001 /* NetworkAndStorage */ = {
 			isa = PBXGroup;
@@ -490,23 +620,27 @@
 				1D6058910D05DD3D006BFB54 /* FirefoxHome.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
 		};
 		29B97314FDCFA39411CA2CEA /* Weave */ = {
 			isa = PBXGroup;
 			children = (
+				F80189061271F66000215F00 /* ExternalSources */,
 				376EA60110D037CF00D37DD3 /* UserInterface */,
 				080E96DDFE201D6D7F000001 /* NetworkAndStorage */,
 				29B97315FDCFA39411CA2CEA /* Other Sources */,
 				29B97317FDCFA39411CA2CEA /* Resources */,
 				29B97323FDCFA39411CA2CEA /* Frameworks */,
 				19C28FACFE9D520D11CA2CBB /* Products */,
 				F8B3E3F5126F1F60008178BA /* MessageUI.framework */,
+				F8018C391271FADA00215F00 /* CFNetwork.framework */,
+				F8018C3E1271FAF500215F00 /* libz.dylib */,
+				F8018C7A1271FB6900215F00 /* MobileCoreServices.framework */,
 			);
 			name = Weave;
 			sourceTree = "<group>";
 		};
 		29B97315FDCFA39411CA2CEA /* Other Sources */ = {
 			isa = PBXGroup;
 			children = (
 				28A0AB4B0D9B1048005BE974 /* Weave_Prefix.pch */,
@@ -713,16 +847,216 @@
 				370E33DB10D82B590001D066 /* settings.png */,
 				4AFBD418108BC64700C4FD32 /* Tabs.png */,
 				E6B8D9D711653D5E00B8E514 /* folder.png */,
 				37186389118A58D400C816B0 /* Icon.png */,
 			);
 			path = Images;
 			sourceTree = "<group>";
 		};
+		F80189061271F66000215F00 /* ExternalSources */ = {
+			isa = PBXGroup;
+			children = (
+				F80189081271F66000215F00 /* asi-http-request */,
+				F80189B81271F66000215F00 /* ios-jpake */,
+				F8018B2D1271F86600215F00 /* ios-jpake-test */,
+				F80189EA1271F66000215F00 /* ios-openssl */,
+			);
+			name = ExternalSources;
+			path = ../ExternalSources;
+			sourceTree = SOURCE_ROOT;
+		};
+		F80189081271F66000215F00 /* asi-http-request */ = {
+			isa = PBXGroup;
+			children = (
+				F80189321271F66000215F00 /* Classes */,
+			);
+			path = "asi-http-request";
+			sourceTree = "<group>";
+		};
+		F80189321271F66000215F00 /* Classes */ = {
+			isa = PBXGroup;
+			children = (
+				F80189331271F66000215F00 /* ASIAuthenticationDialog.h */,
+				F80189341271F66000215F00 /* ASIAuthenticationDialog.m */,
+				F80189351271F66000215F00 /* ASICacheDelegate.h */,
+				F80189361271F66000215F00 /* ASIDownloadCache.h */,
+				F80189371271F66000215F00 /* ASIDownloadCache.m */,
+				F80189381271F66000215F00 /* ASIFormDataRequest.h */,
+				F80189391271F66000215F00 /* ASIFormDataRequest.m */,
+				F801893A1271F66000215F00 /* ASIHTTPRequest.h */,
+				F801893B1271F66000215F00 /* ASIHTTPRequest.m */,
+				F801893C1271F66000215F00 /* ASIHTTPRequestConfig.h */,
+				F801893D1271F66000215F00 /* ASIHTTPRequestDelegate.h */,
+				F801893E1271F66000215F00 /* ASIInputStream.h */,
+				F801893F1271F66000215F00 /* ASIInputStream.m */,
+				F80189401271F66000215F00 /* ASINetworkQueue.h */,
+				F80189411271F66000215F00 /* ASINetworkQueue.m */,
+				F80189421271F66000215F00 /* ASIProgressDelegate.h */,
+			);
+			path = Classes;
+			sourceTree = "<group>";
+		};
+		F80189B81271F66000215F00 /* ios-jpake */ = {
+			isa = PBXGroup;
+			children = (
+				F80189DF1271F66000215F00 /* Sources */,
+			);
+			path = "ios-jpake";
+			sourceTree = "<group>";
+		};
+		F80189DF1271F66000215F00 /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				F80189E01271F66000215F00 /* JPAKEClient.h */,
+				F80189E11271F66000215F00 /* JPAKEClient.m */,
+				F80189E21271F66000215F00 /* JPAKEParty.h */,
+				F80189E31271F66000215F00 /* JPAKEParty.m */,
+				F80189E41271F66000215F00 /* JPAKEViewController.h */,
+				F80189E51271F66000215F00 /* JPAKEViewController.m */,
+				F80189E61271F66000215F00 /* JPAKEViewController.xib */,
+			);
+			path = Sources;
+			sourceTree = "<group>";
+		};
+		F80189EA1271F66000215F00 /* ios-openssl */ = {
+			isa = PBXGroup;
+			children = (
+				F8018A1F1271F66100215F00 /* include */,
+				F8018A6A1271F66100215F00 /* lib */,
+			);
+			path = "ios-openssl";
+			sourceTree = "<group>";
+		};
+		F8018A1F1271F66100215F00 /* include */ = {
+			isa = PBXGroup;
+			children = (
+				F8018A201271F66100215F00 /* openssl */,
+			);
+			path = include;
+			sourceTree = "<group>";
+		};
+		F8018A201271F66100215F00 /* openssl */ = {
+			isa = PBXGroup;
+			children = (
+				F8018A211271F66100215F00 /* aes.h */,
+				F8018A221271F66100215F00 /* asn1.h */,
+				F8018A231271F66100215F00 /* asn1_mac.h */,
+				F8018A241271F66100215F00 /* asn1t.h */,
+				F8018A251271F66100215F00 /* bio.h */,
+				F8018A261271F66100215F00 /* blowfish.h */,
+				F8018A271271F66100215F00 /* bn.h */,
+				F8018A281271F66100215F00 /* buffer.h */,
+				F8018A291271F66100215F00 /* camellia.h */,
+				F8018A2A1271F66100215F00 /* cast.h */,
+				F8018A2B1271F66100215F00 /* cms.h */,
+				F8018A2C1271F66100215F00 /* comp.h */,
+				F8018A2D1271F66100215F00 /* conf.h */,
+				F8018A2E1271F66100215F00 /* conf_api.h */,
+				F8018A2F1271F66100215F00 /* crypto.h */,
+				F8018A301271F66100215F00 /* des.h */,
+				F8018A311271F66100215F00 /* des_old.h */,
+				F8018A321271F66100215F00 /* dh.h */,
+				F8018A331271F66100215F00 /* dsa.h */,
+				F8018A341271F66100215F00 /* dso.h */,
+				F8018A351271F66100215F00 /* dtls1.h */,
+				F8018A361271F66100215F00 /* e_os2.h */,
+				F8018A371271F66100215F00 /* ebcdic.h */,
+				F8018A381271F66100215F00 /* ec.h */,
+				F8018A391271F66100215F00 /* ecdh.h */,
+				F8018A3A1271F66100215F00 /* ecdsa.h */,
+				F8018A3B1271F66100215F00 /* engine.h */,
+				F8018A3C1271F66100215F00 /* err.h */,
+				F8018A3D1271F66100215F00 /* evp.h */,
+				F8018A3E1271F66100215F00 /* hmac.h */,
+				F8018A3F1271F66100215F00 /* idea.h */,
+				F8018A401271F66100215F00 /* jpake.h */,
+				F8018A411271F66100215F00 /* krb5_asn.h */,
+				F8018A421271F66100215F00 /* kssl.h */,
+				F8018A431271F66100215F00 /* lhash.h */,
+				F8018A441271F66100215F00 /* md4.h */,
+				F8018A451271F66100215F00 /* md5.h */,
+				F8018A461271F66100215F00 /* mdc2.h */,
+				F8018A471271F66100215F00 /* modes.h */,
+				F8018A481271F66100215F00 /* obj_mac.h */,
+				F8018A491271F66100215F00 /* objects.h */,
+				F8018A4A1271F66100215F00 /* ocsp.h */,
+				F8018A4B1271F66100215F00 /* opensslconf.h */,
+				F8018A4C1271F66100215F00 /* opensslv.h */,
+				F8018A4D1271F66100215F00 /* ossl_typ.h */,
+				F8018A4E1271F66100215F00 /* pem.h */,
+				F8018A4F1271F66100215F00 /* pem2.h */,
+				F8018A501271F66100215F00 /* pkcs12.h */,
+				F8018A511271F66100215F00 /* pkcs7.h */,
+				F8018A521271F66100215F00 /* pqueue.h */,
+				F8018A531271F66100215F00 /* rand.h */,
+				F8018A541271F66100215F00 /* rc2.h */,
+				F8018A551271F66100215F00 /* rc4.h */,
+				F8018A561271F66100215F00 /* ripemd.h */,
+				F8018A571271F66100215F00 /* rsa.h */,
+				F8018A581271F66100215F00 /* safestack.h */,
+				F8018A591271F66100215F00 /* seed.h */,
+				F8018A5A1271F66100215F00 /* sha.h */,
+				F8018A5B1271F66100215F00 /* ssl.h */,
+				F8018A5C1271F66100215F00 /* ssl2.h */,
+				F8018A5D1271F66100215F00 /* ssl23.h */,
+				F8018A5E1271F66100215F00 /* ssl3.h */,
+				F8018A5F1271F66100215F00 /* stack.h */,
+				F8018A601271F66100215F00 /* symhacks.h */,
+				F8018A611271F66100215F00 /* tls1.h */,
+				F8018A621271F66100215F00 /* ts.h */,
+				F8018A631271F66100215F00 /* txt_db.h */,
+				F8018A641271F66100215F00 /* ui.h */,
+				F8018A651271F66100215F00 /* ui_compat.h */,
+				F8018A661271F66100215F00 /* whrlpool.h */,
+				F8018A671271F66100215F00 /* x509.h */,
+				F8018A681271F66100215F00 /* x509_vfy.h */,
+				F8018A691271F66100215F00 /* x509v3.h */,
+			);
+			path = openssl;
+			sourceTree = "<group>";
+		};
+		F8018A6A1271F66100215F00 /* lib */ = {
+			isa = PBXGroup;
+			children = (
+				F8018A6B1271F66100215F00 /* libcrypto.a */,
+				F8018A6C1271F66100215F00 /* libssl.a */,
+			);
+			path = lib;
+			sourceTree = "<group>";
+		};
+		F8018B2D1271F86600215F00 /* ios-jpake-test */ = {
+			isa = PBXGroup;
+			children = (
+				F8018B561271F86600215F00 /* Mobile */,
+			);
+			path = "ios-jpake-test";
+			sourceTree = "<group>";
+		};
+		F8018B561271F86600215F00 /* Mobile */ = {
+			isa = PBXGroup;
+			children = (
+				F8018B571271F86600215F00 /* Classes */,
+			);
+			path = Mobile;
+			sourceTree = "<group>";
+		};
+		F8018B571271F86600215F00 /* Classes */ = {
+			isa = PBXGroup;
+			children = (
+				F8018B691271F86600215F00 /* NSData+AES.h */,
+				F8018B6A1271F86600215F00 /* NSData+AES.m */,
+				F8018B6B1271F86600215F00 /* NSData+Base64.h */,
+				F8018B6C1271F86600215F00 /* NSData+Base64.m */,
+				F8018B6D1271F86600215F00 /* NSData+SHA256.h */,
+				F8018B6E1271F86600215F00 /* NSData+SHA256.m */,
+			);
+			path = Classes;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
 		1D6058900D05DD3D006BFB54 /* FirefoxHome */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "FirefoxHome" */;
 			buildPhases = (
 				1D60588D0D05DD3D006BFB54 /* Resources */,
@@ -832,16 +1166,17 @@
 				37CEC81D1214B672001F5DB3 /* LogoutController.xib in Resources */,
 				37CEC80B1214B65F001F5DB3 /* MainWindow.xib in Resources */,
 				37CEC8201214B672001F5DB3 /* SearchResultsController.xib in Resources */,
 				37CEC8231214B672001F5DB3 /* SettingsController.xib in Resources */,
 				37CEC8261214B672001F5DB3 /* TabBrowserController.xib in Resources */,
 				37CEC8291214B672001F5DB3 /* WebPageController.xib in Resources */,
 				37CEC82C1214B672001F5DB3 /* WelcomePage.xib in Resources */,
 				F801888F127115AA00215F00 /* Settings.bundle in Resources */,
+				F8018AE61271F66100215F00 /* JPAKEViewController.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
 		37CEC8901214ED84001F5DB3 /* Run Script */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -893,16 +1228,28 @@
 				E65DB0D911CAF5C500FBF52E /* KeychainItemWrapper.m in Sources */,
 				37E8731711D3D5FE0004292A /* AboutScreen.m in Sources */,
 				37868D9E11DAC54800A8E3D0 /* nameprep.c in Sources */,
 				37868D9F11DAC54800A8E3D0 /* puny.c in Sources */,
 				37868DA011DAC54800A8E3D0 /* race.c in Sources */,
 				37868DA111DAC54800A8E3D0 /* toxxx.c in Sources */,
 				37868DA211DAC54800A8E3D0 /* util.c in Sources */,
 				37868DA411DAC54800A8E3D0 /* NSURL+IFUnicodeURL.m in Sources */,
+				F8018A8A1271F66100215F00 /* ASIAuthenticationDialog.m in Sources */,
+				F8018A8B1271F66100215F00 /* ASIDownloadCache.m in Sources */,
+				F8018A8C1271F66100215F00 /* ASIFormDataRequest.m in Sources */,
+				F8018A8D1271F66100215F00 /* ASIHTTPRequest.m in Sources */,
+				F8018A8E1271F66100215F00 /* ASIInputStream.m in Sources */,
+				F8018A8F1271F66100215F00 /* ASINetworkQueue.m in Sources */,
+				F8018AE31271F66100215F00 /* JPAKEClient.m in Sources */,
+				F8018AE41271F66100215F00 /* JPAKEParty.m in Sources */,
+				F8018AE51271F66100215F00 /* JPAKEViewController.m in Sources */,
+				F8018BF41271F86600215F00 /* NSData+AES.m in Sources */,
+				F8018BF51271F86600215F00 /* NSData+Base64.m in Sources */,
+				F8018BF61271F86600215F00 /* NSData+SHA256.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
 		37CEC80A1214B65F001F5DB3 /* MainWindow.xib */ = {
 			isa = PBXVariantGroup;
@@ -1198,33 +1545,47 @@
 				CODE_SIGN_ENTITLEMENTS = "";
 				CODE_SIGN_IDENTITY = "";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Weave_Prefix.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = OPENSSL_EXPERIMENTAL_JPAKE;
+				HEADER_SEARCH_PATHS = "../ExternalSources/ios-openssl/include";
 				INFOPLIST_FILE = "FFHome-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../ExternalSources/ios-openssl/lib\"",
+					"\"$(SRCROOT)/../ExternalSources/ios-jpake-test/Mobile/lib\"",
+				);
 				PRODUCT_NAME = FirefoxHome;
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos4.1;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = Debug;
 		};
 		1D6058950D05DD3E006BFB54 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Weave_Prefix.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = OPENSSL_EXPERIMENTAL_JPAKE;
+				HEADER_SEARCH_PATHS = "../ExternalSources/ios-openssl/include";
 				INFOPLIST_FILE = "FFHome-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../ExternalSources/ios-openssl/lib\"",
+					"\"$(SRCROOT)/../ExternalSources/ios-jpake-test/Mobile/lib\"",
+				);
 				PRODUCT_NAME = FirefoxHome;
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos4.1;
 			};
 			name = Release;
 		};
 		3722229711DBF67B00D7A74F /* Distribution */ = {
 			isa = XCBuildConfiguration;
@@ -1243,18 +1604,25 @@
 		3722229811DBF67B00D7A74F /* Distribution */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mozilla Corporation";
 				COPY_PHASE_STRIP = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Weave_Prefix.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = OPENSSL_EXPERIMENTAL_JPAKE;
+				HEADER_SEARCH_PATHS = "../ExternalSources/ios-openssl/include";
 				INFOPLIST_FILE = "FFHome-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 3.1;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../ExternalSources/ios-openssl/lib\"",
+					"\"$(SRCROOT)/../ExternalSources/ios-jpake-test/Mobile/lib\"",
+				);
 				PRODUCT_NAME = FirefoxHome;
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "D854824C-BE65-4B79-9AB1-9D6268A2CCA2";
 				SDKROOT = iphoneos4.1;
 			};
 			name = Distribution;
 		};
 		37CEC8921214ED84001F5DB3 /* Debug */ = {
 			isa = XCBuildConfiguration;
@@ -1339,17 +1707,24 @@
 				CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
 				CODE_SIGN_IDENTITY = "";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Weave_Prefix.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = OPENSSL_EXPERIMENTAL_JPAKE;
+				HEADER_SEARCH_PATHS = "../ExternalSources/ios-openssl/include";
 				INFOPLIST_FILE = "FFHome-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../ExternalSources/ios-openssl/lib\"",
+					"\"$(SRCROOT)/../ExternalSources/ios-jpake-test/Mobile/lib\"",
+				);
 				PRODUCT_NAME = FirefoxHome;
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos4.1;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = AdHoc;
 		};
 		F875D0BD124AAEEF000BCAC9 /* AdHoc */ = {
@@ -1386,17 +1761,24 @@
 				CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
 				CODE_SIGN_IDENTITY = "";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Weave_Prefix.pch;
+				GCC_PREPROCESSOR_DEFINITIONS = OPENSSL_EXPERIMENTAL_JPAKE;
+				HEADER_SEARCH_PATHS = "../ExternalSources/ios-openssl/include";
 				INFOPLIST_FILE = "FFHome-Stefan-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../ExternalSources/ios-openssl/lib\"",
+					"\"$(SRCROOT)/../ExternalSources/ios-jpake-test/Mobile/lib\"",
+				);
 				PRODUCT_NAME = FirefoxHome;
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos4.1;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = AdHocStefan;
 		};
 		F875D0CD124AB101000BCAC9 /* AdHocStefan */ = {