Kodiak Networks, Inc. Push To Talk Client Crypto Module FIPS 1402 Cryptographic Module NonProprietary Security Policy Version: 2.5 Date: December 29, 2015 Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 1 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). TableofContents 1 Introduction ..................................................................................................................... 4 . 1.1 Hardware and Physical Cryptographic Boundary .........................................................................5 1.2 Software and Logical Cryptographic Boundary ............................................................................6 1.3 Modes of Operation .....................................................................................................................6 2 Cryptographic Functionality .............................................................................................. 7 2.1 Critical Security Parameters .........................................................................................................9 2.2 Public Keys ....................................................................................................................................9 3 Roles, Services, and Authentication ................................................................................ 10 3.1 Assumption of Roles .................................................................................................................. 10 3.2 Services ...................................................................................................................................... 10 4 Selftests ......................................................................................................................... 13 5 Physical Security ............................................................................................................. 13 6 Operational Environment ............................................................................................... 14 7 Mitigation of Other Attacks Policy .................................................................................. 14 8 Security Rules and Guidance ........................................................................................... 14 9 References and Definitions ............................................................................................. 14 10 Appendix A ­ Installation Instructions ........................................................................... 17 10.1 iOS INSTALLATION ..................................................................................................................... 17 10.2 Android INSTALLATION ............................................................................................................. 18 10.3 Push To Talk Client Crypto Module FIPS API ............................................................................. 19 Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 2 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). ListofTablesandFigures Table 1 ­ Tested Operating Environments ................................................................................................... 4 Table 2 Security Level of Security Requirements........................................................................................ 4 Table 3 ­ Ports and Interfaces ...................................................................................................................... 5 Figure 1 ­ Module Block Diagram ................................................................................................................. 6 Table 4 ­ Approved and CAVP Validated Cryptographic Functions .............................................................. 7 Table 5 ­ NonApproved but Allowed Cryptographic Functions .................................................................. 8 Table 6 ­ Critical Security Parameters (CSPs) ............................................................................................... 9 Table 7 ­ Public Keys ..................................................................................................................................... 9 Table 8 ­ Roles Description ......................................................................................................................... 10 Table 9 ­ Authorized Services available in FIPS mode ................................................................................ 10 Table 10 ­ Services available in nonFIPS mode ......................................................................................... 11 Table 11 ­ CSP Access Rights within Services ............................................................................................. 12 Table 12 ­ Poweron Selftests ................................................................................................................... 13 Table 13 ­ Conditional Selftests ................................................................................................................ 13 Table 14 ­ References ................................................................................................................................. 14 Table 15 ­ Acronyms and Definitions ......................................................................................................... 15 Table 16 ­ Source Files ................................................................................................................................ 15 Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 3 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 1 Introduction This document defines the Security Policy for the Kodiak Networks, Inc. Push To Talk Client Crypto Module (Software Version 3.6.0), hereafter denoted the Module. The Module is a cryptography software library. The Module meets FIPS 1402 overall Level 1 requirements. The Module is intended for use by US Federal agencies and other markets that require FIPS 1402 validated cryptographic functionality. The Module is a softwareonly module, multichip standalone module embodiment; the cryptographic boundary is the collection of object files from the source code files listed in Table 16 ­ Source Files. No software components have been excluded from the FIPS 1402 requirements. Operational testing was performed for the following Operating Environments: Table 1 ­ Tested Operating Environments Operating System Processor Platform 1 iOS 8.1 AppleTM A8 iPhoneTM 6 2 Android 4.4 Qualcomm Krait 400 Samsung Galaxy S5 The FIPS 1402 security levels for the Module are as follows: Table 2 Security Level of Security Requirements Security Requirement Security Level Cryptographic Module Specification 1 Cryptographic Module Ports and Interfaces 1 Roles, Services, and Authentication 1 Finite State Model 1 Physical Security N/A Operational Environment 1 Cryptographic Key Management 1 EMI/EMC 1 SelfTests 1 Design Assurance 1 Mitigation of Other Attacks N/A Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 4 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 1.1 Hardware and Physical Cryptographic Boundary The physical cryptographic boundary is the general purpose computer where the Module is installed. The Module relies on the computer system where it is running for input/output devices. Table 3 ­ Ports and Interfaces Description Logical Interface Type API entry point Control in API function parameters Data in API return value Status out API function parameters Data out Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 5 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 1.2 Software and Logical Cryptographic Boundary Figure 1 depicts the Module operational environment. Figure 1 ­ Module Block Diagram The above diagram shows the Logical Boundary highlighted in red contained within the Physical Boundary. The Logical Boundary contains all FIPS API entry points. The Logical Boundary is invoked by the Application through the API Calls. 1.3 Modes of Operation The Module supports a FIPS Approved mode of operation and a nonFIPS Approved mode of operation. FIPS Approved algorithms are listed in Table 4. NonFIPS Approved but allowed algorithms are listed in Table 5. The module is in the Approved mode of operation when any of the cryptographic functions listed in Table 4 and Table 5 are invoked by the calling application. Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 6 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). The Module is in the nonFIPS Approved mode of operation when any of the nonApproved cryptographic functions are invoked by the calling application (not recommended for applications requiring a FIPS 1402 validated module). Critical Security Parameters (CSPs) are not shared between the FIPS Approved mode of operation and the nonFIPS Approved mode of operation. For installation instructions, see Appendix A ­ Installation Instructions. 2 Cryptographic Functionality The Module implements the FIPS Approved and NonApproved but Allowed cryptographic functions listed in the tables below. Table 4 ­ Approved and CAVP Validated Cryptographic Functions Algorithm Description Cert # AES [FIPS 197, SP 80038A] 3330 Functions: Encryption, Decryption 3417 Modes: CBC, CTR Key sizes: 128, 192, 256 bits DRBG [SP 80090A] 775 Functions: Hash DRBG 821 Security Strengths: 256 bits HMAC [FIPS 1981] 2121 Functions: Generation, Verification 2175 SHA sizes: SHA1, SHA256, SHA384, and SHA512 RSA [FIPS 1864, and PKCS #1 v2.1 (PKCS1.5)] 1710 Functions: Signature Generation, Signature Verification 1749 Key sizes: 1024 (verification only), 2048 SHA [FIPS 1804] 2763 Functions: Digital Signature Generation, Digital Signature Verification, 2823 nonDigital Signature Applications SHA sizes: SHA1, SHA256, SHA384, SHA512 TripleDES (TDES) [SP 80020] 1901 Functions: Encryption, Decryption 1928 Modes: TCBC Key sizes: 3key Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 7 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). Table 5 ­ NonApproved but Allowed Cryptographic Functions Algorithm Description RSA Primitives [IG D.9] and Operations Per IG D.9, RSA is an allowed method for supporting key transport in an Approved FIPS mode of operation. RSA may be used by a calling application as part of a key encapsulation scheme. No keys are established into the module using RSA. Key sizes: 2048 bits When used for system level key establishment this service provides 112 bits of security. NonSP 80056A [IG D.8] Compliant DH Per IG D.8, Scenario 6 ­ nonApproved (not compliant with SP 80056A) primitive Primitive only, a partial DH key agreement scheme is allowed in an Approved FIPS mode of operation. No keys are established into the module using DH. When used for system level key establishment this service provides 112 bits of security. NonSP 80056A [IG D.8] Compliant ECDH Per IG D.8, Scenario 6 ­ nonApproved (not compliant with SP 80056A) primitive Primitive only, a partial ECDH key agreement scheme is allowed in an Approved FIPS mode of operation. No keys are established into the module using ECDH. When used for system level key establishment this service provides 256 bits of security. MD5 for use [IG D.2] within TLS MD5 is allowed in an Approved mode of operation when used as part of an approved key transport scheme (e.g. SSL v3.1) where no security is provided by the algorithm. NonApproved Cryptographic Functions for use in nonFIPS mode only: AES GCM (noncompliant) RSA Signature Generation with 1024 bit key DES MD5 RC4 RIPEMD160 HMACMD5 Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 8 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 2.1 Critical Security Parameters All CSPs used by the Module are described in this section. All usage of these CSPs by the Module (including all CSP lifecycle states) is described in the services detailed in Section 4. The CSP names correspond to the API parameter inputs. Table 6 ­ Critical Security Parameters (CSPs) CSP Description / Usage Hash_DRBG Entropy input V (440) and C (440) HMAC Key Keyed Hash key AES EDK AES (128/192/256) encrypt/decrypt key TDES EDK TDES (3Key) encrypt/decrypt key RSA KDK Private component of an RSA key pair (2048bit), used by RSA key establishment RSA SGK Private component of an RSA key pair (2048bit), used by RSA signature generation DH Private Private Key Agreement Key 2.2 Public Keys Table 7 ­ Public Keys Key Description / Usage RSA KEK Public component of an RSA key pair (2048bit), used by RSA key establishment RSA VK Public component for an RSA key pair (2048bit), used by RSA signature verification DH Public Public Key Agreement Key Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 9 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 3 Roles, Services, and Authentication 3.1 Assumption of Roles The Module supports two distinct operator roles, User and Cryptographic Officer (CO). The cryptographic module does not provide an authentication or identification method of its own. The CO and the User roles are implicitly identified by the service requested. Table 8 lists all operator roles supported by the Module. The Module does not support a maintenance role or bypass capability. Table 8 ­ Roles Description Role ID Role Description Authentication Type Authentication Data CO The Cryptographic Officer None None Role is assigned the Zeroize service. User The User Role is assigned all None None services except Zeroize. 3.2 Services All services implemented by the Module are listed in the tables below with a description of service CSP access. The calling application may use the Push To Talk Client Crypto Module_GetStatus_fips() API to determine the current status of the Module. A return code of 0 means the Module is in a state without errors. Any other return code is the specific error state of the module. Table 9 ­ Authorized Services available in FIPS mode Service Description Role Module Reset Reset the Module by restarting the application calling the Module. User (Selftest) Does not access CSPs. Show status Functions that give module status feedback. Does not access CSPs. User Zeroize Functions that destroy CSPs. FreeRng_fips destroys RNG CSPs. All CO other services automatically overwrite memory bound CSPs. Cleanup of the stack is the duty of the application. Restarting the general purpose computer clears all CSPs in RAM. Random number Uses the SP 80090A DRBG for random number generation. This User generation service is not used by the module to generate keys for the module's use. It merely outputs random numbers per the calling application's request. Symmetric Used to encrypt and decrypt data using AES EDK and TDES EDK. CSPs User encrypt/decrypt passed in by the application Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 10 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). Service Description Role Message digest Used to generate a SHA1 or SHA2 message digest. MD5 used only User to support TLS 1.1 and lower. Does not access CSPs. Keyed hash Used to generate or verify data integrity with HMAC. The HMAC Key User is passed in by the application. Key transport Used to encrypt or decrypt a key value on behalf of the application. User RSA KDK and RSA KEK are passed in by the calling application. When decrypting a key value, a symmetric key is output to the calling application. Key agreement Used for DH key agreement on behalf of the application. The DH User keys are passed in by the calling application. A symmetric key is output to the calling application. Digital signature Used to generate or verify RSA digital signatures. RSA SGK and RSA User VK are passing in by the calling application. Table 10 ­ Services available in nonFIPS mode Service Description AES GCM Used to encrypt and decrypt data using AES GCM Message digest MD5 MD5 message digest not an approved FIPS cryptographic function. DES Single DES symmetric encrypt/decrypt not an approved FIPS cryptographic function. RC4 RC4 symmetric encrypt/decrypt not an approved FIPS cryptographic function. HMAC MD5 Keyed hash using MD5 is not an approved FIPS cryptographic function. Message digest RIPEMD RIPEMD160 digest not an approved FIPS cryptographic function. 160 Digital Signature Used to generate RSA 1024bit digital signatures. RSA SGK and RSA VK are passed in by the calling application. See Chapter 10: wolfCrypt Usage Reference in the wolfSSL Manual for additional information on the cryptographic services listed in this section. The module generates random strings and shared secrets whose strengths are modified by available entropy. Cryptographic keys derived from these random strings and shared secrets may not be used by the approved algorithms in FIPS mode unless the derivation is performed by another FIPS validated module. Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 11 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). Table 11 ­ CSP Access Rights within Services, defines the relationship between access to CSPs and the different module services. The modes of access shown in the table are defined as: R = Read: The module reads the CSP. The read access is typically performed before the module uses the CSP. E = Execute: The module executes using the CSP. Z = Zeroize: The module zeroizes the CSP. Table 11 ­ CSP Access Rights within Services CSPs Hash_DRBG DH Private HMAC Key TDES EDK Service RSA KDK RSA SGK AES EDK Module Reset (Selftest) Show Status Zeroize Z Z Z Z Z Z Z Random number generation R,E Symmetric encrypt/decrypt R,E,Z R,E,Z Message digest Keyed hash R,E,Z Key transport R,E,Z Key agreement R,E,Z Digital signature R,E,Z Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 12 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 4 Selftests Each time the Module is powered up it tests that the cryptographic algorithms still operate correctly and that sensitive data have not been damaged. The Module provides a default entry point to automatically run the power on selftests compliant with IG 9.10. Power on self­tests are available on demand by reloading the Module. On poweron or reset, the Module performs the selftests described in Table 12. All KATs must complete successfully prior to any other use of cryptography by the Module. If one of the KATs fails, the Module enters the selftest failure error state. To recover from an error state, reload the Module into memory. During the FIPS 1402 validation testing process, InfoGard Laboratories verified that the HASH DRBG implements the required Health Testing described in SP 80090A Section 11.3. InfoGard Laboratories is accredited by the National Voluntary Laboratory Accreditation Program (NVLAP) to perform cryptographic testing under Lab Code 1004320. Table 12 ­ Poweron Selftests Test Target Description Software Integrity HMACSHA256 AES KATs: Encryption, Decryption Modes: CBC Key sizes: 128 bits DRBG KATs: HASH DRBG Security Strengths: 256 bits HMAC KATs SHA sizes: SHA1, SHA512 RSA KATs: Signature Generation, Signature Verification Key sizes: 2048 bits TDES KATs: Encryption, Decryption Modes: TCBC, Key sizes: 3key Table 13 ­ Conditional Selftests Test Target Description DRBG DRBG Continuous Test performed when a random value is requested from the DRBG. 5 Physical Security The FIPS 1402 Area 5 Physical Security requirements do not apply because the Module is a software module. Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 13 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 6 Operational Environment The tested environments place user processes into segregated spaces. A process is logically removed from all other processes by the hardware and Operating System. Since the Module exists inside the process space of the application this environment implicitly satisfies requirement for a single user mode. 7 Mitigation of Other Attacks Policy The Module is not intended to mitigate against attacks that are outside the scope of FIPS 1402. 8 Security Rules and Guidance The Module design corresponds to the Module security rules. This section documents the security rules enforced by the cryptographic module to implement the security requirements of this FIPS 1402 Level 1 module. 1. The Module provides two distinct operator roles: User and Cryptographic Officer. 2. Poweron selftests do not require any operator action. 3. Data output is inhibited during selftests, zeroization, and error states. 4. Status information does not contain CSPs or sensitive data that if misused could lead to a compromise of the Module. 5. There are no restrictions on which keys or CSPs are zeroized by the zeroization service. 6. The calling application is the single operator of the Module. 7. The Module does not support manual key entry. 8. The Module does not have any external input/output devices used for entry/output of data. 9. The module does not support key generation. 9 References and Definitions The following standards are referred to in this Security Policy. Table 14 ­ References Abbreviation Full Specification Name [FIPS1402] Security Requirements for Cryptographic Modules, May 25, 2001 [SP800131A] Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths, January 2011 Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 14 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). Table 15 ­ Acronyms and Definitions Acronym Definition AES Advanced Encryption Standard API Application Programming Interface CO Cryptographic Officer CSP Critical Security Parameter DES Data Encryption Standard DH DiffieHellman DRBG Deterministic Random Bit Generator ECDH Elliptic Curve DiffieHellman FIPS Federal Information Processing Standard HMAC KeyedHash Message Authentication Code RSA Rivest, Shamir, and Adleman Algorithm SSL Secure Sockets Layer TDES TripleDES TLS Transport Layer Security SHA Secure Hash Algorithm The source code files in Table 16 create the object files of the Push To Talk Client Crypto Module module on each supported operating environment. Table 16 ­ Source Files Source File Name Description aes.c AES algorithm des3.c TDES algorithm fips.c FIPS entry point and API wrappers fips_test.c Power on Self Tests hmac.c HMAC algorithm random.c DRBG algorithm rsa.c RSA algorithm sha.c SHA algorithm sha256.c SHA256 algorithm sha512.c SHA512 algorithm Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 15 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). Source File Name Description wolfcrypt_first.c First FIPS function and Read Only address wolfcrypt_last.c Last FIPS function and Read Only address Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 16 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). 10 Appendix A ­ Installation Instructions This Appendix describes using Push To Talk Client Crypto Module in FIPS 1402 mode as a software component. Kodiak Networks performs these installation steps for customers of the Push to Talk Client Crypto Module. 10.1 iOS INSTALLATION Push To Talk Client Crypto Module in FIPS mode requires the Push To Talk Client Crypto Module FIPS library version 3.6.0. The Push To Talk Client Crypto Module FIPS releases can be obtained with a link provided by wolfSSL through direct email. To verify the fingerprint of the package calculate the SHA256 sum using a FIPS 1402 validated cryptographic module. The following command serves as an example: shasum ­a 256 wolfssl-3.6.0-commercial-fips-ios.7z 32f7bfcb4ce250da3c43a3d944ab443e1be1c4508e86e0ef664a52ba3f4ea603 And compare the sum to the sum provided with the package. If for some reason the sums do not match stop using the module and contact wolfSSL. To unpack the bundle: 7za x wolfssl-3.6.0-commercial-fips-ios.7z When prompted, enter the password. The password is provided in the distribution email. Push To Talk Client Crypto Module with FIPS for iOS is used as a static library. One has to: 1. Build the library 2. Link it against their application 3. Get the In Core Integrity check value from the target platform 4. Copy the value given for "hash" in the output, and replace the value of "verifyCore[]" in ctaocrypt/src/fips_test.c with this new value 5. Rebuild the library 6. Relink it into the application To build and install Push To Talk Client Crypto Module with FIPS: 1. In Xcode open the project IDE/iOS/wolfsslFIPS.xcodeproj 2. Select the build type and target 3. Archive the code to make a release library 4. If using a release library, click on the libwolfssl.a item in the file list, on the right pane click the copy button on the Full Path, open that path in the Finder, but delete everything after "Products" in the path, then pick the end product that was built, copy the header directory and the libwolfssl.a file into your project 5. In your application project, add the following preprocessor macros: * IPHONE * HAVE_FIPS * HAVE_HASHDRBG * HAVE_AESGCM * WOLFSSL_SHA512 * WOLFSSL_SHA384 * NO_MD4 Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 17 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). * NO_HC128 * NO_RABBIT * NO_DSA * NO_PWDBASED 6. Build the project 7. Run the code on your target hardware with the standard cable connected, the default FIPS check failure should be output in the output window in Xcode The first run should indicate the In Core Integrity check has failed: in my Fips callback, ok = 0, err = -203 message = In Core Integrity check FIPS error hash = 622B4F8714276FF8845DD49DD3AA27FF68A8226C50D5651D320D914A5660B3F5 In core integrity hash check failure, copy above hash into verifyCore[] in fips_test.c and rebuild The In Core Integrity checksum will vary with different processors, compiler versions, runtime library versions, target hardware, and build type. 10.2 Android INSTALLATION Push To Talk Client Crypto Module in FIPS mode for Android requires the Push To Talk Client Crypto Module Android FIPS library version 3.6.0 or later. The Push To Talk Client Crypto Module FIPS releases can be obtained with a link provided by wolfSSL through direct email. To verify the fingerprint of the package calculate the SHA256 sum using a FIPS 1402 validated cryptographic module. The following command serves as an example: shasum -a 256 wolfssl-3.6.0-commercial-fips-android.7z 99c01cbf9c75d787ff34470e8c810af66c1443148ae8caf568a7c96e10419900 And compare the sum to the sum provided with the package. If for some reason the sums do not match stop using the module and contact wolfSSL. To unpack the bundle: 7za x wolfssl-3.6.0-commercial-fips-android.7z When prompted, enter the password. The password is provided in the distribution email. The Push To Talk Client Crypto Module FIPS for Android bundle contains the wolfSSL library, the Push To Talk Client Crypto Module FIPS library (used to create the crypto boundary), the Push To Talk Client Crypto Module JNI wrapper, and a sample Android NDK application (demonstrating how to correctly include wolfSSL, Push To Talk Client Crypto Module FIPS, and Push To Talk Client Crypto ModuleJNI in an Android.mk file). Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 18 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). In order to build the Push To Talk Client Crypto Module Android NDK sample application, Java, the Android SDK, and the Android NDK need to be installed on the development machine in use. wolfSSL and Push To Talk Client Crypto Module FIPS for Android are compiled as part of an Android NDK application's build process. Each Android NDK application has an Android.mk build file that controls the compilation of native shared libraries. This Android.mk file should be modified to compile shared libraries. Both Push To Talk Client Crypto Module FIPS and Push To Talk Client Crypto Module JNI can be compiled by Android.mk, by following the example shown in the "Android NDK Sample App" (Push To Talk Client Crypto Moduleandroidndk). The Android.mk file for this project is located at: ./IDE/Android/wolfCrypt-android-ndk/jni/Android.mk Following preprocessor macros that are enabled for Android. NO_DSA NO_PSK NO_MD4 NO_HC128 NO_RABBIT WOLFSSL_SHA512 WOLFSSL_SHA384 HAVE_AESGCM HAVE_FIPS HAVE_HASHDRBG This sample demonstrates the correct use of source files, order of source files, and preprocessor defines to use. The native shared libraries need to be loaded by the main Activity in a static block, in the correct order. Applications will need to call System.loadLibrary() in a static code block for both the Push To Talk Client Crypto Module FIPS and Push To Talk Client Crypto Module JNI shared libraries. The FIPS library contains a selfcheck verify hash. Since the library is compiled as a shared library and is position independent, the library looks the same to every application that builds against it, and the code can be verified. The library provides the function wolfCrypt_GetCoreHash_fips() that returns a string with the check value calculated with the existing code. The verifyCore in fips_test.c will need to be updated with this value, the library rebuilt then relinked into your application. 10.3 Push To Talk Client Crypto Module FIPS API Push To Talk Client Crypto Module adds the string _fips to all FIPS mode APIs. For example, ShaUpdate() becomes ShaUpdate_fips(). The FIPS mode functions can be called directly, but they can also be used through macros. HAVE_FIPS is defined when using Push To Talk Client Crypto Module in FIPS mode and that creates a macro for each function with FIPS support. For the above example, a user with an application calling ShaUpdate() can recompile with the FIPS module and automatically get ShaUpdate_fips() support Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 19 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision). without changing their source code. Of course, recompilation is necessary with the correct macros defined. A new error return code: FIPS_NOT_ALLOWED_E may be returned from any of these functions used directly or even indirectly. The error is returned when the PowerOn SelfTests (POST) are not yet complete or they have failed. POST is done automatically as a default entry point when using the library, no user interaction is required to start the tests. To see the current status including any error code at any time call wolfCrypt_GetStatus_fips(). For example, if the AES Known Answer Test failed during POS GetStatus may return AES_KAT_FIPS_E Copyright © Kodiak Networks, Inc., 2015 Push To Talk Client Crypto Module Version 3.6.0 Page 20 of 20 Kodiak Networks, Inc. Public Material ­ May be reproduced only in its original entirety (without revision).