From b2563e534d895b35842e749233baeb18643648a4 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 10 Jul 2015 22:33:09 -0700 Subject: [PATCH] Null terminate strings before passing them to BIO_puts --- Limelight/Crypto/CryptoManager.h | 1 + Limelight/Crypto/CryptoManager.m | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Limelight/Crypto/CryptoManager.h b/Limelight/Crypto/CryptoManager.h index 8fe40dd..ba384d3 100644 --- a/Limelight/Crypto/CryptoManager.h +++ b/Limelight/Crypto/CryptoManager.h @@ -16,6 +16,7 @@ + (NSData*) readKeyFromFile; + (NSData*) readP12FromFile; + (NSData*) getSignatureFromCert:(NSData*)cert; ++ (NSData*) nullTerminateString:(NSData*)data; - (NSData*) createAESKeyFromSalt:(NSData*)saltedPIN; - (NSData*) SHA1HashData:(NSData*)data; diff --git a/Limelight/Crypto/CryptoManager.m b/Limelight/Crypto/CryptoManager.m index 3269494..62144b0 100644 --- a/Limelight/Crypto/CryptoManager.m +++ b/Limelight/Crypto/CryptoManager.m @@ -76,8 +76,14 @@ static NSData* p12 = nil; return (((int)[data length] + 15) / 16) * 16; } ++ (NSData*) nullTerminateString:(NSData*)data { + NSMutableData* mutData = [NSMutableData dataWithData:data]; + [mutData appendBytes:"" length:1]; + return mutData; +} + - (bool) verifySignature:(NSData *)data withSignature:(NSData*)signature andCert:(NSData*)cert { - const char* buffer = [cert bytes]; + const char* buffer = [[CryptoManager nullTerminateString:cert] bytes]; X509* x509; BIO* bio = BIO_new(BIO_s_mem()); BIO_puts(bio, buffer); @@ -105,7 +111,7 @@ static NSData* p12 = nil; } - (NSData *)signData:(NSData *)data withKey:(NSData *)key { - const char* buffer = [key bytes]; + const char* buffer = [[CryptoManager nullTerminateString:key] bytes]; BIO* bio = BIO_new(BIO_s_mem()); BIO_puts(bio, buffer); @@ -188,7 +194,7 @@ static NSData* p12 = nil; } + (NSData *)getSignatureFromCert:(NSData *)cert { - const char* buffer = [cert bytes]; + const char* buffer = [[CryptoManager nullTerminateString:cert] bytes]; X509* x509; BIO* bio = BIO_new(BIO_s_mem()); BIO_puts(bio, buffer);