Upgrade Zend to version 1.12.7

This commit is contained in:
Michael RICOIS 2014-06-17 18:48:23 +00:00
parent 959e2e6e8a
commit 2c4ea6b7ac
158 changed files with 0 additions and 14892 deletions

View File

@ -1,261 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Auth
* @subpackage Zend_Auth_Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: InfoCard.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* @see Zend_Auth_Adapter_Interface
*/
require_once 'Zend/Auth/Adapter/Interface.php';
/**
* @see Zend_Auth_Result
*/
require_once 'Zend/Auth/Result.php';
/**
* @see Zend_InfoCard
*/
require_once 'Zend/InfoCard.php';
/**
* A Zend_Auth Authentication Adapter allowing the use of Information Cards as an
* authentication mechanism
*
* @category Zend
* @package Zend_Auth
* @subpackage Zend_Auth_Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Auth_Adapter_InfoCard implements Zend_Auth_Adapter_Interface
{
/**
* The XML Token being authenticated
*
* @var string
*/
protected $_xmlToken;
/**
* The instance of Zend_InfoCard
*
* @var Zend_InfoCard
*/
protected $_infoCard;
/**
* Constructor
*
* @param string $strXmlDocument The XML Token provided by the client
* @return void
*/
public function __construct($strXmlDocument)
{
$this->_xmlToken = $strXmlDocument;
$this->_infoCard = new Zend_InfoCard();
}
/**
* Sets the InfoCard component Adapter to use
*
* @param Zend_InfoCard_Adapter_Interface $a
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
*/
public function setAdapter(Zend_InfoCard_Adapter_Interface $a)
{
$this->_infoCard->setAdapter($a);
return $this;
}
/**
* Retrieves the InfoCard component adapter being used
*
* @return Zend_InfoCard_Adapter_Interface
*/
public function getAdapter()
{
return $this->_infoCard->getAdapter();
}
/**
* Retrieves the InfoCard public key cipher object being used
*
* @return Zend_InfoCard_Cipher_PKI_Interface
*/
public function getPKCipherObject()
{
return $this->_infoCard->getPKCipherObject();
}
/**
* Sets the InfoCard public key cipher object to use
*
* @param Zend_InfoCard_Cipher_PKI_Interface $cipherObj
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
*/
public function setPKICipherObject(Zend_InfoCard_Cipher_PKI_Interface $cipherObj)
{
$this->_infoCard->setPKICipherObject($cipherObj);
return $this;
}
/**
* Retrieves the Symmetric cipher object being used
*
* @return Zend_InfoCard_Cipher_Symmetric_Interface
*/
public function getSymCipherObject()
{
return $this->_infoCard->getSymCipherObject();
}
/**
* Sets the InfoCard symmetric cipher object to use
*
* @param Zend_InfoCard_Cipher_Symmetric_Interface $cipherObj
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
*/
public function setSymCipherObject(Zend_InfoCard_Cipher_Symmetric_Interface $cipherObj)
{
$this->_infoCard->setSymCipherObject($cipherObj);
return $this;
}
/**
* Remove a Certificate Pair by Key ID from the search list
*
* @param string $key_id The Certificate Key ID returned from adding the certificate pair
* @throws Zend_InfoCard_Exception
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
*/
public function removeCertificatePair($key_id)
{
$this->_infoCard->removeCertificatePair($key_id);
return $this;
}
/**
* Add a Certificate Pair to the list of certificates searched by the component
*
* @param string $private_key_file The path to the private key file for the pair
* @param string $public_key_file The path to the certificate / public key for the pair
* @param string $type (optional) The URI for the type of key pair this is (default RSA with OAEP padding)
* @param string $password (optional) The password for the private key file if necessary
* @throws Zend_InfoCard_Exception
* @return string A key ID representing this key pair in the component
*/
public function addCertificatePair($private_key_file, $public_key_file, $type = Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P, $password = null)
{
return $this->_infoCard->addCertificatePair($private_key_file, $public_key_file, $type, $password);
}
/**
* Return a Certificate Pair from a key ID
*
* @param string $key_id The Key ID of the certificate pair in the component
* @throws Zend_InfoCard_Exception
* @return array An array containing the path to the private/public key files,
* the type URI and the password if provided
*/
public function getCertificatePair($key_id)
{
return $this->_infoCard->getCertificatePair($key_id);
}
/**
* Set the XML Token to be processed
*
* @param string $strXmlToken The XML token to process
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
*/
public function setXmlToken($strXmlToken)
{
$this->_xmlToken = $strXmlToken;
return $this;
}
/**
* Get the XML Token being processed
*
* @return string The XML token to be processed
*/
public function getXmlToken()
{
return $this->_xmlToken;
}
/**
* Authenticates the XML token
*
* @return Zend_Auth_Result The result of the authentication
*/
public function authenticate()
{
try {
$claims = $this->_infoCard->process($this->getXmlToken());
} catch(Exception $e) {
return new Zend_Auth_Result(Zend_Auth_Result::FAILURE , null, array('Exception Thrown',
$e->getMessage(),
$e->getTraceAsString(),
serialize($e)));
}
if(!$claims->isValid()) {
switch($claims->getCode()) {
case Zend_infoCard_Claims::RESULT_PROCESSING_FAILURE:
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$claims,
array(
'Processing Failure',
$claims->getErrorMsg()
)
);
break;
case Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE:
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID,
$claims,
array(
'Validation Failure',
$claims->getErrorMsg()
)
);
break;
default:
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$claims,
array(
'Unknown Failure',
$claims->getErrorMsg()
)
);
break;
}
}
return new Zend_Auth_Result(
Zend_Auth_Result::SUCCESS,
$claims
);
}
}

View File

@ -1,399 +0,0 @@
<?php
/**
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Cloud
* @subpackage StorageService
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
require_once 'Zend/Cloud/StorageService/Adapter.php';
require_once 'Zend/Cloud/StorageService/Exception.php';
require_once 'Zend/Service/Nirvanix.php';
/**
* Adapter for Nirvanix cloud storage
*
* @category Zend
* @package Zend_Cloud
* @subpackage StorageService
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Cloud_StorageService_Adapter_Nirvanix
implements Zend_Cloud_StorageService_Adapter
{
const USERNAME = 'auth_username';
const PASSWORD = 'auth_password';
const APP_KEY = 'auth_accesskey';
const REMOTE_DIRECTORY = 'remote_directory';
/**
* The Nirvanix adapter
* @var Zend_Service_Nirvanix
*/
protected $_nirvanix;
protected $_imfNs;
protected $_metadataNs;
protected $_remoteDirectory;
private $maxPageSize = 500;
/**
* Constructor
*
* @param array|Zend_Config $options
* @return void
*/
function __construct($options = array())
{
if ($options instanceof Zend_Config) {
$options = $options->toArray();
}
if (!is_array($options)) {
throw new Zend_Cloud_StorageService_Exception('Invalid options provided');
}
$auth = array(
'username' => $options[self::USERNAME],
'password' => $options[self::PASSWORD],
'appKey' => $options[self::APP_KEY],
);
$nirvanix_options = array();
if (isset($options[self::HTTP_ADAPTER])) {
$httpc = new Zend_Http_Client();
$httpc->setAdapter($options[self::HTTP_ADAPTER]);
$nirvanix_options['httpClient'] = $httpc;
}
try {
$this->_nirvanix = new Zend_Service_Nirvanix($auth, $nirvanix_options);
$this->_remoteDirectory = $options[self::REMOTE_DIRECTORY];
$this->_imfNs = $this->_nirvanix->getService('IMFS');
$this->_metadataNs = $this->_nirvanix->getService('Metadata');
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on create: '.$e->getMessage(), $e->getCode(), $e);
}
}
/**
* Get an item from the storage service.
*
* @param string $path
* @param array $options
* @return mixed
*/
public function fetchItem($path, $options = null)
{
$path = $this->_getFullPath($path);
try {
$item = $this->_imfNs->getContents($path);
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on fetch: '.$e->getMessage(), $e->getCode(), $e);
}
return $item;
}
/**
* Store an item in the storage service.
* WARNING: This operation overwrites any item that is located at
* $destinationPath.
* @param string $destinationPath
* @param mixed $data
* @param array $options
* @return void
*/
public function storeItem($destinationPath, $data, $options = null)
{
try {
$path = $this->_getFullPath($destinationPath);
$this->_imfNs->putContents($path, $data);
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on store: '.$e->getMessage(), $e->getCode(), $e);
}
return true;
}
/**
* Delete an item in the storage service.
*
* @param string $path
* @param array $options
* @return void
*/
public function deleteItem($path, $options = null)
{
try {
$path = $this->_getFullPath($path);
$this->_imfNs->unlink($path);
} catch(Zend_Service_Nirvanix_Exception $e) {
// if (trim(strtoupper($e->getMessage())) != 'INVALID PATH') {
// // TODO Differentiate among errors in the Nirvanix adapter
throw new Zend_Cloud_StorageService_Exception('Error on delete: '.$e->getMessage(), $e->getCode(), $e);
}
}
/**
* Copy an item in the storage service to a given path.
* WARNING: This operation is *very* expensive for services that do not
* support copying an item natively.
*
* @param string $sourcePath
* @param string $destination path
* @param array $options
* @return void
*/
public function copyItem($sourcePath, $destinationPath, $options = null)
{
try {
$sourcePath = $this->_getFullPath($sourcePath);
$destinationPath = $this->_getFullPath($destinationPath);
$this->_imfNs->CopyFiles(array('srcFilePath' => $sourcePath,
'destFolderPath' => $destinationPath));
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on copy: '.$e->getMessage(), $e->getCode(), $e);
}
}
/**
* Move an item in the storage service to a given path.
* WARNING: This operation is *very* expensive for services that do not
* support moving an item natively.
*
* @param string $sourcePath
* @param string $destination path
* @param array $options
* @return void
*/
public function moveItem($sourcePath, $destinationPath, $options = null)
{
try {
$sourcePath = $this->_getFullPath($sourcePath);
$destinationPath = $this->_getFullPath($destinationPath);
$this->_imfNs->RenameFile(array('filePath' => $sourcePath,
'newFileName' => $destinationPath));
// $this->_imfNs->MoveFiles(array('srcFilePath' => $sourcePath,
// 'destFolderPath' => $destinationPath));
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on move: '.$e->getMessage(), $e->getCode(), $e);
}
}
/**
* Rename an item in the storage service to a given name.
*
*
* @param string $path
* @param string $name
* @param array $options
* @return void
*/
public function renameItem($path, $name, $options = null)
{
require_once 'Zend/Cloud/OperationNotAvailableException.php';
throw new Zend_Cloud_OperationNotAvailableException('Renaming not implemented');
}
/**
* Get a key/value array of metadata for the given path.
*
* @param string $path
* @param array $options
* @return array An associative array of key/value pairs specifying the metadata for this object.
* If no metadata exists, an empty array is returned.
*/
public function fetchMetadata($path, $options = null)
{
$path = $this->_getFullPath($path);
try {
$metadataNode = $this->_metadataNs->getMetadata(array('path' => $path));
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on fetching metadata: '.$e->getMessage(), $e->getCode(), $e);
}
$metadata = array();
$length = count($metadataNode->Metadata);
// Need to special case this as Nirvanix returns an array if there is
// more than one, but doesn't return an array if there is only one.
if ($length == 1)
{
$metadata[(string)$metadataNode->Metadata->Type->value] = (string)$metadataNode->Metadata->Value;
}
else if ($length > 1)
{
for ($i=0; $i<$length; $i++)
{
$metadata[(string)$metadataNode->Metadata[$i]->Type] = (string)$metadataNode->Metadata[$i]->Value;
}
}
return $metadata;
}
/**
* Store a key/value array of metadata at the given path.
* WARNING: This operation overwrites any metadata that is located at
* $destinationPath.
*
* @param string $destinationPath
* @param array $metadata associative array specifying the key/value pairs for the metadata.
* @param array $options
* @return void
*/
public function storeMetadata($destinationPath, $metadata, $options = null)
{
$destinationPath = $this->_getFullPath($destinationPath);
if ($metadata != null) {
try {
foreach ($metadata AS $key=>$value) {
$metadataString = $key . ":" . $value;
$this->_metadataNs->SetMetadata(array(
'path' => $destinationPath,
'metadata' => $metadataString,
));
}
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on storing metadata: '.$e->getMessage(), $e->getCode(), $e);
}
}
}
/**
* Delete a key/value array of metadata at the given path.
*
* @param string $path
* @param array $metadata - An associative array specifying the key/value pairs for the metadata
* to be deleted. If null, all metadata associated with the object will
* be deleted.
* @param array $options
* @return void
*/
public function deleteMetadata($path, $metadata = null, $options = null)
{
$path = $this->_getFullPath($path);
try {
if ($metadata == null) {
$this->_metadataNs->DeleteAllMetadata(array('path' => $path));
} else {
foreach ($metadata AS $key=>$value) {
$this->_metadataNs->DeleteMetadata(array(
'path' => $path,
'metadata' => $key,
));
}
}
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on deleting metadata: '.$e->getMessage(), $e->getCode(), $e);
}
}
/*
* Recursively traverse all the folders and build an array that contains
* the path names for each folder.
*
* @param string $path folder path to get the list of folders from.
* @param array& $resultArray reference to the array that contains the path names
* for each folder.
*/
private function getAllFolders($path, &$resultArray)
{
$response = $this->_imfNs->ListFolder(array(
'folderPath' => $path,
'pageNumber' => 1,
'pageSize' => $this->maxPageSize,
));
$numFolders = $response->ListFolder->TotalFolderCount;
if ($numFolders == 0) {
return;
} else {
//Need to special case this as Nirvanix returns an array if there is
//more than one, but doesn't return an array if there is only one.
if ($numFolders == 1) {
$folderPath = $response->ListFolder->Folder->Path;
array_push($resultArray, $folderPath);
$this->getAllFolders('/' . $folderPath, $resultArray);
} else {
foreach ($response->ListFolder->Folder as $arrayElem) {
$folderPath = $arrayElem->Path;
array_push($resultArray, $folderPath);
$this->getAllFolders('/' . $folderPath, $resultArray);
}
}
}
}
/**
* Return an array of the items contained in the given path. The items
* returned are the files or objects that in the specified path.
*
* @param string $path
* @param array $options
* @return array
*/
public function listItems($path, $options = null)
{
$path = $this->_getFullPath($path);
$resultArray = array();
if (!isset($path)) {
return false;
} else {
try {
$response = $this->_imfNs->ListFolder(array(
'folderPath' => $path,
'pageNumber' => 1,
'pageSize' => $this->maxPageSize,
));
} catch (Zend_Service_Nirvanix_Exception $e) {
throw new Zend_Cloud_StorageService_Exception('Error on list: '.$e->getMessage(), $e->getCode(), $e);
}
$numFiles = $response->ListFolder->TotalFileCount;
//Add the file names to the array
if ($numFiles != 0) {
//Need to special case this as Nirvanix returns an array if there is
//more than one, but doesn't return an array if there is only one.
if ($numFiles == 1) {
$resultArray[] = (string)$response->ListFolder->File->Name;
}
else {
foreach ($response->ListFolder->File as $arrayElem) {
$resultArray[] = (string) $arrayElem->Name;
}
}
}
}
return $resultArray;
}
/**
* Get full path to an object
*
* @param string $path
* @return string
*/
private function _getFullPath($path)
{
return $this->_remoteDirectory . $path;
}
/**
* Get the concrete client.
* @return Zend_Service_Nirvanix
*/
public function getClient()
{
return $this->_nirvanix;
}
}

View File

@ -1,497 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: InfoCard.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_EncryptedData
*/
require_once 'Zend/InfoCard/Xml/EncryptedData.php';
/**
* Zend_InfoCard_Xml_Assertion
*/
require_once 'Zend/InfoCard/Xml/Assertion.php';
/**
* Zend_InfoCard_Cipher
*/
require_once 'Zend/InfoCard/Cipher.php';
/**
* Zend_InfoCard_Xml_Security
*/
require_once 'Zend/InfoCard/Xml/Security.php';
/**
* Zend_InfoCard_Adapter_Interface
*/
require_once 'Zend/InfoCard/Adapter/Interface.php';
/**
* Zend_InfoCard_Claims
*/
require_once 'Zend/InfoCard/Claims.php';
/**
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard
{
/**
* URI for XML Digital Signature SHA1 Digests
*/
const DIGEST_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1';
/**
* An array of certificate pair files and optional passwords for them to search
* when trying to determine which certificate was used to encrypt the transient key
*
* @var Array
*/
protected $_keyPairs;
/**
* The instance to use to decrypt public-key encrypted data
*
* @var Zend_InfoCard_Cipher_Pki_Interface
*/
protected $_pkiCipherObj;
/**
* The instance to use to decrypt symmetric encrypted data
*
* @var Zend_InfoCard_Cipher_Symmetric_Interface
*/
protected $_symCipherObj;
/**
* The InfoCard Adapter to use for callbacks into the application using the component
* such as when storing assertions, etc.
*
* @var Zend_InfoCard_Adapter_Interface
*/
protected $_adapter;
/**
* InfoCard Constructor
*
* @throws Zend_InfoCard_Exception
*/
public function __construct()
{
$this->_keyPairs = array();
if(!extension_loaded('mcrypt')) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Use of the Zend_InfoCard component requires the mcrypt extension to be enabled in PHP");
}
if(!extension_loaded('openssl')) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Use of the Zend_InfoCard component requires the openssl extension to be enabled in PHP");
}
}
/**
* Sets the adapter uesd for callbacks into the application using the component, used
* when doing things such as storing / retrieving assertions, etc.
*
* @param Zend_InfoCard_Adapter_Interface $a The Adapter instance
* @return Zend_InfoCard The instnace
*/
public function setAdapter(Zend_InfoCard_Adapter_Interface $a)
{
$this->_adapter = $a;
return $this;
}
/**
* Retrieves the adapter used for callbacks into the application using the component.
* If no adapter was set then an instance of Zend_InfoCard_Adapter_Default is used
*
* @return Zend_InfoCard_Adapter_Interface The Adapter instance
*/
public function getAdapter()
{
if($this->_adapter === null) {
require_once 'Zend/InfoCard/Adapter/Default.php';
$this->setAdapter(new Zend_InfoCard_Adapter_Default());
}
return $this->_adapter;
}
/**
* Gets the Public Key Cipher object used in this instance
*
* @return Zend_InfoCard_Cipher_Pki_Interface
*/
public function getPkiCipherObject()
{
return $this->_pkiCipherObj;
}
/**
* Sets the Public Key Cipher Object used in this instance
*
* @param Zend_InfoCard_Cipher_Pki_Interface $cipherObj
* @return Zend_InfoCard
*/
public function setPkiCipherObject(Zend_InfoCard_Cipher_Pki_Interface $cipherObj)
{
$this->_pkiCipherObj = $cipherObj;
return $this;
}
/**
* Get the Symmetric Cipher Object used in this instance
*
* @return Zend_InfoCard_Cipher_Symmetric_Interface
*/
public function getSymCipherObject()
{
return $this->_symCipherObj;
}
/**
* Sets the Symmetric Cipher Object used in this instance
*
* @param Zend_InfoCard_Cipher_Symmetric_Interface $cipherObj
* @return Zend_InfoCard
*/
public function setSymCipherObject($cipherObj)
{
$this->_symCipherObj = $cipherObj;
return $this;
}
/**
* Remove a Certificate Pair by Key ID from the search list
*
* @throws Zend_InfoCard_Exception
* @param string $key_id The Certificate Key ID returned from adding the certificate pair
* @return Zend_InfoCard
*/
public function removeCertificatePair($key_id)
{
if(!key_exists($key_id, $this->_keyPairs)) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Attempted to remove unknown key id: $key_id");
}
unset($this->_keyPairs[$key_id]);
return $this;
}
/**
* Add a Certificate Pair to the list of certificates searched by the component
*
* @throws Zend_InfoCard_Exception
* @param string $private_key_file The path to the private key file for the pair
* @param string $public_key_file The path to the certificate / public key for the pair
* @param string $type (optional) The URI for the type of key pair this is (default RSA with OAEP padding)
* @param string $password (optional) The password for the private key file if necessary
* @return string A key ID representing this key pair in the component
*/
public function addCertificatePair($private_key_file, $public_key_file, $type = Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P, $password = null)
{
if(!file_exists($private_key_file) ||
!file_exists($public_key_file)) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Could not locate the public and private certificate pair files: $private_key_file, $public_key_file");
}
if(!is_readable($private_key_file) ||
!is_readable($public_key_file)) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Could not read the public and private certificate pair files (check permissions): $private_key_file, $public_key_file");
}
$key_id = md5($private_key_file.$public_key_file);
if(key_exists($key_id, $this->_keyPairs)) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Attempted to add previously existing certificate pair: $private_key_file, $public_key_file");
}
switch($type) {
case Zend_InfoCard_Cipher::ENC_RSA:
case Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P:
$this->_keyPairs[$key_id] = array('private' => $private_key_file,
'public' => $public_key_file,
'type_uri' => $type);
if($password !== null) {
$this->_keyPairs[$key_id]['password'] = $password;
} else {
$this->_keyPairs[$key_id]['password'] = null;
}
return $key_id;
break;
default:
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Invalid Certificate Pair Type specified: $type");
}
}
/**
* Return a Certificate Pair from a key ID
*
* @throws Zend_InfoCard_Exception
* @param string $key_id The Key ID of the certificate pair in the component
* @return array An array containing the path to the private/public key files,
* the type URI and the password if provided
*/
public function getCertificatePair($key_id)
{
if(key_exists($key_id, $this->_keyPairs)) {
return $this->_keyPairs[$key_id];
}
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Invalid Certificate Pair ID provided: $key_id");
}
/**
* Retrieve the digest of a given public key / certificate using the provided digest
* method
*
* @throws Zend_InfoCard_Exception
* @param string $key_id The certificate key id in the component
* @param string $digestMethod The URI of the digest method to use (default SHA1)
* @return string The digest value in binary format
*/
protected function _getPublicKeyDigest($key_id, $digestMethod = self::DIGEST_SHA1)
{
$certificatePair = $this->getCertificatePair($key_id);
$temp = file($certificatePair['public']);
unset($temp[count($temp)-1]);
unset($temp[0]);
$certificateData = base64_decode(implode("\n", $temp));
switch($digestMethod) {
case self::DIGEST_SHA1:
$digest_retval = sha1($certificateData, true);
break;
default:
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Invalid Digest Type Provided: $digestMethod");
}
return $digest_retval;
}
/**
* Find a certificate pair based on a digest of its public key / certificate file
*
* @param string $digest The digest value of the public key wanted in binary form
* @param string $digestMethod The URI of the digest method used to calculate the digest
* @return mixed The Key ID of the matching certificate pair or false if not found
*/
protected function _findCertifiatePairByDigest($digest, $digestMethod = self::DIGEST_SHA1)
{
foreach($this->_keyPairs as $key_id => $certificate_data) {
$cert_digest = $this->_getPublicKeyDigest($key_id, $digestMethod);
if($cert_digest == $digest) {
return $key_id;
}
}
return false;
}
/**
* Extracts the Signed Token from an EncryptedData block
*
* @throws Zend_InfoCard_Exception
* @param string $strXmlToken The EncryptedData XML block
* @return string The XML of the Signed Token inside of the EncryptedData block
*/
protected function _extractSignedToken($strXmlToken)
{
$encryptedData = Zend_InfoCard_Xml_EncryptedData::getInstance($strXmlToken);
// Determine the Encryption Method used to encrypt the token
switch($encryptedData->getEncryptionMethod()) {
case Zend_InfoCard_Cipher::ENC_AES128CBC:
case Zend_InfoCard_Cipher::ENC_AES256CBC:
break;
default:
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Unknown Encryption Method used in the secure token");
}
// Figure out the Key we are using to decrypt the token
$keyinfo = $encryptedData->getKeyInfo();
if(!($keyinfo instanceof Zend_InfoCard_Xml_KeyInfo_XmlDSig)) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Expected a XML digital signature KeyInfo, but was not found");
}
$encryptedKey = $keyinfo->getEncryptedKey();
switch($encryptedKey->getEncryptionMethod()) {
case Zend_InfoCard_Cipher::ENC_RSA:
case Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P:
break;
default:
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Unknown Key Encryption Method used in secure token");
}
$securityTokenRef = $encryptedKey->getKeyInfo()->getSecurityTokenReference();
$key_id = $this->_findCertifiatePairByDigest($securityTokenRef->getKeyReference());
if(!$key_id) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Unable to find key pair used to encrypt symmetric InfoCard Key");
}
$certificate_pair = $this->getCertificatePair($key_id);
// Santity Check
if($certificate_pair['type_uri'] != $encryptedKey->getEncryptionMethod()) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Certificate Pair which matches digest is not of same algorithm type as document, check addCertificate()");
}
$PKcipher = Zend_InfoCard_Cipher::getInstanceByURI($encryptedKey->getEncryptionMethod());
$base64DecodeSupportsStrictParam = version_compare(PHP_VERSION, '5.2.0', '>=');
if ($base64DecodeSupportsStrictParam) {
$keyCipherValueBase64Decoded = base64_decode($encryptedKey->getCipherValue(), true);
} else {
$keyCipherValueBase64Decoded = base64_decode($encryptedKey->getCipherValue());
}
$symmetricKey = $PKcipher->decrypt(
$keyCipherValueBase64Decoded,
file_get_contents($certificate_pair['private']),
$certificate_pair['password']
);
$symCipher = Zend_InfoCard_Cipher::getInstanceByURI($encryptedData->getEncryptionMethod());
if ($base64DecodeSupportsStrictParam) {
$dataCipherValueBase64Decoded = base64_decode($encryptedData->getCipherValue(), true);
} else {
$dataCipherValueBase64Decoded = base64_decode($encryptedData->getCipherValue());
}
$signedToken = $symCipher->decrypt($dataCipherValueBase64Decoded, $symmetricKey);
return $signedToken;
}
/**
* Process an input Infomation Card EncryptedData block sent from the client,
* validate it, and return the claims contained within it on success or an error message on error
*
* @param string $strXmlToken The XML token sent to the server from the client
* @return Zend_Infocard_Claims The Claims object containing the claims, or any errors which occurred
*/
public function process($strXmlToken)
{
$retval = new Zend_InfoCard_Claims();
require_once 'Zend/InfoCard/Exception.php';
try {
$signedAssertionsXml = $this->_extractSignedToken($strXmlToken);
} catch(Zend_InfoCard_Exception $e) {
$retval->setError('Failed to extract assertion document');
$retval->setCode(Zend_InfoCard_Claims::RESULT_PROCESSING_FAILURE);
return $retval;
}
try {
$assertions = Zend_InfoCard_Xml_Assertion::getInstance($signedAssertionsXml);
} catch(Zend_InfoCard_Exception $e) {
$retval->setError('Failure processing assertion document');
$retval->setCode(Zend_InfoCard_Claims::RESULT_PROCESSING_FAILURE);
return $retval;
}
if(!($assertions instanceof Zend_InfoCard_Xml_Assertion_Interface)) {
throw new Zend_InfoCard_Exception("Invalid Assertion Object returned");
}
if(!($reference_id = Zend_InfoCard_Xml_Security::validateXMLSignature($assertions->asXML()))) {
$retval->setError("Failure Validating the Signature of the assertion document");
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
return $retval;
}
// The reference id should be locally scoped as far as I know
if($reference_id[0] == '#') {
$reference_id = substr($reference_id, 1);
} else {
$retval->setError("Reference of document signature does not reference the local document");
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
return $retval;
}
// Make sure the signature is in reference to the same document as the assertions
if($reference_id != $assertions->getAssertionID()) {
$retval->setError("Reference of document signature does not reference the local document");
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
}
// Validate we haven't seen this before and the conditions are acceptable
$conditions = $this->getAdapter()->retrieveAssertion($assertions->getAssertionURI(), $assertions->getAssertionID());
if($conditions === false) {
$conditions = $assertions->getConditions();
}
if(is_array($condition_error = $assertions->validateConditions($conditions))) {
$retval->setError("Conditions of assertion document are not met: {$condition_error[1]} ({$condition_error[0]})");
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
}
$attributes = $assertions->getAttributes();
$retval->setClaims($attributes);
if($retval->getCode() == 0) {
$retval->setCode(Zend_InfoCard_Claims::RESULT_SUCCESS);
}
return $retval;
}
}

