| 
				
			 | 
			
			
				@@ -489,6 +489,76 @@ NSMutableDictionary *fileStreams = nil; 
			 | 
		
	
		
			
			| 
				489
			 | 
			
				489
			 | 
			
			
				     }]; 
			 | 
		
	
		
			
			| 
				490
			 | 
			
				490
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				491
			 | 
			
				491
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				492
			 | 
			
			
				+# pragma mark - hash 
			 | 
		
	
		
			
			| 
				
			 | 
			
				493
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				494
			 | 
			
			
				+RCT_EXPORT_METHOD(hash:(NSString *)filepath 
			 | 
		
	
		
			
			| 
				
			 | 
			
				495
			 | 
			
			
				+                  algorithm:(NSString *)algorithm 
			 | 
		
	
		
			
			| 
				
			 | 
			
				496
			 | 
			
			
				+                  resolver:(RCTPromiseResolveBlock)resolve 
			 | 
		
	
		
			
			| 
				
			 | 
			
				497
			 | 
			
			
				+                  rejecter:(RCTPromiseRejectBlock)reject) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				498
			 | 
			
			
				+{ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				499
			 | 
			
			
				+  BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filepath]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				500
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				501
			 | 
			
			
				+  if (!fileExists) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				502
			 | 
			
			
				+    return reject(@"ENOENT", [NSString stringWithFormat:@"ENOENT: no such file or directory, open '%@'", filepath], nil); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				503
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				504
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				505
			 | 
			
			
				+  NSError *error = nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				506
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				507
			 | 
			
			
				+  NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filepath error:&error]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				508
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				509
			 | 
			
			
				+  if (error) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				510
			 | 
			
			
				+    return [self reject:reject withError:error]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				511
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				512
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				513
			 | 
			
			
				+  if ([attributes objectForKey:NSFileType] == NSFileTypeDirectory) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				514
			 | 
			
			
				+    return reject(@"EISDIR", @"EISDIR: illegal operation on a directory, read", nil); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				515
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				516
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				517
			 | 
			
			
				+  NSData *content = [[NSFileManager defaultManager] contentsAtPath:filepath]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				518
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				519
			 | 
			
			
				+  NSArray *keys = [NSArray arrayWithObjects:@"md5", @"sha1", @"sha224", @"sha256", @"sha384", @"sha512", nil]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				520
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				521
			 | 
			
			
				+  NSArray *digestLengths = [NSArray arrayWithObjects: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				522
			 | 
			
			
				+    @CC_MD5_DIGEST_LENGTH, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				523
			 | 
			
			
				+    @CC_SHA1_DIGEST_LENGTH, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				524
			 | 
			
			
				+    @CC_SHA224_DIGEST_LENGTH, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				525
			 | 
			
			
				+    @CC_SHA256_DIGEST_LENGTH, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				526
			 | 
			
			
				+    @CC_SHA384_DIGEST_LENGTH, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				527
			 | 
			
			
				+    @CC_SHA512_DIGEST_LENGTH, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				528
			 | 
			
			
				+    nil]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				529
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				530
			 | 
			
			
				+  NSDictionary *keysToDigestLengths = [NSDictionary dictionaryWithObjects:digestLengths forKeys:keys]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				531
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				532
			 | 
			
			
				+  int digestLength = [[keysToDigestLengths objectForKey:algorithm] intValue]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				533
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				534
			 | 
			
			
				+  if (!digestLength) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				535
			 | 
			
			
				+    return reject(@"Error", [NSString stringWithFormat:@"Invalid hash algorithm '%@'", algorithm], nil); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				536
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				537
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				538
			 | 
			
			
				+  unsigned char buffer[digestLength]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				539
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				540
			 | 
			
			
				+  if ([algorithm isEqualToString:@"md5"]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				541
			 | 
			
			
				+    CC_MD5(content.bytes, (CC_LONG)content.length, buffer); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				542
			 | 
			
			
				+  } else if ([algorithm isEqualToString:@"sha1"]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				543
			 | 
			
			
				+    CC_SHA1(content.bytes, (CC_LONG)content.length, buffer); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				544
			 | 
			
			
				+  } else if ([algorithm isEqualToString:@"sha224"]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				545
			 | 
			
			
				+    CC_SHA224(content.bytes, (CC_LONG)content.length, buffer); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				546
			 | 
			
			
				+  } else if ([algorithm isEqualToString:@"sha256"]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				547
			 | 
			
			
				+    CC_SHA256(content.bytes, (CC_LONG)content.length, buffer); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				548
			 | 
			
			
				+  } else if ([algorithm isEqualToString:@"sha384"]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				549
			 | 
			
			
				+    CC_SHA384(content.bytes, (CC_LONG)content.length, buffer); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				550
			 | 
			
			
				+  } else if ([algorithm isEqualToString:@"sha512"]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				551
			 | 
			
			
				+    CC_SHA512(content.bytes, (CC_LONG)content.length, buffer); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				552
			 | 
			
			
				+  } else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				553
			 | 
			
			
				+    return reject(@"Error", [NSString stringWithFormat:@"Invalid hash algorithm '%@'", algorithm], nil); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				554
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				555
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				556
			 | 
			
			
				+  NSMutableString *output = [NSMutableString stringWithCapacity:digestLength * 2]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				557
			 | 
			
			
				+  for(int i = 0; i < digestLength; i++) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				558
			 | 
			
			
				+    [output appendFormat:@"%02x",buffer[i]]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				559
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				560
			 | 
			
			
				+  resolve(output); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				561
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				492
			 | 
			
				562
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				493
			 | 
			
				563
			 | 
			
			
				 # pragma mark - mkdir 
			 | 
		
	
		
			
			| 
				494
			 | 
			
				564
			 | 
			
			
				  
			 |