/* 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 <Foundation/Foundation.h>
#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: 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: return nil;
}
result = [NSData dataWithBytes:plainText length:plainTextLen];
ffree(plainText);
return result;
}
- (unsigned)keyBitsize {
return feeDESKeySize(_priv);
}
@end