View File

@ -1,79 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Default.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Adapter_Interface
*/
require_once 'Zend/InfoCard/Adapter/Interface.php';
/**
* The default InfoCard component Adapter which serves as a pass-thru placeholder
* for developers. Initially developed to provide a callback mechanism to store and retrieve
* assertions as part of the validation process it can be used anytime callback facilities
* are necessary
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Adapter_Default implements Zend_InfoCard_Adapter_Interface
{
/**
* Store the assertion (pass-thru does nothing)
*
* @param string $assertionURI The assertion type URI
* @param string $assertionID The specific assertion ID
* @param array $conditions An array of claims to store associated with the assertion
* @return bool Always returns true (would return false on store failure)
*/
public function storeAssertion($assertionURI, $assertionID, $conditions)
{
return true;
}
/**
* Retrieve an assertion (pass-thru does nothing)
*
* @param string $assertionURI The assertion type URI
* @param string $assertionID The assertion ID to retrieve
* @return mixed False if the assertion ID was not found for that URI, or an array of
* conditions associated with that assertion if found (always returns false)
*/
public function retrieveAssertion($assertionURI, $assertionID)
{
return false;
}
/**
* Remove an assertion (pass-thru does nothing)
*
* @param string $assertionURI The assertion type URI
* @param string $assertionID The assertion ID to remove
* @return bool Always returns true (false on removal failure)
*/
public function removeAssertion($assertionURI, $assertionID)
{
return null;
}
}

View File

@ -1,37 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* @see Zend_InfoCard_Exception
*/
require_once 'Zend/InfoCard/Exception.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Adapter_Exception extends Zend_InfoCard_Exception
{
}

View File

@ -1,64 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* The interface required by all Zend_InfoCard Adapter classes to implement. It represents
* a series of callback methods used by the component during processing of an information card
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Adapter
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Adapter_Interface
{
/**
* Store the assertion's claims in persistent storage
*
* @param string $assertionURI The assertion type URI
* @param string $assertionID The specific assertion ID
* @param array $conditions An array of claims to store associated with the assertion
* @return bool True on success, false on failure
*/
public function storeAssertion($assertionURI, $assertionID, $conditions);
/**
* Retrieve the claims of a given assertion from persistent storage
*
* @param string $assertionURI The assertion type URI
* @param string $assertionID The assertion ID to retrieve
* @return mixed False if the assertion ID was not found for that URI, or an array of
* conditions associated with that assertion if found in the same format
* provided
*/
public function retrieveAssertion($assertionURI, $assertionID);
/**
* Remove the claims of a given assertion from persistent storage
*
* @param string $asserionURI The assertion type URI
* @param string $assertionID The assertion ID to remove
* @return bool True on success, false on failure
*/
public function removeAssertion($asserionURI, $assertionID);
}

View File

@ -1,99 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Cipher.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Provides an abstraction for encryption ciphers used in an Information Card
* implementation
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Cipher
{
/**
* AES 256 Encryption with CBC
*/
const ENC_AES256CBC = 'http://www.w3.org/2001/04/xmlenc#aes256-cbc';
/**
* AES 128 Encryption with CBC
*/
const ENC_AES128CBC = 'http://www.w3.org/2001/04/xmlenc#aes128-cbc';
/**
* RSA Public Key Encryption with OAEP Padding
*/
const ENC_RSA_OAEP_MGF1P = 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p';
/**
* RSA Public Key Encryption with no padding
*/
const ENC_RSA = 'http://www.w3.org/2001/04/xmlenc#rsa-1_5';
/**
* Constructor (disabled)
*
* @return void
* @codeCoverageIgnoreStart
*/
protected function __construct()
{
}
// @codeCoverageIgnoreEnd
/**
* Returns an instance of a cipher object supported based on the URI provided
*
* @throws Zend_InfoCard_Cipher_Exception
* @param string $uri The URI of the encryption method wantde
* @return mixed an Instance of Zend_InfoCard_Cipher_Symmetric_Interface or Zend_InfoCard_Cipher_Pki_Interface
* depending on URI
*/
static public function getInstanceByURI($uri)
{
switch($uri) {
case self::ENC_AES256CBC:
include_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Aes256cbc.php';
return new Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc();
case self::ENC_AES128CBC:
include_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Aes128cbc.php';
return new Zend_InfoCard_Cipher_Symmetric_Adapter_Aes128cbc();
case self::ENC_RSA_OAEP_MGF1P:
include_once 'Zend/InfoCard/Cipher/Pki/Adapter/Rsa.php';
return new Zend_InfoCard_Cipher_Pki_Adapter_Rsa(Zend_InfoCard_Cipher_Pki_Adapter_Rsa::OAEP_PADDING);
break;
case self::ENC_RSA:
include_once 'Zend/InfoCard/Cipher/Pki/Adapter/Rsa.php';
return new Zend_InfoCard_Cipher_Pki_Adapter_Rsa(Zend_InfoCard_Cipher_Pki_Adapter_Rsa::NO_PADDING);
break;
default:
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Unknown Cipher URI");
}
}
}

View File

@ -1,38 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Exception
*/
require_once 'Zend/InfoCard/Exception.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Cipher_Exception extends Zend_InfoCard_Exception
{
}

View File

@ -1,88 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_Pki_Interface
*/
require_once 'Zend/InfoCard/Cipher/Pki/Interface.php';
/**
* An abstract class for public-key ciphers
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_InfoCard_Cipher_Pki_Adapter_Abstract implements Zend_InfoCard_Cipher_Pki_Interface
{
/**
* OAEP Padding public key encryption
*/
const OAEP_PADDING = 1;
/**
* No padding public key encryption
*/
const NO_PADDING = 2;
/**
* The type of padding to use
*
* @var integer one of the padding constants in this class
*/
protected $_padding;
/**
* Set the padding of the public key encryption
*
* @throws Zend_InfoCard_Cipher_Exception
* @param integer $padding One of the constnats in this class
* @return Zend_InfoCard_Pki_Adapter_Abstract
*/
public function setPadding($padding)
{
switch($padding) {
case self::OAEP_PADDING:
case self::NO_PADDING:
$this->_padding = $padding;
break;
default:
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Invalid Padding Type Provided");
break;
}
return $this;
}
/**
* Retruns the public-key padding used
*
* @return integer One of the padding constants in this class
*/
public function getPadding()
{
return $this->_padding;
}
}

View File

@ -1,120 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Rsa.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_Pki_Adapter_Abstract
*/
require_once 'Zend/InfoCard/Cipher/Pki/Adapter/Abstract.php';
/**
* Zend_InfoCard_Cipher_Pki_Rsa_Interface
*/
require_once 'Zend/InfoCard/Cipher/Pki/Rsa/Interface.php';
/**
* RSA Public Key Encryption Cipher Object for the InfoCard component. Relies on OpenSSL
* to implement the RSA algorithm
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Cipher_Pki_Adapter_Rsa
extends Zend_InfoCard_Cipher_Pki_Adapter_Abstract
implements Zend_InfoCard_Cipher_Pki_Rsa_Interface
{
/**
* Object Constructor
*
* @param integer $padding The type of Padding to use
*/
public function __construct($padding = Zend_InfoCard_Cipher_Pki_Adapter_Abstract::NO_PADDING)
{
// Can't test this..
// @codeCoverageIgnoreStart
if(!extension_loaded('openssl')) {
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Use of this PKI RSA Adapter requires the openssl extension loaded");
}
// @codeCoverageIgnoreEnd
$this->setPadding($padding);
}
/**
* Decrypts RSA encrypted data using the given private key
*
* @throws Zend_InfoCard_Cipher_Exception
* @param string $encryptedData The encrypted data in binary format
* @param string $privateKey The private key in binary format
* @param string $password The private key passphrase
* @param integer $padding The padding to use during decryption (of not provided object value will be used)
* @return string The decrypted data
*/
public function decrypt($encryptedData, $privateKey, $password = null, $padding = null)
{
$private_key = openssl_pkey_get_private(array($privateKey, $password));
if(!$private_key) {
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Failed to load private key");
}
if($padding !== null) {
try {
$this->setPadding($padding);
} catch(Exception $e) {
openssl_free_key($private_key);
throw $e;
}
}
switch($this->getPadding()) {
case self::NO_PADDING:
$openssl_padding = OPENSSL_NO_PADDING;
break;
case self::OAEP_PADDING:
$openssl_padding = OPENSSL_PKCS1_OAEP_PADDING;
break;
}
$result = openssl_private_decrypt($encryptedData, $decryptedData, $private_key, $openssl_padding);
openssl_free_key($private_key);
if(!$result) {
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Unable to Decrypt Value using provided private key");
}
if($this->getPadding() == self::NO_PADDING) {
$decryptedData = substr($decryptedData, 2);
$start = strpos($decryptedData, 0) + 1;
$decryptedData = substr($decryptedData, $start);
}
return $decryptedData;
}
}

View File

@ -1,33 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Empty Interface represents a Pki cipher object
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Cipher_Pki_Interface
{
}

View File

@ -1,50 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_PKI_Adapter_Abstract
*/
require_once 'Zend/InfoCard/Cipher/Pki/Adapter/Abstract.php';
/**
* The interface which defines the RSA Public-key encryption object
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Cipher_Pki_Rsa_Interface
{
/**
* Decrypts RSA encrypted data using the given private key
*
* @throws Zend_InfoCard_Cipher_Exception
* @param string $encryptedData The encrypted data in binary format
* @param string $privateKey The private key in binary format
* @param string $password The private key passphrase
* @param integer $padding The padding to use during decryption (of not provided object value will be used)
* @return string The decrypted data
*/
public function decrypt($encryptedData, $privateKey, $password = null, $padding = Zend_InfoCard_Cipher_Pki_Adapter_Abstract::NO_PADDING);
}

View File

@ -1,38 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_Symmetric_Interface
*/
require_once 'Zend/InfoCard/Cipher/Symmetric/Interface.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_InfoCard_Cipher_Symmetric_Adapter_Abstract
implements Zend_InfoCard_Cipher_Symmetric_Interface
{
}

View File

@ -1,40 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Aes128cbc.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc
*/
require_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Aes256cbc.php';
/**
* Implements AES128 with CBC encryption implemented using the mCrypt extension
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Cipher_Symmetric_Adapter_Aes128cbc
extends Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc
{
}

View File

@ -1,111 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Aes256cbc.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_Symmetric_Adapter_Abstract
*/
require_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Abstract.php';
/**
* Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
*/
require_once 'Zend/InfoCard/Cipher/Symmetric/Aes256cbc/Interface.php';
/**
* Implements AES256 with CBC encryption implemented using the mCrypt extension
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc
extends Zend_InfoCard_Cipher_Symmetric_Adapter_Abstract
implements Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
{
/**
* The MCRYPT Cipher constant for this encryption
*/
const MCRYPT_CIPHER = MCRYPT_RIJNDAEL_128;
/**
* The MCRYPT Mode constant for this encryption
*/
const MCRYPT_MODE = MCRYPT_MODE_CBC;
/**
* The default length of the IV to use
*/
const IV_LENGTH = 16;
/**
* The object constructor
*
* @throws Zend_InfoCard_Cipher_Exception
*/
public function __construct()
{
// Can't test for this
// @codeCoverageIgnoreStart
if(!extension_loaded('mcrypt')) {
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Use of the AES256CBC Cipher requires the mcrypt extension");
}
// @codeCoveregIgnoreEnd
}
/**
* Decrypts data using the AES Algorithm using the mCrypt extension
*
* @throws Zend_InfoCard_Cipher_Exception
* @param string $encryptedData The encrypted data in binary format
* @param string $decryptionKey The decryption key
* @param integer $iv_length The IV length to use
* @return string the decrypted data with any terminating nulls removed
*/
public function decrypt($encryptedData, $decryptionKey, $iv_length = null)
{
$iv_length = ($iv_length === null) ? self::IV_LENGTH : $iv_length;
$mcrypt_iv = null;
if($iv_length > 0) {
$mcrypt_iv = substr($encryptedData, 0, $iv_length);
$encryptedData = substr($encryptedData, $iv_length);
}
$decrypted = mcrypt_decrypt(self::MCRYPT_CIPHER, $decryptionKey, $encryptedData, self::MCRYPT_MODE, $mcrypt_iv);
if(!$decrypted) {
require_once 'Zend/InfoCard/Cipher/Exception.php';
throw new Zend_InfoCard_Cipher_Exception("Failed to decrypt data using AES256CBC Algorithm");
}
$decryptedLength = strlen($decrypted);
$paddingLength = substr($decrypted, $decryptedLength -1, 1);
$decrypted = substr($decrypted, 0, $decryptedLength - ord($paddingLength));
return rtrim($decrypted, "\0");
}
}

View File

@ -1,38 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
*/
require_once 'Zend/InfoCard/Cipher/Symmetric/Aes256cbc/Interface.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Cipher_Symmetric_Aes128cbc_Interface
extends Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
{
}

View File

@ -1,33 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
{
public function decrypt($encryptedData, $decryptionKey, $iv_length = null);
}

View File

@ -1,32 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Cipher
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Cipher_Symmetric_Interface
{
}

View File

@ -1,307 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Claims.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Result value of the InfoCard component, contains any error messages and claims
* from the processing of an information card.
*
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Claims
{
/**
* Successful validation and extraion of claims
*/
const RESULT_SUCCESS = 1;
/**
* Indicates there was an error processing the XML document
*/
const RESULT_PROCESSING_FAILURE = 2;
/**
* Indicates that the signature values within the XML document failed verification
*/
const RESULT_VALIDATION_FAILURE = 3;
/**
* The default namespace to assume in these claims
*
* @var string
*/
protected $_defaultNamespace = null;
/**
* A boolean indicating if the claims should be consider "valid" or not based on processing
*
* @var bool
*/
protected $_isValid = true;
/**
* The error message if any
*
* @var string
*/
protected $_error = "";
/**
* An array of claims taken from the information card
*
* @var array
*/
protected $_claims;
/**
* The result code of processing the information card as defined by the constants of this class
*
* @var integer
*/
protected $_code;
/**
* Override for the safeguard which ensures that you don't use claims which failed validation.
* Used in situations when there was a validation error you'd like to ignore
*
* @return Zend_InfoCard_Claims
*/
public function forceValid()
{
trigger_error("Forcing Claims to be valid although it is a security risk", E_USER_WARNING);
$this->_isValid = true;
return $this;
}
/**
* Retrieve the PPI (Private Personal Identifier) associated with the information card
*
* @return string the private personal identifier
*/
public function getCardID()
{
return $this->getClaim('http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier');
}
/**
* Retrieves the default namespace used in this information card. If a default namespace was not
* set, it figures out which one to consider 'default' by taking the first namespace sorted by use-count
* in claims
*
* @throws Zend_InfoCard_Exception
* @return string The default namespace
*/
public function getDefaultNamespace()
{
if($this->_defaultNamespace === null) {
$namespaces = array();
$leader = '';
foreach($this->_claims as $claim) {
if(!isset($namespaces[$claim['namespace']])) {
$namespaces[$claim['namespace']] = 1;
} else {
$namespaces[$claim['namespace']]++;
}
if(empty($leader) || ($namespaces[$claim['namespace']] > $leader)) {
$leader = $claim['namespace'];
}
}
if(empty($leader)) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Failed to determine default namespace");
}
$this->setDefaultNamespace($leader);
}
return $this->_defaultNamespace;
}
/**
* Set the default namespace, overriding any existing default
*
* @throws Zend_InfoCard_Exception
* @param string $namespace The default namespace to use
* @return Zend_InfoCard_Claims
*/
public function setDefaultNamespace($namespace)
{
foreach($this->_claims as $claim) {
if($namespace == $claim['namespace']) {
$this->_defaultNamespace = $namespace;
return $this;
}
}
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("At least one claim must exist in specified namespace to make it the default namespace");
}
/**
* Indicates if this claim object contains validated claims or not
*
* @return bool
*/
public function isValid()
{
return $this->_isValid;
}
/**
* Set the error message contained within the claims object
*
* @param string $error The error message
* @return Zend_InfoCard_Claims
*/
public function setError($error)
{
$this->_error = $error;
$this->_isValid = false;
return $this;
}
/**
* Retrieve the error message contained within the claims object
*
* @return string The error message
*/
public function getErrorMsg()
{
return $this->_error;
}
/**
* Set the claims for the claims object. Can only be set once and is done
* by the component itself. Internal use only.
*
* @throws Zend_InfoCard_Exception
* @param array $claims
* @return Zend_InfoCard_Claims
*/
public function setClaims(Array $claims)
{
if($this->_claims !== null) {
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Claim objects are read-only");
}
$this->_claims = $claims;
return $this;
}
/**
* Set the result code of the claims object.
*
* @throws Zend_InfoCard_Exception
* @param int $code The result code
* @return Zend_InfoCard_Claims
*/
public function setCode($code)
{
switch($code) {
case self::RESULT_PROCESSING_FAILURE:
case self::RESULT_SUCCESS:
case self::RESULT_VALIDATION_FAILURE:
$this->_code = $code;
return $this;
}
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Attempted to set unknown error code");
}
/**
* Gets the result code of the claims object
*
* @return integer The result code
*/
public function getCode()
{
return $this->_code;
}
/**
* Get a claim by providing its complete claim URI
*
* @param string $claimURI The complete claim URI to retrieve
* @return mixed The claim matching that specific URI or null if not found
*/
public function getClaim($claimURI)
{
if($this->claimExists($claimURI)) {
return $this->_claims[$claimURI]['value'];
}
return null;
}
/**
* Indicates if a specific claim URI exists or not within the object
*
* @param string $claimURI The complete claim URI to check
* @return bool true if the claim exists, false if not found
*/
public function claimExists($claimURI)
{
return isset($this->_claims[$claimURI]);
}
/**
* Magic helper function
* @throws Zend_InfoCard_Exception
*/
public function __unset($k)
{
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Claim objects are read-only");
}
/**
* Magic helper function
*/
public function __isset($k)
{
return $this->claimExists("{$this->getDefaultNamespace()}/$k");
}
/**
* Magic helper function
*/
public function __get($k)
{
return $this->getClaim("{$this->getDefaultNamespace()}/$k");
}
/**
* Magic helper function
* @throws Zend_InfoCard_Exception
*/
public function __set($k, $v)
{
require_once 'Zend/InfoCard/Exception.php';
throw new Zend_InfoCard_Exception("Claim objects are read-only");
}
}

