1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
|
use 5.008005;
use strict;
use warnings;
use ExtUtils::MakeMaker;
use Config;
# This is similar to what Crypt::OpenSSL::Bignum does.
my $lib = '-lcrypto';
my $inc = '';
my $nul = $^O eq 'MSWin32' ? 'nul' : '/dev/null';
if (my $dir = $ENV{OPENSSL_PREFIX}) {
$lib = "-L$dir/lib -lcrypto";
$inc = "-I$dir/include";
}
elsif ($ENV{OPENSSL_LIB}) {
$lib = $ENV{OPENSSL_LIB};
$inc = $ENV{OPENSSL_INCLUDE};
}
elsif (`pkg-config --modversion libcrypto 2>$nul`) {
$lib = `pkg-config --libs libcrypto 2> $nul`;
$inc = `pkg-config --cflags libcrypto 2> $nul`;
}
elsif ($^O eq 'MSWin32') {
$lib = '-llibeay32' if $Config{cc} =~ /cl/;
$lib = '-leay32' if $Config{cc} =~ /gcc/;
}
$lib =~ s/[\r\n]+/ /g;
$inc =~ s/[\r\n]+/ /g;
# Setting up library directory ordering is complicated.
#
# Homebrew, for example, on Intel MacOS places OpenSSL libcrypto into
# /usr/local/lib. This directory is also one of default library
# paths. If a non-default library path is set with, for example,
# OPENSSL_PREFIX, ensure this path is placed before any other library
# paths. Otherwise /usr/local/lib is picked up before the one set with
# OPENSSL_PREFIX.
# Use LIBS by default for setting library path and library. Seems to
# append the LIBS value to the default values.
my %args = (
LIBS => [ $lib ],
);
# If our lib contains -L flags, check if perl Config module's linking
# related variables also contain -L flags. If they do, ensure our lib
# comes first. WriteMakefile accepts them with uppercase names. If we
# pass even one of the Config variables with a modified value, we
# don't pass LIBS to avoid warnings like this:
#
# ld: warning: ignoring duplicate libraries: '-lcrypto'
#
# In this case '-lcrypto' was passed with LIBS and with at least one
# of the Config variables.
if ($lib =~ m/(^|\s)-L/) {
foreach my $ld_flag (qw(lddlflags ldflags)) {
my $val = $Config{$ld_flag};
next unless $val =~ s/(^|\s)-L/$1$lib -L/;
$args{uc $ld_flag} = $val;
delete $args{LIBS};
}
}
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile1(
NAME => 'Crypt::OpenSSL::EC',
VERSION_FROM => 'lib/Crypt/OpenSSL/EC.pm',
MIN_PERL_VERSION => '5.008005',
PREREQ_PM => { 'Crypt::OpenSSL::Bignum' => '0.04',
},
TEST_REQUIRES => { 'Test::More' => 0,
},
ABSTRACT_FROM => 'lib/Crypt/OpenSSL/EC.pm', # retrieve abstract from module
LICENSE => 'perl_5',
AUTHOR => [ 'Mike McCauley <mikem@airspayce.com>',
'Heikki Vatiainen <hvn@radiatorsoftware.com>',
],
# The following is noted by Crypt:OpenSSL::Bignum. Note that
# redhat9 is Red Hat Linux from 2003. It's not Red Hat Enterprise
# Linux from 2022. Remove these soon since it's already 2026.
# perl-5.8/gcc-3.2 needs -DPERL5, and redhat9 likes -DOPENSSL_NO_KRB5
DEFINE => '-DPERL5 -DOPENSSL_NO_KRB5 -DOPENSSL_API_COMPAT=908',
INC => $inc,
META_MERGE => {
'meta-spec' => {
version => 2,
url => 'https://metacpan.org/pod/CPAN::Meta::Spec',
},
resources => {
bugtracker => {
web => 'https://github.com/radiator-software/p5-crypt-openssl-ec/issues',
},
homepage => 'https://github.com/radiator-software/p5-crypt-openssl-ec',
repository => {
type => 'git',
url => 'git://github.com/radiator-software/p5-crypt-openssl-ec.git',
web => 'https://github.com/radiator-software/p5-crypt-openssl-ec',
},
},
},
dist => { TARFLAGS => '--owner=0 --group=0 -cvf' },
%args,
);
if (eval {require ExtUtils::Constant; 1}) {
# If you edit these definitions to change the constants used by this module,
# you will need to use the generated const-c.inc and const-xs.inc
# files to replace their "fallback" counterparts before distributing your
# changes.
my @names = (qw(EC_F_COMPUTE_WNAF EC_F_D2I_ECPARAMETERS
EC_F_D2I_ECPKPARAMETERS EC_F_D2I_ECPRIVATEKEY
EC_F_DO_EC_KEY_PRINT EC_F_ECKEY_PARAM2TYPE
EC_F_ECKEY_PARAM_DECODE EC_F_ECKEY_PRIV_DECODE
EC_F_ECKEY_PRIV_ENCODE EC_F_ECKEY_PUB_DECODE
EC_F_ECKEY_PUB_ENCODE EC_F_ECKEY_TYPE2PARAM
EC_F_ECPARAMETERS_PRINT EC_F_ECPARAMETERS_PRINT_FP
EC_F_ECPKPARAMETERS_PRINT EC_F_ECPKPARAMETERS_PRINT_FP
EC_F_ECP_NIST_MOD_192 EC_F_ECP_NIST_MOD_224
EC_F_ECP_NIST_MOD_256 EC_F_ECP_NIST_MOD_521
EC_F_EC_ASN1_GROUP2CURVE EC_F_EC_ASN1_GROUP2FIELDID
EC_F_EC_ASN1_GROUP2PARAMETERS EC_F_EC_ASN1_GROUP2PKPARAMETERS
EC_F_EC_ASN1_PARAMETERS2GROUP EC_F_EC_ASN1_PKPARAMETERS2GROUP
EC_F_EC_EX_DATA_SET_DATA
EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY
EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT
EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE
EC_F_EC_GF2M_SIMPLE_OCT2POINT EC_F_EC_GF2M_SIMPLE_POINT2OCT
EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES
EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES
EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES
EC_F_EC_GFP_MONT_FIELD_DECODE EC_F_EC_GFP_MONT_FIELD_ENCODE
EC_F_EC_GFP_MONT_FIELD_MUL EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE
EC_F_EC_GFP_MONT_FIELD_SQR EC_F_EC_GFP_MONT_GROUP_SET_CURVE
EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP
EC_F_EC_GFP_NIST_FIELD_MUL EC_F_EC_GFP_NIST_FIELD_SQR
EC_F_EC_GFP_NIST_GROUP_SET_CURVE
EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT
EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE
EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP
EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR
EC_F_EC_GFP_SIMPLE_MAKE_AFFINE EC_F_EC_GFP_SIMPLE_OCT2POINT
EC_F_EC_GFP_SIMPLE_POINT2OCT
EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE
EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES
EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP
EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES
EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP
EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES
EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP
EC_F_EC_GROUP_CHECK EC_F_EC_GROUP_CHECK_DISCRIMINANT
EC_F_EC_GROUP_COPY EC_F_EC_GROUP_GET0_GENERATOR
EC_F_EC_GROUP_GET_COFACTOR EC_F_EC_GROUP_GET_CURVE_GF2M
EC_F_EC_GROUP_GET_CURVE_GFP EC_F_EC_GROUP_GET_DEGREE
EC_F_EC_GROUP_GET_ORDER EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS
EC_F_EC_GROUP_GET_TRINOMIAL_BASIS EC_F_EC_GROUP_NEW
EC_F_EC_GROUP_NEW_BY_CURVE_NAME EC_F_EC_GROUP_NEW_FROM_DATA
EC_F_EC_GROUP_PRECOMPUTE_MULT EC_F_EC_GROUP_SET_CURVE_GF2M
EC_F_EC_GROUP_SET_CURVE_GFP EC_F_EC_GROUP_SET_EXTRA_DATA
EC_F_EC_GROUP_SET_GENERATOR EC_F_EC_KEY_CHECK_KEY
EC_F_EC_KEY_COPY EC_F_EC_KEY_GENERATE_KEY EC_F_EC_KEY_NEW
EC_F_EC_KEY_PRINT EC_F_EC_KEY_PRINT_FP
EC_F_EC_POINTS_MAKE_AFFINE EC_F_EC_POINT_ADD EC_F_EC_POINT_CMP
EC_F_EC_POINT_COPY EC_F_EC_POINT_DBL
EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M
EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP
EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP
EC_F_EC_POINT_INVERT EC_F_EC_POINT_IS_AT_INFINITY
EC_F_EC_POINT_IS_ON_CURVE EC_F_EC_POINT_MAKE_AFFINE
EC_F_EC_POINT_MUL EC_F_EC_POINT_NEW EC_F_EC_POINT_OCT2POINT
EC_F_EC_POINT_POINT2OCT
EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M
EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP
EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M
EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP
EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP
EC_F_EC_POINT_SET_TO_INFINITY EC_F_EC_PRE_COMP_DUP
EC_F_EC_PRE_COMP_NEW EC_F_EC_WNAF_MUL
EC_F_EC_WNAF_PRECOMPUTE_MULT EC_F_I2D_ECPARAMETERS
EC_F_I2D_ECPKPARAMETERS EC_F_I2D_ECPRIVATEKEY
EC_F_I2O_ECPUBLICKEY EC_F_O2I_ECPUBLICKEY
EC_F_OLD_EC_PRIV_DECODE EC_F_PKEY_EC_CTRL
EC_F_PKEY_EC_CTRL_STR EC_F_PKEY_EC_DERIVE EC_F_PKEY_EC_KEYGEN
EC_F_PKEY_EC_PARAMGEN EC_F_PKEY_EC_SIGN EC_PKEY_NO_PARAMETERS
EC_PKEY_NO_PUBKEY EC_R_ASN1_ERROR EC_R_ASN1_UNKNOWN_FIELD
EC_R_BUFFER_TOO_SMALL EC_R_D2I_ECPKPARAMETERS_FAILURE
EC_R_DECODE_ERROR EC_R_DISCRIMINANT_IS_ZERO
EC_R_EC_GROUP_NEW_BY_NAME_FAILURE EC_R_FIELD_TOO_LARGE
EC_R_GROUP2PKPARAMETERS_FAILURE
EC_R_I2D_ECPKPARAMETERS_FAILURE EC_R_INCOMPATIBLE_OBJECTS
EC_R_INVALID_ARGUMENT EC_R_INVALID_COMPRESSED_POINT
EC_R_INVALID_COMPRESSION_BIT EC_R_INVALID_CURVE
EC_R_INVALID_DIGEST_TYPE EC_R_INVALID_ENCODING
EC_R_INVALID_FIELD EC_R_INVALID_FORM EC_R_INVALID_GROUP_ORDER
EC_R_INVALID_PENTANOMIAL_BASIS EC_R_INVALID_PRIVATE_KEY
EC_R_INVALID_TRINOMIAL_BASIS EC_R_KEYS_NOT_SET
EC_R_MISSING_PARAMETERS EC_R_MISSING_PRIVATE_KEY
EC_R_NOT_A_NIST_PRIME EC_R_NOT_A_SUPPORTED_NIST_PRIME
EC_R_NOT_IMPLEMENTED EC_R_NOT_INITIALIZED EC_R_NO_FIELD_MOD
EC_R_NO_PARAMETERS_SET EC_R_PASSED_NULL_PARAMETER
EC_R_PKPARAMETERS2GROUP_FAILURE EC_R_POINT_AT_INFINITY
EC_R_POINT_IS_NOT_ON_CURVE EC_R_SLOT_FULL
EC_R_UNDEFINED_GENERATOR EC_R_UNDEFINED_ORDER
EC_R_UNKNOWN_GROUP EC_R_UNKNOWN_ORDER EC_R_UNSUPPORTED_FIELD
EC_R_WRONG_ORDER EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID
OPENSSL_ECC_MAX_FIELD_BITS OPENSSL_EC_NAMED_CURVE),
{name=>"POINT_CONVERSION_COMPRESSED", macro=>"1"},
{name=>"POINT_CONVERSION_HYBRID", macro=>"1"},
{name=>"POINT_CONVERSION_UNCOMPRESSED", macro=>"1"});
ExtUtils::Constant::WriteConstants(
NAME => 'Crypt::OpenSSL::EC',
NAMES => \@names,
DEFAULT_TYPE => 'IV',
C_FILE => 'const-c.inc',
XS_FILE => 'const-xs.inc',
);
}
else {
use File::Copy;
use File::Spec;
foreach my $file ('const-c.inc', 'const-xs.inc') {
my $fallback = File::Spec->catfile('fallback', $file);
copy ($fallback, $file) or die "Can't copy $fallback to $file: $!";
}
}
# Compatibility code for old versions of EU::MM. Written by Alexandr Ciornii, version 2. Added by eumm-upgrade.
sub WriteMakefile1 {
my %params=@_;
my $eumm_version=$ExtUtils::MakeMaker::VERSION;
$eumm_version=eval $eumm_version;
die "EXTRA_META is deprecated" if exists $params{EXTRA_META};
die "License not specified" if not exists $params{LICENSE};
if ($params{AUTHOR} and ref($params{AUTHOR}) eq 'ARRAY' and $eumm_version < 6.5705) {
$params{META_ADD}->{author}=$params{AUTHOR};
$params{AUTHOR}=join(', ',@{$params{AUTHOR}});
}
if ($params{TEST_REQUIRES} and $eumm_version < 6.64) {
$params{BUILD_REQUIRES}={ %{$params{BUILD_REQUIRES} || {}} , %{$params{TEST_REQUIRES}} };
delete $params{TEST_REQUIRES};
}
if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) {
#EUMM 6.5502 has problems with BUILD_REQUIRES
$params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} };
delete $params{BUILD_REQUIRES};
}
delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;
delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48;
delete $params{META_MERGE} if $eumm_version < 6.46;
delete $params{META_ADD} if $eumm_version < 6.46;
delete $params{LICENSE} if $eumm_version < 6.31;
WriteMakefile(%params);
}
|