@@ -77,34 +77,64 @@ void smoketest()
77
77
return generator.regCode ;
78
78
}
79
79
80
+ // Pass public key, registration name and registration code to verify it
81
+ BOOL codecheck (NSString *pubKeyFileName, NSString *regName, NSString *regCode)
82
+ {
83
+ NSError *err = nil ;
84
+ NSString *pubKey = [NSString stringWithContentsOfFile: pubKeyFileName encoding: NSASCIIStringEncoding error: &err];
85
+ if (!pubKey || err)
86
+ return NO ;
87
+ CFobLicVerifier *verifier = [CFobLicVerifier verifierWithPublicKey: pubKey];
88
+ verifier.regName = regName;
89
+ verifier.regCode = regCode;
90
+ return [verifier verify ];
91
+ }
92
+
80
93
// Uses NSUserDefaults to parse command-line arguments:
81
94
// -privkey <private-key-file-name>
82
95
// -name <registration-name>
83
96
// Prints generated registration code.
97
+ // -pubkey <public-key-file-name>
98
+ // -code <registration-code>
99
+ // Verifies registration code.
84
100
int main (int argc, const char * argv[])
85
101
{
86
102
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc ] init ];
87
103
88
- puts (" CocoaFob Command Line Utility Version 1.0b2 " );
104
+ puts (" CocoaFob Command Line Utility Version 1.0b3 " );
89
105
90
106
#ifdef TEST
91
107
smoketest ();
92
108
#endif
93
109
NSUserDefaults *args = [NSUserDefaults standardUserDefaults ];
94
110
NSString *privKeyFileName = [args stringForKey: @" privkey" ];
111
+ NSString *pubKeyFileName = [args stringForKey: @" pubkey" ];
95
112
NSString *regName = [args stringForKey: @" name" ];
96
- if (!privKeyFileName || !regName) {
97
- puts (" Usage: cocoafob -privkey <priv-key-file> -name <reg-name>" );
113
+ NSString *regCodeIn = [args stringForKey: @" code" ];
114
+ if (!((privKeyFileName && regName) || (pubKeyFileName && regName && regCodeIn))) {
115
+ puts (" Usage: cocoafob {-privkey <priv-key-file> -name <reg-name>|-pubkey <pub-key-file> -name <reg-name> -code <reg-code>}" );
98
116
return 1 ;
99
117
}
100
- NSString *regCode = codegen (privKeyFileName, regName);
101
- int retval = 0 ;
102
- if (!regCode) {
103
- puts (" Error" );
104
- retval = 2 ;
105
- } else {
106
- puts ([regCode UTF8String ]);
107
- }
118
+ int retval = 0 ;
119
+ if (regCodeIn && pubKeyFileName && regName) {
120
+ // Verify supplied registration code
121
+ BOOL check = codecheck (pubKeyFileName, regName, regCodeIn);
122
+ if (check) {
123
+ puts (" OK" );
124
+ } else {
125
+ puts (" Error" );
126
+ retval = 3 ;
127
+ }
128
+ } else {
129
+ // Generate registration code
130
+ NSString *regCode = codegen (privKeyFileName, regName);
131
+ if (!regCode) {
132
+ puts (" Error" );
133
+ retval = 2 ;
134
+ } else {
135
+ puts ([regCode UTF8String ]);
136
+ }
137
+ }
108
138
[pool drain ];
109
139
return retval;
110
140
}
0 commit comments