Net_DNS2
[ class tree: Net_DNS2 ] [ index: Net_DNS2 ] [ all elements ]

Source for file NSEC3.php

Documentation is available at NSEC3.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * DNS Library for handling lookups and updates.
  6.  *
  7.  * PHP Version 5
  8.  *
  9.  * Copyright (c) 2010, Mike Pultz <mike@mikepultz.com>.
  10.  * All rights reserved.
  11.  *
  12.  * Redistribution and use in source and binary forms, with or without
  13.  * modification, are permitted provided that the following conditions
  14.  * are met:
  15.  *
  16.  *   * Redistributions of source code must retain the above copyright
  17.  *     notice, this list of conditions and the following disclaimer.
  18.  *
  19.  *   * Redistributions in binary form must reproduce the above copyright
  20.  *     notice, this list of conditions and the following disclaimer in
  21.  *     the documentation and/or other materials provided with the
  22.  *     distribution.
  23.  *
  24.  *   * Neither the name of Mike Pultz nor the names of his contributors
  25.  *     may be used to endorse or promote products derived from this
  26.  *     software without specific prior written permission.
  27.  *
  28.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  29.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  30.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  31.  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  32.  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  33.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  34.  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  35.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  36.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
  37.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  38.  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  39.  * POSSIBILITY OF SUCH DAMAGE.
  40.  *
  41.  * @category  Networking
  42.  * @package   Net_DNS2
  43.  * @author    Mike Pultz <mike@mikepultz.com>
  44.  * @copyright 2010 Mike Pultz <mike@mikepultz.com>
  45.  * @license   http://www.opensource.org/licenses/bsd-license.php  BSD License
  46.  * @version   SVN: $Id: NSEC3.php 179 2012-11-23 05:49:01Z mike.pultz $
  47.  * @link      http://pear.php.net/package/Net_DNS2
  48.  * @since     File available since Release 0.6.0
  49.  *
  50.  */
  51.  
  52. /**
  53.  * NSEC3 Resource Record - RFC5155 section 3.2
  54.  *
  55.  *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  56.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  57.  *  |   Hash Alg.   |     Flags     |          Iterations           |
  58.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  59.  *  |  Salt Length  |                     Salt                      /
  60.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  61.  *  |  Hash Length  |             Next Hashed Owner Name            /
  62.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  63.  *  /                         Type Bit Maps                         /
  64.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  65.  * 
  66.  * @category Networking
  67.  * @package  Net_DNS2
  68.  * @author   Mike Pultz <mike@mikepultz.com>
  69.  * @license  http://www.opensource.org/licenses/bsd-license.php  BSD License
  70.  * @link     http://pear.php.net/package/Net_DNS2
  71.  * @see      Net_DNS2_RR
  72.  *
  73.  */
  74. {
  75.     /*
  76.      * Algorithm to use
  77.      */
  78.     public $algorithm;
  79.  
  80.     /*
  81.      * flags
  82.      */
  83.     public $flags;
  84.  
  85.     /*
  86.      *  defines the number of additional times the hash is performed.
  87.      */
  88.     public $iterations;
  89.  
  90.     /*
  91.      * the length of the salt- not displayed
  92.      */
  93.     public $salt_length;
  94.  
  95.     /*
  96.      * the salt
  97.      */
  98.     public $salt;
  99.  
  100.     /*
  101.      * the length of the hash value
  102.      */
  103.     public $hash_length;
  104.  
  105.     /*
  106.      * the hashed value of the owner name
  107.      */
  108.     public $hashed_owner_name;
  109.  
  110.     /*
  111.      * array of RR type names
  112.      */
  113.     public $type_bit_maps = array();
  114.  
  115.     /**
  116.      * method to return the rdata portion of the packet as a string
  117.      *
  118.      * @return  string 
  119.      * @access  protected
  120.      *
  121.      */
  122.     protected function rrToString()
  123.     {
  124.         $out $this->algorithm . ' ' $this->flags . ' ' $this->iterations . ' ';
  125.  
  126.         //
  127.         // per RFC5155, the salt_length value isn't displayed, and if the salt
  128.         // is empty, the salt is displayed as '-'
  129.         //
  130.         if ($this->salt_length > 0{
  131.   
  132.             $out .= $this->salt;
  133.         else {     
  134.  
  135.             $out .= '-';
  136.         }
  137.  
  138.         //
  139.         // per RFC5255 the hash length isn't shown
  140.         //
  141.         $out .= ' ' $this->hashed_owner_name;
  142.  
  143.         //
  144.         // show the RR's
  145.         //
  146.         foreach ($this->type_bit_maps as $rr{
  147.     
  148.             $out .= ' ' strtoupper($rr);
  149.         }
  150.  
  151.         return $out;
  152.     }
  153.  
  154.     /**
  155.      * parses the rdata portion from a standard DNS config line
  156.      *
  157.      * @param array $rdata a string split line of values for the rdata
  158.      *
  159.      * @return boolean 
  160.      * @access protected
  161.      *
  162.      */
  163.     protected function rrFromString(array $rdata)
  164.     {
  165.         $this->algorithm    = array_shift($rdata);
  166.         $this->flags        = array_shift($rdata);
  167.         $this->iterations   = array_shift($rdata);
  168.      
  169.         //
  170.         // an empty salt is represented as '-' per RFC5155 section 3.3
  171.         //
  172.         $salt = array_shift($rdata);
  173.         if ($salt == '-'{
  174.  
  175.             $this->salt_length = 0;
  176.             $this->salt = '';
  177.         else {
  178.     
  179.             $this->salt_length = strlen(pack('H*'$salt));
  180.             $this->salt = strtoupper($salt);
  181.         }
  182.  
  183.         $this->hashed_owner_name = array_shift($rdata);
  184.         $this->hash_length = strlen(base64_decode($this->hashed_owner_name));
  185.  
  186.         $this->type_bit_maps = $rdata;
  187.  
  188.         return true;
  189.     }
  190.  
  191.     /**
  192.      * parses the rdata of the Net_DNS2_Packet object
  193.      *
  194.      * @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet to parse the RR from
  195.      *
  196.      * @return boolean 
  197.      * @access protected
  198.      *
  199.      */
  200.     protected function rrSet(Net_DNS2_Packet &$packet)
  201.     {
  202.         if ($this->rdlength > 0{
  203.         
  204.             //
  205.             // unpack the first values
  206.             //
  207.             $x unpack('Calgorithm/Cflags/niterations/Csalt_length'$this->rdata);
  208.         
  209.             $this->algorithm    = $x['algorithm'];
  210.             $this->flags        = $x['flags'];
  211.             $this->iterations   = $x['iterations'];
  212.             $this->salt_length  = $x['salt_length'];
  213.  
  214.             $offset = 5;
  215.  
  216.             if ($this->salt_length > 0{
  217.  
  218.                 $x unpack('H*'substr($this->rdata$offset$this->salt_length));
  219.                 $this->salt = strtoupper($x[1]);
  220.                 $offset += $this->salt_length;
  221.             }
  222.  
  223.             //
  224.             // unpack the hash length
  225.             //
  226.             $x unpack('@' $offset '/Chash_length'$this->rdata);
  227.             $offset++;
  228.  
  229.             //
  230.             // copy out the hash
  231.             //
  232.             $this->hash_length  = $x['hash_length'];
  233.             if ($this->hash_length > 0{
  234.  
  235.                 $this->hashed_owner_name = base64_encode(
  236.                     substr($this->rdata$offset$this->hash_length)
  237.                 );
  238.                 $offset += $this->hash_length;
  239.             }
  240.  
  241.             //
  242.             // parse out the RR bitmap
  243.             //
  244.             $this->type_bit_maps = Net_DNS2_BitMap::bitMapToArray(
  245.                 substr($this->rdata$offset)
  246.             );
  247.  
  248.             return true;
  249.         }
  250.      
  251.         return false;
  252.     }
  253.  
  254.     /**
  255.      * returns the rdata portion of the DNS packet
  256.      *
  257.      * @param Net_DNS2_Packet &$packet a Net_DNS2_Packet packet use for
  258.      *                                  compressed names
  259.      *
  260.      * @return mixed                   either returns a binary packed
  261.      *                                  string or null on failure
  262.      * @access protected
  263.      *
  264.      */
  265.     protected function rrGet(Net_DNS2_Packet &$packet)
  266.     {
  267.         //
  268.         // pull the salt and build the length
  269.         //
  270.         $salt pack('H*'$this->salt);
  271.         $this->salt_length = strlen($salt);
  272.             
  273.         //
  274.         // pack the algorithm, flags, iterations and salt length
  275.         //
  276.         $data pack(
  277.             'CCnC',
  278.             $this->algorithm$this->flags$this->iterations$this->salt_length
  279.         );
  280.         $data .= $salt;
  281.  
  282.         //
  283.         // add the hash length and hash
  284.         //
  285.         $data .= chr($this->hash_length);
  286.         if ($this->hash_length > 0{
  287.  
  288.             $data .= base64_decode($this->hashed_owner_name);
  289.         }
  290.  
  291.         //
  292.         // conver the array of RR names to a type bitmap
  293.         //
  294.         $data .= Net_DNS2_BitMap::arrayToBitMap($this->type_bit_maps);
  295.  
  296.         $packet->offset += strlen($data);
  297.      
  298.         return $data;
  299.     }
  300. }
  301.  
  302. /*
  303.  * Local variables:
  304.  * tab-width: 4
  305.  * c-basic-offset: 4
  306.  * c-hanging-comment-ender-p: nil
  307.  * End:
  308.  */
  309. ?>

Documentation generated on Sun, 01 Dec 2013 01:30:17 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.