View File

@ -1,43 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
*/
if (class_exists("Zend_Exception")) {
abstract class Zend_InfoCard_Exception_Abstract extends Zend_Exception
{
}
} else {
abstract class Zend_InfoCard_Exception_Abstract extends Exception
{
}
}
/**
* Base Exception class for the InfoCard component
*
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Exception extends Zend_InfoCard_Exception_Abstract
{
}

View File

@ -1,88 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Assertion.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Assertion_Interface
*/
require_once 'Zend/InfoCard/Xml/Assertion/Interface.php';
/**
* Factory object to retrieve an Assertion object based on the type of XML document provided
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
final class Zend_InfoCard_Xml_Assertion
{
/**
* The namespace for a SAML-formatted Assertion document
*/
const TYPE_SAML = 'urn:oasis:names:tc:SAML:1.0:assertion';
/**
* Constructor (disabled)
*
* @return void
*/
private function __construct()
{
}
/**
* Returns an instance of a InfoCard Assertion object based on the XML data provided
*
* @throws Zend_InfoCard_Xml_Exception
* @param string $xmlData The XML-Formatted Assertion
* @return Zend_InfoCard_Xml_Assertion_Interface
* @throws Zend_InfoCard_Xml_Exception
*/
static public function getInstance($xmlData)
{
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
$strXmlData = $xmlData->asXML();
} else if (is_string($xmlData)) {
$strXmlData = $xmlData;
} else {
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
}
$sxe = simplexml_load_string($strXmlData);
$namespaces = $sxe->getDocNameSpaces();
foreach($namespaces as $namespace) {
switch($namespace) {
case self::TYPE_SAML:
include_once 'Zend/InfoCard/Xml/Assertion/Saml.php';
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_Assertion_Saml', null);
}
}
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("Unable to determine Assertion type by Namespace");
}
}

View File

@ -1,69 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* The Interface required by any InfoCard Assertion Object implemented within the component
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Xml_Assertion_Interface
{
/**
* Get the Assertion ID of the assertion
*
* @return string The Assertion ID
*/
public function getAssertionID();
/**
* Return an array of attributes (claims) contained within the assertion
*
* @return array An array of attributes / claims within the assertion
*/
public function getAttributes();
/**
* Get the Assertion URI for this type of Assertion
*
* @return string the Assertion URI
*/
public function getAssertionURI();
/**
* Return an array of conditions which the assertions are predicated on
*
* @return array an array of conditions
*/
public function getConditions();
/**
* Validate the conditions array returned from the getConditions() call
*
* @param array $conditions An array of condtions for the assertion taken from getConditions()
* @return mixed Boolean true on success, an array of condition, error message on failure
*/
public function validateConditions(Array $conditions);
}

View File

@ -1,284 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Saml.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element
*/
require_once 'Zend/InfoCard/Xml/Element.php';
/**
* Zend_InfoCard_Xml_Assertion_Interface
*/
require_once 'Zend/InfoCard/Xml/Assertion/Interface.php';
/**
* A Xml Assertion Document in SAML Token format
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Assertion_Saml
extends Zend_InfoCard_Xml_Element
implements Zend_InfoCard_Xml_Assertion_Interface
{
/**
* Audience Restriction Condition
*/
const CONDITION_AUDIENCE = 'AudienceRestrictionCondition';
/**
* The URI for a 'bearer' confirmation
*/
const CONFIRMATION_BEARER = 'urn:oasis:names:tc:SAML:1.0:cm:bearer';
/**
* The amount of time in seconds to buffer when checking conditions to ensure
* that differences between client/server clocks don't interfer too much
*/
const CONDITION_TIME_ADJ = 3600; // +- 5 minutes
protected function _getServerName() {
return $_SERVER['SERVER_NAME'];
}
protected function _getServerPort() {
return $_SERVER['SERVER_PORT'];
}
/**
* Validate the conditions array returned from the getConditions() call
*
* @param array $conditions An array of condtions for the assertion taken from getConditions()
* @return mixed Boolean true on success, an array of condition, error message on failure
*/
public function validateConditions(Array $conditions)
{
$currentTime = time();
if(!empty($conditions)) {
foreach($conditions as $condition => $conditionValue) {
switch(strtolower($condition)) {
case 'audiencerestrictioncondition':
$serverName = $this->_getServerName();
$serverPort = $this->_getServerPort();
$self_aliases[] = $serverName;
$self_aliases[] = "{{$serverName}:{$serverPort}";
$found = false;
if(is_array($conditionValue)) {
foreach($conditionValue as $audience) {
list(,,$audience) = explode('/', $audience);
if(in_array($audience, $self_aliases)) {
$found = true;
break;
}
}
}
if(!$found) {
return array($condition, 'Could not find self in allowed audience list');
}
break;
case 'notbefore':
$notbeforetime = strtotime($conditionValue);
if($currentTime < $notbeforetime) {
if($currentTime + self::CONDITION_TIME_ADJ < $notbeforetime) {
return array($condition, 'Current time is before specified window');
}
}
break;
case 'notonorafter':
$notonoraftertime = strtotime($conditionValue);
if($currentTime >= $notonoraftertime) {
if($currentTime - self::CONDITION_TIME_ADJ >= $notonoraftertime) {
return array($condition, 'Current time is after specified window');
}
}
break;
}
}
}
return true;
}
/**
* Get the Assertion URI for this type of Assertion
*
* @return string the Assertion URI
*/
public function getAssertionURI()
{
return Zend_InfoCard_Xml_Assertion::TYPE_SAML;
}
/**
* Get the Major Version of the SAML Assertion
*
* @return integer The major version number
*/
public function getMajorVersion()
{
return (int)(string)$this['MajorVersion'];
}
/**
* The Minor Version of the SAML Assertion
*
* @return integer The minor version number
*/
public function getMinorVersion()
{
return (int)(string)$this['MinorVersion'];
}
/**
* Get the Assertion ID of the assertion
*
* @return string The Assertion ID
*/
public function getAssertionID()
{
return (string)$this['AssertionID'];
}
/**
* Get the Issuer URI of the assertion
*
* @return string the URI of the assertion Issuer
*/
public function getIssuer()
{
return (string)$this['Issuer'];
}
/**
* Get the Timestamp of when the assertion was issued
*
* @return integer a UNIX timestamp representing when the assertion was issued
*/
public function getIssuedTimestamp()
{
return strtotime((string)$this['IssueInstant']);
}
/**
* Return an array of conditions which the assertions are predicated on
*
* @throws Zend_InfoCard_Xml_Exception
* @return array an array of conditions
*/
public function getConditions()
{
list($conditions) = $this->xpath("//saml:Conditions");
if(!($conditions instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the saml:Conditions block");
}
$retval = array();
foreach($conditions->children('urn:oasis:names:tc:SAML:1.0:assertion') as $key => $value) {
switch($key) {
case self::CONDITION_AUDIENCE:
foreach($value->children('urn:oasis:names:tc:SAML:1.0:assertion') as $audience_key => $audience_value) {
if($audience_key == 'Audience') {
$retval[$key][] = (string)$audience_value;
}
}
break;
}
}
$retval['NotBefore'] = (string)$conditions['NotBefore'];
$retval['NotOnOrAfter'] = (string)$conditions['NotOnOrAfter'];
return $retval;
}
/**
* Get they KeyInfo element for the Subject KeyInfo block
*
* @todo Not Yet Implemented
* @ignore
*/
public function getSubjectKeyInfo()
{
/**
* @todo Not sure if this is part of the scope for now..
*/
if($this->getConfirmationMethod() == self::CONFIRMATION_BEARER) {
throw new Zend_InfoCard_Xml_Exception("Cannot get Subject Key Info when Confirmation Method was Bearer");
}
}
/**
* Return the Confirmation Method URI used in the Assertion
*
* @return string The confirmation method URI
*/
public function getConfirmationMethod()
{
list($confirmation) = $this->xPath("//saml:ConfirmationMethod");
return (string)$confirmation;
}
/**
* Return an array of attributes (claims) contained within the assertion
*
* @return array An array of attributes / claims within the assertion
*/
public function getAttributes()
{
$attributes = $this->xPath('//saml:Attribute');
$retval = array();
foreach($attributes as $key => $value) {
$retkey = (string)$value['AttributeNamespace'].'/'.(string)$value['AttributeName'];
$retval[$retkey]['name'] = (string)$value['AttributeName'];
$retval[$retkey]['namespace'] = (string)$value['AttributeNamespace'];
list($aValue) = $value->children('urn:oasis:names:tc:SAML:1.0:assertion');
$retval[$retkey]['value'] = (string)$aValue;
}
return $retval;
}
}

View File

@ -1,107 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Element.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element_Interface
*/
require_once 'Zend/InfoCard/Xml/Element/Interface.php';
/**
* An abstract class representing a an XML data block
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_InfoCard_Xml_Element
extends SimpleXMLElement
implements Zend_InfoCard_Xml_Element_Interface
{
/**
* Convert the object to a string by displaying its XML content
*
* @return string an XML representation of the object
*/
public function __toString()
{
return $this->asXML();
}
/**
* Converts an XML Element object into a DOM object
*
* @throws Zend_InfoCard_Xml_Exception
* @param Zend_InfoCard_Xml_Element $e The object to convert
* @return DOMElement A DOMElement representation of the same object
*/
static public function convertToDOM(Zend_InfoCard_Xml_Element $e)
{
$dom = dom_import_simplexml($e);
if(!($dom instanceof DOMElement)) {
// Zend_InfoCard_Xml_Element exntes SimpleXMLElement, so this should *never* fail
// @codeCoverageIgnoreStart
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("Failed to convert between SimpleXML and DOM");
// @codeCoverageIgnoreEnd
}
return $dom;
}
/**
* Converts a DOMElement object into the specific class
*
* @throws Zend_InfoCard_Xml_Exception
* @param DOMElement $e The DOMElement object to convert
* @param string $classname The name of the class to convert it to (must inhert from Zend_InfoCard_Xml_Element)
* @return Zend_InfoCard_Xml_Element a Xml Element object from the DOM element
*/
static public function convertToObject(DOMElement $e, $classname)
{
if (!class_exists($classname)) {
require_once 'Zend/Loader.php';
Zend_Loader::loadClass($classname);
}
$reflection = new ReflectionClass($classname);
if(!$reflection->isSubclassOf('Zend_InfoCard_Xml_Element')) {
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("DOM element must be converted to an instance of Zend_InfoCard_Xml_Element");
}
$sxe = simplexml_import_dom($e, $classname);
if(!($sxe instanceof Zend_InfoCard_Xml_Element)) {
// Since we just checked to see if this was a subclass of Zend_infoCard_Xml_Element this shoudl never fail
// @codeCoverageIgnoreStart
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("Failed to convert between DOM and SimpleXML");
// @codeCoverageIgnoreEnd
}
return $sxe;
}
}

View File

@ -1,44 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* The Interface used to represent an XML Data Type
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Xml_Element_Interface
{
/**
* Return the data within the object as an XML document
*/
public function asXML();
/**
* Magic function which allows us to treat the object as a string to return XML
* (same as the asXML() method)
*/
public function __toString();
}

View File

@ -1,75 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: EncryptedData.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* A factory class for producing Zend_InfoCard_Xml_EncryptedData objects based on
* the type of XML document provided
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
final class Zend_InfoCard_Xml_EncryptedData
{
/**
* Constructor (disabled)
*
* @return void
*/
private function __construct()
{
}
/**
* Returns an instance of the class
*
* @param string $xmlData The XML EncryptedData String
* @return Zend_InfoCard_Xml_EncryptedData_Abstract
* @throws Zend_InfoCard_Xml_Exception
*/
static public function getInstance($xmlData)
{
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
$strXmlData = $xmlData->asXML();
} else if (is_string($xmlData)) {
$strXmlData = $xmlData;
} else {
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
}
$sxe = simplexml_load_string($strXmlData);
switch($sxe['Type']) {
case 'http://www.w3.org/2001/04/xmlenc#Element':
include_once 'Zend/InfoCard/Xml/EncryptedData/XmlEnc.php';
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_EncryptedData_XmlEnc');
default:
require_once 'Zend/InfoCard/Xml/Exception.php';
throw new Zend_InfoCard_Xml_Exception("Unknown EncryptedData type found");
break;
}
}
}

View File

@ -1,92 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element
*/
require_once 'Zend/InfoCard/Xml/Element.php';
/**
* Zend_InfoCard_Xml_KeyInfo
*/
require_once 'Zend/InfoCard/Xml/KeyInfo.php';
/**
* An abstract class representing a generic EncryptedData XML block. This class is extended
* into a specific type of EncryptedData XML block (i.e. XmlEnc) as necessary
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_InfoCard_Xml_EncryptedData_Abstract extends Zend_InfoCard_Xml_Element
{
/**
* Returns the KeyInfo Block
*
* @return Zend_InfoCard_Xml_KeyInfo_Abstract
*/
public function getKeyInfo()
{
return Zend_InfoCard_Xml_KeyInfo::getInstance($this->KeyInfo[0]);
}
/**
* Return the Encryption method used to encrypt the assertion document
* (the symmetric cipher)
*
* @throws Zend_InfoCard_Xml_Exception
* @return string The URI of the Symmetric Encryption Method used
*/
public function getEncryptionMethod()
{
/**
* @todo This is pretty hacky unless we can always be confident that the first
* EncryptionMethod block is the correct one (the AES or compariable symetric algorithm)..
* the second is the PK method if provided.
*/
list($encryption_method) = $this->xpath("//enc:EncryptionMethod");
if(!($encryption_method instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the enc:EncryptionMethod symmetric encryption block");
}
$dom = self::convertToDOM($encryption_method);
if(!$dom->hasAttribute('Algorithm')) {
throw new Zend_InfoCard_Xml_Exception("Unable to determine the encryption algorithm in the Symmetric enc:EncryptionMethod XML block");
}
return $dom->getAttribute('Algorithm');
}
/**
* Returns the value of the encrypted block
*
* @return string the value of the encrypted CipherValue block
*/
abstract function getCipherValue();
}

View File

