<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -77,34 +77,64 @@ NSString *codegen(NSString *privKeyFileName, NSString *regName)
 	return generator.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:&amp;err];
+	if (!pubKey || err)
+		return NO;
+    CFobLicVerifier *verifier = [CFobLicVerifier verifierWithPublicKey:pubKey];
+    verifier.regName = regName;
+    verifier.regCode = regCode;
+    return [verifier verify];
+}
+
 // Uses NSUserDefaults to parse command-line arguments:
 // -privkey &lt;private-key-file-name&gt;
 // -name &lt;registration-name&gt;
 // Prints generated registration code.
+// -pubkey &lt;public-key-file-name&gt;
+// -code &lt;registration-code&gt;
+// Verifies registration code.
 int main(int argc, const char * argv[])
 {
 	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 	
-	puts(&quot;CocoaFob Command Line Utility Version 1.0b2&quot;);
+	puts(&quot;CocoaFob Command Line Utility Version 1.0b3&quot;);
 
 #ifdef TEST
 	smoketest();
 #endif
 	NSUserDefaults *args = [NSUserDefaults standardUserDefaults];
 	NSString *privKeyFileName = [args stringForKey:@&quot;privkey&quot;];
+	NSString *pubKeyFileName = [args stringForKey:@&quot;pubkey&quot;];
 	NSString *regName = [args stringForKey:@&quot;name&quot;];
-	if (!privKeyFileName || !regName) {
-		puts(&quot;Usage: cocoafob -privkey &lt;priv-key-file&gt; -name &lt;reg-name&gt;&quot;);
+    NSString *regCodeIn = [args stringForKey:@&quot;code&quot;];
+	if (!((privKeyFileName &amp;&amp; regName) || (pubKeyFileName &amp;&amp; regName &amp;&amp; regCodeIn))) {
+		puts(&quot;Usage: cocoafob {-privkey &lt;priv-key-file&gt; -name &lt;reg-name&gt;|-pubkey &lt;pub-key-file&gt; -name &lt;reg-name&gt; -code &lt;reg-code&gt;}&quot;);
 		return 1;
 	}
-	NSString *regCode = codegen(privKeyFileName, regName);
-	int retval = 0;
-	if (!regCode) {
-		puts(&quot;Error&quot;);
-		retval = 2;
-	} else {
-		puts([regCode UTF8String]);
-	}
+    int retval = 0;
+    if (regCodeIn &amp;&amp; pubKeyFileName &amp;&amp; regName) {
+        // Verify supplied registration code
+        BOOL check = codecheck(pubKeyFileName, regName, regCodeIn);
+        if (check) {
+            puts(&quot;OK&quot;);
+        } else {
+            puts(&quot;Error&quot;);
+            retval = 3;
+        }
+    } else {
+        // Generate registration code
+        NSString *regCode = codegen(privKeyFileName, regName);
+        if (!regCode) {
+            puts(&quot;Error&quot;);
+            retval = 2;
+        } else {
+            puts([regCode UTF8String]);
+        }
+    }
 	[pool drain];
 	return retval;
 }</diff>
      <filename>objc/cocoafob.m</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>70414f8e4c52ba522ebfbdfef55b5d9df1701ea4</id>
    </parent>
  </parents>
  <author>
    <name>Gleb Dolgich</name>
    <email>gleb@proggle.com</email>
  </author>
  <url>http://github.com/gbd/cocoafob/commit/ac8b8abf22a4ae7aea9d817828fa11ea3aa4cc6f</url>
  <id>ac8b8abf22a4ae7aea9d817828fa11ea3aa4cc6f</id>
  <committed-date>2009-09-27T19:42:30-07:00</committed-date>
  <authored-date>2009-09-27T19:42:30-07:00</authored-date>
  <message>Added command-line arguments to verify a registration code</message>
  <tree>7657b35f4ef5eb8b964c79c8c769e86ecc1b9b58</tree>
  <committer>
    <name>Gleb Dolgich</name>
    <email>gleb@proggle.com</email>
  </committer>
</commit>
