Pascal Brand | c639ac8 | 2015-07-02 08:53:34 +0200 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright (c) 2014, STMicroelectronics International N.V. |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * Redistribution and use in source and binary forms, with or without |
| 6 | * modification, are permitted provided that the following conditions are met: |
| 7 | * |
| 8 | * 1. Redistributions of source code must retain the above copyright notice, |
| 9 | * this list of conditions and the following disclaimer. |
| 10 | * |
| 11 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
| 12 | * this list of conditions and the following disclaimer in the documentation |
| 13 | * and/or other materials provided with the distribution. |
| 14 | * |
| 15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| 16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| 19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| 20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| 21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| 22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| 23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 25 | * POSSIBILITY OF SUCH DAMAGE. |
| 26 | */ |
| 27 | |
| 28 | #include "testframework.h" |
| 29 | |
| 30 | /* |
| 31 | * Remove the #undef if you like debug print outs and assertions |
| 32 | * for this file. |
| 33 | */ |
| 34 | #undef DEBUG_ME |
| 35 | #include "mpa_debug.h" |
| 36 | #include "mpa_assert.h" |
| 37 | |
| 38 | #define COMPOSITE 0 |
| 39 | #define PRIME 1 |
| 40 | #define PROB_PRIME -1 |
| 41 | |
| 42 | #define IS_COMPOSITE(str) \ |
| 43 | do { \ |
| 44 | TEE_BigIntConvertFromString(x, str); \ |
| 45 | int tmp = TEE_BigIntIsProbablePrime(x, 80); \ |
| 46 | TB_ASSERT(tmp == COMPOSITE); \ |
| 47 | } while (0) |
| 48 | |
| 49 | #define IS_PRIME(str) \ |
| 50 | do { \ |
| 51 | TEE_BigIntConvertFromString(x, str); \ |
| 52 | int tmp = TEE_BigIntIsProbablePrime(x, 80); \ |
| 53 | TB_ASSERT(((tmp == PRIME) || (tmp == PROB_PRIME))); \ |
| 54 | } while (0) |
| 55 | |
| 56 | static void simple(void) |
| 57 | { |
| 58 | |
| 59 | TB_INFO("Simple cases"); |
| 60 | |
| 61 | DEF_BIGINT(x, 2048); |
| 62 | |
| 63 | IS_COMPOSITE("0"); |
| 64 | IS_COMPOSITE("1"); |
| 65 | IS_PRIME("2"); |
| 66 | IS_PRIME("3"); |
| 67 | IS_PRIME("17"); |
| 68 | IS_PRIME("FA1"); |
| 69 | IS_COMPOSITE("FA0"); |
| 70 | |
| 71 | DEL_BIGINT(x); |
| 72 | |
| 73 | } |
| 74 | |
| 75 | static void large_composites(void) |
| 76 | { |
| 77 | TB_INFO("Large Composites"); |
| 78 | |
| 79 | DEF_BIGINT(x, 2048); |
| 80 | |
| 81 | IS_COMPOSITE("136233FDE5569"); |
| 82 | IS_COMPOSITE("177B96388FD94D5D7EC9AE513"); |
| 83 | IS_COMPOSITE("22770A7DC599BC90B2FF981CCB5CF05703344C8F3504189ED"); |
| 84 | |
| 85 | IS_COMPOSITE("0002ECD5_3B215054_2D1494A4_24D50322_EBABBBD5_DB89392A_368D7759"); |
| 86 | |
| 87 | IS_COMPOSITE("00000004_C8971C2B_6F7A8503_AB80749E_2BBA5BB6_B6031BD4_3564DCA8_003F0E3E_54E677A0_A4B1B615_3662B313_0C11C273_C0F94084_45B2ABB4_7D64153B_EB48C154_659FDFDE_DC496C8E_A81AA7B7_CE2B2CB1_AA7C8B40_7DE8C86F_122607B2_A226385D_9432F6CB_30B5E4DE_033E3363_D48A1865_D9BC95DC_7883D9DC_9331691A_17964979"); |
| 88 | |
| 89 | IS_COMPOSITE("00038AFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFEA_5C6D11ED_D2905192_C5429E6A_6D796E89_250BF563_DA53D393_25129B70_435894B5_6E337D58_66F0BEF6_63D6C26D_A889B69D_4B1508ED_63A17AFD_8BC0C5BE_09AC18B6_4B2B7D87_279D32EB_4F3375C1_0D58DF1F_7CA2147A_61CFA557_235244D4_A4700AB5_953C4C6E_D428EB5F_09F07DAE_D46A995B_8FFE48EF_B93390C9_60685A31_987879F8_18CCE9B9_816E13DE_E4BEA5CC_38C56A5D_1983425D_DD909C88_463B447F"); |
| 90 | |
| 91 | DEL_BIGINT(x); |
| 92 | } |
| 93 | |
| 94 | static void large_primes(void) |
| 95 | { |
| 96 | TB_INFO("Large Primes"); |
| 97 | |
| 98 | DEF_BIGINT(x, 2048); |
| 99 | |
| 100 | IS_PRIME("000136A3_52B2C7A5"); |
| 101 | IS_PRIME("00000002_2770A7DC_599BC90B_2FF981CC_B5CF0570_3344C8F3_50418AAD"); |
| 102 | |
| 103 | IS_PRIME("000067E0_4F440C5F_ECCA2694_B1A4AB4F_CEC2D2B2_D286FC93_DD259D2B_36A3A00D_F3726A4D_4DFA9919_5998D92F_43DD7370_B8C079E2_3072036F_0C13F3F6_ABA1D6DF"); |
| 104 | |
| 105 | IS_PRIME("000BC9F7_E42CE741_32EC6933_DE1B8357_CD2AEB9E_4B8A5F26_BD233D1E_6F295555_4D2CFA97_60F3F69C_CC52E8E4_28F68C37_AD5BC70C_DB12F4DC_EF23CB10_1C36A2A7"); |
| 106 | |
| 107 | IS_PRIME("00000005_233FE157_B5B44102_598513AE_BB8876B0_D1791769_C8A1B0F3_6875D06F_E26951C7_372192C7_B21CAB67_ADF0D6FE_1A718FB3_FC4A5145_4DE87CD3_F852005B_AAEC35D5"); |
| 108 | |
| 109 | IS_PRIME("0000001A_655954FB_C4408E09_FE97EB82_5E0F0964_26B42317_A36E53FF_9608DD3F_A6610402_45906334_496987EF_B14BEA5F_7C050444_C9B22A09_EC76AF4E_BDC609D8_A90C05E9_E5AF0682_9C542DFC_F7E6B9DC_0B065659_C1816309_CD6012C3_7F8CE649_8DECF850_F33943F0_F8308140_6846D306_22E0BCE6_97E612FC_1F7A5D90_2280D6E0_3009E585"); |
| 110 | |
| 111 | DEL_BIGINT(x); |
| 112 | } |
| 113 | |
| 114 | void tb_prime(void) |
| 115 | { |
| 116 | TB_HEADER("Primality Algorithms"); |
| 117 | simple(); |
| 118 | large_composites(); |
| 119 | large_primes(); |
| 120 | TB_FOOTER("Primality Algorithms"); |
| 121 | } |