aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPFunctions.m
diff options
context:
space:
mode:
authorMax <post@wickenrode.com>2015-10-13 14:55:04 +0200
committerMax <post@wickenrode.com>2015-10-13 14:56:00 +0200
commit63b23073b99097f03a57eb8f0e11a906cc4313d6 (patch)
tree795fec945a2f6a9cebfc2cfca3a88969086d993b /Source/SPFunctions.m
parent8c7fc9deaa3d005e0bf2afd6db5d5fa9bb63cf62 (diff)
downloadsequelpro-63b23073b99097f03a57eb8f0e11a906cc4313d6.tar.gz
sequelpro-63b23073b99097f03a57eb8f0e11a906cc4313d6.tar.bz2
sequelpro-63b23073b99097f03a57eb8f0e11a906cc4313d6.zip
Use a better RNG for IV when encrypting session files
Diffstat (limited to 'Source/SPFunctions.m')
-rw-r--r--Source/SPFunctions.m30
1 files changed, 30 insertions, 0 deletions
diff --git a/Source/SPFunctions.m b/Source/SPFunctions.m
index f485d36a..851c2422 100644
--- a/Source/SPFunctions.m
+++ b/Source/SPFunctions.m
@@ -29,6 +29,8 @@
// More info at <https://github.com/sequelpro/sequelpro>
#import "SPFunctions.h"
+#import <Security/Security.h>
+#import "SPOSInfo.h"
void SPMainQSync(void (^block)(void))
{
@@ -39,3 +41,31 @@ void SPMainQSync(void (^block)(void))
dispatch_sync(dispatch_get_main_queue(), block);
}
}
+
+int SPBetterRandomBytes(uint8_t *buf, size_t count)
+{
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_7
+ if([SPOSInfo isOSVersionAtLeastMajor:10 minor:7 patch:0]) {
+ return SecRandomCopyBytes(kSecRandomDefault, count, buf);
+ }
+#endif
+ // Version for 10.6
+ // https://developer.apple.com/library/prerelease/mac/documentation/Security/Conceptual/cryptoservices/RandomNumberGenerationAPIs/RandomNumberGenerationAPIs.html#//apple_ref/doc/uid/TP40011172-CH12-SW1
+ FILE *fp = fopen("/dev/random", "r");
+
+ if (!fp) return -1;
+
+ size_t i;
+ for (i=0; i<count; i++) {
+ int c = fgetc(fp);
+ if(c == EOF) { // /dev/random should never EOF
+ errno = ferror(fp);
+ return -1;
+ }
+ buf[i] = c;
+ }
+
+ fclose(fp);
+
+ return 0;
+}