Skip to content

Commit 093ec2d

Browse files
committed
Fix xenc marshalling-tests
1 parent 4c93903 commit 093ec2d

7 files changed

Lines changed: 62 additions & 57 deletions

File tree

src/XML/xenc/AbstractReference.php

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
use DOMElement;
88
use SimpleSAML\Assert\Assert;
9-
use SimpleSAML\XML\Chunk;
109
use SimpleSAML\XML\Exception\InvalidDOMElementException;
10+
use SimpleSAML\XML\Chunk;
11+
use SimpleSAML\XML\XMLElementInterface;
12+
use SimpleSAML\XMLSecurity\XML\ds\Transforms;
1113

1214
/**
1315
* Abstract class representing references. No custom elements are allowed.
@@ -19,20 +21,20 @@ abstract class AbstractReference extends AbstractXencElement
1921
/** @var string */
2022
protected string $uri;
2123

22-
/** @var \SimpleSAML\XML\Chunk[] */
23-
protected array $references = [];
24+
/** @var \SimpleSAML\XML\XMLElementInterface[] */
25+
protected array $elements;
2426

2527

2628
/**
2729
* AbstractReference constructor.
2830
*
2931
* @param string $uri
30-
* @param \SimpleSAML\XML\Chunk[] $references
32+
* @param \SimpleSAML\XML\XMLElementInterface[] $elements
3133
*/
32-
protected function __construct(string $uri, array $references = [])
34+
protected function __construct(string $uri, array $elements = [])
3335
{
3436
$this->setURI($uri);
35-
$this->setReferences($references);
37+
$this->setElements($elements);
3638
}
3739

3840

@@ -58,27 +60,27 @@ protected function setURI(string $uri): void
5860

5961

6062
/**
61-
* Collect the references
63+
* Collect the embedded elements
6264
*
63-
* @return \SimpleSAML\XML\Chunk[]
65+
* @return \SimpleSAML\XML\XMLElementInterface[]
6466
*/
65-
public function getReferences(): array
67+
public function getElements(): array
6668
{
67-
return $this->references;
69+
return $this->elements;
6870
}
6971

7072

7173
/**
72-
* Set the value of the references-property
74+
* Set the value of the elements-property
7375
*
74-
* @param \SimpleSAML\XML\Chunk[] $references
76+
* @param \SimpleSAML\XML\XMLElementInterface[] $elements
7577
* @throws \SimpleSAML\Assert\AssertionFailedException
76-
* if the supplied array contains anything other than Chunk objects
78+
* if the supplied array contains anything other than XMLElementInterface objects
7779
*/
78-
private function setReferences(array $references): void
80+
private function setElements(array $elements): void
7981
{
80-
Assert::allIsInstanceOf($references, Chunk::class);
81-
$this->references = $references;
82+
Assert::allIsInstanceOf($elements, XMLElementInterface::class);
83+
$this->elements = $elements;
8284
}
8385

8486

@@ -97,16 +99,18 @@ public static function fromXML(DOMElement $xml): object
9799

98100
$URI = self::getAttribute($xml, 'URI');
99101