@ -1,64 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: XmlEnc.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_EncryptedData/Abstract.php
*/
require_once 'Zend/InfoCard/Xml/EncryptedData/Abstract.php';
/**
* An XmlEnc formatted EncryptedData XML block
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_EncryptedData_XmlEnc extends Zend_InfoCard_Xml_EncryptedData_Abstract
{
/**
* Returns the Encrypted CipherValue block from the EncryptedData XML document
*
* @throws Zend_InfoCard_Xml_Exception
* @return string The value of the CipherValue block base64 encoded
*/
public function getCipherValue()
{
$this->registerXPathNamespace('enc', 'http://www.w3.org/2001/04/xmlenc#');
list(,$cipherdata) = $this->xpath("//enc:CipherData");
if(!($cipherdata instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the enc:CipherData block");
}
$cipherdata->registerXPathNamespace('enc', 'http://www.w3.org/2001/04/xmlenc#');
list(,$ciphervalue) = $cipherdata->xpath("//enc:CipherValue");
if(!($ciphervalue instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to fidn the enc:CipherValue block");
}
return (string)$ciphervalue;
}
}

View File

@ -1,174 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: EncryptedKey.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element
*/
require_once 'Zend/InfoCard/Xml/Element.php';
/**
* Zend_InfoCard_Xml_EncryptedKey
*/
require_once 'Zend/InfoCard/Xml/EncryptedKey.php';
/**
* Zend_InfoCard_Xml_KeyInfo_Interface
*/
require_once 'Zend/InfoCard/Xml/KeyInfo/Interface.php';
/**
* An object representing an Xml EncryptedKEy block
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_EncryptedKey
extends Zend_InfoCard_Xml_Element
implements Zend_InfoCard_Xml_KeyInfo_Interface
{
/**
* Return an instance of the object based on input XML Data
*
* @throws Zend_InfoCard_Xml_Exception
* @param string $xmlData The EncryptedKey XML Block
* @return Zend_InfoCard_Xml_EncryptedKey
*/
static public function getInstance($xmlData)
{
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
$strXmlData = $xmlData->asXML();
} else if (is_string($xmlData)) {
$strXmlData = $xmlData;
} else {
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
}
$sxe = simplexml_load_string($strXmlData);
if($sxe->getName() != "EncryptedKey") {
throw new Zend_InfoCard_Xml_Exception("Invalid XML Block provided for EncryptedKey");
}
return simplexml_load_string($strXmlData, "Zend_InfoCard_Xml_EncryptedKey");
}
/**
* Returns the Encyption Method Algorithm URI of the block
*
* @throws Zend_InfoCard_Xml_Exception
* @return string the Encryption method algorithm URI
*/
public function getEncryptionMethod()
{
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
list($encryption_method) = $this->xpath("//e:EncryptionMethod");
if(!($encryption_method instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the e:EncryptionMethod KeyInfo encryption block");
}
$dom = self::convertToDOM($encryption_method);
if(!$dom->hasAttribute('Algorithm')) {
throw new Zend_InfoCard_Xml_Exception("Unable to determine the encryption algorithm in the Symmetric enc:EncryptionMethod XML block");
}
return $dom->getAttribute('Algorithm');
}
/**
* Returns the Digest Method Algorithm URI used
*
* @throws Zend_InfoCard_Xml_Exception
* @return string the Digest Method Algorithm URI
*/
public function getDigestMethod()
{
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
list($encryption_method) = $this->xpath("//e:EncryptionMethod");
if(!($encryption_method instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the e:EncryptionMethod KeyInfo encryption block");
}
if(!($encryption_method->DigestMethod instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the DigestMethod block");
}
$dom = self::convertToDOM($encryption_method->DigestMethod);
if(!$dom->hasAttribute('Algorithm')) {
throw new Zend_InfoCard_Xml_Exception("Unable to determine the digest algorithm for the symmetric Keyinfo");
}
return $dom->getAttribute('Algorithm');
}
/**
* Returns the KeyInfo block object
*
* @throws Zend_InfoCard_Xml_Exception
* @return Zend_InfoCard_Xml_KeyInfo_Abstract
*/
public function getKeyInfo()
{
if(isset($this->KeyInfo)) {
return Zend_InfoCard_Xml_KeyInfo::getInstance($this->KeyInfo);
}
throw new Zend_InfoCard_Xml_Exception("Unable to locate a KeyInfo block");
}
/**
* Return the encrypted value of the block in base64 format
*
* @throws Zend_InfoCard_Xml_Exception
* @return string The Value of the CipherValue block in base64 format
*/
public function getCipherValue()
{
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
list($cipherdata) = $this->xpath("//e:CipherData");
if(!($cipherdata instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to find the e:CipherData block");
}
$cipherdata->registerXPathNameSpace('enc', 'http://www.w3.org/2001/04/xmlenc#');
list($ciphervalue) = $cipherdata->xpath("//enc:CipherValue");
if(!($ciphervalue instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Unable to fidn the enc:CipherValue block");
}
return (string)$ciphervalue;
}
}

View File

@ -1,37 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Exception
*/
require_once 'Zend/InfoCard/Exception.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Exception extends Zend_InfoCard_Exception
{
}

View File

@ -1,90 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: KeyInfo.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element
*/
require_once 'Zend/InfoCard/Xml/Element.php';
/**
* Factory class to return a XML KeyInfo block based on input XML
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_KeyInfo
{
/**
* Constructor (disabled)
*
* @return void
*/
private function __construct()
{
}
/**
* Returns an instance of KeyInfo object based on the input KeyInfo XML block
*
* @param string $xmlData The KeyInfo XML Block
* @return Zend_InfoCard_Xml_KeyInfo_Abstract
* @throws Zend_InfoCard_Xml_Exception
*/
static public function getInstance($xmlData)
{
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
$strXmlData = $xmlData->asXML();
} else if (is_string($xmlData)) {
$strXmlData = $xmlData;
} else {
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
}
$sxe = simplexml_load_string($strXmlData);
$namespaces = $sxe->getDocNameSpaces();
if(!empty($namespaces)) {
foreach($sxe->getDocNameSpaces() as $namespace) {
switch($namespace) {
case 'http://www.w3.org/2000/09/xmldsig#':
include_once 'Zend/InfoCard/Xml/KeyInfo/XmlDSig.php';
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_KeyInfo_XmlDSig');
default:
throw new Zend_InfoCard_Xml_Exception("Unknown KeyInfo Namespace provided");
// We are ignoring these lines, as XDebug reports each as a "non executed" line
// which breaks my coverage %
// @codeCoverageIgnoreStart
}
}
}
// @codeCoverageIgnoreEnd
include_once 'Zend/InfoCard/Xml/KeyInfo/Default.php';
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_KeyInfo_Default');
}
}

View File

@ -1,37 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element
*/
require_once 'Zend/InfoCard/Xml/Element.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_InfoCard_Xml_KeyInfo_Abstract extends Zend_InfoCard_Xml_Element
{
}

View File

@ -1,64 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Default.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_KeyInfo_Abstract
*/
require_once 'Zend/InfoCard/Xml/KeyInfo/Abstract.php';
/**
* Zend_InfoCard_Xml_SecurityTokenReference
*/
require_once 'Zend/InfoCard/Xml/SecurityTokenReference.php';
/**
* An object representation of a XML <KeyInfo> block which doesn't provide a namespace
* In this context, it is assumed to mean that it is the type of KeyInfo block which
* contains the SecurityTokenReference
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_KeyInfo_Default extends Zend_InfoCard_Xml_KeyInfo_Abstract
{
/**
* Returns the object representation of the SecurityTokenReference block
*
* @throws Zend_InfoCard_Xml_Exception
* @return Zend_InfoCard_Xml_SecurityTokenReference
*/
public function getSecurityTokenReference()
{
$this->registerXPathNamespace('o', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');
list($sectokenref) = $this->xpath('//o:SecurityTokenReference');
if(!($sectokenref instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception('Could not locate the Security Token Reference');
}
return Zend_InfoCard_Xml_SecurityTokenReference::getInstance($sectokenref);
}
}

View File

@ -1,38 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Xml_KeyInfo_Interface
{
/**
* Return an object representing a KeyInfo data type
*
* @return Zend_InfoCard_Xml_KeyInfo
*/
public function getKeyInfo();
}

View File

@ -1,76 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: XmlDSig.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_KeyInfo_Abstract
*/
require_once 'Zend/InfoCard/Xml/KeyInfo/Abstract.php';
/**
* Zend_InfoCard_Xml_EncryptedKey
*/
require_once 'Zend/InfoCard/Xml/EncryptedKey.php';
/**
* Zend_InfoCard_Xml_KeyInfo_Interface
*/
require_once 'Zend/InfoCard/Xml/KeyInfo/Interface.php';
/**
* Represents a Xml Digital Signature XML Data Block
*
* @category Zend
* @package Zend_InfoCard
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_KeyInfo_XmlDSig
extends Zend_InfoCard_Xml_KeyInfo_Abstract
implements Zend_InfoCard_Xml_KeyInfo_Interface
{
/**
* Returns an instance of the EncryptedKey Data Block
*
* @throws Zend_InfoCard_Xml_Exception
* @return Zend_InfoCard_Xml_EncryptedKey
*/
public function getEncryptedKey()
{
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
list($encryptedkey) = $this->xpath('//e:EncryptedKey');
if(!($encryptedkey instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Failed to retrieve encrypted key");
}
return Zend_InfoCard_Xml_EncryptedKey::getInstance($encryptedkey);
}
/**
* Returns the KeyInfo Block within the encrypted key
*
* @return Zend_InfoCard_Xml_KeyInfo_Default
*/
public function getKeyInfo()
{
return $this->getEncryptedKey()->getKeyInfo();
}
}

View File

@ -1,327 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Security.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Security_Transform
*/
require_once 'Zend/InfoCard/Xml/Security/Transform.php';
/**
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Security
{
/**
* ASN.1 type INTEGER class
*/
const ASN_TYPE_INTEGER = 0x02;
/**
* ASN.1 type BIT STRING class
*/
const ASN_TYPE_BITSTRING = 0x03;
/**
* ASN.1 type SEQUENCE class
*/
const ASN_TYPE_SEQUENCE = 0x30;
/**
* The URI for Canonical Method C14N Exclusive
*/
const CANONICAL_METHOD_C14N_EXC = 'http://www.w3.org/2001/10/xml-exc-c14n#';
/**
* The URI for Signature Method SHA1
*/
const SIGNATURE_METHOD_SHA1 = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1';
/**
* The URI for Digest Method SHA1
*/
const DIGEST_METHOD_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1';
/**
* The Identifier for RSA Keys
*/
const RSA_KEY_IDENTIFIER = '300D06092A864886F70D0101010500';
/**
* Constructor (disabled)
*
* @return void
*/
private function __construct()
{
}
/**
* Validates the signature of a provided XML block
*
* @param string $strXMLInput An XML block containing a Signature
* @return bool True if the signature validated, false otherwise
* @throws Zend_InfoCard_Xml_Security_Exception
*/
static public function validateXMLSignature($strXMLInput)
{
if(!extension_loaded('openssl')) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("You must have the openssl extension installed to use this class");
}
$sxe = simplexml_load_string($strXMLInput);
if(!isset($sxe->Signature)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Could not identify XML Signature element");
}
if(!isset($sxe->Signature->SignedInfo)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a SignedInfo block");
}
if(!isset($sxe->Signature->SignatureValue)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a SignatureValue block");
}
if(!isset($sxe->Signature->KeyInfo)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a KeyInfo block");
}
if(!isset($sxe->Signature->KeyInfo->KeyValue)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a KeyValue block");
}
switch((string)$sxe->Signature->SignedInfo->CanonicalizationMethod['Algorithm']) {
case self::CANONICAL_METHOD_C14N_EXC:
$cMethod = (string)$sxe->Signature->SignedInfo->CanonicalizationMethod['Algorithm'];
break;
default:
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or unsupported CanonicalizationMethod Requested");
break;
}
switch((string)$sxe->Signature->SignedInfo->SignatureMethod['Algorithm']) {
case self::SIGNATURE_METHOD_SHA1:
$sMethod = (string)$sxe->Signature->SignedInfo->SignatureMethod['Algorithm'];
break;
default:
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or unsupported SignatureMethod Requested");
break;
}
switch((string)$sxe->Signature->SignedInfo->Reference->DigestMethod['Algorithm']) {
case self::DIGEST_METHOD_SHA1:
$dMethod = (string)$sxe->Signature->SignedInfo->Reference->DigestMethod['Algorithm'];
break;
default:
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or unsupported DigestMethod Requested");
break;
}
$base64DecodeSupportsStrictParam = version_compare(PHP_VERSION, '5.2.0', '>=');
if ($base64DecodeSupportsStrictParam) {
$dValue = base64_decode((string)$sxe->Signature->SignedInfo->Reference->DigestValue, true);
} else {
$dValue = base64_decode((string)$sxe->Signature->SignedInfo->Reference->DigestValue);
}
if ($base64DecodeSupportsStrictParam) {
$signatureValue = base64_decode((string)$sxe->Signature->SignatureValue, true);
} else {
$signatureValue = base64_decode((string)$sxe->Signature->SignatureValue);
}
$transformer = new Zend_InfoCard_Xml_Security_Transform();
foreach($sxe->Signature->SignedInfo->Reference->Transforms->children() as $transform) {
$transformer->addTransform((string)$transform['Algorithm']);
}
$transformed_xml = $transformer->applyTransforms($strXMLInput);
$transformed_xml_binhash = pack("H*", sha1($transformed_xml));
if(!self::_secureStringCompare($transformed_xml_binhash, $dValue)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Locally Transformed XML does not match XML Document. Cannot Verify Signature");
}
$public_key = null;
switch(true) {
case isset($sxe->Signature->KeyInfo->KeyValue->X509Certificate):
$certificate = (string)$sxe->Signature->KeyInfo->KeyValue->X509Certificate;
$pem = "-----BEGIN CERTIFICATE-----\n" .
wordwrap($certificate, 64, "\n", true) .
"\n-----END CERTIFICATE-----";
$public_key = openssl_pkey_get_public($pem);
if(!$public_key) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Unable to extract and prcoess X509 Certificate from KeyValue");
}
break;
case isset($sxe->Signature->KeyInfo->KeyValue->RSAKeyValue):
if(!isset($sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Modulus) ||
!isset($sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Exponent)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("RSA Key Value not in Modulus/Exponent form");
}
$modulus = base64_decode((string)$sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Modulus);
$exponent = base64_decode((string)$sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Exponent);
$pem_public_key = self::_getPublicKeyFromModExp($modulus, $exponent);
$public_key = openssl_pkey_get_public ($pem_public_key);
break;
default:
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Unable to determine or unsupported representation of the KeyValue block");
}
$transformer = new Zend_InfoCard_Xml_Security_Transform();
$transformer->addTransform((string)$sxe->Signature->SignedInfo->CanonicalizationMethod['Algorithm']);
// The way we are doing our XML processing requires that we specifically add this
// (even though it's in the <Signature> parent-block).. otherwise, our canonical form
// fails signature verification
$sxe->Signature->SignedInfo->addAttribute('xmlns', 'http://www.w3.org/2000/09/xmldsig#');
$canonical_signedinfo = $transformer->applyTransforms($sxe->Signature->SignedInfo->asXML());
if(@openssl_verify($canonical_signedinfo, $signatureValue, $public_key)) {
return (string)$sxe->Signature->SignedInfo->Reference['URI'];
}
return false;
}
/**
* Transform an RSA Key in Modulus/Exponent format into a PEM encoding and
* return an openssl resource for it
*
* @param string $modulus The RSA Modulus in binary format
* @param string $exponent The RSA exponent in binary format
* @return string The PEM encoded version of the key
*/
static protected function _getPublicKeyFromModExp($modulus, $exponent)
{
$modulusInteger = self::_encodeValue($modulus, self::ASN_TYPE_INTEGER);
$exponentInteger = self::_encodeValue($exponent, self::ASN_TYPE_INTEGER);
$modExpSequence = self::_encodeValue($modulusInteger . $exponentInteger, self::ASN_TYPE_SEQUENCE);
$modExpBitString = self::_encodeValue($modExpSequence, self::ASN_TYPE_BITSTRING);
$binRsaKeyIdentifier = pack( "H*", self::RSA_KEY_IDENTIFIER );
$publicKeySequence = self::_encodeValue($binRsaKeyIdentifier . $modExpBitString, self::ASN_TYPE_SEQUENCE);
$publicKeyInfoBase64 = base64_encode( $publicKeySequence );
$publicKeyString = "-----BEGIN PUBLIC KEY-----\n";
$publicKeyString .= wordwrap($publicKeyInfoBase64, 64, "\n", true);
$publicKeyString .= "\n-----END PUBLIC KEY-----\n";
return $publicKeyString;
}
/**
* Encode a limited set of data types into ASN.1 encoding format
* which is used in X.509 certificates
*
* @param string $data The data to encode
* @param const $type The encoding format constant
* @return string The encoded value
* @throws Zend_InfoCard_Xml_Security_Exception
*/
static protected function _encodeValue($data, $type)
{
// Null pad some data when we get it (integer values > 128 and bitstrings)
if( (($type == self::ASN_TYPE_INTEGER) && (ord($data) > 0x7f)) ||
($type == self::ASN_TYPE_BITSTRING)) {
$data = "\0$data";
}
$len = strlen($data);
// encode the value based on length of the string
// I'm fairly confident that this is by no means a complete implementation
// but it is enough for our purposes
switch(true) {
case ($len < 128):
return sprintf("%c%c%s", $type, $len, $data);
case ($len < 0x0100):
return sprintf("%c%c%c%s", $type, 0x81, $len, $data);
case ($len < 0x010000):
return sprintf("%c%c%c%c%s", $type, 0x82, $len / 0x0100, $len % 0x0100, $data);
default:
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Could not encode value");
}
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Invalid code path");
}
/**
* Securely compare two strings for equality while avoided C level memcmp()
* optimisations capable of leaking timing information useful to an attacker
* attempting to iteratively guess the unknown string (e.g. password) being
* compared against.
*
* @param string $a
* @param string $b
* @return bool
*/
static protected function _secureStringCompare($a, $b)
{
if (strlen($a) !== strlen($b)) {
return false;
}
$result = 0;
for ($i = 0; $i < strlen($a); $i++) {
$result |= ord($a[$i]) ^ ord($b[$i]);
}
return $result == 0;
}
}

View File

@ -1,37 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Exception
*/
require_once 'Zend/InfoCard/Xml/Exception.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Security_Exception extends Zend_InfoCard_Xml_Exception
{
}

View File

@ -1,116 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Transform.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* A class to create a transform rule set based on XML URIs and then apply those rules
* in the correct order to a given XML input
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Security_Transform
{
/**
* A list of transforms to apply
*
* @var array
*/
protected $_transformList = array();
/**
* Returns the name of the transform class based on a given URI
*
* @throws Zend_InfoCard_Xml_Security_Exception
* @param string $uri The transform URI
* @return string The transform implementation class name
*/
protected function _findClassbyURI($uri)
{
switch($uri) {
case 'http://www.w3.org/2000/09/xmldsig#enveloped-signature':
return 'Zend_InfoCard_Xml_Security_Transform_EnvelopedSignature';
case 'http://www.w3.org/2001/10/xml-exc-c14n#':
return 'Zend_InfoCard_Xml_Security_Transform_XmlExcC14N';
default:
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or Unsupported Transformation Requested");
}
}
/**
* Add a Transform URI to the list of transforms to perform
*
* @param string $uri The Transform URI
* @return Zend_InfoCard_Xml_Security_Transform
*/
public function addTransform($uri)
{
$class = $this->_findClassbyURI($uri);
$this->_transformList[] = array('uri' => $uri,
'class' => $class);
return $this;
}
/**
* Return the list of transforms to perform
*
* @return array The list of transforms
*/
public function getTransformList()
{
return $this->_transformList;
}
/**
* Apply the transforms in the transform list to the input XML document
*
* @param string $strXmlDocument The input XML
* @return string The XML after the transformations have been applied
*/
public function applyTransforms($strXmlDocument)
{
foreach($this->_transformList as $transform) {
if (!class_exists($transform['class'])) {
require_once 'Zend/Loader.php';
Zend_Loader::loadClass($transform['class']);
}
$transformer = new $transform['class'];
// We can't really test this check because it would require logic changes in the component itself
// @codeCoverageIgnoreStart
if(!($transformer instanceof Zend_InfoCard_Xml_Security_Transform_Interface)) {
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
throw new Zend_InfoCard_Xml_Security_Exception("Transforms must implement the Transform Interface");
}
// @codeCoverageIgnoreEnd
$strXmlDocument = $transformer->transform($strXmlDocument);
}
return $strXmlDocument;
}
}

View File

@ -1,60 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: EnvelopedSignature.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Security_Transform_Interface
*/
require_once 'Zend/InfoCard/Xml/Security/Transform/Interface.php';
/**
* A object implementing the EnvelopedSignature XML Transform
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Security_Transform_EnvelopedSignature
implements Zend_InfoCard_Xml_Security_Transform_Interface
{
/**
* Transforms the XML Document according to the EnvelopedSignature Transform
*
* @throws Zend_InfoCard_Xml_Security_Transform_Exception
* @param string $strXMLData The input XML data
* @return string the transformed XML data
*/
public function transform($strXMLData)
{
$sxe = simplexml_load_string($strXMLData);
if(!$sxe->Signature) {
require_once 'Zend/InfoCard/Xml/Security/Transform/Exception.php';
throw new Zend_InfoCard_Xml_Security_Transform_Exception("Unable to locate Signature Block for EnvelopedSignature Transform");
}
unset($sxe->Signature);
return $sxe->asXML();
}
}

View File

@ -1,37 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Security_Exception
*/
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
/**
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Security_Transform_Exception extends Zend_InfoCard_Xml_Security_Exception
{
}

View File

@ -1,43 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Interface for XML Security Transforms
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_InfoCard_Xml_Security_Transform_Interface
{
/**
* Transform the given XML string according to the transform rules
* implemented by the object using this interface
*
* @throws Zend_InfoCard_Xml_Security_Transform_Exception
* @param string $strXmlData the input XML
* @return string the output XML
*/
public function transform($strXmlData);
}

View File

@ -1,59 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: XmlExcC14N.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Security_Transform_Interface
*/
require_once 'Zend/InfoCard/Xml/Security/Transform/Interface.php';
/**
* A Transform to perform C14n XML Exclusive Canonicalization
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml_Security
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_Security_Transform_XmlExcC14N
implements Zend_InfoCard_Xml_Security_Transform_Interface
{
/**
* Transform the input XML based on C14n XML Exclusive Canonicalization rules
*
* @throws Zend_InfoCard_Xml_Security_Transform_Exception
* @param string $strXMLData The input XML
* @return string The output XML
*/
public function transform($strXMLData)
{
$dom = new DOMDocument();
$dom->loadXML($strXMLData);
if(method_exists($dom, 'C14N')) {
return $dom->C14N(true, false);
}
require_once 'Zend/InfoCard/Xml/Security/Transform/Exception.php';
throw new Zend_InfoCard_Xml_Security_Transform_Exception("This transform requires the C14N() method to exist in the DOM extension");
}
}

View File

@ -1,173 +0,0 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: SecurityTokenReference.php 24593 2012-01-05 20:35:02Z matthew $
*/
/**
* Zend_InfoCard_Xml_Element
*/
require_once 'Zend/InfoCard/Xml/Element.php';
/**
* Represents a SecurityTokenReference XML block
*
* @category Zend
* @package Zend_InfoCard
* @subpackage Zend_InfoCard_Xml
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_InfoCard_Xml_SecurityTokenReference extends Zend_InfoCard_Xml_Element
{
/**
* Base64 Binary Encoding URI
*/
const ENCODING_BASE64BIN = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary';
/**
* Return an instance of the object based on the input XML
*
* @param string $xmlData The SecurityTokenReference XML Block
* @return Zend_InfoCard_Xml_SecurityTokenReference
* @throws Zend_InfoCard_Xml_Exception
*/
static public function getInstance($xmlData)
{
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
$strXmlData = $xmlData->asXML();
} else if (is_string($xmlData)) {
$strXmlData = $xmlData;
} else {
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
}
$sxe = simplexml_load_string($strXmlData);
if($sxe->getName() != "SecurityTokenReference") {
throw new Zend_InfoCard_Xml_Exception("Invalid XML Block provided for SecurityTokenReference");
}
return simplexml_load_string($strXmlData, "Zend_InfoCard_Xml_SecurityTokenReference");
}
/**
* Return the Key Identifier XML Object
*
* @return Zend_InfoCard_Xml_Element
* @throws Zend_InfoCard_Xml_Exception
*/
protected function _getKeyIdentifier()
{
$this->registerXPathNamespace('o', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');
list($keyident) = $this->xpath('//o:KeyIdentifier');
if(!($keyident instanceof Zend_InfoCard_Xml_Element)) {
throw new Zend_InfoCard_Xml_Exception("Failed to retrieve Key Identifier");
}
return $keyident;
}
/**
* Return the Key URI identifying the thumbprint type used
*
* @return string The thumbprint type URI
* @throws Zend_InfoCard_Xml_Exception
*/
public function getKeyThumbprintType()
{
$keyident = $this->_getKeyIdentifier();
$dom = self::convertToDOM($keyident);
if(!$dom->hasAttribute('ValueType')) {
throw new Zend_InfoCard_Xml_Exception("Key Identifier did not provide a type for the value");
}
return $dom->getAttribute('ValueType');
}
/**
* Return the thumbprint encoding type used as a URI
*
* @return string the URI of the thumbprint encoding used
* @throws Zend_InfoCard_Xml_Exception
*/
public function getKeyThumbprintEncodingType()
{
$keyident = $this->_getKeyIdentifier();
$dom = self::convertToDOM($keyident);
if(!$dom->hasAttribute('EncodingType')) {
throw new Zend_InfoCard_Xml_Exception("Unable to determine the encoding type for the key identifier");
}
return $dom->getAttribute('EncodingType');
}
/**
* Get the key reference data used to identify the public key
*
* @param bool $decode if true, will return a decoded version of the key
* @return string the key reference thumbprint, either in binary or encoded form
* @throws Zend_InfoCard_Xml_Exception
*/
public function getKeyReference($decode = true)
{
$keyIdentifier = $this->_getKeyIdentifier();
$dom = self::convertToDOM($keyIdentifier);
$encoded = $dom->nodeValue;
if(empty($encoded)) {
throw new Zend_InfoCard_Xml_Exception("Could not find the Key Reference Encoded Value");
}
if($decode) {
$decoded = "";
switch($this->getKeyThumbprintEncodingType()) {
case self::ENCODING_BASE64BIN:
if(version_compare(PHP_VERSION, "5.2.0", ">=")) {
$decoded = base64_decode($encoded, true);
} else {
$decoded = base64_decode($encoded);
}
break;
default:
throw new Zend_InfoCard_Xml_Exception("Unknown Key Reference Encoding Type: {$this->getKeyThumbprintEncodingType()}");
}
if(!$decoded || empty($decoded)) {
throw new Zend_InfoCard_Xml_Exception("Failed to decode key reference");
}
return $decoded;
}
return $encoded;
}
}

View File

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.36 $"/>
<generation date="$Date: 2009/05/05 23:06:33 $"/>
<language type="aa"/>
<territory type="ER"/>
<variant type="SAAHO"/>
</identity>
<dates>
<calendars>
<calendar type="gregorian">
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">Nab</day>
<day type="mon">San</day>
<day type="tue">Sal</day>
<day type="wed">Rab</day>
<day type="thu">Cam</day>
<day type="fri">Jum</day>
<day type="sat">Qun</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">Naba Sambat</day>
<day type="mon">Sani</day>
<day type="tue">Salus</day>
<day type="wed">Rabuq</day>
<day type="thu">Camus</day>
<day type="fri">Jumqata</day>
<day type="sat">Qunxa Sambat</day>
</dayWidth>
</dayContext>
</days>
</calendar>
</calendars>
</dates>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.42 $"/>
<generation date="$Date: 2009/05/05 23:06:34 $"/>
<language type="az"/>
<territory type="AZ"/>
</identity>
<alias source="az_Latn_AZ" path="//ldml"/>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.24 $"/>
<generation date="$Date: 2009/05/05 23:06:34 $"/>
<language type="bs"/>
<territory type="BA"/>
</identity>
</ldml>

View File

