|
| 1 | +use strict; |
| 2 | +use warnings; |
| 3 | +use Test::More tests => 5; |
| 4 | +use XML::Enc; |
| 5 | +use MIME::Base64 qw/decode_base64/; |
| 6 | +use File::Which; |
| 7 | +use File::Slurper qw/read_text/; |
| 8 | + |
| 9 | +my $xml = <<'ENDXML'; |
| 10 | +<?xml version="1.0" encoding="UTF-8"?> |
| 11 | +<PaymentInfo xmlns="http://example.org/paymentv2"> |
| 12 | + <Name>John Smith</Name> |
| 13 | + <CreditCard Currency="USD" Limit="5,000"><EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="ED" Type="http://www.w3.org/2001/04/xmlenc#Content"> |
| 14 | + <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/> |
| 15 | + <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> |
| 16 | + <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#" Id="EK"> |
| 17 | + <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"> |
| 18 | + <ds:DigestMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> |
| 19 | + <OAEPparams>MTIzNDU2Nzg=</OAEPparams> |
| 20 | + </EncryptionMethod> |
| 21 | + <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> |
| 22 | + <ds:KeyName>my-rsa-key</ds:KeyName> |
| 23 | + </ds:KeyInfo> |
| 24 | + <CipherData> |
| 25 | + <CipherValue>qkGLaEkRFs+wAbz/zXl50nI7w8+b0NUxYXQu84lJz4iXeKj5/si2lgADR9bGVQ6N |
| 26 | +iSQGxMF9cra8zlzaB6hqxcL3u4A161ajA4iMn88kdkda/ZgVANaombU1HPn+Mqzo |
| 27 | +3/F/hfGSJ0CpzXv5Pi3zqe2J3Sii9NQBiyRkd0lbm41gCXLuRNkZH9x/LhOlrHEC |
| 28 | +Vj/7fi8sYTFuqz4MeCbIdNOzxOR5g/L+VTeAcTZfT6wfkfc7jFa2CqkwBqMvNrtD |
| 29 | +o+A0MmK0fb0/kJLxNx91PVXNti4l/SrbmGZhKIIgmY9DKtAJjTK60zWkiamfqA/N |
| 30 | +WbrcIZjGje5oRXC7GLyBJfHuLo4sQIN7UvbZCcz16OVcgOC2B/hG7CQCXGwiZV+U |
| 31 | +rTLjBaijbx/j0+zbMs+PkmD2Ba3DgrwzsGJ2sPq6oTW28ZJebcjSxNEundodNuFv |
| 32 | +RcohqiMFOlVJRKU/x15HsthnXrMDvYpIrKT4NJKQJHnPEeTZ+Bd6PR8jTL30p2Ea |
| 33 | +6yH3F189AVgQf8t6ZB+GSBb/zO2aKIrA6iiViz+MJDiiD3XY3T3beaDH/u09izRs |
| 34 | +bBqDCnFkkxajyENT8r5C1tS0PNAmaisXqPhkYSsWUBHYPgIxUasDy2oJBafF1JW0 |
| 35 | +02N7Bvg9oVFDY+Xc4hWsmaC31txPEds6ZdxhBclCMu0=</CipherValue> |
| 36 | + </CipherData> |
| 37 | + </EncryptedKey> |
| 38 | + </ds:KeyInfo> |
| 39 | + <CipherData> |
| 40 | + <CipherValue>ecIQfyygbLDMHLKCLO31g3Y4Q+2eJZ15hyt/kiLekdBWHZRFUBzEf/3W5H66tCL2 |
| 41 | +/fsWY+Y2Zim64WuXJfPdYmy4UtSexpwTEHr0I5LR6Ykw2A61akDEh/zXKWpHsLrn |
| 42 | +so/amlIwRtEYJTQdER7+6kkMa40M2Jf2Hk6BIXfOSCggh0KpnCnuc1+NACE0VUh6</CipherValue> |
| 43 | + </CipherData> |
| 44 | +</EncryptedData></CreditCard> |
| 45 | +</PaymentInfo> |
| 46 | +ENDXML |
| 47 | + |
| 48 | +my $decrypter = XML::Enc->new( |
| 49 | + { |
| 50 | + key => 't/xmlsec-key.pem', |
| 51 | + no_xml_declaration => 1 |
| 52 | + } |
| 53 | +); |
| 54 | + |
| 55 | +ok($decrypter->decrypt($xml) =~ /4019 2445 0277 5567/, "Successfully Decrypted xmlsec1 xml using OAEPparams"); |
| 56 | + |
| 57 | +$xml = <<'XML'; |
| 58 | +<?xml version="1.0"?> |
| 59 | +<foo ID="XML-SIG_1"> |
| 60 | + <bar>123</bar> |
| 61 | +</foo> |
| 62 | +XML |
| 63 | + |
| 64 | +my $encrypter = XML::Enc->new( |
| 65 | + { |
| 66 | + key => 't/sign-private.pem', |
| 67 | + cert => 't/sign-certonly.pem', |
| 68 | + oaep_params => '123456789', |
| 69 | + no_xml_declaration => 1 |
| 70 | + } |
| 71 | +); |
| 72 | + |
| 73 | +my $encrypted = $encrypter->encrypt($xml); |
| 74 | +ok($encrypted =~ /CipherData/, "Successfully Encrypted with XML::Enc using OAEPparams"); |
| 75 | + |
| 76 | +ok($encrypter->decrypt($encrypted) =~ /<bar>123<\/bar>/, "Successfully Decrypted with XML::Enc using OAEPparams"); |
| 77 | + |
| 78 | +$decrypter = XML::Enc->new( |
| 79 | + { |
| 80 | + key => 't/sign-private.pem', |
| 81 | + cert => 't/sign-certonly.pem', |
| 82 | + oaep_params => '123789', |
| 83 | + no_xml_declaration => 1 |
| 84 | + } |
| 85 | +); |
| 86 | +$encrypted =~ s/MTIzNDU2Nzg5/MTIzNzg5Cg==/mg; |
| 87 | + |
| 88 | +my $ret; |
| 89 | +eval { |
| 90 | + $ret = $decrypter->decrypt($encrypted); |
| 91 | +}; |
| 92 | +ok($@ =~ /FATAL: rsa_decrypt_key_ex/,"XML::Enc Unable to decrypt if XML includes incorrect OAEPparams"); |
| 93 | +ok(!$ret); |
| 94 | + |
| 95 | +done_testing; |
0 commit comments