JSON is now completely optional
Karel Miko
8 years ago
58 | 58 |
c_source => 'src',
|
59 | 59 |
requires => {
|
60 | 60 |
'perl' => '5.006',
|
61 | |
'JSON::PP' => '2.27102', # encode_json + decode_json
|
62 | |
'Exporter' => '5.58', # we need: use Exporter 'import';
|
|
61 |
'Exporter' => '5.57', # we need: use Exporter 'import';
|
63 | 62 |
},
|
64 | 63 |
build_requires => {
|
65 | 64 |
'perl' => '5.006',
|
66 | |
'JSON::PP' => '2.27102', # encode_json + decode_json
|
67 | |
'Exporter' => '5.58', # we need: use Exporter 'import';
|
|
65 |
'Exporter' => '5.57', # we need: use Exporter 'import';
|
68 | 66 |
'Module::Build' => 0,
|
69 | 67 |
'Test::More' => 0,
|
70 | 68 |
},
|
526 | 526 |
elsif ($data =~ /^\s*(\{.*?\})\s*$/s) {
|
527 | 527 |
# JSON Web Key (JWK) - http://tools.ietf.org/html/draft-ietf-jose-json-web-key
|
528 | 528 |
my $json = "$1";
|
529 | |
my $h = eval { _decode_json($json) };
|
|
529 |
my $h = _decode_json($json);
|
530 | 530 |
if ($h && $h->{kty} eq "EC") {
|
531 | 531 |
for (qw/x y d/) {
|
532 | 532 |
$h->{$_} = eval { unpack("H*", _decode_base64url($h->{$_})) } if exists $h->{$_};
|
|
984 | 984 |
"d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE",
|
985 | 985 |
}
|
986 | 986 |
|
|
987 |
B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
|
|
988 |
|
987 | 989 |
=item * EC public keys in JSON Web Key (JWK) format
|
988 | 990 |
|
989 | 991 |
{
|
|
992 | 994 |
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
|
993 | 995 |
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
|
994 | 996 |
}
|
|
997 |
|
|
998 |
B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
|
995 | 999 |
|
996 | 1000 |
=back
|
997 | 1001 |
|
|
1044 | 1048 |
my $jwk_hash = $pk->export_key_jwk('private', 1);
|
1045 | 1049 |
#or
|
1046 | 1050 |
my $jwk_hash = $pk->export_key_jwk('public', 1);
|
|
1051 |
|
|
1052 |
B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
|
1047 | 1053 |
|
1048 | 1054 |
=head2 export_key_raw
|
1049 | 1055 |
|
121 | 121 |
elsif ($data =~ /^\s*(\{.*?\})\s*$/s) {
|
122 | 122 |
# JSON Web Key (JWK) - http://tools.ietf.org/html/draft-ietf-jose-json-web-key
|
123 | 123 |
my $json = "$1";
|
124 | |
my $h = eval { _decode_json($json) };
|
|
124 |
my $h = _decode_json($json);
|
125 | 125 |
if ($h && $h->{kty} eq "RSA") {
|
126 | 126 |
for (qw/n e d p q dp dq qi/) {
|
127 | 127 |
$h->{$_} = eval { unpack("H*", _decode_base64url($h->{$_})) } if exists $h->{$_};
|
|
495 | 495 |
"qi":"GyM_p6JrXySiz1toFgKbWV...4ypu9bMWx3QJBfm0FoYzUIZEVEcOqwmRN81oDAaaBk0KWGDjJHDdDmFW3AN7I-pux_mHZG",
|
496 | 496 |
}
|
497 | 497 |
|
|
498 |
B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
|
|
499 |
|
498 | 500 |
=item * RSA public keys in JSON Web Key (JWK) format
|
499 | 501 |
|
500 | 502 |
{
|
|
502 | 504 |
"n": "0vx7agoebGcQSuuPiLJXZp...tN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECP",
|
503 | 505 |
"e":"AQAB",
|
504 | 506 |
}
|
|
507 |
|
|
508 |
B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
|
505 | 509 |
|
506 | 510 |
=back
|
507 | 511 |
|
|
558 | 562 |
my $jwk_hash = $pk->export_key_jwk('private', 1);
|
559 | 563 |
#or
|
560 | 564 |
my $jwk_hash = $pk->export_key_jwk('public', 1);
|
|
565 |
|
|
566 |
B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
|
561 | 567 |
|
562 | 568 |
=head2 encrypt
|
563 | 569 |
|
10 | 10 |
require XSLoader;
|
11 | 11 |
XSLoader::load('CryptX', $VERSION);
|
12 | 12 |
|
|
13 |
use Carp;
|
|
14 |
my $has_json;
|
|
15 |
|
13 | 16 |
BEGIN {
|
14 | 17 |
if (eval { require Cpanel::JSON::XS }) {
|
15 | 18 |
Cpanel::JSON::XS->import(qw(encode_json decode_json));
|
|
19 |
$has_json = 1;
|
16 | 20 |
}
|
17 | 21 |
elsif (eval { require JSON::XS }) {
|
18 | 22 |
JSON::XS->import(qw(encode_json decode_json));
|
|
23 |
$has_json = 2;
|
19 | 24 |
}
|
20 | 25 |
elsif (eval { require JSON::PP }) {
|
21 | 26 |
JSON::PP->import(qw(encode_json decode_json));
|
|
27 |
$has_json = 3;
|
|
28 |
}
|
|
29 |
else {
|
|
30 |
$has_json = 0;
|
22 | 31 |
}
|
23 | 32 |
}
|
24 | 33 |
|
25 | 34 |
sub _decode_json {
|
|
35 |
croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json;
|
26 | 36 |
decode_json(shift);
|
27 | 37 |
}
|
28 | 38 |
|
29 | 39 |
sub _encode_json {
|
|
40 |
croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json;
|
30 | 41 |
encode_json(shift);
|
31 | 42 |
}
|
32 | 43 |
|