@ -1,188 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.31 $"/>
<generation date="$Date: 2009/05/05 23:06:34 $"/>
<language type="cch"/>
</identity>
<characters>
<exemplarCharacters>[a {a\u0331} b c {ch} d {dy} e-g {g\u0331} {gb} {gw} {gy} h {hy} i-k ḵ {kp} {kw} l {ly} m n ṉ {ny} o p {ph} {py} r {ry} s {sh} t-w {wh} y {y\u0331} z ʼ]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">Dyon</month>
<month type="2">Baa</month>
<month type="3">Atat</month>
<month type="4">Anas</month>
<month type="5">Atyo</month>
<month type="6">Achi</month>
<month type="7">Atar</month>
<month type="8">Awur</month>
<month type="9">Shad</month>
<month type="10">Shak</month>
<month type="11">Naba</month>
<month type="12">Nata</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Pen Dyon</month>
<month type="2">Pen Ba'a</month>
<month type="3">Pen Atat</month>
<month type="4">Pen Anas</month>
<month type="5">Pen Atyon</month>
<month type="6">Pen Achirim</month>
<month type="7">Pen Atariba</month>
<month type="8">Pen Awurr</month>
<month type="9">Pen Shadon</month>
<month type="10">Pen Shakur</month>
<month type="11">Pen Kur Naba</month>
<month type="12">Pen Kur Natat</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">Yok</day>
<day type="mon">Tung</day>
<day type="tue">T. Tung</day>
<day type="wed">Tsan</day>
<day type="thu">Nas</day>
<day type="fri">Nat</day>
<day type="sat">Chir</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">Wai Yoka Bawai</day>
<day type="mon">Wai Tunga</day>
<day type="tue">Toki Gitung</day>
<day type="wed">Tsam Kasuwa</day>
<day type="thu">Wai Na Nas</day>
<day type="fri">Wai Na Tiyon</day>
<day type="sat">Wai Na Chirim</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraNames>
<era type="0">Gabanin Miladi</era>
<era type="1">Miladi</era>
</eraNames>
<eraAbbr>
<era type="0">GM</era>
<era type="1">M</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<currencies>
<currency type="NGN">
<displayName>Aman</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.17 $"/>
<generation date="$Date: 2009/05/05 23:06:34 $"/>
<language type="cch"/>
<territory type="NG"/>
</identity>
</ldml>

View File

@ -1,197 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.27 $"/>
<generation date="$Date: 2009/05/05 23:06:34 $"/>
<language type="cop"/>
</identity>
<characters>
<exemplarCharacters>[α-ρ σ ϲ τ-ω ϣ ϥ ϧ ϩ ϫ ϭ ϯ]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="coptic">
<months>
<monthContext type="format">
<monthWidth type="wide">
<month type="1">ωογτ</month>
<month type="2">Παοπι</month>
<month type="3">Αθορ</month>
<month type="4">Χοιακ</month>
<month type="5">Τωβι</month>
<month type="6">Μεϣιρ</month>
<month type="7">Παρεμϩατ</month>
<month type="8">Φαρμοθι</month>
<month type="9">Παϣαν</month>
<month type="10">Παωνι</month>
<month type="11">Επηπ</month>
<month type="12">Μεϲωρη</month>
<month type="13">Πικογϫι μαβοτ</month>
</monthWidth>
</monthContext>
</months>
</calendar>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraAbbr>
<era type="0">BCE</era>
<era type="1">CE</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
</ldml>

View File

@ -1,225 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.54 $"/>
<generation date="$Date: 2009/06/15 04:15:33 $"/>
<language type="dv"/>
</identity>
<localeDisplayNames>
<languages>
<language type="dv">ދިވެހިބަސް</language>
</languages>
<territories>
<territory type="MV">ދިވެހި ރާއްޖެ</territory>
</territories>
</localeDisplayNames>
<layout>
<orientation characters="right-to-left"/>
</layout>
<characters>
<exemplarCharacters>[ހ-ޗ \u07A6-\u07B0]</exemplarCharacters>
<exemplarCharacters type="auxiliary">[\u200C \u200D ޙ ޚ ޜ ޢ ޣ ޥ ޛ ޘ ޠ ޡ ޤ ޝ-ޟ ޱ]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraAbbr>
<era type="0">BCE</era>
<era type="1">CE</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE d MMMM y</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>d MMMM y</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>dd-MM-yyyy</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>d-M-yy</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>hh:mm:ss a zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>hh:mm:ss a z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>hh:mm:ss a</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>hh:mm a</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="MMdd">dd-MM</dateFormatItem>
<dateFormatItem id="MMMMd">d MMMM</dateFormatItem>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
<dateFormatItem id="yyyyMM">MM-yyyy</dateFormatItem>
<dateFormatItem id="yyyyMMMM">MMMM y</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<symbols>
<list>,</list>
<nativeZeroDigit>0</nativeZeroDigit>
</symbols>
<decimalFormats>
<decimalFormatLength>
<decimalFormat>
<pattern>#,##,##0.###</pattern>
</decimalFormat>
</decimalFormatLength>
</decimalFormats>
<percentFormats>
<percentFormatLength>
<percentFormat>
<pattern>#,##,##0%</pattern>
</percentFormat>
</percentFormatLength>
</percentFormats>
<currencyFormats>
<currencyFormatLength>
<currencyFormat>
<pattern>¤ #,##,##0.00</pattern>
</currencyFormat>
</currencyFormatLength>
</currencyFormats>
<currencies>
<currency type="MVR">
<symbol>ރ.</symbol>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.40 $"/>
<generation date="$Date: 2009/05/05 23:06:34 $"/>
<language type="dv"/>
<territory type="MV"/>
</identity>
</ldml>

View File

@ -1,541 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.10 $"/>
<generation date="$Date: 2009/05/05 23:06:35 $"/>
<language type="el"/>
<variant type="POLYTON"/>
</identity>
<localeDisplayNames>
<languages>
<language type="ar">Ἀραβικά</language>
<language type="arc">Ἀραμαϊκά</language>
<language type="cy">Οὐαλικά</language>
<language type="egy">Αἰγυπτιακὰ (ἀρχαῖα)</language>
<language type="el">Ἑλληνικά</language>
<language type="en">Ἀγγλικά</language>
<language type="es">Ἱσπανικά</language>
<language type="et">Ἐσθονικά</language>
<language type="ga">Ἰρλανδικά</language>
<language type="gd">Σκωτικὰ κελτικά</language>
<language type="grc">Ἀρχαῖα Ἑλληνικά</language>
<language type="he">Ἑβραϊκά</language>
<language type="hu">Οὑγγρικά</language>
<language type="hy">Ἀρμενικά</language>
<language type="id">Ἰνδονησιακά</language>
<language type="ine">Ἰνδοευρωπαϊκὰ (ἄλλα)</language>
<language type="ira">Ἰρανικά</language>
<language type="is">Ἰσλανδικά</language>
<language type="it">Ἰταλικά</language>
<language type="ja">Ἰαπωνικά</language>
<language type="mul">Πολλαπλές γλῶσσες</language>
<language type="nai">Ἰνδιανικὰ βόρειας Ἀμερικῆς (ἄλλα)</language>
<language type="nl">Ὁλλανδικά</language>
<language type="ota">Τουρκικά, ὀθωμανικὰ (1500-1928)</language>
<language type="peo">Ἀρχαῖα περσικὰ (600-400 π.Χ.)</language>
<language type="phi">Φιλιππινέζικα (ἄλλα)</language>
<language type="sem">Σημιτικὰ (ἄλλα)</language>
<language type="sla">Σλαβικὰ (ἄλλα)</language>
<language type="sq">Ἀλβανικά</language>
<language type="uk">Οὐκρανικά</language>
<language type="yi">Ἰουδαϊκά</language>
</languages>
<scripts>
<script type="Arab">Ἀραβικό</script>
<script type="Armn">Ἀρμενικό</script>
<script type="Ethi">Αἰθιοπικό</script>
<script type="Grek">Ἑλληνικό</script>
<script type="Hebr">Ἑβραϊκό</script>
</scripts>
<territories>
<territory type="AD">Ἀνδόρα</territory>
<territory type="AE">Ἠνωμένα Ἀραβικὰ Ἐμιράτα</territory>
<territory type="AF">Ἀφγανιστάν</territory>
<territory type="AG">Ἀντίγκουα καὶ Μπαρμπούντα</territory>
<territory type="AI">Ἀνγκουίλα</territory>
<territory type="AL">Ἀλβανία</territory>
<territory type="AM">Ἀρμενία</territory>
<territory type="AN">Ὁλλανδικὲς Ἀντίλλες</territory>
<territory type="AO">Ἀνγκόλα</territory>
<territory type="AQ">Ἀνταρκτική</territory>
<territory type="AR">Ἀργεντινή</territory>
<territory type="AS">Ἀμερικανικὴ Σαμόα</territory>
<territory type="AT">Αὐστρία</territory>
<territory type="AU">Αὐστραλία</territory>
<territory type="AW">Ἀρούμπα</territory>
<territory type="AZ">Ἀζερμπαϊτζάν</territory>
<territory type="BA">Βοσνία - Ἐρζεγοβίνη</territory>
<territory type="BM">Βερμοῦδες</territory>
<territory type="BV">Νῆσος Μπουβέ</territory>
<territory type="CC">Νῆσοι Κόκος (Κήλινγκ)</territory>
<territory type="CD">Κονγκό, Λαϊκὴ Δημοκρατία τοῦ</territory>
<territory type="CF">Κεντροαφρικανικὴ Δημοκρατία</territory>
<territory type="CH">Ἑλβετία</territory>
<territory type="CI">Ἀκτὴ Ἐλεφαντοστού</territory>
<territory type="CK">Νῆσοι Κούκ</territory>
<territory type="CV">Πράσινο Ἀκρωτήριο</territory>
<territory type="CX">Νῆσος Χριστουγέννων</territory>
<territory type="DO">Δομινικανὴ Δημοκρατία</territory>
<territory type="DZ">Ἀλγερία</territory>
<territory type="EC">Ἰσημερινός</territory>
<territory type="EE">Ἐσθονία</territory>
<territory type="EG">Αἴγυπτος</territory>
<territory type="EH">Δυτικὴ Σαχάρα</territory>
<territory type="ER">Ἐρυθραία</territory>
<territory type="ES">Ἱσπανία</territory>
<territory type="ET">Αἰθιοπία</territory>
<territory type="FM">Μικρονησία, Ὁμόσπονδες Πολιτεῖες τῆς</territory>
<territory type="FO">Νῆσοι Φερόες</territory>
<territory type="GB">Ἡνωμένο Βασίλειο</territory>
<territory type="GF">Γαλλικὴ Γουιάνα</territory>
<territory type="GQ">Ἰσημερινὴ Γουινέα</territory>
<territory type="GR">Ἑλλάδα</territory>
<territory type="GS">Νότια Γεωργία καὶ Νότιες Νήσοι Σάντουιτς</territory>
<territory type="HK">Χὸνγκ Κόνγκ, Εἰδικὴ Διοικητικὴ Περιφέρεια τῆς Κίνας</territory>
<territory type="HM">Νῆσοι Χὲρντ καὶ Μακντόναλντ</territory>
<territory type="HN">Ὁνδούρα</territory>
<territory type="HT">Ἁϊτή</territory>
<territory type="HU">Οὑγγαρία</territory>
<territory type="ID">Ἰνδονησία</territory>
<territory type="IE">Ἰρλανδία</territory>
<territory type="IL">Ἰσραήλ</territory>
<territory type="IN">Ἰνδία</territory>
<territory type="IO">Βρετανικὰ Ἐδάφη Ἰνδικοῦ Ὠκεανοῦ</territory>
<territory type="IQ">Ἰράκ</territory>
<territory type="IR">Ἰράν, Ἰσλαμικὴ Δημοκρατία τοῦ</territory>
<territory type="IS">Ἰσλανδία</territory>
<territory type="IT">Ἰταλία</territory>
<territory type="JO">Ἰορδανία</territory>
<territory type="JP">Ἰαπωνία</territory>
<territory type="KN">Σαὶντ Κὶτς καὶ Νέβις</territory>
<territory type="KY">Νῆσοι Κέιμαν</territory>
<territory type="LA">Λατινικὴ Ἀμερική</territory>
<territory type="LC">Ἁγία Λουκία</territory>
<territory type="LK">Σρὶ Λάνκα</territory>
<territory type="LU">Λουξεμβοῦργο</territory>
<territory type="MD">Μολδαβία, Δημοκρατία τῆς</territory>
<territory type="MH">Νῆσοι Μάρσαλ</territory>
<territory type="ML">Μαλί</territory>
<territory type="MO">Μακάο, Εἰδικὴ Διοικητικὴ Περιφέρεια τῆς Κίνας</territory>
<territory type="MP">Νῆσοι Βόρειες Μαριάνες</territory>
<territory type="NF">Νῆσος Νόρφολκ</territory>
<territory type="NL">Ὁλλανδία</territory>
<territory type="OM">Ὀμάν</territory>
<territory type="PF">Γαλλικὴ Πολυνησία</territory>
<territory type="PM">Σαὶντ Πιὲρ καὶ Μικελόν</territory>
<territory type="PS">Παλαιστινιακὰ Ἐδάφη</territory>
<territory type="SA">Σαουδικὴ Ἀραβία</territory>
<territory type="SB">Νῆσοι Σολομῶντος</territory>
<territory type="SH">Ἁγία Ἑλένη</territory>
<territory type="SJ">Νῆσοι Σβάλμπαρ καὶ Γιὰν Μαγιέν</territory>
<territory type="SM">Ἅγιος Μαρίνος</territory>
<territory type="ST">Σάο Τομὲ καὶ Πρίνσιπε</territory>
<territory type="SV">Ἒλ Σαλβαδόρ</territory>
<territory type="SY">Συρία, Ἀραβικὴ Δημοκρατία τῆς</territory>
<territory type="TC">Νῆσοι Τὲρκς καὶ Κάικος</territory>
<territory type="TD">Τσάντ</territory>
<territory type="TF">Γαλλικὰ Νότια Ἐδάφη</territory>
<territory type="TL">Ἀνατολικὸ Τιμόρ</territory>
<territory type="TT">Τρινιδὰδ καὶ Τομπάγκο</territory>
<territory type="UA">Οὐκρανία</territory>
<territory type="UG">Οὐγκάντα</territory>
<territory type="UM">Ἀπομακρυσμένες Νησίδες τῶν Ἡνωμένων Πολιτειῶν</territory>
<territory type="US">Ἡνωμένες Πολιτεῖες</territory>
<territory type="UY">Οὐρουγουάη</territory>
<territory type="UZ">Οὐζμπεκιστάν</territory>
<territory type="VA">Ἁγία Ἕδρα (Βατικανό)</territory>
<territory type="VC">Ἅγιος Βικέντιος καὶ Γρεναδίνες</territory>
<territory type="VG">Βρετανικὲς Παρθένοι Νῆσοι</territory>
<territory type="VI">Ἀμερικανικὲς Παρθένοι Νῆσοι</territory>
<territory type="WF">Νῆσοι Οὐάλλις καὶ Φουτουνά</territory>
<territory type="YE">Ὑεμένη</territory>
<territory type="ZA">Νότια Ἀφρική</territory>
</territories>
<keys>
<key type="calendar">Ἡμερολόγιο</key>
</keys>
<types>
<type type="buddhist" key="calendar">Βουδιστικὸ ἡμερολόγιο</type>
<type type="chinese" key="calendar">Κινεζικὸ ἡμερολόγιο</type>
<type type="direct" key="collation">Σειρὰ Direct</type>
<type type="gregorian" key="calendar">Γρηγοριανὸ ἡμερολόγιο</type>
<type type="hebrew" key="calendar">Ἑβραϊκὸ ἡμερολόγιο</type>
<type type="islamic" key="calendar">Ἰσλαμικὸ ἡμερολόγιο</type>
<type type="islamic-civil" key="calendar">Ἰσλαμικὸ ἀστικὸ ἡμερολόγιο</type>
<type type="japanese" key="calendar">Ἰαπωνικὸ ἡμερολόγιο</type>
<type type="phonebook" key="collation">Σειρὰ τηλεφωνικοῦ καταλόγου</type>
<type type="pinyin" key="collation">Σειρὰ Πίνγιν</type>
<type type="stroke" key="collation">Σειρὰ Stroke</type>
</types>
</localeDisplayNames>
<characters>
<exemplarCharacters>[α ἀ ἄ ἂ ἆ ἁ ἅ ἃ ἇ ά ὰ ᾶ β-ε ἐ ἔ ἒ ἑ ἕ ἓ έ ὲ ζ η ἠ ἤ ἢ ἦ ἡ ἥ ἣ ἧ ή ὴ ῆ θ ι ἰ ἴ ἲ ἶ ἱ ἵ ἳ ἷ ί ὶ ῖ ϊ ΐ ῒ ῗ κ-ο ὄ ὂ ὃ ό ὸ π ρ σ ς τ υ ὐ ὔ ὒ ὖ ὑ ὕ ὓ ὗ ύ ὺ ῦ ϋ ΰ ῢ ῧ φ-ω ὤ ὢ ὦ ὥ ὣ ὧ ώ ὼ ῶ]</exemplarCharacters>
</characters>
<delimiters>
<alternateQuotationStart></alternateQuotationStart>
</delimiters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">Ἰαν</month>
<month type="4">Ἀπρ</month>
<month type="6">Ἰουν</month>
<month type="7">Ἰουλ</month>
<month type="8">Αὐγ</month>
<month type="10">Ὀκτ</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Ἰανουαρίου</month>
<month type="4">Ἀπριλίου</month>
<month type="6">Ἰουνίου</month>
<month type="7">Ἰουλίου</month>
<month type="8">Αὐγούστου</month>
<month type="10">Ὀκτωβρίου</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="abbreviated">
<month type="1">Ἰαν</month>
<month type="4">Ἀπρ</month>
<month type="6">Ἰουν</month>
<month type="7">Ἰουλ</month>
<month type="8">Αὐγ</month>
<month type="10">Ὀκτ</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Ἰανουάριος</month>
<month type="4">Ἀπρίλιος</month>
<month type="6">Ἰούνιος</month>
<month type="7">Ἰούλιος</month>
<month type="8">Αὔγουστος</month>
<month type="10">Ὀκτώβριος</month>
</monthWidth>
</monthContext>
</months>
</calendar>
</calendars>
</dates>
<numbers>
<currencies>
<currency type="ADP">
<displayName>Πεσέτα Ἀνδόρας</displayName>
</currency>
<currency type="AED">
<displayName>Ντιρὰμ Ἡνωμένων Ἀραβικῶν Ἐμιράτων</displayName>
</currency>
<currency type="ALL">
<displayName>Λὲκ Ἀλβανίας</displayName>
</currency>
<currency type="AMD">
<displayName>Dram Ἀρμενίας</displayName>
</currency>
<currency type="ANG">
<displayName>Γκίλντα Ὁλλανδικῶν Ἀντιλλῶν</displayName>
</currency>
<currency type="AOA">
<displayName>Kwanza Ἀνγκόλας</displayName>
</currency>
<currency type="AOK">
<displayName>Kwanza Ἀνγκόλας (1977-1990)</displayName>
</currency>
<currency type="AON">
<displayName>Νέα Kwanza Ἀνγκόλας (1990-2000)</displayName>
</currency>
<currency type="AOR">
<displayName>Kwanza Reajustado Ἀνγκόλας (1995-1999)</displayName>
</currency>
<currency type="ARA">
<displayName>Austral Ἀργεντινῆς</displayName>
</currency>
<currency type="ARP">
<displayName>Πέσο Ἀργεντινῆς (1983-1985)</displayName>
</currency>
<currency type="ARS">
<displayName>Πέσο Ἀργεντινῆς</displayName>
</currency>
<currency type="ATS">
<displayName>Σελίνι Αὐστρίας</displayName>
</currency>
<currency type="AUD">
<displayName>Δολάριο Αὐστραλίας</displayName>
</currency>
<currency type="AWG">
<displayName>Γκίλντα Ἀρούμπα</displayName>
</currency>
<currency type="AZM">
<displayName>Μανὰτ Ἀζερμπαϊτζάν</displayName>
</currency>
<currency type="BAD">
<displayName>Δηνάριο Βοσνίας-Ἑρζεγοβίνης</displayName>
</currency>
<currency type="BAM">
<displayName>Μάρκο Βοσνίας-Ἑρζεγοβίνης</displayName>
</currency>
<currency type="BEL">
<displayName>Φράγκο Βελγίου (οἰκονομικό)</displayName>
</currency>
<currency type="BGL">
<displayName>Μεταλλικὸ Λὲβ Βουλγαρίας</displayName>
</currency>
<currency type="BGN">
<displayName>Νέο Λὲβ Βουλγαρίας</displayName>
</currency>
<currency type="CAD">
<displayName>Δολάριο Καναδᾶ</displayName>
</currency>
<currency type="CHF">
<displayName>Φράγκο Ἑλβετίας</displayName>
</currency>
<currency type="CLF">
<displayName>Unidades de Fomento Χιλῆς</displayName>
</currency>
<currency type="CLP">
<displayName>Πέσο Χιλῆς</displayName>
</currency>
<currency type="CSK">
<displayName>Σκληρὴ Κορόνα Τσεχοσλοβακίας</displayName>
</currency>
<currency type="CVE">
<displayName>Ἐσκούδο Πράσινου Ἀκρωτηρίου</displayName>
</currency>
<currency type="DDM">
<displayName>Ostmark Ἀνατολικῆς Γερμανίας</displayName>
</currency>
<currency type="DZD">
<displayName>Δηνάριο Ἀλγερίας</displayName>
</currency>
<currency type="ECS">
<displayName>Sucre Ἰσημερινοῦ</displayName>
</currency>
<currency type="ECV">
<displayName>Unidad de Valor Constante (UVC) Ἰσημερινοῦ</displayName>
</currency>
<currency type="EEK">
<displayName>Κορόνα Ἐστονίας</displayName>
</currency>
<currency type="EGP">
<displayName>Λίρα Αἰγύπτου</displayName>
</currency>
<currency type="ERN">
<displayName>Nakfa Ἐρυθραίας</displayName>
</currency>
<currency type="ESP">
<displayName>Πεσέτα Ἱσπανίας</displayName>
</currency>
<currency type="ETB">
<displayName>Birr Αἰθιοπίας</displayName>
</currency>
<currency type="EUR">
<displayName>Εὐρώ</displayName>
</currency>
<currency type="FKP">
<displayName>Λίρα Νήσων Φώλκλαντ</displayName>
</currency>
<currency type="GMD">
<displayName>Dalasi Γκάμπιας</displayName>
</currency>
<currency type="GQE">
<displayName>Ekwele Guineana Ἰσημερινῆς Γουινέας</displayName>
</currency>
<currency type="GTQ">
<displayName>Quetzal Γουατεμάλας</displayName>
</currency>
<currency type="GWE">
<displayName>Γκινέα Ἐσκούδο Πορτογαλίας</displayName>
</currency>
<currency type="HKD">
<displayName>Δολάριο Χὸνγκ Κόνγκ</displayName>
</currency>
<currency type="HTG">
<displayName>Gourde Ἁϊτῆς</displayName>
</currency>
<currency type="HUF">
<displayName>Φιορίνι Οὑγγαρίας</displayName>
</currency>
<currency type="IDR">
<displayName>Ρούπια Ἰνδονησίας</displayName>
</currency>
<currency type="IEP">
<displayName>Λίρα Ἰρλανδίας</displayName>
</currency>
<currency type="ILP">
<displayName>Λίρα Ἰσραήλ</displayName>
</currency>
<currency type="ILS">
<displayName>Νέο Sheqel Ἰσραήλ</displayName>
</currency>
<currency type="INR">
<displayName>Ρούπια Ἰνδίας</displayName>
</currency>
<currency type="IQD">
<displayName>Δηνάριο Ἰράκ</displayName>
</currency>
<currency type="IRR">
<displayName>Rial Ἰράκ</displayName>
</currency>
<currency type="ISK">
<displayName>Κορόνα Ἰσλανδίας</displayName>
</currency>
<currency type="ITL">
<displayName>Λιρέτα Ἰταλίας</displayName>
</currency>
<currency type="JOD">
<displayName>Δηνάριο Ἰορδανίας</displayName>
</currency>
<currency type="JPY">
<displayName>Γιὲν Ἰαπωνίας</displayName>
</currency>
<currency type="LKR">
<displayName>Ρούπια Σρὶ Λάνκας</displayName>
</currency>
<currency type="MOP">
<displayName>Pataca Μακάου</displayName>
</currency>
<currency type="MXN">
<displayName>Πέσο Μεξικοῦ</displayName>
</currency>
<currency type="MXP">
<displayName>Ἀσημένιο Πέσο Μεξικοῦ (1861-1992)</displayName>
</currency>
<currency type="MXV">
<displayName>Unidad de Inversion (UDI) Μεξικοῦ</displayName>
</currency>
<currency type="MZE">
<displayName>Ἐσκούδο Μοζαμβίκης</displayName>
</currency>
<currency type="NAD">
<displayName>Δολάριο Ναμίμπιας</displayName>
</currency>
<currency type="NIO">
<displayName>Χρυσὴ Κόρδοβα Νικαράγουας</displayName>
</currency>
<currency type="NLG">
<displayName>Γκίλντα Ὁλλανδίας</displayName>
</currency>
<currency type="PAB">
<displayName>Μπαλμπόα Παναμᾶ</displayName>
</currency>
<currency type="PGK">
<displayName>Kina Παπούα Νέα Γουινέας</displayName>
</currency>
<currency type="PTE">
<displayName>Ἐσκούδο Πορτογαλίας</displayName>
</currency>
<currency type="PYG">
<displayName>Γκουαρανὶ Παραγουάης</displayName>
</currency>
<currency type="SBD">
<displayName>Δολάριο Νήσων Σολομῶντος</displayName>
</currency>
<currency type="SCR">
<displayName>Ρούπια Σεϋχελῶν</displayName>
</currency>
<currency type="SHP">
<displayName>Λίρα Ἀγίας Ἑλένης</displayName>
</currency>
<currency type="SUR">
<displayName>Σοβιετικὸ Ρούβλι</displayName>
</currency>
<currency type="SVC">
<displayName>Colon Ἒλ Σαλβαδόρ</displayName>
</currency>
<currency type="SZL">
<displayName>Lilangeni Ζουαζιλάνδης</displayName>
</currency>
<currency type="THB">
<displayName>Μπὰτ Ταϊλάνδης</displayName>
</currency>
<currency type="TMM">
<displayName>Μανὰτ Τουρκμενιστάν</displayName>
</currency>
<currency type="TPE">
<displayName>Ἐσκούδο Τιμόρ</displayName>
</currency>
<currency type="TTD">
<displayName>Δολάριο Τρινιδὰδ καὶ Τομπάγκο</displayName>
</currency>
<currency type="UAH">
<displayName>Hryvnia Οὐκρανίας</displayName>
</currency>
<currency type="UAK">
<displayName>Karbovanetz Οὐκρανίας</displayName>
</currency>
<currency type="UGS">
<displayName>Σελίνι Οὐγκάντας (1966-1987)</displayName>
</currency>
<currency type="UGX">
<displayName>Σελίνι Οὐγκάντας</displayName>
</currency>
<currency type="USN">
<displayName>Δολάριο ΗΠΑ (Ἑπόμενη ἡμέρα)</displayName>
</currency>
<currency type="USS">
<displayName>Δολάριο ΗΠΑ (Ἴδια ἡμέρα)</displayName>
</currency>
<currency type="UYP">
<displayName>Πέσο Οὐρουγουάης (1975-1993)</displayName>
</currency>
<currency type="UYU">
<displayName>Πέσο Uruguayo Οὐρουγουάης</displayName>
</currency>
<currency type="UZS">
<displayName>Sum Οὐζμπεκιστάν</displayName>
</currency>
<currency type="VEB">
<displayName>Μπολιβὰλ Βενεζουέλας</displayName>
</currency>
<currency type="WST">
<displayName>Tala Δυτικῆς Σαμόας</displayName>
</currency>
<currency type="XBA">
<displayName>Εὐρωπαϊκὴ Σύνθετη Μονάδα</displayName>
</currency>
<currency type="XBB">
<displayName>Εὐρωπαϊκὴ Νομισματικὴ Μονάδα</displayName>
</currency>
<currency type="XBC">
<displayName>Εὐρωπαϊκὴ Μονάδα Λογαριασμοῦ (XBC)</displayName>
</currency>
<currency type="XBD">
<displayName>Εὐρωπαϊκὴ Μονάδα Λογαριασμοῦ (XBD)</displayName>
</currency>
<currency type="XCD">
<displayName>Δολάριο Ἀνατολικῆς Καραϊβικῆς</displayName>
</currency>
<currency type="XDR">
<displayName>Εἰδικὰ Δικαιώματα Ἀνάληψης</displayName>
</currency>
<currency type="XEU">
<displayName>Εὐρωπαϊκὴ Συναλλαγματικὴ Μονάδα</displayName>
</currency>
<currency type="XFO">
<displayName>Χρυσὸ Φράγκο Γαλλίας</displayName>
</currency>
<currency type="YDD">
<displayName>Δηνάριο Ὑεμένης</displayName>
</currency>
<currency type="YER">
<displayName>Rial Ὑεμένης</displayName>
</currency>
<currency type="YUD">
<displayName>Μεταλλικὸ Δηνάριο Γιουγκοσλαβίας</displayName>
</currency>
<currency type="ZAL">
<displayName>Ραντ Νότιας Ἀφρικῆς (οἰκονομικό)</displayName>
</currency>
<currency type="ZAR">
<displayName>Ρὰντ Νότιας Ἀφρικῆς</displayName>
</currency>
</currencies>
</numbers>
<posix>
<messages>
<yesstr>Ναί</yesstr>
<nostr>Ὄχι</nostr>
</messages>
</posix>
</ldml>

