]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cryptkit/lib/NSDESCryptor.m
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cryptkit / lib / NSDESCryptor.m
diff --git a/Security/libsecurity_cryptkit/lib/NSDESCryptor.m b/Security/libsecurity_cryptkit/lib/NSDESCryptor.m
new file mode 100644 (file)
index 0000000..2e071b2
--- /dev/null
@@ -0,0 +1,130 @@
+/* Copyright (c) 1998,2011,2014 Apple 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, INC. AND THE
+ * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
+ * 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 at Apple
+ *     Rewrote using feeDES module.
+ * 22 Feb 96 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: %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