Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.

Differences Between: [Versions 400 and 402] [Versions 400 and 403]

Custom XML parser for signed and/or encrypted XML Docs

Author: Donal McMullan donal@catalyst.net.nz
License: http://www.gnu.org/copyleft/gpl.html GNU Public License
Version: 0.0.1
File Size: 317 lines (11 kb)
Included or required:0 times
Referenced: 0 times
Includes or requires: 0 files

Defines 2 classes

mnet_encxml_parser:: (2 methods):
  __construct()
  mnet_encxml_parser()

name:: (13 methods):
  initialise()
  parse()
  free_resource()
  start_element()
  parse_timestamp()
  parse_cipher()
  parse_wwwroot()
  parse_digest()
  parse_signature()
  parse_object()
  discard_data()
  parse_fault()
  end_element()


Class: mnet_encxml_parser  - X-Ref

Custom XML parser class for signed and/or encrypted XML Docs

__construct()   X-Ref
Constructor creates and initialises parser resource and calls initialise

return: bool True

mnet_encxml_parser()   X-Ref
Old syntax of class constructor. Deprecated in PHP7.


Class: name  - X-Ref

initialise()   X-Ref
Set default element handlers and initialise properties to empty.

return: bool True

parse($data)   X-Ref
Parse a block of XML text

The XML Text will be an XML-RPC request which is wrapped in an XML doc
with a signature from the sender. This envelope may be encrypted and
delivered within another XML envelope with a symmetric key. The parser
should first decrypt this XML, and then place the XML-RPC request into
the data_object property, and the signature into the signature property.

See the W3C's {@link http://www.w3.org/TR/xmlenc-core/ XML Encryption Syntax and Processing}
and {@link http://www.w3.org/TR/2001/PR-xmldsig-core-20010820/ XML-Signature Syntax and Processing}
guidelines for more detail on the XML.

-----XML-Envelope---------------------------------
|                                                |
|    Symmetric-key--------------------------     |
|    |_____________________________________|     |
|                                                |
|    Encrypted data-------------------------     |
|    |                                     |     |
|    |  -XML-Envelope------------------    |     |
|    |  |                             |    |     |
|    |  |  --Signature-------------   |    |     |
|    |  |  |______________________|   |    |     |
|    |  |                             |    |     |
|    |  |  --Signed-Payload--------   |    |     |
|    |  |  |                      |   |    |     |
|    |  |  |   XML-RPC Request    |   |    |     |
|    |  |  |______________________|   |    |     |
|    |  |                             |    |     |
|    |  |_____________________________|    |     |
|    |_____________________________________|     |
|                                                |
|________________________________________________|

return: bool            True on success - false on failure
param: string  $data   The XML that you want to parse

free_resource()   X-Ref
Destroy the parser and free up any related resource.


start_element($parser, $name, $attrs)   X-Ref
Set the character-data handler to the right function for each element

For each tag (element) name, this function switches the character-data
handler to the function that handles that element. Note that character
data is referred to the handler in blocks of 1024 bytes.

return: bool            True
param: mixed   $parser The XML parser
param: string  $name   The name of the tag, e.g. method_call
param: array   $attrs  The tag's attributes (if any exist).

parse_timestamp($parser, $data)   X-Ref
Add the next chunk of character data to the remote_timestamp string

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

parse_cipher($parser, $data)   X-Ref
Add the next chunk of character data to the cipher string for that tag

The XML parser calls the character-data handler with 1024-character
chunks of data. This means that the handler may be called several times
for a single tag, so we use the concatenate operator (.) to build the
tag content into a string.
We should not encounter more than one of each tag type, except for the
cipher tag. We will often see two of those. We prevent the content of
these two tags being concatenated together by counting each tag, and
using its 'number' as the key to an array of ciphers.

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

parse_wwwroot($parser, $data)   X-Ref
Add the next chunk of character data to the remote_wwwroot string

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

parse_digest($parser, $data)   X-Ref
Add the next chunk of character data to the digest string

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

parse_signature($parser, $data)   X-Ref
Add the next chunk of character data to the signature string

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

parse_object($parser, $data)   X-Ref
Add the next chunk of character data to the data_object string

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

discard_data($parser, $data)   X-Ref
Discard the next chunk of character data

This is used for tags that we're not interested in.

return: bool            True
param: mixed   $parser The XML parser
param: string  $data   The content of the current tag (1024 byte chunk)

parse_fault($parser, $data)   X-Ref
No description

end_element($parser, $name)   X-Ref
Switch the character-data handler to ignore the next chunk of data

return: bool            True
param: mixed   $parser The XML parser
param: string  $name   The name of the tag, e.g. method_call