View File

@ -1,185 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.9 $"/>
<generation date="$Date: 2009/05/05 23:06:35 $"/>
<language type="en"/>
<script type="Shaw"/>
</identity>
<characters>
<exemplarCharacters>[𐑐-𐑿]</exemplarCharacters>
<exemplarCharacters type="auxiliary">[a-z]</exemplarCharacters>
<exemplarCharacters type="currencySymbol">[a-z]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">·𐑡𐑨</month>
<month type="2">·𐑓𐑧</month>
<month type="3">·𐑥𐑸</month>
<month type="4">·𐑱𐑐</month>
<month type="5">·𐑥𐑱</month>
<month type="6">·𐑡𐑵</month>
<month type="7">·𐑡𐑫</month>
<month type="8">·𐑪𐑜</month>
<month type="9">·𐑕𐑧</month>
<month type="10">·𐑷𐑒</month>
<month type="11">·𐑯𐑴</month>
<month type="12">·𐑛𐑭</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">·𐑡𐑨𐑙𐑘𐑭𐑢𐑺𐑰</month>
<month type="2">·𐑓𐑧𐑚𐑘𐑵𐑢𐑺𐑰</month>
<month type="3">·𐑥𐑸𐑗</month>
<month type="4">·𐑱𐑐𐑮𐑭𐑤</month>
<month type="5">·𐑥𐑱</month>
<month type="6">·𐑡𐑵𐑯</month>
<month type="7">·𐑡𐑫𐑤𐑲</month>
<month type="8">·𐑪𐑜𐑭𐑕𐑑</month>
<month type="9">·𐑕𐑧𐑐𐑑𐑧𐑥𐑚𐑸</month>
<month type="10">·𐑷𐑒𐑑𐑴𐑚𐑸</month>
<month type="11">·𐑯𐑴𐑝𐑧𐑥𐑚𐑸</month>
<month type="12">·𐑛𐑭𐑕𐑧𐑥𐑚𐑸</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">𐑡</month>
<month type="2">𐑓</month>
<month type="3">𐑥</month>
<month type="4">𐑱</month>
<month type="5">𐑥</month>
<month type="6">𐑡</month>
<month type="7">𐑡</month>
<month type="8">𐑪</month>
<month type="9">𐑕</month>
<month type="10">𐑷</month>
<month type="11">𐑯</month>
<month type="12">𐑛</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">·𐑕𐑭</day>
<day type="mon">·𐑥𐑭</day>
<day type="tue">·𐑑𐑵</day>
<day type="wed">·𐑢𐑧</day>
<day type="thu">·𐑔𐑻</day>
<day type="fri">·𐑓𐑮</day>
<day type="sat">·𐑕𐑨</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">·𐑕𐑭𐑙𐑛𐑱</day>
<day type="mon">·𐑥𐑭𐑙𐑛𐑱</day>
<day type="tue">·𐑑𐑵𐑟𐑛𐑱</day>
<day type="wed">·𐑢𐑧𐑙𐑟𐑛𐑱</day>
<day type="thu">·𐑔𐑻𐑟𐑛𐑱</day>
<day type="fri">·𐑓𐑮𐑲𐑛𐑱</day>
<day type="sat">·𐑕𐑨𐑛𐑻𐑛𐑱</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">𐑕</day>
<day type="mon">𐑥</day>
<day type="tue">𐑑</day>
<day type="wed">𐑢</day>
<day type="thu">𐑔</day>
<day type="fri">𐑓</day>
<day type="sat">𐑕</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">𐑒1</quarter>
<quarter type="2">𐑒2</quarter>
<quarter type="3">𐑒3</quarter>
<quarter type="4">𐑒4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">1𐑕𐑑 𐑒𐑢𐑸𐑛𐑸</quarter>
<quarter type="2">2𐑯𐑛 𐑒𐑢𐑸𐑛𐑸</quarter>
<quarter type="3">3𐑻𐑛 𐑒𐑢𐑸𐑛𐑸</quarter>
<quarter type="4">4𐑹𐑔 𐑒𐑢𐑸𐑛𐑸</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>𐑨𐑥</am>
<pm>𐑐𐑥</pm>
<eras>
<eraNames>
<era type="0">𐑚𐑰𐑓𐑪𐑮 ·𐑒𐑮𐑲𐑕𐑑</era>
<era type="1">𐑨𐑙𐑴 𐑛𐑪𐑥𐑦𐑙𐑰</era>
</eraNames>
<eraAbbr>
<era type="0">𐑚·𐑒</era>
<era type="1">𐑨𐑛</era>
</eraAbbr>
<eraNarrow>
<era type="0">𐑚</era>
<era type="1">𐑨</era>
</eraNarrow>
</eras>
<fields>
<field type="era">
<displayName>𐑽𐑭</displayName>
</field>
<field type="year">
<displayName>𐑘𐑽</displayName>
</field>
<field type="month">
<displayName>𐑥𐑭𐑙𐑔</displayName>
</field>
<field type="week">
<displayName>𐑢𐑰𐑒</displayName>
</field>
<field type="day">
<displayName>𐑛𐑱</displayName>
<relative type="-3">𐑔𐑮𐑰 𐑛𐑱𐑟 𐑭𐑜𐑴</relative>
<relative type="-2">𐑞 𐑛𐑱 𐑚𐑰𐑓𐑹 𐑘𐑧𐑕𐑑𐑸𐑛𐑱</relative>
<relative type="-1">𐑘𐑧𐑕𐑑𐑸𐑛𐑱</relative>
<relative type="0">𐑑𐑭𐑛𐑱</relative>
<relative type="2">𐑞 𐑛𐑱 𐑨𐑓𐑑𐑸 𐑑𐑭𐑥𐑸𐑴</relative>
<relative type="3">𐑔𐑮𐑰 𐑛𐑱𐑟 𐑓𐑮𐑭𐑥 𐑙𐑬</relative>
</field>
<field type="weekday">
<displayName>𐑛𐑱 𐑝 𐑞 𐑢𐑰𐑒</displayName>
</field>
<field type="dayperiod">
<displayName>𐑨𐑥/𐑐𐑥</displayName>
</field>
<field type="hour">
<displayName>𐑬𐑮</displayName>
</field>
<field type="minute">
<displayName>𐑥𐑦𐑙𐑦𐑑</displayName>
</field>
<field type="second">
<displayName>𐑕𐑧𐑒𐑭𐑙𐑛</displayName>
</field>
<field type="zone">
<displayName>𐑟𐑴𐑯</displayName>
</field>
</fields>
</calendar>
</calendars>
<timeZoneNames>
<gmtFormat>·𐑜𐑥𐑑{0}</gmtFormat>
<gmtZeroFormat>·𐑜𐑥𐑑</gmtZeroFormat>
<regionFormat>{0} 𐑑𐑲𐑥</regionFormat>
</timeZoneNames>
</dates>
<posix>
<messages>
<yesstr>𐑘𐑧𐑕:𐑘</yesstr>
<nostr>𐑯𐑴:𐑯</nostr>
</messages>
</posix>
</ldml>

View File

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.30 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="gaa"/>
</identity>
<characters>
<exemplarCharacters>[a-z]</exemplarCharacters>
</characters>
<delimiters>
<quotationStart>'</quotationStart>
<quotationEnd>'</quotationEnd>
<alternateQuotationStart>&quot;</alternateQuotationStart>
<alternateQuotationEnd>&quot;</alternateQuotationEnd>
</delimiters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">Aha</month>
<month type="2">Ofl</month>
<month type="3">Och</month>
<month type="4">Abe</month>
<month type="5">Agb</month>
<month type="6">Otu</month>
<month type="7">Maa</month>
<month type="8">Man</month>
<month type="9">Gbo</month>
<month type="10">Ant</month>
<month type="11">Ale</month>
<month type="12">Afu</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Aharabata</month>
<month type="2">Oflo</month>
<month type="3">Ochokrikri</month>
<month type="4">Abeibee</month>
<month type="5">Agbeinaa</month>
<month type="6">Otukwadan</month>
<month type="7">Maawe</month>
<month type="8">Manyawale</month>
<month type="9">Gbo</month>
<month type="10">Anton</month>
<month type="11">Alemle</month>
<month type="12">Afuabee</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">Ho</day>
<day type="mon">Dzu</day>
<day type="tue">Dzf</day>
<day type="wed">Sho</day>
<day type="thu">Soo</day>
<day type="fri">Soh</day>
<day type="sat">Ho</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">Hogbaa</day>
<day type="mon">Dzu</day>
<day type="tue">Dzufo</day>
<day type="wed">Sho</day>
<day type="thu">Soo</day>
<day type="fri">Sohaa</day>
<day type="sat">Ho</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>LB</am>
<pm>SN</pm>
<eras>
<eraNames>
<era type="0">Dani Jesu</era>
<era type="1">KJ</era>
</eraNames>
<eraAbbr>
<era type="0">DJ</era>
<era type="1">KJ</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<currencies>
<currency type="GHC">
<displayName>Sidi</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.17 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="gaa"/>
<territory type="GH"/>
</identity>
</ldml>

View File

