Skip to content

Commit

Permalink
bugs fixed, new features introduced.
Browse files Browse the repository at this point in the history
  • Loading branch information
pewsou committed Feb 11, 2023
1 parent 0121b02 commit 0adb0d5
Show file tree
Hide file tree
Showing 46 changed files with 5,154 additions and 2,508 deletions.
9 changes: 7 additions & 2 deletions src/ASFKAuthorizationMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
// Copyright © 2019-2023 Boris Vigman. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ASFKMBSecret.h"
#import "ASFKBase.h"
@interface ASFKAuthorizationMgr : NSObject{
@public ASFKSecretComparisonProc secretProcConfig;
@public ASFKSecretComparisonProc secretProcCreate;
Expand All @@ -26,12 +26,14 @@
@public ASFKSecretComparisonProc secretProcSecurity;
@public ASFKSecretComparisonProc secretProcUnicast;
@public ASFKSecretComparisonProc secretProcMulticast;
@public ASFKSecretComparisonProc secretProcBroadcast;
@public ASFKSecretComparisonProc secretProcHost;
@public ASFKSecretComparisonProc secretProcIssuer;
@public ASFKSecretComparisonProc secretProcModerate;

}
@property (readonly) ASFKMasterSecret* masterSecret;
@property (readonly) ASFKFloatingSecret* floatingSecret;
/*!
@brief sets master secret.
@discussion some operations require secret to be provided as parameter. Master secret overrides private secret in creation/deletion of group/user, but does not override reading/popping operations. Nil secret means that no secret exists, therefore secret check is skipped.
Expand All @@ -41,12 +43,15 @@
*/
-(BOOL) setMasterSecret:(ASFKMasterSecret*)oldsec newSecret:(ASFKMasterSecret*)newsec;
-(BOOL) isMasterSecretValid:(ASFKMasterSecret*)msecret matcher:(ASFKSecretComparisonProc)match;
-(BOOL) setFloatingSecret:(ASFKFloatingSecret*)newsec authorizeWith:(ASFKMasterSecret*) msec;
-(BOOL) isFloatingSecretValid:(ASFKFloatingSecret*)fsecret matcher:(ASFKSecretComparisonProc)match;
-(BOOL) matchCreatorSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchDiscarderSecret:(ASFKSecret*)secCurrent with:(ASFKSecret*)secOther;
-(BOOL) matchReaderSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchPopperSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchUnicasterSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchMulticasterSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchBroadcasterSecret:(ASFKFloatingSecret*)secCurrent with:(ASFKFloatingSecret*)secOther;
-(BOOL) matchHostSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchSecuritySecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchConfigSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
Expand Down
105 changes: 96 additions & 9 deletions src/ASFKAuthorizationMgr.mm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// ASFKAuthorizationMgr.m
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
// Copyright © 2019-2023 Boris Vigman. All rights reserved.
//
#import "ASFKBase.h"
#import "ASFKAuthorizationMgr.h"
Expand Down Expand Up @@ -58,7 +58,17 @@ -(id)init{
return YES;
}
};

secretProcBroadcast=^BOOL(ASFKSecret* sec0,ASFKSecret* sec1){
if(sec0 && sec1){
return [sec1 matchesBroadcasterSecret:sec0];
}
else if(sec0 || sec1){
return NO;
}
else{
return YES;
}
};
secretProcRead=^BOOL(ASFKSecret* sec0,ASFKSecret* sec1){
if(sec0 && sec1){
return [sec1 matchesReaderSecret:sec0];
Expand Down Expand Up @@ -149,7 +159,6 @@ -(id)init{
return YES;
}
};


}
return self;
Expand All @@ -160,11 +169,10 @@ -(BOOL) setMasterSecret:(ASFKMasterSecret*)oldsec newSecret:(ASFKMasterSecret*)n
if(newsec!=nil){
//test validity of new secret
if([newsec validSecretSecurity]){

_masterSecret=newsec;
masterSecretBack=nil;

ASFKLog(@"DONE");
DASFKLog(@"DONE");
return YES;
}
return NO;
Expand All @@ -189,7 +197,7 @@ -(BOOL) setMasterSecret:(ASFKMasterSecret*)oldsec newSecret:(ASFKMasterSecret*)n
_masterSecret=newsec;
masterSecretBack=nil;

ASFKLog(@"DONE");
DASFKLog(@"DONE");
return YES;
}
return NO;
Expand All @@ -199,13 +207,75 @@ -(BOOL) setMasterSecret:(ASFKMasterSecret*)oldsec newSecret:(ASFKMasterSecret*)n
[_masterSecret invalidateAll];
_masterSecret=newsec;

