CryptKit change log CryptKit-8 -- Added prototypes for NSFEEPublicKey convenience methods to NSCryptors.h CryptKit-9 * Alpha version to dreece and crandall 13 Aug 1996 * FEE_KEY_VERSION 3, FEE_KEYSTRING_VERSION 1 CryptKit-10 -- Added KeyStringFormat.doc -- Deleted -publicKeyData, keyWithPublicKeyData (public keys now always represented as strings) -- Beefed up range and validity checking in: -- hexstr_to_giant() -- new_hexstr_from_key() -- +keyWithPublicKeyString -- Added check for valid_hexstr() and NULL hexstr_to_key() in +digitalSignatureWithDataRepresentation -- Added and enforced MAX_UNAME_LENGTH -- added key_equal(_plus, other->_plus) to -[NSFEEPublicKey isEqual:] -- last version with NSGiantIntegers.m, utilities.m, NSFastEllipticCurve.m as ObjC files CryptKit-11 * FEE_KEYSTRING_VERSION = 2 FEE_KEYSTRING_VERSION_MIN = 1 -- Major rewrite of all top-level classes; ported bulk of logic to portable C code. ObjC API (in NSCryptors.h, NSDESCryptor.h) unchanged. CryptKit-12 * Alpha version sent to REC 6 Sep 1996 and to dreece 12 Sep 96 -- Added platform.[ch] -- Fixed (b<n), (sign<0) case in gmersennemod() to allow for arbitrary n. -- Added feeHashReinit() to feeHash.[hc]. -- Rewrote feeGenPrivate(). Hashes password and pads to (size of curve order)++, then takes result mod curve order. -- Added set_priv_key_data(), and removed its function from new_public_with_key(); deleted new_public_with_key(). -- Initial changes for compiling on NT. CryptKit-13 * Sent to REC for testing 1 Oct 96 -- first version to be (more or less) fully functional on NT -- tolerate non-hex leading and trailing characters in public key string -- Fixed --size underflow bug in normal_subg() -- Added enc64 routines CryptKit-14 * First version to compile & run OK on OpenStep/NT * Alpha version sent to dreece (17 Oct 96) and Avie (18 Oct 96) -- Added class names to CryptKit.def (was CryptKit.def.src - no longer builds C-only DLL from win.mak!) -- Updated to 4.1 pb_makefiles -- misc. Makefile tweaks to compile on NT -- Misc. tweaks for warning-free compile on NT -- ifdef'd out DllMain() CryptKit-15 * First integration into cryptdev master tree, 12 Nov 1996 * CFILE_VERSION = CFILE_MIN_VERSION = 1 -- Added feeCipherFile and NSCipherFile -- Added sigSigner out param to feePubKeyVerifySignature() -- Made enc64, dec64 more robust and more Microsoft-tolerant -- feeGenPrivate() returns error if private key data too short CryptKit-16 * Integrated into cryptdev master tree, 20 Dec 1996 * Sent to J. Landwehr with first NT version of ICE 20 Dec 1996 * COMMON_PUBLIC_KEY_STRING_VERSION = 2 * COMMON_FEE_SIG_VERSION * Major changes to keystring and signature format, compatible with JavaFEE-4 and backwards compatible with older CryptKit keys and signatures. * Verfified to work with ICE (JavaDemo-4) running on an NT server -- Added debugging code to DES.c, MD5.c -- Added mersennePrimes[24..26] -- Newlines optional in dec64() and isValidEnc64(). -- Added byteRep support to utilities.c CryptKit-17 -- New curveParams mechanism, with IEEE-approved curve parameters -- Old curve param 'a' is 'c'; new params b, c, x1OrderPlus x1OrderMinus -- This version doesn't *use* the new curve params in elliptic algebra; it's an interim version for testing. DVT suite (ckutils/cktest) still works at depths 0 thru 4. -- NO API CHANGES since CryptKit-16. -- key strings and signatures still compatible with CryptKit-16 and JavaFEE-4 -- Deleted mersennePrimes[], set_crypt_params(), new_public_com(), key_copy() -- Most fields in keystruct now superceded by curveParams *cp -- Added setGiantSize() kludge, replaces weird call to borrowGiant(*exp) in set_crypt_params() -- Added copyGiant(), giant_to_int() -- Removed a bunch of dead files from project -- Removed *_to_hexstr() from utilities.c -- Fixed "pad too short bug" in small depth cases in feePubKeyCreatePad() CryptKit-18 * Integrated into cryptdev master tree, 31 Jan 1997 * Completely broke backward compatibility with old key strings and signatures. * FEE_SIG_VERSION = 3 * PUBLIC_KEY_STRING_VERSION = 3 * Old 2:1 FEED renamed feeFEEDExp (feeFEEDExp.c, names start with feeFEEDExp). New 1:1 FEE is feeFEED.c. A #define in feeFEED.h redirects client's feeFEED calls to feeFEEDexp -- New elliptic math using all curveParams fields -- Cleaned up all which_curve/twist code to use CURVE_MINUS/CURVE_PLUS -- plus curves now used exclusively except for in FEED decrypt, which uses both curves -- Moved all byteRep code from utilities.c to byteRep.c. -- Added curveOrderJustify(), use it to trim private key data and signature random data to [2, curveOrder] -- curveParams[4] now has full parameters -- ENGINE_127_BITS version, with hard-coded 127 bit elliptic() in engineNSA127.c, no longer builds - obsolete (hopefully) -- Fixed negation bug in gmersennemod() (a long-standing FEE bug) -- Fixed n[words-1] == 0 bug in extractbits() (ditto) -- Added keyWithPrivateString:depth:usageName: to NSFEEPublicKey -- Deleted obsolete #defines from NSFastEllipticCurve.c, including those for signature_compare() -- Added FEE_PROFILE logic -- Now have unified giant-to-byteRep mechanism via serializeGiant and deserializeGiant. Deleted canonicalize_ints(), canonicalize_shorts(), giant_cleanse(), data_to_giant() -- Removed all *_to_hexstr and hexstr_to* code CryptKit-19 * First version known to be bit-for-bit compatible with JavaFEE. keys, signatures, ciphertext, and cipherfiles. Tested against JavaFEE-5. * Integrated in cryptdev master 13 Feb 1997. -- Broke backward compatibility with CipherFiles. CFILE_VERSION = 1. -- First working 1:1 FEED, in feeFEED.c. Old 2:1 FEED, now in feeFEEDExp.c, unchanged. -- Fixed zero bug in gcompg(). -- CipherFile uses portable byte rep; added CFE_FEED and CFE_FEEDExp types -- New optimized numer_plus(), denom_double(), and numer_times() -- Added maxShorts and minBytes to curveParams -- Added explicit SIGN_PLUS, SIGN_MINUS as 's' arg to elliptic_add() -- newGiant() no longer modifies CurrentMaxShorts or giant stack -- Added FEE_DEPTH_192_M529891 -- Added feeFEEDCipherTextSize(), feeFEEDExpCipherTextSize() -- Fixed platform dependencies in MD5.c -- All borrowGiant() calls in NSFastEllipticCurve,c specify explicit giant size (usually curveParams.maxShorts) -- #ifdef'd out matric math routines in NSGiantIntegers.c -- Added FEE_DEPTH_192_M529891 -- CurveParams.c now assumes all fields have valid giants -- feeCipherfile now has four encrTypes - CFE_PublicDES, CFE_RandDES, CFE_FEED, CFE_FEEDExp CryptKit-20 * Integrated in cryptdev master 20 Feb 1997. -- CipherFile - was {key1,key2}, is {sendPubKey,otherKey} -- Broke out common defines into CipherFileTypes.h -- NSCipher returns nil properly on otherKeyData, sigSata, sendPubKeyData -- Added enc64WithLines; dec64 ignores all whitespace -- Broke out encrType-specific functions in CipherFile{FEED,DES} CryptKit-21 * Integrated in cryptdev master 7 Mar 1997. * Sent to REC 7 Mar 1997. -- Added curve depth = 3; q=40, k=213 -- cleaned up CryptKit.h, NSCryptors.h -- updated Makefile for backup purposes -- Moved NSFEEPublicKey interface into its own file -- Added mulgTime profiling stat -- Deleted len = par->minBytes kludge from make_pad() -- was iszero(); is isZero() -- made bitlen() assertion conditional on FEE_DEBUG -- Trimmed plainBlockSize by one byte if q mod 8 = 0 in feeFEED, feeFEEEDExp. This is an incompatible change! But I don't think anyone was using the last version.... CryptKit-22 * Integrated into cryptdev master 31 Mar 1997 -- New NSMD5Hash class -- Rewrote NSDESCryptor using feeDES -- NSDataDigester was interface, is protocol -- Deleted digestObjectsWithKeys method from NSDataDigester -- Deleted NSRequestConcreteImplementation from NSDESCryptor and NSRandomNumberGenerator -- Rewrote NSRandomNumberGenerator using feeRandom -- Cleaned up misc. #ifdefs and stale code -- Put DES per-instance variables in struct _desInst -- Fixed memory leaks in feePubKeyCreateKeyString(), feeFEED.c -- Removed ANSI C headers from Public Header; framework is now strictly ObjC CryptKit-23 * Integrated into cryptdev master 1 May 1997 * Associated with ComDemo announcement 1 May 1997 -- No functional changes, only debugging printfs CryptKit-24 * Integrated into cryptdev master 11 June 1997 -- Mods to build on Mac CodeWarrior -- was #import, is #include -- mods to platform.[ch] -- lots of compiler warning fixes, mainly due to MW's inability to implicitly cast unsigned char * to char * CryptKit-25 * Integrated into cryptdev master 18 June 1997 -- New divg_via_recip(), modg_via_recip(), make_recip() -- new per-curveParams fields x1OrderPlusRecip and lesserX1OrderRecip -- Added lesserX1OrderJustify(), x1OrderPlusJustify(), binvg_cp() -- Added new multiple stack borrowGiant() mechanism -- All calls to borrowGiant() and newGiant() explicitly pass needed size; no more borrowGiant(0) -- Deleted old (i.e., obsolete and/or debugging) code from NSGiantIntegers.c and NSFastEllipticCurve.c -- Added description of FEED and FEEDExp ciphertext to ByteRep.doc -- Marked KeyStringFormat.doc as obsolete CryptKit-26 -- Implemented ECDSA in feeECDSA.[ch] -- Added binvg_orderPlus(), x1OrderPlusMod() -- Added generic signature encode/decode to byteRep.[ch]