@ -1,503 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.65 $"/>
<generation date="$Date: 2009/06/15 04:15:33 $"/>
<language type="gez"/>
</identity>
<localeDisplayNames>
<languages>
<language type="aa">አፋርኛ</language>
<language type="ab">አብሐዚኛ</language>
<language type="af">አፍሪቃንስኛ</language>
<language type="am">አምሐረኛ</language>
<language type="ar">ዐርቢኛ</language>
<language type="as">አሳሜዛዊ</language>
<language type="ay">አያማርኛ</language>
<language type="az">አዜርባይጃንኛ</language>
<language type="ba">ባስኪርኛ</language>
<language type="be">ቤላራሻኛ</language>
<language type="bg">ቡልጋሪኛ</language>
<language type="bh">ቢሃሪ</language>
<language type="bi">ቢስላምኛ</language>
<language type="bn">በንጋሊኛ</language>
<language type="bo">ትበትንኛ</language>
<language type="br">ብሬቶንኛ</language>
<language type="byn">ብሊን</language>
<language type="ca">ካታላንኛ</language>
<language type="co">ኮርሲካኛ</language>
<language type="cs">ቼክኛ</language>
<language type="cy">ወልሽ</language>
<language type="da">ዴኒሽ</language>
<language type="de">ጀርመን</language>
<language type="dz">ድዞንግኻኛ</language>
<language type="el">ግሪክኛ</language>
<language type="en">እንግሊዝኛ</language>
<language type="eo">ኤስፐራንቶ</language>
<language type="es">ስፓኒሽ</language>
<language type="et">ኤስቶኒአን</language>
<language type="eu">ባስክኛ</language>
<language type="fa">ፐርሲያኛ</language>
<language type="fi">ፊኒሽ</language>
<language type="fj">ፊጂኛ</language>
<language type="fo">ፋሮኛ</language>
<language type="fr">ፈረንሳይኛ</language>
<language type="fy">ፍሪስኛ</language>
<language type="ga">አይሪሽ</language>
<language type="gd">እስኮትስ፡ጌልክኛ</language>
<language type="gez">ግዕዝኛ</language>
<language type="gl">ጋለጋኛ</language>
<language type="gn">ጓራኒኛ</language>
<language type="gu">ጉጃርቲኛ</language>
<language type="ha">ሃውሳኛ</language>
<language type="he">ዕብራስጥ</language>
<language type="hi">ሐንድኛ</language>
<language type="hr">ክሮሽያንኛ</language>
<language type="hu">ሀንጋሪኛ</language>
<language type="hy">አርመናዊ</language>
<language type="ia">ኢንቴርሊንጓ</language>
<language type="id">እንዶኒሲኛ</language>
<language type="ie">እንተርሊንግወ</language>
<language type="ik">እኑፒያቅኛ</language>
<language type="is">አይስላንድኛ</language>
<language type="it">ጣሊያንኛ</language>
<language type="iu">እኑክቲቱትኛ</language>
<language type="ja">ጃፓንኛ</language>
<language type="jv">ጃቫንኛ</language>
<language type="ka">ጊዮርጊያን</language>
<language type="kk">ካዛክኛ</language>
<language type="kl">ካላሊሱትኛ</language>
<language type="km">ክመርኛ</language>
<language type="kn">ካናዳኛ</language>
<language type="ko">ኮሪያኛ</language>
<language type="ks">ካሽሚርኛ</language>
<language type="ku">ኩርድሽኛ</language>
<language type="ky">ኪርጊዝኛ</language>
<language type="la">ላቲንኛ</language>
<language type="ln">ሊንጋላኛ</language>
<language type="lo">ላውስኛ</language>
<language type="lt">ሊቱአኒያን</language>
<language type="lv">ላትቪያን</language>
<language type="mg">ማላጋስኛ</language>
<language type="mi">ማዮሪኛ</language>
<language type="mk">ማከዶኒኛ</language>
<language type="ml">ማላያላምኛ</language>
<language type="mn">ሞንጎላዊኛ</language>
<language type="mo">ሞልዳቫዊና</language>
<language type="mr">ማራዚኛ</language>
<language type="ms">ማላይኛ</language>
<language type="mt">ማልቲስኛ</language>
<language type="my">ቡርማኛ</language>
<language type="na">ናኡሩ</language>
<language type="ne">ኔፓሊኛ</language>
<language type="nl">ደች</language>
<language type="no">ኖርዌጂያን</language>
<language type="oc">ኦኪታንኛ</language>
<language type="om">ኦሮምኛ</language>
<language type="or">ኦሪያኛ</language>
<language type="pa">ፓንጃቢኛ</language>
<language type="pl">ፖሊሽ</language>
<language type="ps">ፑሽቶኛ</language>
<language type="pt">ፖርቱጋሊኛ</language>
<language type="qu">ኵቿኛ</language>
<language type="rm">ሮማንስ</language>
<language type="rn">ሩንዲኛ</language>
<language type="ro">ሮማኒያን</language>
<language type="ru">ራሽኛ</language>
<language type="rw">ኪንያርዋንድኛ</language>
<language type="sa">ሳንስክሪትኛ</language>
<language type="sd">ሲንድሂኛ</language>
<language type="sg">ሳንጎኛ</language>
<language type="si">ስንሃልኛ</language>
<language type="sid">ሲዳምኛ</language>
<language type="sk">ስሎቫክኛ</language>
<language type="sl">ስሎቪኛ</language>
<language type="sm">ሳሞአኛ</language>
<language type="sn">ሾናኛ</language>
<language type="so">ሱማልኛ</language>
<language type="sq">ልቤኒኛ</language>
<language type="sr">ሰርቢኛ</language>
<language type="ss">ስዋቲኛ</language>
<language type="st">ሶዞኛ</language>
<language type="su">ሱዳንኛ</language>
<language type="sv">ስዊድንኛ</language>
<language type="sw">ስዋሂሊኛ</language>
<language type="ta">ታሚልኛ</language>
<language type="te">ተሉጉኛ</language>
<language type="tg">ታጂኪኛ</language>
<language type="th">ታይኛ</language>
<language type="ti">ትግርኛ</language>
<language type="tig">ትግረ</language>
<language type="tk">ቱርክመንኛ</language>
<language type="tl">ታጋሎገኛ</language>
<language type="tn">ጽዋናዊኛ</language>
<language type="to">ቶንጋ</language>
<language type="tr">ቱርክኛ</language>
<language type="ts">ጾንጋኛ</language>
<language type="tt">ታታርኛ</language>
<language type="tw">ትዊኛ</language>
<language type="ug">ኡዊግሁርኛ</language>
<language type="uk">ዩክረኒኛ</language>
<language type="ur">ኡርዱኛ</language>
<language type="uz">ኡዝበክኛ</language>
<language type="vi">ቪትናምኛ</language>
<language type="vo">ቮላፑክኛ</language>
<language type="wo">ዎሎፍኛ</language>
<language type="xh">ዞሳኛ</language>
<language type="yi">ይዲሻዊኛ</language>
<language type="yo">ዮሩባዊኛ</language>
<language type="za">ዡዋንግኛ</language>
<language type="zh">ቻይንኛ</language>
<language type="zu">ዙሉኛ</language>
</languages>
<scripts>
<script type="Latn">ላቲን</script>
</scripts>
<territories>
<territory type="AD">አንዶራ</territory>
<territory type="AE">የተባበሩት፡አረብ፡ኤምሬትስ</territory>
<territory type="AL">አልባኒያ</territory>
<territory type="AM">አርሜኒያ</territory>
<territory type="AN">ኔዘርላንድስ፡አንቲልስ</territory>
<territory type="AR">አርጀንቲና</territory>
<territory type="AT">ኦስትሪያ</territory>
<territory type="AU">አውስትሬሊያ</territory>
<territory type="AZ">አዘርባጃን</territory>
<territory type="BA">ቦስኒያ፡እና፡ሄርዞጎቪኒያ</territory>
<territory type="BB">ባርቤዶስ</territory>
<territory type="BE">ቤልጄም</territory>
<territory type="BG">ቡልጌሪያ</territory>
<territory type="BH">ባህሬን</territory>
<territory type="BM">ቤርሙዳ</territory>
<territory type="BO">ቦሊቪያ</territory>
<territory type="BR">ብራዚል</territory>
<territory type="BT">ቡህታን</territory>
<territory type="BY">ቤላሩስ</territory>
<territory type="BZ">ቤሊዘ</territory>
<territory type="CF">የመካከለኛው፡አፍሪካ፡ሪፐብሊክ</territory>
<territory type="CH">ስዊዘርላንድ</territory>
<territory type="CL">ቺሊ</territory>
<territory type="CM">ካሜሩን</territory>
<territory type="CN">ቻይና</territory>
<territory type="CO">ኮሎምቢያ</territory>
<territory type="CS">ሰርቢያ</territory>
<territory type="CV">ኬፕ፡ቬርዴ</territory>
<territory type="CY">ሳይፕረስ</territory>
<territory type="CZ">ቼክ፡ሪፑብሊክ</territory>
<territory type="DE">ጀርመን</territory>
<territory type="DK">ዴንማርክ</territory>
<territory type="DM">ዶሚኒካ</territory>
<territory type="DO">ዶሚኒክ፡ሪፑብሊክ</territory>
<territory type="DZ">አልጄሪያ</territory>
<territory type="EC">ኢኳዶር</territory>
<territory type="EE">ኤስቶኒያ</territory>
<territory type="EG">ግብጽ</territory>
<territory type="EH">ምዕራባዊ፡ሳህራ</territory>
<territory type="ER">ኤርትራ</territory>
<territory type="ES">ስፔን</territory>
<territory type="ET">ኢትዮጵያ</territory>
<territory type="FI">ፊንላንድ</territory>
<territory type="FJ">ፊጂ</territory>
<territory type="FM">ሚክሮኔዢያ</territory>
<territory type="FR">ፈረንሳይ</territory>
<territory type="GB">እንግሊዝ</territory>
<territory type="GE">ጆርጂያ</territory>
<territory type="GF">የፈረንሳይ፡ጉዊአና</territory>
<territory type="GM">ጋምቢያ</territory>
<territory type="GN">ጊኒ</territory>
<territory type="GQ">ኢኳቶሪያል፡ጊኒ</territory>
<territory type="GR">ግሪክ</territory>
<territory type="GW">ቢሳዎ</territory>
<territory type="GY">ጉያና</territory>
<territory type="HK">ሆንግ፡ኮንግ</territory>
<territory type="HR">ክሮኤሽያ</territory>
<territory type="HT">ሀይቲ</territory>
<territory type="HU">ሀንጋሪ</territory>
<territory type="ID">ኢንዶኔዢያ</territory>
<territory type="IE">አየርላንድ</territory>
<territory type="IL">እስራኤል</territory>
<territory type="IN">ህንድ</territory>
<territory type="IQ">ኢራቅ</territory>
<territory type="IS">አይስላንድ</territory>
<territory type="IT">ጣሊያን</territory>
<territory type="JM">ጃማይካ</territory>
<territory type="JO">ጆርዳን</territory>
<territory type="JP">ጃፓን</territory>
<territory type="KH">ካምቦዲያ</territory>
<territory type="KM">ኮሞሮስ</territory>
<territory type="KP">ደቡብ፡ኮሪያ</territory>
<territory type="KR">ሰሜን፡ኮሪያ</territory>
<territory type="KW">ክዌት</territory>
<territory type="LB">ሊባኖስ</territory>
<territory type="LT">ሊቱዌኒያ</territory>
<territory type="LV">ላትቪያ</territory>
<territory type="LY">ሊቢያ</territory>
<territory type="MA">ሞሮኮ</territory>
<territory type="MD">ሞልዶቫ</territory>
<territory type="MK">ማከዶኒያ</territory>
<territory type="MN">ሞንጎሊያ</territory>
<territory type="MO">ማካዎ</territory>
<territory type="MR">ሞሪቴኒያ</territory>
<territory type="MT">ማልታ</territory>
<territory type="MU">ማሩሸስ</territory>
<territory type="MX">ሜክሲኮ</territory>
<territory type="MY">ማሌዢያ</territory>
<territory type="NA">ናሚቢያ</territory>
<territory type="NC">ኒው፡ካሌዶኒያ</territory>
<territory type="NG">ናይጄሪያ</territory>
<territory type="NL">ኔዘርላንድ</territory>
<territory type="NO">ኖርዌ</territory>
<territory type="NP">ኔፓል</territory>
<territory type="NZ">ኒው፡ዚላንድ</territory>
<territory type="PE">ፔሩ</territory>
<territory type="PF">የፈረንሳይ፡ፖሊኔዢያ</territory>
<territory type="PG">ፓፑዋ፡ኒው፡ጊኒ</territory>
<territory type="PL">ፖላንድ</territory>
<territory type="PR">ፖርታ፡ሪኮ</territory>
<territory type="RO">ሮሜኒያ</territory>
<territory type="RU">ራሺያ</territory>
<territory type="SA">ሳውድአረቢያ</territory>
<territory type="SD">ሱዳን</territory>
<territory type="SE">ስዊድን</territory>
<territory type="SG">ሲንጋፖር</territory>
<territory type="SI">ስሎቬኒያ</territory>
<territory type="SK">ስሎቫኪያ</territory>
<territory type="SN">ሴኔጋል</territory>
<territory type="SO">ሱማሌ</territory>
<territory type="SY">ሲሪያ</territory>
<territory type="TD">ቻድ</territory>
<territory type="TF">የፈረንሳይ፡ደቡባዊ፡ግዛቶች</territory>
<territory type="TH">ታይላንድ</territory>
<territory type="TJ">ታጃኪስታን</territory>
<territory type="TL">ምስራቅ፡ቲሞር</territory>
<territory type="TN">ቱኒዚያ</territory>
<territory type="TR">ቱርክ</territory>
<territory type="TT">ትሪኒዳድ፡እና፡ቶባጎ</territory>
<territory type="TZ">ታንዛኒያ</territory>
<territory type="UG">ዩጋንዳ</territory>
<territory type="US">አሜሪካ</territory>
<territory type="UZ">ዩዝበኪስታን</territory>
<territory type="VE">ቬንዙዌላ</territory>
<territory type="VG">የእንግሊዝ፡ድንግል፡ደሴቶች</territory>
<territory type="VI">የአሜሪካ፡ቨርጂን፡ደሴቶች</territory>
<territory type="YE">የመን</territory>
<territory type="ZA">ደቡብ፡አፍሪካ</territory>
<territory type="ZM">ዛምቢያ</territory>
</territories>
</localeDisplayNames>
<characters>
<exemplarCharacters>[\u135F ᎐-᎙ -ሆ ለ-ሎ ሐ-ሖ መ-ሞ ሠ-ሦ ረ-ሮ ሰ-ሶ ቀ-ቆ ቈ ቊ-ቍ በ-ቦ ተ-ቶ ኀ-ኆ ኈ ኊ-ኍ ነ-ኖ አ-ኦ ከ-ኮ ኰ ኲ-ኵ ወ-ዎ -ዖ ዘ-ዞ የ-ዮ ደ-ዶ ገ-ጎ ጐ ጒ-ጕ ጠ-ጦ ጰ-ጶ ጸ-ጾ ፀ-ፆ ፈ-ፎ ፐ-ፖ]</exemplarCharacters>
<exemplarCharacters type="auxiliary">[ሇ ሏ ⶀ ሗ ሟ ᎀ-ᎃ ⶁ ሧ ሯ ⶂ ሷ ⶃ ሸ-ሿ ⶄ ቇ ቐ-ቖ ቘ ቚ-ቝ ቧ ᎄ-ᎇ ⶅ ቮ ቯ ቷ ⶆ ቿ ⶇ ኇ ኗ ⶈ ኟ ⶉ ኧ ⶊ ኯ ኸ-ኾ ዀ ዂ-ዅ ዏ ዟ ⶋ ዠ-ዧ ዷ ⶌ ዸ-ዿ ⶍ ጀ-ጇ ⶎ ጏ ጘ-ጟ ⶓ-ⶖ ጧ ⶏ ጨ-ጯ ⶐ ጷ ⶑ ጿ ፇ ፏ ᎈ-ᎋ ፗ ᎌ-ᎏ ⶒ ፘ-ፚ ⶠ-ⶦ ⶨ-ⶮ ⶰ-ⶶ ⶸ-ⶾ ⷀ-ⷆ ⷈ-ⷎ ⷐ-ⷖ ⷘ-ⷞ]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">ጠሐረ</month>
<month type="2">ከተተ</month>
<month type="3">መገበ</month>
<month type="4">አኀዘ</month>
<month type="5">ግንባ</month>
<month type="6">ሠንየ</month>
<month type="7">ሐመለ</month>
<month type="8">ነሐሰ</month>
<month type="9">ከረመ</month>
<month type="10">ጠቀመ</month>
<month type="11">ኀደረ</month>
<month type="12">ኀሠሠ</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">ጠሐረ</month>
<month type="2">ከተተ</month>
<month type="3">መገበ</month>
<month type="4">አኀዘ</month>
<month type="5">ግንባት</month>
<month type="6">ሠንየ</month>
<month type="7">ሐመለ</month>
<month type="8">ነሐሰ</month>
<month type="9">ከረመ</month>
<month type="10">ጠቀመ</month>
<month type="11">ኀደረ</month>
<month type="12">ኀሠሠ</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1"></month>
<month type="2"></month>
<month type="3"></month>
<month type="4"></month>
<month type="5"></month>
<month type="6"></month>
<month type="7"></month>
<month type="8"></month>
<month type="9"></month>
<month type="10"></month>
<month type="11"></month>
<month type="12"></month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">እኁድ</day>
<day type="mon">ሰኑይ</day>
<day type="tue">ሠሉስ</day>
<day type="wed">ራብዕ</day>
<day type="thu">ሐሙስ</day>
<day type="fri">ዓርበ</day>
<day type="sat">ቀዳሚ</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">እኁድ</day>
<day type="mon">ሰኑይ</day>
<day type="tue">ሠሉስ</day>
<day type="wed">ራብዕ</day>
<day type="thu">ሐሙስ</day>
<day type="fri">ዓርበ</day>
<day type="sat">ቀዳሚት</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun"></day>
<day type="mon"></day>
<day type="tue"></day>
<day type="wed"></day>
<day type="thu"></day>
<day type="fri"></day>
<day type="sat"></day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>ጽባሕ</am>
<pm>ምሴት</pm>
<eras>
<eraAbbr>
<era type="0">ዓ/ዓ</era>
<era type="1">ዓ/ም</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE፥ dd MMMM መዓልት y G</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>dd MMMM y</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>dd-MMM-y</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>dd/MM/yy</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>h:mm:ss a zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>h:mm:ss a z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>h:mm:ss a</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>h:mm a</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="MMdd">dd/MM</dateFormatItem>
<dateFormatItem id="MMMMdd">dd MMMM</dateFormatItem>
<dateFormatItem id="yyMM">MM/yy</dateFormatItem>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
<dateFormatItem id="yyyyMMMM">MMMM y</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<symbols>
<group></group>
</symbols>
<currencyFormats>
<currencyFormatLength>
<currencyFormat>
<pattern>¤#,##0.00</pattern>
</currencyFormat>
</currencyFormatLength>
</currencyFormats>
<currencies>
<currency type="BRL">
<displayName>የብራዚል ሪል</displayName>
</currency>
<currency type="CNY">
<displayName>የቻይና ዩአን ረንሚንቢ</displayName>
</currency>
<currency type="ETB">
<displayName>የኢትዮጵያ ብር</displayName>
</currency>
<currency type="EUR">
<displayName>አውሮ</displayName>
</currency>
<currency type="GBP">
<displayName>የእንግሊዝ ፓውንድ ስተርሊንግ</displayName>
</currency>
<currency type="INR">
<displayName>የሕንድ ሩፒ</displayName>
</currency>
<currency type="JPY">
<displayName>የጃፓን የን</displayName>
</currency>
<currency type="RUB">
<displayName>የራሻ ሩብል</displayName>
</currency>
<currency type="USD">
<displayName>የአሜሪካን ዶላር</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.41 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="gez"/>
<territory type="ER"/>
</identity>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.42 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="gez"/>
<territory type="ET"/>
</identity>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.48 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="gv"/>
<territory type="GB"/>
</identity>
</ldml>

View File

@ -1,94 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.23 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<script type="Arab"/>
</identity>
<layout>
<orientation characters="right-to-left"/>
</layout>
<characters>
<exemplarCharacters>[ا ب ت-غ ف ڢ ك-ن]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">جَن</month>
<month type="2">ڢَب</month>
<month type="3">مَر</month>
<month type="4">أَڢْر</month>
<month type="5">مَي</month>
<month type="6">يُون</month>
<month type="7">يُول</month>
<month type="8">أَغُ</month>
<month type="9">سَت</month>
<month type="10">أُكْت</month>
<month type="11">نُو</month>
<month type="12">دِس</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">جَنَيْرُ</month>
<month type="2">ڢَبْرَيْرُ</month>
<month type="3">مَرِسْ</month>
<month type="4">أَڢْرِلُ</month>
<month type="5">مَيُ</month>
<month type="6">يُونِ</month>
<month type="7">يُولِ</month>
<month type="8">أَغُسْتَ</month>
<month type="9">سَتُمْبَ</month>
<month type="10">أُكْتوُبَ</month>
<month type="11">نُوَمْبَ</month>
<month type="12">دِسَمْبَ</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">لَح</day>
<day type="mon">لِت</day>
<day type="tue">تَل</day>
<day type="wed">لَر</day>
<day type="thu">أَلْح</day>
<day type="fri">جُم</day>
<day type="sat">أَسَ</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">لَحَدِ</day>
<day type="mon">لِتِنِنْ</day>
<day type="tue">تَلَتَ</day>
<day type="wed">لَرَبَ</day>
<day type="thu">أَلْحَمِسْ</day>
<day type="fri">جُمَعَ</day>
<day type="sat">أَسَبَرْ</day>
</dayWidth>
</dayContext>
</days>
<am>A.M.</am>
<pm>P.M.</pm>
<eras>
<eraNames>
<era type="0">غَبَنِنْ مِلَدِ</era>
<era type="1">مِلَدِ</era>
</eraNames>
<eraAbbr>
<era type="0">غَبَنِنْ مِلَدِ</era>
<era type="1">مِلَدِ</era>
</eraAbbr>
</eras>
</calendar>
</calendars>
</dates>
<numbers>
<currencies>
<currency type="NGN">
<displayName>نَيْرَ</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.17 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<script type="Arab"/>
<territory type="NG"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.3 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<script type="Arab"/>
<territory type="SD"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<territory type="GH"/>
</identity>
<alias source="ha_Latn_GH" path="//ldml"/>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<territory type="NE"/>
</identity>
<alias source="ha_Latn_NE" path="//ldml"/>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<territory type="NG"/>
</identity>
<alias source="ha_Latn_NG" path="//ldml"/>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.3 $"/>
<generation date="$Date: 2009/05/05 23:06:36 $"/>
<language type="ha"/>
<territory type="SD"/>
</identity>
<alias source="ha_Arab_SD" path="//ldml"/>
</ldml>

View File

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.48 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="hy"/>
<territory type="AM"/>
<variant type="REVISED"/>
</identity>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">Հնվ</month>
<month type="2">Փտվ</month>
<month type="6">Հնս</month>
<month type="7">Հլս</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Հունվար</month>
<month type="2">Փետրվար</month>
<month type="6">Հունիս</month>
<month type="7">Հուլիս</month>
</monthWidth>
</monthContext>
</months>
<pm>Կե․</pm>
<eras>
<eraAbbr>
<era type="0">Մ․Թ․Ա․</era>
<era type="1">Մ․Թ․</era>
</eraAbbr>
</eras>
</calendar>
</calendars>
</dates>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.4 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="in"/>
</identity>
<alias source="id" path="//ldml"/>
</ldml>

View File

@ -1,181 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.41 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="iu"/>
</identity>
<localeDisplayNames>
<languages>
<language type="iu">ᐃᓄᒃᑎᑐᑦ ᑎᑎᕋᐅᓯᖅ</language>
</languages>
</localeDisplayNames>
<characters>
<exemplarCharacters>[ᐃ-ᐆ ᐊ ᐋ ᐱ-ᐴ ᐹ ᑉ ᑎ-ᑑ ᑕ ᑖ ᑦ -ᑰ ᑳ ᒃ ᒋ-ᒎ ᒐ ᒑ ᒡ ᒥ-ᒨ ᒫ ᒻ ᓂ-ᓅ ᓇ ᓈ ᓐ ᓕ-ᓘ ᓚ ᓛ ᓪ ᓯ-ᓲ ᓴ ᓵ ᔅ ᔨ-ᔫ ᔭ ᔮ ᔾ ᕆ-ᕉ ᕋ ᕌ ᕐ ᕕ-ᕚ ᕝ ᕿ-ᖃ ᖅ ᖏ ᖑ-ᖕ ᙱ-ᙶ ᖖ ᖠ-ᖦ]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">ᔭᓐᓄᐊᓕ</month>
<month type="2">ᕕᕝᕗᐊᓕ</month>
<month type="3">ᒫᑦᓯ</month>
<month type="4">ᐊᐃᑉᐳᓗ</month>
<month type="5">ᒪᐃ</month>
<month type="6">ᔫᓂ</month>
<month type="7">ᔪᓚᐃ</month>
<month type="8">ᐊᐅᒡᒍᓯ</month>
<month type="9">ᓰᑦᑏᕝᕙ</month>
<month type="10">ᐆᑦᑑᕝᕙ</month>
<month type="11">ᓅᕙᐃᕝᕙ</month>
<month type="12">ᑏᓰᕝᕙ</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">ᔭᓐᓄᐊᓕ</month>
<month type="2">ᕕᕝᕗᐊᓕ</month>
<month type="3">ᒫᑦᓯ</month>
<month type="4">ᐊᐃᑉᐳᓗ</month>
<month type="5">ᒪᐃ</month>
<month type="6">ᔫᓂ</month>
<month type="7">ᔪᓚᐃ</month>
<month type="8">ᐊᐅᒡᒍᓯ</month>
<month type="9">ᓰᑦᑏᕝᕙ</month>
<month type="10">ᐆᑦᑑᕝᕙ</month>
<month type="11">ᓅᕙᐃᕝᕙ</month>
<month type="12">ᑏᓰᕝᕙ</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">ᓈᑦᓰᖑᔭ</day>
<day type="mon">ᓇᒡᒐᔾᔭᐅ</day>
<day type="tue">ᓇᒡᒐᔾᔭᐅᓕᖅᑭ</day>
<day type="wed">ᐱᖓᑦᓯᖅ</day>
<day type="thu">ᓯᑕᒻᒥᖅ</day>
<day type="fri">ᑕᓪᓕᕐᒥᖅ</day>
<day type="sat">ᓈᑦᓰᖑᔭᓕᖅᕿ</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">ᓈᑦᓰᖑᔭ</day>
<day type="mon">ᓇᒡᒐᔾᔭᐅ</day>
<day type="tue">ᓇᒡᒐᔾᔭᐅᓕᖅᑭ</day>
<day type="wed">ᐱᖓᑦᓯᖅ</day>
<day type="thu">ᓯᑕᒻᒥᖅ</day>
<day type="fri">ᑕᓪᓕᕐᒥᖅ</day>
<day type="sat">ᓈᑦᓰᖑᔭᓕᖅᕿ</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraAbbr>
<era type="0">BCE</era>
<era type="1">CE</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.17 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="iw"/>
</identity>
<alias source="he" path="//ldml"/>
</ldml>

View File

@ -1,188 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.27 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kaj"/>
</identity>
<characters>
<exemplarCharacters>[a-z]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">A̱yr</month>
<month type="2">A̱hw</month>
<month type="3">A̱ta</month>
<month type="4">A̱na</month>
<month type="5">A̱pf</month>
<month type="6">A̱ki</month>
<month type="7">A̱ty</month>
<month type="8">A̱ni</month>
<month type="9">A̱ku</month>
<month type="10">Swa</month>
<month type="11">Sby</month>
<month type="12">Sbh</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Hywan A̱yrnig</month>
<month type="2">Hywan A̱hwa</month>
<month type="3">Hywan A̱tat</month>
<month type="4">Hywan A̱naai</month>
<month type="5">Hywan A̱pfwon</month>
<month type="6">Hywan A̱kitat</month>
<month type="7">Hywan A̱tyirin</month>
<month type="8">Hywan A̱ninai</month>
<month type="9">Hywan A̱kumviriyin</month>
<month type="10">Hywan Swak</month>
<month type="11">Hywan Swak B'a̱yrnig</month>
<month type="12">Hywan Swak B'a̱hwa</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">Lad</day>
<day type="mon">Lin</day>
<day type="tue">Tal</day>
<day type="wed">Lar</day>
<day type="thu">Lam</day>
<day type="fri">Jum</day>
<day type="sat">Asa</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">Ladi</day>
<day type="mon">Lintani</day>
<day type="tue">Talata</day>
<day type="wed">Larba</day>
<day type="thu">Lamit</day>
<day type="fri">Juma</day>
<day type="sat">Asabar</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>A.M.</am>
<pm>P.M.</pm>
<eras>
<eraNames>
<era type="0">Gabanin Miladi</era>
<era type="1">Miladi</era>
</eraNames>
<eraAbbr>
<era type="0">G.M.</era>
<era type="1">M.</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<currencies>
<currency type="NGN">
<displayName>A̱naira</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.15 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kaj"/>
<territory type="NG"/>
</identity>
</ldml>

View File

