forked from billymeltdown/cocoafob
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcocoafob.m
107 lines (94 loc) · 3.13 KB
/
cocoafob.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//
// cocoafob.m
// CocoaFob Test Utility
//
// Created by Gleb Dolgich on 09/02/2009.
// Follow me on Twitter @glebd.
// Copyright (C) 2009-2012 PixelEspresso. All rights reserved.
// BSD License
//
#import <Foundation/Foundation.h>
#import <CocoaFob/CFobLicGenerator.h>
#import <CocoaFob/CFobLicVerifier.h>
// Pass private key file name and registration name string to generate an autoreleased string containing registration code.
NSString *codegen(NSString *privKeyFileName, NSString *regName)
{
NSError *err = nil;
NSString *privKey = [NSString stringWithContentsOfFile:privKeyFileName encoding:NSASCIIStringEncoding error:&err];
if (privKey == nil)
return nil;
CFobLicGenerator *generator = [[[CFobLicGenerator alloc] init] autorelease];
if (![generator setPrivateKey:privKey error:&err]) {
NSLog(@"%@", err);
return nil;
}
NSString *regCode = [generator generateRegCodeForName:regName error:&err];
if (regCode == nil) {
NSLog(@"%@", err);
return nil;
}
return regCode;
}
// Pass public key, registration name and registration code to verify it
BOOL codecheck(NSString *pubKeyFileName, NSString *regName, NSString *regCode)
{
NSError *err = nil;
NSString *pubKey = [NSString stringWithContentsOfFile:pubKeyFileName encoding:NSASCIIStringEncoding error:&err];
if (pubKey == nil)
return NO;
CFobLicVerifier *verifier = [[[CFobLicVerifier alloc] init] autorelease];
if (![verifier setPublicKey:pubKey error:&err]) {
NSLog(@"%@", err);
return NO;
}
BOOL result = [verifier verifyRegCode:regCode forName:regName error:&err];
if (!result)
NSLog(@"%@", err);
return result;
}
// Uses NSUserDefaults to parse command-line arguments:
// -privkey <private-key-file-name>
// -name <registration-name>
// Prints generated registration code.
// -pubkey <public-key-file-name>
// -code <registration-code>
// Verifies registration code.
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
puts("CocoaFob Command Line Utility Version 2.0");
#ifdef TEST
smoketest();
#endif
NSUserDefaults *args = [NSUserDefaults standardUserDefaults];
NSString *privKeyFileName = [args stringForKey:@"privkey"];
NSString *pubKeyFileName = [args stringForKey:@"pubkey"];
NSString *regName = [args stringForKey:@"name"];
NSString *regCodeIn = [args stringForKey:@"code"];
if (!((privKeyFileName && regName) || (pubKeyFileName && regName && regCodeIn))) {
puts("Usage: cocoafob {-privkey <priv-key-file> -name <reg-name>|-pubkey <pub-key-file> -name <reg-name> -code <reg-code>}");
return 1;
}
int retval = 0;
if (regCodeIn && pubKeyFileName && regName) {
// Verify supplied registration code
BOOL check = codecheck(pubKeyFileName, regName, regCodeIn);
if (check) {
puts("OK");
} else {
puts("Error");
retval = 3;
}
} else {
// Generate registration code
NSString *regCode = codegen(privKeyFileName, regName);
if (!regCode) {
puts("Error");
retval = 2;
} else {
puts([regCode UTF8String]);
}
}
[pool drain];
return retval;
}