Otp Generate with Cocoa (incompleted yet)

Otp (One Time Password), is a password that is valid for only one login session or transaction. OTPs avoid a number of shortcomings that are associated with traditional (static) passwords.  (from wikipedia)

i have implemented this algorithm with objC. So, i only did orange part of this code, and it generates random numbers with initial key and pin number. Then, generated valued will be matched with given otp key value, and returns boolean value which are false or true. But, this source code only produces otp generated key.


#import "OtpGenAppDelegate.h"

#define kSTRING_ENCODING NSUnicodeStringEncoding

@interface NSString (md5)
- (NSString *) MD5;
@end

@implementation OtpGenAppDelegate

- (IBAction)otpGenAction:(id)sender
{
    NSDate *now = [NSDate date];
    NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"midnight tomorrow"];
    NSTimeInterval timeInt = [midnight timeIntervalSinceDate:now];
    int epoch = (int) timeInt % 60;
    NSString *md5;
    for(int i = (epoch - 180); i <= (epoch + 180);i++) {
        NSString *myOtpData = [[txtOtpInstanceKey stringValue] stringByAppendingString:[txtOtpPin stringValue]];
        md5 = [myOtpData MD5];
    }   
    [txtResult  setStringValue:[NSString stringWithFormat:@"%d", md5]];
}

@interface NSString (HexStringRepresentations)
+ (NSString *) stringWithHexString:(NSString *) hexString;
- (NSString *) hexStringRepresentation;
@end

@implementation NSString (HexStringRepresentations)
+ (NSString *) stringWithHexString:(NSString *) hexString
{
    NSData *data = [NSData dataWithHexString: hexString];
    return [[[NSString alloc] initWithData: data encoding: kSTRING_ENCODING] autorelease];
}

- (NSString *) MD5
{
    const char *cStr = [self UTF8String];
    unsigned char result[16];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:
            @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
            result[0], result[1], result[2], result[3],
            result[4], result[5], result[6], result[7],
            result[8], result[9], result[10], result[11],
            result[12], result[13], result[14], result[15]
            ]; 
}
@end