@ -1,188 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.29 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kcg"/>
</identity>
<characters>
<exemplarCharacters>[a {a\u0331} b {ch} {chy} d-g {gb} {gh} {ghw} {ghy} i {i\u0331} j {jhy} k {kh} {kp} l-n {ng} {ny} o p r s {sh} {shy} t {ts} u-w y z]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">Juw</month>
<month type="2">Swi</month>
<month type="3">Tsa</month>
<month type="4">Nya</month>
<month type="5">Tsw</month>
<month type="6">Ata</month>
<month type="7">Ana</month>
<month type="8">Ari</month>
<month type="9">Aku</month>
<month type="10">Swa</month>
<month type="11">Man</month>
<month type="12">Mas</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Zwat Juwung</month>
<month type="2">Zwat Swiyang</month>
<month type="3">Zwat Tsat</month>
<month type="4">Zwat Nyai</month>
<month type="5">Zwat Tswon</month>
<month type="6">Zwat Ataah</month>
<month type="7">Zwat Anatat</month>
<month type="8">Zwat Arinai</month>
<month type="9">Zwat Akubunyung</month>
<month type="10">Zwat Swag</month>
<month type="11">Zwat Mangjuwang</month>
<month type="12">Zwat Swag-Ma-Suyang</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">Lad</day>
<day type="mon">Tan</day>
<day type="tue">Tal</day>
<day type="wed">Lar</day>
<day type="thu">Lam</day>
<day type="fri">Jum</day>
<day type="sat">Asa</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">Ladi</day>
<day type="mon">Tanii</day>
<day type="tue">Talata</day>
<day type="wed">Larba</day>
<day type="thu">Lamit</day>
<day type="fri">Juma</day>
<day type="sat">Asabat</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraNames>
<era type="0">Gabanin Miladi</era>
<era type="1">Miladi</era>
</eraNames>
<eraAbbr>
<era type="0">GM</era>
<era type="1">M</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<currencies>
<currency type="NGN">
<displayName>Nera</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.16 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kcg"/>
<territory type="NG"/>
</identity>
</ldml>

View File

@ -1,188 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.29 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kfo"/>
</identity>
<characters>
<exemplarCharacters>[a ā b-e ē f g {gb} h-k {kh} l-p {pk} r-u w y z]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">Wey</month>
<month type="2">Fan</month>
<month type="3">Tat</month>
<month type="4">Nan</month>
<month type="5">Tuy</month>
<month type="6">Tso</month>
<month type="7">Taf</month>
<month type="8">War</month>
<month type="9">Kun</month>
<month type="10">Ban</month>
<month type="11">Kom</month>
<month type="12">Sau</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">Fai Weyene</month>
<month type="2">Fai Fani</month>
<month type="3">Fai Tataka</month>
<month type="4">Fai Nangra</month>
<month type="5">Fai Tuyo</month>
<month type="6">Fai Tsoyi</month>
<month type="7">Fai Tafaka</month>
<month type="8">Fai Warachi</month>
<month type="9">Fai Kunobok</month>
<month type="10">Fai Bansok</month>
<month type="11">Fai Kom</month>
<month type="12">Fai Sauk</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">Lah</day>
<day type="mon">Kub</day>
<day type="tue">Gba</day>
<day type="wed">Tan</day>
<day type="thu">Yei</day>
<day type="fri">Koy</day>
<day type="sat">Sat</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">Lahadi</day>
<day type="mon">Je-Kubacha</day>
<day type="tue">Je-Gbai</day>
<day type="wed">Tansati</day>
<day type="thu">Je-Yei</day>
<day type="fri">Je-Koye</day>
<day type="sat">Sati</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraNames>
<era type="0">Kafi Mar Wenom</era>
<era type="1">Bayan Chi Wenom</era>
</eraNames>
<eraAbbr>
<era type="0">KMW</era>
<era type="1">BCW</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<currencies>
<currency type="NGN">
<displayName>Neira</displayName>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.4 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kfo"/>
<territory type="CI"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.42 $"/>
<generation date="$Date: 2009/05/05 23:06:37 $"/>
<language type="kk"/>
<territory type="KZ"/>
</identity>
<alias source="kk_Cyrl_KZ" path="//ldml"/>
</ldml>

View File

@ -1,183 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.28 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="kpe"/>
</identity>
<characters>
<exemplarCharacters>[a b ɓ d e ə ɛ f g ĝ {gb} {gw} ɣ h-k {kp} {kw} l-n {ny} ɲ ŋ {ŋw} o ɔ p t-w y z]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">1</month>
<month type="2">2</month>
<month type="3">3</month>
<month type="4">4</month>
<month type="5">5</month>
<month type="6">6</month>
<month type="7">7</month>
<month type="8">8</month>
<month type="9">9</month>
<month type="10">10</month>
<month type="11">11</month>
<month type="12">12</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">1</day>
<day type="mon">2</day>
<day type="tue">3</day>
<day type="wed">4</day>
<day type="thu">5</day>
<day type="fri">6</day>
<day type="sat">7</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Q1</quarter>
<quarter type="2">Q2</quarter>
<quarter type="3">Q3</quarter>
<quarter type="4">Q4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>AM</am>
<pm>PM</pm>
<eras>
<eraAbbr>
<era type="0">BCE</era>
<era type="1">CE</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>EEEE, y MMMM dd</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="long">
<dateFormat>
<pattern>y MMMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>y MMM d</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>HH:mm:ss zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>HH:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>HH:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>HH:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
<timeZoneNames>
<hourFormat>+HH:mm;-HH:mm</hourFormat>
<gmtFormat>GMT{0}</gmtFormat>
<regionFormat>{0}</regionFormat>
</timeZoneNames>
</dates>
<numbers>
<currencies>
<currency type="LRD">
<symbol>$</symbol>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.19 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="kpe"/>
<territory type="GN"/>
</identity>
<numbers>
<currencies>
<currency type="LRD">
<symbol>L$</symbol>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="kpe"/>
<territory type="LR"/>
</identity>
</ldml>

View File

@ -1,158 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.25 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
</identity>
<localeDisplayNames>
<languages>
<language type="af">ئه‌فریكای</language>
<language type="am">ئه‌مهه‌رینجی</language>
<language type="ar">عه‌ره‌بی</language>
<language type="as">ئا سسامی (زوبان)</language>
<language type="az">ئازه‌ربایجانی</language>
<language type="be">بێلاڕووسی</language>
<language type="bg">بۆلگاری</language>
<language type="bh">بیهاری</language>
<language type="bn">به‌نگلادێشی</language>
<language type="br">برێتونی</language>
<language type="bs">بۆسنی</language>
<language type="ca">كاتالۆنی</language>
<language type="cs">چه‌كی</language>
<language type="cy">وێلزی</language>
<language type="da">دانماركی</language>
<language type="de">ئاڵمانی</language>
<language type="el">یۆنانی</language>
<language type="en">ئینگلیزی</language>
<language type="eo">ئێسپیرانتۆ</language>
<language type="es">ئیسپانی</language>
<language type="et">ئیستۆنی</language>
<language type="eu">باسكی</language>
<language type="fa">فارسی</language>
<language type="fi">فینله‌ندی</language>
<language type="fil">تاگالۆگی</language>
<language type="fo">فه‌رئۆیی</language>
<language type="fr">فه‌رانسی</language>
<language type="fy">فریسی</language>
<language type="ga">ئیرله‌ندی</language>
<language type="gd">گه‌لیكی سكۆتله‌ندی</language>
<language type="gl">گالیسی</language>
<language type="gn">گووارانی</language>
<language type="gu">گوجاراتی</language>
<language type="he">هیبرێ</language>
<language type="hi">هیندی</language>
<language type="hr">كرواتی</language>
<language type="hu">هه‌نگاری (مه‌جاری)</language>
<language type="hy">ئه رمه نی</language>
<language type="ia">ئینترلینگوی</language>
<language type="id">ئێه‌ندونیزی</language>
<language type="ie">ئه نته ر لينگ (زوبان)</language>
<language type="is">ئیسله‌ندی</language>
<language type="it">ئیتالی</language>
<language type="ja">ژاپۆنی</language>
<language type="jv">جاڤانی</language>
<language type="ka">گۆرجستانی</language>
<language type="km">کامبۆجی (زوبان)</language>
<language type="kn">كه‌نه‌دایی</language>
<language type="ko">كۆری</language>
<language type="ku">كوردی</language>
<language type="ky">كرگیزی</language>
<language type="la">لاتینی</language>
<language type="ln">لينگالا</language>
<language type="lo">لاو‏ى</language>
<language type="lt">لیتوانی</language>
<language type="lv">لێتۆنی</language>
<language type="mk">ماكێدۆنی</language>
<language type="ml">مالایلام</language>
<language type="mn">مه‌نگۆلی</language>
<language type="mr">ماراتی</language>
<language type="ms">مالیزی</language>
<language type="mt">ماڵتایی</language>
<language type="ne">نێپالی</language>
<language type="nl">هۆڵه‌ندی</language>
<language type="no">نۆروێژی</language>
<language type="oc">ئۆسیتانی</language>
<language type="or">ئۆرییا</language>
<language type="pa">په‌نجابی</language>
<language type="pl">پۆڵۆنیایی (له‌هستانی)</language>
<language type="ps">په‌شتوو</language>
<language type="pt">پۆرتۆگالی</language>
<language type="pt_BR">پورتوگاڵی (برازیل)</language>
<language type="pt_PT">پورتوگاڵی (پورتوگاڵ)</language>
<language type="ro">ڕۆمانی</language>
<language type="ru">ڕووسی</language>
<language type="sa">سانسکريت</language>
<language type="sd">سيندی(زوبان)</language>
<language type="sh">سێربۆكرواتی</language>
<language type="si">سینهه‌لی</language>
<language type="sk">سلۆڤاكی</language>
<language type="sl">سلۆڤێنی</language>
<language type="so">سۆمالی</language>
<language type="sq">ئاڵبانی</language>
<language type="sr">سه‌ربی</language>
<language type="st">سێسۆتۆ</language>
<language type="su">سودانی</language>
<language type="sv">سویدی</language>
<language type="sw">سواهیلی</language>
<language type="ta">تامیلی</language>
<language type="te">ته‌لۆگوی</language>
<language type="th">تایله‌ندی</language>
<language type="ti">تیگرینیای</language>
<language type="tk">تروكمانی</language>
<language type="tlh">كلینگۆن</language>
<language type="tr">توركی</language>
<language type="tw">توی</language>
<language type="ug">ئويخووری</language>
<language type="uk">ئۆكراینی</language>
<language type="ur">ئۆردو‌و</language>
<language type="uz">ئۆزبه‌كی</language>
<language type="vi">ڤیه‌تنامی</language>
<language type="xh">سسوسا</language>
<language type="yi">یوددی</language>
<language type="zu">زولو</language>
</languages>
</localeDisplayNames>
<layout>
<orientation characters="right-to-left"/>
</layout>
<characters>
<exemplarCharacters>[ئ-ب پ ت ج چ ح-د ر ز ڕ ژ س ش ع غ ف ڤ ق ک گ ل ڵ م-ه ھ و ۆ ی ێ]</exemplarCharacters>
<exemplarCharacters type="auxiliary">[\u064B-\u0652 ء-ة ث ذ ص-ظ ك ى ي]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun">یەکشەممە</day>
<day type="mon">دووشەممە</day>
<day type="tue">سێشەممە</day>
<day type="wed">چوارشەممە</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">یەکشەممە</day>
<day type="mon">دووشەممە</day>
<day type="tue">سێشەممە</day>
<day type="wed">چوارشەممە</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">ی</day>
<day type="mon">د</day>
<day type="tue">س</day>
</dayWidth>
</dayContext>
</days>
<dateTimeFormats>
<availableFormats>
<dateFormatItem id="yyQ">Q yy</dateFormatItem>
</availableFormats>
</dateTimeFormats>
</calendar>
</calendars>
</dates>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.19 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<script type="Arab"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.2 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<script type="Arab"/>
<territory type="IQ"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.2 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<script type="Arab"/>
<territory type="IR"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.2 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<script type="Arab"/>
<territory type="SY"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<territory type="IQ"/>
</identity>
<alias source="ku_Arab_IQ" path="//ldml"/>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<territory type="IR"/>
</identity>
<alias source="ku_Arab_IR" path="//ldml"/>
</ldml>

View File

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.20 $"/>
<generation date="$Date: 2009/06/15 03:46:24 $"/>
<language type="ku"/>
<script type="Latn"/>
</identity>
<localeDisplayNames>
<languages>
<language type="ar">erebî</language>
<language type="en">îngilîzî</language>
<language type="ja">japonî</language>
<language type="ku">kurdî</language>
</languages>
<scripts>
<script type="Arab">erebî</script>
</scripts>
<territories>
<territory type="001">Cîhan</territory>
<territory type="TR">Tirkiye</territory>
</territories>
<keys>
<key type="calendar">salname</key>
<key type="collation">rêzkirin</key>
</keys>
<types>
<type type="gregorian" key="calendar">mîladî</type>
<type type="islamic" key="calendar">hîcrî</type>
</types>
</localeDisplayNames>
<layout>
<orientation/>
</layout>
<characters>
<exemplarCharacters>[a-c ç d e ê f-i î j-s ş t u û v-z]</exemplarCharacters>
</characters>
<dates>
<calendars>
<calendar type="gregorian">
<months>
<monthContext type="format">
<monthWidth type="abbreviated">
<month type="1">çil</month>
<month type="2">sib</month>
<month type="3">adr</month>
<month type="4">nîs</month>
<month type="5">gul</month>
<month type="6">hez</month>
<month type="7">tîr</month>
</monthWidth>
<monthWidth type="wide">
<month type="1">çile</month>
<month type="2">sibat</month>
<month type="3">adar</month>
<month type="4">nîsan</month>
<month type="5">gulan</month>
<month type="6">hezîran</month>
</monthWidth>
</monthContext>
<monthContext type="stand-alone">
<monthWidth type="narrow">
<month type="1">ç</month>
<month type="2">s</month>
<month type="3">a</month>
<month type="4">n</month>
<month type="5">g</month>
<month type="6">h</month>
</monthWidth>
</monthContext>
</months>
<days>
<dayContext type="format">
<dayWidth type="abbreviated">
<day type="sun"></day>
<day type="mon"></day>
<day type="tue"></day>
<day type="wed">çş</day>
<day type="thu"></day>
<day type="fri">în</day>
<day type="sat">ş</day>
</dayWidth>
<dayWidth type="wide">
<day type="sun">yekşem</day>
<day type="mon">duşem</day>
<day type="tue">şê</day>
<day type="wed">çarşem</day>
<day type="thu">pêncşem</day>
<day type="fri">în</day>
<day type="sat">şemî</day>
</dayWidth>
</dayContext>
<dayContext type="stand-alone">
<dayWidth type="narrow">
<day type="sun">y</day>
<day type="mon">d</day>
<day type="tue">s</day>
<day type="wed">ç</day>
<day type="thu">p</day>
<day type="fri">î</day>
<day type="sat">ş</day>
</dayWidth>
</dayContext>
</days>
<quarters>
<quarterContext type="format">
<quarterWidth type="abbreviated">
<quarter type="1">Ç1</quarter>
<quarter type="2">Ç2</quarter>
<quarter type="3">Ç3</quarter>
<quarter type="4">Ç4</quarter>
</quarterWidth>
<quarterWidth type="wide">
<quarter type="1">Ç1</quarter>
<quarter type="2">Ç2</quarter>
<quarter type="3">Ç3</quarter>
<quarter type="4">Ç4</quarter>
</quarterWidth>
</quarterContext>
</quarters>
<am>BN</am>
<pm>PN</pm>
<eras>
<eraAbbr>
<era type="0">BZ</era>
<era type="1">PZ</era>
</eraAbbr>
</eras>
<dateFormats>
<dateFormatLength type="short">
<dateFormat>
<pattern>yy/MM/dd</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<fields>
<field type="year">
<displayName>sal</displayName>
</field>
<field type="month">
<displayName>meh</displayName>
</field>
<field type="week">
<displayName>hefte</displayName>
</field>
<field type="day">
<displayName>roj</displayName>
</field>
<field type="hour">
<displayName>demjimêr</displayName>
</field>
<field type="minute">
<displayName>xulek</displayName>
</field>
<field type="second">
<displayName>çirke</displayName>
</field>
</fields>
</calendar>
<calendar type="islamic">
<months>
<monthContext type="format">
<monthWidth type="wide">
<month type="1">muẖerem</month>
<month type="2">sefer</month>
<month type="3">rebîʿulewel</month>
<month type="4">rebîʿulaxer</month>
<month type="5">cemazîyelewel</month>
<month type="6">cemazîyelaxer</month>
<month type="7">receb</month>
<month type="8">şeʿban</month>
<month type="9">remezan</month>
<month type="10">şewal</month>
<month type="11">zîlqeʿde</month>
<month type="12">zîlẖece</month>
</monthWidth>
</monthContext>
</months>
</calendar>
</calendars>
</dates>
<posix>
<messages>
<yesstr>erê:e</yesstr>
<nostr>na:n</nostr>
</messages>
</posix>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.12 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<script type="Latn"/>
<territory type="TR"/>
</identity>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.18 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<territory type="SY"/>
</identity>
<alias source="ku_Arab_SY" path="//ldml"/>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.17 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ku"/>
<territory type="TR"/>
</identity>
<alias source="ku_Latn_TR" path="//ldml"/>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.37 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ky"/>
<territory type="KG"/>
</identity>
</ldml>

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.6 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="mn"/>
<territory type="CN"/>
</identity>
<alias source="mn_Mong_CN" path="//ldml"/>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.43 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="mn"/>
<territory type="MN"/>
</identity>
<alias source="mn_Cyrl_MN" path="//ldml"/>
</ldml>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.4 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="mn"/>
<script type="Mong"/>
</identity>
<layout>
<orientation lines="left-to-right" characters="top-to-bottom"/>
</layout>
<characters>
<exemplarCharacters>[᠐-᠙ ᠠ-ᡂ]</exemplarCharacters>
<exemplarCharacters type="auxiliary">[a á à ă â å ä ā æ b c ç d e é è ĕ ê ë ē f-i í ì ĭ î ï ī j-n ñ o ó ò ŏ ô ö ø ō œ p-s ß t u ú ù ŭ û ü ū v-y ÿ z]</exemplarCharacters>
</characters>
</ldml>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.4 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="mn"/>
<script type="Mong"/>
<territory type="CN"/>
</identity>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.4 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="mo"/>
</identity>
<alias source="ro_MD" path="//ldml"/>
</ldml>

View File

@ -1,134 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.52 $"/>
<generation date="$Date: 2009/06/15 03:46:25 $"/>
<language type="ms"/>
<territory type="BN"/>
</identity>
<dates>
<calendars>
<calendar type="gregorian">
<dateFormats>
<dateFormatLength type="full">
<dateFormat>
<pattern>dd MMMM y</pattern>
</dateFormat>
</dateFormatLength>
<dateFormatLength type="medium">
<dateFormat>
<pattern>dd/MM/yyyy</pattern>
</dateFormat>
</dateFormatLength>
</dateFormats>
<timeFormats>
<timeFormatLength type="full">
<timeFormat>
<pattern>h:mm:ss aa zzzz</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="long">
<timeFormat>
<pattern>H:mm:ss z</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="medium">
<timeFormat>
<pattern>H:mm:ss</pattern>
</timeFormat>
</timeFormatLength>
<timeFormatLength type="short">
<timeFormat>
<pattern>H:mm</pattern>
</timeFormat>
</timeFormatLength>
</timeFormats>
<dateTimeFormats>
<intervalFormats>
<intervalFormatFallback>{0} - {1}</intervalFormatFallback>
<intervalFormatItem id="h">
<greatestDifference id="h">H-H</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="hm">
<greatestDifference id="h">H:mm-H:mm</greatestDifference>
<greatestDifference id="m">H:mm-H:mm</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="hmv">
<greatestDifference id="h">H:mm-H:mm v</greatestDifference>
<greatestDifference id="m">H:mm-H:mm v</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="hv">
<greatestDifference id="h">H-H v</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="Md">
<greatestDifference id="d">MM-dd - MM-dd</greatestDifference>
<greatestDifference id="M">MM-dd - MM-dd</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="MEd">
<greatestDifference id="d">MM-dd - MM-dd</greatestDifference>
<greatestDifference id="M">MM-dd - MM-dd</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="MMM">
<greatestDifference id="M">MMM-MMM</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="MMMd">
<greatestDifference id="d">MMM d-d</greatestDifference>
<greatestDifference id="M">MMM d - MMM d</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="MMMEd">
<greatestDifference id="d">MMM d-d</greatestDifference>
<greatestDifference id="M">MMM d - MMM d</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="yM">
<greatestDifference id="M">yyyy-MM - yyyy-MM</greatestDifference>
<greatestDifference id="y">yyyy-MM - yyyy-MM</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="yMd">
<greatestDifference id="d">yyyy-MM-dd - yyyy-MM-dd</greatestDifference>
<greatestDifference id="M">yyyy-MM-dd - yyyy-MM-dd</greatestDifference>
<greatestDifference id="y">yyyy-MM-dd - yyyy-MM-dd</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="yMEd">
<greatestDifference id="d">yyyy-MM-dd - yyyy-MM-dd</greatestDifference>
<greatestDifference id="M">yyyy-MM-dd - yyyy-MM-dd</greatestDifference>
<greatestDifference id="y">yyyy-MM-dd - yyyy-MM-dd</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="yMMM">
<greatestDifference id="M">y MMM-MMM</greatestDifference>
<greatestDifference id="y">y MMM - y MMM</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="yMMMd">
<greatestDifference id="d">y MMM d-d</greatestDifference>
<greatestDifference id="M">y MMM d - MMM d</greatestDifference>
<greatestDifference id="y">y MMM d - y MMM d</greatestDifference>
</intervalFormatItem>
<intervalFormatItem id="yMMMEd">
<greatestDifference id="d">dd-dd MMM y</greatestDifference>
<greatestDifference id="M">dd MMM - dd MMM y</greatestDifference>
<greatestDifference id="y">dd MMM y - dd MMM y</greatestDifference>
</intervalFormatItem>
</intervalFormats>
</dateTimeFormats>
</calendar>
</calendars>
</dates>
<numbers>
<symbols>
<decimal>,</decimal>
<group>.</group>
</symbols>
<currencyFormats>
<currencyFormatLength>
<currencyFormat>
<pattern>¤ #,##0.00</pattern>
</currencyFormat>
</currencyFormatLength>
</currencyFormats>
<currencies>
<currency type="BND">
<symbol>$</symbol>
</currency>
</currencies>
</numbers>
</ldml>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ldml>
<identity>
<version number="$Revision: 1.46 $"/>
<generation date="$Date: 2009/05/05 23:06:38 $"/>
<language type="ms"/>
<territory type="MY"/>
</identity>
</ldml>

Some files were not shown because too many files have changed in this diff Show More