From 2a0c088fcdb60089f7cf93d1ab87db15ce0bb0d4 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 22 Jan 2022 23:28:11 +0800 Subject: [PATCH] CNS // Phase 5: + MD5 check of the CSV data file. --- Source/LanguageModelManager.h | 1 + Source/LanguageModelManager.mm | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Source/LanguageModelManager.h b/Source/LanguageModelManager.h index 78b541d1..0d7dbfc8 100644 --- a/Source/LanguageModelManager.h +++ b/Source/LanguageModelManager.h @@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN + (void)loadDataModels; + (void)deployZipDataFile:(NSString *)filenameWithoutExtension; + (void)loadCNSData; ++ (BOOL)checkIfCNSDataExistAndHashMatched; + (void)loadUserPhrases; + (void)loadUserPhraseReplacement; + (BOOL)checkIfUserLanguageModelFilesExist; diff --git a/Source/LanguageModelManager.mm b/Source/LanguageModelManager.mm index e4480e56..a16a1891 100644 --- a/Source/LanguageModelManager.mm +++ b/Source/LanguageModelManager.mm @@ -64,6 +64,23 @@ static void LTLoadLanguageModelFile(NSString *filenameWithoutExtension, vChewing glanguageModelCoreCHS.loadCNSData([[self cnsDataPath] UTF8String]); } ++ (BOOL)checkIfCNSDataExistAndHashMatched +{ + if (![self checkIfUserDataFolderExists]) { + NSLog(@"User Data Folder N/A."); + return NO; + } + if (![self checkIfFileExist:[self cnsDataPath]]) { + NSLog(@"Extracted CNS Data Not Found."); + return NO; + } + if ([AWFileHash md5HashOfFileAtPath:[self cnsDataPath]] != [[NSUserDefaults standardUserDefaults] objectForKey:kMD5HashCNSData]) { + NSLog(@"Existing CNS CSV Data fingerprint mismatch, must be tampered since it gets extracted."); + return NO; + } + return YES; +} + + (void)loadUserPhrases { glanguageModelCoreCHT.loadUserPhrases([[self userPhrasesDataPath:kBopomofoModeIdentifierCHT] UTF8String], [[self excludedPhrasesDataPath:kBopomofoModeIdentifierCHT] UTF8String]);