This commit is contained in:
Kornel
2018-09-15 17:04:05 +01:00
parent c094a38231
commit 98ea3e3d57
5 changed files with 55 additions and 21 deletions
+44 -10
View File
@@ -99,6 +99,7 @@
5AAD00691E0C2DAB00AF411E /* bsdiff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5D06E8DB0FD68CB9005AE3F6 /* bsdiff.c */; };
5AAD006A1E0C2DB500AF411E /* sais.c in Sources */ = {isa = PBXBuildFile; fileRef = 7223E7611AD1AEFF008E3161 /* sais.c */; };
5AAD006C1E0C2DBF00AF411E /* libxar.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AAD006B1E0C2DBF00AF411E /* libxar.tbd */; };
5AB8F169214D4AE300A1187F /* SUSignatures.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF04876214D2E5F00B5789F /* SUSignatures.m */; };
5AD0FA7F1C73F2E2004BCEFF /* testappcast.xml in Resources */ = {isa = PBXBuildFile; fileRef = 5AD0FA7E1C73F2E2004BCEFF /* testappcast.xml */; };
5AE13F781E0C9B12000D2C2C /* DSASignature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE13F771E0C9B12000D2C2C /* DSASignature.swift */; };
5AE13FA01E0D4F65000D2C2C /* Appcast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE13F9F1E0D4F65000D2C2C /* Appcast.swift */; };
@@ -150,8 +151,8 @@
61177A1F0D1112E900749C97 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6117796E0D1112E000749C97 /* IOKit.framework */; };
6120721209CC5C4B007FE0F6 /* SUAutomaticUpdateAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = 6120721009CC5C4B007FE0F6 /* SUAutomaticUpdateAlert.h */; settings = {ATTRIBUTES = (); }; };
6120721309CC5C4B007FE0F6 /* SUAutomaticUpdateAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 6120721109CC5C4B007FE0F6 /* SUAutomaticUpdateAlert.m */; };
61299A2F09CA2DAB00B7442F /* SUDSAVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 61299A2D09CA2DAB00B7442F /* SUDSAVerifier.h */; settings = {ATTRIBUTES = (); }; };
61299A3009CA2DAB00B7442F /* SUDSAVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 61299A2E09CA2DAB00B7442F /* SUDSAVerifier.m */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
61299A2F09CA2DAB00B7442F /* SUSignatureVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 61299A2D09CA2DAB00B7442F /* SUSignatureVerifier.h */; settings = {ATTRIBUTES = (); }; };
61299A3009CA2DAB00B7442F /* SUSignatureVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 61299A2E09CA2DAB00B7442F /* SUSignatureVerifier.m */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
61299A5C09CA6D4500B7442F /* SUConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 61299A5B09CA6D4500B7442F /* SUConstants.h */; settings = {ATTRIBUTES = (); }; };
61299A6009CA6EB100B7442F /* SUConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 61299A5F09CA6EB100B7442F /* SUConstants.m */; };
61299A8D09CA790200B7442F /* SUUnarchiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 61299A8B09CA790200B7442F /* SUUnarchiver.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -688,8 +689,8 @@
612279D90DB5470200AB99EA /* Sparkle Unit Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Sparkle Unit Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
612279DA0DB5470200AB99EA /* SparkleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SparkleTests-Info.plist"; sourceTree = "<group>"; };
61227A150DB548B800AB99EA /* SUVersionComparisonTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUVersionComparisonTest.m; sourceTree = "<group>"; };
61299A2D09CA2DAB00B7442F /* SUDSAVerifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUDSAVerifier.h; sourceTree = "<group>"; };
61299A2E09CA2DAB00B7442F /* SUDSAVerifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUDSAVerifier.m; sourceTree = "<group>"; };
61299A2D09CA2DAB00B7442F /* SUSignatureVerifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUSignatureVerifier.h; sourceTree = "<group>"; };
61299A2E09CA2DAB00B7442F /* SUSignatureVerifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUSignatureVerifier.m; sourceTree = "<group>"; };
61299A5B09CA6D4500B7442F /* SUConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUConstants.h; sourceTree = "<group>"; };
61299A5F09CA6EB100B7442F /* SUConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SUConstants.m; sourceTree = "<group>"; };
61299A8B09CA790200B7442F /* SUUnarchiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SUUnarchiver.h; sourceTree = "<group>"; };
@@ -1171,9 +1172,34 @@
path = generate_appcast;
sourceTree = "<group>";
};
5AB8F16E214D560700A1187F /* ed25519 */ = {
isa = PBXGroup;
children = (
5AB8F171214D564A00A1187F /* add_scalar.c */,
5AB8F174214D564B00A1187F /* ed25519.h */,
5AB8F17C214D564B00A1187F /* fe.c */,
5AB8F173214D564B00A1187F /* fe.h */,
5AB8F179214D564B00A1187F /* fixedint.h */,
5AB8F175214D564B00A1187F /* ge.c */,
5AB8F17A214D564B00A1187F /* ge.h */,
5AB8F178214D564B00A1187F /* key_exchange.c */,
5AB8F17F214D564C00A1187F /* keypair.c */,
5AB8F176214D564B00A1187F /* precomp_data.h */,
5AB8F16F214D564A00A1187F /* sc.c */,
5AB8F17E214D564B00A1187F /* sc.h */,
5AB8F17B214D564B00A1187F /* seed.c */,
5AB8F172214D564B00A1187F /* sha512.c */,
5AB8F170214D564A00A1187F /* sha512.h */,
5AB8F17D214D564B00A1187F /* sign.c */,
5AB8F177214D564B00A1187F /* verify.c */,
);
path = ed25519;
sourceTree = "<group>";
};
5AF04874214D2E2800B5789F /* Signatures */ = {
isa = PBXGroup;
children = (
5AB8F16E214D560700A1187F /* ed25519 */,
5AF04875214D2E5F00B5789F /* SUSignatures.h */,
5AF04876214D2E5F00B5789F /* SUSignatures.m */,
);
@@ -1343,8 +1369,8 @@
children = (
61B078CC15A5FB6100600039 /* SUCodeSigningVerifier.h */,
61B078CD15A5FB6100600039 /* SUCodeSigningVerifier.m */,
61299A2D09CA2DAB00B7442F /* SUDSAVerifier.h */,
61299A2E09CA2DAB00B7442F /* SUDSAVerifier.m */,
61299A2D09CA2DAB00B7442F /* SUSignatureVerifier.h */,
61299A2E09CA2DAB00B7442F /* SUSignatureVerifier.m */,
729924711DF3478A00DBCDF5 /* SUUpdateValidator.h */,
729924721DF3478A00DBCDF5 /* SUUpdateValidator.m */,
);
@@ -1456,8 +1482,14 @@
files = (
723B25301CEAB3A600909873 /* bscommon.h in Headers */,
611142E910FB1BE5009810AA /* bspatch.h in Headers */,
5AB8F185214D564C00A1187F /* ed25519.h in Headers */,
5AB8F184214D564C00A1187F /* fe.h in Headers */,
5AB8F18A214D564C00A1187F /* fixedint.h in Headers */,
5AB8F18B214D564C00A1187F /* ge.h in Headers */,
5AB8F187214D564C00A1187F /* precomp_data.h in Headers */,
5AB8F18F214D564C00A1187F /* sc.h in Headers */,
5AB8F181214D564C00A1187F /* sha512.h in Headers */,
61299B3609CB04E000B7442F /* Sparkle.h in Headers */,
5AF04877214D2E5F00B5789F /* SUSignatures.h in Headers */,
61B5FC0D09C4FC8200B25A18 /* SUAppcast.h in Headers */,
61B5FC7009C51F4A00B25A18 /* SUAppcastItem.h in Headers */,
34074BA71FEAC417001CB3A5 /* SPUDownloaderDeprecated.h in Headers */,
@@ -1472,7 +1504,6 @@
61299A5C09CA6D4500B7442F /* SUConstants.h in Headers */,
6102FE4A0E07803800F85D09 /* SUDiskImageUnarchiver.h in Headers */,
61B078CE15A5FB6100600039 /* SUCodeSigningVerifier.h in Headers */,
61299A2F09CA2DAB00B7442F /* SUDSAVerifier.h in Headers */,
34074B9F1FEABD5A001CB3A5 /* SPUDownloadData.h in Headers */,
55E6F33319EC9F6C00005E76 /* SUErrors.h in Headers */,
14652F8419A978C200959E44 /* SUExport.h in Headers */,
@@ -1490,6 +1521,8 @@
618FA5050DAE8AB80026945C /* SUPlainInstaller.h in Headers */,
6101347B0DD2541A0049ACDF /* SUProbingUpdateDriver.h in Headers */,
61B93C090DD112FF00DCD2F8 /* SUScheduledUpdateDriver.h in Headers */,
5AF04877214D2E5F00B5789F /* SUSignatures.h in Headers */,
61299A2F09CA2DAB00B7442F /* SUSignatureVerifier.h in Headers */,
61A225A40D1C4AC000430CCD /* SUStandardVersionComparator.h in Headers */,
6196CFF909C72148000DC222 /* SUStatusController.h in Headers */,
61A2279C0D1CEE7600430CCD /* SUSystemProfiler.h in Headers */,
@@ -1966,6 +1999,7 @@
726F2CE71BC9C3E2001971A4 /* SUOperatingSystem.m in Sources */,
55C14F24136EF86F00649790 /* SUPackageInstaller.m in Sources */,
55C14F21136EF84D00649790 /* SUPlainInstaller.m in Sources */,
5AB8F169214D4AE300A1187F /* SUSignatures.m in Sources */,
55C14F22136EF86000649790 /* SUStandardVersionComparator.m in Sources */,
55C14F20136EF84300649790 /* SUStatusController.m in Sources */,
55C14F23136EF86700649790 /* SUSystemProfiler.m in Sources */,
@@ -2090,7 +2124,6 @@
723B252D1CEAB3A600909873 /* bscommon.c in Sources */,
34074B9E1FEABD5A001CB3A5 /* SPUDownloadData.m in Sources */,
5D06E8EB0FD68CE4005AE3F6 /* bspatch.c in Sources */,
5AF04878214D2E5F00B5789F /* SUSignatures.m in Sources */,
61B5FBB709C4FAFF00B25A18 /* SUAppcast.m in Sources */,
61B5FC6F09C51F4900B25A18 /* SUAppcastItem.m in Sources */,
72316BDF1E0E17910039EFD9 /* SUApplicationInfo.m in Sources */,
@@ -2106,7 +2139,6 @@
61B078CF15A5FB6100600039 /* SUCodeSigningVerifier.m in Sources */,
61299A6009CA6EB100B7442F /* SUConstants.m in Sources */,
6102FE4B0E07803800F85D09 /* SUDiskImageUnarchiver.m in Sources */,
61299A3009CA2DAB00B7442F /* SUDSAVerifier.m in Sources */,
7275F9C21B5F1F2900B1D19E /* SUFileManager.m in Sources */,
722954C51D04E66F00ECF9CA /* SUFileOperationConstants.m in Sources */,
767B61AD1972D488004E0C3C /* SUGuidedPackageInstaller.m in Sources */,
@@ -2121,6 +2153,8 @@
6101347C0DD2541A0049ACDF /* SUProbingUpdateDriver.m in Sources */,
61B93C0A0DD112FF00DCD2F8 /* SUScheduledUpdateDriver.m in Sources */,
34074BA81FEAC417001CB3A5 /* SPUDownloaderDeprecated.m in Sources */,
5AF04878214D2E5F00B5789F /* SUSignatures.m in Sources */,
61299A3009CA2DAB00B7442F /* SUSignatureVerifier.m in Sources */,
61A225A50D1C4AC000430CCD /* SUStandardVersionComparator.m in Sources */,
6196CFFA09C72149000DC222 /* SUStatusController.m in Sources */,
61A2279D0D1CEE7600430CCD /* SUSystemProfiler.m in Sources */,
+1 -1
View File
@@ -19,7 +19,7 @@
@class SUSignatures;
@class SUPublicKeys;
@interface SUDSAVerifier : NSObject
@interface SUSignatureVerifier : NSObject
+ (BOOL)validatePath:(NSString *)path withSignatures:(SUSignatures *)signatures withPublicKeys:(SUPublicKeys *)pkeys;
+3 -3
View File
@@ -12,7 +12,7 @@
// Copyright 2011 Mark Hamlin. Licensed under BSD.
//
#import "SUDSAVerifier.h"
#import "SUSignatureVerifier.h"
#import "SULog.h"
#import "SUSignatures.h"
#include <CommonCrypto/CommonDigest.h>
@@ -20,7 +20,7 @@
#include "AppKitPrevention.h"
@implementation SUDSAVerifier {
@implementation SUSignatureVerifier {
SecKeyRef _secKey;
}
@@ -40,7 +40,7 @@
return NO;
}
SUDSAVerifier *verifier = [(SUDSAVerifier *)[self alloc] initWithPublicKeys:pkeys];
SUSignatureVerifier *verifier = [(SUSignatureVerifier *)[self alloc] initWithPublicKeys:pkeys];
if (!verifier) {
return NO;
+4 -4
View File
@@ -7,7 +7,7 @@
//
#import "SUUpdateValidator.h"
#import "SUDSAVerifier.h"
#import "SUSignatureVerifier.h"
#import "SUCodeSigningVerifier.h"
#import "SUInstaller.h"
#import "SUHost.h"
@@ -49,7 +49,7 @@
prevalidatedDsaSignature = NO;
SULog(SULogLevelError, @"Failed to validate update before unarchiving because no DSA signature was found");
} else {
prevalidatedDsaSignature = [SUDSAVerifier validatePath:downloadPath withSignatures:signatures withPublicKeys:publicKeys];
prevalidatedDsaSignature = [SUSignatureVerifier validatePath:downloadPath withSignatures:signatures withPublicKeys:publicKeys];
if (!prevalidatedDsaSignature) {
SULog(SULogLevelError, @"DSA signature validation before unarchiving failed for update %@", downloadPath);
}
@@ -96,7 +96,7 @@
// Check to see if we have a package or bundle to validate
if (isPackage) {
// For package type updates, all we do is check if the DSA signature is valid
BOOL validationCheckSuccess = [SUDSAVerifier validatePath:downloadPath withSignatures:signatures withPublicKeys:publicKeys];
BOOL validationCheckSuccess = [SUSignatureVerifier validatePath:downloadPath withSignatures:signatures withPublicKeys:publicKeys];
if (!validationCheckSuccess) {
SULog(SULogLevelError, @"DSA signature validation of the package failed. The update contains an installer package, and valid DSA signatures are mandatory for all installer packages. The update will be rejected. Sign the installer with a valid DSA key or use an .app bundle update instead.");
}
@@ -156,7 +156,7 @@
// In that case, the check ensures that the app author has correctly used DSA keys, so that the app will be updateable in the next version.
// However if the new and old DSA keys are the same, then this is a security measure.
if (newPublicKeys.dsaPubKey != nil) {
if (![SUDSAVerifier validatePath:downloadedPath withSignatures:signatures withPublicKeys:newPublicKeys]) {
if (![SUSignatureVerifier validatePath:downloadedPath withSignatures:signatures withPublicKeys:newPublicKeys]) {
SULog(SULogLevelError, @"DSA signature validation failed. The update has a public DSA key and is signed with a DSA key, but the %@ doesn't match the signature. The update will be rejected.",
dsaKeysMatch ? @"public key" : @"new public key shipped with the update");
return NO;
+3 -3
View File
@@ -8,7 +8,7 @@
#import <Foundation/Foundation.h>
#import <XCTest/XCTest.h>
#import "SUDSAVerifier.h"
#import "SUSignatureVerifier.h"
#import "SUSignatures.h"
@interface SUDSAVerifierTest : XCTestCase
@@ -67,7 +67,7 @@
- (BOOL)checkFile:(NSString *)aFile withPubKey:(NSString *)pubKey signature:(NSString *)sigString
{
SUPublicKeys *pubKeys = [[SUPublicKeys alloc] initWithDsa:pubKey ed:nil];
SUDSAVerifier *v = [[SUDSAVerifier alloc] initWithPublicKeys:pubKeys];
SUSignatureVerifier *v = [[SUSignatureVerifier alloc] initWithPublicKeys:pubKeys];
SUSignatures *sig = [[SUSignatures alloc] initWithDsa:sigString ed:nil];
@@ -86,7 +86,7 @@
XCTAssertNotNil(sig);
XCTAssertNotNil(sig.dsaSignature);
XCTAssertTrue([SUDSAVerifier validatePath:self.testFile withSignatures:sig withPublicKeys:pubkeys], @"Expected valid signature");
XCTAssertTrue([SUSignatureVerifier validatePath:self.testFile withSignatures:sig withPublicKeys:pubkeys], @"Expected valid signature");
}
@end