/*
- Copyright (c) 2010,2012,2016,2017,2018 Apple Inc. All rights reserved.
- corecrypto Internal Use License Agreement
- IMPORTANT: This Apple corecrypto software is supplied to you by Apple Inc. ("Apple")
- in consideration of your agreement to the following terms, and your download or use
- of this Apple software constitutes acceptance of these terms. If you do not agree
- with these terms, please do not download or use this Apple software.
-
- As used in this Agreement, the term "Apple Software" collectively means and
- includes all of the Apple corecrypto materials provided by Apple here, including
- but not limited to the Apple corecrypto software, frameworks, libraries, documentation
- and other Apple-created materials. In consideration of your agreement to abide by the
- following terms, conditioned upon your compliance with these terms and subject to
- these terms, Apple grants you, for a period of ninety (90) days from the date you
- download the Apple Software, a limited, non-exclusive, non-sublicensable license
- under Apple’s copyrights in the Apple Software to make a reasonable number of copies
- of, compile, and run the Apple Software internally within your organization only on
- devices and computers you own or control, for the sole purpose of verifying the
- security characteristics and correct functioning of the Apple Software; provided
- that you must retain this notice and the following text and disclaimers in all
- copies of the Apple Software that you make. You may not, directly or indirectly,
- redistribute the Apple Software or any portions thereof. The Apple Software is only
- licensed and intended for use as expressly stated above and may not be used for other
- purposes or in other contexts without Apple's prior written permission. Except as
- expressly stated in this notice, no other rights or licenses, express or implied, are
- granted by Apple herein.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES
- OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING
- THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS,
- SYSTEMS, OR SERVICES. APPLE DOES NOT WARRANT THAT THE APPLE SOFTWARE WILL MEET YOUR
- REQUIREMENTS, THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR
- ERROR-FREE, THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED, OR THAT THE APPLE
- SOFTWARE WILL BE COMPATIBLE WITH FUTURE APPLE PRODUCTS, SOFTWARE OR SERVICES. NO ORAL
- OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE
- WILL CREATE A WARRANTY.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING
- IN ANY WAY OUT OF THE USE, REPRODUCTION, COMPILATION OR OPERATION OF THE APPLE
- SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
- NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- This Agreement is effective until terminated. Your rights under this Agreement will
- terminate automatically without notice from Apple if you fail to comply with any term(s)
- of this Agreement. Upon termination, you agree to cease all use of the Apple Software
- and destroy all copies, full or partial, of the Apple Software. This Agreement will be
- governed and construed in accordance with the laws of the State of California, without
- regard to its choice of law rules.
- You may report security issues about Apple products to product-security@apple.com,
- as described here: https://www.apple.com/support/security/. Non-security bugs and
- enhancement requests can be made via https://bugreport.apple.com as described
- here: https://developer.apple.com/bug-reporting/
- EA1350
- 10/5/15 */
The main goal is to provide low level fast math routines and crypto APIs which can be used in various environments (Kernel, bootloader, userspace, etc.). It is an explicit goal to minimize dependancies between modules and functions so that clients of this library only end up with the routines they need and nothing more.
Corecrypto compiles under all Apple OSs, Windows and Linux.
Current corecrypto consists of the following submodules:
cc
: Headers and code common to all of the modulesccasn1
: ASN.1 typeid constants and ccoid definition.ccder
: DER encoding decoding supportccn
: Math on vectors of n cc_unitscczp
: Modular arithmetic mod integer p, on vectors of n cc_unitsccz
: Variable sized signed integer math routinesccdrbg
: Deterministic Random Byte Generatorsccrng
: Random Bytes Generatorsccdh
: Diffie-Hellman routines.ccec25519
: Elliptic curve signature and Diffie-Hellman routines using the Edward's 25519 curveccrsa
: RSA routines.ccec
: Eliptic Curve Curves, ec specific math and APIsccdigest
: Digest abstraction layer.cchmac
: HMAC using any ccdigest.ccpbkdf2
: PKKDF2 using any ccdigest.ccmd2
: MD2 digest implementations.ccmd4
: MD4 digest implementations.ccmd5
: MD5 digest implementations.ccripemd
: RIPE-MD digest implementations.ccsha1
: SHA-1 digest implementations.ccsha2
: SHA-2 digest implementations.ccmode
: Symmetric cipher chaining mode interfaces.ccpad
: Symmetric cipher padding code.ccaes
: AES symmetric cipher implementations.ccblowfish
: Blowfish symmetric cipher implementations.cccast
: Cast symmetric cipher implementations.ccdes
: DES and 3DES symmetric cipher implementations.ccrc2
: RC2 symmetric cipher implementations.ccrc4
: RC4 symmetric cipher implementations.ccperf
: Performance testing harness.cctest
: Common utilities for creating self tests and XCunit tests.ccprime
: Functions for generating large prime numbers. Mostly used in RSA key generation.
Each module has the following subdirectories:
corecrypto
: headers for this modulesrc
: sources for this moduledoc
: documentation, references, etc.xcunit
: XCTest based unit tests for this module.crypto_tests
: sources for executable tests for this moduletest_vectors
: test vectors for this moduletools
: sources for random helper tools.
The following subdirections don't follow the module layout yet:
corecrypto_kext
: Supporting files for kernel extension build and fips support.corecrypto_dylib
: Supporting files for userspace shared lib build and fips support.
The ARMV6m is not on corecrypto project target list. To compile corecrypto under ARMV6m use the following command:
$xcodebuild -target "corecrypto_static" OTHER_CFLAGS="-Qunused-arguments" -sdk iphoneos.internal -arch armv6m
corecrypto compiles under Windows using Visual Studio 2015 and Clang with Microsoft CodeGen. The corecrypto Solution contains three projects:
corecrypto
: This projects compiles corecrypto, and produces a static library in 32 and 64 bit modes.corecrypto_test
: This project compiles corecrypto test files and links statically with the corecrypto debug library.corecrypto_perf
: This project compiles corecrypto performance measurement files and links statically with the corecrypto release library.corecrypto_wintest
: This project contains a simple code that links to the corecrypto.lib and complies in c++ using the Visul C++ compiler. This project created to make sure corecrypto library can linked to c++ software that are compiled with the Microsoft Compiler.
corecrypto library, corecrypto_test
and corecrypto_perf
complie under Linux. The Linux make file is not uptodate.
From time to time, corecrypto needs to change the prototypes of functions. In this case, we use a macro defined as: CC_CHANGEFUNCTION__ and the header will document instructions to migrate from the old to new function prototype.
- Modifications have been made to "corecrypto\ccrng\src\ccrng_cryptographic_priv.h".
- Lines 82-102 and 107-109 commented out to allow compilation.