diff --git a/include/polarssl/config.h b/include/polarssl/config.h index fddd50b689..1e36a490b3 100644 --- a/include/polarssl/config.h +++ b/include/polarssl/config.h @@ -199,6 +199,20 @@ #define POLARSSL_ENABLE_WEAK_CIPHERSUITES */ +/** + * \def POLARSSL_ECP_XXXX_ENABLED + * + * Enables specific curves within the Elliptic Curve module. + * By default all supported curves are enables. + * + * Comment macros to disable the curve and functions for it + */ +#define POLARSSL_ECP_DP_SECP192R1_ENABLED +#define POLARSSL_ECP_DP_SECP224R1_ENABLED +#define POLARSSL_ECP_DP_SECP256R1_ENABLED +#define POLARSSL_ECP_DP_SECP384R1_ENABLED +#define POLARSSL_ECP_DP_SECP521R1_ENABLED + /** * \def POLARSSL_KEY_EXCHANGE_PSK_ENABLED * diff --git a/library/ecp.c b/library/ecp.c index f14b0b42e8..1a83ed0ce5 100644 --- a/library/ecp.c +++ b/library/ecp.c @@ -352,6 +352,7 @@ cleanup: return( ret ); } +#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) /* * 192 bits in terms of t_uint */ @@ -425,7 +426,9 @@ static int ecp_mod_p192( mpi *N ) cleanup: return( ret ); } +#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ +#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) /* * Size of p521 in terms of t_uint */ @@ -467,6 +470,7 @@ static int ecp_mod_p521( mpi *N ) cleanup: return( ret ); } +#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ /* * Domain parameters for secp192r1 @@ -562,32 +566,42 @@ int ecp_use_known_dp( ecp_group *grp, ecp_group_id id ) switch( id ) { +#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) case POLARSSL_ECP_DP_SECP192R1: grp->modp = ecp_mod_p192; return( ecp_group_read_string( grp, 16, SECP192R1_P, SECP192R1_B, SECP192R1_GX, SECP192R1_GY, SECP192R1_N ) ); +#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ +#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) case POLARSSL_ECP_DP_SECP224R1: return( ecp_group_read_string( grp, 16, SECP224R1_P, SECP224R1_B, SECP224R1_GX, SECP224R1_GY, SECP224R1_N ) ); +#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ +#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) case POLARSSL_ECP_DP_SECP256R1: return( ecp_group_read_string( grp, 16, SECP256R1_P, SECP256R1_B, SECP256R1_GX, SECP256R1_GY, SECP256R1_N ) ); +#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ +#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) case POLARSSL_ECP_DP_SECP384R1: return( ecp_group_read_string( grp, 16, SECP384R1_P, SECP384R1_B, SECP384R1_GX, SECP384R1_GY, SECP384R1_N ) ); +#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ +#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) case POLARSSL_ECP_DP_SECP521R1: grp->modp = ecp_mod_p521; return( ecp_group_read_string( grp, 16, SECP521R1_P, SECP521R1_B, SECP521R1_GX, SECP521R1_GY, SECP521R1_N ) ); +#endif /* POLARSSL_ECP_DP_SECP521R1_ENABLED */ } return( POLARSSL_ERR_ECP_BAD_INPUT_DATA ); @@ -1311,7 +1325,27 @@ int ecp_self_test( int verbose ) ecp_point_init( &R ); mpi_init( &m ); +#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP192R1 ) ); +#else +#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) + MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP224R1 ) ); +#else +#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) + MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP256R1 ) ); +#else +#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) + MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP384R1 ) ); +#else +#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) + MPI_CHK( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_SECP521R1 ) ); +#else +#error No curves defines +#endif /* POLARSSL_ECP_DP_SECP512R1_ENABLED */ +#endif /* POLARSSL_ECP_DP_SECP384R1_ENABLED */ +#endif /* POLARSSL_ECP_DP_SECP256R1_ENABLED */ +#endif /* POLARSSL_ECP_DP_SECP224R1_ENABLED */ +#endif /* POLARSSL_ECP_DP_SECP192R1_ENABLED */ if( verbose != 0 ) printf( " ECP test #1 (SPA resistance): " ); diff --git a/library/ssl_cli.c b/library/ssl_cli.c index 53557f86af..366277d253 100644 --- a/library/ssl_cli.c +++ b/library/ssl_cli.c @@ -200,16 +200,29 @@ static void ssl_write_supported_elliptic_curves_ext( ssl_context *ssl, SSL_DEBUG_MSG( 3, ( "client hello, adding supported_elliptic_curves extension" ) ); +#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) elliptic_curve_list[elliptic_curve_len++] = 0x00; elliptic_curve_list[elliptic_curve_len++] = POLARSSL_ECP_DP_SECP521R1; +#endif +#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) elliptic_curve_list[elliptic_curve_len++] = 0x00; elliptic_curve_list[elliptic_curve_len++] = POLARSSL_ECP_DP_SECP384R1; +#endif +#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) elliptic_curve_list[elliptic_curve_len++] = 0x00; elliptic_curve_list[elliptic_curve_len++] = POLARSSL_ECP_DP_SECP256R1; +#endif +#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) elliptic_curve_list[elliptic_curve_len++] = 0x00; elliptic_curve_list[elliptic_curve_len++] = POLARSSL_ECP_DP_SECP224R1; +#endif +#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) elliptic_curve_list[elliptic_curve_len++] = 0x00; elliptic_curve_list[elliptic_curve_len++] = POLARSSL_ECP_DP_SECP192R1; +#endif + + if( elliptic_curve_len == 0 ) + return; *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_ELLIPTIC_CURVES >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( TLS_EXT_SUPPORTED_ELLIPTIC_CURVES ) & 0xFF ); diff --git a/library/ssl_srv.c b/library/ssl_srv.c index 27df903407..0c18f0d572 100644 --- a/library/ssl_srv.c +++ b/library/ssl_srv.c @@ -213,16 +213,41 @@ static int ssl_parse_supported_elliptic_curves( ssl_context *ssl, p = buf + 2; while( list_size > 0 ) { - if( p[0] == 0x00 && ( - p[1] == POLARSSL_ECP_DP_SECP192R1 || - p[1] == POLARSSL_ECP_DP_SECP224R1 || - p[1] == POLARSSL_ECP_DP_SECP256R1 || - p[1] == POLARSSL_ECP_DP_SECP384R1 || - p[1] == POLARSSL_ECP_DP_SECP521R1 ) ) +#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) + if( p[0] == 0x00 && p[1] == POLARSSL_ECP_DP_SECP192R1 ) { ssl->handshake->ec_curve = p[1]; return( 0 ); } +#endif +#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) + if( p[0] == 0x00 && p[1] == POLARSSL_ECP_DP_SECP224R1 ) + { + ssl->handshake->ec_curve = p[1]; + return( 0 ); + } +#endif +#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) + if( p[0] == 0x00 && p[1] == POLARSSL_ECP_DP_SECP256R1 ) + { + ssl->handshake->ec_curve = p[1]; + return( 0 ); + } +#endif +#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) + if( p[0] == 0x00 && p[1] == POLARSSL_ECP_DP_SECP384R1 ) + { + ssl->handshake->ec_curve = p[1]; + return( 0 ); + } +#endif +#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) + if( p[0] == 0x00 && p[1] == POLARSSL_ECP_DP_SECP521R1 ) + { + ssl->handshake->ec_curve = p[1]; + return( 0 ); + } +#endif list_size -= 2; p += 2; diff --git a/programs/test/ecp-bench.c b/programs/test/ecp-bench.c index fc9a0cfd9e..0a0e015b4f 100644 --- a/programs/test/ecp-bench.c +++ b/programs/test/ecp-bench.c @@ -183,11 +183,21 @@ static void ecp_bench_case( size_t dp, const char *s, const char *m ) static void ecp_bench( void ) { - ecp_bench_case( 0, "192", ECP_192_M ); - ecp_bench_case( 1, "224", ECP_224_M ); - ecp_bench_case( 2, "256", ECP_256_M ); - ecp_bench_case( 3, "384", ECP_384_M ); - ecp_bench_case( 4, "521", ECP_521_M ); +#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) + ecp_bench_case( POLARSSL_ECP_DP_SECP192R1, "192", ECP_192_M ); +#endif +#if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) + ecp_bench_case( POLARSSL_ECP_DP_SECP224R1, "224", ECP_224_M ); +#endif +#if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) + ecp_bench_case( POLARSSL_ECP_DP_SECP256R1, "256", ECP_256_M ); +#endif +#if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) + ecp_bench_case( POLARSSL_ECP_DP_SECP384R1, "384", ECP_384_M ); +#endif +#if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) + ecp_bench_case( POLARSSL_ECP_DP_SECP521R1, "521", ECP_521_M ); +#endif } int main( int argc, char *argv[] ) diff --git a/tests/suites/test_suite_ecp.data b/tests/suites/test_suite_ecp.data index 57b3113b51..4519763966 100644 --- a/tests/suites/test_suite_ecp.data +++ b/tests/suites/test_suite_ecp.data @@ -134,69 +134,91 @@ ECP small check pubkey #10 ecp_small_check_pub:10:25:1:POLARSSL_ERR_ECP_GENERIC ECP write binary #0 (zero, bad format) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"01":"01":"00":UNKNOWN:"00":1:POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP write binary #1 (zero, uncompressed, buffer just fits) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"01":"01":"00":UNCOMPRESSED:"00":1:0 ECP write binary #2 (zero, buffer too small) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"01":"01":"00":UNCOMPRESSED:"00":0:POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ECP write binary #3 (non-zero, uncompressed, buffer just fits) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":UNCOMPRESSED:"0448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":49:0 ECP write binary #4 (non-zero, uncompressed, buffer too small) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":UNCOMPRESSED:"0448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":48:POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ECP write binary #5 (zero, compressed, buffer just fits) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"01":"01":"00":COMPRESSED:"00":1:0 ECP write binary #6 (zero, buffer too small) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"01":"01":"00":COMPRESSED:"00":0:POLARSSL_ERR_ECP_BUFFER_TOO_SMALL ECP write binary #7 (even, compressed, buffer just fits) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":COMPRESSED:"0248d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":25:0 ECP write binary #8 (even, compressed, buffer too small) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":COMPRESSED:"0248d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":24:POLARSSL_ERR_ECP_BUFFER_TOO_SMALL -ECP write binary #7 (odd, compressed, buffer just fits) +ECP write binary #9 (odd, compressed, buffer just fits) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_write_binary:SECP192R1:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"93112b28345b7d1d7799611e49bea9d8290cb2d7afe1f9f3":"01":COMPRESSED:"0348d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":25:0 ECP read binary #1 (zero, invalid ilen) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_read_binary:SECP192R1:"0000":"01":"01":"00":POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP read binary #2 (zero, invalid first byte) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_read_binary:SECP192R1:"01":"01":"01":"00":POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP read binary #3 (zero, OK) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_read_binary:SECP192R1:"00":"01":"01":"00":0 ECP read binary #4 (non-zero, invalid ilen) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_read_binary:SECP192R1:"04001122":"01":"01":"00":POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP read binary #5 (non-zero, invalid first byte) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_read_binary:SECP192R1:"0548d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP read binary #6 (non-zero, OK) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_read_binary:SECP192R1:"0448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":0 ECP tls read point #1 (zero, invalid length byte) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_tls_read_point:SECP192R1:"0200":"01":"01":"00":POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP tls read point #2 (zero, OK) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_tls_read_point:SECP192R1:"0100":"01":"01":"00":0 ECP tls read point #3 (non-zero, invalid length byte) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_tls_read_point:SECP192R1:"300448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":POLARSSL_ERR_ECP_BAD_INPUT_DATA ECP tls read point #4 (non-zero, OK) +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_tls_read_point:SECP192R1:"310448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":"01":0 ECP tls write-read point #1 +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_tls_write_read_point:SECP192R1 ECP tls write-read point #2 +depends_on:POLARSSL_ECP_DP_SECP521R1_ENABLED ecp_tls_write_read_point:SECP521R1 ECP tls read group #1 (record too short) @@ -209,39 +231,50 @@ ECP tls read group #3 (unknown curve) ecp_tls_read_group:"030010":POLARSSL_ERR_ECP_BAD_INPUT_DATA:0 ECP tls read group #4 (OK, buffer just fits) +depends_on:POLARSSL_ECP_DP_SECP256R1_ENABLED ecp_tls_read_group:"030017":0:256 ECP tls read group #5 (OK, buffer continues) ecp_tls_read_group:"0300180000":0:384 ECP tls write-read group #1 +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_tls_write_read_group:SECP192R1 ECP tls write-read group #2 +depends_on:POLARSSL_ECP_DP_SECP521R1_ENABLED ecp_tls_write_read_group:SECP521R1 ECP gen keypair +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_gen_keypair:SECP192R1 ECP mod p192 readable +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_fast_mod:SECP192R1:"000000000000010500000000000001040000000000000103000000000000010200000000000001010000000000000100" ECP mod p192 random +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_fast_mod:SECP192R1:"36CF96B45D706A0954D89E52CE5F38517A2270E0175849B6F3740151D238CCABEF921437E475881D83BB69E4AA258EBD" ECP test vectors secp192r1 rfc 5114 +depends_on:POLARSSL_ECP_DP_SECP192R1_ENABLED ecp_test_vect:SECP192R1:"323FA3169D8E9C6593F59476BC142000AB5BE0E249C43426":"CD46489ECFD6C105E7B3D32566E2B122E249ABAADD870612":"68887B4877DF51DD4DC3D6FD11F0A26F8FD3844317916E9A":"631F95BB4A67632C9C476EEE9AB695AB240A0499307FCF62":"519A121680E0045466BA21DF2EEE47F5973B500577EF13D5":"FF613AB4D64CEE3A20875BDB10F953F6B30CA072C60AA57F":"AD420182633F8526BFE954ACDA376F05E5FF4F837F54FEBE":"4371545ED772A59741D0EDA32C671112B7FDDD51461FCF32" ECP test vectors secp224r1 rfc 5114 +depends_on:POLARSSL_ECP_DP_SECP224R1_ENABLED ecp_test_vect:SECP224R1:"B558EB6C288DA707BBB4F8FBAE2AB9E9CB62E3BC5C7573E22E26D37F":"49DFEF309F81488C304CFF5AB3EE5A2154367DC7833150E0A51F3EEB":"4F2B5EE45762C4F654C1A0C67F54CF88B016B51BCE3D7C228D57ADB4":"AC3B1ADD3D9770E6F6A708EE9F3B8E0AB3B480E9F27F85C88B5E6D18":"6B3AC96A8D0CDE6A5599BE8032EDF10C162D0A8AD219506DCD42A207":"D491BE99C213A7D1CA3706DEBFE305F361AFCBB33E2609C8B1618AD5":"52272F50F46F4EDC9151569092F46DF2D96ECC3B6DC1714A4EA949FA":"5F30C6AA36DDC403C0ACB712BB88F1763C3046F6D919BD9C524322BF" ECP test vectors secp256r1 rfc 5114 +depends_on:POLARSSL_ECP_DP_SECP256R1_ENABLED ecp_test_vect:SECP256R1:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF":"2AF502F3BE8952F2C9B5A8D4160D09E97165BE50BC42AE4A5E8D3B4BA83AEB15":"EB0FAF4CA986C4D38681A0F9872D79D56795BD4BFF6E6DE3C0F5015ECE5EFD85":"2CE1788EC197E096DB95A200CC0AB26A19CE6BCCAD562B8EEE1B593761CF7F41":"B120DE4AA36492795346E8DE6C2C8646AE06AAEA279FA775B3AB0715F6CE51B0":"9F1B7EECE20D7B5ED8EC685FA3F071D83727027092A8411385C34DDE5708B2B6":"DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788":"0357DCCD4C804D0D8D33AA42B848834AA5605F9AB0D37239A115BBB647936F50" ECP test vectors secp384r1 rfc 5114 +depends_on:POLARSSL_ECP_DP_SECP384R1_ENABLED ecp_test_vect:SECP384R1:"D27335EA71664AF244DD14E9FD1260715DFD8A7965571C48D709EE7A7962A156D706A90CBCB5DF2986F05FEADB9376F1":"793148F1787634D5DA4C6D9074417D05E057AB62F82054D10EE6B0403D6279547E6A8EA9D1FD77427D016FE27A8B8C66":"C6C41294331D23E6F480F4FB4CD40504C947392E94F4C3F06B8F398BB29E42368F7A685923DE3B67BACED214A1A1D128":"52D1791FDB4B70F89C0F00D456C2F7023B6125262C36A7DF1F80231121CCE3D39BE52E00C194A4132C4A6C768BCD94D2":"5CD42AB9C41B5347F74B8D4EFB708B3D5B36DB65915359B44ABC17647B6B9999789D72A84865AE2F223F12B5A1ABC120":"E171458FEAA939AAA3A8BFAC46B404BD8F6D5B348C0FA4D80CECA16356CA933240BDE8723415A8ECE035B0EDF36755DE":"5EA1FC4AF7256D2055981B110575E0A8CAE53160137D904C59D926EB1B8456E427AA8A4540884C37DE159A58028ABC0E":"0CC59E4B046414A81C8A3BDFDCA92526C48769DD8D3127CAA99B3632D1913942DE362EAFAA962379374D9F3F066841CA" ECP test vectors secp521r1 rfc 5114 +depends_on:POLARSSL_ECP_DP_SECP521R1_ENABLED ecp_test_vect:SECP521R1:"0113F82DA825735E3D97276683B2B74277BAD27335EA71664AF2430CC4F33459B9669EE78B3FFB9B8683015D344DCBFEF6FB9AF4C6C470BE254516CD3C1A1FB47362":"01EBB34DD75721ABF8ADC9DBED17889CBB9765D90A7C60F2CEF007BB0F2B26E14881FD4442E689D61CB2DD046EE30E3FFD20F9A45BBDF6413D583A2DBF59924FD35C":"00F6B632D194C0388E22D8437E558C552AE195ADFD153F92D74908351B2F8C4EDA94EDB0916D1B53C020B5EECAED1A5FC38A233E4830587BB2EE3489B3B42A5A86A4":"00CEE3480D8645A17D249F2776D28BAE616952D1791FDB4B70F7C3378732AA1B22928448BCD1DC2496D435B01048066EBE4F72903C361B1A9DC1193DC2C9D0891B96":"010EBFAFC6E85E08D24BFFFCC1A4511DB0E634BEEB1B6DEC8C5939AE44766201AF6200430BA97C8AC6A0E9F08B33CE7E9FEEB5BA4EE5E0D81510C24295B8A08D0235":"00A4A6EC300DF9E257B0372B5E7ABFEF093436719A77887EBB0B18CF8099B9F4212B6E30A1419C18E029D36863CC9D448F4DBA4D2A0E60711BE572915FBD4FEF2695":"00CDEA89621CFA46B132F9E4CFE2261CDE2D4368EB5656634C7CC98C7A00CDE54ED1866A0DD3E6126C9D2F845DAFF82CEB1DA08F5D87521BB0EBECA77911169C20CC":"00F9A71641029B7FC1A808AD07CD4861E868614B865AFBECAB1F2BD4D8B55EBCB5E3A53143CEB2C511B1AE0AF5AC827F60F2FD872565AC5CA0A164038FE980A7E4BD" ECP selftest