/* Copyright (c) 1998 Apple Computer, Inc. All rights reserved. * * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE COMPUTER, INC. AND THE * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE COMPUTER, * INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL * EXPOSE YOU TO LIABILITY. *************************************************************************** * * NSDESCryptor.m - DES encrypt/decrypt class * * Revision History * ---------------- * 28 Mar 97 Doug Mitchell at Apple * Rewrote using feeDES module. * 22 Feb 96 Blaine Garst at NeXT * Created. */ #import #import "NSDESCryptor.h" #import "feeDES.h" #import "falloc.h" #import "ckutilities.h" #import "feeFunctions.h" /* * Note: Our _priv ivar is actuall a feeDES pointer. */ @implementation NSDESCryptor + cryptorWithState:(NSData *)s { return [[[self alloc] initWithState:s] autorelease]; } - (void)setCryptorState:(NSData *)state { if(_priv == NULL) { return; } feeDESSetState(_priv, [state bytes], [state length]); } - initWithState:(NSData *)state { feeReturn frtn; if(_priv == NULL) { _priv = feeDESNewWithState([state bytes], [state length]); } else { frtn = feeDESSetState(_priv, [state bytes], [state length]); if(frtn) { NSLog(@"NSDESCryptor: bad initial state\n"); return nil; } } return self; } - (void)dealloc { if(_priv) { feeDESFree(_priv); } [super dealloc]; } - (void)setBlockMode:(BOOL)yorn { if(_priv == NULL) { return; } if(yorn) { feeDESSetBlockMode(_priv); } else { feeDESSetChainMode(_priv); } } - (NSData *)encryptData:(NSData *)input { NSData *result; feeReturn frtn; unsigned char *cipherText; unsigned cipherTextLen; if(_priv == NULL) { return nil; } frtn = feeDESEncrypt(_priv, [input bytes], [input length], &cipherText, &cipherTextLen); if(frtn) { NSLog(@"NSDESCryptor encrypt: %s", feeReturnString(frtn)); return nil; } result = [NSData dataWithBytes:cipherText length:cipherTextLen]; ffree(cipherText); return result; } - (NSData *)decryptData:(NSData *)input { NSData *result; feeReturn frtn; unsigned char *plainText; unsigned plainTextLen; if(_priv == NULL) { return nil; } frtn = feeDESDecrypt(_priv, [input bytes], [input length], &plainText, &plainTextLen); if(frtn) { NSLog(@"NSDESCryptor decrypt: %s", feeReturnString(frtn)); return nil; } result = [NSData dataWithBytes:plainText length:plainTextLen]; ffree(plainText); return result; } - (unsigned)keyBitsize { return feeDESKeySize(_priv); } @end