Codebase list libcryptx-perl / 077fc64
JSON is now completely optional Karel Miko 8 years ago
5 changed file(s) with 27 addition(s) and 6 deletion(s). Raw diff Collapse all Expand all
5858 c_source => 'src',
5959 requires => {
6060 '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';
6362 },
6463 build_requires => {
6564 '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';
6866 'Module::Build' => 0,
6967 'Test::More' => 0,
7068 },
(No changes)
526526 elsif ($data =~ /^\s*(\{.*?\})\s*$/s) {
527527 # JSON Web Key (JWK) - http://tools.ietf.org/html/draft-ietf-jose-json-web-key
528528 my $json = "$1";
529 my $h = eval { _decode_json($json) };
529 my $h = _decode_json($json);
530530 if ($h && $h->{kty} eq "EC") {
531531 for (qw/x y d/) {
532532 $h->{$_} = eval { unpack("H*", _decode_base64url($h->{$_})) } if exists $h->{$_};
984984 "d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE",
985985 }
986986
987 B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
988
987989 =item * EC public keys in JSON Web Key (JWK) format
988990
989991 {
992994 "x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
993995 "y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
994996 }
997
998 B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
995999
9961000 =back
9971001
10441048 my $jwk_hash = $pk->export_key_jwk('private', 1);
10451049 #or
10461050 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.
10471053
10481054 =head2 export_key_raw
10491055
121121 elsif ($data =~ /^\s*(\{.*?\})\s*$/s) {
122122 # JSON Web Key (JWK) - http://tools.ietf.org/html/draft-ietf-jose-json-web-key
123123 my $json = "$1";
124 my $h = eval { _decode_json($json) };
124 my $h = _decode_json($json);
125125 if ($h && $h->{kty} eq "RSA") {
126126 for (qw/n e d p q dp dq qi/) {
127127 $h->{$_} = eval { unpack("H*", _decode_base64url($h->{$_})) } if exists $h->{$_};
495495 "qi":"GyM_p6JrXySiz1toFgKbWV...4ypu9bMWx3QJBfm0FoYzUIZEVEcOqwmRN81oDAaaBk0KWGDjJHDdDmFW3AN7I-pux_mHZG",
496496 }
497497
498 B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
499
498500 =item * RSA public keys in JSON Web Key (JWK) format
499501
500502 {
502504 "n": "0vx7agoebGcQSuuPiLJXZp...tN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECP",
503505 "e":"AQAB",
504506 }
507
508 B<BEWARE:> For JWK support you need to have L<JSON::PP>, L<JSON::XS> or L<Cpanel::JSON::XS> module.
505509
506510 =back
507511
558562 my $jwk_hash = $pk->export_key_jwk('private', 1);
559563 #or
560564 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.
561567
562568 =head2 encrypt
563569
1010 require XSLoader;
1111 XSLoader::load('CryptX', $VERSION);
1212
13 use Carp;
14 my $has_json;
15
1316 BEGIN {
1417 if (eval { require Cpanel::JSON::XS }) {
1518 Cpanel::JSON::XS->import(qw(encode_json decode_json));
19 $has_json = 1;
1620 }
1721 elsif (eval { require JSON::XS }) {
1822 JSON::XS->import(qw(encode_json decode_json));
23 $has_json = 2;
1924 }
2025 elsif (eval { require JSON::PP }) {
2126 JSON::PP->import(qw(encode_json decode_json));
27 $has_json = 3;
28 }
29 else {
30 $has_json = 0;
2231 }
2332 }
2433
2534 sub _decode_json {
35 croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json;
2636 decode_json(shift);
2737 }
2838
2939 sub _encode_json {
40 croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json;
3041 encode_json(shift);
3142 }
3243