100-
$references = [];
101-
foreach ($xml->childNodes as $reference) {
102-
if (!($reference instanceof DOMElement)) {
102+
$elements = [];
103+
foreach ($xml->childNodes as $element) {
104+
if (!($element instanceof DOMElement)) {
103105
continue;
106+
} elseif ($element->namespaceURI === Transforms::NS && $element->localName === 'Transforms') {
107+
$elements[] = new Transforms($element);
108+
} else {
109+
$elements[] = new Chunk($element);
104110
}
105-
106-
$references[] = new Chunk($reference);
107111
}
108112

109-
return new static($URI, $references);
113+
return new static($URI, $elements);
110114
}
111115

112116

@@ -118,8 +122,8 @@ public function toXML(DOMElement $parent = null): DOMElement
118122
$e = $this->instantiateParentElement($parent);
119123
$e->setAttribute('URI', $this->uri);
120124

121-
foreach ($this->references as $reference) {
122-
$e->appendChild($e->ownerDocument->importNode($reference->getXML(), true));
125+
foreach ($this->elements as $element) {
126+
$element->toXML($e);
123127
}
124128

125129
return $e;

src/XML/xenc/CipherReference.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace SimpleSAML\XMLSecurity\XML\xenc;
66

7+
use SimpleSAML\Assert\Assert;
8+
use SimpleSAML\XML\XMLElementInterface;
9+
710
/**
811
* Class representing the <xenc:CipherReference> element.
912
*
@@ -15,10 +18,11 @@ class CipherReference extends AbstractReference
1518
* CipherReference constructor.
1619
*
1720
* @param string $uri
18-
* @param \SimpleSAML\XML\Chunk[] $references
21+
* @param \SimpleSAML\XML\XMLElementInterface[] $elements
1922
*/
20-
public function __construct(string $uri, array $references = [])
23+
public function __construct(string $uri, array $elements = [])
2124
{
22-
parent::__construct($uri, $references);
25+
Assert::allIsInstanceOf($elements, XMLElementInterface::class);
26+
parent::__construct($uri, $elements);
2327
}
2428
}

tests/XML/xenc/CipherDataTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ public function setup(): void
4141

4242
/**
4343
*/
44-
public function testMarshallingCipherValue(): void
44+
public function testMarshalling(): void
4545
{
4646
$cipherData = new CipherData('c29tZSB0ZXh0');
4747

48-
$this->assertEquals('c29tZSB0ZXh0', $cipherData->getCipherValue());
48+
$cipherDataElement = $cipherData->toXML();
49+
$this->assertEquals('c29tZSB0ZXh0', $cipherDataElement->textContent);
4950

5051
$this->assertEquals(
5152
$this->xmlRepresentation->saveXML($this->xmlRepresentation->documentElement),

tests/XML/xenc/CipherReferenceTest.php

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use DOMDocument;
88
use PHPUnit\Framework\TestCase;
99
use SimpleSAML\Test\XML\SerializableXMLTestTrait;
10-
use SimpleSAML\XML\Chunk;
1110
use SimpleSAML\XML\DOMDocumentFactory;
11+
use SimpleSAML\XMLSecurity\XML\ds\Transforms;
1212
use SimpleSAML\XMLSecurity\XML\xenc\CipherReference;
1313
use SimpleSAML\XMLSecurity\XMLSecurityDSig;
1414

@@ -25,8 +25,8 @@ final class CipherReferenceTest extends TestCase
2525
{
2626
use SerializableXMLTestTrait;
2727

28-
/** @var \SimpleSAML\XML\Chunk $reference */
29-
private Chunk $reference;
28+
/** @var \DOMDocument $transforms */
29+
private DOMDocument $transforms;
3030

3131

3232
/**
@@ -41,16 +41,9 @@ public function setup(): void
4141

4242
$dsNamespace = XMLSecurityDSig::XMLDSIGNS;
4343

44-
$this->reference = new Chunk(DOMDocumentFactory::fromString(<<<XML
45-
<ds:Transforms xmlns:ds="{$dsNamespace}">
46-
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
47-
<ds:XPath xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
48-
self::xenc:CipherValue[@Id="example1"]
49-
</ds:XPath>
50-
</ds:Transform>
51-
</ds:Transforms>
52-
XML
53-
)->documentElement);
44+
$this->transforms = DOMDocumentFactory::fromFile(
45+
dirname(dirname(dirname(dirname(__FILE__)))) . '/tests/resources/xml/ds_Transforms.xml'
46+
);
5447
}
5548

5649

@@ -61,13 +54,16 @@ public function setup(): void
6154
*/
6255
public function testMarshalling(): void
6356
{
64-
$cipherReference = new CipherReference('#Cipher_VALUE_ID', [$this->reference]);
57+
$cipherReference = new CipherReference('#Cipher_VALUE_ID', [Transforms::fromXML($this->transforms)]);
6558

66-
$this->assertEquals('#Cipher_VALUE_ID', $cipherReference->getURI());
59+
$cipherReferenceElement = $cipherReference->toXML();
60+
$this->assertEquals('#Cipher_VALUE_ID', $cipherReferenceElement->getAttribute('URI'));
6761

68-
$references = $cipherReference->getReferences();
69-
$this->assertCount(1, $references);
70-
$this->assertEquals($this->reference, $references[0]);
62+
$transformsElement = XMLUtils::xpQuery($cipherReferenceElement, './ds:Transforms');
63+
$this->assertCount(1, $transformsElement);
64+
65+
$transformElement = XMLUtils::xpQuery($transformsElement, './ds:Transform');
66+
$this->assertCount(1, $transformsElement);
7167

7268
$this->assertEquals(
7369
$this->xmlRepresentation->saveXML($this->xmlRepresentation->documentElement),
@@ -87,9 +83,9 @@ public function testUnmarshalling(): void
8783

8884
$this->assertEquals('#Cipher_VALUE_ID', $cipherReference->getURI());
8985

90-
$references = $cipherReference->getReferences();
86+
$references = $cipherReference->getElements();
9187
$this->assertCount(1, $references);
92-
$this->assertEquals($this->reference, $references[0]);
88+
$this->assertEquals($this->transforms, $references[0]->toXML());
9389

9490
$this->assertEquals(
9591
$this->xmlRepresentation->saveXML($this->xmlRepresentation->documentElement),

tests/XML/xenc/DataReferenceTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public function testMarshalling(): void
6464

6565
$this->assertEquals('#Encrypted_DATA_ID', $dataReference->getURI());
6666

67-
$references = $dataReference->getReferences();
67+
$references = $dataReference->getElements();
6868
$this->assertCount(1, $references);
6969
$this->assertEquals($this->reference, $references[0]);
7070

@@ -86,7 +86,7 @@ public function testUnmarshalling(): void
8686

8787
$this->assertEquals('#Encrypted_DATA_ID', $dataReference->getURI());
8888

89-
$references = $dataReference->getReferences();
89+
$references = $dataReference->getElements();
9090
$this->assertCount(1, $references);
9191
$this->assertEquals($this->reference, $references[0]);
9292

tests/XML/xenc/KeyReferenceTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function testMarshalling(): void
6565

6666
$this->assertEquals('#Encrypted_KEY_ID', $keyReference->getURI());
6767

68-
$references = $keyReference->getReferences();
68+
$references = $keyReference->getElements();
6969
$this->assertCount(1, $references);
7070
$this->assertEquals($this->reference, $references[0]);
7171

@@ -87,7 +87,7 @@ public function testUnmarshalling(): void
8787

8888
$this->assertEquals('#Encrypted_KEY_ID', $keyReference->getURI());
8989

90-
$references = $keyReference->getReferences();
90+
$references = $keyReference->getElements();
9191
$this->assertCount(1, $references);
9292
$this->assertEquals($this->reference, $references[0]);
9393

tests/XML/xenc/ReferenceListTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ public function testMarshalling(): void
8787
$keyReferences = $referenceList->getKeyReferences();
8888
$this->assertCount(1, $keyReferences);
8989

90-
$this->assertEquals([$this->dataReference], $dataReferences[0]->getReferences());
91-
$this->assertEquals([$this->keyReference], $keyReferences[0]->getReferences());
90+
$this->assertEquals([$this->dataReference], $dataReferences[0]->getElements());
91+
$this->assertEquals([$this->keyReference], $keyReferences[0]->getElements());
9292

9393
$this->assertEquals(
9494
$this->xmlRepresentation->saveXML($this->xmlRepresentation->documentElement),
@@ -112,8 +112,8 @@ public function testUnmarshalling(): void
112112
$keyReferences = $referenceList->getKeyReferences();
113113
$this->assertCount(1, $keyReferences);
114114

115-
$this->assertEquals([$this->dataReference], $dataReferences[0]->getReferences());
116-
$this->assertEquals([$this->keyReference], $keyReferences[0]->getReferences());
115+
$this->assertEquals([$this->dataReference], $dataReferences[0]->getElements());
116+
$this->assertEquals([$this->keyReference], $keyReferences[0]->getElements());
117117

118118
$this->assertEquals(
119119
$this->xmlRepresentation->saveXML($this->xmlRepresentation->documentElement),

0 commit comments

Comments
 (0)