ASFKLog(@"DONE");
DASFKLog(@"DONE");
return YES;
}
}
return NO;
}
ASFKLog(@"FAILED");
WASFKLog(@"FAILED");
return NO;
}
-(BOOL) setFloatingSecret:(ASFKFloatingSecret*)newsec authorizeWith:(ASFKMasterSecret*) msec{
BOOL mastersecValid=NO;
if(_masterSecret == nil && msec == nil){
mastersecValid=YES;
}
// else if(_masterSecret != nil && msec == nil){
//
// }
// else if(_masterSecret == nil && msec != nil){
//
// }
else if(_masterSecret != nil && msec != nil){
mastersecValid=[_masterSecret validSecretSecurity];
mastersecValid &= [msec validSecretSecurity];
mastersecValid &= [self isMasterSecretValid:msec matcher:self->secretProcSecurity];

}
// if(_masterSecret ){
//
// if(msec){
//
// }
// else{
//
// }
// }
// else if(msec==nil){
// mastersecValid=YES;
// }

if(mastersecValid){
if(_floatingSecret==nil && newsec==nil){
DASFKLog(@"DONE");
return YES;
}
else if(_floatingSecret!=nil && newsec!=nil ){
if([_floatingSecret validCharacteristic] && [newsec validCharacteristic]){
_floatingSecret=newsec;
DASFKLog(@"DONE");
return YES;
}
}
else if(_floatingSecret!=nil && newsec==nil){
if([_floatingSecret validCharacteristic] ){
_floatingSecret=newsec;
DASFKLog(@"DONE");
return YES;
}
}
else if(_floatingSecret==nil && newsec!=nil){
if([newsec validCharacteristic] ){
_floatingSecret=newsec;
DASFKLog(@"DONE");
return YES;
}

}
}

WASFKLog(@"FAILED");
return NO;
}
-(BOOL) matchCreatorSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther{
Expand Down Expand Up @@ -281,6 +351,15 @@ -(BOOL) matchMulticasterSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateS
}
return NO;
}
-(BOOL) matchBroadcasterSecret:(ASFKFloatingSecret*)secCurrent with:(ASFKFloatingSecret*)secOther{
if(secCurrent && secOther){
BOOL r1=secretProcBroadcast(secCurrent,secOther);
return r1;
}else if(secCurrent==nil && secOther==nil){
return YES;
}
return NO;
}
-(BOOL) matchConfigSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther{
if(secCurrent && secOther){
BOOL r1=secretProcConfig(secCurrent,secOther);
Expand Down Expand Up @@ -309,7 +388,6 @@ -(BOOL) matchIssuerSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret
return NO;
}

#pragma mark - Private methods
-(BOOL) isMasterSecretValid:(ASFKMasterSecret*)msecret matcher:(ASFKSecretComparisonProc)match{
if(_masterSecret && msecret){
BOOL r1=match(_masterSecret,msecret);
Expand All @@ -319,4 +397,13 @@ -(BOOL) isMasterSecretValid:(ASFKMasterSecret*)msecret matcher:(ASFKSecretCompar
}
return NO;
}
-(BOOL) isFloatingSecretValid:(ASFKFloatingSecret*)fsecret matcher:(ASFKSecretComparisonProc)match{
if(_floatingSecret && fsecret){
BOOL r1=match(_floatingSecret,fsecret);
return r1;
}else if(_floatingSecret==nil && fsecret==nil){
return YES;
}
return NO;
}
@end
6 changes: 5 additions & 1 deletion src/ASFKBase+Internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
// Created by Boris Vigman on 05/04/2019.
// Copyright © 2019-2023 Boris Vigman. All rights reserved.
//

#import "ASFKBase.h"
Expand All @@ -25,6 +26,9 @@
+(ASFK_IDENTITY_TYPE) generateIdentity;
+(NSString*) generateRandomString;
+(NSNumber*) generateRandomNumber;
+(NSArray*) splitArray:(NSArray*) array to:(NSUInteger) chunks;
+(NSArray*) groupArray:(NSArray*) array by:(NSUInteger) items;

-(BOOL) isCancellationRequested;
-(void) registerSession:(ASFKControlBlock*)cblk;
-(ASFKControlBlock*) newSession;
Expand Down
56 changes: 54 additions & 2 deletions src/ASFKBase+Internal.mm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
// Created by Boris Vigman on 05/04/2019.
// Copyright © 2019-2023 Boris Vigman. All rights reserved.
//

#import "ASFKBase+Internal.h"
Expand Down Expand Up @@ -52,7 +53,58 @@ +(NSNumber*) generateRandomNumber{
NSNumber* n=[NSNumber numberWithLongLong:r];
return n;
}

+(NSArray*) splitArray:(NSArray*) array to:(NSUInteger) chunks{
if(array && [array count]>0){
if(chunks > 0 && chunks <= [array count]){
NSMutableArray* ma=[NSMutableArray array];
NSUInteger asize=[array count]/chunks;
NSUInteger rem=[array count]%chunks;
for(NSUInteger i=0;i<chunks;++i){
NSMutableArray* ma0=[NSMutableArray array];
for(NSUInteger j=0;j<asize;++j){
[ma0 addObject:[array objectAtIndex:(i * asize) + j]];
}
[ma addObject:ma0];
}
if(rem>0){
for (NSUInteger k=0; k<rem; ++k) {
[[ma lastObject]addObject:[array objectAtIndex:(asize * chunks) + k]];
}
}
return ma;
}
return array;
}
return array;
}
+(NSArray*) groupArray:(NSArray*) array by:(NSUInteger) items{
if(array && [array count]>0){
if(items > 0 && items <= [array count]){
NSMutableArray* ma=[NSMutableArray array];
// NSUInteger chunks=[array count]/items;
// NSUInteger rem=[array count]%items;
// if(rem>0){
// ++chunks;
// }
for(NSUInteger i=0,j=0;i<[array count];++i,++j){
NSMutableArray* ma0=[ma lastObject];;
if(j==items){
j=0;
}
if(j==0){
ma0=[NSMutableArray array];
[ma addObject:ma0];
}
[ma0 addObject:[array objectAtIndex:i]];

}

return ma;
}
return array;
}
return array;
}
-(BOOL) isCancellationRequested{

return NO;
Expand Down
3 changes: 2 additions & 1 deletion src/ASFKBase+Statistics.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
// Created by Boris Vigman on 05/04/2019.
// Copyright © 2019-2023 Boris Vigman. All rights reserved.
//

#import "ASFKBase.h"
Expand Down
3 changes: 2 additions & 1 deletion src/ASFKBase+Statistics.mm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
// Created by Boris Vigman on 05/04/2019.
// Copyright © 2019-2023 Boris Vigman. All rights reserved.
//

#import "ASFKBase+Statistics.h"
Expand Down
Loading

0 comments on commit 0adb0d5

Please sign in to comment.