16986557 prefixes should be omitted from output of facet and variant s11-update s11u2b36
authorsaurabh.vyas@oracle.com
Thu, 27 Mar 2014 22:03:22 +0530
branchs11-update
changeset 3048 2aecfba95fe8
parent 3013 1a3067dd91bb
child 3051 29ab8cfddcec
16986557 prefixes should be omitted from output of facet and variant 17376567 Unable to use pkgrecv - failing with [Errno 22] Invalid argument 17478321 NonLeafPackageException has no associated text 15507548 cert validation needs to validate all certificates before raising e 15737023 pkgrecv -n should display list of packages to retrieve 17343083 pkg list no longer prints error in some cases 17822405 pkg testsuite fail in TestElf 16428119 pkg/depot should use existing indexes and respect writable_root 17343539 pkg/depot doesn't support repository configuration retrieval 17564887 Apache depot leaking empty directories in /tmp 16769328 uninstall fails when failing to remove an implicit directory 17515714 pkgrepo should allow some operations for corrupt repositories 15813784 logging to stderr/stdout broken for svc:/application/pkg/server 17913496 certificates for test suite are expiring 15712903 pkg.config traceback when property value contains % characters 17734557 Bad formatting of error text from pkg update command 17768096 pkg.client.api.image_create should not raise exception for expiring certificates 17318601 pkg needs a synchronous option for service actuators 17796889 /var/share/pkg should have canmount=noauto set and be mounted manually 18025813 remove dead linked images code 18025839 linked image altroot code is untested 18316353 test suite should verify proto area is readable by su_wrap user 17230751 plan execution should gracefully handle SIGTERM and SIGHUP 16541274 compiler change off 12.1 breaks TestPkgdepBasics.test_elf_dependency_tags 18323807 SMF actuators fail if getting passed lists instead of tuples 15722809 need support for recursive linked image operations 15811694 filesystem actions should support system attributes 18329871 linked image altroot code breaks zone installs 18331442 recent changes broke test-suite coverage option 15713570 solver error messaging unclear when installed, unincorporated packa 17699233 pkg install could have an option to ignore any installed packages (new subcommand) 17642065 stacktrace when passing invalid argument to -F 18349136 pkg.sysattr can cause core dumps on sparc 15740100 pkg operations don't prune cache directories 17907487 pkglint traceback when encoutering connection time-out and transport failures 15942111 flush-content-cache should also clear destination BE cache 18339992 skip early cache validation for filesystem-based repositories 18374529 syntax error in repositories-setup method script 17789466 pkgrepo contents subcommand desired 18404810 linked image chokes on zonepaths which contain colons 18397632 pt gets updated with linked image states even if there are no linked images
doc/client_api_versions.txt
src/client.py
src/depot-config.py
src/depot.py
src/man/pkg.1
src/man/pkg.5
src/man/pkglint.1
src/man/pkgrecv.1
src/man/pkgrepo.1
src/modules/actions/directory.py
src/modules/actions/file.py
src/modules/actions/group.py
src/modules/actions/user.py
src/modules/client/actuator.py
src/modules/client/api.py
src/modules/client/api_errors.py
src/modules/client/bootenv.py
src/modules/client/image.py
src/modules/client/imageplan.py
src/modules/client/linkedimage/common.py
src/modules/client/linkedimage/system.py
src/modules/client/linkedimage/zone.py
src/modules/client/options.py
src/modules/client/pkg_solver.py
src/modules/client/pkgdefs.py
src/modules/client/pkgplan.py
src/modules/client/plandesc.py
src/modules/client/transport/transport.py
src/modules/config.py
src/modules/lint/engine.py
src/modules/manifest.py
src/modules/misc.py
src/modules/portable/__init__.py
src/modules/portable/os_sunos.py
src/modules/server/repository.py
src/modules/smf.py
src/modules/sysattr.c
src/pkg/manifests/package:pkg.p5m
src/pkgdep.py
src/pkgrepo.py
src/pull.py
src/setup.py
src/svc/pkg-mirror.xml
src/svc/svc-pkg-mirror
src/svc/svc-pkg-repositories-setup
src/sysrepo.py
src/tests/api/t_elf.py
src/tests/api/t_linked_image.py
src/tests/api/t_manifest.py
src/tests/api/t_pkg_api_install.py
src/tests/api/t_smf.py
src/tests/api/t_sysattr.py
src/tests/certgenerator.py
src/tests/cli/t_actuators.py
src/tests/cli/t_depot_config.py
src/tests/cli/t_https.py
src/tests/cli/t_pkg_depotd.py
src/tests/cli/t_pkg_image_update.py
src/tests/cli/t_pkg_install.py
src/tests/cli/t_pkg_linked.py
src/tests/cli/t_pkg_list.py
src/tests/cli/t_pkg_nasty.py
src/tests/cli/t_pkg_publisher.py
src/tests/cli/t_pkg_temp_sources.py
src/tests/cli/t_pkg_uninstall.py
src/tests/cli/t_pkg_varcet.py
src/tests/cli/t_pkg_verify.py
src/tests/cli/t_pkgdep.py
src/tests/cli/t_pkgrecv.py
src/tests/cli/t_pkgrepo.py
src/tests/perf/manbench.py
src/tests/pkg5unittest.py
src/tests/ro_data/signing_certs/generate_certs.py
src/tests/ro_data/signing_certs/openssl.cnf
src/tests/ro_data/signing_certs/produced/chain_certs/01.pem
src/tests/ro_data/signing_certs/produced/chain_certs/02.pem
src/tests/ro_data/signing_certs/produced/chain_certs/03.pem
src/tests/ro_data/signing_certs/produced/chain_certs/04.pem
src/tests/ro_data/signing_certs/produced/chain_certs/05.pem
src/tests/ro_data/signing_certs/produced/chain_certs/08.pem
src/tests/ro_data/signing_certs/produced/chain_certs/0A.pem
src/tests/ro_data/signing_certs/produced/chain_certs/0C.pem
src/tests/ro_data/signing_certs/produced/chain_certs/0D.pem
src/tests/ro_data/signing_certs/produced/chain_certs/10.pem
src/tests/ro_data/signing_certs/produced/chain_certs/1A.pem
src/tests/ro_data/signing_certs/produced/chain_certs/1C.pem
src/tests/ro_data/signing_certs/produced/chain_certs/1E.pem
src/tests/ro_data/signing_certs/produced/chain_certs/20.pem
src/tests/ro_data/signing_certs/produced/chain_certs/22.pem
src/tests/ro_data/signing_certs/produced/chain_certs/26.pem
src/tests/ro_data/signing_certs/produced/chain_certs/28.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1.1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1.1_ta4_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1.2_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1.3_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1.4_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta4_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta5_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch2_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch3_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch4.3_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch4_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch5.1_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch5.2_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch5.3_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/chain_certs/ch5_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/06.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/07.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/09.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/0B.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/0E.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/0F.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/11.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/12.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/13.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/14.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/15.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/16.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/17.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/18.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/19.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/1B.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/1D.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/1F.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/21.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/23.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/24.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/25.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/27.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/29.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/2A.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/2B.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.1_ta4_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.2_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.3_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.4_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta4_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta5_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.1_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.2_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.3_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_cs8_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta10_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta11_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta2_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta6_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta7_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta8_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta9_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch1_ta4_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch5_ta1_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs3_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs3_ch1_ta4_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs4_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs5_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs6_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs7_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/code_signing_certs/cs8_ch1_ta3_cert.pem
src/tests/ro_data/signing_certs/produced/combined_cas.pem
src/tests/ro_data/signing_certs/produced/crl/ch1.1_ta4_crl.pem
src/tests/ro_data/signing_certs/produced/crl/ch1_ta4_crl.pem
src/tests/ro_data/signing_certs/produced/crl/ch5_ta1_crl.pem
src/tests/ro_data/signing_certs/produced/crl/ta5_crl.pem
src/tests/ro_data/signing_certs/produced/index
src/tests/ro_data/signing_certs/produced/keys/ch1.1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1.1_ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1.2_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1.3_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1.4_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1_ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch1_ta5_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch2_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch3_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch4.3_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch4_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch5.1_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch5.2_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch5.3_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ch5_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.1_ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.2_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.3_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.4_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta5_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.1_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.2_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.3_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ch5_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_cs8_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta10_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta11_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta2_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta6_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta7_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta7_reqpass_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta8_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs1_ta9_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs2_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs2_ch1_ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs2_ch5_ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs3_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs3_ch1_ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs4_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs5_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs6_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs7_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/cs8_ch1_ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta10_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta11_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta1_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta2_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta3_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta4_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta5_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta6_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta7_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta8_key.pem
src/tests/ro_data/signing_certs/produced/keys/ta9_key.pem
src/tests/ro_data/signing_certs/produced/ta1/ta1_cert.pem
src/tests/ro_data/signing_certs/produced/ta10/ta10_cert.pem
src/tests/ro_data/signing_certs/produced/ta11/ta11_cert.pem
src/tests/ro_data/signing_certs/produced/ta2/ta2_cert.pem
src/tests/ro_data/signing_certs/produced/ta3/ta3_cert.pem
src/tests/ro_data/signing_certs/produced/ta4/ta4_cert.pem
src/tests/ro_data/signing_certs/produced/ta5/ta5_cert.pem
src/tests/ro_data/signing_certs/produced/ta6/ta6_cert.pem
src/tests/ro_data/signing_certs/produced/ta7/ta7_cert.pem
src/tests/ro_data/signing_certs/produced/ta8/ta8_cert.pem
src/tests/ro_data/signing_certs/produced/ta9/ta9_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta10_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta11_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta1_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta2_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta3_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta4_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta5_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta6_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta7_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta8_cert.pem
src/tests/ro_data/signing_certs/produced/trust_anchors/ta9_cert.pem
src/util/apache2/depot/depot.conf.mako
src/util/apache2/depot/depot_httpd.conf.mako
src/util/apache2/depot/depot_index.py
src/util/publish/pkglint.py
--- a/doc/client_api_versions.txt	Thu Feb 06 12:42:30 2014 +0900
+++ b/doc/client_api_versions.txt	Thu Mar 27 22:03:22 2014 +0530
@@ -1,3 +1,37 @@
+Version 78:
+Compatible with clients using versions 72-77.
+
+    pkg.client.api.ImageInterface has changed as follows:
+
+        * Added 'li_recurse' parameter to
+            - gen_plan_update()
+            - gen_plan_uninstall()
+            - gen_plan_install()
+            - gen_plan_change_varcets()
+
+          These allow to run the above operations recursively in linked images.
+
+        * Added 'ignore_missing' parameter to
+             - gen_plan_uninstall()
+             - gen_plan_update()
+
+          This changes the behavior of uninstall and update to not fail if a
+          package for the requested operation is not found.
+
+Version 77:
+Compatible with clients using versions 72-76.
+
+    pkg.client.api.ImageInterface has changed as follows:
+
+        * Added 'act_timeout' parameter to
+            - gen_plan_update()
+            - gen_plan_uninstall()
+            - gen_plan_install()
+            - gen_plan_change_varcets()
+
+          These allow to use synchronous SMF actuators including a timeout. 
+
+
 Version 76:
 Compatible with clients using versions 72-75 [1].
 
--- a/src/client.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/client.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 #
@@ -47,7 +47,6 @@
         import collections
         import datetime
         import errno
-        import fnmatch
         import getopt
         import gettext
         import itertools
@@ -75,6 +74,7 @@
         import pkg.fmri as fmri
         import pkg.misc as misc
         import pkg.pipeutils as pipeutils
+        import pkg.portable as portable
         import pkg.version as version
 
         from pkg.client import global_settings
@@ -91,7 +91,7 @@
         import sys
         sys.exit(1)
 
-CLIENT_API_VERSION = 75
+CLIENT_API_VERSION = 77
 PKG_CLIENT_NAME = "pkg"
 
 JUST_UNKNOWN = 0
@@ -106,6 +106,7 @@
 valid_special_attrs = ["action.hash", "action.key", "action.name", "action.raw"]
 
 valid_special_prefixes = ["action."]
+_api_inst = None
 
 def format_update_error(e):
         # This message is displayed to the user whenever an
@@ -158,17 +159,23 @@
             "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
             "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
             "            [--deny-new-be | --require-new-be] [--be-name name]\n"
+            "            [-r [-z image_name ... | -Z image_name ...]]\n"
+            "            [--sync-actuators | --sync-actuators-timeout timeout]\n"
             "            [--reject pkg_fmri_pattern ... ] pkg_fmri_pattern ...")
         basic_usage["uninstall"] = _(
-            "[-nvq] [-C n] [--no-be-activate] [--no-index]\n"
+            "[-nvq] [-C n] [--ignore-missing] [--no-be-activate] [--no-index]\n"
             "            [--no-backup-be | --require-backup-be] [--backup-be-name]\n"
             "            [--deny-new-be | --require-new-be] [--be-name name]\n"
+            "            [-r [-z image_name ... | -Z image_name ...]]\n"
+            "            [--sync-actuators | --sync-actuators-timeout timeout]\n"
             "            pkg_fmri_pattern ...")
         basic_usage["update"] = _(
-            "[-fnvq] [-C n] [-g path_or_uri ...] [--accept]\n"
+            "[-fnvq] [-C n] [-g path_or_uri ...] [--accept] [--ignore-missing]\n"
             "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
             "            [--no-backup-be | --require-backup-be] [--backup-be-name]\n"
             "            [--deny-new-be | --require-new-be] [--be-name name]\n"
+            "            [-r [-z image_name ... | -Z image_name ...]]\n"
+            "            [--sync-actuators | --sync-actuators-timeout timeout]\n"
             "            [--reject pkg_fmri_pattern ...] [pkg_fmri_pattern ...]")
         basic_usage["list"] = _(
             "[-Hafnqsuv] [-g path_or_uri ...] [--no-refresh]\n"
@@ -217,6 +224,7 @@
             "rebuild-index",
             "update-format",
             "image-create",
+            "exact-install",
         ]
 
         adv_usage["info"] = \
@@ -248,6 +256,8 @@
             "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
             "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
             "            [--deny-new-be | --require-new-be] [--be-name name]\n"
+            "            [-r [-z image_name ... | -Z image_name ...]]\n"
+            "            [--sync-actuators | --sync-actuators-timeout timeout]\n"
             "            [--reject pkg_fmri_pattern ... ]\n"
             "            <variant_spec>=<instance> ...")
 
@@ -256,6 +266,8 @@
             "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
             "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
             "            [--deny-new-be | --require-new-be] [--be-name name]\n"
+            "            [-r [-z image_name ... | -Z image_name ...]]\n"
+            "            [--sync-actuators | --sync-actuators-timeout timeout]\n"
             "            [--reject pkg_fmri_pattern ... ]\n"
             "            <facet_spec>=[True|False|None] ...")
 
@@ -309,6 +321,11 @@
         adv_usage["purge-history"] = ""
         adv_usage["rebuild-index"] = ""
         adv_usage["update-format"] = ""
+        adv_usage["exact-install"] = _("[-nvq] [-C n] [-g path_or_uri ...] [--accept]\n"
+            "            [--licenses] [--no-be-activate] [--no-index] [--no-refresh]\n"
+            "            [--no-backup-be | --require-backup-be] [--backup-be-name name]\n"
+            "            [--deny-new-be | --require-new-be] [--be-name name]\n"
+            "            [--reject pkg_fmri_pattern ... ] pkg_fmri_pattern ...")
 
         priv_usage["remote"] = _(
             "--ctlfd=file_descriptor --progfd=file_descriptor")
@@ -618,8 +635,8 @@
                             ", ".join(e.notfound), cmd=op)
                         logger.error("Use -af to allow all versions.")
                 elif pkg_list == api.ImageInterface.LIST_UPGRADABLE:
-			# Creating a list of packages that are uptodate
-			# and that are not installed on the system.
+                        # Creating a list of packages that are uptodate
+                        # and that are not installed on the system.
                         no_updates = []
                         not_installed = []
                         try:
@@ -651,6 +668,9 @@
                                             ", ".join(no_updates)
                         if err_str:
                                 error(err_str, cmd=op)
+                else:
+                        error(_("No packages matching '%s' installed") % \
+                            ", ".join(e.notfound), cmd=op)
 
                 if found and e.notfound:
                         # Only some patterns matched.
@@ -1344,7 +1364,8 @@
                 display_plan_licenses(api_inst, show_req=False)
                 return
 
-        if api_inst.planned_nothingtodo(li_ignore_all=True):
+        if parsable_version is None and \
+            api_inst.planned_nothingtodo(li_ignore_all=True):
                 # nothing todo
                 if op == PKG_OP_UPDATE:
                         s = _("No updates available for this image.")
@@ -1415,7 +1436,11 @@
         rval = None
         try:
                 api_inst.execute_plan()
-                rval = EXIT_OK
+                pd = api_inst.describe()
+                if pd.actuator_timed_out:
+                        rval = EXIT_ACTUATOR
+                else:
+                        rval = EXIT_OK
         except RuntimeError, e:
                 error(_("%(operation)s failed: %(err)s") %
                     {"operation": operation, "err": e})
@@ -1661,6 +1686,8 @@
                 api_plan_func = _api_inst.gen_plan_uninstall
         elif _op == PKG_OP_UPDATE:
                 api_plan_func = _api_inst.gen_plan_update
+        elif _op == PKG_OP_EXACT_INSTALL:
+                api_plan_func = _api_inst.gen_plan_exact_install
         else:
                 raise RuntimeError("__api_plan() invalid op: %s" % _op)
 
@@ -1865,6 +1892,10 @@
                     PKG_OP_PUBCHECK,
                     PKG_OP_SYNC,
                     PKG_OP_UPDATE,
+                    PKG_OP_INSTALL,
+                    PKG_OP_CHANGE_FACET,
+                    PKG_OP_CHANGE_VARIANT,
+                    PKG_OP_UNINSTALL
                 ]
                 if op not in op_supported:
                         raise Exception(
@@ -1880,8 +1911,12 @@
                 if stage in [API_STAGE_DEFAULT, API_STAGE_PLAN]:
                         _api_inst.reset()
 
+                if "pargs" not in pwargs:
+                       pwargs["pargs"] = []
+
                 op_func = cmds[op][0]
-                rv = op_func(op, _api_inst, pargs, **pwargs)
+
+                rv = op_func(op, _api_inst, **pwargs)
 
                 if DebugValues["timings"]:
                         msg(str(pkg_timer))
@@ -1932,9 +1967,10 @@
         rpc_server.serve_forever()
 
 def change_variant(op, api_inst, pargs,
-    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
-    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
-    refresh_catalogs, reject_pats, show_licenses, update_index, verbose):
+    accept, act_timeout, backup_be, backup_be_name, be_activate, be_name,
+    li_ignore, li_parent_sync, li_erecurse, new_be, noexecute, origins,
+    parsable_version, quiet, refresh_catalogs, reject_pats, show_licenses,
+    stage, update_index, verbose):
         """Attempt to change a variant associated with an image, updating
         the image contents as necessary."""
 
@@ -1966,17 +2002,19 @@
         return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
             _noexecute=noexecute, _origins=origins,
             _parsable_version=parsable_version, _quiet=quiet,
-            _show_licenses=show_licenses, _verbose=verbose,
-            backup_be=backup_be, backup_be_name=backup_be_name,
-            be_activate=be_activate, be_name=be_name,
+            _show_licenses=show_licenses, _stage=stage, _verbose=verbose,
+            act_timeout=act_timeout, backup_be=backup_be,
+            backup_be_name=backup_be_name, be_activate=be_activate,
+            be_name=be_name, li_erecurse=li_erecurse,
             li_parent_sync=li_parent_sync, new_be=new_be,
             refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
             update_index=update_index, variants=variants)
 
 def change_facet(op, api_inst, pargs,
-    accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
-    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
-    refresh_catalogs, reject_pats, show_licenses, update_index, verbose):
+    accept, act_timeout, backup_be, backup_be_name, be_activate, be_name,
+    li_ignore, li_erecurse, li_parent_sync, new_be, noexecute, origins,
+    parsable_version, quiet, refresh_catalogs, reject_pats, show_licenses,
+    stage, update_index, verbose):
         """Attempt to change the facets as specified, updating
         image as necessary"""
 
@@ -1987,8 +2025,7 @@
         if not pargs:
                 usage(_("%s: no facets specified") % op)
 
-        # XXX facets should be accessible through pkg.client.api
-        facets = img.get_facets()
+        facets = {}
         allowed_values = {
             "TRUE" : True,
             "FALSE": False,
@@ -2011,30 +2048,55 @@
                         usage(_("%s: facets must to be of the form "
                             "'facet....=[True|False|None]'.") % op)
 
-                v = allowed_values[value.upper()]
-
-                if v is None:
-                        facets.pop(name, None)
-                else:
-                        facets[name] = v
+                facets[name] = allowed_values[value.upper()]
 
         return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
             _noexecute=noexecute, _origins=origins,
             _parsable_version=parsable_version, _quiet=quiet,
-            _show_licenses=show_licenses, _verbose=verbose,
-            backup_be=backup_be, backup_be_name=backup_be_name,
-            be_activate=be_activate, be_name=be_name,
-            li_parent_sync=li_parent_sync, new_be=new_be, facets=facets,
+            _show_licenses=show_licenses, _stage=stage, _verbose=verbose,
+            act_timeout=act_timeout, backup_be=backup_be,
+            backup_be_name=backup_be_name, be_activate=be_activate,
+            be_name=be_name, facets=facets, li_erecurse=li_erecurse,
+            li_parent_sync=li_parent_sync, new_be=new_be,
             refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
             update_index=update_index)
 
 def install(op, api_inst, pargs,
+    accept, act_timeout, backup_be, backup_be_name, be_activate, be_name,
+    li_ignore, li_erecurse, li_parent_sync, new_be, noexecute, origins,
+    parsable_version, quiet, refresh_catalogs, reject_pats, show_licenses,
+    stage, update_index, verbose):
+        """Attempt to take package specified to INSTALLED state.  The operands
+        are interpreted as glob patterns."""
+
+        if not pargs:
+                usage(_("at least one package name required"), cmd=op)
+
+        rval, res = get_fmri_args(api_inst, pargs, cmd=op)
+        if not rval:
+                return EXIT_OOPS
+
+        xrval, xres = get_fmri_args(api_inst, reject_pats, cmd=op)
+        if not xrval:
+                return EXIT_OOPS
+
+        return __api_op(op, api_inst, _accept=accept, _li_ignore=li_ignore,
+            _noexecute=noexecute, _origins=origins,
+            _parsable_version=parsable_version, _quiet=quiet,
+            _show_licenses=show_licenses, _stage=stage, _verbose=verbose,
+            act_timeout=act_timeout, backup_be=backup_be,
+            backup_be_name=backup_be_name, be_activate=be_activate,
+            be_name=be_name, li_erecurse=li_erecurse,
+            li_parent_sync=li_parent_sync, new_be=new_be, pkgs_inst=pargs,
+            refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
+            update_index=update_index)
+
+def exact_install(op, api_inst, pargs,
     accept, backup_be, backup_be_name, be_activate, be_name, li_ignore,
     li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
     refresh_catalogs, reject_pats, show_licenses, update_index, verbose):
-
-        """Attempt to take package specified to INSTALLED state.  The operands
-        are interpreted as glob patterns."""
+        """Attempt to take package specified to INSTALLED state.
+        The operands are interpreted as glob patterns."""
 
         if not pargs:
                 usage(_("at least one package name required"), cmd=op)
@@ -2058,9 +2120,9 @@
             update_index=update_index)
 
 def uninstall(op, api_inst, pargs,
-    be_activate, backup_be, backup_be_name, be_name, new_be, li_ignore,
-    li_parent_sync, update_index, noexecute, parsable_version, quiet,
-    verbose, stage):
+    act_timeout, backup_be, backup_be_name, be_activate, be_name,
+    ignore_missing, li_ignore, li_erecurse, li_parent_sync, new_be, noexecute,
+    parsable_version, quiet, stage, update_index, verbose):
         """Attempt to take package specified to DELETED state."""
 
         if not pargs:
@@ -2074,17 +2136,18 @@
                 return EXIT_OOPS
 
         return __api_op(op, api_inst, _li_ignore=li_ignore,
-            _noexecute=noexecute, _quiet=quiet, _stage=stage,
-            _verbose=verbose, backup_be=backup_be,
+            _noexecute=noexecute, _parsable_version=parsable_version,
+            _quiet=quiet, _stage=stage, _verbose=verbose,
+            act_timeout=act_timeout, backup_be=backup_be,
             backup_be_name=backup_be_name, be_activate=be_activate,
-            be_name=be_name, li_parent_sync=li_parent_sync, new_be=new_be,
-            _parsable_version=parsable_version,
-            pkgs_to_uninstall=pargs, update_index=update_index)
-
-def update(op, api_inst, pargs, accept, backup_be, backup_be_name, be_activate,
-    be_name, force, li_ignore, li_parent_sync, new_be, noexecute, origins,
-    parsable_version, quiet, refresh_catalogs, reject_pats, show_licenses,
-    stage, update_index, verbose):
+            be_name=be_name, ignore_missing=ignore_missing,
+            li_erecurse=li_erecurse, li_parent_sync=li_parent_sync,
+            new_be=new_be, pkgs_to_uninstall=pargs, update_index=update_index)
+
+def update(op, api_inst, pargs, accept, act_timeout, backup_be, backup_be_name,
+    be_activate, be_name, force, ignore_missing, li_ignore, li_erecurse,
+    li_parent_sync, new_be, noexecute, origins, parsable_version, quiet,
+    refresh_catalogs, reject_pats, show_licenses, stage, update_index, verbose):
         """Attempt to take all installed packages specified to latest
         version."""
 
@@ -2114,11 +2177,13 @@
             _parsable_version=parsable_version, _quiet=quiet,
             _review_release_notes=review_release_notes,
             _show_licenses=show_licenses, _stage=stage, _verbose=verbose,
-            backup_be=backup_be, backup_be_name=backup_be_name,
-            be_activate=be_activate, be_name=be_name, force=force,
-            li_parent_sync=li_parent_sync, new_be=new_be,
-            pkgs_update=pkgs_update, refresh_catalogs=refresh_catalogs,
-            reject_list=reject_pats, update_index=update_index)
+            act_timeout=act_timeout, backup_be=backup_be,
+            backup_be_name=backup_be_name, be_activate=be_activate,
+            be_name=be_name, force=force, ignore_missing=ignore_missing,
+            li_erecurse=li_erecurse, li_parent_sync=li_parent_sync,
+            new_be=new_be, pkgs_update=pkgs_update,
+            refresh_catalogs=refresh_catalogs, reject_list=reject_pats,
+            update_index=update_index)
 
 def revert(op, api_inst, pargs,
     backup_be, backup_be_name, be_activate, be_name, new_be, noexecute,
@@ -2584,7 +2649,7 @@
 
 def v1_extract_info(tup, return_type, pub):
         """Given a result from search, massages the information into a form
-        useful for produce_lines.
+        useful for pkg.misc.list_actions_by_attrs.
 
         The "return_type" parameter is an enumeration that describes the type
         of the information that will be converted.
@@ -2797,9 +2862,9 @@
                                                             max_timeout)
                         except api_errors.ApiException, e:
                                 err = e
-                        lines = produce_lines(unprocessed_res, attrs,
-                            show_all=True, remove_consec_dup_lines=True,
-                            last_res=last_line)
+                        lines = list(misc.list_actions_by_attrs(unprocessed_res,
+                            attrs, show_all=True, remove_consec_dup_lines=True,
+                            last_res=last_line))
                         if not lines:
                                 continue
                         old_widths = widths[:]
@@ -2815,7 +2880,7 @@
                                 msg((create_output_format(display_headers,
                                     widths, justs, line) %
                                     tuple(line)).rstrip())
-                        last_line = lines[-1]
+                                last_line = line
                         st = time.time()
                 if err:
                         raise err
@@ -3070,78 +3135,6 @@
                 return JUST_UNKNOWN
         return [ __chose_just(attr) for attr in attrs ]
 
-def produce_lines(actionlist, attrs, show_all=False,
-    remove_consec_dup_lines=False, last_res=None):
-        """Produces a list of n tuples (where n is the length of attrs)
-        containing the relevant information about the actions.
-
-        The "actionlist" parameter is a list of tuples which contain the fmri
-        of the package that's the source of the action, the action, and the
-        publisher the action's package came from. If the actionlist was
-        generated by searching, the last two pieces, "match" and "match_type"
-        contain information about why this action was selected.
-
-        The "attrs" parameter is a list of the attributes of the action that
-        should be displayed.
-
-        The "show_all" parameter determines whether an action that lacks one
-        or more of the desired attributes will be displayed or not.
-
-        The "remove_consec_dup_lines" parameter determines whether consecutive
-        duplicate lines should be removed from the results.
-
-        The "last_res" parameter is a seed to compare the first result against
-        for duplicate removal.
-        """
-
-        # Assert that if last_res is set, we should be removing duplicate
-        # lines.
-        assert(remove_consec_dup_lines or not last_res)
-        lines = []
-        if last_res:
-                lines.append(last_res)
-        for pfmri, action, pub, match, match_type in actionlist:
-                line = []
-                for attr in attrs:
-                        if action and attr in action.attrs:
-                                a = action.attrs[attr]
-                        elif attr == "action.name":
-                                a = action.name
-                        elif attr == "action.key":
-                                a = action.attrs[action.key_attr]
-                        elif attr == "action.raw":
-                                a = action
-                        elif attr in ("hash", "action.hash"):
-                                a = getattr(action, "hash", "")
-                        elif attr == "pkg.name":
-                                a = pfmri.get_name()
-                        elif attr == "pkg.fmri":
-                                a = pfmri
-                        elif attr == "pkg.shortfmri":
-                                a = pfmri.get_short_fmri()
-                        elif attr == "pkg.publisher":
-                                a = pfmri.get_publisher()
-                                if a is None:
-                                        a = pub
-                                        if a is None:
-                                                a = ""
-                        elif attr == "search.match":
-                                a = match
-                        elif attr == "search.match_type":
-                                a = match_type
-                        else:
-                                a = ""
-
-                        line.append(a)
-
-                if (line and [l for l in line if str(l) != ""] or show_all) \
-                    and (not remove_consec_dup_lines or not lines or
-                    lines[-1] != line):
-                        lines.append(line)
-        if last_res:
-                lines.pop(0)
-        return lines
-
 def default_left(v):
         """For a given justification "v", use the default of left justification
         if "v" is JUST_UNKNOWN."""
@@ -3229,7 +3222,7 @@
         was produced."""
 
         justs = calc_justs(attrs)
-        lines = produce_lines(actionlist, attrs)
+        lines = list(misc.list_actions_by_attrs(actionlist, attrs))
         widths = calc_widths(lines, attrs)
 
         if sort_attrs:
@@ -3381,31 +3374,6 @@
         else:
                 excludes = api_inst.excludes
 
-        def mmatches(action):
-                """Given an action, return True if any of its attributes' values
-                matches the pattern for the same attribute in the attr_match
-                dictionary, and False otherwise."""
-
-                # If no matches have been specified, all actions match
-                if not attr_match:
-                        return True
-
-                matchset = set(attr_match.keys())
-                attrset = set(action.attrs.keys())
-
-                iset = attrset.intersection(matchset)
-
-                # Iterate over the set of attributes common to the action and
-                # the match specification.  If the values match the pattern in
-                # the specification, then return True (implementing an OR across
-                # multiple possible matches).
-                for attr in iset:
-                        for match in attr_match[attr]:
-                                for attrval in action.attrlist(attr):
-                                        if fnmatch.fnmatch(attrval, match):
-                                                return True
-                return False
-
         # Now get the matching list of packages and display it.
         processed = False
         notfound = EmptyI
@@ -3453,15 +3421,14 @@
                     (m.fmri, a, None, None, None)
                     for m in manifests
                     for a in m.gen_actions_by_types(action_types,
-                        excludes=excludes)
-                    if mmatches(a)
+                        attr_match=attr_match, excludes=excludes)
                 )
         else:
                 gen_expr = (
                     (m.fmri, a, None, None, None)
                     for m in manifests
-                    for a in m.gen_actions(excludes=excludes)
-                    if mmatches(a)
+                    for a in m.gen_actions(attr_match=attr_match,
+                        excludes=excludes)
                 )
 
         # Determine if the query returned any results by "peeking" at the first
@@ -4800,6 +4767,9 @@
         def gen_current():
                 for (name, val, pvals) in api_inst.gen_variants(variant_list,
                     patterns=req_variants):
+                        if output_format == "default":
+                                name_list = name.split(".")[1:]
+                                name = ".".join(name_list)
                         found[0] = True
                         yield {
                             "variant": name,
@@ -4809,6 +4779,9 @@
         def gen_possible():
                 for (name, val, pvals) in api_inst.gen_variants(variant_list,
                     patterns=req_variants):
+                        if output_format == "default":
+                                name_list = name.split(".")[1:]
+                                name = ".".join(name_list)
                         found[0] = True
                         for pval in pvals:
                                 yield {
@@ -4886,6 +4859,9 @@
         def gen_listing():
                 for (name, val, src, masked) in \
                     api_inst.gen_facets(facet_list, patterns=req_facets):
+                        if output_format == "default":
+                                name_list = name.split(".")[1:]
+                                name = ".".join(name_list)
                         found[0] = True
 
                         if not list_masked and masked:
@@ -5843,6 +5819,8 @@
 
     "force" :             ("f", ""),
 
+    "ignore_missing" :    ("", "ignore-missing"),
+
     "li_ignore_all" :     ("I", ""),
     "li_ignore_list" :    ("i", ""),
     "li_md_only" :        ("",  "linked-md-only"),
@@ -5856,7 +5834,20 @@
     "li_target_all" :     ("a", ""),
     "li_target_list" :    ("l", ""),
 
-    "li_name" :           ("l",  ""),
+    "li_name" :           ("l", ""),
+
+    # These options are used for explicit recursion into linked children.
+    # li_erecurse_all enables explicit recursion into all children if neither
+    # li_erecurse_list nor li_erecurse_excl is set. If any children are
+    # specified in li_erecurse_list, only recurse into those. If any children
+    # are specified in li_erecurse_excl, recurse into all children except for
+    # those.
+    # Explicit recursion means we run the same operation in the child as we run
+    # in the parent. Children we do not explicitely recurse into are still
+    # getting synced.
+    "li_erecurse_all" :    ("r", "recurse"),
+    "li_erecurse_list" :   ("z", ""),
+    "li_erecurse_excl" :   ("Z", ""),
 
     "accept" :            ("",  "accept"),
     "show_licenses" :     ("",  "licenses"),
@@ -5909,6 +5900,9 @@
     "progfd" :                ("",  "progfd"),
 
     "list_installed" :        ("i",  ""),
+
+    "sync_act" :              ("",  "sync-actuators"),
+    "act_timeout" :           ("",  "sync-actuators-timeout"),
 }
 
 #
@@ -5932,6 +5926,7 @@
     "change-variant"        : [change_variant],
     "contents"              : [list_contents],
     "detach-linked"         : [detach_linked, 0],
+    "exact-install"         : [exact_install],
     "facet"                 : [list_facet],
     "fix"                   : [fix_image],
     "freeze"                : [freeze],
@@ -5974,6 +5969,12 @@
     "version"               : [None],
 }
 
+# Option value dictionary which pre-defines the valid values for
+# some options.
+valid_opt_values = {
+    "output_format":        ["default", "tsv", "json", "json-formatted"]
+}
+
 # These tables are an addendum to the the pkg_op_opts/opts_* lists in
 # modules/client/options.py. They contain all the options for functions which
 # are not represented in options.py but go through common option processing.
@@ -6006,7 +6007,7 @@
     opts_cb_varcet,
     ("list_all_items",          False),
     ("list_installed",          False),
-    ("output_format",           None)
+    ("output_format",           None, valid_opt_values["output_format"])
 ]
 
 opts_list_facet = \
@@ -6025,7 +6026,7 @@
     options.opts_table_no_headers + \
     [
     ("list_available",      False),
-    ("output_format",       None)
+    ("output_format",       None,  valid_opt_values["output_format"])
 ]
 opts_unset_mediator = \
     options.opts_table_beopts + \
@@ -6234,9 +6235,13 @@
                                         return "-%s/--%s" % (s, l)
                         except KeyError:
                                 # ignore if we can't find a match
-                                # (happens for repeated arguments)
+                                # (happens for repeated arguments or invalid
+                                # arguments)
                                 return option
-
+                        except TypeError:
+                                # ignore if we can't find a match
+                                # (happens for an invalid arguments list)
+                                return option
                 cli_opts = []
                 opt_def = []
 
@@ -6418,6 +6423,24 @@
                 __ret = 99
         return __ret
 
+
+def handle_sighupterm(signum, frame):
+        """Attempt to gracefully handle SIGHUP and SIGTERM by telling the api
+        to abort and record the cancellation before exiting."""
+
+        try:
+                if _api_inst:
+                        _api_inst.abort(result=RESULT_CANCELED)
+        except:
+                # If history operation fails for some reason, drive on.
+                pass
+
+        # Use os module to immediately exit (bypasses standard exit handling);
+        # this is preferred over raising a KeyboardInterupt as whatever module
+        # we interrupted may not expect that if they disabled SIGINT handling.
+        os._exit(EXIT_OOPS)
+
+
 if __name__ == "__main__":
         misc.setlocale(locale.LC_ALL, "", error)
         gettext.install("pkg", "/usr/share/locale",
@@ -6427,6 +6450,13 @@
         import warnings
         warnings.simplefilter('error')
 
+        # Attempt to handle SIGHUP/SIGTERM gracefully.
+        import signal
+        if portable.osname != "windows":
+                # SIGHUP not supported on windows; will cause exception.
+                signal.signal(signal.SIGHUP, handle_sighupterm)
+        signal.signal(signal.SIGTERM, handle_sighupterm)
+
         __retval = handle_errors(main_func)
         if DebugValues["timings"]:
                 def __display_timings():
--- a/src/depot-config.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/depot-config.py	Thu Mar 27 22:03:22 2014 +0530
@@ -32,6 +32,7 @@
 import os
 import re
 import shutil
+import simplejson as json
 import socket
 import sys
 import traceback
@@ -71,6 +72,7 @@
 DEPOT_HTDOCS_DIRNAME = "htdocs"
 
 DEPOT_VERSIONS_DIRNAME = ["versions", "0"]
+DEPOT_STATUS_DIRNAME = ["status", "0"]
 DEPOT_PUB_DIRNAME = ["publisher", "1"]
 
 DEPOT_CACHE_FILENAME = "depot.cache"
@@ -87,6 +89,7 @@
 catalog 1
 file 1
 manifest 0
+status 0
 """ % pkg.VERSION
 
 # versions response used when we provide search capability
@@ -177,7 +180,7 @@
                 default_pub = repository.cfg.get_property("publisher", "prefix")
         except cfg.UnknownPropertyError:
                 default_pub = None
-        return all_pubs, default_pub
+        return all_pubs, default_pub, repository.get_status()
 
 def _write_httpd_conf(pubs, default_pubs, runtime_dir, log_dir, template_dir,
         cache_dir, cache_size, host, port, sroot,
@@ -185,7 +188,8 @@
         """Writes the webserver configuration for the depot.
 
         pubs            repository and publisher information, a list in the form
-                        [(publisher_prefix, repo_dir, repo_prefix), ... ]
+                        [(publisher_prefix, repo_dir, repo_prefix,
+                            writable_root), ... ]
         default_pubs    default publishers, per repository, a list in the form
                         [(default_publisher_prefix, repo_dir, repo_prefix) ... ]
 
@@ -356,6 +360,19 @@
                 raise DepotException(
                     _("Unable to write publisher response: %s") % err)
 
+def _write_status_response(status, htdocs_path, repo_prefix):
+        """Writes a status status/0 response for the depot."""
+        try:
+                status_path = os.path.join(htdocs_path, repo_prefix,
+                    os.path.sep.join(DEPOT_STATUS_DIRNAME), "index.html")
+                misc.makedirs(os.path.dirname(status_path))
+                with file(status_path, "w") as status_file:
+                        status_file.write(json.dumps(status, ensure_ascii=False,
+                            indent=2, sort_keys=True))
+        except OSError, err:
+                raise DepotException(
+                    _("Unable to write status response: %s") % err)
+
 def cleanup_htdocs(htdocs_dir):
         """Destroy any existing "htdocs" directory."""
         try:
@@ -380,34 +397,40 @@
                 misc.makedirs(htdocs_path)
 
                 # pubs and default_pubs are lists of tuples of the form:
-                # (publisher prefix, repository root dir, repository prefix)
+                # (publisher prefix, repository root dir, repository prefix,
+                #     writable_root)
                 pubs = []
                 default_pubs = []
-
-                repo_prefixes = [prefix for root, prefix in repo_info]
                 errors = []
 
                 # Query each repository for its publisher information.
-                for (repo_root, repo_prefix) in repo_info:
+                for (repo_root, repo_prefix, writable_root) in repo_info:
                         try:
-                                publishers, default_pub = \
+                                publishers, default_pub, status = \
                                     _get_publishers(repo_root)
                                 for pub in publishers:
                                         pubs.append(
                                             (pub, repo_root,
-                                            repo_prefix))
+                                            repo_prefix, writable_root))
                                 default_pubs.append((default_pub,
                                     repo_root, repo_prefix))
+                                _write_status_response(status, htdocs_path,
+                                    repo_prefix)
+                                # The writable root must exist and must be
+                                # owned by pkg5srv:pkg5srv
+                                if writable_root:
+                                        misc.makedirs(writable_root)
+                                        _chown_dir(writable_root)
 
                         except DepotException, err:
                                 errors.append(str(err))
                 if errors:
-                        raise DepotException(_("Unable to get publisher "
-                            "information: %s") % "\n".join(errors))
+                        raise DepotException(_("Unable to write configuration: "
+                            "%s") % "\n".join(errors))
 
                 # Write the publisher/0 response for each repository
                 pubs_by_repo = {}
-                for pub_prefix, repo_root, repo_prefix in pubs:
+                for pub_prefix, repo_root, repo_prefix, writable_root in pubs:
                         pubs_by_repo.setdefault(repo_prefix, []).append(
                             pub_prefix)
                 for repo_prefix in pubs_by_repo:
@@ -439,6 +462,9 @@
         for fmri in smf_instances:
                 repo_prefix = fmri.split(":")[-1]
                 repo_root = smf.get_prop(fmri, "pkg/inst_root")
+                writable_root = smf.get_prop(fmri, "pkg/writable_root")
+                if not writable_root or writable_root == '""':
+                        writable_root = None
                 state = smf.get_prop(fmri, "restarter/state")
                 readonly = smf.get_prop(fmri, "pkg/readonly")
                 standalone = smf.get_prop(fmri, "pkg/standalone")
@@ -447,7 +473,7 @@
                     readonly == "true" and
                     standalone == "false"):
                         repo_info.append((repo_root,
-                            _affix_slash(repo_prefix)))
+                            _affix_slash(repo_prefix), writable_root))
         if not repo_info:
                 raise DepotException(_(
                     "No online, readonly, non-standalone instances of "
@@ -462,14 +488,22 @@
 
         prefixes = set()
         roots = set()
+        writable_roots = set()
         errors = []
-        for root, prefix in repo_info:
+        for root, prefix, writable_root in repo_info:
                 if prefix in prefixes:
-                        errors.append(_("instance %s already exists") % prefix)
+                        errors.append(_("prefix %s cannot be used more than "
+                            "once in a given depot configuration") % prefix)
                 prefixes.add(prefix)
                 if root in roots:
-                        errors.append(_("repo_root %s already exists") % root)
+                        errors.append(_("repo_root %s cannot be used more "
+                            "than once in a given depot configuration") % root)
                 roots.add(root)
+                if writable_root and writable_root in writable_roots:
+                        errors.append(_("writable_root %s cannot be used more "
+                            "than once in a given depot configuration") %
+                            writable_root)
+                writable_roots.add(writable_root)
         if errors:
                 raise DepotException("\n".join(errors))
         return True
@@ -492,7 +526,7 @@
         port = None
         # a list of (repo_dir, repo_prefix) tuples
         repo_info = []
-        # the path where we store indexes and disk caches
+        # the path where we store disk caches
         cache_dir = None
         # our maximum cache size, in megabytes
         cache_size = 0
@@ -517,6 +551,8 @@
         # the current server_type
         server_type = "apache2"
 
+        writable_root_set = False
+
         try:
                 opts, pargs = getopt.getopt(sys.argv[1:],
                     "Ac:d:Fh:l:P:p:r:Ss:t:T:?", ["help", "debug="])
@@ -542,9 +578,17 @@
                         elif opt == "-d":
                                 if "=" not in arg:
                                         usage(_("-d arguments must be in the "
-                                            "form <prefix>=<repo path>"))
-                                prefix, root = arg.split("=", 1)
-                                repo_info.append((root, _affix_slash(prefix)))
+                                            "form <prefix>=<repo path>"
+                                            "[=writable root]"))
+                                components = arg.split("=", 2)
+                                if len(components) == 3:
+                                        prefix, root, writable_root = components
+                                        writable_root_set = True
+                                elif len(components) == 2:
+                                        prefix, root = components
+                                        writable_root = None
+                                repo_info.append((root, _affix_slash(prefix),
+                                    writable_root))
                         elif opt == "-P":
                                 sroot = _affix_slash(arg)
                         elif opt == "-F":
@@ -571,7 +615,7 @@
         if not runtime_dir:
                 usage(_("required runtime dir option -r missing."))
 
-        # we need a cache_dir to store the search indexes
+        # we need a cache_dir to store the SSLSessionCache
         if not cache_dir and not fragment:
                 usage(_("cache_dir option -c is required if -F is not used."))
 
@@ -585,6 +629,13 @@
         if repo_info and use_smf_instances:
                 usage(_("cannot use -d and -S together."))
 
+        # We can't support httpd.conf fragments with writable root, because
+        # we don't have the mod_wsgi app that can build the index or serve
+        # search requests everywhere the fragments might be used. (eg. on
+        # non-Solaris systems)
+        if writable_root_set and fragment:
+                usage(_("cannot use -d with writable roots and -F together."))
+
         if fragment and port:
                 usage(_("cannot use -F and -p together."))
 
@@ -608,7 +659,10 @@
                     {"type": server_type,
                     "known": ", ".join(KNOWN_SERVER_TYPES)})
 
-        _check_unique_repo_properties(repo_info)
+        try:
+                _check_unique_repo_properties(repo_info)
+        except DepotException, e:
+                error(e)
 
         ret = refresh_conf(repo_info, log_dir, host, port, runtime_dir,
             template_dir, cache_dir, cache_size, sroot, fragment=fragment,
--- a/src/depot.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/depot.py	Thu Mar 27 22:03:22 2014 +0530
@@ -738,6 +738,32 @@
                     "on_start_resource",
                     cherrypy.lib.cptools.log_request_headers)
 
+        log_cfg = {
+            "access": dconf.get_property("pkg", "log_access"),
+            "errors": dconf.get_property("pkg", "log_errors")
+        }
+
+        # If stdin is not a tty and the pkgdepot controller isn't being used,
+        # then assume process will be daemonized and redirect output.
+        if not os.environ.get("PKGDEPOT_CONTROLLER") and \
+            not os.isatty(sys.stdin.fileno()):
+                # Ensure log handlers are setup to use the file descriptors for
+                # stdout and stderr as the Daemonizer (used for test suite and
+                # SMF service) requires this.
+                if log_cfg["access"] == "stdout":
+                        log_cfg["access"] = "/dev/fd/%d" % sys.stdout.fileno()
+                elif log_cfg["access"] == "stderr":
+                        log_cfg["access"] = "/dev/fd/%d" % sys.stderr.fileno()
+                elif log_cfg["access"] == "none":
+                        log_cfg["access"] = "/dev/null"
+
+                if log_cfg["errors"] == "stderr":
+                        log_cfg["errors"] = "/dev/fd/%d" % sys.stderr.fileno()
+                elif log_cfg["errors"] == "stdout":
+                        log_cfg["errors"] = "/dev/fd/%d" % sys.stdout.fileno()
+                elif log_cfg["errors"] == "none":
+                        log_cfg["errors"] = "/dev/null"
+
         log_type_map = {
             "errors": {
                 "param": "log.error_file",
@@ -750,7 +776,7 @@
         }
 
         for log_type in log_type_map:
-                dest = dconf.get_property("pkg", "log_%s" % log_type)
+                dest = log_cfg[log_type]
                 if dest in ("stdout", "stderr", "none"):
                         if dest == "none":
                                 h = logging.StreamHandler(LogSink())
@@ -906,7 +932,9 @@
         # then assume process should be daemonized.
         if not os.environ.get("PKGDEPOT_CONTROLLER") and \
             not os.isatty(sys.stdin.fileno()):
-                Daemonizer(cherrypy.engine).subscribe()
+                # Translate the values in log_cfg into paths.
+                Daemonizer(cherrypy.engine, stderr=log_cfg["errors"],
+                    stdout=log_cfg["access"]).subscribe()
 
         try:
                 root = cherrypy.Application(depot)
--- a/src/man/pkg.1	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/man/pkg.1	Thu Mar 27 22:03:22 2014 +0530
@@ -1,6 +1,6 @@
 '\" te
 .\" Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
-.TH pkg 1 "04 Oct 2013" "SunOS 5.11" "User Commands"
+.TH pkg 1 "27 Feb 2014" "SunOS 5.11" "User Commands"
 .SH NAME
 pkg \- Image Packaging System retrieval client
 .SH SYNOPSIS
@@ -21,25 +21,41 @@
     [--no-refresh] [--no-backup-be | --require-backup-be]
     [--backup-be-name \fIname\fR]
     [--deny-new-be | --require-new-be] [--be-name \fIname\fR]
+    [--sync-actuators | --sync-actuators-timeout \fItimeout\fR]
+    [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]]
     [--reject \fIpkg_fmri_pattern\fR]... \fIpkg_fmri_pattern\fR ...
 .fi
 
 .LP
 .nf
-/usr/bin/pkg uninstall [-nvq] [-C \fIn\fR] [--no-be-activate]
+/usr/bin/pkg exact-install [-nvq] [-C \fIn\fR] [-g \fIpath_or_uri\fR]...
+    [--accept] [--licenses] [--no-be-activate] [--no-index]
+    [--no-refresh] [--no-backup-be | --require-backup-be]
+    [--backup-be-name \fIname\fR]
+    [--deny-new-be | --require-new-be] [--be-name \fIname\fR]
+    [--reject \fIpkg_fmri_pattern\fR]... \fIpkg_fmri_pattern\fR ...
+.fi
+
+.LP
+.nf
+/usr/bin/pkg uninstall [-nvq] [-C \fIn\fR] [--ignore-missing] [--no-be-activate]
     [--no-index] [--no-backup-be | --require-backup-be]
     [--backup-be-name \fIname\fR]
     [--deny-new-be | --require-new-be] [--be-name \fIname\fR]
+    [--sync-actuators | --sync-actuators-timeout \fItimeout\fR]
+    [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]]
     \fIpkg_fmri_pattern\fR ...
 .fi
 
 .LP
 .nf
 /usr/bin/pkg update [-fnvq] [-C \fIn\fR] [-g \fIpath_or_uri\fR]...
-    [--accept] [--licenses] [--no-be-activate] [--no-index]
+    [--accept] [--ignore-missing] [--licenses] [--no-be-activate] [--no-index]
     [--no-refresh] [--no-backup-be | --require-backup-be]
     [--backup-be-name \fIname\fR]
     [--deny-new-be | --require-new-be] [--be-name \fIname\fR]
+    [--sync-actuators | --sync-actuators-timeout \fItimeout\fR]
+    [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]]
     [--reject \fIpkg_fmri_pattern\fR]... [\fIpkg_fmri_pattern\fR ...]
 .fi
 
@@ -125,6 +141,8 @@
     [--no-backup-be | --require-backup-be]
     [--backup-be-name \fIname\fR]
     [--deny-new-be | --require-new-be] [--be-name \fIname\fR]
+    [--sync-actuators | --sync-actuators-timeout \fItimeout\fR]
+    [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]]
     \fIvariant_name\fR=\fIvalue\fR ...
 .fi
 
@@ -140,6 +158,8 @@
     [--no-backup-be | --require-backup-be]
     [--backup-be-name \fIname\fR]
     [--deny-new-be | --require-new-be] [--be-name \fIname\fR]
+    [--sync-actuators | --sync-actuators-timeout \fItimeout\fR]
+    [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]]
     \fIfacet_name\fR=(True|False|None) ...
 .fi
 
@@ -376,7 +396,7 @@
 .ne 2
 .mk
 .na
-\fB\fBpkg install\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-refresh\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [\fB--reject\fR \fIpkg_fmri_pattern\fR]... \fIpkg_fmri_pattern\fR ...\fR
+\fB\fBpkg install\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-refresh\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [--sync-actuators | --sync-actuators-timeout \fItimeout\fR] [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]] [\fB--reject\fR \fIpkg_fmri_pattern\fR]... \fIpkg_fmri_pattern\fR ...\fR
 .ad
 .sp .6
 .RS 4n
@@ -571,6 +591,39 @@
 .ne 2
 .mk
 .na
+\fB\fB-r\fR
+.ad
+.sp .6
+.RS 4n
+Run operation recursively in all attached linked images.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fB--sync-actuators\fR\fR
+.ad
+.sp .6
+.RS 4n
+Run SMF actuators synchronously. pkg(1) command will not return until all SMF actuators have finished.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fB--sync-actuators\fR \fItimeout\fR\fR
+.ad
+.sp .6
+.RS 4n
+Run SMF actuators synchronously. If the actuators do not finish within the given \fItimeout\fR in seconds, pkg(1) will continue operation and exit with return code 8.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
 \fB\fB--reject\fR \fIpkg_fmri_pattern\fR\fR
 .ad
 .sp .6
@@ -578,21 +631,76 @@
 Prevent packages with names matching the given pattern from being installed. If matching packages are already installed, they are removed as part of this operation. Rejected packages that are the target of group dependencies are placed on the avoid list. This option can be specified multiple times.
 .RE
 
-.RE
-
-.sp
-.ne 2
-.mk
-.na
-\fB\fBpkg uninstall\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] \fIpkg_fmri_pattern\fR ...\fR
+.sp
+.ne 2
+.mk
+.na
+\fB\fB-z\fR \fIimage_name\fR\fR
+.ad
+.sp .6
+.RS 4n
+Only valid with -r. Run operation only in specified linked image. \fIimage_name\fR\fR can be a fully qualified linked image name in the form <plugin>:<name> or (when operating with zones) the name of a zone. Can be specified multiple times.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fB-Z\fR \fIimage_name\fR\fR
+.ad
+.sp .6
+.RS 4n
+Only valid with -r. Run operation in all but the specified linked image. \fIimage_name\fR\fR can be a fully qualified linked image name in the form <plugin>:<name> or (when operating with zones) the name of a zone. Can be specified multiple times.
+.RE
+
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBpkg exact-install\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-refresh\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [\fB--reject\fR \fIpkg_fmri_pattern\fR]... \fIpkg_fmri_pattern\fR ...\fR
+.ad
+.sp .6
+.RS 4n
+Install or update the specified packages as if installing onto a bare system. Any previously installed packages that are not specified on the command line and are not a dependency of the specified packages will be removed. This command ignores restrictions to not install packages that are on the avoid list and not update packages that are on the frozen list. Otherwise, this \fBexact-install\fR subcommand behaves the same way that the \fBinstall\fR subcommand behaves. To explicitly request the latest version of a package, use \fBlatest\fR for the version portion of \fIpkg_fmri_pattern\fR. For example, specify \fBvim@latest\fR.
+.sp
+Packages are selected based on publisher search order and stickiness. See the \fBpkg publisher\fR and \fBpkg set-publisher\fR commands for information about search order and stickiness. If the \fIpkg_fmri_pattern\fR does not specify the publisher, the first publisher that provides a matching package is used as the installation source. If that publisher does not provide a version of the package that can be installed in this image, then the installation operation fails. Use the \fBpkg list -a\fR command to see which publishers provide a version of the package that can be installed in this image.
+.sp
+If more than one \fIpkg_fmri_pattern\fR is specified, and if any of the specified packages cannot be installed in this image, then none of the specified packages will be installed.
+.sp
+Some configuration files might be renamed or replaced during the installation process. For more information on how the package system determines which files to preserve, and how they are preserved during package operations, see "File Actions" in the \fBpkg\fR(5) man page.
+.sp
+If a package is on the avoid list, installing it removes it from that list.
+.sp
+.sp
+For descriptions of options, see the \fBinstall\fR command above.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBpkg uninstall\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB--ignore-missing\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]] [--sync-actuators | --sync-actuators-timeout \fItimeout\fR] \fIpkg_fmri_pattern\fR ...\fR
 .ad
 .sp .6
 .RS 4n
 Remove installed packages that match \fIpkg_fmri_pattern\fR.
 .sp
 If a package is the subject of a group dependency, uninstalling it places it on the avoid list. See the \fBavoid\fR subcommand below.
-.sp
-For descriptions of options, see the \fBinstall\fR command above.
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fB--ignore-missing\fR\fR
+.ad
+.sp .6
+.RS 4n
+Ignore packages which are not installed. This prevents pkg(1) from failing when trying to uninstall a package which is not currently installed. 
+.RE
+
+For all other options, see the \fBinstall\fR command above.
 .sp
 In the command output, note any messages that say a new boot environment has been created. If a new boot environment has been created and activated, that is the environment that is booted by default on next reboot. See the \fBbeadm\fR(1M) man page for information about managing boot environments.
 .RE
@@ -601,7 +709,7 @@
 .ne 2
 .mk
 .na
-\fB\fBpkg update\fR [\fB-fnvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-refresh\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [\fB--reject\fR \fIpkg_fmri_pattern\fR]... [\fIpkg_fmri_pattern\fR ...]\fR
+\fB\fBpkg update\fR [\fB-fnvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--ignore-missing\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-index\fR] [\fB--no-refresh\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [--sync-actuators | --sync-actuators-timeout \fItimeout\fR] [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]] [\fB--reject\fR \fIpkg_fmri_pattern\fR]... [\fIpkg_fmri_pattern\fR ...]\fR
 .ad
 .sp .6
 .RS 4n
@@ -636,6 +744,17 @@
 Do not execute the client up-to-date check when updating all installed packages.
 .RE
 
+.sp
+.ne 2
+.mk
+.na
+\fB\fB--ignore-missing\fR\fR
+.ad
+.sp .6
+.RS 4n
+Do not fail update if specified packages are not currently installed.
+.RE
+
 For all other options, see the \fBinstall\fR command above.
 .sp
 In the command output, note any messages that say a new boot environment has been created. If a new boot environment has been created and activated, that is the environment that is booted by default on next reboot if you do not specify the \fB--no-be-activate\fR option. See the \fBbeadm\fR(1M) man page for information about managing boot environments.
@@ -1651,7 +1770,7 @@
 .ne 2
 .mk
 .na
-\fB\fBpkg change-variant\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-backup-be\fR |\fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] \fIvariant_name\fR=\fIvalue\fR ...\fR
+\fB\fBpkg change-variant\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-backup-be\fR |\fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]] [--sync-actuators | --sync-actuators-timeout \fItimeout\fR] \fIvariant_name\fR=\fIvalue\fR ...\fR
 .ad
 .sp .6
 .RS 4n
@@ -1743,7 +1862,7 @@
 .ne 2
 .mk
 .na
-\fB\fBpkg change-facet\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] \fIfacet_name\fR=(\fBTrue\fR|\fBFalse\fR|\fBNone\fR) ...\fR
+\fB\fBpkg change-facet\fR [\fB-nvq\fR] [\fB-C\fR \fIn\fR] [\fB-g\fR \fIpath_or_uri\fR]... [\fB--accept\fR] [\fB--licenses\fR] [\fB--no-be-activate\fR] [\fB--no-backup-be\fR | \fB--require-backup-be\fR] [\fB--backup-be-name\fR \fIname\fR] [\fB--deny-new-be\fR | \fB--require-new-be\fR] [\fB--be-name\fR \fIname\fR] [-r [-z \fIimage_name\fR ... | -Z \fIimage_name\fR ...]] [--sync-actuators | --sync-actuators-timeout \fItimeout\fR] \fIfacet_name\fR=(\fBTrue\fR|\fBFalse\fR|\fBNone\fR) ...\fR
 .ad
 .sp .6
 .RS 4n
@@ -3751,6 +3870,17 @@
 .ne 2
 .mk
 .na
+\fB\fB8\fR\fR
+.ad
+.RS 6n
+.rt  
+One or more SMF actuators timed out.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
 \fB\fB99\fR\fR
 .ad
 .RS 6n
--- a/src/man/pkg.5	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/man/pkg.5	Thu Mar 27 22:03:22 2014 +0530
@@ -1,6 +1,6 @@
 '\" te
 .\" Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
-.TH pkg 5 "07 Aug 2013" "SunOS 5.11" "Standards, Environments, and Macros"
+.TH pkg 5 "25 Feb 2014" "SunOS 5.11" "Standards, Environments, and Macros"
 .SH NAME
 pkg \- Image Packaging System
 .SH DESCRIPTION
@@ -353,6 +353,28 @@
 .ne 2
 .mk
 .na
+\fB\fBsysattr\fR\fR
+.ad
+.sp .6
+.RS 4n
+This attribute is used to specify any system attributes which should be set for this file. The value of the \fBsysattr\fR attribute can be a comma-separated list of verbose system attributes or a string sequence of compact system attribute options. Supported system attributes are explained in chmod(1). System attributes specified in the manifest are set additionally to system attributes which might have been set by other subsystems of the operating system.
+.sp
+.in +2
+.nf
+file path=opt/secret_file sysattr=hidden,sensitive
+.sp
+or
+.sp
+file path=opt/secret_file sysattr=HT
+.fi
+.in -2
+
+.RE
+
+.sp
+.ne 2
+.mk
+.na
 \fB\fBtimestamp\fR\fR
 .ad
 .sp .6
--- a/src/man/pkglint.1	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/man/pkglint.1	Thu Mar 27 22:03:22 2014 +0530
@@ -342,7 +342,7 @@
 .ad
 .RS 6n
 .rt  
-One or more lint checks emitted output.
+One or more package manifests contain lint errors.
 .RE
 
 .sp
@@ -353,7 +353,7 @@
 .ad
 .RS 6n
 .rt  
-Invalid command line options were specified.
+An error occurred that is not a lint error in a manifest. For example, an invalid command line option might have been specified.
 .RE
 
 .sp
--- a/src/man/pkgrecv.1	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/man/pkgrecv.1	Thu Mar 27 22:03:22 2014 +0530
@@ -1,6 +1,6 @@
 '\" te
 .\" Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
-.TH pkgrecv 1 "30 Aug 2013" "SunOS 5.11" "User Commands"
+.TH pkgrecv 1 "21 Nov 2013" "SunOS 5.11" "User Commands"
 .SH NAME
 pkgrecv \- Image Packaging System content retrieval utility
 .SH SYNOPSIS
@@ -376,15 +376,16 @@
 Processing packages for publisher solaris ...
 Retrieving and evaluating 1 package(s)...
 
-Adding packages ...
+Retrieving packages ...
         Packages to add:       1
       Files to retrieve:    1557
 Estimated transfer size: 9.21 MB
+
+Packages to transfer:
+editor/[email protected],5.11-0.175.1.0.0.24.0:20120904T172128Z
+
 PROCESS                                     ITEMS    GET (MB) SEND (MB)
 Completed                                     1/1     9.2/9.2 25.4/25.4
-
-FMRI
-pkg://solaris/editor/[email protected],5.11-0.175.1.0.0.24.0:20121023T171531Z
 .fi
 .in -2
 .sp
--- a/src/man/pkgrepo.1	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/man/pkgrepo.1	Thu Mar 27 22:03:22 2014 +0530
@@ -1,6 +1,6 @@
 '\" te
 .\" Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
-.TH pkgrepo 1 "29 Aug 2013" "SunOS 5.11" "User Commands"
+.TH pkgrepo 1 "27 Feb 2014" "SunOS 5.11" "User Commands"
 .SH NAME
 pkgrepo \- Image Packaging System repository management utility
 .SH SYNOPSIS
@@ -38,6 +38,13 @@
 
 .LP
 .nf
+/usr/bin/pkgrepo contents [-m]
+    [-t \fIaction_name\fR[,\fIaction_name\fR]...]... -s \fIrepo_uri_or_path\fR
+    [--key \fIssl_key\fR --cert \fIssl_cert\fR]... [\fIpkg_fmri_pattern\fR...]
+.fi
+
+.LP
+.nf
 /usr/bin/pkgrepo rebuild [-p \fIpublisher\fR]...
     -s \fIrepo_uri_or_path\fR [--key \fIssl_key\fR --cert \fIssl_cert\fR]...
     [--no-catalog] [--no-index]
@@ -357,7 +364,7 @@
 .ad
 .sp .6
 .RS 4n
-List the packages in the \fIrepo_uri_or_path\fR repository that match the specified \fIpkg_fmri_pattern\fR patterns. If no patterns are specified, all packages in the repository are listed.
+List the packages in the \fIrepo_uri_or_path\fR repository that match the specified \fIpkg_fmri_pattern\fR patterns. If no patterns are specified, all packages in the repository are listed. The \fIpkg_fmri_pattern\fR pattern can include the \fB?\fR and \fB*\fR characters as \fBglob\fR(3C)-style wildcards to match one or more packages.
 .sp
 In the default output, the first column contains the name of the publisher of the package. The second column contains the name of the package. The third column is a flag that shows the status of the package. A value of \fBo\fR in the status column indicates the package is obsolete. A value of \fBr\fR in the status column indicates the package has been renamed, which is a form of obsoletion. The fourth column contains the release and branch versions of the package. See \fBpkg\fR(5) for information about release and branch versions.
 .sp
@@ -368,7 +375,41 @@
 .ad
 .sp .6
 .RS 4n
-Only display the packages for the given publisher. If not provided, the packages for all publishers are displayed. This option can be specified multiple times.
+Only display the packages for the given publisher. If not provided, the packages for all publishers are listed. This option can be specified multiple times.
+.RE
+
+For descriptions of all other options, see the \fBpkgrepo get\fR command above.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBpkgrepo contents\fR [\fB-m\fR [\fB-t\fR \fIaction_name\fR[,\fIaction_name\fR]...]... \fB-s\fR \fIrepo_uri_or_path\fR [\fB--key\fR \fIssl_key\fR \fB--cert\fR \fIssl_cert\fR]... [\fIpkg_fmri_pattern\fR...]\fR
+.ad
+.sp .6
+.RS 4n
+List all packages in the \fIrepo_uri_or_path\fR repository. If \fIpkg_fmri_pattern\fR is specified, display the contents (action attributes) of all matching packages in the repository.
+.sp
+.ne 2
+.mk
+.na
+\fB\fB-m\fR\fR
+.ad
+.sp .6
+.RS 4n
+Display all attributes of actions in the specified packages.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fB-t\fR \fIaction_name\fR\fR
+.ad
+.sp .6
+.RS 4n
+Display only the specified actions in the specified packages. The \fB-t\fR option can be specified multiple times, or multiple actions can be specified as the argument to one \fB-t\fR option by separating the action names with commas. The value of \fIaction_name\fR is one of the actions listed in  "Actions" in the \fBpkg\fR(5) man page, such as \fBfile\fR, \fBdir\fR, \fBdriver\fR, \fBdepend\fR, or \fBset\fR.
 .RE
 
 For descriptions of all other options, see the \fBpkgrepo get\fR command above.
@@ -472,7 +513,7 @@
 .ad
 .sp .6
 .RS 4n
-Remove the packages matching the specified patterns from the repository, including any files they reference that are not in use by any other package.
+Remove packages that match the specified \fIpkg_fmri_pattern\fR pattern from the repository, including any files they reference that are not in use by any other package. The \fIpkg_fmri_pattern\fR pattern can include the \fB?\fR and \fB*\fR characters as \fBglob\fR(3C)-style wildcards to match one or more packages.
 .LP
 Note - 
 .sp
@@ -604,7 +645,7 @@
 A string that represents the name of the default publisher. The first character must be a-z, A-Z, or 0-9. The remainder of the string can only contain the characters 0-9, -, ., a-z, and A-Z. This value indicates the publisher that should be used when more than one publisher's packages are present, or when packages are published to the repository and a publisher is not specified.
 .RE
 
-For repository versions 3 and 4, the following properties can be set for individual publishers in the repository:
+For repository versions 3 and 4, the following properties can be set for individual publishers in the repository. Use the \fB-p\fR option to specify at least one publisher when you set these properties:
 .sp
 .ne 2
 .mk
--- a/src/modules/actions/directory.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/actions/directory.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
 #
 
 """module describing a directory packaging object
@@ -219,23 +219,27 @@
                         elif e.errno == errno.EBUSY and os.path.ismount(path):
                                 # User has replaced directory with mountpoint,
                                 # or a package has been poorly implemented.
-                                err_txt = _("Unable to remove %s; it is in use "
-                                    "as a mountpoint.  To continue, please "
-                                    "unmount the filesystem at the target "
-                                    "location and try again.") % path
-                                raise apx.ActionExecutionError(self,
-                                    details=err_txt, error=e,
-                                    fmri=pkgplan.origin_fmri)
+				if not self.attrs.get("implicit"):
+                                        err_txt = _("Unable to remove %s; it is "
+                                            "in use as a mountpoint. To "
+                                            "continue, please unmount the "
+                                            "filesystem at the target "
+                                            "location and try again.") % path
+                                        raise apx.ActionExecutionError(self,
+                                            details=err_txt, error=e,
+                                            fmri=pkgplan.origin_fmri) 
                         elif e.errno == errno.EBUSY:
                                 # os.path.ismount() is broken for lofs
                                 # filesystems, so give a more generic
                                 # error.
-                                err_txt = _("Unable to remove %s; it is in use "
-                                    "by the system, another process, or as a "
-                                    "mountpoint.") % path
-                                raise apx.ActionExecutionError(self,
-                                    details=err_txt, error=e,
-                                    fmri=pkgplan.origin_fmri)
+				if not self.attrs.get("implicit"):
+                                        err_txt = _("Unable to remove %s; it "
+                                            "is in use by the system, another "
+                                            "process, or as a mountpoint.") \
+                                            % path
+                                        raise apx.ActionExecutionError(self,
+                                            details=err_txt, error=e,
+                                            fmri=pkgplan.origin_fmri)
                         elif e.errno != errno.EACCES: # this happens on Windows
                                 raise
 
--- a/src/modules/actions/file.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/actions/file.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """module describing a file packaging object
@@ -59,7 +59,7 @@
 
         name = "file"
         key_attr = "path"
-        unique_attrs = "path", "mode", "owner", "group", "preserve"
+        unique_attrs = "path", "mode", "owner", "group", "preserve", "sysattr"
         globally_identical = True
         namespace_group = "path"
         ordinality = generic._orderdict[name]
@@ -262,6 +262,33 @@
                                 os.utime(final_path, (t, t))
                                 os.chmod(final_path, mode)
 
+                # Handle system attributes.
+                sattr = self.attrs.get("sysattr")
+                if sattr:
+                        sattrs = sattr.split(",")
+                        if len(sattrs) == 1 and \
+                            sattrs[0] not in portable.get_sysattr_dict():
+                                # not a verbose attr, try as a compact attr seq
+                                arg = sattrs[0]
+                        else:
+                                arg = sattrs
+
+                        try:
+                                portable.fsetattr(final_path, arg)
+                        except OSError, e:
+                                if e.errno != errno.EINVAL:
+                                        raise
+                                raise ActionExecutionError(self,
+                                    details=_("System attributes are not "
+                                    "supported on the target filesystem."))
+                        except ValueError, e:
+                                raise ActionExecutionError(self,
+                                    details=_("Could not set system attributes "
+                                    "'%(attrlist)s': %(err)s") % {
+                                        "attrlist": sattr,
+                                        "err": e
+                                    })
+
         def verify(self, img, **args):
                 """Returns a tuple of lists of the form (errors, warnings,
                 info).  The error list will be empty if the action has been
@@ -391,6 +418,31 @@
                                                     "found": sha_hash,
                                                     "expected": hash_val })
                                         self.replace_required = True
+
+                        # Check system attributes.
+                        # Since some attributes like 'archive' or 'av_modified'
+                        # are set automatically by the FS, it makes no sense to
+                        # check for 1:1 matches. So we only check that the
+                        # system attributes specified in the action are still
+                        # set on the file.
+                        sattr = self.attrs.get("sysattr", None)
+                        if sattr:
+                                sattrs = sattr.split(",")
+                                if len(sattrs) == 1 and \
+                                    sattrs[0] not in portable.get_sysattr_dict():
+                                        # not a verbose attr, try as a compact
+                                        set_attrs = portable.fgetattr(path,
+                                            compact=True)
+                                        sattrs = sattrs[0]
+                                else:
+                                        set_attrs = portable.fgetattr(path)
+
+                                for a in sattrs:
+                                        if a not in set_attrs:
+                                                errors.append(
+                                                    _("System attribute '%s' "
+                                                    "not set") % a)
+
                 except EnvironmentError, e:
                         if e.errno == errno.EACCES:
                                 errors.append(_("Skipping: Permission Denied"))
--- a/src/modules/actions/group.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/actions/group.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """module describing a user packaging object
@@ -99,8 +99,9 @@
                                     details=txt, fmri=pkgplan.destination_fmri)
                         img = pkgplan.image
                         img._groups.add(self)
-                        img._groupsbyname[self.attrs["groupname"]] = \
-                            int(self.attrs["gid"])
+                        if "gid" in self.attrs:
+                                img._groupsbyname[self.attrs["groupname"]] = \
+                                    int(self.attrs["gid"])
 
         def postinstall(self, pkgplan, orig):
                 groups = pkgplan.image._groups
@@ -166,7 +167,7 @@
                 gr = GroupFile(pkgplan.image)
                 cur_attrs = gr.getvalue(self.attrs)
                 # groups need to be first added, last removed
-                if not cur_attrs["user-list"]:
+                if "user-list" not in cur_attrs:
                         try:
                                 gr.removevalue(self.attrs)
                         except KeyError, e:
--- a/src/modules/actions/user.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/actions/user.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """module describing a user packaging object
@@ -185,8 +185,9 @@
                                     details=txt, fmri=pkgplan.destination_fmri)
                         img = pkgplan.image
                         img._users.add(self)
-                        img._usersbyname[self.attrs["username"]] = \
-                            int(self.attrs["uid"])
+                        if "uid" in self.attrs:
+                                img._usersbyname[self.attrs["username"]] = \
+                                    int(self.attrs["uid"])
                 except KeyError, e:
                         # cannot find group
                         self.validate() # should raise error if no group in action
--- a/src/modules/client/actuator.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/actuator.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import pkg.smf as smf
@@ -87,6 +87,8 @@
                 self.tmp_suspend_fmris = None
                 self.do_nothing = True
                 self.cmd_path = ""
+                self.sync_timeout = 0
+                self.act_timed_out = False
 
         @staticmethod
         def getstate(obj, je_state=None):
@@ -118,6 +120,19 @@
                 Actuator.setstate(rv, state, jd_state)
                 return rv
 
+        def set_timeout(self, timeout):
+                """ Set actuator timeout.
+                'timeout'       Actuator timeout in seconds. The following
+                                special values are allowed:
+                                  0: don't use synchronous actuators
+                                 -1: no timeout, wait until finished
+                """
+                self.sync_timeout = timeout
+
+        @property
+        def timed_out(self):
+                return self.act_timed_out
+
         def __bool__(self):
                 return self.install or self.removal or self.update
 
@@ -201,6 +216,16 @@
                 return bool("true" in self.update.get("reboot-needed", [])) or \
                     bool("true" in self.removal.get("reboot-needed", []))
 
+        def __invoke(self, func, *args, **kwargs):
+                """Execute SMF command. Remember if command timed out."""
+                try:
+                        func(*args, **kwargs)
+                except smf.NonzeroExitException, nze:
+                        if nze.return_code == smf.EXIT_TIMEOUT:
+                                self.act_timed_out = True
+                        else:
+                                raise
+
         def exec_prep(self, image):
                 if not image.is_liveroot():
                         # we're doing off-line pkg ops; we need
@@ -253,12 +278,12 @@
                 params = tuple(suspend_fmris | tmp_suspend_fmris)
 
                 if params:
-                        smf.disable(params, temporary=True)
+                        self.__invoke(smf.disable, params, temporary=True)
 
                 params = tuple(disable_fmris)
 
                 if params:
-                        smf.disable(params)
+                        self.__invoke(smf.disable, params)
 
         def exec_fail_actuators(self, image):
                 """handle a failed install"""
@@ -270,7 +295,7 @@
                     self.tmp_suspend_fmris)
 
                 if params:
-                        smf.mark("maintenance", params)
+                        self.__invoke(smf.mark, "maintenance", params)
 
         def exec_post_actuators(self, image):
                 """do post execution actuator processing"""
@@ -314,7 +339,7 @@
                 params = tuple(refresh_fmris)
 
                 if params:
-                        smf.refresh(params)
+                        self.__invoke(smf.refresh, params, sync_timeout=self.sync_timeout)
 
                 for fmri in restart_fmris.copy():
                         if smf.is_disabled(fmri):
@@ -322,7 +347,7 @@
 
                 params = tuple(restart_fmris)
                 if params:
-                        smf.restart(params)
+                        self.__invoke(smf.restart, params, sync_timeout=self.sync_timeout)
 
                 # reenable suspended services that were running
                 # be sure to not enable services that weren't running
@@ -331,8 +356,10 @@
 
                 params = tuple(self.suspend_fmris)
                 if params:
-                        smf.enable(params)
+                        self.__invoke(smf.enable, params, sync_timeout=self.sync_timeout)
 
                 params = tuple(self.tmp_suspend_fmris)
                 if params:
-                        smf.enable(params, temporary=True)
+                        self.__invoke(smf.enable, params, temporary=True,
+                            sync_timeout=self.sync_timeout)
+
--- a/src/modules/client/api.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/api.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """This module provides the supported, documented interface for clients to
@@ -103,8 +103,9 @@
 # things like help(pkg.client.api.PlanDescription)
 from pkg.client.plandesc import PlanDescription # pylint: disable=W0611
 
-CURRENT_API_VERSION = 76
-COMPATIBLE_API_VERSIONS = frozenset([72, 73, 74, 75, CURRENT_API_VERSION])
+CURRENT_API_VERSION = 78
+COMPATIBLE_API_VERSIONS = frozenset([72, 73, 74, 75, 76, 77,
+    CURRENT_API_VERSION])
 CURRENT_P5I_VERSION = 1
 
 # Image type constants.
@@ -595,7 +596,7 @@
                 try:
                         self._img.check_cert_validity()
                 except apx.ExpiringCertificate, e:
-                        logger.error(e)
+                        logger.warning(e)
                 except:
                         exc_type, exc_value, exc_traceback = sys.exc_info()
                         if exc_type in log_op_end:
@@ -1170,27 +1171,30 @@
 
                 arg_types = {
                     # arg name              type                   nullable
-                    "_noexecute":           (bool,                 False),
+                    "_act_timeout":         (int,                  False),
                     "_be_activate":         (bool,                 False),
-                    "_new_be":              (bool,                 True),
                     "_be_name":             (basestring,           True),
                     "_backup_be":           (bool,                 True),
                     "_backup_be_name":      (basestring,           True),
+                    "_ignore_missing":      (bool,                 False),
+                    "_ipkg_require_latest": (bool,                 False),
+                    "_li_erecurse":         (iter,                 True),
+                    "_li_ignore":           (iter,                 True),
+                    "_li_md_only":          (bool,                 False),
+                    "_li_parent_sync":      (bool,                 False),      
+                    "_new_be":              (bool,                 True),
+                    "_noexecute":           (bool,                 False),
                     "_pubcheck":            (bool,                 False),
                     "_refresh_catalogs":    (bool,                 False),
                     "_repos":               (iter,                 True),
                     "_update_index":        (bool,                 False),
-                    "_li_ignore":           (iter,                 True),
-                    "_li_parent_sync":      (bool,                 False),
-                    "_li_md_only":          (bool,                 False),
-                    "_ipkg_require_latest": (bool,                 False),
+                    "facets":               (dict,                 True),
+                    "mediators":            (iter,                 True),
                     "pkgs_inst":            (iter,                 True),
+                    "pkgs_to_uninstall":    (iter,                 True),
                     "pkgs_update":          (iter,                 True),
-                    "pkgs_to_uninstall":    (iter,                 True),
                     "reject_list":          (iter,                 True),
-                    "mediators":            (iter,                 True),
                     "variants":             (dict,                 True),
-                    "facets":               (pkg.facet.Facets,     True)
                 }
 
                 # merge kwargs into the main arg dict
@@ -1281,12 +1285,12 @@
                 if illegals:
                         raise apx.UnsupportedRepositoryURI(illegals)
 
-        def __plan_op(self, _op, _ad_kwargs=None,
+        def __plan_op(self, _op, _act_timeout=0, _ad_kwargs=None,
             _backup_be=None, _backup_be_name=None, _be_activate=True,
             _be_name=None, _ipkg_require_latest=False, _li_ignore=None,
-            _li_md_only=False, _li_parent_sync=True, _new_be=False,
-            _noexecute=False, _pubcheck=True, _refresh_catalogs=True,
-            _repos=None, _update_index=True, **kwargs):
+            _li_erecurse=None, _li_md_only=False, _li_parent_sync=True,
+            _new_be=False, _noexecute=False, _pubcheck=True,
+            _refresh_catalogs=True, _repos=None, _update_index=True, **kwargs):
                 """Contructs a plan to change the package or linked image
                 state of an image.
 
@@ -1396,7 +1400,8 @@
                         elif _op in [API_OP_CHANGE_FACET,
                             API_OP_CHANGE_VARIANT]:
                                 self._img.make_change_varcets_plan(**kwargs)
-                        elif _op == API_OP_INSTALL:
+                        elif _op == API_OP_INSTALL or \
+                            _op == API_OP_EXACT_INSTALL:
                                 self._img.make_install_plan(**kwargs)
                         elif _op == API_OP_REVERT:
                                 self._img.make_revert_plan(**kwargs)
@@ -1424,6 +1429,10 @@
                         if not _noexecute:
                                 self.__plan_type = self.__plan_desc.plan_type
 
+                        if _act_timeout != 0:
+                                self.__plan_desc.set_actuator_timeout(
+                                    _act_timeout)
+
                         # Yield to our caller so they can display our plan
                         # before we recurse into child images.  Drop the
                         # activity lock before yielding because otherwise the
@@ -1437,8 +1446,9 @@
                         # either a dictionary representing the parsable output
                         # from the child image operation, or None.  Eventually
                         # these will yield plan descriptions objects instead.
+
                         for p_dict in self._img.linked.api_recurse_plan(
-                            api_kwargs=kwargs,
+                            api_kwargs=kwargs, erecurse_list=_li_erecurse,
                             refresh_catalogs=_refresh_catalogs,
                             update_index=_update_index,
                             progtrack=self.__progresstracker):
@@ -1617,11 +1627,12 @@
                         continue
                 return (not self.planned_nothingtodo(), self.solaris_image())
 
-        def gen_plan_update(self, pkgs_update=None, backup_be=None,
-            backup_be_name=None, be_activate=True, be_name=None,
-            force=False, li_ignore=None, li_parent_sync=True, new_be=True,
-            noexecute=False, pubcheck=True, refresh_catalogs=True,
-            reject_list=misc.EmptyI, repos=None, update_index=True):
+        def gen_plan_update(self, pkgs_update=None, act_timeout=0,
+            backup_be=None, backup_be_name=None, be_activate=True, be_name=None,
+            force=False, ignore_missing=False, li_ignore=None,
+            li_parent_sync=True, li_erecurse=None, new_be=True, noexecute=False,
+            pubcheck=True, refresh_catalogs=True, reject_list=misc.EmptyI,
+            repos=None, update_index=True):
 
                 """This is a generator function that yields a PlanDescription
                 object.  If parsable_version is set, it also yields dictionaries
@@ -1645,6 +1656,9 @@
                 'force' indicates whether update should skip the package
                 system up to date check.
 
+                'ignore_missing' indicates whether update should ignore packages
+                which are not installed.
+
                 'pubcheck' indicates that we should skip the child image
                 publisher check before creating a plan for this image.  only
                 pkg.1 should use this parameter, other callers should never
@@ -1660,14 +1674,16 @@
 
                 op = API_OP_UPDATE
                 return self.__plan_op(op,
-                    _backup_be=backup_be, _backup_be_name=backup_be_name,
-                    _be_activate=be_activate, _be_name=be_name,
-                    _ipkg_require_latest=ipkg_require_latest,
+                    _act_timeout=act_timeout, _backup_be=backup_be,
+                    _backup_be_name=backup_be_name, _be_activate=be_activate,
+                    _be_name=be_name, _ipkg_require_latest=ipkg_require_latest,
                     _li_ignore=li_ignore, _li_parent_sync=li_parent_sync,
-                    _new_be=new_be, _noexecute=noexecute, _pubcheck=pubcheck,
+                    _li_erecurse=li_erecurse, _new_be=new_be,
+                    _noexecute=noexecute, _pubcheck=pubcheck,
                     _refresh_catalogs=refresh_catalogs, _repos=repos,
-                    _update_index=update_index, pkgs_update=pkgs_update,
-                    reject_list=reject_list)
+                    _update_index=update_index, ignore_missing=ignore_missing,
+                    pkgs_update=pkgs_update, reject_list=reject_list,
+                    )
 
         def plan_install(self, pkg_list, refresh_catalogs=True,
             noexecute=False, update_index=True, be_name=None,
@@ -1682,11 +1698,11 @@
                         continue
                 return not self.planned_nothingtodo()
 
-        def gen_plan_install(self, pkgs_inst, backup_be=None,
-            backup_be_name=None, be_activate=True, be_name=None, li_ignore=None,
-            li_parent_sync=True, new_be=False, noexecute=False,
-            refresh_catalogs=True, reject_list=misc.EmptyI, repos=None,
-            update_index=True):
+        def gen_plan_install(self, pkgs_inst, act_timeout=0, backup_be=None,
+            backup_be_name=None, be_activate=True, be_name=None,
+            li_erecurse=None, li_ignore=None, li_parent_sync=True, new_be=False,
+            noexecute=False, pubcheck=True, refresh_catalogs=True,
+            reject_list=misc.EmptyI, repos=None, update_index=True):
                 """This is a generator function that yields a PlanDescription
                 object.  If parsable_version is set, it also yields dictionaries
                 containing plan information for child images.
@@ -1700,7 +1716,9 @@
                 Callers should pass all arguments by name assignment and
                 not by positional order.
 
-                'pkgs_inst' is a list of packages to install.
+                'act_timeout' sets the timeout for synchronous actuators in
+                seconds, -1 is no timeout, 0 is for using asynchronous
+                actuators.
 
                 'backup_be' indicates whether a backup boot environment should
                 be created before the operation is executed.  If True, a backup
@@ -1713,9 +1731,20 @@
                 'backup_be_name' is a string to use as the name of any backup
                 boot environment created during the operation.
 
+                'be_activate' is an optional boolean indicating whether any
+                new boot environment created for the operation should be set
+                as the active one on next boot if the operation is successful.
+
                 'be_name' is a string to use as the name of any new boot
                 environment created during the operation.
 
+                'li_erecurse' is either None or a list. If it's None (the
+                default), the planning operation will not explicitly recurse
+                into linked children to perform the requested operation. If this
+                is a list of linked image children names, the requested
+                operation will be performed in each of the specified
+                children.
+
                 'li_ignore' is either None or a list.  If it's None (the
                 default), the planning operation will attempt to keep all
                 linked children in sync.  If it's an empty list the planning
@@ -1739,6 +1768,8 @@
                 executed and whether history will be recorded after
                 planning is finished.
 
+                'pkgs_inst' is a list of packages to install.
+
                 'refresh_catalogs' controls whether the catalogs will
                 automatically be refreshed.
 
@@ -1751,10 +1782,6 @@
                 use during the planned operation.  All API functions called
                 while a plan is still active will use this package data.
 
-                'be_activate' is an optional boolean indicating whether any
-                new boot environment created for the operation should be set
-                as the active one on next boot if the operation is successful.
-
                 'update_index' determines whether client search indexes
                 will be updated after operation completion during plan
                 execution."""
@@ -1763,6 +1790,43 @@
                 assert pkgs_inst and type(pkgs_inst) == list
 
                 op = API_OP_INSTALL
+                return self.__plan_op(op, _act_timeout=act_timeout,
+                    _backup_be=backup_be, _backup_be_name=backup_be_name,
+                    _be_activate=be_activate, _be_name=be_name,
+                    _li_erecurse=li_erecurse, _li_ignore=li_ignore,
+                    _li_parent_sync=li_parent_sync, _new_be=new_be,
+                    _noexecute=noexecute, _pubcheck=pubcheck,
+                    _refresh_catalogs=refresh_catalogs, _repos=repos,
+                    _update_index=update_index, pkgs_inst=pkgs_inst,
+                    reject_list=reject_list, )
+
+        def gen_plan_exact_install(self, pkgs_inst, backup_be=None,
+            backup_be_name=None, be_activate=True, be_name=None, li_ignore=None,
+            li_parent_sync=True, new_be=False, noexecute=False,
+            refresh_catalogs=True, reject_list=misc.EmptyI, repos=None,
+            update_index=True):
+                """This is a generator function that yields a PlanDescription
+                object.  If parsable_version is set, it also yields dictionaries
+                containing plan information for child images.
+
+                Constructs a plan to install exactly the packages provided in
+                pkgs_inst.  Once an operation has been planned, it may be
+                executed by first calling prepare(), and then execute_plan().
+                After execution of a plan, or to abandon a plan, reset()
+                should be called.
+
+                Callers should pass all arguments by name assignment and
+                not by positional order.
+
+                'pkgs_inst' is a list of packages to install exactly.
+
+                For all other parameters, refer to 'gen_plan_install'
+                for an explanation of their usage and effects."""
+
+                # certain parameters must be specified
+                assert pkgs_inst and type(pkgs_inst) == list
+
+                op = API_OP_EXACT_INSTALL
                 return self.__plan_op(op,
                     _backup_be=backup_be, _backup_be_name=backup_be_name,
                     _be_activate=be_activate, _be_name=be_name,
@@ -1918,10 +1982,11 @@
                         continue
                 return not self.planned_nothingtodo()
 
-        def gen_plan_uninstall(self, pkgs_to_uninstall,
+        def gen_plan_uninstall(self, pkgs_to_uninstall, act_timeout=0,
             backup_be=None, backup_be_name=None, be_activate=True,
-            be_name=None, li_ignore=None, li_parent_sync=True, new_be=False,
-            noexecute=False, update_index=True):
+            be_name=None, ignore_missing=False, li_ignore=None,
+            li_parent_sync=True, li_erecurse=None, new_be=False, noexecute=False,
+            pubcheck=True, update_index=True):
                 """This is a generator function that yields a PlanDescription
                 object.  If parsable_version is set, it also yields dictionaries
                 containing plan information for child images.
@@ -1935,6 +2000,9 @@
                 Callers should pass all arguments by name assignment and
                 not by positional order.
 
+                'ignore_missing' indicates whether uninstall should ignore
+                packages which are not installed.
+
                 'pkgs_to_uninstall' is a list of packages to uninstall.
 
                 For all other parameters, refer to the 'gen_plan_install'
@@ -1944,13 +2012,14 @@
                 assert pkgs_to_uninstall and type(pkgs_to_uninstall) == list
 
                 op = API_OP_UNINSTALL
-                return self.__plan_op(op,
+                return self.__plan_op(op, _act_timeout=act_timeout,
                     _backup_be=backup_be, _backup_be_name=backup_be_name,
                     _be_activate=be_activate, _be_name=be_name,
-                    _li_ignore=li_ignore, _li_parent_sync=li_parent_sync,
-                    _new_be=new_be, _noexecute=noexecute,
-                    _refresh_catalogs=False,
-                    _update_index=update_index,
+                    _li_erecurse=li_erecurse, _li_ignore=li_ignore,
+                    _li_parent_sync=li_parent_sync, _new_be=new_be,
+                    _noexecute=noexecute, _pubcheck=pubcheck,
+                    _refresh_catalogs=False, _update_index=update_index,
+                    ignore_missing=ignore_missing,
                     pkgs_to_uninstall=pkgs_to_uninstall)
 
         def gen_plan_set_mediators(self, mediators, backup_be=None,
@@ -2014,8 +2083,9 @@
                 return not self.planned_nothingtodo()
 
         def gen_plan_change_varcets(self, facets=None, variants=None,
-            backup_be=None, backup_be_name=None, be_activate=True, be_name=None,
-            li_ignore=None, li_parent_sync=True, new_be=None, noexecute=False,
+            act_timeout=0, backup_be=None, backup_be_name=None,
+            be_activate=True, be_name=None, li_erecurse=None, li_ignore=None,
+            li_parent_sync=True, new_be=None, noexecute=False, pubcheck=True,
             refresh_catalogs=True, reject_list=misc.EmptyI, repos=None,
             update_index=True):
                 """This is a generator function that yields a PlanDescription
@@ -2048,14 +2118,15 @@
                 else:
                         op = API_OP_CHANGE_FACET
 
-                return self.__plan_op(op, _backup_be=backup_be,
-                    _backup_be_name=backup_be_name, _be_activate=be_activate,
-                    _be_name=be_name, _li_ignore=li_ignore,
+                return self.__plan_op(op, _act_timeout=act_timeout,
+                    _backup_be=backup_be, _backup_be_name=backup_be_name,
+                    _be_activate=be_activate, _be_name=be_name,
+                    _li_erecurse=li_erecurse, _li_ignore=li_ignore,
                     _li_parent_sync=li_parent_sync, _new_be=new_be,
-                    _noexecute=noexecute, _refresh_catalogs=refresh_catalogs,
-                    _repos=repos,
-                    _update_index=update_index, variants=variants,
-                    facets=facets, reject_list=reject_list)
+                    _noexecute=noexecute, _pubcheck=pubcheck,
+                    _refresh_catalogs=refresh_catalogs, _repos=repos,
+                    _update_index=update_index, facets=facets,
+                    variants=variants, reject_list=reject_list)
 
         def plan_revert(self, args, tagged=False, noexecute=True, be_name=None,
             new_be=None, be_activate=True):
@@ -2571,7 +2642,8 @@
                                 raise apx.AlreadyExecutedException()
 
                         try:
-                                be = bootenv.BootEnv(self._img)
+                                be = bootenv.BootEnv(self._img,
+                                    self.__progresstracker)
                         except RuntimeError:
                                 be = bootenv.BootEnvNull(self._img)
                         self._img.bootenv = be
@@ -2720,7 +2792,8 @@
                         be.activate_image(set_active=self.__be_activate)
                 else:
                         be.activate_install_uninstall()
-                self._img.cleanup_cached_content()
+                self._img.cleanup_cached_content(
+                    progtrack=self.__progresstracker)
                 # If the end of the operation wasn't already logged
                 # by one of the previous operations, then log it as
                 # ending now.
@@ -4929,7 +5002,7 @@
                 try:
                         self._img.check_cert_validity(pubs=[pub])
                 except apx.ExpiringCertificate, e:
-                        logger.error(str(e))
+                        logger.warning(str(e))
 
                 def origins_changed(oldr, newr):
                         old_origins = set([
@@ -5102,7 +5175,7 @@
                 # Successful; so save configuration.
                 self._img.save_config()
 
-        def log_operation_end(self, error=None, result=None, 
+        def log_operation_end(self, error=None, result=None,
             release_notes=None):
                 """Marks the end of an operation to be recorded in image
                 history.
@@ -5508,8 +5581,13 @@
                 if repo_uri:
                         # Assume auto configuration.
                         if ssl_cert:
-                                misc.validate_ssl_cert(ssl_cert, prefix=prefix,
-                                    uri=repo_uri)
+                                try:
+                                        misc.validate_ssl_cert(
+                                            ssl_cert,
+                                            prefix=prefix,
+                                            uri=repo_uri)
+                                except apx.ExpiringCertificate, e:
+                                        logger.warning(e)
 
                         repo = publisher.RepositoryURI(repo_uri,
                             ssl_cert=ssl_cert, ssl_key=ssl_key)
@@ -5557,8 +5635,13 @@
                 if prefix and not repo_uri:
                         # Auto-configuration not possible or not requested.
                         if ssl_cert:
-                                misc.validate_ssl_cert(ssl_cert, prefix=prefix,
-                                    uri=origins[0])
+                                try:
+                                        misc.validate_ssl_cert(
+                                            ssl_cert,
+                                            prefix=prefix,
+                                            uri=origins[0])
+                                except apx.ExpiringCertificate, e:
+                                        logger.warning(e)
 
                         repo = publisher.Repository()
                         for o in origins:
--- a/src/modules/client/api_errors.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/api_errors.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import errno
@@ -148,6 +148,9 @@
                 self.user_dir = user_dir
                 self.root_dir = root_dir
 
+        def __str__(self):
+                return _("No image rooted at '%s'") % self.user_dir
+
 
 class ImageFormatUpdateNeeded(ApiException):
         """Used to indicate that an image cannot be used until its format is
@@ -335,13 +338,21 @@
 
 
 class IpkgOutOfDateException(ApiException):
-        pass
+        def __str__(self):
+                return _("pkg(5) out of date")
+
 
 class ImageUpdateOnLiveImageException(ApiException):
-        pass
+        def __str__(self):
+                return _("Requested operation cannot be performed "
+                    "in live image.")
+
 
 class RebootNeededOnLiveImageException(ApiException):
-        pass
+        def __str__(self):
+                return _("Requested operation cannot be performed "
+                    "in live image.")
+
 
 class CanceledException(ApiException):
         pass
@@ -406,6 +417,17 @@
                         "filesystem.")
 
 
+class InvalidLockException(ApiException):
+        def __init__(self, path):
+                ApiException.__init__(self)
+                self.path = path
+
+        def __str__(self):
+                return _("Unable to obtain or operate on lock at %s.\n"
+                    "Please try the operation again as a privileged user.") \
+                    % self.path
+
+
 class PackageMatchErrors(ApiException):
         """Used to indicate which patterns were not matched or illegal during
         a package name matching operation."""
@@ -1030,7 +1052,8 @@
         """Used to indicate a Catalog file could not be loaded."""
 
         def __str__(self):
-                return _("Catalog file '%s' is invalid.") % self.data
+                return _("Catalog file '%s' is invalid.\nUse 'pkgrepo rebuild' "
+                    "to create a new package catalog.") % self.data
 
 
 class MismatchedCatalog(CatalogError):
@@ -1231,7 +1254,8 @@
 
 class CorruptedIndexException(IndexingException):
         """This is used when the index is not in a correct state."""
-        pass
+        def __str__(self):
+                return _("The search index appears corrupted.")
 
 
 class InconsistentIndexException(IndexingException):
@@ -1328,6 +1352,12 @@
                 self.fmri = args[0]
                 self.dependents = args[1]
 
+        def __str__(self):
+                s = _("Unable to remove '%s' due to the following packages "
+                    "that depend on it:\n") % self.fmri
+                s += "\n".join(str(f) for f in self.dependents)
+                return s
+
 def _str_autofix(self):
 
         if getattr(self, "_autofix_pkgs", []):
@@ -2337,28 +2367,71 @@
 class ExpiredCertificate(CertificateError):
         """Used to indicate that a certificate has expired."""
 
+        def __init__(self, *args, **kwargs):
+                CertificateError.__init__(self, *args, **kwargs)
+                self.publisher = self._args.get("publisher", None)
+                self.uri = self._args.get("uri", None)
+
         def __str__(self):
-                publisher = self._args.get("publisher", None)
-                uri = self._args.get("uri", None)
-                if publisher:
-                        if uri:
+                if self.publisher:
+                        if self.uri:
                                 return _("Certificate '%(cert)s' for publisher "
                                     "'%(pub)s' needed to access '%(uri)s', "
                                     "has expired.  Please install a valid "
                                     "certificate.") % { "cert": self.data,
-                                    "pub": publisher, "uri": uri }
+                                    "pub": self.publisher, "uri": self.uri }
                         return _("Certificate '%(cert)s' for publisher "
                             "'%(pub)s', has expired.  Please install a valid "
                             "certificate.") % { "cert": self.data,
-                            "pub": publisher }
-                if uri:
+                            "pub": self.publisher }
+                if self.uri:
                         return _("Certificate '%(cert)s', needed to access "
                             "'%(uri)s', has expired.  Please install a valid "
-                            "certificate.") % { "cert": self.data, "uri": uri }
+                            "certificate.") % { "cert": self.data,
+                            "uri": self.uri }
                 return _("Certificate '%s' has expired.  Please install a "
                     "valid certificate.") % self.data
 
 
+class ExpiredCertificates(CertificateError):
+        """Used to collect ExpiredCertficate exceptions."""
+
+        def __init__(self, errors):
+
+                self.errors = []
+
+                assert (isinstance(errors, (list, tuple,
+                    set, ExpiredCertificate)))
+
+                if isinstance(errors, ExpiredCertificate):
+                        self.errors.append(errors)
+                else:
+                        self.errors = errors
+
+        def __str__(self):
+                pdict = dict()
+                for e in self.errors:
+                        if e.publisher in pdict:
+                                pdict[e.publisher].append(e.uri)
+                        else:
+                                pdict[e.publisher] = [e.uri]
+
+                msg = ""
+                for pub, uris in pdict.items():
+                        msg += "\n%s:" % _("Publisher")
+                        msg += " %s" % pub
+                        for uri in uris:
+                                msg += "\n  %s:\n" % _("Origin URI")
+                                msg += "    %s\n" % uri
+                                msg += "  %s:\n" % _("Certificate")
+                                msg += "    %s\n" % uri.ssl_cert
+                                msg += "  %s:\n" % _("Key")
+                                msg += "    %s\n" % uri.ssl_key
+                return _("One or more client key and certificate files have "
+                    "expired. Please\nupdate the configuration for the "
+                    "publishers or origins listed below:\n %s") % msg
+
+
 class ExpiringCertificate(CertificateError):
         """Used to indicate that a certificate has expired."""
 
@@ -2610,25 +2683,28 @@
             attach_child_notsup=None,
             attach_parent_notsup=None,
             attach_root_as_child=None,
+            attach_with_curpath=None,
             child_bad_img=None,
             child_diverged=None,
             child_dup=None,
-            child_nested=None,
             child_not_in_altroot=None,
             child_not_nested=None,
-            child_path_eaccess=None,
+            child_op_failed=None,
             child_path_notabs=None,
             child_unknown=None,
             cmd_failed=None,
+            cmd_output_invalid=None,
             detach_child_notsup=None,
             detach_from_parent=None,
             detach_parent_notsup=None,
             img_linked=None,
+            intermediate_image=None,
             lin_malformed=None,
-            link_to_self=False,
+            link_to_self=None,
             parent_bad_img=None,
             parent_bad_notabs=None,
             parent_bad_path=None,
+            parent_nested=None,
             parent_not_in_altroot=None,
             pkg_op_failed=None,
             self_linked=None,
@@ -2640,25 +2716,28 @@
                 self.attach_child_notsup = attach_child_notsup
                 self.attach_parent_notsup = attach_parent_notsup
                 self.attach_root_as_child = attach_root_as_child
+                self.attach_with_curpath = attach_with_curpath
                 self.child_bad_img = child_bad_img
                 self.child_diverged = child_diverged
                 self.child_dup = child_dup
-                self.child_nested = child_nested
                 self.child_not_in_altroot = child_not_in_altroot
                 self.child_not_nested = child_not_nested
-                self.child_path_eaccess = child_path_eaccess
+                self.child_op_failed = child_op_failed
                 self.child_path_notabs = child_path_notabs
                 self.child_unknown = child_unknown
                 self.cmd_failed = cmd_failed
+                self.cmd_output_invalid = cmd_output_invalid
                 self.detach_child_notsup = detach_child_notsup
                 self.detach_from_parent = detach_from_parent
                 self.detach_parent_notsup = detach_parent_notsup
                 self.img_linked = img_linked
+                self.intermediate_image = intermediate_image
                 self.lin_malformed = lin_malformed
                 self.link_to_self = link_to_self
                 self.parent_bad_img = parent_bad_img
                 self.parent_bad_notabs = parent_bad_notabs
                 self.parent_bad_path = parent_bad_path
+                self.parent_nested = parent_nested
                 self.parent_not_in_altroot = parent_not_in_altroot
                 self.pkg_op_failed = pkg_op_failed
                 self.self_linked = self_linked
@@ -2701,7 +2780,18 @@
                             "attach: %s") % attach_parent_notsup
 
                 if attach_root_as_child is not None:
-                        err = _("Cannot attach root image as child")
+                        err = _("Cannot attach root image as child: %s" %
+                            attach_root_as_child)
+
+                if attach_with_curpath is not None:
+                        path, curpath = attach_with_curpath
+                        err = _("Cannot link images when an image is not at "
+                            "its default location.  The image currently "
+                            "located at:\n  %(curpath)s\n"
+                            "is normally located at:\n  %(path)s\n") % {
+                                "path": path,
+                                "curpath": curpath,
+                            }
 
                 if child_bad_img is not None:
                         if exitrv == None:
@@ -2726,14 +2816,6 @@
                         err = _("A linked child image with this name "
                             "already exists: %s") % child_dup
 
-                if child_nested is not None:
-                        cpath, ipath = child_nested
-                        err = _("Child image '%(cpath)s' is nested "
-                            "within another image: '%(ipath)s'") % {
-                                "cpath": cpath,
-                                "ipath": ipath,
-                            }
-
                 if child_not_in_altroot is not None:
                         path, altroot = child_not_in_altroot
                         err = _("Child image '%(path)s' is not located "
@@ -2750,18 +2832,26 @@
                                 "ppath": ppath,
                             }
 
-                if child_path_eaccess is not None:
+                if child_op_failed is not None:
+                        op, cpath, e = child_op_failed
                         if exitrv == None:
                                 exitrv = pkgdefs.EXIT_EACCESS
                         if lin:
-                                err = _("Can't access child image "
-                                    "(%(lin)s) at path: %(path)s") % {
+                                err = _("Failed '%(op)s' for child image "
+                                    "(%(lin)s) at path: %(path)s: "
+                                    "%(strerror)s") % {
+                                        "op": op,
                                         "lin": lin,
-                                        "path": child_path_eaccess
+                                        "path": cpath,
+                                        "strerror": e,
                                     }
                         else:
-                                err = _("Can't access child image "
-                                    "at path: %s") % child_path_eaccess
+                                err = _("Failed '%(op)s' for child image "
+                                    "at path: %(path)s: %(strerror)s") % {
+                                        "op": op,
+                                        "path": cpath,
+                                        "strerror": e,
+                                    }
 
                 if child_path_notabs is not None:
                         err = _("Child path not absolute: %s") % \
@@ -2781,6 +2871,15 @@
                         err += _("\nAnd generated the following error "
                             "message:\n%(errout)s" % {"errout": errout})
 
+                if cmd_output_invalid is not None:
+                        (cmd, output) = cmd_output_invalid
+                        err = _(
+                            "The following subprocess:\n"
+                            "    %(cmd)s\n"
+                            "Generated the following unexpected output:\n"
+                            "%(output)s\n" %
+                            {"cmd": " ".join(cmd), "output": "\n".join(output)})
+
                 if detach_child_notsup is not None:
                         err = _("Linked image type does not support "
                             "child detach: %s") % detach_child_notsup
@@ -2799,14 +2898,25 @@
                         err = _("Image already a linked child: %s") % \
                             img_linked
 
+                if intermediate_image is not None:
+                        ppath, cpath, ipath = intermediate_image
+                        err = _(
+                            "Intermediate image '%(ipath)s' found between "
+                            "child '%(cpath)s' and "
+                            "parent '%(ppath)s'") % {
+                                "ppath": ppath,
+                                "cpath": cpath,
+                                "ipath": ipath,
+                            }
+
                 if lin_malformed is not None:
                         err = _("Invalid linked image name '%s'. "
                             "Linked image names have the following format "
                             "'<linked_image plugin>:<linked_image name>'") % \
                             lin_malformed
 
-                if link_to_self:
-                        err = _("Can't link image to itself.")
+                if link_to_self is not None:
+                        err = _("Can't link image to itself: %s")
 
                 if parent_bad_img is not None:
                         if exitrv == None:
@@ -2824,6 +2934,14 @@
                         err = _("Can't access parent image at path: %s") % \
                             parent_bad_path
 
+                if parent_nested is not None:
+                        ppath, cpath = parent_nested
+                        err = _("A parent image '%(ppath)s' can not be nested "
+                            "within a child image '%(cpath)s'") % {
+                                "ppath": ppath,
+                                "cpath": cpath,
+                            }
+
                 if parent_not_in_altroot is not None:
                         path, altroot = parent_not_in_altroot
                         err = _("Parent image '%(path)s' is not located "
@@ -3002,14 +3120,15 @@
         """Used to indicate an issue with verifying options passed to a certain
         operation."""
 
-        GENERIC    = "generic"      # generic option violation
-        OPT_REPEAT = "opt_repeat"   # option repetition is not allowed
-        ARG_REPEAT = "arg_repeat"   # argument repetition is not allowed
-        INCOMPAT   = "incompat"     # option 'a' can not be specified with option 'b'
-        REQUIRED   = "required"     # option 'a' requires option 'b'
-        XOR        = "xor"          # either option 'a' or option 'b' must be specified
-
-	def __init__(self, err_type=GENERIC, options=[], msg=None):
+        GENERIC     = "generic"      # generic option violation
+        OPT_REPEAT  = "opt_repeat"   # option repetition is not allowed
+        ARG_REPEAT  = "arg_repeat"   # argument repetition is not allowed
+        ARG_INVALID = "arg_invalid"  # argument is invalid
+        INCOMPAT    = "incompat"     # option 'a' can not be specified with option 'b'
+        REQUIRED    = "required"     # option 'a' requires option 'b'
+        XOR         = "xor"          # either option 'a' or option 'b' must be specified
+
+        def __init__(self, err_type=GENERIC, options=[], msg=None):
 
                 self.err_type = err_type
                 self.options = options
@@ -3025,7 +3144,7 @@
                                 self.msg += " ".join(self.options)
                         return self.msg
 
-       		if self.err_type == self.OPT_REPEAT:
+                if self.err_type == self.OPT_REPEAT:
                         assert len(self.options) == 1
                         return _("Option '%(option)s' may not be repeated.") % {
                             "option" : self.options[0]}
@@ -3034,6 +3153,11 @@
                         return _("Argument '%(op1)s' for option '%(op2)s' may "
                             "not be repeated.") % {"op1" : self.options[0],
                             "op2" : self.options[1]}
+                elif self.err_type == self.ARG_INVALID:
+                        assert len(self.options) == 2
+                        return _("Argument '%(op1)s' for option '%(op2)s' is "
+                            "invalid.") % {"op1" : self.options[0],
+                            "op2" : self.options[1]}
                 elif self.err_type == self.INCOMPAT:
                         assert len(self.options) == 2
                         return _("The '%(op1)s' and '%(op2)s' option may "
--- a/src/modules/client/bootenv.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/bootenv.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import errno
 import os
@@ -63,7 +63,7 @@
         to operate successfully.  It is soft required, meaning if it exists the
         bootenv class will attempt to provide recovery support."""
 
-        def __init__(self, img):
+        def __init__(self, img, progress_tracker=None):
                 self.be_name = None
                 self.dataset = None
                 self.be_name_clone = None
@@ -73,6 +73,8 @@
                 self.is_live_BE = False
                 self.is_valid = False
                 self.snapshot_name = None
+                self.progress_tracker = progress_tracker
+
                 # record current location of image root so we can remember
                 # original source BE if we clone existing image
                 self.root = self.img.get_root()
@@ -525,6 +527,9 @@
 
                 self.__store_image_state()
 
+                # Ensure cache is flushed before activating and unmounting BE.
+                self.img.cleanup_cached_content(progtrack=self.progress_tracker)
+
                 relock = False
                 if self.img.locked:
                         # This is necessary since the lock will
@@ -562,12 +567,17 @@
         def restore_image(self):
                 """Restore a failed update attempt."""
 
+                # flush() is necessary here so that the warnings get printed
+                # on a new line.
+                if self.progress_tracker:
+                        self.progress_tracker.flush()
+
                 self.__reset_image_state(failure=True)
 
                 # Leave the clone around for debugging purposes if we're
                 # operating on the live BE.
                 if self.is_live_BE:
-                        logger.error(_(" The running system has not been "
+                        logger.error(_("The running system has not been "
                             "modified. Modifications were only made to a clone "
                             "of the running system.  This clone is mounted at "
                             "%s should you wish to inspect it.") % \
@@ -611,6 +621,11 @@
                         notify user of its existence. Rollback
                         if not operating on a live BE"""
 
+                # flush() is necessary here so that the warnings get printed
+                # on a new line.
+                if self.progress_tracker:
+                        self.progress_tracker.flush()
+
                 if self.is_live_BE:
                         # Create a new BE based on the previously taken
                         # snapshot.
--- a/src/modules/client/image.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/image.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import M2Crypto as m2
@@ -1773,13 +1773,19 @@
                 if not pubs:
                         pubs = self.gen_publishers()
 
+                errors = []
                 for p in pubs:
                         r = p.repository
                         for uri in r.origins:
                                 if uri.ssl_cert:
-                                        misc.validate_ssl_cert(
-                                            uri.ssl_cert,
-                                            prefix=p.prefix, uri=uri)
+                                        try:
+                                                misc.validate_ssl_cert(
+                                                    uri.ssl_cert,
+                                                    prefix=p.prefix,
+                                                    uri=uri)
+                                        except apx.ExpiredCertificate, e:
+                                                errors.append(e)
+
                                 if uri.ssl_key:
                                         try:
                                                 if not os.path.exists(
@@ -1791,6 +1797,9 @@
                                         except EnvironmentError, e:
                                                 raise apx._convert_error(e)
 
+                if errors:
+                        raise apx.ExpiredCertificates(errors)
+
         def has_publisher(self, prefix=None, alias=None):
                 """Returns a boolean value indicating whether a publisher
                 exists in the image configuration that matches the given
@@ -2199,7 +2208,7 @@
                 progresstracker.verify_add_progress(fmri)
                 manf = self.get_manifest(fmri, ignore_excludes=True)
                 sigs = list(manf.gen_actions_by_type("signature",
-                    self.list_excludes()))
+                    excludes=self.list_excludes()))
                 if sig_pol and (sigs or sig_pol.name != "ignore"):
                         # Only perform signature verification logic if there are
                         # signatures or if signature-policy is not 'ignore'.
@@ -2247,7 +2256,7 @@
                             med.mediator_impl_matches(med_impl, cfg_med_impl)
 
                 try:
-                        for act in manf.gen_actions(self.list_excludes()):
+                        for act in manf.gen_actions(excludes=self.list_excludes()):
                                 progresstracker.verify_add_progress(fmri)
                                 if (act.name == "link" or
                                     act.name == "hardlink") and \
@@ -2389,7 +2398,7 @@
                             mfstpath=mfstpath, pub=alt_pub)
                 except InvalidContentException:
                         return False
-        
+
         def has_manifest(self, pfmri, alt_pub=None):
                 """Check to see if the manifest for pfmri is present on disk and
                 has the correct hash."""
@@ -2648,13 +2657,29 @@
                 # 'Updating package cache'
                 progtrack.job_start(progtrack.JOB_PKG_CACHE, goal=len(removed))
                 for pfmri in removed:
-                        manifest.FactoredManifest.clear_cache(
-                            self.get_manifest_dir(pfmri))
+                        mcdir = self.get_manifest_dir(pfmri)
+                        manifest.FactoredManifest.clear_cache(mcdir)
+
+                        # Remove package cache directory if possible; we don't
+                        # care if it fails.
                         try:
-                                portable.remove(self.get_manifest_path(pfmri))
+                                os.rmdir(os.path.dirname(mcdir))
+                        except:
+                                pass
+
+                        mpath = self.get_manifest_path(pfmri)
+                        try:
+                                portable.remove(mpath)
                         except EnvironmentError, e:
                                 if e.errno != errno.ENOENT:
                                         raise apx._convert_error(e)
+
+                        # Remove package manifest directory if possible; we
+                        # don't care if it fails.
+                        try:
+                                os.rmdir(os.path.dirname(mpath))
+                        except:
+                                pass
                         progtrack.job_add_progress(progtrack.JOB_PKG_CACHE)
                 progtrack.job_done(progtrack.JOB_PKG_CACHE)
 
@@ -3555,7 +3580,7 @@
                 for pfmri in self.gen_installed_pkgs():
                         progtrack.job_add_progress(progtrack.JOB_FAST_LOOKUP)
                         m = self.get_manifest(pfmri, ignore_excludes=True)
-                        for act in m.gen_actions(excludes):
+                        for act in m.gen_actions(excludes=excludes):
                                 if not act.globally_identical:
                                         continue
                                 act.strip()
@@ -3596,9 +3621,9 @@
                         last_name, last_key, last_offset = None, None, sf.tell()
                         cnt = 0
                         while heap:
-				# This is a tight loop, so try to avoid burning
-				# CPU calling into the progress tracker
-				# excessively.
+                                # This is a tight loop, so try to avoid burning
+                                # CPU calling into the progress tracker
+                                # excessively.
                                 if len(heap) % 100 == 0:
                                         progtrack.job_add_progress(
                                             progtrack.JOB_FAST_LOOKUP)
@@ -3691,6 +3716,22 @@
                 progtrack.job_done(progtrack.JOB_FAST_LOOKUP)
                 return actdict, timestamp
 
+        def _remove_fast_lookups(self):
+                """Remove on-disk database created by _create_fast_lookups.
+                Should be called before updating image state to prevent the
+                client from seeing stale state if _create_fast_lookups is
+                interrupted."""
+
+                for fname in ("actions.stripped", "actions.offsets",
+                    "keys.conflicting"):
+                        try:
+                                portable.remove(os.path.join(
+                                    self.__action_cache_dir, fname))
+                        except EnvironmentError, e:
+                                if e.errno == errno.ENOENT:
+                                        continue
+                                raise apx._convert_error(e)
+
         def _load_actdict(self, progtrack):
                 """Read the file of offsets created in _create_fast_lookups()
                 and return the dictionary mapping action name and key value to
@@ -3748,7 +3789,7 @@
                         # This is a tight loop, so try to avoid burning
                         # CPU calling into the progress tracker excessively.
                         # Since we are already using the offset, we use that
-			# to damp calls back into the progress tracker.
+                        # to damp calls back into the progress tracker.
                         if off % 500 == 0:
                                 progtrack.plan_add_progress(
                                     progtrack.PLAN_ACTION_CONFLICT)
@@ -3802,7 +3843,8 @@
                 for pfmri in self.gen_installed_pkgs():
                         m = self.get_manifest(pfmri)
                         dirs = set()
-                        for act in m.gen_actions_by_type(atype, excludes):
+                        for act in m.gen_actions_by_type(atype,
+                            excludes=excludes):
                                 if implicit_dirs:
                                         dirs.add(act.attrs["path"])
                                 yield act, pfmri
@@ -3878,19 +3920,35 @@
 
                 shutil.rmtree(self._incoming_cache_dir, True)
 
-        def cleanup_cached_content(self):
+        def cleanup_cached_content(self, progtrack=None):
                 """Delete the directory that stores all of our cached
                 downloaded content.  This may take a while for a large
                 directory hierarchy.  Don't clean up caches if the
                 user overrode the underlying setting using PKG_CACHEDIR or
                 PKG_CACHEROOT. """
 
-                if self.cfg.get_policy(imageconfig.FLUSH_CONTENT_CACHE):
-                        for path, readonly, pub, layout in self.get_cachedirs():
-                                if readonly or (self.__user_cache_dir and
-                                    path.startswith(self.__user_cache_dir)):
-                                        continue
-                                shutil.rmtree(path, True)
+                if not self.cfg.get_policy(imageconfig.FLUSH_CONTENT_CACHE):
+                        return
+
+                cdirs = []
+                for path, readonly, pub, layout in self.get_cachedirs():
+                        if readonly or (self.__user_cache_dir and
+                            path.startswith(self.__user_cache_dir)):
+                                continue
+                        cdirs.append(path)
+
+                if not cdirs:
+                        return
+
+                if not progtrack:
+                        progtrack = progress.NullProgressTracker()
+
+                # 'Updating package cache'
+                progtrack.job_start(progtrack.JOB_PKG_CACHE, goal=len(cdirs))
+                for path in cdirs:
+                        shutil.rmtree(path, True)
+                        progtrack.job_add_progress(progtrack.JOB_PKG_CACHE)
+                progtrack.job_done(progtrack.JOB_PKG_CACHE)
 
         def salvage(self, path, full_path=False):
                 """Called when unexpected file or directory is found during
@@ -4219,6 +4277,18 @@
                 cleanup.
                 """
 
+                if DebugValues.get_value("simulate-plan-hang"):
+                        # If pkg5.hang file is present in image dir, then
+                        # sleep after loading configuration until file is
+                        # gone.  This is used by the test suite for signal
+                        # handling testing, etc.
+                        hang_file = os.path.join(self.imgdir, "pkg5.hang")
+                        with open(hang_file, "w") as f:
+                                f.write(str(os.getpid()))
+
+                        while os.path.exists(hang_file):
+                                time.sleep(1)
+
                 # Allow garbage collection of previous plan.
                 self.imageplan = None
 
@@ -4243,6 +4313,8 @@
                                         ip.plan_change_varcets(**kwargs)
                                 elif _op == pkgdefs.API_OP_INSTALL:
                                         ip.plan_install(**kwargs)
+                                elif _op ==pkgdefs.API_OP_EXACT_INSTALL:
+                                        ip.plan_exact_install(**kwargs)
                                 elif _op == pkgdefs.API_OP_REVERT:
                                         ip.plan_revert(**kwargs)
                                 elif _op == pkgdefs.API_OP_SET_MEDIATOR:
@@ -4298,6 +4370,14 @@
                         new = set(variants.iteritems())
                         cur = set(self.cfg.variants.iteritems())
                         variants = dict(new - cur)
+                elif facets:
+                        new_facets = self.get_facets()
+                        for f in facets:
+                                if facets[f] is None:
+                                        new_facets.pop(f, None)
+                                else:
+                                        new_facets[f] = facets[f]
+                        facets = new_facets
 
                 self.__make_plan_common(op, progtrack, check_cancel,
                     noexecute, new_variants=variants, new_facets=facets,
@@ -4383,18 +4463,20 @@
                 progtrack.plan_all_done()
 
         def make_uninstall_plan(self, op, progtrack, check_cancel,
-            noexecute, pkgs_to_uninstall):
+            ignore_missing, noexecute, pkgs_to_uninstall):
                 """Create uninstall plan to remove the specified packages."""
 
                 progtrack.plan_all_start()
 
                 self.__make_plan_common(op, progtrack, check_cancel,
-                    noexecute, pkgs_to_uninstall=pkgs_to_uninstall)
+                    noexecute, ignore_missing=ignore_missing,
+                    pkgs_to_uninstall=pkgs_to_uninstall)
 
                 progtrack.plan_all_done()
 
         def make_update_plan(self, op, progtrack, check_cancel,
-            noexecute, pkgs_update=None, reject_list=misc.EmptyI):
+            noexecute, ignore_missing=False, pkgs_update=None,
+            reject_list=misc.EmptyI):
                 """Create a plan to update all packages or the specific ones as
                 far as possible.  This is a helper routine for some common
                 operations in the client.
@@ -4402,8 +4484,8 @@
 
                 progtrack.plan_all_start()
                 self.__make_plan_common(op, progtrack, check_cancel,
-                    noexecute, pkgs_update=pkgs_update,
-                    reject_list=reject_list)
+                    noexecute, ignore_missing=ignore_missing,
+                    pkgs_update=pkgs_update, reject_list=reject_list)
                 progtrack.plan_all_done()
 
         def make_revert_plan(self, op, progtrack, check_cancel,
--- a/src/modules/client/imageplan.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/imageplan.py	Thu Mar 27 22:03:22 2014 +0530
@@ -154,8 +154,8 @@
                 self.pd = plan
                 self.__update_avail_space()
 
-		# make sure we init this even if we don't call solver
-		self.pd._new_avoid_obs = (self.image.avoid_set_get(),
+                # make sure we init this even if we don't call solver
+                self.pd._new_avoid_obs = (self.image.avoid_set_get(),
                     self.image.obsolete_set_get())
 
                 if self.pd.state == plandesc.UNEVALUATED:
@@ -382,7 +382,7 @@
 
         def __plan_install_solver(self, li_pkg_updates=True, li_sync_op=False,
             new_facets=None, new_variants=None, pkgs_inst=None,
-            reject_list=misc.EmptyI, fmri_changes=None):
+            reject_list=misc.EmptyI, fmri_changes=None, exact_install=False):
                 """Use the solver to determine the fmri changes needed to
                 install the specified pkgs, sync the specified image, and/or
                 change facets/variants within the current image."""
@@ -429,7 +429,21 @@
                 else:
                         variants = self.image.get_variants()
 
+                installed_dict_tmp = {}
+                # If exact_install is on, clear the installed_dict.
+                if exact_install:
+                        installed_dict_tmp = installed_dict.copy()
+                        installed_dict = {}
+
                 def solver_cb(ignore_inst_parent_deps):
+                        avoid_set = self.image.avoid_set_get()
+                        frozen_list = self.image.get_frozen_list()
+                        # If exact_install is on, ignore avoid_set and
+                        # frozen_list.
+                        if exact_install:
+                                avoid_set = set()
+                                frozen_list = []
+
                         # instantiate solver
                         solver = pkg_solver.PkgSolver(
                             self.image.get_catalog(
@@ -437,21 +451,23 @@
                             installed_dict,
                             pub_ranks,
                             variants,
-                            self.image.avoid_set_get(),
+                            avoid_set,
                             self.image.linked.parent_fmris(),
                             self.__progtrack)
 
                         # run solver
                         new_vector, new_avoid_obs = \
                             solver.solve_install(
-                                self.image.get_frozen_list(),
+                                frozen_list,
                                 inst_dict,
                                 new_variants=new_variants,
                                 excludes=self.__new_excludes,
                                 reject_set=reject_set,
                                 relax_all=li_sync_op,
                                 ignore_inst_parent_deps=\
-                                    ignore_inst_parent_deps)
+                                    ignore_inst_parent_deps,
+                                exact_install=exact_install,
+                                installed_dict_tmp=installed_dict_tmp)
 
                         return solver, new_vector, new_avoid_obs
 
@@ -464,6 +480,10 @@
                     self.__run_solver(solver_cb, \
                         retry_wo_parent_deps=retry_wo_parent_deps)
 
+                # Restore the installed_dict for checking fmri changes.
+                if exact_install:
+                        installed_dict = installed_dict_tmp.copy()
+
                 self.pd._fmri_changes = self.__vector_2_fmri_changes(
                     installed_dict, new_vector,
                     li_pkg_updates=li_pkg_updates,
@@ -491,6 +511,24 @@
                     reject_list=reject_list)
                 self.pd.state = plandesc.EVALUATED_PKGS
 
+        def __plan_exact_install(self, li_pkg_updates=True, li_sync_op=False,
+            new_facets=None, new_variants=None, pkgs_inst=None,
+            reject_list=misc.EmptyI):
+                """Determine the fmri changes needed to install exactly the
+                specified pkgs, sync the image, and/or change facets/variants
+                within the current image."""
+
+                self.__plan_op()
+                self.__plan_install_solver(
+                    li_pkg_updates=li_pkg_updates,
+                    li_sync_op=li_sync_op,
+                    new_facets=new_facets,
+                    new_variants=new_variants,
+                    pkgs_inst=pkgs_inst,
+                    reject_list=reject_list,
+                    exact_install=True)
+                self.pd.state = plandesc.EVALUATED_PKGS
+
         def set_be_options(self, backup_be, backup_be_name, new_be,
             be_activate, be_name):
                 self.pd._backup_be = backup_be
@@ -514,6 +552,13 @@
                 self.__plan_install(pkgs_inst=pkgs_inst,
                      reject_list=reject_list)
 
+        def plan_exact_install(self, pkgs_inst=None, reject_list=misc.EmptyI):
+                """Determine the fmri changes needed to install exactly the
+                specified pkgs"""
+
+                self.__plan_exact_install(pkgs_inst=pkgs_inst,
+                     reject_list=reject_list)
+
         def __get_attr_fmri_changes(self, get_mattrs):
                 # Attempt to optimize package planning by determining which
                 # packages are actually affected by changing attributes (e.g.,
@@ -881,10 +926,12 @@
                 self.__plan_install(li_pkg_updates=li_pkg_updates,
                     li_sync_op=True, reject_list=reject_list)
 
-        def plan_uninstall(self, pkgs_to_uninstall):
+        def plan_uninstall(self, pkgs_to_uninstall, ignore_missing=False):
                 self.__plan_op()
                 proposed_dict, self.__match_rm = self.__match_user_fmris(
-                    self.image, pkgs_to_uninstall, self.MATCH_INST_VERSIONS)
+                    self.image, pkgs_to_uninstall, self.MATCH_INST_VERSIONS,
+                    raise_not_installed=not ignore_missing)
+
                 # merge patterns together
                 proposed_removals = set([
                     f
@@ -937,7 +984,7 @@
                 self.pd.state = plandesc.EVALUATED_PKGS
 
         def __plan_update_solver(self, pkgs_update=None,
-            reject_list=misc.EmptyI):
+            ignore_missing=False, reject_list=misc.EmptyI):
                 """Use the solver to determine the fmri changes needed to
                 update the specified pkgs or all packages if none were
                 specified."""
@@ -964,6 +1011,7 @@
                         update_dict, references = self.__match_user_fmris(
                             self.image, pkgs_update, self.MATCH_INST_STEMS,
                             pub_ranks=pub_ranks, installed_pkgs=installed_dict,
+                            raise_not_installed=not ignore_missing,
                             reject_set=reject_set)
                         self.__match_update = references
 
@@ -1018,12 +1066,14 @@
                 if DebugValues["plan"]:
                         self.pd._solver_errors = solver.get_trim_errors()
 
-        def plan_update(self, pkgs_update=None, reject_list=misc.EmptyI):
+        def plan_update(self, pkgs_update=None,
+            ignore_missing=False, reject_list=misc.EmptyI):
                 """Determine the fmri changes needed to update the specified
                 pkgs or all packages if none were specified."""
 
                 self.__plan_op()
                 self.__plan_update_solver(
+                    ignore_missing=ignore_missing,
                     pkgs_update=pkgs_update,
                     reject_list=reject_list)
                 self.pd.state = plandesc.EVALUATED_PKGS
@@ -1069,14 +1119,14 @@
                                 m = self.image.get_manifest(f,
                                     ignore_excludes=True)
                                 for act in m.gen_actions_by_type("file",
-                                    self.__new_excludes):
+                                    excludes=self.__new_excludes):
                                         if "revert-tag" in act.attrs and \
                                             (set(act.attrlist("revert-tag")) &
                                              tag_set):
                                                 revert_dict[(f, m)].append(act)
 
                                 for act in m.gen_actions_by_type("dir",
-                                    self.__new_excludes):
+                                    excludes=self.__new_excludes):
                                         if "revert-tag" not in act.attrs:
                                                 continue
                                         for a in act.attrlist("revert-tag"):
@@ -1100,7 +1150,7 @@
                                 m = self.image.get_manifest(f,
                                     ignore_excludes=True)
                                 for act in m.gen_actions_by_type("file",
-                                    self.__new_excludes):
+                                    excludes=self.__new_excludes):
                                         path = act.attrs["path"]
                                         if path in revertpaths or \
                                             path in overlaypaths:
@@ -1379,7 +1429,7 @@
                         if implicit_dirs:
                                 dirs = set() # Keep track of explicit dirs
                         for act in m.gen_actions_by_type(atype,
-                            self.__new_excludes):
+                            excludes=self.__new_excludes):
                                 if implicit_dirs:
                                         dirs.add(act.attrs["path"])
                                 yield act, pfmri
@@ -1411,7 +1461,7 @@
                         if implicit_dirs:
                                 dirs = set() # Keep track of explicit dirs
                         for act in m.gen_actions_by_type(atype,
-                            excludes):
+                            excludes=excludes):
                                 if implicit_dirs:
                                         dirs.add(act.attrs["path"])
                                 yield act, pfmri
@@ -2635,8 +2685,8 @@
                                 if isinstance(note, unicode):
                                         note = note.encode("utf-8")
                                 print >> tmpfile, note
-			# make file world readable
-			os.chmod(path, 0644)
+                        # make file world readable
+                        os.chmod(path, 0644)
                         tmpfile.close()
                         self.pd.release_notes_name = os.path.basename(path)
 
@@ -3857,6 +3907,12 @@
                 # image before the current operation is performed is desired.
                 empty_image = self.__is_image_empty()
 
+                if not empty_image:
+                        # Before proceeding, remove fast lookups database so
+                        # that if _create_fast_lookups is interrupted later the
+                        # client isn't left with invalid state.
+                        self.image._remove_fast_lookups()
+
                 self.pd._actuators.exec_prep(self.image)
 
                 self.pd._actuators.exec_pre_actuators(self.image)
--- a/src/modules/client/linkedimage/common.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/linkedimage/common.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """
@@ -43,6 +43,7 @@
 # standard python classes
 import collections
 import copy
+import itertools
 import operator
 import os
 import select
@@ -75,24 +76,30 @@
 REL_CHILD  = "child"
 
 # linked image properties
-PROP_NAME           = "li-name"
-PROP_ALTROOT        = "li-altroot"
-PROP_PARENT_PATH    = "li-parent"
-PROP_PATH           = "li-path"
-PROP_MODEL          = "li-model"
-PROP_RECURSE        = "li-recurse"
+PROP_CURRENT_PARENT_PATH = "li-current-parent"
+PROP_CURRENT_PATH        = "li-current-path"
+PROP_MODEL               = "li-model"
+PROP_NAME                = "li-name"
+PROP_PARENT_PATH         = "li-parent"
+PROP_PATH                = "li-path"
+PROP_PATH_TRANSFORM      = "li-path-transform"
+PROP_RECURSE             = "li-recurse"
 prop_values         = frozenset([
-    PROP_ALTROOT,
+    PROP_CURRENT_PARENT_PATH,
+    PROP_CURRENT_PATH,
+    PROP_MODEL,
     PROP_NAME,
+    PROP_PARENT_PATH,
     PROP_PATH,
-    PROP_MODEL,
-    PROP_PARENT_PATH,
+    PROP_PATH_TRANSFORM,
     PROP_RECURSE,
 ])
 
 # properties that never get saved
 temporal_props = frozenset([
-    PROP_ALTROOT,
+    PROP_CURRENT_PARENT_PATH,
+    PROP_CURRENT_PATH,
+    PROP_PATH_TRANSFORM,
 ])
 
 # special linked image name values (PROP_NAME)
@@ -113,6 +120,12 @@
 PATH_PROP      = os.path.join(__DATA_DIR, "linked_prop")
 PATH_PUBS      = os.path.join(__DATA_DIR, "linked_ppubs")
 
+#
+# we define PATH_TRANSFORM_NONE as a tuple instead of just None because this
+# will prevent it from being accidently serialized to json.
+#
+PATH_TRANSFORM_NONE = ("/", "/")
+
 LI_RVTuple = collections.namedtuple("LI_RVTuple", "rvt_rv rvt_e rvt_p_dict")
 
 def _li_rvtuple_check(rvtuple):
@@ -213,7 +226,7 @@
 
                 return
 
-        def init_root(self, old_altroot):
+        def init_root(self, root):
                 """Called when the path to the image that we're operating on
                 is changing.  This normally occurs when we clone an image
                 after we've planned and prepared to do an operation."""
@@ -221,17 +234,19 @@
                 # return value: None
                 raise NotImplementedError
 
-        def get_altroot(self, ignore_errors=False):
+        def guess_path_transform(self, ignore_errors=False):
                 """If the linked image plugin is able to detect that we're
-                operating on an image in an alternate root then return the
-                path of the alternate root."""
+                operating on an image in an alternate root then return an
+                transform that can be used to translate between the original
+                image path and the current one."""
 
                 # return value: string or None
                 raise NotImplementedError
 
         def get_child_list(self, nocache=False, ignore_errors=False):
-                """Return a list of the child images associated with the
-                current image."""
+                """Return a list of the child images and paths associated with
+                the current image.  The paths that are returned should be
+                absolute paths to the original child image locations."""
 
                 # return value: list
                 raise NotImplementedError
@@ -458,26 +473,23 @@
                 assert self.__img.imgdir, \
                     "imgdir = %s" % str(self.__img.imgdir)
 
-                # save the old root image path
-                old_root = None
-                if self.__root:
-                        old_root = self.__root
+                # Check if this is our first time accessing the current image
+                # or if we're just re-initializing ourselves.
+                first_pass = self.__root is None
 
                 # figure out the new root image path
-                new_root = self.__img.root.rstrip(os.sep)
-                if new_root == "":
-                        new_root = os.sep
+                root = self.__img.root.rstrip(os.sep) + os.sep
 
                 # initialize paths for linked image data files
-                self.__root = new_root
-                imgdir = self.__img.imgdir.rstrip(os.sep)
+                self.__root = root
+                imgdir = self.__img.imgdir.rstrip(os.sep) + os.sep
                 self.__path_ppkgs = os.path.join(imgdir, PATH_PPKGS)
                 self.__path_prop = os.path.join(imgdir, PATH_PROP)
                 self.__path_ppubs = os.path.join(imgdir, PATH_PUBS)
                 self.__path_pfacets = os.path.join(imgdir, PATH_PFACETS)
 
                 # if this isn't a reset, then load data from the image
-                if not old_root:
+                if first_pass:
                         # the first time around we load non-temporary data (if
                         # there is any) so that we can audit ourselves and see
                         # if we're in currently in sync.
@@ -490,25 +502,23 @@
                         # operation.
                         self.__load()
 
-                # we're not linked or we're not changing root paths we're done
-                if not old_root or not self.__props:
+                # if we're not linked we're done
+                if not self.__props:
                         return
 
-                # get the old altroot directory
-                old_altroot = self.altroot()
-
-                # update the altroot property
-                self.__set_altroot(self.__props, old_root=old_root)
+                # if this is a reset, update temporal properties
+                if not first_pass:
+                        self.__set_current_path(self.__props, update=True)
 
                 # Tell linked image plugins about the updated paths
                 # Unused variable 'plugin'; pylint: disable=W0612
                 for plugin, lip in self.__plugins.iteritems():
                 # pylint: enable=W0612
-                        lip.init_root(old_altroot)
+                        lip.init_root(root)
 
                 # Tell linked image children about the updated paths
                 for lic in self.__lic_dict.itervalues():
-                        lic.child_init_root(old_altroot)
+                        lic.child_init_root()
 
         def __update_props(self, props=None):
                 """Internal helper routine used when we want to update any
@@ -522,8 +532,14 @@
                         self.__verify_props(props)
 
                         # all temporal properties must exist
-                        assert (temporal_props - set(props)) == set(), \
-                            "%s - %s == set()" % (temporal_props, set(props))
+                        for p in temporal_props:
+                                # PROP_CURRENT_PARENT_PATH can only be set if
+                                # we have PROP_PARENT_PATH.
+                                if p is PROP_CURRENT_PARENT_PATH and \
+                                    PROP_PARENT_PATH not in props:
+                                        continue
+                                assert p in props, \
+                                    "'%s' not in %s" % (p, set(props))
 
                 # update state
                 self.__props = props
@@ -581,65 +597,53 @@
                                     missing_props=missing)
 
         @staticmethod
-        def __unset_altroot(props):
-                """Given a set of linked image properties, strip out any
-                altroot properties.  This involves removing the altroot
-                component from the image path property.  This is normally done
-                before we write image properties to disk."""
-
-                # get the current altroot
-                altroot = props[PROP_ALTROOT]
-
-                # remove it from the image path
-                props[PROP_PATH] = rm_altroot_path(
-                    props[PROP_PATH], altroot)
-
+        def set_path_transform(props, path_transform,
+            path=None, current_path=None, update=False):
+                """Given a new path_transform, update path properties."""
+
+                if update:
+                        assert (set(props) & temporal_props), \
+                            "no temporal properties are set: %s" % props
+                else:
+                        assert not (set(props) & temporal_props), \
+                            "temporal properties already set: %s" % props
+
+                # Either 'path' or 'current_path' must be specified.
+                assert path is None or current_path is None
+                assert path is not None or current_path is not None
+
+                if path is not None:
+                        current_path = path_transform_apply(path,
+                            path_transform)
+
+                elif current_path is not None:
+                        path = path_transform_revert(current_path,
+                            path_transform)
+
+                props[PROP_PATH] = path
+                props[PROP_CURRENT_PATH] = current_path
+                props[PROP_PATH_TRANSFORM] = path_transform
                 if PROP_PARENT_PATH in props:
-                        # remove it from the parent image path
-                        props[PROP_PARENT_PATH] = rm_altroot_path(
-                            props[PROP_PARENT_PATH], altroot)
-
-                # delete the current altroot
-                del props[PROP_ALTROOT]
-
-        def __set_altroot(self, props, old_root=None):
+                        props[PROP_CURRENT_PARENT_PATH] = path_transform_apply(
+                            props[PROP_PARENT_PATH], path_transform)
+
+        def __set_current_path(self, props, update=False):
                 """Given a set of linked image properties, the image paths
                 stored within those properties may not match the actual image
                 paths if we're executing within an alternate root environment.
-                We try to detect this condition here, and if this situation
-                occurs we update the linked image paths to reflect the current
-                image paths and we fabricate a new linked image altroot
-                property that points to the new path prefix that was
-                pre-pended to the image paths."""
-
-                # we may have to update the parent image path as well
-                p_path = None
-                if PROP_PARENT_PATH in props:
-                        p_path = props[PROP_PARENT_PATH]
-
-                if old_root:
-                        # get the old altroot
-                        altroot = props[PROP_ALTROOT]
-
-                        # remove the altroot from the image paths
-                        path = rm_altroot_path(old_root, altroot)
-                        if p_path:
-                                p_path = rm_altroot_path(p_path, altroot)
-
-                        # get the new altroot
-                        altroot = get_altroot_path(self.__root, path)
-                else:
-                        path = props[PROP_PATH]
-                        altroot = get_altroot_path(self.__root, path)
-
-                # update properties with altroot
-                props[PROP_ALTROOT] = altroot
-                props[PROP_PATH] = add_altroot_path(path, altroot)
-                if p_path:
-                        props[PROP_PARENT_PATH] = \
-                            add_altroot_path(p_path, altroot)
-
-        def __guess_altroot(self, ignore_errors=False):
+                To deal with this situation we create temporal in-memory
+                properties that represent the current path to the image, and a
+                transform that allows us to translate between the current path
+                and the original path."""
+
+                current_path = self.__root
+                path_transform = compute_path_transform(props[PROP_PATH],
+                    current_path)
+
+                self.set_path_transform(props, path_transform,
+                    current_path=current_path, update=update)
+
+        def __guess_path_transform(self, ignore_errors=False):
                 """If we're initializing parent linked image properties for
                 the first time (or if those properties somehow got deleted)
                 then we need to know if the parent image that we're currently
@@ -649,40 +653,43 @@
                 if the image is a global zone)."""
 
                 # ask each plugin if we're operating in an alternate root
-                p_altroots = []
+                p_transforms = []
                 for plugin, lip in self.__plugins.iteritems():
-                        p_altroot = lip.get_altroot(
+                        p_transform = lip.guess_path_transform(
                             ignore_errors=ignore_errors)
-                        if p_altroot:
-                                p_altroots.append((plugin, p_altroot))
-
-                if not p_altroots:
-                        # no altroot suggested by plugins
-                        return os.sep
-
-                # check for conflicting altroots
-                altroots = list(set([
-                        p_altroot
+                        if p_transform is not PATH_TRANSFORM_NONE:
+                                p_transforms.append((plugin, p_transform))
+
+                if not p_transforms:
+                        # no transform suggested by plugins
+                        return PATH_TRANSFORM_NONE
+
+                # check for conflicting transforms
+                transforms = list(set([
+                        p_transform
                         # Unused variable; pylint: disable=W0612
-                        for pname, p_altroot in p_altroots
+                        for pname, p_transform in p_transforms
                         # pylint: enable=W0612
                 ]))
 
-                if len(altroots) == 1:
-                        # we have an altroot from our plugins
-                        return altroots[0]
-
-                # we have conflicting altroots, time to die
-                _rterr(li=self, multiple_altroots=p_altroots)
+                if len(transforms) == 1:
+                        # we have a transform from our plugins
+                        return transforms[0]
+
+                # we have conflicting transforms, time to die
+                _rterr(li=self, multiple_transforms=p_transforms)
 
         def __fabricate_parent_props(self, ignore_errors=False):
                 """Fabricate the minimum set of properties required for a
                 parent image."""
 
+                # ask our plugins if we're operating with alternate image paths
+                path_transform = self.__guess_path_transform(
+                    ignore_errors=ignore_errors)
+
                 props = dict()
-                props[PROP_PATH] = self.__img.root
-                props[PROP_ALTROOT] = self.__guess_altroot(
-                    ignore_errors=ignore_errors)
+                self.set_path_transform(props, path_transform,
+                    current_path=self.__root)
                 return props
 
         def __load_ondisk_props(self, tmp=True):
@@ -832,7 +839,7 @@
                         props = self.__fabricate_parent_props(
                             ignore_errors=True)
                 else:
-                        self.__set_altroot(props)
+                        self.__set_current_path(props)
 
                 self.__update_props(props)
 
@@ -928,11 +935,6 @@
 
                 return pimg
 
-        def altroot(self):
-                """Return the altroot path prefix for the current image."""
-
-                return self.__props.get(PROP_ALTROOT, os.sep)
-
         def nothingtodo(self):
                 """If our in-memory linked image state matches the on-disk
                 linked image state then there's nothing to do.  If the state
@@ -958,10 +960,7 @@
                 li_ondisk_props = self.__load_ondisk_props(tmp=False)
                 if li_ondisk_props == None:
                         li_ondisk_props = dict()
-                li_inmemory_props = self.__props.copy()
-                if li_inmemory_props:
-                        self.__unset_altroot(li_inmemory_props)
-                li_inmemory_props = rm_dict_ent(li_inmemory_props,
+                li_inmemory_props = rm_dict_ent(self.__props,
                     temporal_props)
                 if li_ondisk_props != li_inmemory_props:
                         return False
@@ -1061,7 +1060,7 @@
 
                 # initialize the parent image
                 if not self.__pimg:
-                        path = self.__props[PROP_PARENT_PATH]
+                        path = self.parent_path()
                         self.__pimg = self.__init_pimg(path)
 
                 # get metadata from our parent image
@@ -1106,11 +1105,8 @@
                                 path_unlink(path, noent_ok=True)
                         return
 
-                # save our properties, but first remove altroot path prefixes
-                # and any temporal properties
-                props = self.__props.copy()
-                self.__unset_altroot(props)
-                props = rm_dict_ent(props, temporal_props)
+                # save our properties, but first remove any temporal properties
+                props = rm_dict_ent(self.__props, temporal_props)
                 save_data(self.__path_prop, props)
 
                 if not self.ischild():
@@ -1155,6 +1151,45 @@
 
                 return len(self.__list_children(li_ignore=li_ignore)) > 0
 
+        def islinked(self):
+                """Indicates wether the current image is already linked."""
+                return self.ischild() or self.isparent()
+
+        def get_path_transform(self):
+                """Return the current path transform property."""
+
+                return self.__props.get(
+                    PROP_PATH_TRANSFORM, PATH_TRANSFORM_NONE)
+
+        def inaltroot(self):
+                """Check if we're accessing a linked image at an alternate
+                location/path."""
+
+                return self.get_path_transform() != PATH_TRANSFORM_NONE
+
+        def path(self):
+                """Report our current image path."""
+
+                assert self.islinked()
+                return self.__props[PROP_PATH]
+
+        def current_path(self):
+                """Report our current image path."""
+
+                assert self.islinked()
+                return self.__props[PROP_CURRENT_PATH]
+
+        def parent_path(self):
+                """If we know where our parent should be, report it's expected
+                location."""
+
+                if PROP_PARENT_PATH not in self.__props:
+                        return None
+
+                path = self.__props[PROP_CURRENT_PARENT_PATH]
+                assert path[-1] == "/"
+                return path
+
         def child_props(self, lin=None):
                 """Return a dictionary which represents the linked image
                 properties associated with a linked image.
@@ -1179,7 +1214,8 @@
                 props = lip.get_child_props(lin).copy()
 
                 # add temporal properties
-                props[PROP_ALTROOT] = self.altroot()
+                self.set_path_transform(props, self.get_path_transform(),
+                    path=props[PROP_PATH])
                 return props
 
         def __apx_not_child(self):
@@ -1255,12 +1291,14 @@
                         # ignore all children
                         return []
 
-                li_children = [
-                    entry
-                    for p in pkg.client.linkedimage.p_types
-                    for entry in self.__plugins[p].get_child_list(
-                        ignore_errors=ignore_errors)
-                ]
+                li_children = []
+                for p in pkg.client.linkedimage.p_types:
+                        for lin, path in self.__plugins[p].get_child_list(
+                            ignore_errors=ignore_errors):
+                                assert lin.lin_type == p
+                                path = path_transform_apply(path,
+                                    self.get_path_transform())
+                                li_children.append([lin, path])
 
                 # sort by linked image name
                 li_children = sorted(li_children, key=operator.itemgetter(0))
@@ -1311,13 +1349,15 @@
                 lin = PV_NAME_NONE
                 if self.ischild():
                         lin = self.child_name
-                li_self = (lin, REL_SELF, self.__props[PROP_PATH])
+
+                path = self.current_path()
+                li_self = (lin, REL_SELF, path)
                 li_list.append(li_self)
 
                 # if we have a path to our parent then append that as well.
-                if PROP_PARENT_PATH in self.__props:
-                        li_parent = (PV_NAME_NONE, REL_PARENT,
-                            self.__props[PROP_PARENT_PATH])
+                path = self.parent_path()
+                if path is not None:
+                        li_parent = (PV_NAME_NONE, REL_PARENT, path)
                         li_list.append(li_parent)
 
                 # sort by linked image name
@@ -1355,33 +1395,36 @@
                 # image, it will do that work for us.
                 pimg = self.__init_pimg(path)
 
-                # make sure we're not linking to ourselves
-                if self.__img.root == pimg.root:
-                        raise apx.LinkedImageException(link_to_self=True)
-
-                # make sure we're not linking the root image as a child
-                if self.__img.root == misc.liveroot():
-                        raise apx.LinkedImageException(
-                            attach_root_as_child=True)
-
                 # get the cleaned up parent image path.
                 path = pimg.root
 
+                # Make sure our parent image is at it's default path.  (We
+                # don't allow attaching new images if an image is located at
+                # an alternate path.)
+                if pimg.linked.inaltroot():
+                        raise apx.LinkedImageException(attach_with_curpath=(
+                            pimg.linked.path(), pimg.current_path()))
+
+                self.__validate_attach_props(PV_MODEL_PULL, props)
+                self.__validate_attach_img_paths(path, self.__root)
+
+                # make a copy of the properties and update them
+                props = props.copy()
+                props[PROP_NAME] = lin
+                props[PROP_MODEL] = PV_MODEL_PULL
+
                 # If we're in an alternate root, the parent must also be within
                 # that alternate root.
-                if not check_altroot_path(path, self.altroot()):
+                path_transform = self.get_path_transform()
+                if not path_transform_applied(path, path_transform):
                         raise apx.LinkedImageException(
-                            parent_not_in_altroot=(path, self.altroot()))
-
-                self.__validate_attach_props(PV_MODEL_PULL, props)
-
-                # make a copy of the properties
-                props = props.copy()
-                props[PROP_NAME] = lin
-                props[PROP_PARENT_PATH] = path
-                props[PROP_PATH] = self.__img.root
-                props[PROP_MODEL] = PV_MODEL_PULL
-                props[PROP_ALTROOT] = self.altroot()
+                            parent_not_in_altroot=(path, path_transform[1]))
+
+                # Set path related properties.  We use self.__root in place of
+                # current_path() since we may not actually be linked yet.
+                props[PROP_PARENT_PATH] = path.rstrip(os.sep) + os.sep
+                self.set_path_transform(props, path_transform,
+                    current_path=self.__root)
 
                 for k, v in lip.attach_props_def.iteritems():
                         if k not in self.__pull_child_props:
@@ -1614,15 +1657,17 @@
 
                 # If we're in an alternate root, the child must also be within
                 # that alternate root
-                if not check_altroot_path(path, self.altroot()):
+                path_transform = self.__props[PROP_PATH_TRANSFORM]
+                if not path_transform_applied(path, path_transform):
                         raise apx.LinkedImageException(
-                            child_not_in_altroot=(path, self.altroot()))
+                            child_not_in_altroot=(path, path_transform[1]))
 
                 # path must be an image
                 try:
                         img_prefix = ar.ar_img_prefix(path)
-                except OSError:
-                        raise apx.LinkedImageException(child_path_eaccess=path)
+                except OSError, e:
+                        raise apx.LinkedImageException(lin=lin,
+                            child_op_failed=("find", path, e))
                 if not img_prefix:
                         raise apx.LinkedImageException(child_bad_img=path)
 
@@ -1643,46 +1688,6 @@
                         raise apx.LinkedImageException(
                             child_not_nested=(path, p_root))
 
-                # Find the common parent directory of the both parent and the
-                # child image.
-                dir_common = os.path.commonprefix([p_root, path])
-                dir_common.rstrip(os.sep)
-
-                # Make sure there are no additional images in between the
-                # parent and the child. (Ie, prevent linking of images if one
-                # of the images is nested within another unrelated image.)
-                # This is done by looking at all the parent directories for
-                # both the parent and the child image until we reach a common
-                # ancestor.
-
-                # First check the parent directories of the child.
-                d = os.path.dirname(path.rstrip(os.sep))
-                while d != dir_common and d.startswith(dir_common):
-                        try:
-                                tmp = ar.ar_img_prefix(d)
-                        except OSError, e:
-                                # W0212 Access to a protected member
-                                # pylint: disable=W0212
-                                raise apx._convert_error(e)
-                        if not tmp:
-                                d = os.path.dirname(d)
-                                continue
-                        raise apx.LinkedImageException(child_nested=(path, d))
-
-                # Then check the parent directories of the parent.
-                d = os.path.dirname(p_root.rstrip(os.sep))
-                while d != dir_common and d.startswith(dir_common):
-                        try:
-                                tmp = ar.ar_img_prefix(d)
-                        except OSError, e:
-                                # W0212 Access to a protected member
-                                # pylint: disable=W0212
-                                raise apx._convert_error(e)
-                        if not tmp:
-                                d = os.path.dirname(d)
-                                continue
-                        raise apx.LinkedImageException(child_nested=(path, d))
-
                 # Child image should not already be linked
                 img_li_data_props = os.path.join(img_prefix, PATH_PROP)
                 try:
@@ -1694,6 +1699,85 @@
                 if exists and not allow_relink:
                         raise apx.LinkedImageException(img_linked=path)
 
+                self.__validate_attach_img_paths(p_root, path)
+
+        def __validate_attach_img_paths(self, ppath, cpath):
+                """Make sure there are no additional images in between the
+                parent and the child. For example, this prevents linking of
+                images if one of the images is nested within another unrelated
+                image. This is done by looking at all the parent directories
+                for both the parent and the child image until we reach a
+                common ancestor."""
+
+                # Make sure each path has a trailing '/'.
+                ppath = ppath.rstrip(os.sep) + os.sep
+                cpath = cpath.rstrip(os.sep) + os.sep
+
+                # Make sure we're not linking to ourselves.
+                if ppath == cpath:
+                        raise apx.LinkedImageException(link_to_self=ppath)
+
+                # The parent image can't be nested nested within child.
+                if ppath.startswith(cpath):
+                        raise apx.LinkedImageException(
+                                parent_nested=(ppath, cpath))
+
+                # Make sure we're not linking the root image as a child.
+                if cpath == misc.liveroot():
+                        raise apx.LinkedImageException(
+                            attach_root_as_child=cpath)
+
+                # Make sure our current image is at it's default path.  (We
+                # don't allow attaching new images if an image is located at
+                # an alternate path.)
+                if self.inaltroot():
+                        raise apx.LinkedImageException(attach_with_curpath=(
+                            self.path(), self.current_path()))
+
+                def abort_if_imgdir(d):
+                        """Raise an exception if directory 'd' contains an
+                        image."""
+                        try:
+                                tmp = ar.ar_img_prefix(d)
+                        except OSError, e:
+                                # W0212 Access to a protected member
+                                # pylint: disable=W0212
+                                raise apx._convert_error(e)
+                        if tmp:
+                                raise apx.LinkedImageException(
+                                    intermediate_image=(ppath, cpath, d))
+
+                # Find the common parent directory of the both parent and the
+                # child image.
+                dir_common = os.sep
+                pdirs = ppath.split(os.sep)[1:-1]
+                cdirs = cpath.split(os.sep)[1:-1]
+                for pdir, cdir in itertools.izip(pdirs, cdirs):
+                        if pdir != cdir:
+                                break
+                        dir_common = os.path.join(dir_common, pdir)
+                dir_common = dir_common.rstrip(os.sep) + os.sep
+
+                # Test the common parent.
+                if ppath != dir_common and cpath != dir_common:
+                        abort_if_imgdir(dir_common)
+
+                # First check the parent directories of the child.
+                d = os.path.dirname(cpath.rstrip(os.sep)) + os.sep
+                while len(d) > len(dir_common):
+                        abort_if_imgdir(d)
+                        d = os.path.dirname(d.rstrip(os.sep))
+                        if d != os.sep:
+                                d += os.sep
+
+                # Then check the parent directories of the parent.
+                d = os.path.dirname(ppath.rstrip(os.sep)) + os.sep
+                while len(d) > len(dir_common):
+                        abort_if_imgdir(d)
+                        d = os.path.dirname(d.rstrip(os.sep))
+                        if d != os.sep:
+                                d += os.sep
+
         def attach_child(self, lin, path, props,
             accept=False, allow_relink=False, force=False, li_md_only=False,
             li_pkg_updates=True, noexecute=False,
@@ -1730,20 +1814,12 @@
                 try:
                         os.chdir(path)
                 except OSError, e:
-                        e = apx.LinkedImageException(child_path_eaccess=path)
+                        e = apx.LinkedImageException(lin=lin,
+                            child_op_failed=("access", path, e))
                         return LI_RVTuple(e.lix_exitrv, e, None)
                 path = os.getcwd()
                 os.chdir(cwd)
 
-                # make sure we're not linking to ourselves
-                if self.__img.root == path:
-                        raise apx.LinkedImageException(link_to_self=True)
-
-                # make sure we're not linking the root image as a child
-                if path == misc.liveroot():
-                        raise apx.LinkedImageException(
-                            attach_root_as_child=True)
-
                 # if the current image isn't linked yet then we need to
                 # generate some linked image properties for ourselves
                 if PROP_PATH not in self.__props:
@@ -1760,9 +1836,11 @@
                 # make a copy of the options and start updating them
                 child_props = props.copy()
                 child_props[PROP_NAME] = lin
-                child_props[PROP_PATH] = path
                 child_props[PROP_MODEL] = PV_MODEL_PUSH
-                child_props[PROP_ALTROOT] = self.altroot()
+
+                # set path related properties
+                self.set_path_transform(child_props,
+                    self.get_path_transform(), current_path=path)
 
                 # fill in any missing defaults options
                 for k, v in lip.attach_props_def.iteritems():
@@ -1949,14 +2027,46 @@
         def __children_op(self, _pkg_op, _lic_list, _rvdict, _progtrack,
             _failfast, _expect_plan=False, _ignore_syncmd_nop=True,
             _syncmd_tmp=False, _pd=None, **kwargs):
-                """An iterator function which performs a linked image
-                operation on multiple children in parallel.
+                """Wrapper for __children_op_vec() to stay compatible with old
+                callers which only support one operation for all linked images.
 
                 '_pkg_op' is the pkg.1 operation that we're going to perform
 
                 '_lic_list' is a list of linked image child objects to perform
                 the operation on.
 
+                '_ignore_syncmd_nop' a boolean that indicates if we should
+                always recurse into a child even if the linked image meta data
+                isn't changing.
+
+                See __children_op_vec() for an explanation of the remaining
+                options."""
+
+                for p_dict in self.__children_op_vec(
+                    _lic_op_vectors=[(_pkg_op, _lic_list, kwargs,
+                        _ignore_syncmd_nop)],
+                    _rvdict=_rvdict,
+                    _progtrack=_progtrack,
+                    _failfast=_failfast,
+                    _expect_plan=_expect_plan,
+                    _syncmd_tmp=_syncmd_tmp,
+                    _pd=_pd,
+                    stage=pkgdefs.API_STAGE_DEFAULT
+                    ):
+                        yield p_dict
+
+        def __children_op_vec(self, _lic_op_vectors, _rvdict, _progtrack,
+            _failfast, _expect_plan=False, _syncmd_tmp=False, _pd=None,
+            stage=pkgdefs.API_STAGE_DEFAULT):
+                """An iterator function which performs a linked image
+                operation on multiple children in parallel.
+
+                '_lic_op_vectors' is a list of tuples containing the operation
+                to perform, the list of linked images the operation is to be
+                performed on, the kwargs for this operation and if the metadata
+                sync nop should be ignored in the following form:
+                        [(pkg_op, lin_list, kwargs, ignore_syncmd_nop), ...]
+
                 '_rvdict' is a dictionary, indexed by linked image name, which
                 contains rvtuples of the result of the operation for each
                 child.
@@ -1972,31 +2082,47 @@
                 '_expect_plan' is a boolean that indicates if we expect this
                 operation to generate an image plan.
 
-                '_ignore_syncmd_nop' a boolean that indicates if we should
-                always recurse into a child even if the linked image meta data
-                isn't changing.
-
                 '_syncmd_tmp' a boolean that indicates if we should write
                 linked image metadata in a temporary location in child images,
                 or just overwrite any existing data.
 
                 '_pd' a PlanDescription pointer."""
 
-                if _lic_list:
-                        _progtrack.li_recurse_start(_pkg_op, len(_lic_list))
-
-                if _pkg_op in [ pkgdefs.PKG_OP_AUDIT_LINKED,
-                    pkgdefs.PKG_OP_PUBCHECK ]:
-                        # these operations are cheap so ideally we'd like to
-                        # use full parallelism.  but if the user specified a
-                        # concurrency limit we should respect that.
-                        if global_settings.client_concurrency_set:
-                                concurrency = global_settings.client_concurrency
-                        else:
-                                # no limit was specified, use full concurrency
-                                concurrency = -1
+
+                lic_all = reduce(operator.add,
+                    [i[1] for i in _lic_op_vectors], [])
+                lic_num = len(lic_all)
+
+                # make sure we don't have any duplicate LICs or duplicate LINs
+                assert lic_num == len(set(lic_all))
+                assert lic_num == len(set([i.child_name for i in lic_all]))
+
+                # At the moment the PT doesn't seem to really use the operation
+                # type for display reasons. It only uses it to treat pubcheck
+                # differently. Therefore it should be sufficient to skip the
+                # operation type in case we have different operations going on
+                # at the same time.
+                # Additionally, if the operation is the same for all children
+                # we can use some optimizations.
+                concurrency = global_settings.client_concurrency
+                if len(_lic_op_vectors) == 1:
+                        pkg_op = _lic_op_vectors[0][0]
+
+                        if pkg_op in [ pkgdefs.PKG_OP_AUDIT_LINKED,
+                            pkgdefs.PKG_OP_PUBCHECK ]:
+                                # These operations are cheap so ideally we'd
+                                # like to use full parallelism.  But if the user
+                                # specified a concurrency limit we should
+                                # respect that.
+                                if not global_settings.client_concurrency_set:
+                                        # No limit was specified, use full
+                                        # concurrency.
+                                        concurrency = -1
                 else:
-                        concurrency = global_settings.client_concurrency
+                        pkg_op = "<various>"
+
+                if lic_num:
+                        _progtrack.li_recurse_start(pkg_op, lic_num)
 
                 # If we have a plan for the current image that means linked
                 # image metadata is probably changing so we always save it to
@@ -2005,24 +2131,33 @@
                 if _pd is not None:
                         _syncmd_tmp = True
 
-                # get parent metadata common to all child images
-                _pmd = None
-                if _pkg_op != pkgdefs.PKG_OP_DETACH:
-                        ppubs = get_pubs(self.__img)
-                        ppkgs = get_packages(self.__img, pd=_pd)
-                        pfacets = get_inheritable_facets(self.__img, pd=_pd)
-                        _pmd = (ppubs, ppkgs, pfacets)
-
-                # setup operation for each child
                 lic_setup = []
-                for lic in _lic_list:
-                        try:
-                                lic.child_op_setup(_pkg_op, _pmd, _progtrack,
-                                    _ignore_syncmd_nop, _syncmd_tmp, **kwargs)
-                                lic_setup.append(lic)
-                        except apx.LinkedImageException, e:
-                                _rvdict[lic.child_name] = \
-                                    LI_RVTuple(e.lix_exitrv, e, None)
+                for pkg_op, lic_list, kwargs, ignore_syncmd_nop in \
+                    _lic_op_vectors:
+
+                        if stage != pkgdefs.API_STAGE_DEFAULT:
+                                kwargs = kwargs.copy()
+                                kwargs["stage"] = stage
+
+                        # get parent metadata common to all child images
+                        _pmd = None
+                        if pkg_op != pkgdefs.PKG_OP_DETACH:
+                                ppubs = get_pubs(self.__img)
+                                ppkgs = get_packages(self.__img, pd=_pd)
+                                pfacets = get_inheritable_facets(self.__img,
+                                    pd=_pd)
+                                _pmd = (ppubs, ppkgs, pfacets)
+
+                        # setup operation for each child
+                        for lic in lic_list:
+                                try:
+                                        lic.child_op_setup(pkg_op, _pmd,
+                                            _progtrack, ignore_syncmd_nop,
+                                            _syncmd_tmp, **kwargs)
+                                        lic_setup.append(lic)
+                                except apx.LinkedImageException, e:
+                                        _rvdict[lic.child_name] = \
+                                            LI_RVTuple(e.lix_exitrv, e, None)
 
                 # if _failfast is true, then throw an exception if we failed
                 # to setup any of the children.  if _failfast is false we'll
@@ -2037,7 +2172,7 @@
                         # raise an exception
                         _li_rvdict_raise_exceptions(_rvdict)
 
-                def __child_op_finish(lic, lic_list, _pkg_op, _rvdict,
+                def __child_op_finish(lic, lic_list, _rvdict,
                     _progtrack, _failfast, _expect_plan):
                         """An iterator function invoked when a child has
                         finished an operation.
@@ -2053,8 +2188,7 @@
 
                         lic_list.remove(lic)
 
-                        rvtuple, stdout, stderr = lic.child_op_rv(_pkg_op,
-                            _expect_plan)
+                        rvtuple, stdout, stderr = lic.child_op_rv(_expect_plan)
                         _li_rvtuple_check(rvtuple)
                         _rvdict[lic.child_name] = rvtuple
 
@@ -2092,7 +2226,7 @@
                         if not lic.child_op_is_done():
                                 continue
                         for p_dict in __child_op_finish(lic, lic_setup,
-                            _pkg_op, _rvdict, _progtrack, _failfast,
+                            _rvdict, _progtrack, _failfast,
                             _expect_plan):
                                 yield p_dict
 
@@ -2115,7 +2249,7 @@
                         if progtrack_update:
                                 # display progress on children
                                 progtrack_update = False
-                                done = len(_lic_list) - len(lic_setup) - \
+                                done = lic_num - len(lic_setup) - \
                                     len(lic_running)
                                 lin_running = sorted([
                                     lic.child_name for lic in lic_running])
@@ -2141,12 +2275,12 @@
                                 # a child finished processing
                                 progtrack_update = True
                                 for p_dict in __child_op_finish(lic,
-                                    lic_running, _pkg_op, _rvdict, _progtrack,
+                                    lic_running, _rvdict, _progtrack,
                                     _failfast, _expect_plan):
                                         yield p_dict
 
                 _li_rvdict_check(_rvdict)
-                if _lic_list:
+                if lic_num:
                         _progtrack.li_recurse_end()
 
         def __children_init(self, lin_list=None, li_ignore=None, failfast=True):
@@ -2283,34 +2417,34 @@
                 if stage == pkgdefs.API_STAGE_PLAN:
                         expect_plan = True
 
-                # get target op and arguments
-                pkg_op = pd.child_op
-
-                # assume that for most operations we want to recurse into the
-                # child image even if the linked image metadata isn't
-                # changing.  (this would be required for recursive operations,
-                # update operations, etc.)
-                _ignore_syncmd_nop = True
-                if pd.child_op_implicit:
-                        # the exception is if we're doing an implicit sync.
-                        # to improve performance we assume the child is
-                        # already in sync, so if its linked image metadata
-                        # isn't changing then the child won't need any updates
-                        # so there will be no need to recurse into it.
-                        _ignore_syncmd_nop = False
+                # Assemble list of LICs from LINs in pd.child_op_vectors and
+                # create new lic_op_vectors to pass to __children_op_vec().
+                lic_op_vectors = []
+                for op, lin_list, kwargs, ignore_syncmd_nop in \
+                    pd.child_op_vectors:
+                        assert "stage" not in kwargs
+                        lic_list = []
+                        for l in lin_list:
+                                try:
+                                        lic_list.append(self.__lic_dict[l])
+                                except KeyError:
+                                        # For the prepare and execute phase we
+                                        # remove children for which there is
+                                        # nothing to do from self.__lic_dict.
+                                        # So ignore those we can't find.
+                                        pass
+                        lic_op_vectors.append((op, lic_list, kwargs,
+                            ignore_syncmd_nop))
 
                 rvdict = {}
-                for p_dict in self.__children_op(
-                    _pkg_op=pkg_op,
-                    _lic_list=lic_list,
+                for p_dict in self.__children_op_vec(
+                    _lic_op_vectors=lic_op_vectors,
                     _rvdict=rvdict,
                     _progtrack=progtrack,
                     _failfast=True,
                     _expect_plan=expect_plan,
-                    _ignore_syncmd_nop=_ignore_syncmd_nop,
-                    _pd=pd,
                     stage=stage,
-                    **pd.child_kwargs):
+                    _pd=pd):
                         yield p_dict
 
                 assert not _li_rvdict_exceptions(rvdict)
@@ -2329,7 +2463,7 @@
                                 pd.children_planned.append(lin)
 
         @staticmethod
-        def __recursion_op(api_op, api_kwargs):
+        def __recursion_ops(api_op):
                 """Determine what pkg command to use when recursing into child
                 images."""
 
@@ -2346,19 +2480,43 @@
                 # of specific packages, etc, then when we recurse we'll do a
                 # sync in the child.
                 #
-                implicit = False
-                if api_op == pkgdefs.API_OP_UPDATE and not \
-                    api_kwargs["pkgs_update"]:
-                        pkg_op = pkgdefs.PKG_OP_UPDATE
-                elif api_op == pkgdefs.API_OP_SYNC:
-                        pkg_op = pkgdefs.PKG_OP_SYNC
+
+
+                # To improve performance we assume the child is already in sync,
+                # so if its linked image metadata isn't changing then the child
+                # won't need any updates so there will be no need to recurse
+                # into it.
+                ignore_syncmd_nop = False
+                pkg_op_erecurse = None
+
+                if api_op == pkgdefs.API_OP_SYNC:
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+                        # If we are doing an explict sync, we do have to make
+                        # sure we actually recurse into the child and sync
+                        # metadata.
+                        ignore_syncmd_nop = True
+                elif api_op == pkgdefs.API_OP_INSTALL:
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+                        pkg_op_erecurse = pkgdefs.PKG_OP_INSTALL
+                elif api_op == pkgdefs.API_OP_CHANGE_FACET:
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+                        pkg_op_erecurse = pkgdefs.PKG_OP_CHANGE_FACET
+                elif api_op == pkgdefs.API_OP_CHANGE_VARIANT:
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+                        pkg_op_erecurse = pkgdefs.PKG_OP_CHANGE_VARIANT
+                if api_op == pkgdefs.API_OP_UPDATE:
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+                        pkg_op_erecurse = pkgdefs.PKG_OP_UPDATE
+                elif api_op == pkgdefs.API_OP_UNINSTALL:
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+                        pkg_op_erecurse = pkgdefs.PKG_OP_UNINSTALL
                 else:
-                        pkg_op = pkgdefs.PKG_OP_SYNC
-                        implicit = True
-                return pkg_op, implicit
+                        pkg_op_irecurse = pkgdefs.PKG_OP_SYNC
+
+                return pkg_op_irecurse, pkg_op_erecurse, ignore_syncmd_nop
 
         @staticmethod
-        def __recursion_args(pd, refresh_catalogs, update_index, api_kwargs):
+        def __recursion_args(op, refresh_catalogs, update_index, api_kwargs):
                 """Determine what pkg command arguments to use when recursing
                 into child images."""
 
@@ -2387,24 +2545,72 @@
                         # option specific to: attach, set-property-linked, sync
                         kwargs["li_pkg_updates"] = api_kwargs["li_pkg_updates"]
 
-                if pd.child_op == pkgdefs.PKG_OP_UPDATE:
+                if op == pkgdefs.PKG_OP_INSTALL:
+                        assert "pkgs_inst" in api_kwargs
+                        # option specific to: install
+                        kwargs["pkgs_inst"] = api_kwargs["pkgs_inst"]
+                        kwargs["reject_list"] = api_kwargs["reject_list"]
+                elif op == pkgdefs.PKG_OP_CHANGE_VARIANT:
+                        assert "variants" in api_kwargs
+                        # option specific to: change-variant
+                        kwargs["variants"] = api_kwargs["variants"]
+                        kwargs["facets"] = None
+                        kwargs["reject_list"] = api_kwargs["reject_list"]
+                elif op == pkgdefs.PKG_OP_CHANGE_FACET:
+                        assert "facets" in api_kwargs
+                        # option specific to: change-facet
+                        kwargs["facets"] = api_kwargs["facets"]
+                        kwargs["variants"] = None
+                        kwargs["reject_list"] = api_kwargs["reject_list"]
+                elif op == pkgdefs.PKG_OP_UNINSTALL:
+                        assert "pkgs_to_uninstall" in api_kwargs
+                        # option specific to: uninstall
+                        kwargs["pkgs_to_uninstall"] = \
+                            api_kwargs["pkgs_to_uninstall"]
+                        del kwargs["show_licenses"]
+                        del kwargs["refresh_catalogs"]
+                        del kwargs["accept"]
+                elif op == pkgdefs.PKG_OP_UPDATE:
                         # skip ipkg up to date check for child images
                         kwargs["force"] = True
+                        kwargs["pkgs_update"] = api_kwargs["pkgs_update"]
+                        kwargs["reject_list"] = api_kwargs["reject_list"]
 
                 return kwargs
 
-        def api_recurse_plan(self, api_kwargs, refresh_catalogs,
+        def api_recurse_plan(self, api_kwargs, erecurse_list, refresh_catalogs,
             update_index, progtrack):
                 """Plan child image updates."""
 
                 pd = self.__img.imageplan.pd
                 api_op = pd.plan_type
 
-                # update the plan arguments
-                pd.child_op, pd.child_op_implicit = \
-                    self.__recursion_op(api_op, api_kwargs)
-                pd.child_kwargs = self.__recursion_args(pd,
+                pd.child_op_vectors = []
+
+                # Get LinkedImageNames of all children
+                lin_list = self.__lic_dict.keys()
+
+                pkg_op_irecurse, pkg_op_erecurse, ignore_syncmd_nop = \
+                    self.__recursion_ops(api_op)
+
+                # Prepare op vector for explicit recurse operations
+                if erecurse_list:
+                        assert pkg_op_erecurse
+                        # remove recurse children from sync list
+                        lin_list = list(set(lin_list) - set(erecurse_list))
+
+                        erecurse_kwargs = self.__recursion_args(pkg_op_erecurse,
+                            refresh_catalogs, update_index, api_kwargs)
+                        pd.child_op_vectors.append((pkg_op_erecurse,
+                            list(erecurse_list), erecurse_kwargs, True))
+
+                # Prepare op vector for implicit recurse operations
+                irecurse_kwargs = self.__recursion_args(pkg_op_irecurse,
                     refresh_catalogs, update_index, api_kwargs)
+
+                pd.child_op_vectors.append((pkg_op_irecurse, lin_list,
+                    irecurse_kwargs, ignore_syncmd_nop))
+
                 pd.children_ignored = self.__lic_ignore
 
                 # recurse into children
@@ -2425,7 +2631,7 @@
 
                 # if we're a child, save our parent package state into the
                 # plan description
-                pd.li_props = self.__props
+                pd.li_props = rm_dict_ent(self.__props.copy(), temporal_props)
                 pd.li_ppkgs = self.__ppkgs
                 pd.li_ppubs = self.__ppubs
                 pd.li_pfacets = self.__pfacets
@@ -2433,8 +2639,15 @@
         def setup_plan(self, pd):
                 """Reload a previously created plan."""
 
+                # make a copy of the linked image properties
+                props = pd.li_props.copy()
+
+                # generate temporal properties
+                if props:
+                        self.__set_current_path(props)
+
                 # load linked image state from the plan
-                self.__update_props(pd.li_props)
+                self.__update_props(props)
                 self.__ppubs = pd.li_ppubs
                 self.__ppkgs = pd.li_ppkgs
                 self.__pfacets = pd.li_pfacets
@@ -2468,135 +2681,6 @@
                                 return False
                 return True
 
-        @staticmethod
-        def __has_parent_dep(fmri, cat, excludes):
-                """Check if a package has a parent dependency."""
-
-                for a in cat.get_entry_actions(fmri,
-                    [pkg.catalog.Catalog.DEPENDENCY], excludes=excludes):
-                        if a.name == "depend" and a.attrs["type"] == "parent":
-                                return True
-                return False
-
-        def extra_dep_actions(self, excludes=misc.EmptyI,
-            installed_catalog=False):
-                """Since we don't publish packages with parent dependencies
-                yet, but we want to be able to sync packages between zones,
-                we'll need to fake up some extra package parent dependencies.
-
-                Here we'll inspect the catalog to find packages that we think
-                should have parent dependencies and then we'll return a
-                dictionary, indexed by fmri, which contains the extra
-                dependency actions that should be added to each package."""
-
-                # create a parent dependency action with a nonglobal zone
-                # variant tag.
-                attrs = dict()
-                attrs["type"] = "parent"
-                attrs["fmri"] = pkg.actions.depend.DEPEND_SELF
-                attrs["variant.opensolaris.zone"] = "nonglobal"
-
-                pda = pkg.actions.depend.DependencyAction(**attrs)
-
-                if not pda.include_this(excludes):
-                        # we're not operating on a nonglobal zone image so we
-                        # don't need to fabricate parent zone dependencies
-                        return dict()
-
-                if not self.ischild():
-                        # we're not a child image so parent dependencies are
-                        # irrelevant
-                        return dict()
-
-                osnet_incorp = "consolidation/osnet/osnet-incorporation"
-                ips_incorp = "consolidation/osnet/ips-incorporation"
-
-                #
-                # it's time consuming to walk the catalog looking for packages
-                # to dynamically add parent dependencies too.  so to speed
-                # things up we'll check if the currently installed osnet and
-                # ips incorporations already have parent dependencies.  if
-                # they do then this image has already been upgraded to a build
-                # where these dependencies are being published so there's no
-                # need for us to dynamically add them.
-                #
-                osnet_has_pdep = False
-                ips_has_pdep = False
-                cat = self.__img.get_catalog(self.__img.IMG_CATALOG_INSTALLED)
-                for (ver, fmris) in cat.fmris_by_version(osnet_incorp):
-                        if self.__has_parent_dep(fmris[0], cat, excludes):
-                                # osnet incorporation has parent deps
-                                osnet_has_pdep = True
-                for (ver, fmris) in cat.fmris_by_version(ips_incorp):
-                        if self.__has_parent_dep(fmris[0], cat, excludes):
-                                # ips incorporation has parent deps
-                                ips_has_pdep = True
-                if osnet_has_pdep and ips_has_pdep:
-                        return dict()
-
-                if not installed_catalog:
-                        # search the known catalog
-                        cat = self.__img.get_catalog(
-                            self.__img.IMG_CATALOG_KNOWN)
-
-                # assume that the osnet and ips incorporations should always
-                # have a parent dependencies.
-                inc_fmris = set()
-                for tgt in [osnet_incorp, ips_incorp]:
-                        for (ver, fmris) in cat.fmris_by_version(tgt):
-                                for fmri in fmris:
-                                        if not self.__has_parent_dep(fmri, cat,
-                                            excludes):
-                                                inc_fmris |= set([fmri])
-
-                # find the fmris that each osnet/ips incorporation incorporates
-                inc_pkgs = set()
-                for fmri in inc_fmris:
-                        for a in cat.get_entry_actions(fmri,
-                            [pkg.catalog.Catalog.DEPENDENCY],
-                            excludes=excludes):
-                                if (a.name != "depend") or \
-                                    (a.attrs["type"] != "incorporate"):
-                                        continue
-
-                                # create an fmri for the incorporated package
-                                build_release = str(fmri.version.build_release)
-                                inc_pkgs |= set([pkg.fmri.PkgFmri(
-                                    a.attrs["fmri"],
-                                    build_release=build_release)])
-
-                # translate the incorporated package fmris into actual
-                # packages in the known catalog
-                dep_fmris = set()
-                for fmri in inc_pkgs:
-                        for (ver, fmris) in cat.fmris_by_version(fmri.pkg_name):
-                                if ver == fmri.version or ver.is_successor(
-                                    fmri.version, pkg.version.CONSTRAINT_AUTO):
-                                        dep_fmris |= set(fmris)
-
-                # all the fmris we want to add dependencies to.
-                all_fmris = inc_fmris | dep_fmris
-
-                # remove some unwanted fmris
-                rm_fmris = set()
-                for pfmri in all_fmris:
-                        # eliminate renamed or obsoleted fmris
-                        entry = cat.get_entry(pfmri)
-                        state = entry["metadata"]["states"]
-                        if pkgdefs.PKG_STATE_OBSOLETE in state or \
-                            pkgdefs.PKG_STATE_RENAMED in state:
-                                rm_fmris |= set([pfmri])
-                                continue
-
-                        # eliminate any group packages
-                        if pfmri.pkg_name.startswith("group/"):
-                                rm_fmris |= set([pfmri])
-                                continue
-
-                all_fmris -= rm_fmris
-
-                return dict([(fmri, [pda]) for fmri in all_fmris])
-
 
 class LinkedImageChild(object):
         """A LinkedImageChild object is used when a parent image wants to
@@ -2621,9 +2705,9 @@
 
                 try:
                         imgdir = ar.ar_img_prefix(self.child_path)
-                except OSError:
-                        raise apx.LinkedImageException(
-                            lin=lin, child_path_eaccess=self.child_path)
+                except OSError, e:
+                        raise apx.LinkedImageException(lin=lin,
+                            child_op_failed=("find", self.child_path, e))
 
                 if not imgdir:
                         raise apx.LinkedImageException(
@@ -2641,15 +2725,19 @@
 
                 self.__pkg_remote = pkg.client.pkgremote.PkgRemote()
                 self.__child_op_rvtuple = None
+                self.__child_op = None
 
         @property
         def child_name(self):
-                """Get the path associated with a child image."""
+                """Get the name associated with a child image."""
                 return self.__props[PROP_NAME]
 
         @property
         def child_path(self):
                 """Get the path associated with a child image."""
+
+                if self.__linked.inaltroot():
+                        return self.__props[PROP_CURRENT_PATH]
                 return self.__props[PROP_PATH]
 
         @property
@@ -2658,47 +2746,47 @@
                 this child."""
                 return self.__img
 
-        @staticmethod
-        def __push_data(root, path, data, tmp, test):
+        def __push_data(self, root, path, data, tmp, test):
                 """Write data to a child image."""
 
-                # first save our data to a temporary file
-                path_tmp = "%s.%s" % (path, global_settings.client_runid)
-                save_data(path_tmp, data, root=root)
-
-                # check if we're updating the data
-                updated = True
-
                 try:
-                        exists = ar.ar_exists(root, path)
+                        # first save our data to a temporary file
+                        path_tmp = "%s.%s" % (path,
+                            global_settings.client_runid)
+                        save_data(path_tmp, data, root=root,
+                            catch_exception=False)
+
+                        # Check if the data is changing.  To do this
+                        # comparison we load the serialized on-disk json data
+                        # into memory because there are no guarantees about
+                        # data ordering during serialization.  When loading
+                        # the data we don't bother decoding it into objects.
+                        updated = True
+                        old_data = load_data(path, missing_ok=True,
+                            root=root, decode=False,
+                            catch_exception=False)
+                        if old_data is not None:
+                                new_data = load_data(path_tmp,
+                                    root=root, decode=False,
+                                    catch_exception=False)
+                                if old_data == new_data:
+                                        updated = False
+
+
+                        # If we're not actually updating any data, or if we
+                        # were just doing a test to see if the data has
+                        # changed, then delete the temporary data file.
+                        if not updated or test:
+                                ar.ar_unlink(root, path_tmp)
+                                return updated
+
+                        if not tmp:
+                                ar.ar_rename(root, path_tmp, path)
+
                 except OSError, e:
-                        # W0212 Access to a protected member
-                        # pylint: disable=W0212
-                        raise apx._convert_error(e)
-
-                if exists:
-                        try:
-                                updated = ar.ar_diff(root, path, path_tmp)
-                        except OSError, e:
-                                # W0212 Access to a protected member
-                                # pylint: disable=W0212
-                                raise apx._convert_error(e)
-
-                # if we're not actually updating any data, or if we were just
-                # doing a test to see if the data has changed, then delete the
-                # temporary data file
-                if not updated or test:
-                        ar.ar_unlink(root, path_tmp)
-                        return updated
-
-                if not tmp:
-                        # we are updating the real data.
-                        try:
-                                ar.ar_rename(root, path_tmp, path)
-                        except OSError, e:
-                                # W0212 Access to a protected member
-                                # pylint: disable=W0212
-                                raise apx._convert_error(e)
+                        raise apx.LinkedImageException(lin=self.child_name,
+                            child_op_failed=("metadata update",
+                            self.child_path, e))
 
                 return True
 
@@ -2740,7 +2828,6 @@
 
                 # delete temporal properties
                 props = rm_dict_ent(props, temporal_props)
-
                 return self.__push_data(self.child_path, self.__path_prop,
                     props, tmp, test)
 
@@ -2904,38 +2991,157 @@
                     update_index=update_index,
                     verbose=global_settings.client_output_verbose)
 
-        def __child_setup_update(self, _pmd, _progtrack, _ignore_syncmd_nop,
-            _syncmd_tmp,
-            accept=False,
-            force=False,
-            noexecute=False,
-            refresh_catalogs=True,
-            reject_list=misc.EmptyI,
-            show_licenses=False,
-            stage=pkgdefs.API_STAGE_DEFAULT,
-            update_index=True):
+        def __child_setup_update(self, _pmd, _progtrack, _syncmd_tmp,
+            accept, force, noexecute, pkgs_update, refresh_catalogs,
+            reject_list, show_licenses, stage, update_index):
                 """Prepare to update a child image."""
 
                 # first sync the metadata
                 if not self.__child_op_setup_syncmd(_pmd,
-                    ignore_syncmd_nop=_ignore_syncmd_nop,
+                    ignore_syncmd_nop=True,
                     tmp=_syncmd_tmp, stage=stage):
                         # the update failed or the metadata didn't change
                         return
 
+                # We need to make sure we don't pass None as pargs in
+                # client.py`update()
+                if pkgs_update is None:
+                        pkgs_update = []
+
                 self.__pkg_remote.setup(self.child_path,
                     pkgdefs.PKG_OP_UPDATE,
+                    act_timeout=0,
                     accept=accept,
                     backup_be=None,
                     backup_be_name=None,
                     be_activate=True,
                     be_name=None,
                     force=force,
+                    ignore_missing=True,
+                    li_erecurse=None,
+                    li_ignore=None,
+                    li_parent_sync=True,
+                    new_be=None,
+                    noexecute=noexecute,
+                    origins=[],
+                    pargs=pkgs_update,
+                    parsable_version=\
+                        global_settings.client_output_parsable_version,
+                    quiet=global_settings.client_output_quiet,
+                    refresh_catalogs=refresh_catalogs,
+                    reject_pats=reject_list,
+                    show_licenses=show_licenses,
+                    stage=stage,
+                    update_index=update_index,
+                    verbose=global_settings.client_output_verbose)
+
+        def __child_setup_install(self, _pmd, _progtrack, _syncmd_tmp,
+            accept, noexecute, pkgs_inst, refresh_catalogs, reject_list,
+            show_licenses, stage, update_index):
+                """Prepare to install a pkg in a child image."""
+
+                # first sync the metadata
+                if not self.__child_op_setup_syncmd(_pmd,
+                    ignore_syncmd_nop=True,
+                    tmp=_syncmd_tmp, stage=stage):
+                        # the update failed or the metadata didn't change
+                        return
+
+                self.__pkg_remote.setup(self.child_path,
+                    pkgdefs.PKG_OP_INSTALL,
+                    accept=accept,
+                    act_timeout=0,
+                    backup_be=None,
+                    backup_be_name=None,
+                    be_activate=True,
+                    be_name=None,
+                    li_erecurse=None,
                     li_ignore=None,
                     li_parent_sync=True,
                     new_be=None,
                     noexecute=noexecute,
                     origins=[],
+                    pargs=pkgs_inst,
+                    parsable_version=\
+                        global_settings.client_output_parsable_version,
+                    quiet=global_settings.client_output_quiet,
+                    refresh_catalogs=refresh_catalogs,
+                    reject_pats=reject_list,
+                    show_licenses=show_licenses,
+                    stage=stage,
+                    update_index=update_index,
+                    verbose=global_settings.client_output_verbose)
+
+        def __child_setup_uninstall(self, _pmd, _progtrack, _syncmd_tmp,
+            noexecute, pkgs_to_uninstall, stage, update_index):
+                """Prepare to install a pkg in a child image."""
+
+                # first sync the metadata
+                if not self.__child_op_setup_syncmd(_pmd,
+                    ignore_syncmd_nop=True,
+                    tmp=_syncmd_tmp, stage=stage):
+                        # the update failed or the metadata didn't change
+                        return
+
+                self.__pkg_remote.setup(self.child_path,
+                    pkgdefs.PKG_OP_UNINSTALL,
+                    act_timeout=0,
+                    backup_be=None,
+                    backup_be_name=None,
+                    be_activate=True,
+                    be_name=None,
+                    li_erecurse=None,
+                    li_ignore=None,
+                    li_parent_sync=True,
+                    new_be=None,
+                    noexecute=noexecute,
+                    pargs=pkgs_to_uninstall,
+                    parsable_version=\
+                        global_settings.client_output_parsable_version,
+                    quiet=global_settings.client_output_quiet,
+                    stage=stage,
+                    update_index=update_index,
+                    ignore_missing=True,
+                    verbose=global_settings.client_output_verbose)
+
+        def __child_setup_change_varcets(self, _pmd, _progtrack, _syncmd_tmp,
+            accept, facets, noexecute, refresh_catalogs, reject_list,
+            show_licenses, stage, update_index, variants):
+                """Prepare to install a pkg in a child image."""
+
+                # first sync the metadata
+                if not self.__child_op_setup_syncmd(_pmd,
+                    ignore_syncmd_nop=True,
+                    tmp=_syncmd_tmp, stage=stage):
+                        # the update failed or the metadata didn't change
+                        return
+
+                assert not (variants and facets)
+                if variants:
+                        op = pkgdefs.PKG_OP_CHANGE_VARIANT
+                        varcet_dict = variants
+                else:
+                        op = pkgdefs.PKG_OP_CHANGE_FACET
+                        varcet_dict = facets
+
+                # need to transform varcets back to string list
+                varcets = [ "%s=%s" % (a, b) for (a, b) in varcet_dict.items()]
+
+                self.__pkg_remote.setup(self.child_path,
+                    op,
+                    accept=accept,
+                    act_timeout=0,
+                    backup_be=None,
+                    backup_be_name=None,
+                    be_activate=True,
+                    be_name=None,
+                    li_erecurse=None,
+                    li_ignore=None,
+                    li_parent_sync=True,
+                    new_be=None,
+                    noexecute=noexecute,
+                    origins=[],
+                    pargs=varcets,
                     parsable_version=\
                         global_settings.client_output_parsable_version,
                     quiet=global_settings.client_output_quiet,
@@ -2997,6 +3203,7 @@
 
                 self.__pkg_remote.abort()
                 self.__child_op_rvtuple = None
+                self.__child_op = None
 
         def child_op_setup(self, _pkg_op, _pmd, _progtrack, _ignore_syncmd_nop,
             _syncmd_tmp, **kwargs):
@@ -3004,6 +3211,9 @@
                 perform on a child image."""
 
                 assert self.__child_op_rvtuple is None
+                assert self.__child_op is None
+
+                self.__child_op = _pkg_op
 
                 if _pkg_op == pkgdefs.PKG_OP_AUDIT_LINKED:
                         self.__child_setup_audit(_pmd, **kwargs)
@@ -3016,7 +3226,17 @@
                             _ignore_syncmd_nop, _syncmd_tmp, **kwargs)
                 elif _pkg_op == pkgdefs.PKG_OP_UPDATE:
                         self.__child_setup_update(_pmd, _progtrack,
-                            _ignore_syncmd_nop, _syncmd_tmp, **kwargs)
+                            _syncmd_tmp, **kwargs)
+                elif _pkg_op == pkgdefs.PKG_OP_INSTALL:
+                        self.__child_setup_install(_pmd, _progtrack,
+                            _syncmd_tmp, **kwargs)
+                elif _pkg_op == pkgdefs.PKG_OP_UNINSTALL:
+                        self.__child_setup_uninstall(_pmd, _progtrack,
+                            _syncmd_tmp, **kwargs)
+                elif _pkg_op == pkgdefs.PKG_OP_CHANGE_FACET or \
+                    _pkg_op == pkgdefs.PKG_OP_CHANGE_VARIANT:
+                        self.__child_setup_change_varcets(_pmd, _progtrack,
+                            _syncmd_tmp, **kwargs)
                 else:
                         raise RuntimeError(
                             "Unsupported package client op: %s" % _pkg_op)
@@ -3041,7 +3261,7 @@
                 # make sure there is some data from the child
                 return self.__pkg_remote.is_done()
 
-        def child_op_rv(self, pkg_op, expect_plan):
+        def child_op_rv(self, expect_plan):
                 """Public interface to get the result of an operation on a
                 child image.
 
@@ -3052,6 +3272,13 @@
                 running it through the json parser.
                 """
 
+                # The child op is now done, so we reset __child_op to make sure
+                # we don't accidentally reuse the LIC without properly setting
+                # it up again. However, we still need the op type in this
+                # function so we make a copy.
+                pkg_op = self.__child_op
+                self.__child_op = None
+
                 # if we have a return value this operation is done
                 if self.__child_op_rvtuple is not None:
                         rvtuple = self.__child_op_rvtuple
@@ -3110,7 +3337,7 @@
                 instance that is operating on a child image."""
                 return self.__pkg_remote.fileno()
 
-        def child_init_root(self, old_altroot):
+        def child_init_root(self):
                 """Our image path is being updated, so figure out our new
                 child image paths.  This interface only gets invoked when:
 
@@ -3124,24 +3351,16 @@
                   our update failed, hence we're changing paths back to the
                   original images that were the source of the clone."""
 
-                # get the image path without the altroot
-                altroot_path = self.__props[PROP_PATH]
-                path = rm_altroot_path(altroot_path, old_altroot)
-
-                # update the path with the current altroot
-                altroot = self.__linked.altroot()
-                path = add_altroot_path(path, altroot)
-
-                # update properties with altroot
-                self.__props[PROP_PATH] = path
-                self.__props[PROP_ALTROOT] = altroot
-
-                # we don't bother to update update PROP_PARENT_PATH since
-                # that is only used when reading constraint data from the
-                # parent image, and this interface is only invoked when we're
-                # starting or finishing execution of a plan on a cloned image
-                # (at which point we have no need to access the parent
-                # anymore).
+                # PROP_PARENT_PATH better not be present because
+                # LinkedImageChild objects are only used with push child
+                # images.
+                assert PROP_PARENT_PATH not in self.__props
+
+                # Remove any path transform and reapply.
+                self.__props = rm_dict_ent(self.__props, temporal_props)
+                self.__linked.set_path_transform(self.__props,
+                    self.__linked.get_path_transform(),
+                    path=self.__props[PROP_PATH])
 
 
 # ---------------------------------------------------------------------------
@@ -3318,7 +3537,7 @@
 # ---------------------------------------------------------------------------
 # Utility Functions
 #
-def save_data(path, data, root="/"):
+def save_data(path, data, root="/", catch_exception=True):
         """Save JSON encoded linked image metadata to a file."""
 
         # make sure the directory we're about to save data into exists.
@@ -3342,21 +3561,32 @@
         except OSError, e:
                 # W0212 Access to a protected member
                 # pylint: disable=W0212
-                raise apx._convert_error(e)
-
-def load_data(path, missing_ok=False):
+                if catch_exception:
+                        raise apx._convert_error(e)
+                raise e
+
+def load_data(path, missing_ok=False, root="/", decode=True,
+    catch_exception=False):
         """Load JSON encoded linked image metadata from a file."""
 
+        object_hook = None
+        if decode:
+                object_hook = pkg.client.linkedimage.PkgDecoder
+
         try:
-                if missing_ok and not path_exists(path):
+                if missing_ok and not path_exists(path, root=root):
                         return None
-                fobj = open(path)
+
+                fd = ar.ar_open(root, path, os.O_RDONLY)
+                fobj = os.fdopen(fd, "r")
                 data = json.load(fobj, encoding="utf-8",
-                    object_hook=pkg.client.linkedimage.PkgDecoder)
+                    object_hook=object_hook)
                 fobj.close()
         except OSError, e:
                 # W0212 Access to a protected member
                 # pylint: disable=W0212
+                if catch_exception:
+                        raise apx._convert_error(e)
                 raise apx._convert_error(e)
         return data
 
@@ -3420,7 +3650,7 @@
     bad_lin_type=None,
     bad_prop=None,
     missing_props=None,
-    multiple_altroots=None,
+    multiple_transforms=None,
     saved_temporal_props=None):
         """Oops.  We hit a runtime error.  Die with a nice informative
         message.  Note that runtime errors should never happen and usually
@@ -3448,11 +3678,12 @@
                 assert err == None
                 err = "Missing required linked properties: %s" % \
                     ", ".join(missing_props)
-        elif multiple_altroots:
+        elif multiple_transforms:
                 assert err == None
-                err = "Multiple plugins reported different altroots:"
-                for plugin, altroot in multiple_altroots:
-                        err += "\n\t%s = %s" % (plugin, altroot)
+                err = "Multiple plugins reported different path transforms:"
+                for plugin, transform in multiple_transforms:
+                        err += "\n\t%s = %s -> %s" % (plugin,
+                            transform[0], transform[1])
         elif saved_temporal_props:
                 assert err == None
                 err = "Found saved temporal linked properties: %s" % \
@@ -3485,11 +3716,11 @@
 # ---------------------------------------------------------------------------
 # Functions for accessing files in the current root
 #
-def path_exists(path):
+def path_exists(path, root="/"):
         """Simple wrapper for accessing files in the current root."""
 
         try:
-                return ar.ar_exists("/", path)
+                return ar.ar_exists(root, path)
         except OSError, e:
                 # W0212 Access to a protected member
                 # pylint: disable=W0212
@@ -3528,73 +3759,83 @@
 # ---------------------------------------------------------------------------
 # Functions for managing images which may be in alternate roots
 #
-def check_altroot_path(path, altroot):
-        """Check if 'path' is nested within 'altroot'"""
-
-        assert os.path.isabs(path), "os.path.isabs(%s)" % path
-        assert os.path.isabs(altroot), "os.path.isabs(%s)" % altroot
-
-        # make sure both paths have one trailing os.sep.
-        altroot = altroot.rstrip(os.sep) + os.sep
+
+def path_transform_applicable(path, path_transform):
+        """Check if 'path_transform' can be applied to 'path'."""
+
+        # Make sure path has a leading and trailing os.sep.
+        assert os.path.isabs(path), "path is not absolute: %s" % path
         path = path.rstrip(os.sep) + os.sep
 
+        # If there is no transform, then any any translation is valid.
+        if path_transform == PATH_TRANSFORM_NONE:
+                return True
+
         # check for nested or equal paths
-        if path.startswith(altroot):
+        if path.startswith(path_transform[0]):
                 return True
         return False
 
-def add_altroot_path(path, altroot):
-        """Return a path where 'path' is nested within 'altroot'"""
-
-        assert os.path.isabs(path), "os.path.isabs(%s)" % path
-        assert os.path.isabs(altroot), "os.path.isabs(%s)" % altroot
-
-        altroot = altroot.rstrip(os.sep) + os.sep
-        path = path.lstrip(os.sep)
-        altroot_path = altroot + path
-
-        # sanity check
-        assert check_altroot_path(altroot_path, altroot), \
-            "check_altroot_path(%s, %s)" % (altroot_path, altroot)
-
-        return altroot_path
-
-def rm_altroot_path(path, altroot):
-        """Return the relative porting of 'path', which must be nested within
-        'altroot'"""
-
-        assert os.path.isabs(path), "not os.path.isabs(%s)" % path
-        assert os.path.isabs(altroot), "not os.path.isabs(%s)" % altroot
-
-        assert check_altroot_path(path, altroot), \
-            "not check_altroot_path(%s, %s)" % (path, altroot)
-
-        rv = path[len(altroot.rstrip(os.sep)):]
-        if rv == "":
-                rv = "/"
-        assert os.path.isabs(rv)
-        return rv
-
-def get_altroot_path(path, path_suffix):
-        """Given 'path', and a relative path 'path_suffix' that must match
-        the suffix of 'path', return the unmatched prefix of 'path'."""
-
-        assert os.path.isabs(path), "os.path.isabs(%s)" % path
-        assert os.path.isabs(path_suffix), "os.path.isabs(%s)" % path_suffix
-
-        # make sure both paths have one trailing os.sep.
+def path_transform_applied(path, path_transform):
+        """Check if 'path_transform' has been applied to 'path'."""
+
+        # Make sure path has a leading and trailing os.sep.
+        assert os.path.isabs(path), "path is not absolute: %s" % path
+        path = path.rstrip(os.sep) + os.sep
+
+        # Reverse the transform.
+        path_transform = (path_transform[1], path_transform[0])
+        return path_transform_applicable(path, path_transform)
+
+def path_transform_apply(path, path_transform):
+        """Apply the 'path_transform' to 'path'."""
+
+        # Make sure path has a leading and trailing os.sep.
+        assert os.path.isabs(path), "path is not absolute: %s" % path
         path = path.rstrip(os.sep) + os.sep
-        path_suffix = path_suffix.rstrip(os.sep) + os.sep
-
-        i = path.rfind(path_suffix)
-        if i <= 0:
-                # path and path_suffix are either unrelated or equal
-                altroot = os.sep
-        else:
-                altroot = path[:i]
-
-        # sanity check
-        assert check_altroot_path(path, altroot), \
-            "check_altroot_path(%s, %s)" % (path, altroot)
-
-        return altroot
+
+        if path_transform == PATH_TRANSFORM_NONE:
+                return path
+
+        oroot, nroot = path_transform
+        assert path_transform_applicable(path, path_transform)
+        return os.path.join(nroot, path[len(oroot):])
+
+def path_transform_revert(path, path_transform):
+        """Unapply the 'path_transform' from 'path'."""
+
+        # Reverse the transform.
+        path_transform = (path_transform[1], path_transform[0])
+        return path_transform_apply(path, path_transform)
+
+def compute_path_transform(opath, npath):
+        """Given an two paths create a transform that can be used to translate
+        between them."""
+
+        # Make sure all paths have a leading and trailing os.sep.
+        assert os.path.isabs(opath), "opath is not absolute: %s" % opath
+        assert os.path.isabs(npath), "npath is not absolute: %s" % npath
+        opath = opath.rstrip(os.sep) + os.sep
+        npath = npath.rstrip(os.sep) + os.sep
+
+        # Remove the longest common path suffix.  Do this by reversing the
+        # path strings, finding the longest common prefix, removing the common
+        # prefix, and reversing the paths strings again.  Make sure there is a
+        # trailing os.sep.
+        i = 0
+        opath_rev = opath[::-1]
+        npath_rev = npath[::-1]
+        for i in range(min(len(opath_rev), len(npath_rev))):
+                if opath_rev[i] != npath_rev[i]:
+                        break
+        oroot = opath_rev[i:][::-1].rstrip(os.sep) + os.sep
+        nroot = npath_rev[i:][::-1].rstrip(os.sep) + os.sep
+
+        # Old root and new root should start and end with a '/'.
+        assert oroot[0] == nroot[0] == '/'
+        assert oroot[-1] == nroot[-1] == '/'
+
+        # Return the altroot transform tuple.
+        if oroot == nroot:
+                return PATH_TRANSFORM_NONE
+        return (oroot, nroot)
--- a/src/modules/client/linkedimage/system.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/linkedimage/system.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """
@@ -58,15 +58,15 @@
                 self.__pname = pname
                 self.__linked = linked
 
-        def init_root(self, old_altroot):
+        def init_root(self, root):
                 """See parent class for docstring."""
                 # nothing to do
                 return
 
-        def get_altroot(self, ignore_errors=False):
+        def guess_path_transform(self, ignore_errors=False):
                 """See parent class for docstring."""
                 # nothing to do
-                return None
+                return li.PATH_TRANSFORM_NONE
 
         def get_child_list(self, nocache=False, ignore_errors=False):
                 """See parent class for docstring."""
@@ -89,15 +89,8 @@
         def get_child_props(self, lin):
                 """See parent class for docstring."""
 
-                # make a copy of the properties
-                props = self.__img.cfg.linked_children[lin].copy()
-
-                # update path to include any altroot
-                altroot = self.__linked.altroot()
-                props[li.PROP_PATH] = \
-                    li.add_altroot_path(props[li.PROP_PATH], altroot)
-
-                return props
+                # return a copy of the properties
+                return self.__img.cfg.linked_children[lin].copy()
 
         def attach_child_inmemory(self, props, allow_relink):
                 """See parent class for docstring."""
@@ -110,11 +103,6 @@
                 # make a copy of the properties
                 props = props.copy()
 
-                # update path to remove any altroot
-                altroot = self.__linked.altroot()
-                props[li.PROP_PATH] = \
-                    li.rm_altroot_path(props[li.PROP_PATH], altroot)
-
                 # delete temporal properties
                 props = li.rm_dict_ent(props, li.temporal_props)
 
@@ -149,8 +137,4 @@
 
         def munge_props(self, props):
                 """See parent class for docstring."""
-
-                # update path to remove any altroot
-                altroot = self.__linked.altroot()
-                props[li.PROP_PATH] = \
-                    li.rm_altroot_path(props[li.PROP_PATH], altroot)
+                pass
--- a/src/modules/client/linkedimage/zone.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/linkedimage/zone.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """
@@ -173,6 +173,11 @@
                 """Check to see if zones are supported in the current image.
                 i.e. can the current image have zone children."""
 
+                # pylint: disable=E1120
+                if DebugValues.get_value("zones_supported"):
+                        return True
+                # pylint: enable=E1120
+
                 # first check if the image variant is global
                 variant = "variant.opensolaris.zone"
                 value = self.__img.cfg.variants[variant]
@@ -237,7 +242,8 @@
 
                 # find zones
                 try:
-                        zdict = _list_zones(self.__img.root)
+                        zdict = _list_zones(self.__img.root,
+                            self.__linked.get_path_transform())
                 except OSError, e:
                         # W0212 Access to a protected member
                         # pylint: disable=W0212
@@ -260,27 +266,25 @@
                 self.__zoneadm_list_cache = zlist
                 return self.__list_zones_cached()
 
-        def init_root(self, old_altroot):
+        def init_root(self, root):
                 """See parent class for docstring."""
                 # nuke any cached children
                 self.__zoneadm_list_cache = None
 
-        def get_altroot(self, ignore_errors=False):
+        def guess_path_transform(self, ignore_errors=False):
                 """See parent class for docstring."""
 
                 zlist = self.__list_zones_cached(nocache=True,
                     ignore_errors=ignore_errors)
                 if not zlist:
-                        return None
+                        return li.PATH_TRANSFORM_NONE
 
                 # only global zones can have zone children, and global zones
                 # always execute with "/" as their root.  so if the current
                 # image path is not "/", then assume we're in an alternate
                 # root.
-                root = self.__img.root.rstrip(os.sep)
-                if root == "":
-                        root = os.sep
-                return root
+                root = self.__img.root.rstrip(os.sep) + os.sep
+                return (os.sep, root)
 
         def get_child_list(self, nocache=False, ignore_errors=False):
                 """See parent class for docstring."""
@@ -337,11 +341,8 @@
                 lin_list = [i[0] for i in self.get_child_list()]
                 assert lin not in lin_list or allow_relink
 
-                # make a copy of the properties
-                props = props.copy()
-
-                # Cache this linked image
-                self.__children[lin] = props
+                # cache properties (sans any temporarl ones)
+                self.__children[lin] = li.rm_dict_ent(props, li.temporal_props)
 
         def detach_child_inmemory(self, lin):
                 """See parent class for docstring."""
@@ -380,8 +381,10 @@
 def _zonename():
         """Get the zonname of the current system."""
 
-        cmd = DebugValues.get_value("zone_name") # pylint: disable=E1120
-        if not cmd:
+        cmd = DebugValues.get_value("bin_zonename") # pylint: disable=E1120
+        if cmd is not None:
+                cmd = [cmd]
+        else:
                 cmd = ["/bin/zonename"]
 
         # if the command doesn't exist then bail.
@@ -404,23 +407,54 @@
         l = fout.readlines()[0].rstrip()
         return l
 
-def _list_zones(root):
+def _zoneadm_list_parse(line, cmd, output):
+        """Parse zoneadm list -p output.  It's possible for zonepath to
+        contain a ":".  If it does it will be escaped to be "\:".  (But note
+        that if the zonepath contains a "\" it will not be escaped, which
+        is argubaly a bug.)"""
+
+        # zoneadm list output should never contain a NUL char, so
+        # temporarily replace any escaped colons with a NUL, split the string
+        # on any remaining colons, and then switch any NULs back to colons.
+        tmp_char = "\0"
+        fields = [
+                field.replace(tmp_char, ":")
+                for field in line.replace("\:", tmp_char).split(":")
+        ]
+
+        try:
+                # Unused variable; pylint: disable=W0612
+                z_id, z_name, z_state, z_path, z_uuid, z_brand, z_iptype = \
+                    fields[:7]
+                # pylint: enable=W0612
+        except ValueError:
+                raise apx.LinkedImageException(
+                    cmd_output_invalid=(cmd, output))
+
+        return z_name, z_state, z_path, z_brand
+
+def _list_zones(root, path_transform):
         """Get the zones associated with the image located at 'root'.  We
         return a dictionary where the keys are zone names and the values are
         zone root pahts.  The global zone is excluded from the results.
         Solaris10 branded zones are excluded from the results.  """
 
         rv = dict()
-        cmd = ["/usr/sbin/zoneadm"]
+        cmd = DebugValues.get_value("bin_zoneadm") # pylint: disable=E1120
+        if cmd is not None:
+                cmd = [cmd]
+        else:
+                cmd = ["/usr/sbin/zoneadm"]
 
         # if the command doesn't exist then bail.
         if not li.path_exists(cmd[0]):
                 return rv
 
+        # make sure "root" has a trailing '/'
+        root = root.rstrip(os.sep) + os.sep
+
         # create the zoneadm command line
-        if (root and (root != "/")):
-                cmd.extend(["-R", str(root)])
-        cmd.extend(["list", "-cp"])
+        cmd.extend(["-R", str(root), "list", "-cp"])
 
         # execute zoneadm and save its output to a file
         fout = tempfile.TemporaryFile()
@@ -436,24 +470,35 @@
 
         # parse the command output
         fout.seek(0)
-        for l in fout.readlines():
+        output = fout.readlines()
+        for l in output:
                 l = l.rstrip()
 
-                # Unused variable; pylint: disable=W0612
-                z_id, z_name, z_state, z_path, z_uuid, z_brand, \
-                    z_iptype = l.strip().split(':', 6)
-                # pylint: enable=W0612
-                z_rootpath = os.path.join(z_path, "root")
+                z_name, z_state, z_path, z_brand = \
+                    _zoneadm_list_parse(l, cmd, output)
+
+                # skip brands that we don't care about
+                # W0511 XXX / FIXME Comments; pylint: disable=W0511
+                # XXX: don't hard code brand names, use a brand attribute
+                # pylint: enable=W0511
+                if z_brand not in ["ipkg", "solaris", "sn1", "labeled"]:
+                        continue
 
                 # we don't care about the global zone.
                 if (z_name == "global"):
                         continue
 
-                # W0511 XXX / FIXME Comments; pylint: disable=W0511
-                # XXX: don't hard code brand names, use a brand attribute
-                # pylint: enable=W0511
-                if z_brand not in ["ipkg", "solaris", "sn1", "labeled"]:
-                        continue
+                # append "/root" to zonepath
+                z_rootpath = os.path.join(z_path, "root")
+                assert z_rootpath.startswith(root), \
+                    "zone path '%s' doesn't begin with '%s" % \
+                    (z_rootpath, root)
+
+                # If there is a current path transform in effect then revert
+                # the path reported by zoneadm to the original zone path.
+                if li.path_transform_applied(z_rootpath, path_transform):
+                        z_rootpath = li.path_transform_revert(z_rootpath,
+                            path_transform)
 
                 # we only care about zones that have been installed
                 if z_state not in zone_installed_states:
--- a/src/modules/client/options.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/options.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import os
 
@@ -28,7 +28,7 @@
 import pkg.client.linkedimage as li
 import pkg.misc as misc
 
-from pkg.client.api_errors import InvalidOptionError
+from pkg.client.api_errors import InvalidOptionError, LinkedImageException
 from pkg.client import global_settings
 
 _orig_cwd = None
@@ -45,6 +45,7 @@
 CONCURRENCY           = "concurrency"
 DENY_NEW_BE           = "deny_new_be"
 FORCE                 = "force"
+IGNORE_MISSING        = "ignore_missing"
 LI_IGNORE             = "li_ignore"
 LI_IGNORE_ALL         = "li_ignore_all"
 LI_IGNORE_LIST        = "li_ignore_list"
@@ -55,6 +56,11 @@
 LI_PROPS              = "li_props"
 LI_TARGET_ALL         = "li_target_all"
 LI_TARGET_LIST        = "li_target_list"
+# options for explicit recursion; see description in client.py
+LI_ERECURSE_ALL       = "li_erecurse_all"
+LI_ERECURSE_INCL      = "li_erecurse_list"
+LI_ERECURSE_EXCL      = "li_erecurse_excl"
+LI_ERECURSE           = "li_erecurse"
 LIST_ALL              = "list_all"
 LIST_INSTALLED_NEWEST = "list_installed_newest"
 LIST_NEWEST           = "list_newest"
@@ -78,6 +84,8 @@
 TAGGED                = "tagged"
 UPDATE_INDEX          = "update_index"
 VERBOSE               = "verbose"
+SYNC_ACT              = "sync_act"
+ACT_TIMEOUT           = "act_timeout"
 
 
 
@@ -297,6 +305,69 @@
                 raise InvalidOptionError(InvalidOptionError.INCOMPAT,
                     [arg1, ORIGINS])
 
+def opts_table_cb_li_recurse(api_inst, opts, opts_new):
+
+        del opts_new[LI_ERECURSE_INCL]
+        del opts_new[LI_ERECURSE_EXCL]
+        del opts_new[LI_ERECURSE_ALL]
+
+        if opts[LI_ERECURSE_EXCL] and not opts[LI_ERECURSE_ALL]:
+                raise InvalidOptionError(InvalidOptionError.REQUIRED,
+                    [LI_ERECURSE_EXCL, LI_ERECURSE_ALL])
+
+        if opts[LI_ERECURSE_INCL] and not opts[LI_ERECURSE_ALL]:
+                raise InvalidOptionError(InvalidOptionError.REQUIRED,
+                    [LI_ERECURSE_INCL, LI_ERECURSE_ALL])
+
+        if opts[LI_ERECURSE_INCL] and opts[LI_ERECURSE_EXCL]:
+                raise InvalidOptionError(InvalidOptionError.INCOMPAT,
+                    [LI_ERECURSE_INCL, LI_ERECURSE_EXCL])
+
+        if not opts[LI_ERECURSE_ALL]:
+                opts_new[LI_ERECURSE] = None
+                return
+
+        # Go through all children and check if they are in the recurse list.
+        li_child_targets = []
+        li_child_list = set([
+                lin
+                for lin, rel, path in api_inst.list_linked()
+                if rel == "child"
+        ])
+
+        def parse_lin(ulin):
+                lin = None
+                try:
+                        lin = api_inst.parse_linked_name(ulin,
+                            allow_unknown=True)
+                except LinkedImageException, e:
+                        try:
+                                lin = api_inst.parse_linked_name("zone:%s" % ulin,
+                                    allow_unknown=True)
+                        except LinkedImageException, e:
+                                pass
+                if lin is None or lin not in li_child_list:
+                        raise InvalidOptionError(msg=
+                            _("invalid linked image or zone name '%s'.") % ulin)
+
+                return lin
+
+        if opts[LI_ERECURSE_INCL]:
+                # include list specified
+                for ulin in opts[LI_ERECURSE_INCL]:
+                        li_child_targets.append(parse_lin(ulin))
+                opts_new[LI_ERECURSE] = li_child_targets
+        else:
+                # exclude list specified
+                for ulin in opts[LI_ERECURSE_EXCL]:
+                        li_child_list.remove(parse_lin(ulin))
+                opts_new[LI_ERECURSE] = li_child_list
+
+        # If we use image recursion we need to make sure uninstall and update
+        # ignore non-existing packages in the parent image.
+        if opts_new[LI_ERECURSE] and IGNORE_MISSING in opts:
+                opts_new[IGNORE_MISSING] = True
+
 def opts_table_cb_no_headers_vs_quiet(api_inst, opts, opts_new):
         # check if we accept the -q option
         if QUIET not in opts:
@@ -487,15 +558,32 @@
         # remove concurrency from parameters dict
         del opts_new[CONCURRENCY]
 
+def opts_table_cb_actuators(api_inst, opts, opts_new):
+
+        del opts_new[ACT_TIMEOUT]
+        del opts_new[SYNC_ACT]
+
+        if opts[ACT_TIMEOUT]:
+                # make sure we have an integer
+                opts_cb_int(ACT_TIMEOUT, api_inst, opts, opts_new)
+        elif opts[SYNC_ACT]:
+                # -1 is no timeout
+                opts_new[ACT_TIMEOUT] = -1
+        else:
+                # 0 is no sync actuators are used (timeout=0)
+                opts_new[ACT_TIMEOUT] = 0
+
 #
 # options common to multiple pkg(1) operations.  The format for specifying
 # options is a list which can contain:
 #
 # - Tuples formatted as:
-#       (k, v)
+#       (k, v, [val])
 #   where the values are:
 #       k: the key value for the options dictionary
 #       v: the default value. valid values are: True/False, None, [], 0
+#       val: the valid argument list. It should be a list,
+#       and it is optional.
 #
 
 
@@ -555,6 +643,13 @@
     (LI_NAME,              None),
 ]
 
+opts_table_li_recurse = [
+    opts_table_cb_li_recurse,
+    (LI_ERECURSE_ALL,       False),
+    (LI_ERECURSE_INCL,      []),
+    (LI_ERECURSE_EXCL,      []),
+]
+
 opts_table_licenses = [
     (ACCEPT,               False),
     (SHOW_LICENSES,        False),
@@ -610,11 +705,22 @@
     (STAGE,                None),
 ]
 
+opts_table_missing = [
+    (IGNORE_MISSING,       False),
+]
+
+opts_table_actuators = [
+    opts_table_cb_actuators,
+    (SYNC_ACT,             False),
+    (ACT_TIMEOUT,          None)
+]
+
 #
 # Options for pkg(1) subcommands.  Built by combining the option tables above,
 # with some optional subcommand unique options defined below.
 #
-opts_install = \
+
+opts_main = \
     opts_table_beopts + \
     opts_table_concurrency + \
     opts_table_li_ignore + \
@@ -628,16 +734,26 @@
     opts_table_origins + \
     []
 
-# "update" cmd inherits all "install" cmd options
-opts_update = \
-    opts_install + \
-    opts_table_force + \
+opts_install = \
+    opts_main + \
     opts_table_stage + \
+    opts_table_li_recurse + \
+    opts_table_actuators + \
     []
 
-# "attach-linked" cmd inherits all "install" cmd options
+# "update" cmd inherits all main cmd options
+opts_update = \
+    opts_main + \
+    opts_table_force + \
+    opts_table_li_recurse + \
+    opts_table_stage + \
+    opts_table_actuators + \
+    opts_table_missing + \
+    []
+
+# "attach-linked" cmd inherits all main cmd options
 opts_attach_linked = \
-    opts_install + \
+    opts_main + \
     opts_table_force + \
     opts_table_li_md_only + \
     opts_table_li_no_pkg_updates + \
@@ -667,17 +783,17 @@
     (MED_VERSION,          None)
 ]
 
-# "set-property-linked" cmd inherits all "install" cmd options
+# "set-property-linked" cmd inherits all main cmd options
 opts_set_property_linked = \
-    opts_install + \
+    opts_main + \
     opts_table_li_md_only + \
     opts_table_li_no_pkg_updates + \
     opts_table_li_target1 + \
     []
 
-# "sync-linked" cmd inherits all "install" cmd options
+# "sync-linked" cmd inherits all main cmd options
 opts_sync_linked = \
-    opts_install + \
+    opts_main + \
     opts_table_li_md_only + \
     opts_table_li_no_pkg_updates + \
     opts_table_li_target + \
@@ -692,7 +808,11 @@
     opts_table_no_index + \
     opts_table_nqv + \
     opts_table_parsable + \
-    opts_table_stage
+    opts_table_stage + \
+    opts_table_li_recurse + \
+    opts_table_missing + \
+    opts_table_actuators + \
+    []
 
 opts_audit_linked = \
     opts_table_li_no_psync + \
@@ -742,6 +862,7 @@
     pkgdefs.PKG_OP_CHANGE_FACET   : opts_install,
     pkgdefs.PKG_OP_CHANGE_VARIANT : opts_install,
     pkgdefs.PKG_OP_DETACH         : opts_detach_linked,
+    pkgdefs.PKG_OP_EXACT_INSTALL  : opts_main,
     pkgdefs.PKG_OP_INSTALL        : opts_install,
     pkgdefs.PKG_OP_LIST           : opts_list_inventory,
     pkgdefs.PKG_OP_LIST_LINKED    : opts_list_linked,
@@ -779,7 +900,10 @@
         for o in popts:
                 if type(o) != tuple:
                         continue
-                opt_name, default = o
+                if len(o) == 2:
+                        opt_name, default = o
+                elif len(o) == 3:
+                        opt_name, default, valid_args = o
                 if opt_name == opt:
                         return default
 
@@ -817,8 +941,12 @@
                 if type(o) != tuple:
                         callbacks.append(o)
                         continue
-
-                avail_opt, default = o
+                valid_args = []
+                # If no valid argument list specified.
+                if len(o) == 2:
+                        avail_opt, default = o
+                elif len(o) == 3:
+                        avail_opt, default, valid_args = o
                 # for options not given we substitue the default value
                 if avail_opt not in opts:
                         rv[avail_opt] = default
@@ -831,6 +959,22 @@
                 elif type(default) == bool:
                         assert type(opts[avail_opt]) == bool, opts[avail_opt]
 
+                if valid_args:
+                        assert type(default) == list or default is None, \
+                            default
+                        raise_error = False
+                        if type(opts[avail_opt]) == list:
+                                if not set(opts[avail_opt]).issubset(
+                                    set(valid_args)):
+                                        raise_error = True
+                        else:
+                                if opts[avail_opt] not in valid_args:
+                                        raise_error = True
+                        if raise_error:
+                                raise InvalidOptionError(
+                                    InvalidOptionError.ARG_INVALID,
+                                    [opts[avail_opt], avail_opt])
+
                 rv[avail_opt] = opts[avail_opt]
 
         rv_updated = rv.copy()
--- a/src/modules/client/pkg_solver.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/pkg_solver.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 import os
 import time
@@ -85,7 +85,6 @@
                 self.__trim_dict = defaultdict(set) # fmris trimmed from
                                                 # consideration
 
-
                 self.__installed_dict = installed_dict.copy() # indexed by stem
                 self.__installed_pkgs = frozenset(self.__installed_dict)
                 self.__installed_fmris = frozenset(
@@ -128,7 +127,7 @@
                 self.__iterations = 0
                 self.__clauses     = 0
                 self.__variables   = 0
-		self.__subphasename = None
+                self.__subphasename = None
                 self.__timings = []
                 self.__start_time = 0
                 self.__inc_list = []
@@ -155,8 +154,8 @@
                             for f in self.__parent_pkgs
                         ])
 
-		# cache of firmware dependencies
-		self.__firmware = Firmware()
+                # cache of firmware dependencies
+                self.__firmware = Firmware()
 
         def __str__(self):
 
@@ -210,7 +209,7 @@
                 self.__start_time = None
                 self.__dependents = None
                 self.__fmridict = {}
-		self.__firmware = None
+                self.__firmware = None
 
                 if DebugValues["plan"]:
                         # Remaining data must be kept.
@@ -225,11 +224,11 @@
 
         def __start_subphase(self, subphase=None, reset=False):
                 """Add timing records and tickle progress tracker.  Ends
-		previous subphase if ongoing."""
+                previous subphase if ongoing."""
                 if reset:
                         self.__timings = []
-		if self.__subphasename is not None:
-			self.__end_subphase()
+                if self.__subphasename is not None:
+                        self.__end_subphase()
                 self.__start_time = time.time()
                 self.__subphasename = "phase %d" % subphase
                 self.__progress()
@@ -244,7 +243,8 @@
         def solve_install(self, existing_freezes, proposed_dict,
             new_variants=None, excludes=EmptyI,
             reject_set=frozenset(), trim_proposed_installed=True,
-            relax_all=False, ignore_inst_parent_deps=False):
+            relax_all=False, ignore_inst_parent_deps=False,
+            exact_install=False, installed_dict_tmp=EmptyDict):
                 """Logic to install packages, change variants, and/or change
                 facets.
 
@@ -280,7 +280,17 @@
                 dependencies (ie, out of sync images).  Any packaging
                 operation which needs to guarantee that we have an in sync
                 image (for example, sync-linked operations, or any recursive
-                packaging operations) should NOT enable this behavior."""
+                packaging operations) should NOT enable this behavior.
+
+                'exact_install' is a flag to indicate whether we treat the
+                current image as an empty one. Any previously installed
+                packages that are not either specified in proposed_dict or
+                are a dependency (require, origin and parent dependencies)
+                of those packages will be removed.
+
+                'installed_dict_tmp' a dictionary containing the current
+                installed FMRIs indexed by pkg_name. Used when exact_install
+                is on."""
 
                 # Once solution has been returned or failure has occurred, a new
                 # solver must be used.
@@ -373,7 +383,20 @@
                 self.__start_subphase(2)
                 # If requested, trim any proposed fmris older than those of
                 # corresponding installed packages.
-                for f in self.__installed_fmris - self.__removal_fmris:
+                # Because we have introduced exact-install where
+                # self.__installed_fmris will be empty, in order to prevent
+                # downgrading, we need to look up the full installed dictionary
+                # stored in self.__installed_dict_tmp.
+                if exact_install:
+                        installed_fmris_tmp = frozenset(
+                            installed_dict_tmp.values())
+                        candidate_fmris = installed_fmris_tmp - \
+                            self.__removal_fmris
+                else:
+                        candidate_fmris = self.__installed_fmris - \
+                            self.__removal_fmris
+
+                for f in candidate_fmris:
                         self.__progress()
                         if not trim_proposed_installed and \
                             f.pkg_name in proposed_dict:
@@ -477,7 +500,8 @@
                             ignore_inst_parent_deps):
                                 if self.__trim_nonmatching_variants(f):
                                         self.__trim_nonmatching_origins(f,
-                                            excludes)
+                                            excludes, exact_install=exact_install,
+                                            installed_dict_tmp=installed_dict_tmp)
 
                 self.__start_subphase(10)
                 # remove all trimmed fmris from consideration
@@ -1440,20 +1464,32 @@
         def __get_incorp_nonmatch_dict(self, fmri, excludes):
                 """Given a fmri with incorporation dependencies, produce a
                 dictionary containing (matching, non matching fmris),
-                indexed by pkg name"""
+                indexed by pkg name.  Note that some fmris may be
+                incorporated more than once at different levels of
+                specificity"""
                 ret = dict()
                 for da in self.__get_dependency_actions(fmri,
                     excludes=excludes):
                         if da.attrs["type"] != "incorporate":
                                 continue
-                        nm, m, c, d, r = self.__parse_dependency(da, fmri,
+                        nm, m, c, d, r, f = self.__parse_dependency(da, fmri,
                             dotrim=False)
-                        for n in nm:
-                                ret.setdefault(n.pkg_name,
-                                    (set(), set()))[1].add(n)
-                        for n in m:
-                                ret.setdefault(n.pkg_name,
-                                    (set(), set()))[0].add(n)
+                        # Collect all incorp. dependencies affecting
+                        # a package in a list.  Note that it is
+                        # possible for both matching and non-matching
+                        # sets to be NULL, and we'll need at least
+                        # one item in the list for reduce to work.
+                        ret.setdefault(f.pkg_name, (list(), list()))
+                        ret[f.pkg_name][0].append(set(m))
+                        ret[f.pkg_name][1].append(set(nm))
+
+                # For each of the packages constrained, combine multiple
+                # incorporation dependencies.  Matches are intersected,
+                # non-matches form a union.
+                for pkg_name in ret:
+                        ret[pkg_name] = (
+                            reduce(set.intersection, ret[pkg_name][0]),
+                            reduce(set.union, ret[pkg_name][1]))
                 return ret
 
         def __parse_dependency(self, dependency_action, fmri,
@@ -1574,7 +1610,7 @@
                 # matches on a required package
 
                 if not check_req or matching or not required:
-                        return nonmatching, matching, conditional, dtype, required
+                        return nonmatching, matching, conditional, dtype, required, fmri
 
                 # we're going to toss an exception
                 if dtype == "exclude":
@@ -1795,7 +1831,7 @@
 
         def __gen_dependency_clauses(self, fmri, da, dotrim=True):
                 """Return clauses to implement this dependency"""
-                nm, m, cond, dtype, req = self.__parse_dependency(da, fmri,
+                nm, m, cond, dtype, req, depf = self.__parse_dependency(da, fmri,
                     dotrim)
 
                 if dtype == "require" or dtype == "require-any":
@@ -2196,7 +2232,8 @@
                                 allowed = False
                 return allowed
 
-        def __trim_nonmatching_origins(self, fmri, excludes):
+        def __trim_nonmatching_origins(self, fmri, excludes,
+            exact_install=False, installed_dict_tmp=EmptyDict):
                 """Trim any fmri that contains a origin dependency that is
                 not satisfied by the current image or root-image"""
 
@@ -2208,35 +2245,41 @@
                         req_fmri = pkg.fmri.PkgFmri(da.attrs["fmri"], "5.11")
 
                         if da.attrs.get("root-image", "").lower() == "true":
-				if req_fmri.pkg_name.startswith("feature/firmware/"):
-					# this is a firmware dependency
-					fw_ok, reason = \
-					    self.__firmware.check_firmware(da,
-					    req_fmri.pkg_name)
-					if not fw_ok:
-						self.__trim(fmri, reason)
-						return False
-					continue
-				else:
-					if self.__root_fmris is None:
-						img = pkg.client.image.Image(
-						    misc.liveroot(),
-						    allow_ondisk_upgrade=False,
-						    user_provided_dir=True,
-						    should_exist=True)
-						self.__root_fmris = dict([
-						    (f.pkg_name, f)
-						    for f in img.gen_installed_pkgs()
-						])
+                                if req_fmri.pkg_name.startswith("feature/firmware/"):
+                                        # this is a firmware dependency
+                                        fw_ok, reason = \
+                                            self.__firmware.check_firmware(da,
+                                            req_fmri.pkg_name)
+                                        if not fw_ok:
+                                                self.__trim(fmri, reason)
+                                                return False
+                                        continue
+                                else:
+                                        if self.__root_fmris is None:
+                                                img = pkg.client.image.Image(
+                                                    misc.liveroot(),
+                                                    allow_ondisk_upgrade=False,
+                                                    user_provided_dir=True,
+                                                    should_exist=True)
+                                                self.__root_fmris = dict([
+                                                    (f.pkg_name, f)
+                                                    for f in img.gen_installed_pkgs()
+                                                ])
 
-					installed = self.__root_fmris.get(
-					    req_fmri.pkg_name, None)
-					reason = (N_("Installed version in root image "
-					    "is too old for origin dependency {0}"),
-					    (req_fmri,))
+                                        installed = self.__root_fmris.get(
+                                            req_fmri.pkg_name, None)
+                                        reason = (N_("Installed version in root image "
+                                            "is too old for origin dependency {0}"),
+                                            (req_fmri,))
                         else:
-                                installed = self.__installed_dict.get(
-                                    req_fmri.pkg_name, None)
+                                # Always use the full installed dict for origin
+                                # dependency.
+                                if exact_install:
+                                        installed = installed_dict_tmp.get(
+                                            req_fmri.pkg_name, None)
+                                else:
+                                        installed = self.__installed_dict.get(
+                                            req_fmri.pkg_name, None)
                                 reason = (N_("Installed version in image "
                                     "being upgraded is too old for origin "
                                     "dependency {0}"), (req_fmri,))
--- a/src/modules/client/pkgdefs.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/pkgdefs.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """
@@ -37,10 +37,13 @@
 EXIT_NOTLIVE   =  5 # The requested op cannot be performed on a live image.
 EXIT_LICENSE   =  6 # License acceptance required for requested op.
 EXIT_LOCKED    =  7 # Image is currently locked by another process
-EXIT_EACCESS   =  8 # Can't access requested image
-EXIT_DIVERGED  =  9 # Image is not in sync with its constraints
-EXIT_NOPARENT  = 10 # Image is not linked to a parent image
-EXIT_PARENTOP  = 11 # Linked operation must be done from parent
+EXIT_ACTUATOR  =  8 # Actuator timed out
+
+# private pkg exit codes
+EXIT_EACCESS   = 51 # Can't access requested image
+EXIT_DIVERGED  = 52 # Image is not in sync with its constraints
+EXIT_NOPARENT  = 53 # Image is not linked to a parent image
+EXIT_PARENTOP  = 54 # Linked operation must be done from parent
 
 # package operations
 PKG_OP_ATTACH          = "attach-linked"
@@ -48,6 +51,7 @@
 PKG_OP_CHANGE_FACET    = "change-facet"
 PKG_OP_CHANGE_VARIANT  = "change-variant"
 PKG_OP_DETACH          = "detach-linked"
+PKG_OP_EXACT_INSTALL   = "exact-install"
 PKG_OP_INSTALL         = "install"
 PKG_OP_LIST            = "list"
 PKG_OP_LIST_LINKED     = "list-linked"
@@ -65,6 +69,7 @@
     PKG_OP_CHANGE_FACET,
     PKG_OP_CHANGE_VARIANT,
     PKG_OP_DETACH,
+    PKG_OP_EXACT_INSTALL,
     PKG_OP_INSTALL,
     PKG_OP_LIST,
     PKG_OP_LIST_LINKED,
@@ -82,6 +87,7 @@
 API_OP_CHANGE_FACET   = "change-facet"
 API_OP_CHANGE_VARIANT = "change-variant"
 API_OP_DETACH         = "detach-linked"
+API_OP_EXACT_INSTALL    = "exact-install"
 API_OP_INSTALL        = "install"
 API_OP_REPAIR         = "repair"
 API_OP_REVERT         = "revert"
@@ -94,6 +100,7 @@
     API_OP_CHANGE_FACET,
     API_OP_CHANGE_VARIANT,
     API_OP_DETACH,
+    API_OP_EXACT_INSTALL,
     API_OP_INSTALL,
     API_OP_REPAIR,
     API_OP_REVERT,
--- a/src/modules/client/pkgplan.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/pkgplan.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
 #
 
 import copy
@@ -280,7 +280,7 @@
                                 sigman = self.__destination_mfst
 
                         sigs = list(sigman.gen_actions_by_type("signature",
-                            new_excludes))
+                            excludes=new_excludes))
                         if sig_pol and (sigs or sig_pol.name != "ignore"):
                                 # Only perform signature verification logic if
                                 # there are signatures or if signature-policy
@@ -334,7 +334,8 @@
 
                         for a in absent_dirs:
                                 self.actions.removed.append(
-                                    (directory.DirectoryAction(path=a), None))
+                                    (directory.DirectoryAction(path=a,
+                                    implicit="True"), None))
 
                 # Stash information needed by legacy actions.
                 self.pkg_summary = \
--- a/src/modules/client/plandesc.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/plandesc.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """
@@ -125,6 +125,7 @@
             "_rm_aliases": { str: set() },
             "added_groups": { str: pkg.fmri.PkgFmri },
             "added_users": { str: pkg.fmri.PkgFmri },
+            "child_op_vectors": [ ( str, [ li.LinkedImageName ], {}, bool ) ],
             "children_ignored": [ li.LinkedImageName ],
             "children_nop": [ li.LinkedImageName ],
             "children_planned": [ li.LinkedImageName ],
@@ -199,9 +200,7 @@
                 self._bytes_added = 0  # size of files added
                 self._need_boot_archive = None
                 # child properties
-                self.child_op = None
-                self.child_op_implicit = False
-                self.child_kwargs = {}
+                self.child_op_vectors = []
                 self.children_ignored = None
                 self.children_planned = []
                 self.children_nop = []
@@ -230,6 +229,8 @@
                 self._cbytes_avail = 0  # avail space for downloads
                 self._bytes_avail = 0   # avail space for fs
 
+                self._act_timed_out = False
+
         @staticmethod
         def getstate(obj, je_state=None, reset_volatiles=False):
                 """Returns the serialized state of this object in a format
@@ -329,6 +330,8 @@
 
                 # reduce memory consumption
                 self._fmri_changes = []
+                # We have to save the timed_out state.
+                self._act_timed_out = self._actuators.timed_out
                 self._actuators = pkg.client.actuator.Actuator()
                 self.added_groups = {}
                 self.added_users = {}
@@ -667,6 +670,17 @@
 
                 return self._solver_errors
 
+        def set_actuator_timeout(self, timeout):
+                """Set timeout for synchronous actuators."""
+                assert type(timeout) == int, "Actuator timeout must be an "\
+                    "integer."
+                self._actuators.set_timeout(timeout)
+
+        @property
+        def actuator_timed_out(self):
+                """Indicates that a synchronous actuator timed out."""
+                return self._act_timed_out
+
         @property
         def plan_type(self):
                 """Return the type of plan that was created (ex:
--- a/src/modules/client/transport/transport.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/client/transport/transport.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import cStringIO
@@ -177,10 +177,9 @@
                         # found, return it alone.
                         return caches
 
-                # If this is a not a specific publisher case, a readonly case,
-                # or no writeable cache exists for the specified publisher,
-                # return any publisher-specific ones first and any additional
-                # ones after.
+                # If not filtering on publisher, this is a readonly case, or no
+                # writeable cache exists for the specified publisher, return any
+                # publisher-specific caches first and any additional ones after.
                 return caches + [
                     cache
                     for cache in self.__caches.get("__all", [])
@@ -270,7 +269,7 @@
                 self.clear_caches(shared=shared)
 
                 # Automatically add any publisher repository origins
-                # or mirrors that are filesystem-based as read-only caches.
+                # or mirrors that are filesystem-based as readonly caches.
                 for pub in self.gen_publishers():
                         repo = pub.repository
                         if not repo:
@@ -813,7 +812,7 @@
                 try:
                         catalog.verify(filepath)
                 except apx.CatalogError, e:
-                        os.remove(filepath)
+                        portable.remove(filepath)
                         te = tx.InvalidContentException(filepath,
                             "CatalogPart failed validation: %s" % e)
                         te.request = filename
@@ -1588,16 +1587,16 @@
                                                 # If the manifest was physically
                                                 # valid, but can't be logically
                                                 # parsed, drive on.
-                                                os.remove(dl_path)
+                                                portable.remove(dl_path)
                                                 progtrack.manifest_commit()
                                                 mxfr.del_hash(s)
                                                 continue
                                         repostats.record_error(content=True)
                                         failedreqs.append(s)
-                                        os.remove(dl_path)
+                                        portable.remove(dl_path)
                                         continue
 
-                                os.remove(dl_path)
+                                portable.remove(dl_path)
                                 progtrack.manifest_commit()
                                 mxfr.del_hash(s)
 
@@ -1679,7 +1678,7 @@
                 if chash != newhash:
                         if mfstpath:
                                 sz = os.stat(mfstpath).st_size
-                                os.remove(mfstpath)
+                                portable.remove(mfstpath)
                         else:
                                 sz = None
                         raise tx.InvalidContentException(mfstpath,
@@ -2410,24 +2409,42 @@
 
                 return mfile
 
-        def _action_cached(self, action, pub, in_hash=None, verify=True):
-                """If a file with the name action.hash is cached,
-                and if it has the same content hash as action.chash,
-                then return the path to the file.  If the file can't
-                be found, return None.
+        def _action_cached(self, action, pub, in_hash=None, verify=None):
+                """If a file with the name action.hash is cached, and if it has
+                the same content hash as action.chash, then return the path to
+                the file.  If the file can't be found, return None.
 
                 The in_hash parameter allows an alternative hash to be used to
                 check if this action is cached.  This is used for actions which
-                have more than one effective payload."""
+                have more than one effective payload.
+
+                The verify parameter specifies whether the payload of the action
+                should be validated if needed.  The content of readonly caches
+                will not be validated now; package operations will validate the
+                content later at the time of installation or update and fail if
+                it is invalid."""
 
                 hash_attr, hash_val, hash_func = \
                     digest.get_least_preferred_hash(action)
+
                 if in_hash:
                         hash_val = in_hash
+
                 for cache in self.cfg.get_caches(pub=pub, readonly=True):
                         cache_path = cache.lookup(hash_val)
                         if not cache_path:
                                 continue
+                        if verify is None:
+                                # Assume readonly caches are valid (likely a
+                                # file:// repository).  The content will be
+                                # validated later at the time of install /
+                                # update, so if it isn't valid here, there's
+                                # nothing we can do anyway since it's likely the
+                                # repository we would retrieve it from.  This
+                                # can be a significant performance improvement
+                                # when using NFS repositories.
+                                verify = not cache.readonly
+
                         try:
                                 if verify:
                                         self._verify_content(action, cache_path)
@@ -2447,6 +2464,16 @@
                 return opener
 
         def action_cached(self, fmri, action):
+                """If a file with the name action.hash is cached, and if it has
+                the same content hash as action.chash, then return the path to
+                the file.  If the file can't be found, return None.
+
+                'fmri' is a FMRI object for the package that delivers the
+                action.
+
+                'action' is an action object to retrieve the cache file path
+                for."""
+
                 try:
                         pub = self.cfg.get_publisher(fmri.publisher)
                 except apx.UnknownPublisher:
@@ -2515,7 +2542,7 @@
                                     hash_func=hash_func)
                         except zlib.error, e:
                                 s = os.stat(filepath)
-                                os.remove(filepath)
+                                portable.remove(filepath)
                                 raise tx.InvalidContentException(path,
                                     "zlib.error:%s" %
                                     (" ".join([str(a) for a in e.args])),
@@ -2526,7 +2553,7 @@
 
                         if hash_val != fhash:
                                 s = os.stat(filepath)
-                                os.remove(filepath)
+                                portable.remove(filepath)
                                 raise tx.InvalidContentException(action.path,
                                     "hash failure:  expected: %s"
                                     "computed: %s" % (hash, fhash),
@@ -2549,7 +2576,7 @@
                                 if filepath.startswith(fm.root):
                                         remove_content = True
                         if remove_content:
-                                os.remove(filepath)
+                                portable.remove(filepath)
                         raise tx.InvalidContentException(path,
                             "chash failure: expected: %s computed: %s" % \
                             (chash, newhash), size=s.st_size)
--- a/src/modules/config.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/config.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
 #
 
 """The pkg.config module provides a set of classes for managing both 'flat'
@@ -1471,7 +1471,7 @@
                 """
 
                 # First, attempt to read the target.
-                cp = ConfigParser.SafeConfigParser()
+                cp = ConfigParser.RawConfigParser()
                 # Disabled ConfigParser's inane option transformation to ensure
                 # option case is preserved.
                 cp.optionxform = lambda x: x
@@ -1565,7 +1565,7 @@
                 if os.path.exists(self._target) and not self._dirty:
                         return
 
-                cp = ConfigParser.SafeConfigParser()
+                cp = ConfigParser.RawConfigParser()
                 # Disabled ConfigParser's inane option transformation to ensure
                 # option case is preserved.
                 cp.optionxform = lambda x: x
--- a/src/modules/lint/engine.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/lint/engine.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import pkg.client.api
@@ -40,7 +40,7 @@
 import urllib2
 
 PKG_CLIENT_NAME = "pkglint"
-CLIENT_API_VERSION = 75
+CLIENT_API_VERSION = 78
 pkg.client.global_settings.client_name = PKG_CLIENT_NAME
 
 class LintEngineException(Exception):
--- a/src/modules/manifest.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/manifest.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,13 +21,15 @@
 #
 
 #
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 from collections import namedtuple, defaultdict
 import errno
+import fnmatch
 import hashlib
 import os
+import re
 import tempfile
 from itertools import groupby, chain, product, repeat, izip
 from operator import itemgetter
@@ -44,6 +46,37 @@
 from pkg.actions.attribute import AttributeAction
 from pkg.actions.directory import DirectoryAction
 
+def _compile_fnpats(fn_pats):
+        """Private helper function that returns a compiled version of a
+        dictionary of fnmatch patterns."""
+
+        return dict(
+            (key, [
+                re.compile(fnmatch.translate(pat), re.IGNORECASE).match
+                for pat in pats
+            ])
+            for (key, pats) in fn_pats.iteritems()
+        )
+
+
+def _attr_matches(action, attr_match):
+        """Private helper function: given an action, return True if any of its
+        attributes' values matches the pattern for the same attribute in the
+        attr_match dictionary, and False otherwise. Note that the patterns must
+        be pre-comiled using re.compile() or _compile_fnpats."""
+
+        if not attr_match:
+                return True
+
+        for (attr, matches) in attr_match.iteritems():
+                if attr in action.attrs:
+                        for match in matches:
+                                for attrval in action.attrlist(attr):
+                                        if match(attrval):
+                                                return True
+        return False
+
+
 class ManifestDifference(
     namedtuple("ManifestDifference", "added changed removed")):
 
@@ -170,8 +203,8 @@
                         # to be sorted since the caller likely already does
                         # (such as pkgplan/imageplan).
                         return ManifestDifference(
-                            [(None, a) for a in self.gen_actions(self_exclude)],
-                            [], [])
+                            [(None, a) for a in self.gen_actions(
+                            excludes=self_exclude)], [], [])
 
                 def hashify(v):
                         """handle key values that may be lists"""
@@ -183,7 +216,7 @@
                         # Transform list of actions into a dictionary keyed by
                         # action key attribute, key attribute and mediator, or
                         # id if there is no key attribute.
-                        for a in mf.gen_actions(excludes):
+                        for a in mf.gen_actions(excludes=excludes):
                                 if (a.name == "link" or
                                     a.name == "hardlink") and \
                                     a.attrs.get("mediator"):
@@ -829,40 +862,56 @@
                 for m in ret:
                         yield m, ret[m]
 
-        def gen_actions(self, excludes=EmptyI):
+        def gen_actions(self, attr_match=None, excludes=EmptyI):
                 """Generate actions in manifest through ordered callable list"""
 
                 if self.excludes == excludes:
                         excludes = EmptyI
                 assert excludes == EmptyI or self.excludes == EmptyI
+
+                if attr_match:
+                        attr_match = _compile_fnpats(attr_match)
+
                 for a in self.actions:
                         for c in excludes:
                                 if not c(a):
                                         break
                         else:
-                                yield a
+                                # These conditions are split by performance.
+                                if not attr_match:
+                                        yield a
+                                elif _attr_matches(a, attr_match):
+                                        yield a
 
-        def gen_actions_by_type(self, atype, excludes=EmptyI):
+        def gen_actions_by_type(self, atype, attr_match=None, excludes=EmptyI):
                 """Generate actions in the manifest of type "type"
                 through ordered callable list"""
 
                 if self.excludes == excludes:
                         excludes = EmptyI
                 assert excludes == EmptyI or self.excludes == EmptyI
+
+                if attr_match:
+                        attr_match = _compile_fnpats(attr_match)
+
                 for a in self.actions_bytype.get(atype, []):
                         for c in excludes:
                                 if not c(a):
                                         break
                         else:
-                                yield a
+                                # These conditions are split by performance.
+                                if not attr_match:
+                                        yield a
+                                elif _attr_matches(a, attr_match):
+                                        yield a
 
-        def gen_actions_by_types(self, atypes, excludes=EmptyI):
+        def gen_actions_by_types(self, atypes, attr_match=None, excludes=EmptyI):
                 """Generate actions in the manifest of types "atypes"
                 through ordered callable list."""
 
                 for atype in atypes:
                         for a in self.gen_actions_by_type(atype,
-                            excludes=excludes):
+                            attr_match=attr_match, excludes=excludes):
                                 yield a
 
         def gen_key_attribute_value_by_type(self, atype, excludes=EmptyI):
@@ -871,7 +920,7 @@
 
                 return (
                     a.attrs.get(a.key_attr)
-                    for a in self.gen_actions_by_type(atype, excludes)
+                    for a in self.gen_actions_by_type(atype, excludes=excludes)
                 )
 
         def duplicates(self, excludes=EmptyI):
@@ -884,7 +933,7 @@
                         return a.name, a.attrs.get(a.key_attr, id(a))
 
                 alldups = []
-                acts = [a for a in self.gen_actions(excludes)]
+                acts = [a for a in self.gen_actions(excludes=excludes)]
 
                 for k, g in groupby(sorted(acts, key=fun), fun):
                         glist = list(g)
@@ -1592,7 +1641,8 @@
         @staticmethod
         def clear_cache(cache_root):
                 """Remove all manifest cache files found in the given directory
-                (excluding the manifest itself).
+                (excluding the manifest itself) and the cache_root if it is
+                empty afterwards.
                 """
 
                 try:
@@ -1605,6 +1655,13 @@
                                 except EnvironmentError, e:
                                         if e.errno != errno.ENOENT:
                                                 raise
+
+                        # Ensure cache dir is removed if the last cache file is
+                        # removed; we don't care if it fails.
+                        try:
+                                os.rmdir(cache_root)
+                        except:
+                                pass
                 except EnvironmentError, e:
                         if e.errno != errno.ENOENT:
                                 # Only raise error if failure wasn't due to
@@ -1658,7 +1715,7 @@
                 self.__load_cached_data("manifest.dircache")
                 return Manifest.get_directories(self, excludes)
 
-        def gen_actions_by_type(self, atype, excludes=EmptyI):
+        def gen_actions_by_type(self, atype, attr_match=None, excludes=EmptyI):
                 """ generate actions of the specified type;
                 use already in-memory stuff if already loaded,
                 otherwise use per-action types files"""
@@ -1666,7 +1723,7 @@
                 if self.loaded: #if already loaded, use in-memory cached version
                         # invoke subclass method to generate action by action
                         for a in Manifest.gen_actions_by_type(self, atype,
-                            excludes):
+                            attr_match=attr_match, excludes=excludes):
                                 yield a
                         return
 
@@ -1682,7 +1739,7 @@
                                 self.__load()
                         # invoke subclass method to generate action by action
                         for a in Manifest.gen_actions_by_type(self, atype,
-                            excludes):
+                            attr_match=attr_match, excludes=excludes):
                                 yield a
                         return
 
@@ -1700,13 +1757,23 @@
                 # avoid pointless I/O later.
                 mpath = self.__cache_path("manifest.%s" % atype)
 
+                if attr_match:
+                        attr_match = _compile_fnpats(attr_match)
+
                 try:
                         with open(mpath, "rb") as f:
                                 for l in f:
                                         a = actions.fromstr(l.rstrip())
-                                        if not excludes or \
-                                            a.include_this(excludes):
+                                        if (excludes and
+                                            not a.include_this(excludes)):
+                                                continue
+                                        # These conditions are split by
+                                        # performance.
+                                        if not attr_match:
                                                 yield a
+                                        elif _attr_matches(a, attr_match):
+                                                yield a
+
                 except EnvironmentError, e:
                         if e.errno == errno.ENOENT:
                                 self._absent_cache.append(atype)
@@ -1808,10 +1875,11 @@
                 return Manifest.search_dict(cache_path, excludes,
                     return_line=return_line)
 
-        def gen_actions(self, excludes=EmptyI):
+        def gen_actions(self, attr_match=None, excludes=EmptyI):
                 if not self.loaded:
                         self.__load()
-                return Manifest.gen_actions(self, excludes=excludes)
+                return Manifest.gen_actions(self, attr_match=attr_match,
+                    excludes=excludes)
 
         def __str__(self, excludes=EmptyI):
                 if not self.loaded:
@@ -1868,7 +1936,8 @@
                 # origin has been removed.  This is an optimization for
                 # uninstall.
                 return ManifestDifference([], [],
-                    [(a, None) for a in origin.gen_actions(origin_exclude)])
+                    [(a, None) for a in origin.gen_actions(excludes=
+                    origin_exclude)])
 
         @staticmethod
         def get_directories(excludes):
--- a/src/modules/misc.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/misc.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 
 """
 Misc utility functions used by the packaging system.
@@ -1353,7 +1353,10 @@
                 # option table contains functions for verification, ignore here
                 if type(entry) != tuple:
                         continue
-                opt, default, = entry
+                if len(entry) == 2:
+                        opt, default = entry
+                elif len(entry) == 3:
+                        opt, default, dummy_valid_args = entry
                 assert opt in opts_mapping
                 sopt, lopt = opts_mapping[opt]
                 # make sure an option was specified
@@ -1382,7 +1385,10 @@
                 for x in opts_table:
                         if type(x) != tuple:
                                 continue
-                        opt, default = x
+                        if len(x) == 2:
+                                opt, default = x
+                        elif len(x) == 3:
+                                opt, default, dummy_valid_args = x
                         if option == opt:
                                 return default
 
@@ -2567,3 +2573,71 @@
 
         return "/".join(sigdict.get(signal_number, ["Unnamed signal: %d" %
             signal_number]))
+
+def list_actions_by_attrs(actionlist, attrs, show_all=False,
+    remove_consec_dup_lines=False, last_res=None):
+        """Produces a list of n tuples (where n is the length of attrs)
+        containing the relevant information about the actions.
+
+        The "actionlist" parameter is a list of tuples which contain the fmri
+        of the package that's the source of the action, the action, and the
+        publisher the action's package came from. If the actionlist was
+        generated by searching, the last two pieces, "match" and "match_type"
+        contain information about why this action was selected.
+
+        The "attrs" parameter is a list of the attributes of the action that
+        should be displayed.
+
+        The "show_all" parameter determines whether an action that lacks one
+        or more of the desired attributes will be displayed or not.
+
+        The "remove_consec_dup_lines" parameter determines whether consecutive
+        duplicate lines should be removed from the results.
+
+        The "last_res" parameter is a seed to compare the first result against
+        for duplicate removal.
+        """
+
+        # Assert that if last_res is set, we should be removing duplicate
+        # lines.
+        assert remove_consec_dup_lines or not last_res
+        last_line = last_res
+        for pfmri, action, pub, match, match_type in actionlist:
+                line = []
+                for attr in attrs:
+                        if action and attr in action.attrs:
+                                a = action.attrs[attr]
+                        elif attr == "action.name":
+                                a = action.name
+                        elif attr == "action.key":
+                                a = action.attrs[action.key_attr]
+                        elif attr == "action.raw":
+                                a = action
+                        elif attr in ("hash", "action.hash"):
+                                a = getattr(action, "hash", "")
+                        elif attr == "pkg.name":
+                                a = pfmri.get_name()
+                        elif attr == "pkg.fmri":
+                                a = pfmri.get_fmri()
+                        elif attr == "pkg.shortfmri":
+                                a = pfmri.get_short_fmri()
+                        elif attr == "pkg.publisher":
+                                a = pfmri.get_publisher()
+                                if a is None:
+                                        a = pub
+                                        if a is None:
+                                                a = ""
+                        elif attr == "search.match":
+                                a = match
+                        elif attr == "search.match_type":
+                                a = match_type
+                        else:
+                                a = ""
+                        line.append(a)
+
+                if (line and [l for l in line if str(l) != ""] or show_all) \
+                    and (not remove_consec_dup_lines or last_line is None or
+                    last_line != line):
+                        last_line = line
+                        yield line
+
--- a/src/modules/portable/__init__.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/portable/__init__.py	Thu Mar 27 22:03:22 2014 +0530
@@ -19,7 +19,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 # The portable module provide access to methods that require operating system-
@@ -206,6 +206,22 @@
         mode of the file."""
         raise NotImplementedError
 
+def fsetattr(path, attrs):
+        """ Set system attributes for file specified by 'path'. 'attrs' can be
+        a list of verbose system attributes or a string containing a sequence of
+        short options."""
+        raise NotImplementedError
+
+def fgetattr(path, compact=False):
+        """ Get system attributes for file specified by 'path'. If 'compact' is
+        True, it returns a string of short attribute options, otherwise a list
+        of verbose attributes."""
+        raise NotImplementedError
+
+def get_sysattr_dict():
+        """ Returns a dictionary containing all supported system attributes. The
+        keys of the dict are verbose attributes, the values short options."""
+        raise NotImplementedError
 
 # File type constants
 # -------------------
--- a/src/modules/portable/os_sunos.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/portable/os_sunos.py	Thu Mar 27 22:03:22 2014 +0530
@@ -19,7 +19,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 """
@@ -39,6 +39,8 @@
 from pkg.portable import ELF, EXEC, PD_LOCAL_PATH, UNFOUND, SMF_MANIFEST
 
 import pkg.arch as arch
+from pkg.sysattr import fgetattr, fsetattr
+from pkg.sysattr import get_attr_dict as get_sysattr_dict
 
 def get_isainfo():
         return arch.get_isainfo()
@@ -85,4 +87,3 @@
                                 yield joined_ft
                 else:
                         yield joined_ft
-                
--- a/src/modules/server/repository.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/server/repository.py	Thu Mar 27 22:03:22 2014 +0530
@@ -322,8 +322,9 @@
         intended only for use by the Repository class.
         """
 
-        def __init__(self, file_layout=None, file_root=None, log_obj=None,
-            mirror=False, pub=None, read_only=False, root=None,
+        def __init__(self, allow_invalid=False, file_layout=None,
+            file_root=None, log_obj=None, mirror=False, pub=None,
+            read_only=False, root=None,
             sort_file_max_size=indexer.SORT_FILE_MAX_SIZE, writable_root=None):
                 """Prepare the repository for use."""
 
@@ -381,7 +382,7 @@
                 # Initialize.
                 self.__lock_rstore(blocking=True)
                 try:
-                        self.__init_state()
+                        self.__init_state(allow_invalid=allow_invalid)
                 finally:
                         self.__unlock_rstore()
 
@@ -631,6 +632,10 @@
                                 self.__lock.release()
                                 raise apx.ReadOnlyFileSystemException(
                                     e.filename)
+                        if e.errno == errno.EINVAL:
+                                self.__lock.release()
+                                raise apx.InvalidLockException(
+                                    e.filename)
 
                         self.__lock.release()
                         raise
@@ -796,7 +801,7 @@
                         self.__index_log("Search Available")
                 self.__search_available = True
 
-        def __init_state(self):
+        def __init_state(self, allow_invalid=False):
                 """Private version; caller responsible for repository
                 locking."""
 
@@ -805,7 +810,7 @@
                 self.__catalog = None
 
                 # Determine location and version of catalog data.
-                self.__init_catalog()
+                self.__init_catalog(allow_invalid=allow_invalid)
 
                 # Prepare search for use (ensuring most current data is loaded).
                 self.reset_search()
@@ -825,12 +830,17 @@
 
                 self.__check_search()
 
-        def __init_catalog(self):
+        def __init_catalog(self, allow_invalid=False):
                 """Private function to determine version and location of
                 catalog data.  This will also perform any necessary
                 transformations of existing catalog data if the repository
                 is read-only and a writable_root has been provided.
-                """
+
+                'allow_invalid', if True, will assume the catalog is version 1
+                and use an empty, in-memory catalog if the existing, on-disk
+                catalog is invalid (i.e. corrupted).  This assumes that the
+                caller intends to use the repository as part of a rebuild
+                operation."""
 
                 # Reset versions to default.
                 self.catalog_version = -1
@@ -944,8 +954,22 @@
                                 self.__set_catalog_root(v1_cat.meta_root)
                         else:
                                 self.catalog_version = 0
-                elif self.catalog.exists:
-                        self.catalog_version = 1
+                else:
+                        try:
+                                if self.catalog.exists:
+                                        self.catalog_version = 1
+                        except apx.CatalogError, e:
+                                if not allow_invalid:
+                                        raise
+
+                                # Catalog is invalid, but consumer wants to
+                                # proceed; assume version 1.  This will allow
+                                # pkgrepo rebuild, etc.
+                                self.__log(str(e))
+                                self.__catalog = catalog.Catalog(
+                                    read_only=self.read_only)
+                                self.catalog_verison = 1
+                                return
 
                 if self.catalog_version >= 1 and not self.publisher:
                         # If there's no information available to determine
@@ -2546,9 +2570,9 @@
         """A Repository object is a representation of data contained within a
         pkg(5) repository and an interface to manipulate it."""
 
-        def __init__(self, cfgpathname=None, create=False, file_root=None,
-            log_obj=None, mirror=False, properties=misc.EmptyDict,
-            read_only=False, root=None,
+        def __init__(self, allow_invalid=False, cfgpathname=None, create=False,
+            file_root=None, log_obj=None, mirror=False,
+            properties=misc.EmptyDict, read_only=False, root=None,
             sort_file_max_size=indexer.SORT_FILE_MAX_SIZE, writable_root=None):
                 """Prepare the repository for use."""
 
@@ -2588,11 +2612,13 @@
 
                 self.__lock_repository()
                 try:
-                        self.__init_state(create=create, properties=properties)
+                        self.__init_state(allow_invalid=allow_invalid,
+                            create=create, properties=properties)
                 finally:
                         self.__unlock_repository()
 
-        def __init_format(self, create=False, properties=misc.EmptyI):
+        def __init_format(self, allow_invalid=False, create=False,
+            properties=misc.EmptyI):
                 """Private helper function to determine repository format and
                 validity.
                 """
@@ -2725,18 +2751,21 @@
                         # ...and then one for each publisher if any are known.
                         if self.pub_root and os.path.exists(self.pub_root):
                                 for pub in os.listdir(self.pub_root):
-                                        self.__new_rstore(pub)
+                                        self.__new_rstore(pub,
+                                            allow_invalid=allow_invalid)
 
                         # If a default publisher is set, ensure that a storage
                         # object always exists for it.
                         if def_pub and def_pub not in self.__rstores:
-                                self.__new_rstore(def_pub)
+                                self.__new_rstore(def_pub,
+                                    allow_invalid=allow_invalid)
                 else:
                         # For older repository versions, there is only one
                         # repository store, and it might have an associated
                         # publisher prefix.  (This might be in a mix of V0 and
                         # V1 layouts.)
-                        rstore = _RepoStore(file_root=self.file_root,
+                        rstore = _RepoStore(allow_invalid=allow_invalid,
+                            file_root=self.file_root,
                             log_obj=self.log_obj, pub=def_pub,
                             mirror=self.mirror,
                             read_only=self.read_only,
@@ -2776,14 +2805,16 @@
                                         # matter.
                                         continue
 
-        def __init_state(self, create=False, properties=misc.EmptyDict):
+        def __init_state(self, allow_invalid=False, create=False,
+            properties=misc.EmptyDict):
                 """Private helper function to initialize state."""
 
                 # Discard current repository storage state data.
                 self.__rstores = {}
 
                 # Determine format, configuration location, and validity.
-                self.__init_format(create=create, properties=properties)
+                self.__init_format(allow_invalid=allow_invalid, create=create,
+                    properties=properties)
 
                 # Ensure default configuration is written.
                 self.__write_config()
@@ -2869,7 +2900,7 @@
                             errno.EROFS):
                                 raise
 
-        def __new_rstore(self, pub):
+        def __new_rstore(self, pub, allow_invalid=False):
                 assert pub
                 if pub in self.__rstores:
                         raise RepositoryDuplicatePublisher(pub)
@@ -2901,7 +2932,8 @@
                         # might use a mix of layouts.
                         file_layout = layout.V1Layout()
 
-                rstore = _RepoStore(file_layout=file_layout, file_root=froot,
+                rstore = _RepoStore(allow_invalid=allow_invalid,
+                    file_layout=file_layout, file_root=froot,
                     log_obj=self.log_obj, mirror=self.mirror, pub=pub,
                     read_only=self.read_only, root=root,
                     sort_file_max_size=self.__sort_file_max_size,
--- a/src/modules/smf.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/modules/smf.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 # This module provides a basic interface to smf.
@@ -43,6 +43,13 @@
 SMF_SVC_TMP_ENABLED  = 4
 SMF_SVC_ENABLED      = 5
 
+EXIT_OK              = 0
+EXIT_FATAL           = 1
+EXIT_INVALID_OPTION  = 2
+EXIT_INSTANCE        = 3
+EXIT_DEPENDENCY      = 4
+EXIT_TIMEOUT         = 5
+
 svcprop_path = "/usr/bin/svcprop"
 svcadm_path  = "/usr/sbin/svcadm"
 svcs_path = "/usr/bin/svcs"
@@ -168,43 +175,65 @@
         buf = buf[0].rstrip("\n")
         return buf
 
-def enable(fmris, temporary=False):
+def enable(fmris, temporary=False, sync_timeout=0):
         if not fmris:
                 return
         if isinstance(fmris, basestring):
                 fmris = (fmris,)
         args = [svcadm_path, "enable"]
+        if sync_timeout:
+                args.append("-s")
+                if sync_timeout != -1:
+                        args.append("-T %d" % sync_timeout)
         if temporary:
                 args.append("-t")
-        __call(tuple(args) + fmris)
+        # fmris could be a list so explicit cast is necessary
+        __call(tuple(args) + tuple(fmris))
 
-def disable(fmris, temporary=False):
+def disable(fmris, temporary=False, sync_timeout=0):
         if not fmris:
                 return
         if isinstance(fmris, basestring):
                 fmris = (fmris,)
         args = [svcadm_path, "disable", "-s"]
+        if sync_timeout > 0:
+                args.append("-T %d" % sync_timeout)
         if temporary:
                 args.append("-t")
-        __call(tuple(args) + fmris)
+        # fmris could be a list so explicit cast is necessary
+        __call(tuple(args) + tuple(fmris))
 
 def mark(state, fmris):
         if not fmris:
                 return
         if isinstance(fmris, basestring):
                 fmris = (fmris,)
-        __call((svcadm_path, "mark", state) + tuple(fmris))
+        args = [svcadm_path, "mark", state]
+        # fmris could be a list so explicit cast is necessary
+        __call(tuple(args) + tuple(fmris))
 
-def refresh(fmris):
+def refresh(fmris, sync_timeout=0):
         if not fmris:
                 return
         if isinstance(fmris, basestring):
                 fmris = (fmris,)
-        __call((svcadm_path, "refresh") + tuple(fmris))
+        args = [svcadm_path, "refresh"]
+        if sync_timeout:
+                args.append("-s")
+                if sync_timeout != -1:
+                        args.append("-T %d" % sync_timeout)
+        # fmris could be a list so explicit cast is necessary
+        __call(tuple(args) + tuple(fmris))
 
-def restart(fmris):
+def restart(fmris, sync_timeout=0):
         if not fmris:
                 return
         if isinstance(fmris, basestring):
                 fmris = (fmris,)
-        __call((svcadm_path, "restart") + tuple(fmris))
+        args = [svcadm_path, "restart"]
+        if sync_timeout:
+                args.append("-s")
+                if sync_timeout != -1:
+                        args.append("-T %d" % sync_timeout)
+        # fmris could be a list so explicit cast is necessary
+        __call(tuple(args) + tuple(fmris))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/modules/sysattr.c	Thu Mar 27 22:03:22 2014 +0530
@@ -0,0 +1,364 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ */
+
+#include <attr.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <sys/nvpair.h>
+
+#include <Python.h>
+
+/*
+ * Test if a sys attr is not in the list of ignored attributes.
+ */
+
+static bool
+is_supported(int attr)
+{
+	int ignore[] = {F_OWNERSID, F_GROUPSID, F_AV_SCANSTAMP,
+	    F_OPAQUE, F_CRTIME, F_FSID, F_GEN, F_REPARSE};
+
+	for (int i = 0; i < (sizeof (ignore) / sizeof (int)); i++)
+		if (ignore[i] == attr)
+			return (false);
+	return (true);
+}
+
+/*
+ * Decref a list and all included elements.
+ */
+
+static void
+clear_list(PyObject *list)
+{
+	PyObject *p;
+	Py_ssize_t size;
+
+	if ((size = PyList_Size(list)) == 0) {
+		Py_CLEAR(list);
+		return;
+	}
+
+	for (Py_ssize_t i = 0; i < size; i++) {
+		p = PyList_GetItem(list, i);
+		Py_CLEAR(p);
+	}
+	Py_CLEAR(list);
+}
+
+/*
+ * Get a dictionary containing all supported system attributes in the form:
+ *
+ *   { <verbose_name>: <compact_option>,
+ *     ...
+ *   }
+ */
+
+static char py_get_attr_dict_doc[] = "\n\
+Get a dictionary containing all supported system attributes.\n\
+\n\
+@return: dictionary of supported system attribute in the form:\n\
+    { <verbose_name>: <compact_option>,\n\
+        ... \n\
+    }\n\
+";
+
+/*ARGSUSED*/
+static PyObject *
+py_get_attr_dict(PyObject *self, PyObject *args)
+{
+	PyObject *sys_attrs;
+
+	if ((sys_attrs = PyDict_New()) == NULL)
+		return (NULL);
+
+	for (int i = 0; i < F_ATTR_ALL; i++) {
+		if (!is_supported(i))
+			continue;
+
+		PyObject *str;
+		if ((str = PyString_FromString(
+		    attr_to_option(i))) == NULL) {
+			PyDict_Clear(sys_attrs);
+			Py_CLEAR(sys_attrs);
+			return (NULL);
+		}
+		if (PyDict_SetItemString(
+		    sys_attrs, attr_to_name(i), str) != 0) {
+			PyDict_Clear(sys_attrs);
+			Py_CLEAR(sys_attrs);
+			return (NULL);
+		}
+	}
+
+	return (sys_attrs);
+}
+
+/*
+ * Set system attributes for a file specified by 'path'. The system attributes
+ * can either be passed as a list of verbose attribute names or a string that
+ * consists of a sequence of compact attribute options.
+ *
+ * Raises ValueError for invalid system attributes or OSError (with errno set)
+ * if any of the library calls fail.
+ *
+ * Input examples:
+ *   verbose attributes example: ['hidden', 'archive', 'sensitive', ... ]
+ *
+ *   compact attributes example: 'HAT'
+ *
+ */
+
+static char py_fsetattr_doc[] = "\n\
+Set system attributes for a file. The system attributes can either be passed \n\
+as a list of verbose attribute names or a string that consists of a sequence \n\
+of compact attribute options.\n\
+\n\
+@param path: path of file to be modified\n\
+@param attrs: attributes to set\n\
+\n\
+@return: None\n\
+";
+
+/*ARGSUSED*/
+static PyObject *
+py_fsetattr(PyObject *self, PyObject *args)
+{
+	char *path;
+	bool compact = false;
+	int f;
+	int sys_attr = -1;
+	nvlist_t *request;
+	PyObject *attrs;
+	PyObject *attrs_iter;
+	PyObject *attr = NULL;
+
+	if (PyArg_ParseTuple(args, "sO:fsetattr", &path, &attrs) == 0) {
+		return (NULL);
+	}
+
+	if (nvlist_alloc(&request, NV_UNIQUE_NAME, 0) != 0) {
+		PyErr_SetFromErrno(PyExc_OSError);
+		return (NULL);
+	}
+
+	/*
+	 * A single string indicates system attributes are passed in compact
+	 * form (e.g. AHi), verbose attributes are read as a list of strings.
+	 */
+	if (PyString_Check(attrs)) {
+		compact = true;
+	}
+
+	if ((attrs_iter = PyObject_GetIter(attrs)) == NULL)
+		goto out;
+
+	while (attr = PyIter_Next(attrs_iter)) {
+		char *attr_str = PyString_AsString(attr);
+		if (attr_str == NULL) {
+			goto out;
+		}
+
+		if (compact)
+			sys_attr = option_to_attr(attr_str);
+		else
+			sys_attr = name_to_attr(attr_str);
+
+		if (sys_attr == F_ATTR_INVAL) {
+			PyObject *tstr = compact ?
+			    PyString_FromString(" is not a valid compact "
+			    "system attribute") :
+			    PyString_FromString(" is not a valid verbose "
+			    "system attribute");
+			PyString_ConcatAndDel(&attr, tstr);
+			PyErr_SetObject(PyExc_ValueError, attr);
+			goto out;
+		}
+
+		if (!is_supported(sys_attr)) {
+			PyObject *tstr = compact ?
+			    PyString_FromString(" is not a supported compact "
+			    "system attribute") :
+			    PyString_FromString(" is not a supported verbose "
+			    "system attribute");
+			PyString_ConcatAndDel(&attr, tstr);
+			PyErr_SetObject(PyExc_ValueError, attr);
+			goto out;
+		}
+
+		if (nvlist_add_boolean_value(request, attr_to_name(sys_attr),
+		    1) != 0) {
+			PyErr_SetFromErrno(PyExc_OSError);
+			goto out;
+		}
+		Py_CLEAR(attr);
+	}
+	Py_CLEAR(attrs_iter);
+
+	if ((f = open(path, O_RDONLY)) == -1) {
+		PyErr_SetFromErrno(PyExc_OSError);
+		goto out;
+	}
+
+	if (fsetattr(f, XATTR_VIEW_READWRITE, request)) {
+		PyErr_SetFromErrno(PyExc_OSError);
+		(void) close(f);
+		goto out;
+	}
+	(void) close(f);
+	nvlist_free(request);
+
+	Py_RETURN_NONE;
+
+out:
+	nvlist_free(request);
+	Py_XDECREF(attrs_iter);
+	Py_XDECREF(attr);
+	return (NULL);
+
+}
+
+/*
+ * Get the list of set system attributes for file specified by 'path'.
+ * Returns a list of verbose attributes by default. If 'compact' is True,
+ * return a string consisting of compact option identifiers.
+ *
+ */
+
+static char py_fgetattr_doc[] = "\n\
+Get the list of set system attributes for a file.\n\
+\n\
+@param path: path of file\n\
+@param compact: if true, return system attributes in compact form\n\
+\n\
+@return: list of verbose system attributes or string sequence of compact\n\
+attributes\n\
+";
+
+/*ARGSUSED*/
+static PyObject *
+py_fgetattr(PyObject *self, PyObject *args, PyObject *kwds)
+{
+	char cattrs[F_ATTR_ALL];
+	char *path;
+	bool compact = false;
+	int f;
+	boolean_t bval;
+	nvlist_t *response;
+	nvpair_t *pair = NULL;
+	PyObject *attr_list = NULL;
+	PyObject *compact_attrs = NULL;
+
+	/* Python based arguments to this function */
+	static char *kwlist[] = {"path", "compact", NULL};
+
+	if (PyArg_ParseTupleAndKeywords(args, kwds, "s|O:fgetattr", kwlist,
+	    &path, &compact_attrs) == 0) {
+		return (NULL);
+	}
+
+	/* compact keyword is NULL if not provided. */
+	compact = compact_attrs == Py_True ? true : false;
+	Py_XDECREF(compact_attrs);
+
+	if ((f = open(path, O_RDONLY)) == -1) {
+		PyErr_SetFromErrno(PyExc_OSError);
+		return (NULL);
+	}
+
+	if (fgetattr(f, XATTR_VIEW_READWRITE, &response)) {
+		PyErr_SetFromErrno(PyExc_OSError);
+		(void) close(f);
+		return (NULL);
+	}
+	(void) close(f);
+
+	if (!compact) {
+		if ((attr_list = PyList_New(0)) == NULL)
+			return (NULL);
+	}
+
+	int count = 0;
+	while (pair = nvlist_next_nvpair(response, pair)) {
+		char *name = nvpair_name(pair);
+		/* we ignore all non-boolean attrs */
+		if (nvpair_type(pair) != DATA_TYPE_BOOLEAN_VALUE)
+			continue;
+
+		if (nvpair_value_boolean_value(pair, &bval) != 0) {
+			PyErr_SetString(PyExc_OSError,
+			    "could not read attr value");
+			clear_list(attr_list);
+			return (NULL);
+		}
+
+		if (bval) {
+			if (compact) {
+				if (count >= F_ATTR_ALL) {
+					clear_list(attr_list);
+					PyErr_SetString(PyExc_OSError, "Too "
+					    "many system attributes found");
+					return (NULL);
+				}
+				cattrs[count++] = attr_to_option(name_to_attr(
+				    name))[0];
+			} else {
+				PyObject *str;
+				if ((str = PyString_FromString(name)) == NULL) {
+					clear_list(attr_list);
+					return (NULL);
+				}
+				if (PyList_Append(attr_list, str) != 0) {
+					Py_CLEAR(str);
+					clear_list(attr_list);
+					return (NULL);
+				}
+				Py_CLEAR(str);
+			}
+		}
+	}
+	nvlist_free(response);
+
+	if (compact) {
+		cattrs[count] = '\0';
+		return (PyString_FromString(cattrs));
+	}
+
+	return (attr_list);
+}
+
+static PyMethodDef methods[] = {
+	{ "fsetattr", (PyCFunction)py_fsetattr, METH_VARARGS, py_fsetattr_doc },
+	{ "fgetattr", (PyCFunction)py_fgetattr, METH_VARARGS | METH_KEYWORDS,
+	    py_fgetattr_doc },
+	{ "get_attr_dict", (PyCFunction)py_get_attr_dict, METH_NOARGS,
+	    py_get_attr_dict_doc },
+	{ NULL, NULL, 0, NULL }
+};
+
+PyMODINIT_FUNC
+initsysattr() {
+	(void) Py_InitModule("sysattr", methods);
+}
--- a/src/pkg/manifests/package:pkg.p5m	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/pkg/manifests/package:pkg.p5m	Thu Mar 27 22:03:22 2014 +0530
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri value=pkg:/package/pkg@$(PKGVERS)
@@ -34,6 +34,7 @@
 file path=$(PYDIRVP)/pkg-0.1-py2.6.egg-info
 dir  path=$(PYDIRVP)/pkg/64
 file path=$(PYDIRVP)/pkg/64/_varcet.so
+file path=$(PYDIRVP)/pkg/64/sysattr.so
 file path=$(PYDIRVP)/pkg/__init__.py
 file path=$(PYDIRVP)/pkg/_varcet.so
 dir  path=$(PYDIRVP)/pkg/actions
@@ -194,6 +195,7 @@
 file path=$(PYDIRVP)/pkg/server/transaction.py
 file path=$(PYDIRVP)/pkg/smf.py
 file path=$(PYDIRVP)/pkg/solver.so
+file path=$(PYDIRVP)/pkg/sysattr.so
 file path=$(PYDIRVP)/pkg/syscallat.so
 file path=$(PYDIRVP)/pkg/sysvpkg.py
 file path=$(PYDIRVP)/pkg/updatelog.py
--- a/src/pkgdep.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/pkgdep.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import errno
@@ -43,7 +43,7 @@
 import pkg.publish.dependencies as dependencies
 from pkg.misc import msg, emsg, PipeError
 
-CLIENT_API_VERSION = 75
+CLIENT_API_VERSION = 78
 PKG_CLIENT_NAME = "pkgdepend"
 
 DEFAULT_SUFFIX = ".res"
--- a/src/pkgrepo.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/pkgrepo.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 PKG_CLIENT_NAME = "pkgrepo"
@@ -33,7 +33,7 @@
 EXIT_PARTIAL = 3
 
 # listing constants
-LISTING_FORMATS = ("json", "json-formatted", "tsv")
+LISTING_FORMATS = ("default", "json", "json-formatted", "tsv")
 
 # globals
 tmpdirs = []
@@ -53,6 +53,7 @@
 import textwrap
 import traceback
 import warnings
+import itertools
 
 from pkg.client import global_settings
 from pkg.client.debugvalues import DebugValues
@@ -147,6 +148,9 @@
      pkgrepo list [-F format] [-H] [-p publisher ...] -s repo_uri_or_path 
          [--key ssl_key ... --cert ssl_cert ...] [pkg_fmri_pattern ...]
 
+     pkgrepo contents [-m] [-t action_type ...] -s repo_uri_or_path
+         [--key ssl_key ... --cert ssl_cert ...] [pkg_fmri_pattern ...]
+
      pkgrepo rebuild [-p publisher ...] -s repo_uri_or_path [--key ssl_key ...
          --cert ssl_cert ...] [--no-catalog] [--no-index]
 
@@ -173,6 +177,7 @@
 
         sys.exit(retcode)
 
+
 class OptionError(Exception):
         """Option exception. """
 
@@ -250,8 +255,11 @@
         return EXIT_OK
 
 
-def get_repo(conf, read_only=True, subcommand=None):
-        """Return the repository object for current program configuration."""
+def get_repo(conf, allow_invalid=False, read_only=True, subcommand=None):
+        """Return the repository object for current program configuration.
+
+        'allow_invalid' specifies whether potentially corrupt repositories are
+        allowed; should only be True if performing a rebuild operation."""
 
         repo_uri = conf["repo_uri"]
         if repo_uri.scheme != "file":
@@ -262,7 +270,8 @@
         if not path:
                 # Bad URI?
                 raise sr.RepositoryInvalidError(str(repo_uri))
-        return sr.Repository(read_only=read_only, root=path)
+        return sr.Repository(allow_invalid=allow_invalid, read_only=read_only,
+            root=path)
 
 
 def setup_transport(conf, subcommand=None, verbose=False, ssl_key=None,
@@ -271,6 +280,7 @@
         if not repo_uri:
                 usage(_("No repository location specified."), cmd=subcommand)
 
+        global tmpdirs
         temp_root = misc.config_temp_root()
 
         tmp_dir = tempfile.mkdtemp(dir=temp_root)
@@ -286,6 +296,7 @@
         xport, xport_cfg = transport.setup_transport()
         xport_cfg.add_cache(cache_dir, readonly=False)
         xport_cfg.incoming_root = incoming_dir
+        xport_cfg.pkg_root = tmp_dir
 
         # Configure target publisher.
         src_pub = transport.setup_publisher(str(repo_uri), "target", xport,
@@ -487,13 +498,11 @@
         opts, pargs = getopt.getopt(args, "F:Hp:s:", ["key=", "cert="])
         for opt, arg in opts:
                 if opt == "-F":
+                        if arg not in LISTING_FORMATS:
+                                raise apx.InvalidOptionError(
+                                    apx.InvalidOptionError.ARG_INVALID,
+                                    [arg, opt])
                         out_format = arg
-                        if out_format not in LISTING_FORMATS:
-                                usage(_("Unrecognized format %(format)s."
-                                    " Supported formats: %(valid)s") % \
-                                    { "format": out_format,
-                                    "valid": LISTING_FORMATS }, cmd=subcommand)
-                                return EXIT_OOPS
                 elif opt == "-H":
                         omit_headers = True
                 elif opt == "-p":
@@ -757,11 +766,9 @@
         for opt, arg in opts:
                 if opt == "-F":
                         if arg not in LISTING_FORMATS:
-                                usage(_("Unrecognized format %(format)s."
-                                    " Supported formats: %(valid)s") % \
-                                    { "format": arg,
-                                    "valid": LISTING_FORMATS }, cmd=subcommand)
-                                return EXIT_OOPS
+                                raise apx.InvalidOptionError(
+                                    apx.InvalidOptionError.ARG_INVALID,
+                                    [arg, opt])
                         out_format = arg
                 elif opt == "-H":
                         omit_headers = True
@@ -863,13 +870,11 @@
         opts, pargs = getopt.getopt(args, "F:Hp:s:", ["key=", "cert="])
         for opt, arg in opts:
                 if opt == "-F":
+                        if arg not in LISTING_FORMATS:
+                                raise apx.InvalidOptionError(
+                                    apx.InvalidOptionError.ARG_INVALID,
+                                    [arg, opt])
                         out_format = arg
-                        if out_format not in LISTING_FORMATS:
-                                usage(_("Unrecognized format %(format)s."
-                                    " Supported formats: %(valid)s") %
-                                    { "format": out_format,
-                                    "valid": LISTING_FORMATS }, cmd=subcommand)
-                                return EXIT_OOPS
                 elif opt == "-H":
                         omit_headers = True
                 elif opt == "-p":
@@ -894,29 +899,7 @@
         if rval == EXIT_OOPS:
                 return rval
 
-        temp_root = misc.config_temp_root()
-        progtrack = get_tracker()
-        progtrack.set_purpose(progtrack.PURPOSE_LISTING)
-
-        progtrack.refresh_start(pub_cnt=len(pub_data), full_refresh=True,
-            target_catalog=False)
-
-        for pub in pub_data:
-                progtrack.refresh_start_pub(pub)
-                meta_root = tempfile.mkdtemp(dir=temp_root)
-                tmpdirs.append(meta_root)
-                pub.meta_root = meta_root
-                pub.transport = xport
-
-                try:
-                        pub.refresh(True, True, progtrack=progtrack)
-                except apx.TransportError:
-                        # Assume that a catalog doesn't exist for the target
-                        # publisher and drive on.
-                        pass
-                progtrack.refresh_end_pub(pub)
-
-        progtrack.refresh_done()
+        refresh_pub(pub_data, xport)
         listed = {}
         matched = set()
         unmatched = set()
@@ -1013,6 +996,207 @@
         return EXIT_OK
 
 
+def refresh_pub(pub_data, xport):
+        """A helper function to refresh all specified publishers."""
+
+        global tmpdirs
+        temp_root = misc.config_temp_root()
+        progtrack = get_tracker()
+        progtrack.set_purpose(progtrack.PURPOSE_LISTING)
+
+        progtrack.refresh_start(pub_cnt=len(pub_data), full_refresh=True,
+            target_catalog=False)
+
+        for pub in pub_data:
+                progtrack.refresh_start_pub(pub)
+                meta_root = tempfile.mkdtemp(dir=temp_root)
+                tmpdirs.append(meta_root)
+                pub.meta_root = meta_root
+                pub.transport = xport
+
+                try:
+                        pub.refresh(True, True, progtrack=progtrack)
+                except apx.TransportError:
+                        # Assume that a catalog doesn't exist for the target
+                        # publisher and drive on.
+                        pass
+                progtrack.refresh_end_pub(pub)
+
+        progtrack.refresh_done()
+
+
+def subcmd_contents(conf, args):
+        """List package contents."""
+
+	subcommand = "contents"
+	display_raw = False
+	pubs = set()
+	key = None
+	cert = None
+        attrs = []
+        action_types = []
+
+	opts, pargs = getopt.getopt(args, "ms:t:", ["key=", "cert="])
+	for opt, arg in opts:
+		if opt == "-s":
+                        conf["repo_uri"] = parse_uri(arg)
+		elif opt == "-m":
+			display_raw = True
+		elif opt == "-t":
+                        action_types.extend(arg.split(","))
+		elif opt == "--key":
+			key = arg
+		elif opt == "--cert":
+			cert = arg
+
+        # Setup transport so configuration can be retrieved.
+        if not conf.get("repo_uri", None):
+                usage(_("A package repository location must be provided "
+                    "using -s."), cmd=subcommand)
+
+        xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand,
+            ssl_key=key, ssl_cert=cert)
+
+        rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport,
+            xpub, use_transport=True)
+        if rval == EXIT_OOPS:
+                return rval
+
+        # Default output prints out the raw manifest. The -m option is implicit 
+        # for now and supported to make the interface equivalent to pkg contents.
+        if not attrs or display_raw:
+                attrs = ["action.raw"]
+
+        refresh_pub(pub_data, xport)
+        listed = False
+        matched = set()
+        unmatched = set()
+        manifests = []
+
+        for pub in pub_data:
+                cat = pub.catalog
+                for f, states, attr in cat.gen_packages(matched=matched,
+                        patterns=pargs, pubs=[pub.prefix],
+                        unmatched=unmatched, return_fmris=True):
+                        if not listed:
+                                listed = True
+                        manifests.append(xport.get_manifest(f))
+                unmatched.difference_update(matched)
+
+        # Build a generator expression based on whether specific action types
+        # were provided.
+        if action_types:
+                # If query is limited to specific action types, use the more
+                # efficient type-based generation mechanism.
+                gen_expr = (
+                    (m.fmri, a, None, None, None)
+                    for m in manifests
+                    for a in m.gen_actions_by_types(action_types)
+                )
+        else:
+                gen_expr = (
+                    (m.fmri, a, None, None, None)
+                    for m in manifests
+                    for a in m.gen_actions()
+                )
+
+        # Determine if the query returned any results by "peeking" at the first
+        # value returned from the generator expression.
+        try:
+                got = gen_expr.next()
+        except StopIteration:
+                got = None
+                actionlist = []
+
+        if got:
+                actionlist = itertools.chain([got], gen_expr)
+
+        rval = EXIT_OK
+        if action_types and manifests and not got:
+                logger.error(_(gettext.ngettext("""\
+pkgrepo: contents: This package contains no actions with the types specified
+using the -t option""", """\
+pkgrepo: contents: These packages contain no actions with the types specified
+using the -t option.""", len(pargs))))
+                rval = EXIT_OOPS
+
+        if manifests and rval == EXIT_OK:
+                lines = misc.list_actions_by_attrs(actionlist, attrs)
+                for line in lines:
+                        text = ("%s" % tuple(line)).rstrip()
+                        if not text:
+                               continue
+                        msg(text)
+
+        if unmatched:
+                if manifests:
+                        logger.error("")
+                logger.error(_("""\
+pkgrepo: contents: no packages matching the following patterns you specified
+were found in the repository."""))
+                logger.error("")
+                for p in unmatched:
+                        logger.error("        %s" % p)
+                rval = EXIT_OOPS
+
+        return rval
+
+
+def __rebuild_local(subcommand, conf, pubs, build_catalog, build_index):
+        """In an attempt to allow operations on potentially corrupt
+        repositories, 'local' repositories (filesystem-basd ones) are handled
+        separately."""
+
+        repo = get_repo(conf, allow_invalid=build_catalog, read_only=False,
+            subcommand=subcommand)
+
+        rpubs = set(repo.publishers)
+        if not pubs:
+                found = rpubs
+        else:
+                found = rpubs & pubs
+        notfound = pubs - found
+
+        rval = EXIT_OK
+        if found and notfound:
+                rval = EXIT_PARTIAL
+        elif pubs and not found:
+                error(_("no matching publishers found"), cmd=subcommand)
+                return EXIT_OOPS
+
+        logger.info("Initiating repository rebuild.")
+        for pfx in found:
+                repo.rebuild(build_catalog=build_catalog,
+                    build_index=build_index, pub=pfx)
+
+        return rval
+
+
+def __rebuild_remote(subcommand, conf, pubs, key, cert, build_catalog,
+    build_index):
+        def do_rebuild(xport, xpub):
+                if build_catalog and build_index:
+                        xport.publish_rebuild(xpub)
+                elif build_catalog:
+                        xport.publish_rebuild_packages(xpub)
+                elif build_index:
+                        xport.publish_rebuild_indexes(xpub)
+
+        xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand,
+            ssl_key=key, ssl_cert=cert)
+        rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport,
+            xpub)
+        if rval == EXIT_OOPS:
+                return rval
+
+        logger.info("Initiating repository rebuild.")
+        for pfx in found:
+                xpub.prefix = pfx
+                do_rebuild(xport, xpub)
+
+        return rval
+
+
 def subcmd_rebuild(conf, args):
         """Rebuild the repository's catalog and index data (as permitted)."""
 
@@ -1054,27 +1238,12 @@
                 usage(_("A package repository location must be provided "
                     "using -s."), cmd=subcommand)
 
-        def do_rebuild(xport, xpub):
-                if build_catalog and build_index:
-                        xport.publish_rebuild(xpub)
-                elif build_catalog:
-                        xport.publish_rebuild_packages(xpub)
-                elif build_index:
-                        xport.publish_rebuild_indexes(xpub)
+        if conf["repo_uri"].scheme == "file":
+                return __rebuild_local(subcommand, conf, pubs, build_catalog,
+                    build_index)
 
-        xport, xpub, tmp_dir = setup_transport(conf, subcommand=subcommand,
-            ssl_key=key, ssl_cert=cert)
-        rval, found, pub_data = _get_matching_pubs(subcommand, pubs, xport,
-            xpub)
-        if rval == EXIT_OOPS:
-                return rval
-
-        logger.info("Initiating repository rebuild.")
-        for pfx in found:
-                xpub.prefix = pfx
-                do_rebuild(xport, xpub)
-
-        return rval
+        return __rebuild_remote(subcommand, conf, pubs, key, cert,
+            build_catalog, build_index)
 
 
 def subcmd_refresh(conf, args):
@@ -1659,6 +1828,10 @@
         except apx.BadRepositoryURI, __e:
                 error(str(__e))
                 __ret = EXIT_BADOPT
+        except apx.InvalidOptionError, __e:
+                error("%s Supported formats: %s" %
+                    (str(__e), LISTING_FORMATS))
+                __ret = EXIT_BADOPT
         except (apx.ApiException, sr.RepositoryError), __e:
                 error(str(__e))
                 __ret = EXIT_OOPS
--- a/src/pull.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/pull.py	Thu Mar 27 22:03:22 2014 +0530
@@ -94,13 +94,13 @@
 
         msg(_("""\
 Usage:
-        pkgrecv [-s src_uri] [-a] [-d (path|dest_uri)] [-c cache_dir]
-            [-kr] [-m match] [-n] [--raw] [--key src_key --cert src_cert]
+        pkgrecv [-aknrv] [-s src_uri] [-d (path|dest_uri)] [-c cache_dir]
+            [-m match] [--raw] [--key src_key --cert src_cert]
             [--dkey dest_key --dcert dest_cert]
             (fmri|pattern) ...
         pkgrecv [-s src_repo_uri] --newest
-        pkgrecv [-s src_repo_uri] [-d path] [-p publisher ...]
-            [--key src_key --cert src_cert] [-n] --clone
+        pkgrecv [-nv] [-s src_repo_uri] [-d path] [-p publisher ...]
+            [--key src_key --cert src_cert] --clone
 
 Options:
         -a              Store the retrieved package data in a pkg(5) archive
@@ -134,6 +134,8 @@
                                 includes only the latest version of each package
 
         -n              Perform a trial run with no changes made.
+        
+        -v              Display verbose output.
 
         -p publisher    Only clone the given publisher. Can be specified
                         multiple times. Only valid with --clone.
@@ -391,6 +393,7 @@
         dcert = None
         publishers = []
         clone = False
+        verbose = False
 
         temp_root = misc.config_temp_root()
 
@@ -402,7 +405,7 @@
         src_uri = os.environ.get("PKG_SRC", None)
 
         try:
-                opts, pargs = getopt.getopt(sys.argv[1:], "ac:D:d:hkm:np:rs:",
+                opts, pargs = getopt.getopt(sys.argv[1:], "ac:D:d:hkm:np:rs:v",
                     ["cert=", "key=", "dcert=", "dkey=", "newest", "raw",
                     "debug=", "clone"])
         except getopt.GetoptError, e:
@@ -453,6 +456,8 @@
                         recursive = True
                 elif opt == "-s":
                         src_uri = arg
+                elif opt == "-v":
+                        verbose = True
                 elif opt == "--newest":
                         list_newest = True
                 elif opt == "--raw":
@@ -521,7 +526,7 @@
             remote_prefix=True, ssl_key=key, ssl_cert=cert)
 
         args = (pargs, target, list_newest, all_versions,
-            all_timestamps, keep_compressed, raw, recursive, dry_run,
+            all_timestamps, keep_compressed, raw, recursive, dry_run, verbose,
             dest_xport_cfg, src_uri, dkey, dcert)
 
         if clone:
@@ -589,8 +594,8 @@
         return matches
 
 def archive_pkgs(pargs, target, list_newest, all_versions, all_timestamps,
-    keep_compresed, raw, recursive, dry_run, dest_xport_cfg, src_uri, dkey,
-    dcert):
+    keep_compresed, raw, recursive, dry_run, verbose, dest_xport_cfg, src_uri,
+    dkey, dcert):
         """Retrieve source package data completely and then archive it."""
 
         global cache_dir, download_start, xport, xport_cfg
@@ -682,6 +687,30 @@
                 tracker.download_set_goal(len(matches), get_files,
                     get_bytes)
 
+                if verbose:
+                        if not dry_run:
+                                msg(_("\nArchiving packages ..."))
+                        else:
+                                msg(_("\nArchiving packages (dry-run) ..."))
+                        status = []
+                        status.append((_("Packages to add:"), str(len(matches))))
+                        status.append((_("Files to retrieve:"), str(get_files)))
+                        status.append((_("Estimated transfer size:"),
+                            misc.bytes_to_str(get_bytes)))
+
+                        rjust_status = max(len(s[0]) for s in status)
+                        rjust_value = max(len(s[1]) for s in status)
+                        for s in status:
+                                msg("%s %s" % (s[0].rjust(rjust_status),
+                                    s[1].rjust(rjust_value)))
+
+                        msg(_("\nPackages to archive:"))
+                        for f in sorted(matches):
+                                fmri = f.get_fmri(anarchy=True,
+                                    include_scheme=False)
+                                msg(fmri)
+                        msg()
+
                 if dry_run:
                         # Don't call download_done here; it would cause an
                         # assertion failure since nothing was downloaded.
@@ -740,8 +769,8 @@
 
 
 def clone_repo(pargs, target, list_newest, all_versions, all_timestamps,
-    keep_compressed, raw, recursive, dry_run, dest_xport_cfg, src_uri, dkey,
-    dcert, publishers):
+    keep_compressed, raw, recursive, dry_run, verbose, dest_xport_cfg, src_uri,
+    dkey, dcert, publishers):
 
         global cache_dir, download_start, xport, xport_cfg, dest_xport
 
@@ -918,6 +947,9 @@
                 get_bytes = 0
                 get_files = 0
 
+                msg(_("Retrieving and evaluating %d package(s)...") %
+                    len(to_add))
+
                 # Retrieve manifests.
                 # Try prefetching manifests in bulk first for faster, parallel
                 # transport. Retryable errors during prefetch are ignored and
@@ -965,22 +997,30 @@
                 # Restore old GoalTrackerItem for manifest download.
                 tracker.mfst_fetch = old_gti
 
-                if not dry_run:
-                        msg(_("\nAdding packages ..."))
-                else:
-                        msg(_("\nAdding packages (dry-run) ..."))
+                if verbose:
+                        if not dry_run:
+                                msg(_("\nRetrieving packages ..."))
+                        else:
+                                msg(_("\nRetrieving packages (dry-run) ..."))
+
+                        status = []
+                        status.append((_("Packages to add:"), str(len(to_add))))
+                        status.append((_("Files to retrieve:"), str(get_files)))
+                        status.append((_("Estimated transfer size:"),
+                            misc.bytes_to_str(get_bytes)))
 
-                status = []
-                status.append((_("Packages to add:"), str(len(to_add))))
-                status.append((_("Files to retrieve:"), str(get_files)))
-                status.append((_("Estimated transfer size:"), misc.bytes_to_str(
-                    get_bytes)))
-
-                rjust_status = max(len(s[0]) for s in status)
-                rjust_value = max(len(s[1]) for s in status)
-                for s in status:
-                        msg("%s %s" % (s[0].rjust(rjust_status),
-                            s[1].rjust(rjust_value)))
+                        rjust_status = max(len(s[0]) for s in status)
+                        rjust_value = max(len(s[1]) for s in status)
+                        for s in status:
+                                msg("%s %s" % (s[0].rjust(rjust_status),
+                                    s[1].rjust(rjust_value)))
+ 
+                        msg(_("\nPackages to transfer:"))
+                        for f, i in sorted(to_add):
+                                fmri = f.get_fmri(anarchy=True,
+                                    include_scheme=False)
+                                msg("%s" % fmri)
+                        msg()
 
                 if dry_run:
                         continue
@@ -1069,8 +1109,8 @@
         return pkgdefs.EXIT_OK
 
 def transfer_pkgs(pargs, target, list_newest, all_versions, all_timestamps,
-    keep_compressed, raw, recursive, dry_run, dest_xport_cfg, src_uri, dkey,
-    dcert):
+    keep_compressed, raw, recursive, dry_run, verbose, dest_xport_cfg, src_uri,
+    dkey, dcert):
         """Retrieve source package data and optionally republish it as each
         package is retrieved.
         """
@@ -1216,6 +1256,32 @@
                 tracker.republish_set_goal(len(pkgs_to_get), get_bytes,
                     send_bytes)
 
+                if verbose:
+                        if not dry_run:
+                                msg(_("\nRetrieving packages ..."))
+                        else:
+                                msg(_("\nRetrieving packages (dry-run) ..."))
+                        status = []
+                        status.append((_("Packages to add:"),
+                            str(len(pkgs_to_get))))
+                        status.append((_("Files to retrieve:"),
+                            str(get_files)))
+                        status.append((_("Estimated transfer size:"),
+                            misc.bytes_to_str(get_bytes)))
+
+                        rjust_status = max(len(s[0]) for s in status)
+                        rjust_value = max(len(s[1]) for s in status)
+                        for s in status:
+                                msg("%s %s" % (s[0].rjust(rjust_status),
+                                    s[1].rjust(rjust_value)))
+ 
+                        msg(_("\nPackages to transfer:"))
+                        for f in sorted(pkgs_to_get):
+                                fmri = f.get_fmri(anarchy=True,
+                                    include_scheme=False)
+                                msg("%s" % fmri)
+                        msg()
+
                 if dry_run:
                         tracker.republish_done(dryrun=True)
                         cleanup()
--- a/src/setup.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/setup.py	Thu Mar 27 22:03:22 2014 +0530
@@ -19,7 +19,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import errno
@@ -467,6 +467,9 @@
 pkg_locales = \
     'ar ca cs de es fr he hu id it ja ko nl pl pt_BR ru sk sv zh_CN zh_HK zh_TW'.split()
 
+sysattr_srcs = [
+        'modules/sysattr.c'
+        ]
 syscallat_srcs = [
         'modules/syscallat.c'
         ]
@@ -648,6 +651,12 @@
                             ["%s%s" % ("-I", k) for k in include_dirs] + \
                             ['-I' + self.escape(get_python_inc())] + \
                             syscallat_srcs
+                        sysattrcmd = lint + lint_flags + \
+                            ['-D_FILE_OFFSET_BITS=64'] + \
+                            ["%s%s" % ("-I", k) for k in include_dirs] + \
+                            ['-I' + self.escape(get_python_inc())] + \
+                            ["%s%s" % ("-l", k) for k in sysattr_libraries] + \
+                            sysattr_srcs
 
                         print(" ".join(archcmd))
                         os.system(" ".join(archcmd))
@@ -663,6 +672,8 @@
                         os.system(" ".join(pspawncmd))
                         print(" ".join(syscallatcmd))
                         os.system(" ".join(syscallatcmd))
+                        print(" ".join(sysattrcmd))
+                        os.system(" ".join(sysattrcmd))
 
 
 # Runs both C and Python lint
@@ -1562,6 +1573,7 @@
                 ),
         ]
 elf_libraries = None
+sysattr_libraries = None
 data_files = web_files
 cmdclasses = {
         'install': install_func,
@@ -1710,6 +1722,7 @@
         # All others use OpenSSL and cross-platform arch module
         if osname == 'sunos':
             elf_libraries += [ 'md' ]
+            sysattr_libraries = [ 'nvpair' ]
             ext_modules += [
                     Extension(
                             'arch',
@@ -1735,6 +1748,16 @@
                             extra_link_args = link_args,
                             define_macros = [('_FILE_OFFSET_BITS', '64')]
                             ),
+                    Extension(
+                            'sysattr',
+                            sysattr_srcs,
+                            include_dirs = include_dirs,
+                            libraries = sysattr_libraries,
+                            extra_compile_args = compile_args,
+                            extra_link_args = link_args,
+                            define_macros = [('_FILE_OFFSET_BITS', '64')],
+                            build_64 = True
+                            ),
                     ]
         else:
             elf_libraries += [ 'ssl' ]
--- a/src/svc/pkg-mirror.xml	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/svc/pkg-mirror.xml	Thu Mar 27 22:03:22 2014 +0530
@@ -19,7 +19,7 @@
 
 	CDDL HEADER END
 
-	Copyright (c) 2013, Oracle and/or its affiliates.  All rights reserved.
+	Copyright (c) 2013, 2014, Oracle and/or its affiliates.  All rights reserved.
 
 	NOTE:  This service manifest is not editable; its contents will
 	be overwritten by package or patch operations, including
@@ -190,7 +190,13 @@
 	containing the 'config' property group, specifiying the
 	authorizations we need to allow clients to modify values in it.
 	User-created instances should create this pg with the same
-	'value_authorization' property. -->
+	'value_authorization' property.
+
+	Without setting these authorizations, user-created instances
+	that use the "random" keyword in the crontab_period will never
+	have that value persistently replaced, and so each time the
+	service starts, the cron job will fire on a different date.
+	-->
         <instance name="default" complete="true" enabled="false">
                 <property_group name='config' type='application'>
                 <stability value='Evolving' />
--- a/src/svc/svc-pkg-mirror	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/svc/svc-pkg-mirror	Thu Mar 27 22:03:22 2014 +0530
@@ -19,7 +19,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013 Oracle and/or its affiliates.  All rights reserved.
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates.  All rights reserved.
 #
 
 #
@@ -149,6 +149,7 @@
 		# will not appear in the running instance until the
 		# refresh method has fired.
 		#
+        set -x
 		new_schedule=$(echo $new_schedule| $SED -e 's/ /\\ /g')
 		$SVCCFG -s $SMF_FMRI setprop \
 		    config/crontab_period = astring: \"$new_schedule\"
@@ -186,10 +187,19 @@
 			# /lib/svc/share/fs_include.sh
 			#
 			DS="$special/$repo_base"
-			$ZFS create $DS
+
+			#
+			# We set canmount=noauto so that multiple bootable
+			# rpools can coexist on the same system.
+			#
+			$ZFS create -o canmount=noauto "$DS"
 			check_failure $? \
 			    "unable to create zfs dataset $DS" \
 			    $SMF_FMRI degrade
+			$ZFS mount "$DS"
+			check_failure $? \
+			    "unable to mount zfs dataset $DS" \
+			    $SMF_FMRI degrade
 		fi
 		$PKGREPO create "$repo"
 		check_failure $? "unable to create repository" \
--- a/src/svc/svc-pkg-repositories-setup	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/svc/svc-pkg-repositories-setup	Thu Mar 27 22:03:22 2014 +0530
@@ -19,7 +19,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2013 Oracle and/or its affiliates.  All rights reserved.
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates.  All rights reserved.
 #
 
 # Load SMF constants and functions
@@ -52,11 +52,40 @@
 			# we're on a LiveCD, so exit immediately.
 			exit $SMF_EXIT_OK
 		fi
+
 		DS="$rpool/VARSHARE/pkg/repositories"
+
+		# If the dataset exists, we mount it along with any child
+		# datasets, then exit.
+		$ZFS list "$DS" > /dev/null 2>&1
+		if [ $? -eq 0 ] ; then
+			child_fs_mount=0
+			for child in $($ZFS list -H -r -t filesystem \
+			    -o name "$DS"); do
+				$ZFS mount "$child"
+				child_fs_mount=$(( $child_fs_mount + $? ))
+			done
+			if [ $child_fs_mount -eq 0 ] ; then
+				exit $SMF_EXIT_OK
+			else
+				check_failure 1 \
+				    "Unable to mount child datasets of $DS" \
+				    $SMF_FMRI exit
+			fi
+		fi
+
+		# Otherwise, we need to create the dataset, taking care to set
+		# canmount=noauto, to allow multiple bootable rpools to coexist
+		# on the same system.
 		$ZFS create -p $DS
 		check_failure $? "Unable to create $DS" $SMF_FMRI exit
 
-		$ZFS allow pkg5srv create,mount,snapshot "$DS"
+		for fs in "$rpool/VARSHARE/pkg" \
+		    "$rpool/VARSHARE/pkg/repositories" ; do
+			$ZFS set canmount=noauto $fs
+		done
+
+		$ZFS allow pkg5srv create,mount,canmount,snapshot "$DS"
 		check_failure $? \
 		    "Unable to delegate ZFS permissions on $DS" \
 		    $SMF_FMRI exit
--- a/src/sysrepo.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/sysrepo.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import atexit
@@ -59,7 +59,7 @@
 orig_cwd = None
 
 PKG_CLIENT_NAME = "pkg.sysrepo"
-CLIENT_API_VERSION = 75
+CLIENT_API_VERSION = 78
 pkg.client.global_settings.client_name = PKG_CLIENT_NAME
 
 # exit codes
--- a/src/tests/api/t_elf.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/api/t_elf.py	Thu Mar 27 22:03:22 2014 +0530
@@ -39,8 +39,8 @@
         # tests may fail.  At some point if someone moves paths around in
         # ON, this might fail.  Sorry!
         elf_paths = [
-            "/usr/bin/ls",
-            "/usr/bin/__ARCH__/ls",
+            "/usr/bin/mdb",
+            "/usr/bin/__ARCH__/mdb",
             "/dev/ksyms",
             "/usr/lib/libc.so",
             "/usr/lib/__ARCH__/libc.so",
@@ -76,7 +76,7 @@
                 for p in self.elf_paths:
                         p = re.sub("__ARCH__", arch, p)
                         self.debug("testing elf file %s" % p)
-                        self.assert_(os.path.exists(p))
+                        self.assert_(os.path.exists(p), "%s does not exist" % p)
                         self.assertEqual(elf.is_elf_object(p), True)
                         elf.get_dynamic(p)
                         elf.get_info(p)
--- a/src/tests/api/t_linked_image.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/api/t_linked_image.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import testutils
@@ -127,8 +127,15 @@
                 for name in good_name:
                        li.LinkedImageName(name)
 
-        def test_linked_zone_name(self):
-                DebugValues["zone_name"] = ["/bin/false"]
+        def test_linked_zone_binaries(self):
+                DebugValues["bin_zonename"] = "/bin/false"
+                assertRaises(
+                    (apx_verify, {
+                        "e_type": apx.LinkedImageException,
+                        "e_member": "cmd_failed"}),
+                        li.zone._zonename)
+
+                DebugValues["bin_zoneadm"] = "/bin/false"
                 assertRaises(
                     (apx_verify, {
                         "e_type": apx.LinkedImageException,
@@ -507,63 +514,6 @@
                     (i, self.i_path[i], "\n    ".join(pl_removed),
                     "\n    ".join(pl_added), "\n    ".join(pl)))
 
-        def test_attach_err_link_to_self(self):
-                api_objs = self._imgs_create(1)
-
-                lin = self.i_lin[0]
-                path = self.i_path[0]
-
-                # Attach p2c, link to ourselves
-                assertRaises(
-                    (apx_verify, {
-                        "e_type": apx.LinkedImageException,
-                        "e_member": "link_to_self"}),
-                    api_objs[0].attach_linked_child, lin=lin, li_path=path)
-
-                # Attach c2p, link to ourselves
-                assertRaises(
-                    (apx_verify, {
-                        "e_type": apx.LinkedImageException,
-                        "e_member": "link_to_self"}),
-                    lambda *args, **kwargs: list(
-                        api_objs[0].gen_plan_attach(*args, **kwargs)),
-                        lin=lin, li_path=path)
-
-        def test_attach_err_liveroot_as_child(self):
-                api_objs = self._imgs_create(2)
-
-                lin = self.i_lin[1]
-                path = self.i_path[1]
-
-                #
-                # The test harness will clear all DebugValues variables for
-                # us after each test run.
-                #
-
-                # Attach p2c, child is liveroot
-                DebugValues["simulate_live_root"] = self.i_path[1]
-                assertRaises(
-                    (apx_verify, {
-                        "e_type": apx.LinkedImageException,
-                        "e_member": "attach_root_as_child"}),
-                    api_objs[0].attach_linked_child,
-                        lin=lin, li_path=path)
-
-                # Attach c2p, child is liveroot
-                # We also need to temporarily disable PKG_NO_LIVE_ROOT.
-                del os.environ["PKG_NO_LIVE_ROOT"]
-                DebugValues["simulate_live_root"] = self.i_path[0]
-                assertRaises(
-                    (apx_verify, {
-                        "e_type": apx.LinkedImageException,
-                        "e_member": "attach_root_as_child"}),
-                    lambda *args, **kwargs: list(
-                        api_objs[0].gen_plan_attach(*args, **kwargs)),
-                        lin=lin, li_path=path)
-
-                os.environ["PKG_NO_LIVE_ROOT"] = "1"
-                del DebugValues["simulate_live_root"]
-
         def test_linked_p2c_recurse_flags_1_no_refresh_via_attach(self):
                 """test no-refresh option when no catalog is present"""
 
@@ -1055,50 +1005,6 @@
                 for c in [1, 2, 3, 4]:
                         self._api_detach(api_objs[c])
 
-        def test_update_recursion(self):
-                """Verify that update is recursive, but update with arguments
-                is not."""
-
-                api_objs = self._imgs_create(2)
-
-                # install packages that don't need to be synced.
-                self._api_install(api_objs[0], [self.p_foo1_name[2]])
-                self._api_install(api_objs[1], [self.p_foo1_name[2]])
-
-                # attach our images
-                self._children_attach(0, [1])
-
-                # update a specific package
-                self._api_update(api_objs[0], pkgs_update=[self.p_foo1_name[1]])
-
-                # the parent recursed into the child so make sure to reset the
-                # child api object
-                api_objs[1].reset()
-
-                # verify that the child image hasn't changed
-                pkg_list = list(api_objs[1].get_pkg_list(
-                    api.ImageInterface.LIST_INSTALLED))
-                self.assertEqual(len(pkg_list), 1)
-                pfmri, summ, cats, states, attrs = pkg_list[0]
-                pkg_installed = "%s@%s" % (pfmri[1], pfmri[2])
-                self.assertEqual(pkg_installed, self.p_foo1_name[2])
-
-                # update all packages
-                self._api_update(api_objs[0])
-
-                # the parent recursed into the child so make sure to reset the
-                # child api object
-                api_objs[1].reset()
-
-                # verify that the child image was updated as well
-                pkg_list = list(api_objs[1].get_pkg_list(
-                    api.ImageInterface.LIST_INSTALLED))
-                self.assertEqual(len(pkg_list), 1)
-                pfmri, summ, cats, states, attrs = pkg_list[0]
-                pkg_installed = "%s@%s" % (pfmri[1], pfmri[2])
-                self.assertEqual(pkg_installed, self.p_foo1_name[0])
-
-
         def test_solver_err_aggregation(self):
                 """Verify that when the solver reports errors on packages that
                 can't be installed, those errors include information about
--- a/src/tests/api/t_manifest.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/api/t_manifest.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import unittest
 import tempfile
@@ -31,12 +31,13 @@
 import itertools
 
 import pkg as pkg
+import pkg.actions as actions
 import pkg.client.api_errors as api_errors
 import pkg.digest as digest
+import pkg.fmri as fmri
 import pkg.manifest as manifest
 import pkg.misc as misc
-import pkg.actions as actions
-import pkg.fmri as fmri
+import pkg.portable as portable
 import pkg.variant as variant
 
 # Set the path so that modules above can be found
@@ -391,7 +392,7 @@
 
         def setUp(self):
                 pkg5unittest.Pkg5TestCase.setUp(self)
-                self.cache_dir = tempfile.mkdtemp()
+                self.cache_dir = tempfile.mkdtemp(dir=self.test_root)
                 self.foo_content_p5m = self.make_misc_files(
                     { "foo_content.p5m": self.foo_content })[0]
 
@@ -499,6 +500,35 @@
                 do_get_dirs()
                 self.assert_(os.path.isfile(cfile_path))
 
+        def test_clear_cache(self):
+                """Verify that FactoredManifest.clear_cache() works as
+                expected."""
+
+                # Create FactoredManifest.
+                cache_dir = tempfile.mkdtemp(dir=self.test_root)
+                m1 = manifest.FactoredManifest("[email protected]", cache_dir,
+                    pathname=self.foo_content_p5m)
+
+                # Verify cache was created.
+                cfile_path = os.path.join(cache_dir, "manifest.dircache")
+                self.assert_(os.path.isfile(cfile_path))
+
+                # Create random file in cache_dir.
+                rfile_path = os.path.join(cache_dir, "junk")
+                self.make_file(rfile_path, "junk")
+
+                # Verify that clear_cache() removes all known files from
+                # cache_dir and will not remove directory if unknown are
+                # present.
+                m1.clear_cache(cache_dir)
+                for name in os.listdir(cache_dir):
+                        self.assertEqualDiff(name, os.path.basename(rfile_path))
+
+                # Verify that clear_cache() removes cache_dir if empty.
+                portable.remove(rfile_path)
+                m1.clear_cache(cache_dir)
+                self.assert_(not os.path.exists(cache_dir))
+
 
 if __name__ == "__main__":
         unittest.main()
--- a/src/tests/api/t_pkg_api_install.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/api/t_pkg_api_install.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import testutils
@@ -267,12 +267,6 @@
                 self.pkg("list -a")
                 self.__do_install(api_obj, ["foo"])
 
-                # Check that manifest cache file exists after install.
-                pfmri = fmri.PkgFmri(plist[1])
-                mdir = self.get_img_manifest_cache_dir(pfmri)
-                mcpath = os.path.join(mdir, "manifest.set")
-                assert os.path.exists(mcpath)
-
                 self.pkg("verify")
                 self.pkg("list")
 
@@ -295,24 +289,10 @@
                 api_obj.reset()
                 self.__do_uninstall(api_obj, ["foo"])
 
-                # Check that manifest cache file does not exist after uninstall.
-                assert not os.path.exists(mcpath)
-
                 self.pkg("verify")
                 self.pkg("list -a")
                 self.pkg("verify")
 
-                # Install foo again, then remove manifest cache files and then
-                # verify uninstall doesn't fail.
-                api_obj.reset()
-                self.__do_install(api_obj, ["foo"])
-                pkg_dir = os.path.join(mdir, "..", "..")
-                manifest.FactoredManifest.clear_cache(
-                    api_obj.img.get_manifest_dir(pfmri))
-                assert not os.path.exists(mcpath)
-                api_obj.reset()
-                self.__do_uninstall(api_obj, ["foo"])
-
         def test_basics_3(self):
                 """ Install [email protected], upgrade to [email protected], update [email protected],
                 and then uninstall. """
@@ -1045,6 +1025,87 @@
                 self.pkg("list [email protected]", exit=1)
                 self.pkg("list [email protected]")
 
+        def test_pkg_mancache(self):
+                """Verify that client manifest cache is managed as expected."""
+
+                plist = self.pkgsend_bulk(self.rurl, (self.foo10, self.foo11),
+                    refresh_index=True)
+                api_obj = self.image_create(self.rurl)
+
+                self.pkg("list -af")
+                self.__do_install(api_obj, ["[email protected]"])
+
+                # Verify that manifest file exists after install.
+                pfmri = fmri.PkgFmri(plist[0])
+                mpath = self.get_img_manifest_path(pfmri)
+                mdir = os.path.dirname(mpath)
+                assert os.path.exists(mpath)
+
+                # Verify that manifest cache file exists after install.
+                mcdir = self.get_img_manifest_cache_dir(pfmri)
+                mcpath = os.path.join(mcdir, "manifest.set")
+                assert os.path.exists(mcpath)
+
+                # Verify that manifest cache file and directories do not exist
+                # after uninstall.
+                api_obj.reset()
+                self.__do_uninstall(api_obj, ["foo"])
+                assert not os.path.exists(mcpath), \
+                    "manifest cache file '%s' exists!" % mcpath
+                assert not os.path.exists(mcdir), \
+                    "manifest cache file directory exists!"
+                assert not os.path.exists(os.path.dirname(mcdir)), \
+                    "manifest cache parent directory '%s' exists!" % \
+                    os.path.dirname(mcdir)
+
+                # Verify that manifest file and directories do not exist after
+                # uninstall.
+                assert not os.path.exists(mpath), \
+                    "manifest file '%s' exists!" % mpath
+                assert not os.path.exists(mdir), \
+                    "manifest directory '%s' exists!" % mdir
+
+                # Install [email protected], then update package to [email protected] and verify
+                # that old manifest is removed, but new remains.
+                self.__do_install(api_obj, ["[email protected]"])
+                assert os.path.exists(mpath)
+                assert os.path.exists(mcpath)
+                self.__do_update(api_obj, ["[email protected]"])
+
+                # Verify that old version of package manifest file and directory
+                # do not exist after update.
+                assert not os.path.exists(mcpath), \
+                    "old manifest cache file '%s' exists!" % mcpath
+                assert not os.path.exists(mcdir), \
+                    "old manifest cache file directory exists!"
+
+                # Verify that new version of package manifest file and directory
+                # do exist after update.
+                pfmri = fmri.PkgFmri(plist[1])
+                mpath = self.get_img_manifest_path(pfmri)
+                mdir = os.path.dirname(mpath)
+                mcdir = self.get_img_manifest_cache_dir(pfmri)
+                mcpath = os.path.join(mcdir, "manifest.set")
+
+                # Install foo again, then remove manifest cache files and then
+                # verify uninstall doesn't fail.
+                api_obj.reset()
+                self.__do_install(api_obj, ["foo"])
+                pkg_dir = os.path.join(mcdir, "..", "..")
+                shutil.rmtree(os.path.dirname(mcdir))
+                assert not os.path.exists(os.path.dirname(mcdir)), \
+                    "manifest cache parent directory '%s' exists!" % \
+                    os.path.dirname(mcdir)
+                api_obj.reset()
+                self.__do_uninstall(api_obj, ["foo"])
+
+                # Verify that manifest file and directories do not exist after
+                # uninstall.
+                assert not os.path.exists(mpath), \
+                    "manifest file '%s' exists!" % mpath
+                assert not os.path.exists(mdir), \
+                    "manifest directory '%s' exists!" % mdir
+
 
 class TestActionExecutionErrors(pkg5unittest.SingleDepotTestCase):
         """This set of tests is intended to verify that the client API will
--- a/src/tests/api/t_smf.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/api/t_smf.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import testutils
 if __name__ == "__main__":
@@ -359,11 +359,47 @@
                     "svcadm restart svc:/system/test_restart_svc:default")
                 os.unlink(svcadm_output)
 
+                smf.restart("svc:/system/test_restart_svc:default",
+                    sync_timeout=0)
+                self.file_contains(svcadm_output,
+                    "svcadm restart svc:/system/test_restart_svc:default")
+                os.unlink(svcadm_output)
+
+                smf.restart("svc:/system/test_restart_svc:default",
+                    sync_timeout=-1)
+                self.file_contains(svcadm_output,
+                    "svcadm restart -s svc:/system/test_restart_svc:default")
+                os.unlink(svcadm_output)
+
+                smf.restart("svc:/system/test_restart_svc:default",
+                    sync_timeout=10)
+                self.file_contains(svcadm_output,
+                    "svcadm restart -s -T 10 svc:/system/test_restart_svc:default")
+                os.unlink(svcadm_output)
+
                 smf.refresh("svc:/system/test_refresh_svc:default")
                 self.file_contains(svcadm_output,
                     "svcadm refresh svc:/system/test_refresh_svc:default")
                 os.unlink(svcadm_output)
 
+                smf.refresh("svc:/system/test_refresh_svc:default",
+                    sync_timeout=0)
+                self.file_contains(svcadm_output,
+                    "svcadm refresh svc:/system/test_refresh_svc:default")
+                os.unlink(svcadm_output)
+
+                smf.refresh("svc:/system/test_refresh_svc:default",
+                    sync_timeout=-1)
+                self.file_contains(svcadm_output,
+                    "svcadm refresh -s svc:/system/test_refresh_svc:default")
+                os.unlink(svcadm_output)
+
+                smf.refresh("svc:/system/test_refresh_svc:default",
+                    sync_timeout=10)
+                self.file_contains(svcadm_output,
+                    "svcadm refresh -s -T 10 svc:/system/test_refresh_svc:default")
+                os.unlink(svcadm_output)
+
                 smf.mark("maintenance", "svc:/system/test_mark_svc:default")
                 self.file_contains(svcadm_output,
                     "svcadm mark maintenance svc:/system/test_mark_svc:default")
@@ -396,6 +432,24 @@
                     "svcadm enable -t svc:/system/test_enable_svc:default")
                 os.unlink(svcadm_output)
 
+                smf.enable("svc:/system/test_enable_svc:default",
+                    sync_timeout=-1)
+                self.file_contains(svcadm_output,
+                    "svcadm enable -s svc:/system/test_enable_svc:default")
+                os.unlink(svcadm_output)
+
+                smf.enable("svc:/system/test_enable_svc:default",
+                    sync_timeout=0)
+                self.file_contains(svcadm_output,
+                    "svcadm enable svc:/system/test_enable_svc:default")
+                os.unlink(svcadm_output)
+
+                smf.enable("svc:/system/test_enable_svc:default",
+                    sync_timeout=10)
+                self.file_contains(svcadm_output,
+                    "svcadm enable -s -T 10 svc:/system/test_enable_svc:default")
+                os.unlink(svcadm_output)
+
                 os.environ["PKG_SVCPROP_OUTPUT"] = "svcprop_enabled"
                 self.assertEqual(smf.get_prop("foo", "start/timeout_seconds"),
                     "0")
@@ -446,3 +500,49 @@
                 os.environ["PKG_SVCPROP_OUTPUT"] = "svcprop_maintenance"
                 self.assertEqual(smf.get_state("foo"), smf.SMF_SVC_MAINTENANCE)
                 self.assert_(smf.is_disabled("foo"))
+
+                # test if supplying tuples and lists as arguments works
+                smf.enable(["svc:/system/test_enable_svc:default", "foo"])
+                self.file_contains(svcadm_output,
+                    "svcadm enable svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+                smf.enable(("svc:/system/test_enable_svc:default", "foo"))
+                self.file_contains(svcadm_output,
+                    "svcadm enable svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+
+                smf.disable(["svc:/system/test_enable_svc:default", "foo"])
+                self.file_contains(svcadm_output,
+                    "svcadm disable -s svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+                smf.disable(("svc:/system/test_enable_svc:default", "foo"))
+                self.file_contains(svcadm_output,
+                    "svcadm disable -s svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+
+                smf.refresh(["svc:/system/test_enable_svc:default", "foo"])
+                self.file_contains(svcadm_output,
+                    "svcadm refresh svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+                smf.refresh(("svc:/system/test_enable_svc:default", "foo"))
+                self.file_contains(svcadm_output,
+                    "svcadm refresh svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+
+                smf.restart(["svc:/system/test_enable_svc:default", "foo"])
+                self.file_contains(svcadm_output,
+                    "svcadm restart svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+                smf.restart(("svc:/system/test_enable_svc:default", "foo"))
+                self.file_contains(svcadm_output,
+                    "svcadm restart svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+
+                smf.mark("degraded", ["svc:/system/test_enable_svc:default", "foo"])
+                self.file_contains(svcadm_output,
+                    "svcadm mark degraded svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
+                smf.mark("degraded", ("svc:/system/test_enable_svc:default", "foo"))
+                self.file_contains(svcadm_output,
+                    "svcadm mark degraded svc:/system/test_enable_svc:default foo")
+                os.unlink(svcadm_output)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tests/api/t_sysattr.py	Thu Mar 27 22:03:22 2014 +0530
@@ -0,0 +1,150 @@
+#!/usr/bin/python
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+
+import testutils
+if __name__ == "__main__":
+        testutils.setup_environment("../../../proto")
+import pkg5unittest
+
+import pkg.portable as portable
+import os
+import re
+import tempfile
+import unittest
+
+class TestSysattr(pkg5unittest.Pkg5TestCase):
+
+        def __check_sysattrs(self, path, expected=[]):
+                """Use ls -/ to check if sysattrs specified by expected are
+                   set."""
+
+                p_re = re.compile("{(?P<attrs>.*)}")
+
+                self.cmdline_run("/usr/bin/ls -/ v %s" % path, coverage=False)
+                m = re.search(p_re, self.output)
+
+                self.assertTrue(m is not None)
+
+                attrs = m.groupdict()["attrs"].split(",")
+                for e in expected:
+                        self.assertTrue(e in attrs)
+
+        def __reset_file(self):
+                """Remove and recreate test file to clear sys attrs."""
+                portable.remove(self.test_fn)
+                self.test_fh, self.test_fn = tempfile.mkstemp(
+                    dir=self.test_path)
+
+        def __get_supported(self):
+                supported = portable.get_sysattr_dict()
+                # remove "immutable" and "nounlink"
+                # We can't unset system attributes and we can't use chmod
+                # for unsetting them due to the missing sys_linkdir privilege
+                # which gets removed in run.py.
+                del supported["immutable"]
+                del supported["nounlink"]
+
+                return supported
+
+        def setUp(self):
+                if portable.osname != "sunos":
+                        raise pkg5unittest.TestSkippedException(
+                            "System attributes unsupported on this platform.")
+
+                self.test_path = tempfile.mkdtemp(prefix="test-suite",
+                    dir="/var/tmp")
+                self.test_fh, self.test_fn = tempfile.mkstemp(
+                    dir=self.test_path)
+
+        def tearDown(self):
+                portable.remove(self.test_fn)
+                os.rmdir(self.test_path)
+
+        def test_0_bad_input(self):
+                # fsetattr
+                self.assertRaises(TypeError, portable.fsetattr, self.test_fn,
+                    None)
+                self.assertRaises(ValueError, portable.fsetattr, self.test_fn,
+                    ["octopus"])
+                self.assertRaises(ValueError, portable.fsetattr, self.test_fn,
+                    "xyz")
+                self.assertRaises(OSError, portable.fsetattr, "/nofile",
+                    "H")
+
+                # fgetattr
+                self.assertRaises(OSError, portable.fgetattr, "/nofile")
+
+        def test_1_supported_dict(self):
+                """Check if the supported sys attr dictionary can be retrieved
+                   and contains some attributes."""
+
+                supported = portable.get_sysattr_dict()
+                self.assertTrue(len(supported))
+
+        def test_2_fsetattr(self):
+                """Check if the fsetattr works with all supported attrs."""
+                supported = self.__get_supported()
+
+                # try to set all supported verbose attrs
+                for a in supported:
+                        portable.fsetattr(self.test_fn, [a])
+                        self.__check_sysattrs(self.test_fn, [a])
+                        self.__reset_file()
+
+                # try to set all supported compact attrs
+                for a in supported:
+                        portable.fsetattr(self.test_fn, supported[a])
+                        self.__check_sysattrs(self.test_fn, [a])
+                        self.__reset_file()
+
+                # set all at once using verbose
+                portable.fsetattr(self.test_fn, supported)
+                self.__check_sysattrs(self.test_fn, supported)
+                self.__reset_file()
+
+                # set all at once using compact
+                cattrs = ""
+                for a in supported:
+                        cattrs += supported[a]
+                portable.fsetattr(self.test_fn, cattrs)
+                self.__check_sysattrs(self.test_fn, supported)
+                self.__reset_file()
+
+        def test_3_fgetattr(self):
+                """Check if the fgetattr works with all supported attrs.""" 
+                supported = self.__get_supported()
+                for a in supported:
+                        # av_quarantined file becomes unreadable, skip
+                        if a == "av_quarantined":
+                                continue
+                        portable.fsetattr(self.test_fn, [a])
+                        vattrs = portable.fgetattr(self.test_fn, compact=False)
+                        cattrs = portable.fgetattr(self.test_fn, compact=True)
+                        self.assertTrue(a in vattrs)
+                        self.assertTrue(supported[a] in cattrs)
+                        self.__reset_file()
+
+
+if __name__ == "__main__":
+        unittest.main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tests/certgenerator.py	Thu Mar 27 22:03:22 2014 +0530
@@ -0,0 +1,509 @@
+#!/usr/bin/python2.6
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+import os
+import subprocess
+
+class CertGenerator(object):
+        """A class which creates certificates."""
+
+        def __init__(self, base_dir="."):
+                # Allow relative path, but convert it to absolute path first.
+                self.base_dir = os.path.abspath(base_dir)
+
+                conf_dict = {"base_dir": self.base_dir}
+                self.cnf_file = os.path.join(self.base_dir, "openssl.cnf")
+                with open(self.cnf_file, "wb") as fh:
+                        fh.write(self.openssl_conf % conf_dict)
+
+                # Set up the needed files.
+                fh = open(os.path.join(self.base_dir, "index"), "wb")
+                fh.close()
+
+                fh = open(os.path.join(self.base_dir, "serial"), "wb")
+                fh.write("01\n")
+                fh.close()
+
+                # Set up the names of the needed directories.
+                self.keys_loc = "keys"
+                self.cs_loc = "code_signing_certs"
+                self.chain_certs_loc = "chain_certs"
+                self.trust_anchors_loc = "trust_anchors"
+                self.crl_loc = "crl"
+
+                # Set up the paths to the certificates that will be needed.
+                self.keys_dir = os.path.join(self.base_dir, self.keys_loc)
+                self.cs_dir = os.path.join(self.base_dir, self.cs_loc)
+                self.chain_certs_dir = os.path.join(self.base_dir,
+                    self.chain_certs_loc)
+                self.raw_trust_anchor_dir = os.path.join(self.base_dir,
+                    self.trust_anchors_loc)
+                self.crl_dir = os.path.join(self.base_dir, self.crl_loc)
+
+                os.mkdir(self.keys_dir)
+                os.mkdir(self.cs_dir)
+                os.mkdir(self.chain_certs_dir)
+                os.mkdir(self.raw_trust_anchor_dir)
+                os.mkdir(self.crl_dir)
+
+        def convert_pem_to_text(self, tmp_pth, out_pth, kind="x509"):
+                """Convert a pem file to a human friendly text file."""
+
+                assert not os.path.exists(out_pth)
+
+                cmd = ["openssl", kind, "-in", tmp_pth,
+                    "-text"]
+
+                fh = open(out_pth, "wb")
+                p = subprocess.Popen(cmd, stdout=fh)
+                assert p.wait() == 0
+                fh.close()
+
+        def make_ca_cert(self, new_name, parent_name, parent_loc=None,
+            ext="v3_ca", ta_path=None, expired=False, future=False, https=False):
+                """Create a new CA cert."""
+
+                if not parent_loc:
+                        parent_loc = self.trust_anchors_loc
+                if not ta_path:
+                        ta_path = self.base_dir
+                subj_str_to_use = self.subj_str
+                if https:
+                        subj_str_to_use = self.https_subj_str
+                cmd = ["openssl", "req", "-new", "-nodes",
+                    "-keyout", "%s/%s_key.pem" % (self.keys_dir, new_name),
+                    "-out", "%s/%s.csr" % (self.chain_certs_dir, new_name),
+                    "-sha256", "-subj", subj_str_to_use % (new_name, new_name)]
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+
+                cmd = ["openssl", "ca", "-policy", "policy_anything",
+                    "-extensions", ext,
+                    "-out", "%s/%s_cert.pem" % (self.chain_certs_dir,
+                        new_name),
+                    "-in", "%s/%s.csr" % (self.chain_certs_dir, new_name),
+                    "-cert", "%s/%s/%s_cert.pem" % (ta_path, parent_loc,
+                        parent_name),
+                    "-outdir", "%s" % self.chain_certs_dir,
+                    "-keyfile", "%s/%s/%s_key.pem" % (ta_path, self.keys_loc,
+                        parent_name),
+                    "-config", self.cnf_file,
+                    "-batch"]
+                if expired:
+                        cmd.append("-startdate")
+                        cmd.append("090101010101Z")
+                        cmd.append("-enddate")
+                        cmd.append("090102010101Z")
+                elif future:
+                        cmd.append("-startdate")
+                        cmd.append("350101010101Z")
+                        cmd.append("-enddate")
+                        cmd.append("350102010101Z")
+                else:
+                        cmd.append("-days")
+                        cmd.append("1000")
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+
+        def make_cs_cert(self, new_name, parent_name, parent_loc=None,
+                ext="v3_req", ca_path=None, expiring=False, expired=False,
+                    future=False, https=False, passphrase=None):
+                """Create a new code signing cert."""
+
+                if not parent_loc:
+                        parent_loc = self.trust_anchors_loc
+                if not ca_path:
+                        ca_path = self.base_dir
+                subj_str_to_use = self.subj_str
+                if https:
+                        subj_str_to_use = self.https_subj_str
+                cmd = ["openssl", "genrsa", "-out", "%s/%s_key.pem" % \
+                    (self.keys_dir, new_name), "1024"]
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+
+                cmd = ["openssl", "req", "-new", "-nodes",
+                    "-key", "%s/%s_key.pem" % (self.keys_dir, new_name),
+                    "-out", "%s/%s.csr" % (self.cs_dir, new_name),
+                    "-sha256", "-subj", subj_str_to_use % (new_name, new_name)]
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+
+                if passphrase:
+                        # Add a passphrase to the key just created using a new filename.
+                        cmd = ["openssl", "rsa", "-des3",
+                            "-in", "%s/%s_key.pem" % (self.keys_dir, new_name),
+                            "-out", "%s/%s_reqpass_key.pem" % (self.keys_dir,
+                                new_name),
+                            "-passout", "pass:%s" % passphrase]
+                        p = subprocess.Popen(cmd)
+                        assert p.wait() == 0
+
+                cmd = ["openssl", "ca", "-policy", "policy_anything",
+                    "-extensions", ext,
+                    "-out", "%s/%s_cert.pem" % (self.cs_dir, new_name),
+                    "-in", "%s/%s.csr" % (self.cs_dir, new_name),
+                    "-cert", "%s/%s/%s_cert.pem" % (ca_path, parent_loc,
+                        parent_name),
+                    "-outdir", "%s" % self.cs_dir,
+                    "-keyfile", "%s/%s/%s_key.pem" % (ca_path, self.keys_loc,
+                        parent_name),
+                    "-config", self.cnf_file,
+                    "-batch"]
+                if expired:
+                        cmd.append("-startdate")
+                        cmd.append("090101010101Z")
+                        cmd.append("-enddate")
+                        cmd.append("090102010101Z")
+                elif future:
+                        cmd.append("-startdate")
+                        cmd.append("350101010101Z")
+                        cmd.append("-enddate")
+                        cmd.append("350102010101Z")
+                elif expiring:
+                        cmd.append("-days")
+                        cmd.append("27")
+                else:
+                        cmd.append("-days")
+                        cmd.append("1000")
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+
+        def make_trust_anchor(self, name, https=False):
+                """Make a new trust anchor."""
+
+                subj_str_to_use = self.subj_str
+                if https:
+                        subj_str_to_use = self.https_subj_str
+                cmd = ["openssl", "req", "-new", "-x509", "-nodes",
+                    "-keyout", "%s/%s_key.pem" % (self.keys_dir, name),
+                    "-subj", subj_str_to_use % (name, name),
+                    "-out", "%s/%s/%s_cert.tmp" % (self.base_dir, name, name),
+                    "-days", "1000",
+                    "-sha256"]
+
+                os.mkdir("%s/%s" % (self.base_dir, name))
+
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+                self.convert_pem_to_text("%s/%s/%s_cert.tmp" % (self.base_dir,
+                    name, name), "%s/%s/%s_cert.pem" % (self.base_dir, name,
+                        name))
+
+                try:
+                        os.link("%s/%s/%s_cert.pem" % (self.base_dir, name, name),
+                            "%s/%s_cert.pem" % (self.raw_trust_anchor_dir, name))
+                except:
+                        shutil.copy("%s/%s/%s_cert.pem" % (self.base_dir, name,
+                            name), "%s/%s_cert.pem" % (self.raw_trust_anchor_dir,
+                                name))
+
+        def revoke_cert(self, ca, revoked_cert, ca_dir=None, cert_dir=None,
+                ca_path=None):
+                """Revoke a certificate using the CA given."""
+
+                if not ca_dir:
+                        ca_dir = ca
+                if not cert_dir:
+                        cert_dir = self.cs_loc
+                if not ca_path:
+                        ca_path = self.base_dir
+                cmd = ["openssl", "ca", "-keyfile", "%s/%s/%s_key.pem" % \
+                    (ca_path, self.keys_loc, ca),
+                    "-cert", "%s/%s/%s_cert.pem" % (ca_path, ca_dir, ca),
+                    "-config", self.cnf_file,
+                    "-revoke", "%s/%s/%s_cert.pem" % (self.base_dir, cert_dir,
+                    revoked_cert)]
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+
+                cmd = ["openssl", "ca", "-gencrl",
+                    "-keyfile", "%s/%s/%s_key.pem" % (ca_path, self.keys_loc, ca),
+                    "-cert", "%s/%s/%s_cert.pem" % (ca_path, ca_dir, ca),
+                    "-config", self.cnf_file,
+                    "-out", "%s/%s_crl.tmp" % (self.crl_dir, ca),
+                    "-crldays", "1000"]
+                p = subprocess.Popen(cmd)
+                assert p.wait() == 0
+                self.convert_pem_to_text("%s/%s_crl.tmp" % (self.crl_dir, ca),
+                    "%s/%s_crl.pem" % (self.crl_dir, ca), kind="crl")
+
+        subj_str = "/C=US/ST=California/L=Santa Clara/O=pkg5/CN=%s/emailAddress=%s"
+        https_subj_str = "/C=US/ST=California/L=Santa Clara/O=pkg5/OU=%s/" \
+            "CN=localhost/emailAddress=%s"
+
+        openssl_conf = """\
+HOME                    = .
+RANDFILE                = $ENV::HOME/.rnd
+
+[ ca ]
+default_ca      = CA_default
+
+[ CA_default ]
+dir             = %(base_dir)s
+crl_dir         = $dir/crl
+database        = $dir/index
+serial          = $dir/serial
+
+x509_extensions = usr_cert
+unique_subject  = no
+
+default_md      = sha256
+preserve        = no
+
+policy          = policy_match
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName             = optional
+stateOrProvinceName     = optional
+localityName            = optional
+organizationName        = optional
+organizationalUnitName  = optional
+commonName              = supplied
+emailAddress            = optional
+
+####################################################################
+[ req ]
+default_bits            = 2048
+default_keyfile         = ./private/ca-key.pem
+default_md              = sha256
+
+prompt                  = no
+distinguished_name      = root_ca_distinguished_name
+
+x509_extensions = v3_ca
+string_mask = nombstr
+
+[ root_ca_distinguished_name ]
+commonName = ta1
+countryName = US
+stateOrProvinceName = California
+localityName = Santa Clara
+0.organizationName = pkg5
+emailAddress = ta1@pkg5
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request.
+
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+
+[ v3_req ]
+
+# Extensions to add to a certificate request.
+
+basicConstraints = critical,CA:FALSE
+keyUsage = critical, digitalSignature
+
+[ v3_confused_cs ]
+
+# Have CA be true, but don't have keyUsage allow certificate signing to created
+# a confused certificate.
+
+basicConstraints = critical,CA:true
+keyUsage = critical, digitalSignature
+
+[ v3_no_keyUsage ]
+
+# The extensions to use for a code signing certificate without a keyUsage
+# extension.
+
+basicConstraints = critical,CA:FALSE
+
+[ v3_ca ]
+
+# Extensions for a typical CA.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true
+keyUsage = critical, keyCertSign, cRLSign
+
+[ v3_ca_lp4 ]
+
+# Extensions for a typical CA.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true,pathlen:4
+keyUsage = critical, keyCertSign, cRLSign
+
+[ v3_ca_lp3 ]
+
+# Extensions for a typical CA
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true,pathlen:3
+keyUsage = critical, keyCertSign, cRLSign
+
+[ v3_ca_lp2 ]
+
+# Extensions for a typical CA.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true,pathlen:2
+keyUsage = critical, keyCertSign, cRLSign
+
+[ v3_ca_lp1 ]
+
+# Extensions for a typical CA.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true,pathlen:1
+keyUsage = critical, keyCertSign, cRLSign
+
+[ v3_ca_lp0 ]
+
+# Extensions for a typical CA.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true,pathlen:0
+keyUsage = critical, keyCertSign, cRLSign
+
+[ v3_ca_no_crl ]
+
+# Extensions for a CA which cannot sign a CRL.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true
+keyUsage = critical, keyCertSign
+
+[ v3_ca_no_keyUsage ]
+
+# Extensions for a CA without keyUsage information.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true
+
+[ issuer_ext ]
+
+# Used for a code signing cert with an unsupported critical extension.
+
+basicConstraints = critical,CA:FALSE
+issuerAltName = critical,issuer:copy
+
+[ issuer_ext_ca ]
+
+# Used for a CA cert with an unsupported critical extension.
+
+basicConstraints = critical,CA:TRUE
+issuerAltName = critical,issuer:copy
+
+[ issuer_ext_non_critical ]
+
+# Used to test a recognized non-critical extension with an unrecognized value.
+
+basicConstraints = critical,CA:FALSE
+keyUsage = encipherOnly
+
+[ issuer_ext_bad_val ]
+
+# Used to test a recognized critical extension with an unrecognized value.
+
+basicConstraints = critical,CA:FALSE
+keyUsage = critical, encipherOnly
+
+[ crl_ext ]
+
+# Used for testing certificate revocation.
+
+basicConstraints = critical,CA:FALSE
+crlDistributionPoints = URI:http://localhost:12001/file/0/ch1_ta4_crl.pem
+
+[ ch5_ta1_crl ]
+
+# Used for testing certificate revocation.
+
+basicConstraints = critical,CA:FALSE
+crlDistributionPoints = URI:http://localhost:12001/file/0/ch5_ta1_crl.pem
+
+[ ch1.1_ta4_crl ]
+
+# Used for testing certificate revocation.
+
+basicConstraints = critical,CA:FALSE
+crlDistributionPoints = URI:http://localhost:12001/file/0/ch1.1_ta4_crl.pem
+
+[ ch1_ta1_crl ]
+
+# Used for testing certificate revocation at the level of a chain certificate.
+
+basicConstraints = critical,CA:FALSE
+crlDistributionPoints = URI:http://localhost:12001/file/0/ch1_pubCA1_crl.pem
+
+[ crl_ca ]
+
+# Used for testing CA certificate revocation by a trust anchor.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical,CA:true
+crlDistributionPoints = URI:http://localhost:12001/file/0/ta5_crl.pem
+keyUsage = critical, keyCertSign, cRLSign
+
+[ bad_crl ]
+
+# Used for testing a CRL with a bad file format.
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+
+basicConstraints = critical,CA:false
+
+crlDistributionPoints = URI:http://localhost:12001/file/0/example_file
+
+[ bad_crl_loc ]
+
+# PKIX recommendation.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+
+basicConstraints = critical,CA:false
+
+crlDistributionPoints = URI:foo://bar/baz
+"""
+
+
--- a/src/tests/cli/t_actuators.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_actuators.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import testutils
 if __name__ == "__main__":
@@ -414,6 +414,43 @@
                     "svcadm restart svc:/system/test_multi_svc1:default "
                     "svc:/system/test_multi_svc2:default")
 
+                # Test synchronous options
+                # synchronous restart
+                self.pkg("uninstall basics")
+                self.pkg("install --sync-actuators [email protected]")
+                self.pkg("verify")
+                self.file_contains(svcadm_output,
+                    "svcadm restart -s svc:/system/test_restart_svc:default")
+                os.unlink(svcadm_output)
+
+                # synchronous restart with timeout
+                self.pkg("uninstall basics")
+                self.pkg("install --sync-actuators --sync-actuators-timeout 20 [email protected]")
+                self.pkg("verify")
+                self.file_contains(svcadm_output,
+                    "svcadm restart -s -T 20 svc:/system/test_restart_svc:default")
+                os.unlink(svcadm_output)
+
+                # synchronous suspend 
+                self.pkg("install --sync-actuators [email protected]")
+                self.pkg("verify")
+                self.file_contains(svcadm_output,
+                    "svcadm disable -s -t svc:/system/test_suspend_svc:default")
+                self.file_contains(svcadm_output,
+                    "svcadm enable -s svc:/system/test_suspend_svc:default")
+                os.unlink(svcadm_output)
+
+                # synchronous suspend with timeout
+                self.pkg("uninstall basics")
+                self.pkg("install [email protected]")
+                self.pkg("install --sync-actuators --sync-actuators-timeout 10 [email protected]")
+                self.pkg("verify")
+                self.file_contains(svcadm_output,
+                    "svcadm disable -s -t svc:/system/test_suspend_svc:default")
+                self.file_contains(svcadm_output,
+                    "svcadm enable -s -T 10 svc:/system/test_suspend_svc:default")
+                os.unlink(svcadm_output)
+
                 # make it look like our test service is enabled
                 os.environ["PKG_SVCPROP_OUTPUT"] = "svcprop_enabled"
 
--- a/src/tests/cli/t_depot_config.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_depot_config.py	Thu Mar 27 22:03:22 2014 +0530
@@ -59,6 +59,8 @@
             # FMRI                                   STATE
             ["svc:/application/pkg/server:default",  "online" ],
             ["svc:/application/pkg/server:usr",      "online" ],
+            # an instance which we have a writable_root for
+            ["svc:/application/pkg/server:windex",   "online" ],
             # repositories that we will not serve
             ["svc:/application/pkg/server:off",      "offline"],
             ["svc:/application/pkg/server:writable", "online" ],
@@ -70,15 +72,16 @@
         # must be in the same order as svcs_conf and the rows
         # must correspond.
         default_svcprop_conf = [
-            # inst_root           readonly  standalone
-            ["%(rdir1)s",         "true",   "false"   ],
-            ["%(rdir2)s",         "true",   "false"   ],
+            # inst_root           readonly  standalone  writable_root
+            ["%(rdir1)s",         "true",   "false",    "\"\""],
+            ["%(rdir2)s",         "true",   "false",    "\"\""],
+            ["%(rdir3)s",         "true",   "false",    "%(index_dir)s"],
             # we intentionally use non-existent repository
             # paths in these services, and check they aren't
             # present in the httpd.conf later.
-            ["/pkg5/there/aint", "true",    "false",   "offline"],
-            ["/pkg5/nobody/here", "false",   "false"  ],
-            ["/pkg5/but/us/chickens",  "true",    "true"   ],
+            ["/pkg5/there/aint", "true",    "false",    "\"\""],
+            ["/pkg5/nobody/here", "false",  "false",    "\"\""],
+            ["/pkg5/but/us/chickens", "true", "true",   "\"\""],
         ]
 
         sample_pkg = """
@@ -110,10 +113,14 @@
 
         def setUp(self):
                 self.sc = None
-                pkg5unittest.ApacheDepotTestCase.setUp(self, ["test1", "test2"])
+                pkg5unittest.ApacheDepotTestCase.setUp(self, ["test1", "test2",
+                    "test3"])
                 self.rdir1 = self.dcs[1].get_repodir()
                 self.rdir2 = self.dcs[2].get_repodir()
+                self.rdir3 = self.dcs[3].get_repodir()
 
+                self.index_dir = os.path.join(self.test_root,
+                    "depot_writable_root")
                 self.default_depot_runtime = os.path.join(self.test_root,
                     "depot_runtime")
                 self.default_depot_conf = os.path.join(
@@ -157,7 +164,8 @@
                         _svcprop_conf[index].insert(0, fmri)
                         _svcprop_conf[index].insert(1, state)
 
-                rdirs = {"rdir1": self.rdir1, "rdir2": self.rdir2}
+                rdirs = {"rdir1": self.rdir1, "rdir2": self.rdir2,
+                    "rdir3": self.rdir3, "index_dir": self.index_dir}
 
                 # construct two strings we can use as parameters to our
                 # __svc*_template values
@@ -197,6 +205,8 @@
                 # the httpd.conf should reference our repositories
                 self.file_contains(self.ac.conf, self.rdir1)
                 self.file_contains(self.ac.conf, self.rdir2)
+                self.file_contains(self.ac.conf, self.rdir3)
+                self.file_contains(self.ac.conf, self.index_dir)
                 # it should not reference the repositories that we have
                 # marked as offline, writable or standalone
                 self.file_doesnt_contain(self.ac.conf, "/pkg5/there/aint")
@@ -240,6 +250,16 @@
                 self.assert_("/tmp" in err, "error message did not contain "
                     "/tmp")
 
+                # ensure we pick up invalid writable_root directories
+                ret, output, err = self.depotconfig("-d blah=%s=/dev/null" %
+                    self.rdir1, out=True, stderr=True, exit=1)
+
+                # but check that we allow valid writeable_roots
+                ret, output, err = self.depotconfig("-d blah=%s=%s" %
+                    (self.rdir1, self.index_dir), out=True, stderr=True)
+                self.file_contains(self.default_depot_conf,
+                    "PKG5_WRITABLE_ROOT_blah %s" % self.index_dir)
+
         def test_3_invalid_htcache_dir(self):
                 """We return an error given an invalid cache_dir"""
 
@@ -386,9 +406,9 @@
                 self.depotconfig("", exit=1)
 
                 # test that when we break one of the repositories we're
-                # serving, that the remaining repositories are still accessible
+                # serving, the remaining repositories are still accessible
                 # from the bui. We need to fix the repo dir before rebuilding
-                # the configuration, then break it once the depot has started
+                # the configuration, then break it once the depot has started.
                 os.rename(broken_rdir, self.rdir2)
                 self.depotconfig("")
                 os.rename(self.rdir2, broken_rdir)
@@ -437,6 +457,7 @@
                         self.pkgsend_bulk(rurl, self.sample_pkg)
                         self.pkgsend_bulk(rurl, self.sample_pkg_11)
                 self.pkgsend_bulk(self.dcs[2].get_repo_url(), self.new_pkg)
+                self.pkgrepo("-s %s refresh" % self.dcs[2].get_repo_url())
 
                 self.depotconfig("")
                 self.image_create()
@@ -523,17 +544,32 @@
 
         def test_14_htpkgrepo(self):
                 """Test that only the 'pkgrepo refresh' command works with the
-                depot-config only when the -A flag is enabled. Test that
-                the index does indeed get updated when a refresh is performed
-                and that new package contents are visible."""
+                depot-config only when the -A flag is enabled and only on
+                the repository that has a writable root. Test that the index
+                does indeed get updated when a refresh is performed and that
+                new package contents are visible."""
 
                 rurl = self.dcs[1].get_repo_url()
+                nosearch_rurl = self.dcs[2].get_repo_url()
+                writable_rurl = self.dcs[3].get_repo_url()
+
                 self.pkgsend_bulk(rurl, self.sample_pkg)
-                # allow index refreshes
+                # we have a search index on rurl
+                self.pkgrepo("-s %s refresh" % rurl)
+                self.pkgsend_bulk(writable_rurl, self.sample_pkg)
+
+                # we have no search index on nosearch_rurl
+                self.pkgsend_bulk(nosearch_rurl, self.sample_pkg)
+
+                # allow index refreshes for repositories that support them
+                # (ie. have a writable root)
                 self.depotconfig("-A")
                 self.start_depot()
                 self.image_create()
+
                 depot_url = "%s/default" % self.ac.url
+                windex_url = "%s/windex" % self.ac.url
+                nosearch_url = "%s/usr" % self.ac.url
 
                 # verify that list commands work
                 ret, output = self.pkgrepo("-s %s list -F tsv" % depot_url,
@@ -548,40 +584,54 @@
                 self.pkgrepo("-s %s set -p test1 foo/bar=baz" % depot_url,
                     exit=2)
 
+                # verify that status works
+                self.pkgrepo("-s %s info" % depot_url)
+                self.assert_("test1 1 online" in self.reduceSpaces(self.output))
+
                 # verify search works for packages in the repository
                 self.pkg("set-publisher -p %s" % depot_url)
                 self.pkg("search -s %s msgsh" % "%s" % depot_url,
                     exit=1)
                 self.pkg("search -s %s /usr/bin/sample" % depot_url)
 
+                # Can't refresh this repo since it doesn't have a writable root
+                self.pkgrepo("-s %s refresh" % depot_url, exit=1)
+
+                # verify that search fails for repositories that don't have
+                # a pre-existing search index in the repository
+                self.pkg("search -s %s /usr/bin/sample" % nosearch_url, exit=1)
+
                 # publish a new package, and verify it doesn't appear in the
-                # search results
-                self.pkgsend_bulk(rurl, self.new_pkg)
-                self.pkg("search -s %s /usr/bin/new" % depot_url, exit=1)
+                # search results for the repo with the writable_root
+                self.pkgsend_bulk(writable_rurl, self.new_pkg)
+                self.pkg("search -s %s /usr/bin/new" % windex_url, exit=1)
 
-                # refresh the index
-                self.pkgrepo("-s %s refresh" % depot_url)
+                # now refresh the index
+                self.pkgrepo("-s %s refresh" % windex_url)
+
                 # there isn't a synchronous option to pkgrepo, so wait a bit
                 # then make sure we do see this new package.
                 time.sleep(3)
-                ret, output = self.pkg("search -s %s /usr/bin/new" % depot_url,
+
+                # we should now get search results for that new package
+                ret, output = self.pkg("search -s %s /usr/bin/new" % windex_url,
                     out=True)
                 self.assert_("usr/bin/new" in output)
-                ret, output = self.pkgrepo("-s %s list -F tsv" % depot_url,
+                ret, output = self.pkgrepo("-s %s list -F tsv" % windex_url,
                     out=True)
-                self.assert_("pkg://test1/[email protected]" in output)
-                self.assert_("pkg://test1/[email protected]" in output)
+                self.assert_("pkg://test3/[email protected]" in output)
+                self.assert_("pkg://test3/[email protected]" in output)
 
                 # ensure that refresh --no-catalog works, but refresh --no-index
                 # does not.
-                self.pkgrepo("-s %s refresh --no-catalog" % depot_url)
-                self.pkgrepo("-s %s refresh --no-index" % depot_url, exit=1)
+                self.pkgrepo("-s %s refresh --no-catalog" % windex_url)
+                self.pkgrepo("-s %s refresh --no-index" % windex_url, exit=1)
 
                 # check that when we start the depot without -A, we cannot
                 # issue refresh commands.
                 self.depotconfig("")
                 self.start_depot()
-                self.pkgrepo("-s %s refresh" % depot_url, exit=1)
+                self.pkgrepo("-s %s refresh" % windex_url, exit=1)
 
         def test_15_htheaders(self):
                 """Test that the correct Content-Type and Cache-control headers
@@ -589,15 +639,20 @@
 
                 fmris = self.pkgsend_bulk(self.dcs[1].get_repo_url(),
                     self.sample_pkg)
+                self.pkgrepo("-s %s refresh" % self.dcs[1].get_repo_url())
                 self.depotconfig("")
                 self.start_depot()
-                # create an image so we have something to search with
-                # (bug 15807844) then retrieve the hash of a file we have
-                # published
+
+                # Create an image so we have something to search with.
+                # This technically isn't necessary anymore, but the test suite
+                # runs with some debug flags to make it (intentionally)
+                # difficult to mess with the root image of the test system
+                # (even though calling 'pkg search -s' would never actually
+                # modify it) Creating an image is just the easier thing to do
+                # here.
                 self.image_create()
-                self.pkg("set-publisher -p %s/default" % self.ac.url)
-                ret, output = self.pkg("search -H -o action.hash "
-                     "-r /usr/bin/sample", out=True)
+                ret, output = self.pkg("search -s %s/default -H -o action.hash "
+                     "-r /usr/bin/sample" % self.ac.url, out=True)
                 file_hash = output.strip()
 
                 fmri = pkg.fmri.PkgFmri(fmris[0])
@@ -661,9 +716,18 @@
                     self.carrots_pkg)
                 self.pkgsend_bulk(self.dcs[2].get_repo_url(),
                     self.new_pkg)
+
+                # We shouldn't be able to supply a writable root when running
+                # in fragment mode
+                self.depotconfig("-l %s -F -d usr=%s -d spaghetti=%s=%s "
+                    "-P testpkg5" %
+                    (self.default_depot_runtime, self.rdir1, self.rdir2,
+                    self.index_dir), exit=2)
+
                 self.depotconfig("-l %s -F -d usr=%s -d spaghetti=%s "
                     "-P testpkg5" %
                     (self.default_depot_runtime, self.rdir1, self.rdir2))
+
                 default_httpd_conf_path = os.path.join(self.test_root,
                     "default_httpd.conf")
                 httpd_conf = open(default_httpd_conf_path, "w")
@@ -753,10 +817,10 @@
 #
 # This script produces false svcprop(1) output, using
 # a list of space separated strings, with each string
-# of the format <fmri>%%<state>%%<inst_root>%%<readonly>%%<standalone>
+# of the format <fmri>%%<state>%%<inst_root>%%<readonly>%%<standalone>%%<writable_root>
 #
 # eg.
-# SERVICE_PROPS="svc:/application/pkg/server:foo%%online%%/space/repo%%true%%false"
+# SERVICE_PROPS="svc:/application/pkg/server:foo%%online%%/space/repo%%true%%false%%/space/writable_root"
 #
 # we expect to be called as "svcprop -c -p <property> <fmri>"
 # which is enough svcprop(1) functionalty for these tests. Any other
@@ -767,17 +831,19 @@
 typeset -A prop_readonly
 typeset -A prop_inst_root
 typeset -A prop_standalone
+typeset -A prop_writable_root
 
 SERVICE_PROPS="%s"
 for service in $SERVICE_PROPS ; do
         echo $service | sed -e 's/%%/ /g' | \
-            read fmri state inst_root readonly standalone
+            read fmri state inst_root readonly standalone writable_root
         # create a hashable version of the FMRI
         fmri=$(echo $fmri | sed -e 's/\///g' -e 's/://g')
         prop_state[$fmri]=$state
         prop_inst_root[$fmri]=$inst_root
         prop_readonly[$fmri]=$readonly
         prop_standalone[$fmri]=$standalone
+        prop_writable_root[$fmri]=$writable_root
 done
 
 
@@ -792,6 +858,9 @@
         "pkg/standalone")
                 echo ${prop_standalone[$FMRI]}
                 ;;
+        "pkg/writable_root")
+                echo ${prop_writable_root[$FMRI]}
+                ;;
         "restarter/state")
                 echo ${prop_state[$FMRI]}
                 ;;
--- a/src/tests/cli/t_https.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_https.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import testutils
@@ -33,6 +33,8 @@
 import os
 import shutil
 import stat
+import tempfile
+import certgenerator
 
 import pkg.misc as misc
 import pkg.portable as portable
@@ -62,7 +64,8 @@
 
                 self.make_misc_files(self.misc_files)
                 self.pkgsend_bulk(self.rurl1, self.example_pkg10)
-                self.acurl = self.ac.url + "/%s" % pub1_name 
+                self.acurl1 = self.ac.url + "/%s" % pub1_name
+                self.acurl2 = self.ac.url + "/%s" % pub2_name
                 # Our proxy is served by the same Apache controller, but uses
                 # a different port.
                 self.proxyurl = self.ac.url.replace("https", "http")
@@ -77,14 +80,14 @@
                 # Test that creating an image using a HTTPS repo without
                 # providing any keys or certificates fails.
                 self.assertRaises(TransportFailures, self.image_create,
-                    self.acurl)
-                self.pkg_image_create(repourl=self.acurl, exit=1)
+                    self.acurl1)
+                self.pkg_image_create(repourl=self.acurl1, exit=1)
                 api_obj = self.image_create()
 
                 # Test that adding a HTTPS repo fails if the image does not
                 # contain the trust anchor to verify the server's identity.
                 self.pkg("set-publisher -k %(key)s -c %(cert)s -p %(url)s" % {
-                    "url": self.acurl,
+                    "url": self.acurl1,
                     "cert": os.path.join(self.cs_dir, self.get_cli_cert("test")),
                     "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
                     }, exit=1)
@@ -93,7 +96,7 @@
                 # the image.
                 self.seed_ta_dir("ta7")
                 self.pkg("set-publisher -k %(key)s -c %(cert)s -p %(url)s" % {
-                    "url": self.acurl,
+                    "url": self.acurl1,
                     "cert": os.path.join(self.cs_dir, self.get_cli_cert("test")),
                     "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
                     })
@@ -127,7 +130,7 @@
                 self.seed_ta_dir("ta7")
                 self.pkg("set-publisher --proxy %(proxy)s "
                     "-k %(key)s -c %(cert)s -p %(url)s" % {
-                    "url": self.acurl,
+                    "url": self.acurl1,
                     "cert": os.path.join(self.cs_dir, self.get_cli_cert("test")),
                     "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
                     "proxy": self.proxyurl})
@@ -142,7 +145,7 @@
                 self.seed_ta_dir("ta7")
                 self.pkg("set-publisher --proxy %(proxy)s "
                     "-k %(key)s -c %(cert)s -p %(url)s" % {
-                    "url": self.acurl,
+                    "url": self.acurl1,
                     "cert": os.path.join(self.cs_dir, self.get_cli_cert("test")),
                     "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
                     "proxy": bad_proxyurl}, exit=1)
@@ -152,7 +155,7 @@
                 # good proxy.
                 self.pkg("set-publisher --no-refresh --proxy %(proxy)s "
                     "-k %(key)s -c %(cert)s -g %(url)s test" % {
-                    "url": self.acurl,
+                    "url": self.acurl1,
                     "cert": os.path.join(self.cs_dir, self.get_cli_cert("test")),
                     "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
                     "proxy": bad_proxyurl}, exit=0)
@@ -176,7 +179,7 @@
                 # Set https-based publisher with correct cert.
                 self.seed_ta_dir("ta7")
                 self.pkg("set-publisher -k %(key)s -c %(cert)s -p %(url)s" % {
-                    "url": self.acurl,
+                    "url": self.acurl1,
                     "cert": good_cert_path,
                     "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
                     })
@@ -200,6 +203,83 @@
                 # the cert for the first publisher.
                 self.pkg("refresh %s" % self.tmppub)
 
+        def test_expired_certs(self):
+                """ Test that certificate validation needs to validate all
+                certificates before raising an exception. (Bug 15507548)"""
+
+                bad_cert_path = os.path.join(self.cs_dir,
+                    "cs3_ch1_ta3_cert.pem")
+                good_cert_path_1 = os.path.join(self.cs_dir,
+                    self.get_cli_cert("test"))
+                good_cert_path_2 = os.path.join(self.cs_dir,
+                    self.get_cli_cert("tmp"))
+                self.ac.start()
+                self.image_create()
+
+                # Set https-based publisher with correct cert.
+                self.seed_ta_dir("ta7")
+                self.pkg("set-publisher -k %(key)s -c %(cert)s -p %(url)s" % {
+                    "url": self.acurl1,
+                    "cert": good_cert_path_1,
+                    "key": os.path.join(self.keys_dir, self.get_cli_key("test")),
+                    })
+                # Set a second publisher
+                self.pkg("set-publisher -k %(key)s -c %(cert)s -p %(url)s" % {
+                    "url": self.acurl2,
+                    "cert": good_cert_path_2,
+                    "key": os.path.join(self.keys_dir, self.get_cli_key("tmp")),
+                    })
+ 
+                # Replace cert of first publisher with one that is expired.
+
+                # Cert is stored by content hash in the pkg config of the image,
+                # which must be a SHA-1 hash for backwards compatibility.
+                ch = misc.get_data_digest(good_cert_path_1,
+                    hash_func=hashlib.sha1)[0]
+                pkg_cert_path = os.path.join(self.get_img_path(), "var", "pkg",
+                    "ssl", ch)
+                shutil.copy(bad_cert_path, pkg_cert_path)
+
+                # Replace the second certificate with one that is expired.
+                ch = misc.get_data_digest(good_cert_path_2,
+                    hash_func=hashlib.sha1)[0]
+                pkg_cert_path = os.path.join(self.get_img_path(), "var", "pkg",
+                    "ssl", ch)
+                shutil.copy(bad_cert_path, pkg_cert_path)
+
+                # Refresh all publishers should try to validate all certs.
+                self.pkg("refresh", exit=1)
+                self.assert_("Publisher: tmp" in self.errout, self.errout)
+                self.assert_("Publisher: test" in self.errout, self.errout)
+
+        def test_expiring_certs(self):
+                """Test that image-create will not raise exception for
+                expiring certificates. (Bug 17768096)"""
+
+                tmp_dir = tempfile.mkdtemp(dir=self.test_root)
+
+                # Retrive the correct CA and use it to generate a new cert.
+                test_ca = self.get_pub_ta("test")
+                test_cs = "cs1_%s" % test_ca
+
+                # Add a certificate to the length 2 chain that is going to
+                # expire in 27 days.
+                cg = certgenerator.CertGenerator(base_dir=tmp_dir)
+                cg.make_cs_cert(test_cs, test_ca, ca_path=self.path_to_certs,
+                    expiring=True, https=True)
+                self.ac.start()
+                self.image_create()
+
+                # Set https-based publisher with expiring cert.
+                self.seed_ta_dir("ta7")
+                self.pkg("image-create -f --user -k %(key)s -c %(cert)s "
+                    "-p test=%(url)s %(path)s/image"% {
+                    "url": self.acurl1,
+                    "cert": os.path.join(cg.cs_dir, "%s_cert.pem" % test_cs),
+                    "key": os.path.join(cg.keys_dir, "%s_key.pem" % test_cs),
+                    "path": tmp_dir
+                    })
+
 
 class TestDepotHTTPS(pkg5unittest.SingleDepotTestCase):
         # Tests in this suite use the read only data directory.
--- a/src/tests/cli/t_pkg_depotd.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_depotd.py	Thu Mar 27 22:03:22 2014 +0530
@@ -45,6 +45,8 @@
 import pkg.misc as misc
 import pkg.server.repository as sr
 import pkg.p5i as p5i
+import re
+import subprocess
 
 class TestPkgDepot(pkg5unittest.SingleDepotTestCase):
         # Only start/stop the depot once (instead of for every test)
@@ -691,6 +693,96 @@
 
                 self.make_misc_files("tmp/file")
 
+        def __depot_daemon_start(self, repopath, out_path, err_path):
+                """Helper function: start a depot daemon and return a handler
+                for its parent process and the port number it is running on.
+                The parent process is a ctrun process. It is the user's
+                responsibility to call depot_daemon_stop to stop the process.
+                ctrun is used to kill the depot daemon process after finishing
+                testing. It is needed because the double fork machanism of the
+                daemonizer make the daemonized depot server indenpendent from
+                its parent process.
+
+                repopath: The repository path that a depot daemon will run on.
+
+                out_path: The depot daemon stdout log file path.
+
+                err_path: The depot daemon stderr log file path."""
+
+                # Make sure the PKGDEPOT_CONTROLLER is not set in the newenv.
+                newenv = os.environ.copy()
+                newenv.pop("PKGDEPOT_CONTROLLER", None)
+                cmdargs = "/usr/bin/ctrun -o noorphan %s/usr/lib/pkg.depotd " \
+                    "-p %s -d %s --content-root %s/usr/share/lib/pkg " \
+                    "--readonly </dev/null > %s 2> %s" % \
+                    (pkg5unittest.g_proto_area, self.next_free_port, repopath,
+                    pkg5unittest.g_proto_area, out_path, err_path)
+
+                curport = self.next_free_port
+                self.next_free_port += 1
+
+                # Start a depot daemon process.
+                try:
+                        depot_handle = subprocess.Popen(cmdargs, env=newenv,
+                            shell=True)
+
+                        self.assert_(depot_handle != None, msg="Could not "
+                            "start depot")
+                        begintime = time.time()
+                        check_interval = 0.20
+                        daemon_started = False
+                        durl = "http://localhost:%s/en/index.shtml" % curport
+
+                        while (time.time() - begintime) <= 40.0:
+                                rc = depot_handle.poll()
+                                self.assert_(rc is None, msg="Depot exited "
+                                    "unexpectedly")
+
+                                try:
+                                        f = urllib2.urlopen(durl)
+                                        daemon_started = True
+                                        break
+                                except urllib2.URLError, e:
+                                        time.sleep(check_interval)
+
+                        if not daemon_started:
+                                if depot_handle:
+                                        depot_handle.kill()
+                                self.assert_(daemon_started, msg="Could not "
+                                    "access depot daemon")
+
+                        # Read the msgs from the err log file to verify log
+                        # msgs.
+                        with open(err_path, "r") as read_err:
+                                msgs = read_err.readlines()
+                                self.assert_(msgs, "Log message is "
+                                    "empty. Check if the previous "
+                                    "ctrun process shut down "
+                                    "properly")
+                        return (depot_handle, curport)
+                except:
+                        try:
+                                if depot_handle:
+                                        depot_handle.kill()
+                        except:
+                                pass
+                        raise
+
+        def __depot_daemon_stop(self, depot_handle):
+                """Helper function: stop the depot daemon process by sending
+                signal to its handle."""
+
+                # Terminate the depot daemon. If failed, kill it.
+                try:
+                        if depot_handle:
+                                depot_handle.terminate()
+                except:
+                        try:
+                                if depot_handle:
+                                        depot_handle.kill()
+                        except:
+                                pass
+
         def test_0_depot_bui_output(self):
                 """Verify that a non-error response and valid HTML is returned
                 for each known BUI page in every available depot mode."""
@@ -988,6 +1080,45 @@
                 durl = self.dc.get_depot_url()
                 verdata = urllib2.urlopen("%s/versions/0/" % durl)
 
+        def test_log_depot_daemon(self):
+                """Verify that depot daemon works properly and the error
+                 message is logged properly."""
+
+                if self.dc.started:
+                        self.dc.stop()
+
+                # Create a test repo.
+                repopath = os.path.join(self.test_root, "repo_tmp_depot_log")
+                self.create_repo(repopath)
+
+                out_path = os.path.join(self.test_root, "daemon_out_log")
+                err_path = os.path.join(self.test_root, "daemon_err_log")
+
+                depot_handle = None
+                try:
+                        depot_handle, curport = self.__depot_daemon_start(
+                            repopath, out_path, err_path)
+
+                        # Issue a bad request to trigger the server logging
+                        # the error msg.
+                        durl = "http://localhost:%s/catalog/0" % curport
+                        try:
+                                urllib2.urlopen(durl)
+                        except urllib2.URLError, e:
+                                pass
+                        # Stop the depot daemon.
+                        self.__depot_daemon_stop(depot_handle)
+
+                        # Read the msgs from the err log file to verify log
+                        # msgs.
+                        with open(err_path, "r") as read_err:
+                                msgs = read_err.readlines()
+                        self.assertRegexp(msgs[-1], "\[[\w:/]+\]  Request "
+                            "failed")
+                except:
+                        self.__depot_daemon_stop(depot_handle)
+                        raise
+
 
 if __name__ == "__main__":
         unittest.main()
--- a/src/tests/cli/t_pkg_image_update.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_image_update.py	Thu Mar 27 22:03:22 2014 +0530
@@ -295,6 +295,13 @@
                         self.pkg("change-facet %s=False" % facet)
                         self.pkg("update -nv", exit=EXIT_NOP)
 
+        def test_ignore_missing(self):
+                """Test that update shows correct behavior w/ and w/o
+                   --ignore-missing."""
+                self.image_create(self.rurl1)
+                self.pkg("update missing", exit=1)
+                self.pkg("update --ignore-missing missing", exit=4)
+
 
 class TestPkgUpdateOverlappingPatterns(pkg5unittest.SingleDepotTestCase):
 
--- a/src/tests/cli/t_pkg_install.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_install.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import testutils
@@ -35,7 +35,9 @@
 import re
 import shutil
 import socket
+import subprocess
 import stat
+import tempfile
 import time
 import unittest
 import urllib2
@@ -192,6 +194,54 @@
             add link path=etc/cat_link target="../opt/dir with white\tspace/cat in a hat"
             close """
 
+        ffoo10 = """
+            open [email protected],5.11-0
+            add file tmp/libc.so.1 mode=0555 owner=root group=bin path=/lib/libc.so.1
+            close """
+
+        ffoo11 = """
+            open [email protected],5.11-0
+            add file tmp/libc.so.1 mode=0555 owner=root group=bin path=/lib/libc.so.1
+            close """
+
+        fbar10 = """
+            open [email protected],5.11-0
+            add depend type=require fmri=pkg:/[email protected]
+            add dir mode=0755 owner=root group=bin path=/bin
+            add file tmp/cat mode=0555 owner=root group=bin path=/bin/cat
+            close """
+
+        fbar11 = """
+            open [email protected],5.11-0
+            add depend type=require fmri=pkg:/[email protected]
+            add dir mode=0755 owner=root group=bin path=/bin
+            add file tmp/cat mode=0555 owner=root group=bin path=/bin/cat
+            close """
+
+        secret1 = """
+            open [email protected]
+            add dir mode=0755 owner=root group=bin path=/p1
+            add file tmp/cat mode=0555 owner=root group=bin sysattr=TH path=/p1/cat
+            close """
+
+        secret2 = """
+            open [email protected]
+            add dir mode=0755 owner=root group=bin path=/p2
+            add file tmp/cat mode=0555 owner=root group=bin sysattr=hidden,sensitive path=/p2/cat
+            close """
+
+        secret3 = """
+            open [email protected]
+            add dir mode=0755 owner=root group=bin path=/p3
+            add file tmp/cat mode=0555 owner=root group=bin sysattr=horst path=/p3/cat
+            close """
+
+        secret4 = """
+            open [email protected]
+            add dir mode=0755 owner=root group=bin path=/p3
+            add file tmp/cat mode=0555 owner=root group=bin sysattr=hidden,horst path=/p3/cat
+            close """
+
         misc_files = [ "tmp/libc.so.1", "tmp/cat", "tmp/baz" ]
 
         def setUp(self):
@@ -201,19 +251,23 @@
         def test_cli(self):
                 """Test bad cli options"""
 
+                self.cli_helper("install")
+                self.cli_helper("exact-install")
+
+        def cli_helper(self, install_cmd):
                 self.image_create(self.rurl)
 
                 self.pkg("-@", exit=2)
                 self.pkg("-s status", exit=2)
                 self.pkg("-R status", exit=2)
 
-                self.pkg("install -@ foo", exit=2)
-                self.pkg("install -vq foo", exit=2)
-                self.pkg("install", exit=2)
-                self.pkg("install [email protected]", exit=1)
-                self.pkg("install pkg:/[email protected]", exit=1)
-
-        def test_basics_1(self):
+                self.pkg("%s -@ foo" % install_cmd, exit=2)
+                self.pkg("%s -vq foo" % install_cmd, exit=2)
+                self.pkg("%s" % install_cmd, exit=2)
+                self.pkg("%s [email protected]" % install_cmd, exit=1)
+                self.pkg("%s pkg:/[email protected]" % install_cmd, exit=1)
+
+        def test_basics_1_install(self):
                 """ Send empty package [email protected], install and uninstall """
 
                 plist = self.pkgsend_bulk(self.rurl, self.foo10)
@@ -234,10 +288,37 @@
                     remove_packages=plist)
                 self.pkg("verify")
 
+        def test_basics_1_exact_install(self):
+                """ Send empty package [email protected], exact-install and uninstall """
+
+                plist = self.pkgsend_bulk(self.rurl, self.foo10)
+                self.image_create(self.rurl)
+
+                self.pkg("list -a")
+                self.pkg("list", exit=1)
+
+                self.pkg("exact-install --parsable=0 foo")
+                self.assertEqualParsable(self.output,
+                    add_packages=plist)
+
+                # Exact-install the same version should do nothing.
+                self.pkg("exact-install foo", exit=4)
+                self.pkg("list")
+                self.pkg("verify")
+
+                self.pkg("uninstall --parsable=0 foo")
+                self.assertEqualParsable(self.output,
+                    remove_packages=plist)
+                self.pkg("verify")
+
         def test_basics_2(self):
                 """ Send package [email protected], containing a directory and a file,
-                    install, search, and uninstall. """
-
+                    install or exact-install, search, and uninstall. """
+
+                self.basics_2_helper("install")
+                self.basics_2_helper("exact-install")
+
+        def basics_2_helper(self, install_cmd):
                 # This test needs to use the depot to be able to test the
                 # download cache.
                 self.dc.start()
@@ -247,9 +328,10 @@
                 self.image_create(self.durl)
 
                 self.pkg("list -a")
-                self.pkg("install foo")
-
-                # Verify that content cache is empty after successful install.
+                self.pkg("%s foo" % install_cmd)
+
+                # Verify that content cache is empty after successful install
+                # or exact-install.
                 api_inst = self.get_img_api_obj()
                 img_inst = api_inst.img
                 cache_dirs = []
@@ -284,8 +366,13 @@
                 self.dc.stop()
 
         def test_basics_3(self):
-                """ Install [email protected], upgrade to [email protected], uninstall. """
-
+                """Exact-install or Install [email protected], upgrade to [email protected],
+                uninstall. """
+
+                self.basics_3_helper("install")
+                self.basics_3_helper("exact-install")
+
+        def basics_3_helper(self, installed_cmd):
                 # This test needs to use the depot to be able to test the
                 # download cache.
                 self.dc.start()
@@ -294,7 +381,8 @@
                 self.image_create(self.durl)
                 self.pkg("set-property flush-content-cache-on-success False")
 
-                # Verify that content cache is empty before install.
+                # Verify that content cache is empty before install or
+                # exact-install.
                 api_inst = self.get_img_api_obj()
                 img_inst = api_inst.img
                 cache_dirs = []
@@ -303,15 +391,16 @@
                                 cache_dirs.extend(os.listdir(path))
                 self.assertEqual(cache_dirs, [])
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % installed_cmd)
                 self.pkg("list [email protected]")
                 self.pkg("list [email protected]", exit=1)
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % installed_cmd)
 
                 # Verify that content cache is not empty after successful
-                # install (since flush-content-cache-on-success is True
-                # by default) for packages that have content.
+                # install or exact_install (since
+                # flush-content-cache-on-success is True by default) for
+                # packages that have content.
                 cache_dirs = []
                 for path, readonly, pub, layout in img_inst.get_cachedirs():
                         if os.path.exists(path):
@@ -329,8 +418,13 @@
                 self.dc.stop()
 
         def test_basics_4(self):
-                """ Add [email protected], dependent on [email protected], install, uninstall. """
-
+                """ Add [email protected], dependent on [email protected], exact-install or
+                install, uninstall. """
+
+                self.basics_4_helper("install")
+                self.basics_4_helper("exact-install")
+
+        def basics_4_helper(self, installed_cmd):
                 # This test needs to use the depot to be able to test the
                 # download cache.
                 self.dc.start()
@@ -342,7 +436,8 @@
                 # Set content cache to not be flushed on success.
                 self.pkg("set-property flush-content-cache-on-success False")
 
-                # Verify that content cache is empty before install.
+                # Verify that content cache is empty before install or
+                # exact-install.
                 api_inst = self.get_img_api_obj()
                 img_inst = api_inst.img
                 cache_dirs = []
@@ -352,10 +447,11 @@
                 self.assertEqual(cache_dirs, [])
 
                 self.pkg("list -a")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % installed_cmd)
 
                 # Verify that content cache is not empty after successful
-                # install (since flush-content-cache-on-success is False)
+                # install or exact-install (since
+                # flush-content-cache-on-success is False)
                 # for packages that have content.
                 cache_dirs = []
                 for path, readonly, pub, layout in img_inst.get_cachedirs():
@@ -373,7 +469,7 @@
                 self.pkg("verify")
                 self.dc.stop()
 
-        def test_basics_5(self):
+        def test_basics_5_install(self):
                 """ Install [email protected], upgrade to [email protected].
                 Boring should be left alone, while
                 foo gets upgraded as needed"""
@@ -390,7 +486,23 @@
                 self.pkg("list")
                 self.pkg("list [email protected] [email protected] [email protected]")
 
-        def test_basics_6(self):
+        def test_basics_5_exact_install(self):
+                """ exact-nstall [email protected], upgrade to [email protected].
+                Boring should be left alone, while
+                foo gets upgraded as needed"""
+
+                self.pkgsend_bulk(self.rurl, (self.bar10, self.bar11,
+                    self.foo10, self.foo11, self.foo12, self.boring10,
+                    self.boring11))
+                self.image_create(self.rurl)
+
+                self.pkg("exact-install [email protected] [email protected] [email protected]")
+                self.pkg("list [email protected] [email protected] [email protected]")
+                self.pkg("exact-install -v [email protected]") # upgrade bar
+                self.pkg("list [email protected] [email protected]")
+                self.pkg("list [email protected]", exit=1)
+
+        def test_basics_6_install(self):
                 """Verify that '@latest' will install the latest version
                 of a package."""
 
@@ -436,13 +548,113 @@
                 shutil.rmtree(t1dir)
                 shutil.rmtree(t2dir)
 
-        def test_basics_7(self):
+        def test_basics_6_exact_install(self):
+                """Verify that '@latest' will install the latest version
+                of a package."""
+
+                # Create a repository for the test publisher.
+                t1dir = os.path.join(self.test_root, "test-repo")
+                self.create_repo(t1dir, properties={ "publisher": {
+                    "prefix": "test" } })
+                self.pkgsend_bulk(t1dir, (self.bar10,
+                    self.foo10, self.foo11, self.foo12, self.boring10,
+                    self.boring11))
+                self.image_create("file:%s" % t1dir)
+
+                # Create a repository for a different publisher for at
+                # least one of the packages so that we can verify that
+                # publisher search order is accounted for by @latest.
+                # The second publisher is called 'pub2' here so that
+                # it comes lexically before 'test' (see bug 18180) to
+                # ensure that latest version ordering works correctly
+                # when the same stem is provided by different publishers.
+                t2dir = os.path.join(self.test_root, "pub2-repo")
+                self.create_repo(t2dir, properties={ "publisher": {
+                    "prefix": "pub2" } })
+                self.pkgsend_bulk(t2dir, self.bar11)
+
+                self.pkg("set-publisher -p %s" % t2dir)
+                self.pkg("exact-install '*@latest'")
+
+                # 1.0 of bar should be installed here since pub2 is a
+                # lower-ranked publisher.
+                self.pkg("list")
+                self.pkg("info [email protected] [email protected] [email protected]")
+
+                self.pkg("set-publisher --non-sticky test")
+                self.pkg("set-publisher -P pub2 ")
+                self.pkg("exact-install bar@latest")
+
+                # 1.1 of bar should be installed here since pub2 is a
+                # higher-ranked publisher and test is non-sticky.
+                self.pkg("info [email protected]")
+                self.pkg("list [email protected]")
+                self.pkg("list [email protected]", exit=1)
+
+                # Cleanup.
+                shutil.rmtree(t1dir)
+                shutil.rmtree(t2dir)
+
+        def test_basics_7_install(self):
                 """ Add [email protected], install [email protected]. """
 
                 self.pkgsend_bulk(self.rurl, self.xbar11)
                 self.image_create(self.rurl)
                 self.pkg("install [email protected]", exit=1)
 
+        def test_basics_7_exact_install(self):
+                """Add [email protected], exact-install [email protected]."""
+
+                self.pkgsend_bulk(self.rurl, self.xbar11)
+                self.image_create(self.rurl)
+                self.pkg("exact-install [email protected]", exit=1)
+
+        def test_basics_8_exact_install(self):
+                """Try to exact-install two versions of the same package."""
+
+                self.pkgsend_bulk(self.rurl, (self.foo11, self.foo12))
+                self.image_create(self.rurl)
+
+                self.pkg("exact-install [email protected] [email protected]", exit=1)
+
+        def test_basics_9_exact_install(self):
+                """Verify downgrade will fail with exact-install."""
+
+                self.pkgsend_bulk(self.rurl, (self.bar10, self.bar11,
+                    self.foo10, self.foo12))
+                self.image_create(self.rurl)
+
+                self.pkg("install [email protected]")
+                self.pkg("exact-install [email protected]", exit=1)
+                self.pkg("list [email protected]")
+                self.pkg("list [email protected]")
+
+        def test_freeze_exact_install(self):
+                """Verify frozen packages can be relaxed with exact_install.
+                Which means we can ignore the frozen list with exact_install.
+                """
+
+                self.pkgsend_bulk(self.rurl, (self.fbar10, self.ffoo10,
+                    self.fbar11, self.ffoo11))
+                self.image_create(self.rurl)
+
+                # Freeze [email protected].
+                self.pkg("install [email protected]")
+                self.pkg("freeze [email protected]")
+                self.pkg("exact-install [email protected]")
+                self.pkg("list [email protected]")
+                self.pkg("list [email protected]")
+                self.pkg("uninstall '*'")
+
+                # Freeze both [email protected] and [email protected].
+                self.image_create(self.rurl)
+                self.pkg("install [email protected] [email protected]")
+                self.pkg("freeze [email protected]")
+                self.pkg("freeze [email protected]")
+                self.pkg("exact-install [email protected]")
+                self.pkg("list [email protected]")
+                self.pkg("list [email protected]")
+
         def test_basics_mdns(self):
                 """ Send empty package [email protected], install and uninstall """
 
@@ -487,13 +699,18 @@
 
         def test_image_upgrade(self):
                 """ Send package [email protected], dependent on [email protected].  Install
-                    [email protected].  List all packages.  Upgrade image. """
-
+                or exact-install [email protected].  List all packages.  Upgrade image.
+                """
+
+                self.image_upgrade_helper("install")
+                self.image_upgrade_helper("exact-install")
+
+        def image_upgrade_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.foo10, self.foo11,
                     self.bar10))
                 self.image_create(self.rurl)
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
 
                 self.pkgsend_bulk(self.rurl, (self.foo12, self.bar11))
                 self.pkg("refresh")
@@ -599,8 +816,13 @@
                 self.pkg("list b6018@1 a6018@2")
 
         def test_install_matching(self):
-                """ Try to [un]install packages matching a pattern """
-
+                """ Try to [un]install or exact-install packages matching a
+                pattern """
+
+                self.install_matching_helper("install")
+                self.install_matching_helper("exact-install")
+
+        def install_matching_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.foo10, self.bar10,
                     self.baz10))
                 self.image_create(self.rurl)
@@ -610,8 +832,8 @@
 
                 # first case should fail since multiple patterns
                 # match the same pacakge
-                self.pkg("install 'ba*' 'b*'", exit=1)
-                self.pkg("install 'ba*'", exit=0)
+                self.pkg("%s 'ba*' 'b*'" % install_cmd, exit=1)
+                self.pkg("%s 'ba*'" % install_cmd, exit=0)
                 self.pkg("list foo", exit=0)
                 self.pkg("list bar", exit=0)
                 self.pkg("list baz", exit=0)
@@ -619,7 +841,7 @@
 
                 # However, multiple forms of the same pattern should simply be
                 # coalesced and allowed.
-                self.pkg("install pkg:/foo /foo ///foo pkg:///foo")
+                self.pkg("%s pkg:/foo /foo ///foo pkg:///foo" % install_cmd)
                 self.pkg("list")
                 self.pkg("verify pkg:/foo /foo ///foo pkg:///foo")
                 self.pkg("uninstall pkg:/foo /foo ///foo "
@@ -629,6 +851,10 @@
                 """Test the install of packages that have actions that are
                 invalid."""
 
+                self.bad_package_actions("install")
+                self.bad_package_actions("exact-install")
+
+        def bad_package_actions(self, install_cmd):
                 # First, publish the package that will be corrupted and create
                 # an image for testing.
                 plist = self.pkgsend_bulk(self.rurl, (self.badfile10,
@@ -636,7 +862,7 @@
                 self.image_create(self.rurl)
 
                 # This should succeed and cause the manifest to be cached.
-                self.pkg("install %s" % " ".join(plist))
+                self.pkg("%s %s" % (install_cmd, " ".join(plist)))
 
                 # While the manifest is cached, get a copy of its contents.
                 for p in plist:
@@ -660,7 +886,8 @@
                                 bad_mdata = mdata.replace(src_mode, bad_mode)
                                 self.write_img_manifest(pfmri, bad_mdata)
                                 self.pkg("--debug manifest_validate=Never "
-                                    "install %s" % pfmri.pkg_name, exit=1)
+                                    "%s %s" % (install_cmd, pfmri.pkg_name),
+                                    exit=1)
 
                         # Now attempt to corrupt the client's copy of the
                         # manifest in various ways to check if the client
@@ -673,7 +900,8 @@
                                     bad_owner)
                                 self.write_img_manifest(pfmri, bad_mdata)
                                 self.pkg("--debug manifest_validate=Never "
-                                    "install %s" % pfmri.pkg_name, exit=1)
+                                    "%s %s" % (install_cmd, pfmri.pkg_name),
+                                    exit=1)
 
                         for bad_group in ("", 'group=""', "group=invalidgroup"):
                                 self.debug("Testing with bad group "
@@ -683,7 +911,8 @@
                                     bad_group)
                                 self.write_img_manifest(pfmri, bad_mdata)
                                 self.pkg("--debug manifest_validate=Never "
-                                    "install %s" % pfmri.pkg_name, exit=1)
+                                    "%s %s" % (install_cmd, pfmri.pkg_name),
+                                    exit=1)
 
                         # Now attempt to corrupt the client's copy of the
                         # manifest such that actions are malformed.
@@ -695,7 +924,8 @@
                                 bad_mdata = mdata + "%s\n" % bad_act
                                 self.write_img_manifest(pfmri, bad_mdata)
                                 self.pkg("--debug manifest_validate=Never "
-                                    "install %s" % pfmri.pkg_name, exit=1)
+                                    "%s %s" % (install_cmd, pfmri.pkg_name),
+                                    exit=1)
 
         def test_bug_3770(self):
                 """ Try to install a package from a publisher with an
@@ -761,12 +991,17 @@
 
         def test_install_fuzz(self):
                 """Verify that packages delivering files with whitespace in
-                their paths can be installed, updated, and uninstalled."""
-
+                their paths can be installed or exact-installed, updated, and
+                uninstalled."""
+
+                self.install_fuzz_helper("install")
+                self.install_fuzz_helper("exact-install")
+
+        def install_fuzz_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, self.fuzzy)
                 self.image_create(self.rurl)
 
-                self.pkg("install fuzzy@1")
+                self.pkg("%s fuzzy@1" % install_cmd)
                 self.pkg("verify -v")
                 self.pkg("update -vvv fuzzy@2")
                 self.pkg("verify -v")
@@ -781,6 +1016,50 @@
 
                 self.pkg("uninstall -vvv fuzzy")
 
+        def test_sysattrs(self):
+                """Test install with setting system attributes."""
+
+                if portable.osname != "sunos":
+                        raise pkg5unittest.TestSkippedException(
+                            "System attributes unsupported on this platform.")
+
+                plist = self.pkgsend_bulk(self.rurl, [self.secret1,
+                    self.secret2, self.secret3, self.secret4])
+
+                # Need to create an image in /var/tmp since sysattrs don't work
+                # in tmpfs.
+                self.debug(self.rurl)
+                old_img_path = self.img_path()
+                self.set_img_path(tempfile.mkdtemp(dir="/var/tmp"))
+
+                self.image_create(self.rurl)
+
+                # test without permission for setting sensitive system attribute
+                self.pkg("install secret1", su_wrap=True, exit=1)
+
+                # now some tests which should succeed
+                self.pkg("install secret1")
+                fpath = os.path.join(self.img_path(),"p1/cat")
+                p = subprocess.Popen(["/usr/bin/ls", "-/", "c", fpath],
+                    stdout=subprocess.PIPE)
+                out, err = p.communicate()
+                expected = "{AH-----m----T}"
+                self.assertTrue(expected in out, out)
+
+                self.pkg("install secret2")
+                fpath = os.path.join(self.img_path(),"p2/cat")
+                p = subprocess.Popen(["/usr/bin/ls", "-/", "c", fpath],
+                    stdout=subprocess.PIPE)
+                out, err = p.communicate()
+                expected = "{AH-----m----T}"
+                self.assertTrue(expected in out, out)
+
+                # test some packages with invalid sysattrs
+                self.pkg("install secret3", exit=1)
+                self.pkg("install secret4", exit=1)
+                shutil.rmtree(self.img_path())
+                self.set_img_path(old_img_path)
+
 
 class TestPkgInstallApache(pkg5unittest.ApacheDepotTestCase):
 
@@ -1313,6 +1592,42 @@
                 self.pkg("list 'idr*' 'bogus*' B", exit=1)
                 self.pkg("list A C incorp kernel no-idrs")
 
+        def test_exact_install(self):
+                """Test that the --reject option performs as expected."""
+
+                self.image_create(self.rurl, prefix="")
+
+                # test basic usage of --reject
+                self.pkg("exact-install --reject B A")
+                self.pkg("list A C")
+                self.pkg("uninstall '*'")
+
+                # test swapping XOR'd pkgs B & C.
+                self.pkg("install B")
+                self.pkg("install A")
+                self.pkg("list A B")
+                self.pkg("exact-install --reject B A")
+                self.pkg("list A C")
+                self.pkg("list B", exit=1)
+                self.pkg("uninstall '*'")
+
+                # test that solver picks up on impossible cases fails
+                self.pkg("exact-install -v --reject B --reject C A", exit=1)
+
+                # test that publisher matching works.
+                self.pkg("install bogus")
+                self.pkg("list bogus")
+                self.pkg("exact-install --reject B --reject "
+                    "'pkg://contrib/*' A")
+                self.pkg("uninstall '*'")
+
+                # verify that matching accounts for reject with --exact option.
+                self.pkg("exact-install -v --reject A A", exit=1)
+                self.pkg("exact-install -v --reject 'idr*' --reject 'bogus*' "
+                    "--reject B '*'")
+                self.pkg("list 'idr*' 'bogus*' B", exit=1)
+                self.pkg("list A C incorp kernel no-idrs")
+
         def test_idr(self):
                 self.image_create(self.rurl)
                 # install kernel pkg; remember version so we can reinstall it later
@@ -1449,16 +1764,20 @@
                 """A dependency on a package should pull in an exact name
                 match."""
 
+                self.ambiguous_pattern_depend_helper("install")
+                self.ambiguous_pattern_depend_helper("exact-install")
+
+        def ambiguous_pattern_depend_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.depender10, self.foo10))
 
                 self.image_create(self.rurl)
-                self.pkg("install depender")
+                self.pkg("%s depender" % install_cmd)
 
                 self.pkgsend_bulk(self.rurl, (self.foo11, self.anotherfoo11,
                     self.depender11))
                 self.pkg("refresh")
 
-                self.pkg("install depender")
+                self.pkg("%s depender" % install_cmd)
 
                 # Make sure that we didn't get other/foo from the dependency.
                 self.pkg("list another/foo", exit=1)
@@ -1467,21 +1786,26 @@
                 """We should be able to refer to a package by its "basename", if
                 that component is unique."""
 
+                self.non_ambiguous_fragment_helper("install")
+                self.non_ambiguous_fragment_helper("exact-install")
+
+        def non_ambiguous_fragment_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, self.anotherfoo11)
                 self.image_create(self.rurl)
 
                 # Right now, this is not exact, but still unambiguous
-                self.pkg("install foo")
+                self.pkg("%s foo" % install_cmd)
 
                 # Create ambiguity
                 self.pkgsend_bulk(self.rurl, self.foo11)
                 self.pkg("refresh")
 
                 # This is unambiguous, should succeed
-                self.pkg("install pkg:/foo")
+                self.pkg("%s pkg:/foo" % install_cmd)
 
                 # This is now ambiguous, should fail
-                self.pkg("install foo", exit=1)
+                self.pkg("%s foo" % install_cmd, exit=1)
+                self.pkgrepo("remove -s %s pkg:/[email protected]" % self.rurl )
 
 
 class TestPkgInstallOverlappingPatterns(pkg5unittest.SingleDepotTestCase):
@@ -1696,30 +2020,38 @@
         """
 
         def test_unanchored_circular_dependencies(self):
-                """ check to make sure we can install
+                """ check to make sure we can install or exact-install
                 circular dependencies w/o versions
                 """
 
+                self.unanchored_circular_dependencies_helper("install")
+                self.unanchored_circular_dependencies_helper("exact-install")
+
+        def unanchored_circular_dependencies_helper(self, install_cmd):
                 # Send 1.0 versions of packages.
                 self.pkgsend_bulk(self.rurl, (self.pkg10, self.pkg20,
                     self.pkg30))
 
                 self.image_create(self.rurl)
-                self.pkg("install pkg1")
+                self.pkg("%s pkg1" % install_cmd)
                 self.pkg("list")
                 self.pkg("verify -v")
 
         def test_anchored_circular_dependencies(self):
-                """ check to make sure we can install
+                """ check to make sure we can install or exact-install
                 circular dependencies w/ versions
                 """
 
+                self.anchored_circular_dependencies_helper("install")
+                self.unanchored_circular_dependencies_helper("exact-install")
+
+        def anchored_circular_dependencies_helper(self, install_cmd):
                 # Send 1.1 versions of packages.
                 self.pkgsend_bulk(self.rurl, (self.pkg11, self.pkg21,
                     self.pkg31))
 
                 self.image_create(self.rurl)
-                self.pkg("install pkg1")
+                self.pkg("%s pkg1" % install_cmd)
                 self.pkg("list")
                 self.pkg("verify -v")
 
@@ -2375,6 +2707,10 @@
                 """Test for editable files moving between packages or locations
                 or both."""
 
+                self.upgrade3_helper("install")
+                self.upgrade3_helper("exact-install")
+
+        def upgrade3_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.silver10, self.silver20,
                     self.silver30, self.gold10, self.gold20, self.gold30,
                     self.golduser10, self.golduser20, self.silveruser))
@@ -2382,7 +2718,7 @@
                 self.image_create(self.rurl)
 
                 # test 1: move an editable file between packages
-                self.pkg("install [email protected] [email protected]")
+                self.pkg("%s [email protected] [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # modify config file
@@ -2394,7 +2730,7 @@
                 self.file_contains(file_path, test_str)
 
                 # update packages
-                self.pkg("install [email protected] [email protected]")
+                self.pkg("%s [email protected] [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # make sure /etc/passwd contains still correct string
@@ -2404,7 +2740,7 @@
 
 
                 # test 2: change an editable file's path within a package
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # modify config file
@@ -2412,7 +2748,7 @@
                 file_path = "etc/passwd"
                 self.file_append(file_path, test_str)
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # make sure /etc/config2 contains correct string
@@ -2424,7 +2760,7 @@
 
 
                 # test 3: move an editable file between packages and change its path
-                self.pkg("install [email protected] [email protected]")
+                self.pkg("%s [email protected] [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # modify config file
@@ -2434,7 +2770,7 @@
 
                 self.file_contains(file_path, test_str)
 
-                self.pkg("install [email protected] [email protected]")
+                self.pkg("%s [email protected] [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # make sure /etc/config2 now contains correct string
@@ -2446,7 +2782,7 @@
 
                 # test 4: move /etc/passwd between packages and ensure that we
                 # can still uninstall a user at the same time.
-                self.pkg("install [email protected] [email protected]")
+                self.pkg("%s [email protected] [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 # add a user
@@ -2469,7 +2805,8 @@
                 silly_inode = os.stat(silly_path).st_ino
 
                 # update packages
-                self.pkg("install [email protected] [email protected] [email protected] silveruser")
+                self.pkg("%s [email protected] [email protected] [email protected] silveruser"
+                    % install_cmd)
 
                 # make sure Kermie is still installed and still has our local
                 # changes
@@ -2484,28 +2821,37 @@
                 """Test to make sure hardlinks are correctly restored when file
                 they point to is updated."""
 
+                self.upgrade4_helper("install")
+                self.upgrade4_helper("exact-install")
+
+        def upgrade4_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.iron10, self.iron20))
 
                 self.image_create(self.rurl)
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
         def test_upgrade_liveroot(self):
                 """Test to make sure upgrade of package fails if on live root
                 and reboot is needed."""
 
+                self.upgrade_liveroot_helper("install")
+                self.upgrade_liveroot_helper("exact-install")
+
+        def upgrade_liveroot_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.liveroot10, self.liveroot20))
                 self.image_create(self.rurl)
 
-                self.pkg("--debug simulate_live_root=%s install [email protected]" %
-                    self.get_img_path())
+                self.pkg("--debug simulate_live_root=%s %s [email protected]" %
+                    (self.get_img_path(), install_cmd))
                 self.pkg("verify -v")
-                self.pkg("--debug simulate_live_root=%s install --deny-new-be "
-                    "[email protected]" % self.get_img_path(), exit=5)
+                self.pkg("--debug simulate_live_root=%s %s --deny-new-be "
+                    "[email protected]" % (self.get_img_path(),  install_cmd),
+                    exit=5)
                 self.pkg("--debug simulate_live_root=%s uninstall "
                     "--deny-new-be liveroot" % self.get_img_path(), exit=5)
                 # "break" liveroot@1
@@ -2517,15 +2863,19 @@
                 """Test to make sure driver_aliases conflicts don't cause
                 add_drv to fail."""
 
+                self.upgrade_driver_conflicts_helper("install")
+                self.upgrade_driver_conflicts_helper("exact-install")
+
+        def upgrade_driver_conflicts_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.dricon1, self.dricon2,
                     self.dricon3))
 
                 self.image_create(self.rurl)
 
                 self.pkg("list -afv")
-                self.pkg("install dricon@1")
+                self.pkg("%s dricon@1" % install_cmd)
                 # This one should comment out the wigit entry in driver_aliases
-                self.pkg("install dricon@2")
+                self.pkg("%s dricon@2" % install_cmd)
                 da_contents = file(os.path.join(self.get_img_path(),
                     "etc/driver_aliases")).readlines()
                 self.assert_("# pkg(5): wigit \"pci8086,1234\"\n" in da_contents)
@@ -2533,7 +2883,7 @@
                 self.assert_("wigit \"pci8086,4321\"\n" in da_contents)
                 self.assert_("zigit \"pci8086,1234\"\n" in da_contents)
                 # This one should fail
-                self.pkg("install dricon@3", exit=1)
+                self.pkg("%s dricon@3" % install_cmd, exit=1)
 
         def test_driver_policy_removal(self):
                 """Test for bug #9568 - that removing a policy for a
@@ -2541,6 +2891,10 @@
                 works successfully.
                 """
 
+                self.driver_policy_removal_helper("install")
+                self.driver_policy_removal_helper("exact-install")
+
+        def driver_policy_removal_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.dripol1, self.dripol2))
 
                 self.image_create(self.rurl)
@@ -2548,7 +2902,7 @@
                 self.pkg("list -afv")
 
                 # Should install the frigit driver with a policy.
-                self.pkg("install dripol@1")
+                self.pkg("%s dripol@1" % install_cmd)
 
                 # Check that there is a policy entry for this
                 # device in /etc/security/device_policy
@@ -2557,7 +2911,7 @@
                 self.assert_("frigit:*\tread_priv_set=net_rawaccess\twrite_priv_set=net_rawaccess\n" in dp_contents)
 
                 # Should reinstall the frigit driver without a policy.
-                self.pkg("install dripol@2")
+                self.pkg("%s dripol@2" % install_cmd)
 
                 # Check that there is no longer a policy entry for this
                 # device in /etc/security/device_policy
@@ -2569,14 +2923,18 @@
                 """Verify that file preserve=true works as expected during
                 package install, update, upgrade, and removal."""
 
+                self.file_preserve("install")
+                self.file_preserve("exact-install")
+
+        def file_preserve(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.preserve1, self.preserve2,
                     self.preserve3, self.renpreserve))
                 self.image_create(self.rurl)
 
                 # If there are no local modifications, no preservation should be
                 # done.  First with no content change ...
-                self.pkg("install preserve@1")
-                self.pkg("install preserve@2")
+                self.pkg("%s preserve@1" % install_cmd)
+                self.pkg("%s preserve@2" % install_cmd)
                 self.file_contains("testme", "preserve1")
                 self.pkg("verify preserve")
 
@@ -2599,10 +2957,10 @@
 
                 # Modify the file locally and update to a version where the
                 # content changes.
-                self.pkg("install preserve@1")
+                self.pkg("%s preserve@1" % install_cmd)
                 self.file_append("testme", "junk")
                 self.file_contains("testme", "preserve1")
-                self.pkg("install preserve@3")
+                self.pkg("%s preserve@3" % install_cmd)
                 self.file_contains("testme", "preserve1")
                 self.file_contains("testme", "junk")
                 self.file_doesnt_exist("testme.old")
@@ -2612,7 +2970,7 @@
 
                 # Modify the file locally and downgrade to a version where
                 # the content changes.
-                self.pkg("install preserve@3")
+                self.pkg("%s preserve@3" % install_cmd)
                 self.file_append("testme", "junk")
                 self.file_contains("testme", "preserve3")
                 self.pkg("update preserve@1")
@@ -2627,10 +2985,10 @@
 
                 # Modify the file locally and update to a version where just the
                 # mode changes.
-                self.pkg("install preserve@1")
+                self.pkg("%s preserve@1" % install_cmd)
                 self.file_append("testme", "junk")
 
-                self.pkg("install preserve@2")
+                self.pkg("%s preserve@2" % install_cmd)
                 self.file_contains("testme", "preserve1")
                 self.file_contains("testme", "junk")
                 self.file_doesnt_exist("testme.old")
@@ -2643,14 +3001,14 @@
                 self.file_doesnt_exist("testme.new")
                 self.file_doesnt_exist("testme.update")
 
-                self.pkg("install preserve@2")
+                self.pkg("%s preserve@2" % install_cmd)
                 self.file_doesnt_exist("testme.old")
                 self.file_doesnt_exist("testme.new")
 
                 # Remove the file locally and update the package; this should
                 # simply replace the missing file.
                 self.file_remove("testme")
-                self.pkg("install preserve@3")
+                self.pkg("%s preserve@3" % install_cmd)
                 self.pkg("verify preserve")
                 self.file_exists("testme")
 
@@ -2664,8 +3022,8 @@
 
                 # Preserved files don't get their mode changed, and verify will
                 # still balk, so fix up the mode.
-                self.pkg("install preserve@1")
-                self.pkg("install preserve@2")
+                self.pkg("%s preserve@1" % install_cmd)
+                self.pkg("%s preserve@2" % install_cmd)
                 self.file_chmod("testme", 0640)
                 self.pkg("verify preserve")
 
@@ -2677,7 +3035,7 @@
 
                 # Verify preserve works across package rename with and without
                 # original_name use and even when the original file is missing.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 foo1_path = os.path.join(self.get_img_path(), "foo1")
                 self.assert_(os.path.isfile(foo1_path))
                 bronze1_path = os.path.join(self.get_img_path(), "bronze1")
@@ -2697,7 +3055,7 @@
                 # preserved files.  They should remain empty even though one is
                 # changing names and the other is simply being preserved across
                 # a package rename.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 open(foo1_path, "wb").close()
                 open(bronze1_path, "wb").close()
                 self.pkg("update orig_pkg")
@@ -2711,7 +3069,7 @@
                 # Update across the rename boundary, then verify that a change
                 # in file name will cause re-delivery of preserved files, but
                 # unchanged, preserved files will not be re-delivered.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 os.unlink(foo1_path)
                 os.unlink(bronze1_path)
                 self.pkg("update orig_pkg")
@@ -2728,7 +3086,7 @@
 
                 # Verify that unmodified, preserved files will not be salvaged
                 # on uninstall.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_contains("testme", "preserve1")
                 self.pkg("uninstall preserve")
                 salvaged = [
@@ -2739,7 +3097,7 @@
 
                 # Verify that modified, preserved files will be salvaged
                 # on uninstall.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_contains("testme", "preserve1")
                 self.file_append("testme", "junk")
                 self.pkg("uninstall preserve")
@@ -2748,14 +3106,18 @@
         def test_file_preserve_renameold(self):
                 """Make sure that file upgrade with preserve=renameold works."""
 
+                self.file_preserve_renameold_helper("install")
+                self.file_preserve_renameold_helper("exact-install")
+
+        def file_preserve_renameold_helper(self, install_cmd):
                 plist = self.pkgsend_bulk(self.rurl, (self.renameold1,
                     self.renameold2, self.renameold3))
                 self.image_create(self.rurl)
 
                 # If there are no local modifications, no preservation should be
                 # done.  First with no content change ...
-                self.pkg("install renold@1")
-                self.pkg("install renold@2")
+                self.pkg("%s renold@1" % install_cmd)
+                self.pkg("%s renold@2" % install_cmd)
                 self.file_contains("testme", "renold1")
                 self.file_doesnt_exist("testme.old")
                 self.file_doesnt_exist("testme.new")
@@ -2763,8 +3125,8 @@
                 self.pkg("uninstall renold")
 
                 # ... and again with content change.
-                self.pkg("install renold@1")
-                self.pkg("install renold@3")
+                self.pkg("%s renold@1" % install_cmd)
+                self.pkg("%s renold@3" % install_cmd)
                 self.file_contains("testme", "renold3")
                 self.file_doesnt_exist("testme.old")
                 self.file_doesnt_exist("testme.new")
@@ -2773,9 +3135,9 @@
 
                 # Modify the file locally and update to a version where the
                 # content changes.
-                self.pkg("install renold@1")
+                self.pkg("%s renold@1" % install_cmd)
                 self.file_append("testme", "junk")
-                self.pkg("install renold@3")
+                self.pkg("%s renold@3" % install_cmd)
                 self.file_contains("testme.old", "junk")
                 self.file_doesnt_contain("testme", "junk")
                 self.file_contains("testme", "renold3")
@@ -2786,9 +3148,9 @@
 
                 # Modify the file locally and update to a version where just the
                 # mode changes.
-                self.pkg("install renold@1")
+                self.pkg("%s renold@1" % install_cmd)
                 self.file_append("testme", "junk")
-                self.pkg("install renold@2")
+                self.pkg("%s renold@2" % install_cmd)
                 self.file_contains("testme.old", "junk")
                 self.file_doesnt_contain("testme", "junk")
                 self.file_contains("testme", "renold1")
@@ -2798,23 +3160,27 @@
 
                 # Remove the file locally and update the package; this should
                 # simply replace the missing file.
-                self.pkg("install renold@1")
+                self.pkg("%s renold@1" % install_cmd)
                 self.file_remove("testme")
-                self.pkg("install renold@2")
+                self.pkg("%s renold@2" % install_cmd)
                 self.pkg("verify renold")
                 self.pkg("uninstall renold")
 
         def test_file_preserve_renamenew(self):
                 """Make sure that file ugprade with preserve=renamenew works."""
 
+                self.file_preserve_renamenew_helper("install")
+                self.file_preserve_renamenew_helper("exact-install")
+
+        def file_preserve_renamenew_helper(self, install_cmd):
                 plist = self.pkgsend_bulk(self.rurl, (self.renamenew1,
                     self.renamenew2, self.renamenew3))
                 self.image_create(self.rurl)
 
                 # If there are no local modifications, no preservation should be
                 # done.  First with no content change ...
-                self.pkg("install rennew@1")
-                self.pkg("install rennew@2")
+                self.pkg("%s rennew@1" % install_cmd)
+                self.pkg("%s rennew@2" % install_cmd)
                 self.file_contains("testme", "rennew1")
                 self.file_doesnt_exist("testme.new")
                 self.file_doesnt_exist("testme.old")
@@ -2822,8 +3188,8 @@
                 self.pkg("uninstall rennew")
 
                 # ... and again with content change
-                self.pkg("install rennew@1")
-                self.pkg("install rennew@3")
+                self.pkg("%s rennew@1" % install_cmd)
+                self.pkg("%s rennew@3" % install_cmd)
                 self.file_contains("testme", "rennew3")
                 self.file_doesnt_exist("testme.new")
                 self.file_doesnt_exist("testme.old")
@@ -2832,9 +3198,9 @@
 
                 # Modify the file locally and update to a version where the
                 # content changes.
-                self.pkg("install rennew@1")
+                self.pkg("%s rennew@1" % install_cmd)
                 self.file_append("testme", "junk")
-                self.pkg("install rennew@3")
+                self.pkg("%s rennew@3" % install_cmd)
                 self.file_contains("testme", "junk")
                 self.file_doesnt_contain("testme.new", "junk")
                 self.file_contains("testme.new", "rennew3")
@@ -2846,9 +3212,9 @@
 
                 # Modify the file locally and update to a version where just the
                 # mode changes.
-                self.pkg("install rennew@1")
+                self.pkg("%s rennew@1" % install_cmd)
                 self.file_append("testme", "junk")
-                self.pkg("install rennew@2")
+                self.pkg("%s rennew@2" % install_cmd)
                 self.file_contains("testme", "junk")
                 self.file_doesnt_contain("testme.new", "junk")
                 self.file_contains("testme.new", "rennew1")
@@ -2863,9 +3229,9 @@
 
                 # Remove the file locally and update the package; this should
                 # simply replace the missing file.
-                self.pkg("install rennew@1")
+                self.pkg("%s rennew@1" % install_cmd)
                 self.file_remove("testme")
-                self.pkg("install rennew@2")
+                self.pkg("%s rennew@2" % install_cmd)
                 self.file_doesnt_exist("testme.new")
                 self.file_doesnt_exist("testme.old")
                 self.pkg("verify rennew")
@@ -2874,6 +3240,10 @@
         def test_file_preserve_legacy(self):
                 """Verify that preserve=legacy works as expected."""
 
+                self.file_preserve_legacy_helper("install")
+                self.file_preserve_legacy_helper("exact-install")
+
+        def file_preserve_legacy_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.preslegacy,
                     self.renpreslegacy))
                 self.image_create(self.rurl)
@@ -2888,7 +3258,7 @@
                 # install if a package being installed delivers the same file
                 # and that the new file will be installed.
                 self.file_append("testme", "unpackaged")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_contains("testme", "preserve1")
                 self.__salvage_file_contains(sroot, "testme", "unpackaged")
                 shutil.rmtree(sroot)
@@ -2921,14 +3291,14 @@
                 # Verify that an initial install of an action with
                 # preserve=legacy will not install the payload of the action.
                 self.pkg("uninstall preslegacy")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_doesnt_exist("testme")
 
                 # Verify that if the original preserved file is missing during
                 # a transition to preserve=legacy from some other state that
                 # the new action is still delivered and the operation succeeds.
                 self.pkg("uninstall preslegacy")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_remove("testme")
                 self.pkg("update")
                 self.file_contains("testme", "preserve3")
@@ -2936,7 +3306,7 @@
                 # Verify that a preserved file can be moved from one package to
                 # another and transition to preserve=legacy at the same time.
                 self.pkg("uninstall preslegacy")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_exists("testme")
                 self.pkg("update")
                 self.file_contains("testme.legacy", "preserve1")
@@ -2944,9 +3314,14 @@
 
         def test_directory_salvage(self):
                 """Make sure basic directory salvage works as expected"""
+
+                self.directory_salvage_helper("install")
+                self.directory_salvage_helper("exact-install")
+
+        def directory_salvage_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, self.salvage)
                 self.image_create(self.rurl)
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_append("var/mail/foo", "foo's mail")
                 self.file_append("var/mail/bar", "bar's mail")
                 self.file_append("var/mail/baz", "baz's mail")
@@ -2959,12 +3334,16 @@
                 """Make sure directory salvage works as expected when salvaging
                 content to an existing packaged directory."""
 
+                self.directory_salvage_persistent_helper("install")
+                self.directory_salvage_persistent_helper("exact-install")
+
+        def directory_salvage_persistent_helper(self, install_cmd):
                 # we salvage content from two directories,
                 # var/noodles and var/spaghetti each of which disappear over
                 # subsequent updates.
                 self.pkgsend_bulk(self.rurl, self.salvage)
                 self.image_create(self.rurl)
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_append("var/mail/foo", "foo's mail")
                 self.file_append("var/noodles/noodles.txt", "yum")
                 self.pkg("update [email protected]")
@@ -2977,7 +3356,7 @@
 
                 # ensure that we can jump from 1.0 to 3.0 directly.
                 self.image_create(self.rurl)
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_append("var/noodles/noodles.txt", "yum")
                 self.pkg("update  [email protected]")
                 self.file_exists("var/persistent/noodles.txt")
@@ -2985,10 +3364,15 @@
         def test_special_salvage(self):
                 """Make sure salvaging directories with special files works as
                 expected."""
+
+                self.special_salvage_helper("install")
+                self.special_salvage_helper("exact-install")
+
+        def special_salvage_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, self.salvage_special)
                 self.image_create(self.rurl, destroy=True, fs=("var",))
 
-                self.pkg("install salvage-special")
+                self.pkg("%s salvage-special" % install_cmd)
 
                 os.mkfifo(os.path.join(self.img_path(), "salvage", "fifo"))
                 sock = socket.socket(socket.AF_UNIX)
@@ -3032,11 +3416,15 @@
                 """Ensure that files transitioning to a link still follow
                 original_name preservation rules."""
 
+                self.link_preserve_helper("install")
+                self.link_preserve_helper("exact-install")
+
+        def link_preserve_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.linkpreserve))
                 self.image_create(self.rurl, destroy=True, fs=("var",))
 
                 # Install package with original config file location.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 cfg_path = os.path.join("etc", "ssh", "sshd_config")
                 abs_path = os.path.join(self.get_img_path(), cfg_path)
 
@@ -3056,7 +3444,7 @@
 
                 # Uninstall, then install original version again.
                 self.pkg("uninstall linkpreserve")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.file_contains(cfg_path, "preserve1")
 
                 # Install new package version and verify that unmodified file is
@@ -3069,9 +3457,13 @@
                 contains more hash attributes than the old action, that the
                 upgrade works."""
 
+                self.many_hashalgs_helper("install")
+                self.many_hashalgs_helper("exact-install")
+
+        def many_hashalgs_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.iron10))
                 self.image_create(self.rurl, destroy=True)
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("contents -m iron")
                 # We have not enabled SHA2 hash publication yet.
                 self.assert_("pkg.hash.sha256" not in self.output)
@@ -3087,7 +3479,7 @@
                 # This also tests package retrieval: we always retrieve packages
                 # with the least-preferred hash, but verify with the
                 # most-preferred hash.
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("contents -m iron")
                 self.assert_("pkg.hash.sha256" in self.output)
 
@@ -3441,7 +3833,7 @@
 
                 self.make_misc_files(self.misc_files)
 
-        def test_basics_0(self):
+        def test_basics_0_install(self):
                 """Send basic infrastructure, install and uninstall."""
 
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1))
@@ -3459,7 +3851,24 @@
                 self.pkg("uninstall basics basics1")
                 self.pkg("verify")
 
-        def test_grouptest(self):
+        def test_basics_0_exact_install(self):
+                """Send basic infrastructure, exact-install and uninstall."""
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1))
+                self.image_create(self.rurl)
+
+                self.pkg("list -a")
+                self.pkg("list", exit=1)
+
+                self.pkg("exact-install basics basics1")
+
+                self.pkg("list")
+                self.pkg("verify")
+
+                self.pkg("uninstall basics basics1")
+                self.pkg("verify")
+
+        def test_grouptest_install(self):
 
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1,
                     self.grouptest))
@@ -3472,7 +3881,19 @@
                 self.pkg("uninstall grouptest")
                 self.pkg("verify")
 
-        def test_usertest(self):
+        def test_grouptest_exact_install(self):
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1,
+                    self.grouptest))
+                self.image_create(self.rurl)
+                self.pkg("exact-install basics basics1")
+                self.pkg("exact-install grouptest")
+                self.pkg("verify")
+                self.pkg("list basics1", exit=1)
+                self.pkg("uninstall grouptest")
+                self.pkg("verify")
+
+        def test_usertest_install(self):
 
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1,
                     self.grouptest, self.usertest10))
@@ -3493,7 +3914,27 @@
                 self.pkg("uninstall usertest")
                 self.pkg("verify")
 
-        def test_primordial_usergroup(self):
+        def test_usertest_exact_install(self):
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1,
+                    self.grouptest, self.usertest10))
+                self.image_create(self.rurl)
+                self.pkg("exact-install basics basics1")
+                self.pkg("exact-install usertest")
+                self.pkg("verify")
+                self.pkg("list basics1", exit=1)
+                self.pkg("contents -m usertest")
+
+                self.pkgsend_bulk(self.rurl, self.usertest11)
+                self.pkg("refresh")
+                self.pkg("exact-install usertest")
+                self.pkg("verify")
+                self.pkg("contents -m usertest")
+
+                self.pkg("uninstall usertest")
+                self.pkg("verify")
+
+        def test_primordial_usergroup_install(self):
                 """Ensure that we can install user and group actions in the same
                 transaction as /etc/passwd, /etc/group, etc."""
 
@@ -3507,7 +3948,21 @@
                 self.image_create(self.rurl)
                 self.pkg("install singleuser", exit=1)
 
-        def test_ftpuser(self):
+        def test_primordial_usergroup_exact_install(self):
+                """Ensure that we can exact-install user and group actions in
+                the same transaction as /etc/passwd, /etc/group, etc."""
+
+                self.pkgsend_bulk(self.rurl, [self.basics0, self.singleuser])
+
+                self.image_create(self.rurl)
+                self.pkg("exact-install basics")
+                self.pkg("verify")
+
+                self.image_destroy()
+                self.image_create(self.rurl)
+                self.pkg("exact-install  basics singleuser")
+
+        def test_ftpuser_install(self):
                 """Make sure we correctly handle /etc/ftpd/ftpusers."""
 
                 notftpuser = """
@@ -3577,7 +4032,80 @@
                 self.assert_("gonzo\n" not in file(fpath).readlines())
                 self.pkg("verify ftpuserimp")
 
-        def test_groupverify(self):
+        def test_ftpuser_exact_install(self):
+                """Make sure we correctly handle /etc/ftpd/ftpusers."""
+
+                notftpuser = """
+                open notftpuser@1
+                add user username=animal group=root ftpuser=false
+                add depend fmri=pkg:/[email protected] type=require
+                close"""
+
+                ftpuserexp = """
+                open ftpuserexp@1
+                add user username=fozzie group=root ftpuser=true
+                add depend fmri=pkg:/[email protected] type=require
+                close"""
+
+                ftpuserimp = """
+                open ftpuserimp@1
+                add user username=gonzo group=root
+                add depend fmri=pkg:/[email protected] type=require
+                close"""
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, notftpuser,
+                    ftpuserexp, ftpuserimp))
+                self.image_create(self.rurl)
+
+                self.pkg("install basics")
+
+                # Add a user with ftpuser=false.  Make sure the user is added to
+                # the file, and that the user verifies.
+                self.pkg("exact-install notftpuser")
+                fpath = self.get_img_path() + "/etc/ftpd/ftpusers"
+                self.assert_("animal\n" in file(fpath).readlines())
+                self.pkg("verify notftpuser")
+
+                # Put a user into the ftpusers file as shipped, then add that
+                # user, with ftpuser=false.  Make sure the user remains in the
+                # file, and that the user verifies.
+                self.pkg("uninstall notftpuser")
+                file(fpath, "a").write("animal\n")
+                self.pkg("exact-install notftpuser")
+                self.assert_("animal\n" in file(fpath).readlines())
+                self.pkg("verify notftpuser")
+
+                # Add a user with an explicit ftpuser=true.  Make sure the user
+                # is not added to the file, and that the user verifies.
+                self.pkg("exact-install ftpuserexp")
+                self.assert_("fozzie\n" not in file(fpath).readlines())
+                self.pkg("verify ftpuserexp")
+
+                # Put a user into the ftpusers file as shipped, then add that
+                # user, with an explicit ftpuser=true.  Make sure the user is
+                # stripped from the file, and that the user verifies.
+                self.pkg("uninstall ftpuserexp")
+                file(fpath, "a").write("fozzie\n")
+                self.pkg("exact-install ftpuserexp")
+                self.assert_("fozzie\n" not in file(fpath).readlines())
+                self.pkg("verify ftpuserexp")
+
+                # Add a user with an implicit ftpuser=true.  Make sure the user
+                # is not added to the file, and that the user verifies.
+                self.pkg("exact-install ftpuserimp")
+                self.assert_("gonzo\n" not in file(fpath).readlines())
+                self.pkg("verify ftpuserimp")
+
+                # Put a user into the ftpusers file as shipped, then add that
+                # user, with an implicit ftpuser=true.  Make sure the user is
+                # stripped from the file, and that the user verifies.
+                self.pkg("uninstall ftpuserimp")
+                file(fpath, "a").write("gonzo\n")
+                self.pkg("exact-install ftpuserimp")
+                self.assert_("gonzo\n" not in file(fpath).readlines())
+                self.pkg("verify ftpuserimp")
+
+        def test_groupverify_install(self):
                 """Make sure we correctly verify group actions when users have
                 been added."""
 
@@ -3596,25 +4124,64 @@
                 self.pkg("install simplegroup")
                 self.pkg("verify simplegroup")
 
-		# add additional members to group & verify
+                # add additional members to group & verify
                 gpath = self.get_img_file_path("etc/group")
                 gdata = file(gpath).readlines()
                 gdata[-1] = gdata[-1].rstrip() + "kermit,misspiggy\n"
                 file(gpath, "w").writelines(gdata)
                 self.pkg("verify simplegroup")
-		self.pkg("uninstall simplegroup")
-
-		# verify that groups appear in gid order.
-		self.pkg("install simplegroup simplegroup2")
-		self.pkg("verify")
-		gdata = file(gpath).readlines()
-		self.assert_(gdata[-1].find("muppets2") == 0)
-		self.pkg("uninstall simple*")
-		self.pkg("install simplegroup2 simplegroup")
-		gdata = file(gpath).readlines()
-		self.assert_(gdata[-1].find("muppets2") == 0)
-
-        def test_preexisting_group(self):
+                self.pkg("uninstall simplegroup")
+
+                # verify that groups appear in gid order.
+                self.pkg("install simplegroup simplegroup2")
+                self.pkg("verify")
+                gdata = file(gpath).readlines()
+                self.assert_(gdata[-1].find("muppets2") == 0)
+                self.pkg("uninstall simple*")
+                self.pkg("install simplegroup2 simplegroup")
+                gdata = file(gpath).readlines()
+                self.assert_(gdata[-1].find("muppets2") == 0)
+
+        def test_groupverify_exact_install(self):
+                """Make sure we correctly verify group actions when users have
+                been added."""
+
+                simplegroups = """
+                open simplegroup@1
+                add group groupname=muppets gid=100
+                add depend fmri=pkg:/[email protected] type=require
+                close
+                open simplegroup2@1
+                add group groupname=muppets2 gid=101
+                add depend fmri=pkg:/[email protected] type=require
+                close"""
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, simplegroups))
+                self.image_create(self.rurl)
+
+                self.pkg("install basics")
+                self.pkg("exact-install simplegroup")
+                self.pkg("verify simplegroup")
+
+                # add additional members to group & verify
+                gpath = self.get_img_file_path("etc/group")
+                gdata = file(gpath).readlines()
+                gdata[-1] = gdata[-1].rstrip() + "kermit,misspiggy\n"
+                file(gpath, "w").writelines(gdata)
+                self.pkg("verify simplegroup")
+                self.pkg("uninstall simplegroup")
+
+                # verify that groups appear in gid order.
+                self.pkg("exact-install simplegroup simplegroup2")
+                self.pkg("verify")
+                gdata = file(gpath).readlines()
+                self.assert_(gdata[-1].find("muppets2") == 0)
+                self.pkg("uninstall simple*")
+                self.pkg("exact-install simplegroup2 simplegroup")
+                gdata = file(gpath).readlines()
+                self.assert_(gdata[-1].find("muppets2") == 0)
+
+        def test_preexisting_group_install(self):
                 """Make sure we correct any errors in pre-existing group actions"""
                 simplegroup = """
                 open simplegroup@1
@@ -3622,7 +4189,7 @@
                 close
                 open simplegroup@2
                 add dir path=/etc/muppet owner=root group=muppets mode=755
-		add group groupname=muppets gid=70
+                add group groupname=muppets gid=70
                 close"""
 
                 self.pkgsend_bulk(self.rurl, (self.basics0, simplegroup))
@@ -3636,23 +4203,56 @@
                 self.pkg("verify")
                 self.pkg("install simplegroup@1")
                 self.pkg("verify simplegroup")
-		# check # lines beginning w/ 'muppets' in group file
+                # check # lines beginning w/ 'muppets' in group file
                 gdata = file(gpath).readlines()
-		self.assert_(
-		    len([a for a in gdata if a.find("muppets") == 0]) == 1)
-
-		# make sure we can add new version of same package
-		self.pkg("update simplegroup")
-		self.pkg("verify simplegroup")
-
-	def test_missing_ownergroup(self):
-		"""test what happens when a owner or group is missing"""
-		missing = """
+                self.assert_(
+                    len([a for a in gdata if a.find("muppets") == 0]) == 1)
+
+                # make sure we can add new version of same package
+                self.pkg("update simplegroup")
+                self.pkg("verify simplegroup")
+
+        def test_preexisting_group_exact_install(self):
+                """Make sure we correct any errors in pre-existing group actions"""
+                simplegroup = """
+                open simplegroup@1
+                add group groupname=muppets gid=70
+                add depend fmri=pkg:/[email protected] type=require
+                close
+                open simplegroup@2
+                add dir path=/etc/muppet owner=root group=muppets mode=755
+                add group groupname=muppets gid=70
+                add depend fmri=pkg:/[email protected] type=require
+                close"""
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, simplegroup))
+                self.image_create(self.rurl)
+
+                self.pkg("install basics")
+                gpath = self.get_img_file_path("etc/group")
+                gdata = file(gpath).readlines()
+                gdata = ["muppets::1010:\n"] + gdata
+                file(gpath, "w").writelines(gdata)
+                self.pkg("verify")
+                self.pkg("exact-install simplegroup@1")
+                self.pkg("verify simplegroup")
+                # check # lines beginning w/ 'muppets' in group file
+                gdata = file(gpath).readlines()
+                self.assert_(
+                    len([a for a in gdata if a.find("muppets") == 0]) == 1)
+
+                # make sure we can add new version of same package
+                self.pkg("update simplegroup")
+                self.pkg("verify simplegroup")
+
+        def test_missing_ownergroup_install(self):
+                """test what happens when a owner or group is missing"""
+                missing = """
                 open missing_group@1
-		add dir path=etc/muppet1 owner=root group=muppets mode=755
+                add dir path=etc/muppet1 owner=root group=muppets mode=755
                 close
                 open missing_owner@1
-		add dir path=etc/muppet2 owner=muppets group=root mode=755
+                add dir path=etc/muppet2 owner=muppets group=root mode=755
                 close
                 open muppetsuser@1
                 add user username=muppets group=bozomuppets uid=777
@@ -3667,41 +4267,106 @@
 
                 self.pkgsend_bulk(self.rurl, (self.basics0, missing))
                 self.image_create(self.rurl)
-		self.pkg("install basics")
-
-		# try installing directory w/ a non-existing group
-		self.pkg("install missing_group@1", exit=1)
-		# try installing directory w/ a non-existing owner
-		self.pkg("install missing_owner@1", exit=1)
-		# try installing user w/ unknown group
-		self.pkg("install muppetsuser@1", exit=1)
-		# install group
-		self.pkg("install muppetsgroup")
-		# install working user & see if it all works.
-		self.pkg("install muppetsuser@2")
-		self.pkg("install missing_group@1")
-		self.pkg("install missing_owner@1")
-	        self.pkg("verify")
-		# edit group file to remove muppets group
+                self.pkg("install basics")
+
+                # try installing directory w/ a non-existing group
+                self.pkg("install missing_group@1", exit=1)
+                # try installing directory w/ a non-existing owner
+                self.pkg("install missing_owner@1", exit=1)
+                # try installing user w/ unknown group
+                self.pkg("install muppetsuser@1", exit=1)
+                # install group
+                self.pkg("install muppetsgroup")
+                # install working user & see if it all works.
+                self.pkg("install muppetsuser@2")
+                self.pkg("install missing_group@1")
+                self.pkg("install missing_owner@1")
+                self.pkg("verify")
+                # edit group file to remove muppets group
                 gpath = self.get_img_file_path("etc/group")
                 gdata = file(gpath).readlines()
                 file(gpath, "w").writelines(gdata[0:-1])
-		# verify that we catch missing group
-		# in both group and user actions
-		self.pkg("verify muppetsgroup", 1)
-		self.pkg("verify muppetsuser", 1)
-		self.pkg("fix muppetsgroup", 0)
-		self.pkg("verify muppetsgroup muppetsuser missing*")
-		self.pkg("uninstall missing*")		
-		# try installing w/ broken group
+
+                # verify that we catch missing group
+                # in both group and user actions
+                self.pkg("verify muppetsgroup", 1)
+                self.pkg("verify muppetsuser", 1)
+                self.pkg("fix muppetsgroup", 0)
+                self.pkg("verify muppetsgroup muppetsuser missing*")
+                self.pkg("uninstall missing*")
+                # try installing w/ broken group
+
                 file(gpath, "w").writelines(gdata[0:-1])
-		self.pkg("install missing_group@1", 1)
-		self.pkg("fix muppetsgroup")
-		self.pkg("install missing_group@1")
-		self.pkg("install missing_owner@1")
-		self.pkg("verify muppetsgroup muppetsuser missing*")
-
-        def test_userverify(self):
+                self.pkg("install missing_group@1", 1)
+                self.pkg("fix muppetsgroup")
+                self.pkg("install missing_group@1")
+                self.pkg("install missing_owner@1")
+                self.pkg("verify muppetsgroup muppetsuser missing*")
+
+        def test_missing_ownergroup_exact_install(self):
+                """Test what happens when a owner or group is missing."""
+
+                missing = """
+                open missing_group@1
+                add dir path=etc/muppet1 owner=root group=muppets mode=755
+                 add depend fmri=pkg:/[email protected] type=require
+                close
+                open missing_owner@1
+                add dir path=etc/muppet2 owner=muppets group=root mode=755
+                 add depend fmri=pkg:/[email protected] type=require
+                close
+                open muppetsuser@1
+                add user username=muppets group=bozomuppets uid=777
+                add depend fmri=pkg:/[email protected] type=require
+                close
+                open muppetsuser@2
+                add user username=muppets group=muppets uid=777
+                add depend fmri=pkg:/[email protected] type=require
+                add depend fmri=pkg:/muppetsgroup@1 type=require
+                close
+                open muppetsgroup@1
+                add group groupname=muppets gid=777
+                close
+                """
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, missing))
+                self.image_create(self.rurl)
+                self.pkg("install basics")
+
+                # try exact-installing directory w/ a non-existing group
+                self.pkg("exact-install missing_group@1", exit=1)
+                # try exact-installing directory w/ a non-existing owner
+                self.pkg("exact-install missing_owner@1", exit=1)
+                # try exact-installing user w/ unknown group
+                self.pkg("exact-install muppetsuser@1", exit=1)
+
+                # install group
+                self.pkg("install muppetsgroup")
+                # install working user & see if it all works.
+                self.pkg("install muppetsuser@2")
+                self.pkg("exact-install muppetsgroup missing_group@1")
+                self.pkg("exact-install muppetsuser@2 missing_owner@1")
+                self.pkg("verify")
+                # edit group file to remove muppets group
+                gpath = self.get_img_file_path("etc/group")
+                gdata = file(gpath).readlines()
+                file(gpath, "w").writelines(gdata[0:-1])
+                # verify that we catch missing group
+                # in both group and user actions
+                self.pkg("verify muppetsgroup", 1)
+                self.pkg("verify muppetsuser", 1)
+                self.pkg("fix muppetsgroup", 0)
+                self.pkg("verify muppetsgroup muppetsuser missing*")
+                self.pkg("uninstall missing*")
+                # try installing w/ broken group
+                file(gpath, "w").writelines(gdata[0:-1])
+                self.pkg("exact-install missing_group@1", 1)
+                self.pkg("fix muppetsgroup")
+                self.pkg("exact-install muppetsgroup missing_group@1")
+                self.pkg("exact-install muppetsuser@2 missing_owner@1")
+                self.pkg("verify muppetsgroup muppetsuser missing*")
+
+        def test_userverify_install(self):
                 """Make sure we correctly verify user actions when the on-disk
                 databases have been modified."""
 
@@ -3827,7 +4492,7 @@
                 self.pkg("verify simpleuser")
 
                 # verify that passwords set to anything
-		# other than '*LK*" or 'NP' in manifest
+                # other than '*LK*" or 'NP' in manifest
                 # do not cause verify errors if changed.
                 self.pkg("install --reject simpleuser simpleuser2@1")
                 self.pkg("verify simpleuser2")
@@ -3845,31 +4510,198 @@
                 sdata = file(spath).readlines()
                 sdata[-1].index("*LK*")
 
-		# ascertain that users are added in uid order when
-		# installed at the same time.
-		self.pkg("uninstall simpleuser2")
-		self.pkg("install simpleuser simpleuser2")
-
-		pdata = file(ppath).readlines()
-		pdata[-1].index("kermit")
-
-		self.pkg("uninstall simpleuser simpleuser2")
-		self.pkg("install simpleuser2 simpleuser")
-
-		pdata = file(ppath).readlines()
-		pdata[-1].index("kermit")
+                # ascertain that users are added in uid order when
+                # installed at the same time.
+                self.pkg("uninstall simpleuser2")
+                self.pkg("install simpleuser simpleuser2")
+
+                pdata = file(ppath).readlines()
+                pdata[-1].index("kermit")
+
+                self.pkg("uninstall simpleuser simpleuser2")
+                self.pkg("install simpleuser2 simpleuser")
+
+                pdata = file(ppath).readlines()
+                pdata[-1].index("kermit")
+
+        def test_userverify_exact_install(self):
+                """Make sure we correctly verify user actions when the on-disk
+                databases have been modified."""
+
+                simpleusers = """
+                open simpleuser@1
+                add user username=misspiggy group=root gcos-field="& loves Kermie" login-shell=/bin/sh uid=5
+                add depend fmri=pkg:/[email protected] type=require
+                close
+                open simpleuser2@1
+                add user username=kermit group=root gcos-field="& loves mspiggy" login-shell=/bin/sh password=UP uid=6
+                add depend fmri=pkg:/[email protected] type=require
+                close
+                open simpleuser2@2
+                add user username=kermit group=root gcos-field="& loves mspiggy" login-shell=/bin/sh uid=6
+                add depend fmri=pkg:/[email protected] type=require
+                close"""
+
+
+                self.pkgsend_bulk(self.rurl, (self.basics0, simpleusers))
+                self.image_create(self.rurl)
+
+                self.pkg("install basics")
+                self.pkg("exact-install simpleuser")
+                self.pkg("verify simpleuser")
+
+                ppath = self.get_img_path() + "/etc/passwd"
+                pdata = file(ppath).readlines()
+                spath = self.get_img_path() + "/etc/shadow"
+                sdata = file(spath).readlines()
+
+                def finderr(err):
+                        self.assert_("\t\t" + err in self.output)
+
+                # change a provided, empty-default field to something else
+                pdata[-1] = "misspiggy:x:5:0:& loves Kermie:/:/bin/zsh"
+                file(ppath, "w").writelines(pdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("login-shell: '/bin/zsh' should be '/bin/sh'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # change a provided, non-empty-default field to the default
+                pdata[-1] = "misspiggy:x:5:0:& User:/:/bin/sh"
+                file(ppath, "w").writelines(pdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("gcos-field: '& User' should be '& loves Kermie'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # change a non-provided, non-empty-default field to something
+                # other than the default
+                pdata[-1] = "misspiggy:x:5:0:& loves Kermie:/misspiggy:/bin/sh"
+                file(ppath, "w").writelines(pdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("home-dir: '/misspiggy' should be '/'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # add a non-provided, empty-default field
+                pdata[-1] = "misspiggy:x:5:0:& loves Kermie:/:/bin/sh"
+                sdata[-1] = "misspiggy:*LK*:14579:7:::::"
+                file(ppath, "w").writelines(pdata)
+                os.chmod(spath,
+                    stat.S_IMODE(os.stat(spath).st_mode)|stat.S_IWUSR)
+                file(spath, "w").writelines(sdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("min: '7' should be '<empty>'")
+                # fails fix since we don't repair shadow entries on purpose
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser", exit=1)
+                finderr("min: '7' should be '<empty>'")
+
+                # remove a non-provided, non-empty-default field
+                pdata[-1] = "misspiggy:x:5:0:& loves Kermie::/bin/sh"
+                sdata[-1] = "misspiggy:*LK*:14579::::::"
+                file(ppath, "w").writelines(pdata)
+                file(spath, "w").writelines(sdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("home-dir: '' should be '/'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # remove a provided, non-empty-default field
+                pdata[-1] = "misspiggy:x:5:0::/:/bin/sh"
+                file(ppath, "w").writelines(pdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("gcos-field: '' should be '& loves Kermie'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # remove a provided, empty-default field
+                pdata[-1] = "misspiggy:x:5:0:& loves Kermie:/:"
+                file(ppath, "w").writelines(pdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("login-shell: '' should be '/bin/sh'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # remove the user from /etc/passwd
+                pdata[-1] = "misswiggy:x:5:0:& loves Kermie:/:"
+                file(ppath, "w").writelines(pdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("login-shell: '<missing>' should be '/bin/sh'")
+                finderr("gcos-field: '<missing>' should be '& loves Kermie'")
+                finderr("group: '<missing>' should be 'root'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # remove the user completely
+                pdata[-1] = "misswiggy:x:5:0:& loves Kermie:/:"
+                sdata[-1] = "misswiggy:*LK*:14579::::::"
+                file(ppath, "w").writelines(pdata)
+                file(spath, "w").writelines(sdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("username: '<missing>' should be 'misspiggy'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # change the password and show an error
+                self.pkg("verify simpleuser")
+                sdata[-1] = "misspiggy:NP:14579::::::"
+                file(spath, "w").writelines(sdata)
+                self.pkg("verify simpleuser", exit=1)
+                finderr("password: 'NP' should be '*LK*'")
+                self.pkg("fix simpleuser")
+                self.pkg("verify simpleuser")
+
+                # verify that passwords set to anything
+        # other than '*LK*" or 'NP' in manifest
+                # do not cause verify errors if changed.
+                self.pkg("exact-install --reject simpleuser simpleuser2@1")
+                self.pkg("verify simpleuser2")
+                pdata = file(ppath).readlines()
+                sdata = file(spath).readlines()
+                sdata[-1] = "kermit:$5$pWPEsjm2$GXjBRTjGeeWmJ81ytw3q1ah7QTaI7yJeRYZeyvB.Rp1:14579::::::"
+                file(spath, "w").writelines(sdata)
+                self.pkg("verify simpleuser2")
+
+                # verify that upgrading package to version that implicitly
+                # uses *LK* default causes password to change and that it
+                # verifies correctly
+                self.pkg("update simpleuser2@2")
+                self.pkg("verify simpleuser2")
+                sdata = file(spath).readlines()
+                sdata[-1].index("*LK*")
+
+                # ascertain that users are added in uid order when
+                # installed at the same time.
+                self.pkg("uninstall simpleuser2")
+                self.pkg("exact-install simpleuser simpleuser2")
+
+                pdata = file(ppath).readlines()
+                pdata[-1].index("kermit")
+
+                self.pkg("uninstall simpleuser simpleuser2")
+                self.pkg("exact-install simpleuser2 simpleuser")
+
+                pdata = file(ppath).readlines()
+                pdata[-1].index("kermit")
 
         def test_minugid(self):
                 """Ensure that an unspecified uid/gid results in the first
                 unused."""
 
+                self.minugid_helper("install")
+                self.minugid_helper("exact-install")
+
+        def minugid_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.ugidtest))
                 self.image_create(self.rurl)
 
                 # This will lay down the sample passwd file, group file, etc.
                 self.pkg("install basics")
-
-                self.pkg("install ugidtest")
+                if install_cmd == "install":
+                        self.pkg("install ugidtest")
+                else:
+                        self.pkg("exact-install basics ugidtest")
                 passwd_file = file(os.path.join(self.get_img_path(),
                     "/etc/passwd"))
                 for line in passwd_file:
@@ -3888,27 +4720,35 @@
                 that user in the same delta (mysql tripped over this early on
                 in IPS development)."""
 
+                self.upgrade_with_user_helper("install")
+                self.upgrade_with_user_helper("exact-install")
+
+        def upgrade_with_user_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.basics1,
                     self.silver10, self.silver20, self.grouptest))
                 self.image_create(self.rurl)
                 self.pkg("install [email protected]")
-                self.pkg("install [email protected]")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("list [email protected]")
                 self.pkg("verify -v")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
         def test_upgrade_garbage_passwd(self):
+                self.upgrade_garbage_passwd_helper("install")
+                self.upgrade_garbage_passwd_helper("exact-install")
+
+        def upgrade_garbage_passwd_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.singleuser))
                 self.image_create(self.rurl)
                 pwd_path = os.path.join(self.get_img_path(), "etc/passwd")
-
                 # Put a garbage line in /etc/passwd, and make sure we can
-                # install a user, uninstall the user, and preserve the garbage
-                # line.  Once with a blank line in the middle, once with a
-                # non-blank line with too few fields, once with a non-blank line
-                # with too many fields, and once with a blank line at the end.
+                # install or exact-install, uninstall a user, and preserve the
+                # garbage line.  Once with a blank line in the middle, once
+                # with a non-blank line with too few fields, once with a
+                # non-blank line with too many fields, and once with a blank
+                # line at the end.
                 for lineno, garbage in ((3, ""), (3, "garbage"),
                     (3, ":::::::::"), (100, "")):
                         garbage += "\n"
@@ -3919,7 +4759,10 @@
                                 pwd_file.truncate(0)
                                 pwd_file.seek(0)
                                 pwd_file.writelines(lines)
-                        self.pkg("install singleuser")
+                        if install_cmd == "install":
+                                self.pkg("%s singleuser" % install_cmd)
+                        else:
+                                self.pkg("%s basics singleuser" % install_cmd)
                         with file(pwd_path) as pwd_file:
                                 lines = pwd_file.readlines()
                                 self.assert_(garbage in lines)
@@ -3934,6 +4777,10 @@
                 """If a user is present in a secondary group list when the user
                 is installed, the client shouldn't crash."""
 
+                self.user_in_grouplist_helper("install")
+                self.user_in_grouplist_helper("exact-install")
+
+        def user_in_grouplist_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.basics0, self.only_user10))
                 self.image_create(self.rurl)
                 self.pkg("install [email protected]")
@@ -3944,7 +4791,10 @@
                         group_file.truncate(0)
                         group_file.seek(0)
                         group_file.writelines(lines)
-                self.pkg("install [email protected]")
+                if install_cmd == "install":
+                        self.pkg("install [email protected]")
+                else:
+                        self.pkg("exact-install [email protected] [email protected]")
 
         def test_invalid_open(self):
                 """Send invalid package definitions (invalid fmris); expect
@@ -3987,6 +4837,10 @@
                         self.pkgsend(self.rurl, "close -A")
 
         def test_devlink(self):
+                self.devlink_helper("install")
+                self.devlink_helper("exact-install")
+
+        def devlink_helper(self, install_cmd):
                 # driver actions are not valid except on OpenSolaris
                 if portable.util.get_canonical_os_name() != "sunos":
                         return
@@ -4026,7 +4880,7 @@
                 self.assert_(dllines[0].find("\t") > 0)
 
                 # Upgrade
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify -v")
 
                 dllines = readfile()
@@ -4052,7 +4906,7 @@
                 writefile(dllines)
 
                 # Upgrade
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
 
                 # Verify that we spewed a message on upgrade
                 self.assert_(self.output.find("not found") != -1)
@@ -4106,7 +4960,7 @@
                 dllines.append("type=ddi_pseudo;name=zorg\t\D\n")
                 writefile(dllines)
 
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 dllines = readfile()
                 self.failUnless(len(dllines) == 4, msg=dllines)
                 assertContents(dllines, ["zerg2", "zorg", "borg", "zork"])
@@ -4116,6 +4970,10 @@
                 upgrade.  This is the result of a bug in update_drv, but it's
                 not a bad idea to test some of this ourselves."""
 
+                self.driver_aliases_upgrade_helper("install")
+                self.driver_aliases_upgrade_helper("exact-install")
+
+        def driver_aliases_upgrade_helper(self, install_cmd):
                 # driver actions are not valid except on OpenSolaris
                 if portable.util.get_canonical_os_name() != "sunos":
                         return
@@ -4124,7 +4982,7 @@
                     self.devalias20])
 
                 self.image_create(self.rurl)
-                self.pkg("install devicebase devalias@1")
+                self.pkg("%s devicebase devalias@1" % install_cmd)
                 self.pkg("update devalias")
                 self.pkg("verify devalias")
 
@@ -4142,16 +5000,20 @@
                 """Make sure that an alias can be moved from one driver action
                 to another."""
 
+                self.driver_aliases_move_helper("install")
+                self.driver_aliases_move_helper("exact-install")
+
+        def driver_aliases_move_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, [self.devicebase,
                     self.devaliasmove10, self.devaliasmove20])
 
                 self.image_create(self.rurl)
-                self.pkg("install devicebase devaliasmove@1")
+                self.pkg("%s devicebase devaliasmove@1" % install_cmd)
                 self.pkg("update devaliasmove")
                 self.assert_("pci8086,5555" not in self.output)
 
         def test_uninstall_without_perms(self):
-                """Test for bug 4569"""
+                """Verify uninstall fails as expected for unprivileged users."""
 
                 pkg_list = [self.foo10, self.only_attr10, self.only_depend10,
                     self.only_directory10, self.only_file10,
@@ -4170,43 +5032,45 @@
                 name_pat = re.compile("^\s+open\s+(\S+)\@.*$")
 
                 def __manually_check_deps(name, install=True, exit=0):
-                        cmd = "install --no-refresh"
+                        cmd = ["install", "--no-refresh"]
                         if not install:
-                                cmd = "uninstall"
+                                cmd = ["uninstall"]
                         if name == "only_depend" and not install:
-                                self.pkg("uninstall foo", exit=exit)
+                                self.pkg(cmd + ["foo"], exit=exit)
                         elif name == "only_driver":
-                                self.pkg("%s devicebase" % cmd, exit=exit)
+                                self.pkg(cmd + ["devicebase"], exit=exit)
                         elif name == "only_group":
-                                self.pkg("%s basics" % cmd, exit=exit)
+                                self.pkg(cmd + ["basics"], exit=exit)
                         elif name == "only_hardlink":
-                                self.pkg("%s only_file" % cmd, exit=exit)
+                                self.pkg(cmd + ["only_file"], exit=exit)
                         elif name == "only_user":
                                 if install:
-                                        self.pkg("%s basics" % cmd, exit=exit)
-                                        self.pkg("%s only_group" % cmd, exit=exit)
+                                        self.pkg(cmd + ["basics"], exit=exit)
+                                        self.pkg(cmd + ["only_group"],
+                                            exit=exit)
                                 else:
-                                        self.pkg("%s only_group" % cmd, exit=exit)
-                                        self.pkg("%s basics" % cmd, exit=exit)
+                                        self.pkg(cmd + ["only_group"],
+                                            exit=exit)
+                                        self.pkg(cmd + ["basics"], exit=exit)
                 for p in pkg_list:
                         name_mat = name_pat.match(p.splitlines()[1])
                         pname = name_mat.group(1)
                         __manually_check_deps(pname, exit=[0, 4])
-                        self.pkg("install --no-refresh %s" % pname,
+                        self.pkg(["install", "--no-refresh", pname],
                             su_wrap=True, exit=1)
-                        self.pkg("install %s" % pname, su_wrap=True,
+                        self.pkg(["install", pname], su_wrap=True,
                             exit=1)
-                        self.pkg("install --no-refresh %s" % pname)
-                        self.pkg("uninstall %s" % pname, su_wrap=True,
+                        self.pkg(["install", "--no-refresh", pname])
+                        self.pkg(["uninstall", pname], su_wrap=True,
                             exit=1)
-                        self.pkg("uninstall %s" % pname)
+                        self.pkg(["uninstall", pname])
                         __manually_check_deps(pname, install=False)
 
                 for p in pkg_list:
                         name_mat = name_pat.match(p.splitlines()[1])
                         pname = name_mat.group(1)
                         __manually_check_deps(pname, exit=[0, 4])
-                        self.pkg("install --no-refresh %s" % pname)
+                        self.pkg(["install", "--no-refresh", pname])
 
                 for p in pkg_list:
                         self.pkgsend_bulk(self.rurl, p)
@@ -4215,17 +5079,17 @@
 
                 # Modifying operations require permissions needed to create and
                 # manage lock files.
-                self.pkg("update --no-refresh", su_wrap=True, exit=1)
-
-                self.pkg("refresh")
-                self.pkg("update", su_wrap=True, exit=1)
+                self.pkg(["update", "--no-refresh"], su_wrap=True, exit=1)
+
+                self.pkg(["refresh"])
+                self.pkg(["update"], su_wrap=True, exit=1)
                 # Should fail since user doesn't have permission to refresh
                 # publisher metadata.
-                self.pkg("refresh --full", su_wrap=True, exit=1)
-                self.pkg("refresh --full")
-                self.pkg("update --no-refresh", su_wrap=True,
+                self.pkg(["refresh", "--full"], su_wrap=True, exit=1)
+                self.pkg(["refresh", "--full"])
+                self.pkg(["update", "--no-refresh"], su_wrap=True,
                     exit=1)
-                self.pkg("update")
+                self.pkg(["update"])
 
         def test_bug_3222(self):
                 """ Verify that a timestamp of '0' for a passwd file will not
@@ -4261,18 +5125,22 @@
         def test_bad_hardlinks(self):
                 """A couple of bogus hard link target tests."""
 
+                self.bad_hardlinks_helper("install")
+                self.bad_hardlinks_helper("exact-install")
+
+        def bad_hardlinks_helper(self, install_cmd):
                 self.pkgsend_bulk(self.rurl, (self.badhardlink1,
                     self.badhardlink2))
                 self.image_create(self.rurl)
 
                 # A package which tries to install a hard link to a target that
                 # doesn't exist shouldn't stack trace, but exit sanely.
-                self.pkg("install badhardlink1", exit=1)
+                self.pkg("%s badhardlink1" % install_cmd, exit=1)
 
                 # A package which tries to install a hard link to a target
                 # specified as an absolute path should install that link
                 # relative to the image root.
-                self.pkg("install badhardlink2")
+                self.pkg("%s badhardlink2" % install_cmd)
                 ino1 = os.stat(os.path.join(self.get_img_path(), "foo")).st_ino
                 ino2 = os.stat(os.path.join(self.get_img_path(), "etc/motd")).st_ino
                 self.assert_(ino1 == ino2)
@@ -4746,23 +5614,32 @@
                         self.incorp_pkgs.extend(self.pkgsend_bulk(self.rurl, i))
 
         def test_rename_matching(self):
-                """Verify install won't fail with a multiple match error for
-                a renamed package that shares a common basename."""
-
-                self.image_create(self.rurl)
-                self.pkg("install trusted")
+                """Verify install or exact-install won't fail with a multiple
+                match error for a renamed package that shares a common
+                basename."""
+
+                self.rename_matching("install")
+                self.rename_matching("exact-install")
+
+        def rename_matching(self, install_cmd):
+                self.image_create(self.rurl)
+                self.pkg("%s trusted" % install_cmd)
                 self.pkg("info system/trusted")
 
         def test_require_dependencies(self):
                 """ exercise require dependencies """
 
+                self.require_dependencies_helper("install")
+                self.require_dependencies_helper("exact-install")
+
+        def require_dependencies_helper(self, install_cmd):
                 self.image_create(self.rurl)
                 self.pkg("install [email protected]")
                 self.pkg("verify  [email protected]")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify  [email protected] [email protected]")
 
-        def test_exclude_dependencies(self):
+        def test_exclude_dependencies_install(self):
                 """ exercise exclude dependencies """
 
                 self.image_create(self.rurl)
@@ -4802,7 +5679,37 @@
                 # try to install two incompatible pkgs
                 self.pkg("install [email protected] [email protected]", exit=1)
 
-        def test_optional_dependencies(self):
+        def test_exclude_dependencies_exact_install(self):
+                """ exercise exclude dependencies """
+
+                self.image_create(self.rurl)
+                # Install pkg w/ exclude dep.
+                self.pkg("install [email protected]")
+                self.pkg("verify  [email protected]")
+
+                # Exact-install should ignore exclude dependencies,
+                # except user specifies both pkg name in command line.
+                self.pkg("exact-install [email protected]")
+                self.pkg("uninstall '*'")
+
+                # Exact-install a package w/ both exclude
+                # and require dependencies.
+                self.pkg("exact-install pkg5")
+                self.pkg("verify [email protected] [email protected] ")
+                self.pkg("uninstall '*'")
+                # pick pkg to exact-install that fits constraint.
+                self.pkg("exact-install pkg2 pkg5")
+                self.pkg("verify [email protected] [email protected] pkg2")
+                self.pkg("uninstall '*'")
+                # Exact- install two packages with proper version selected for
+                # one package based on the version of the other package.
+                self.pkg("exact-install pkg6 [email protected]")
+                self.pkg("verify [email protected] [email protected]")
+                self.pkg("uninstall '*'")
+                # try to exact-install two incompatible pkgs
+                self.pkg("exact-install [email protected] [email protected]", exit=1)
+
+        def test_optional_dependencies_install(self):
                 """ check to make sure that optional dependencies are enforced
                 """
 
@@ -4825,7 +5732,30 @@
                 self.pkg("list [email protected]")
                 self.pkg("install [email protected]", exit=1)
 
-        def test_incorporation_dependencies(self):
+        def test_optional_dependencies_exact_install(self):
+                """ check to make sure that optional dependencies are enforced
+                """
+
+                self.image_create(self.rurl)
+                self.pkg("exact-install [email protected]")
+
+                # pkg2 is optional, it should not have been installed
+                self.pkg("list pkg2", exit=1)
+
+                self.pkg("install [email protected]")
+
+                # Verify with exact-install, the optional dependency package
+                # should be removed.
+                self.pkg("exact-install pkg1")
+                self.pkg("list [email protected]", exit=1)
+                self.pkg("list [email protected]")
+
+                # Verify exact-install [email protected] should succeed and pkg1 should
+                # be removed.
+                self.pkg("exact-install [email protected]")
+                self.pkg("list pkg1", exit=1)
+
+        def test_incorporation_dependencies_install(self):
                 """ shake out incorporation dependencies """
 
                 self.image_create(self.rurl)
@@ -4885,7 +5815,42 @@
                 self.pkg("list [email protected]")
                 self.pkg("list [email protected]")
 
-        def test_conditional_dependencies(self):
+        def test_incorporation_dependencies_exact_install(self):
+                """ shake out incorporation dependencies """
+
+                self.image_create(self.rurl)
+                # Simple pkg requiring controlling incorp
+                # should control pkgA_1 as well.
+                self.pkg("exact-install -v [email protected] pkgA_1")
+                self.pkg("list")
+                self.pkg("verify [email protected] [email protected] [email protected]")
+
+                # Verify exact-install will upgrade pkgA_0 and A_incorp to 1.1
+                #, and uninstall pkgA_1.
+                self.pkg("exact-install [email protected]")
+                self.pkg("list [email protected] [email protected]")
+                self.pkg("uninstall '*'")
+
+                # Try nested incorporations.
+                self.pkg("exact-install -v [email protected] pkgA_0 pkgB_0")
+                self.pkg("list [email protected] [email protected] [email protected] [email protected] [email protected]")
+                # Try to break incorporation.
+                self.pkg("exact-install -v [email protected] [email protected]", exit=1) # fixed by [email protected]
+
+                # Only specify [email protected] should succeed. install holds
+                # should be ignored.
+                self.pkg("exact-install -v [email protected]")
+                self.pkg("list [email protected]")
+                self.pkg("uninstall '*'")
+                # what happens when incorporation specified
+                # a package that isn't in the catalog.
+                self.pkg("exact-install pkg1 bug_7394_incorp", exit=1)
+                # test pkg.depend.install-hold feature.
+                self.pkg("exact-install -v [email protected]  pkgA_1")
+                self.pkg("list [email protected]")
+                self.pkg("list [email protected]")
+
+        def test_conditional_dependencies_install(self):
                 """Get conditional dependencies working"""
                 self.image_create(self.rurl)
                 self.pkg("install [email protected]")
@@ -4931,7 +5896,29 @@
                 # removed.
                 self.pkg("uninstall -v entire")
 
-        def test_require_any_dependencies(self):
+        def test_conditional_dependencies_exact_install(self):
+                """Get conditional dependencies working."""
+
+                self.image_create(self.rurl)
+                # Presenting [email protected] and [email protected] in the command line should
+                # trigger conditional dependency.
+                self.pkg("exact-install -v [email protected] [email protected]")
+                self.pkg("verify")
+                self.pkg("list [email protected] [email protected] [email protected]")
+                self.pkg("uninstall '*'")
+
+                # If  only [email protected] present in the command line, [email protected]
+                # should be removed and [email protected] should not be installed.
+                self.pkg("install [email protected]")
+                self.pkg("verify")
+                self.pkg("exact-install [email protected]")
+                self.pkg("list [email protected]")
+                self.pkg("list [email protected]", exit=1)
+                self.pkg("list [email protected]", exit=1)
+                self.pkg("verify")
+                self.pkg("uninstall '*'")
+
+        def test_require_any_dependencies_install(self):
                 """Get require-any dependencies working"""
                 self.image_create(self.rurl)
 
@@ -4979,18 +5966,57 @@
                 self.pkg("list [email protected]")
                 self.pkg("verify")
 
+        def test_require_any_dependencies_exact_install(self):
+                """Get require-any dependencies working"""
+                self.image_create(self.rurl)
+
+                # Test to see if solver will fail gracefully when no solution is
+                # possible and a require-any dependency is involved.
+                self.pkg("exact-install -v pkg-nosol-A pkg-nosol-E", exit=1)
+
+                # Test to see if solver will pick one.
+                self.pkg("exact-install [email protected]")
+                self.pkg("verify")
+                self.pkg("list [email protected] [email protected] [email protected]", exit=3)
+                self.pkg("uninstall '*'")
+
+                # Test to see if solver will be happy w/ renamed packages,
+                # already installed dependencies.
+                self.pkg("exact-install pkg:/[email protected] pkg_need_rename "
+                    "[email protected]")
+                self.pkg("verify")
+                self.pkg("list [email protected] [email protected]")
+                self.pkg("uninstall '*'")
+
+                # test to see if solver will install new verion of existing
+                # package rather than add new package
+                self.pkg("exact-install [email protected] [email protected]")  # install pkg
+                self.pkg("verify")
+                self.pkg("list [email protected] [email protected]")
+                self.pkg("list [email protected]", exit=1)
+                self.pkg("exact-install pkg8 pkg9")
+                self.pkg("verify")
+                self.pkg("list [email protected] [email protected]")
+                self.pkg("list [email protected]", exit=1)
+                self.pkg("uninstall '*'")
+
         def test_origin_dependencies(self):
                 """Get origin dependencies working"""
+
+                self.origin_dependencies_helper("install")
+                self.origin_dependencies_helper("exact-install")
+
+        def origin_dependencies_helper(self, install_cmd):
                 self.set_image(0)
                 self.image_create(self.rurl)
                 self.set_image(1)
                 self.image_create(self.rurl)
                 self.set_image(0)
-                # check install behavior
-                self.pkg("install [email protected]")
-                self.pkg("install pkg10")
+                # check install or exact-install behavior
+                self.pkg("%s [email protected]" % install_cmd)
+                self.pkg("%s pkg10" % install_cmd)
                 self.pkg("list [email protected]")
-                self.pkg("install pkg10")
+                self.pkg("%s pkg10" % install_cmd)
                 self.pkg("list [email protected]")
                 self.pkg("uninstall '*'")
                 # check image-update behavior
@@ -5002,83 +6028,94 @@
                 self.pkg("uninstall '*'")
                 # check that dependencies are ignored if
                 # dependency not present
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("uninstall '*'")
                 # make sure attempts to force install don't work
-                self.pkg("install [email protected]")
-                self.pkg("install [email protected]", exit=1)
-                self.pkg("install [email protected]")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
+                self.pkg("%s [email protected]" % install_cmd, exit=1)
+                self.pkg("%s [email protected]" % install_cmd)
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("uninstall '*'")
                 # check origin root-image=true dependencies
                 # relies on SUNWcs in root image; make image 1 the root image
                 self.set_image(1)
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.set_image(0)
                 live_root = self.img_path(1)
-                self.pkg("-D simulate_live_root=%s install [email protected]" % \
-                    live_root)
-                self.pkg("-D simulate_live_root=%s install [email protected]" %
-                    live_root, exit=1)
+                self.pkg("-D simulate_live_root=%s %s [email protected]" % \
+                    (live_root, install_cmd))
+                self.pkg("-D simulate_live_root=%s %s [email protected]" %
+                    (live_root, install_cmd), exit=1)
                 self.pkg("uninstall '*'")
 
         def test_parent_dependencies(self):
+                self.parent_dependencies_helper("install")
+                self.parent_dependencies_helper("exact-install")
+
+        def parent_dependencies_helper(self, install_cmd):
                 self.set_image(0)
                 self.image_create(self.rurl)
                 self.set_image(1)
                 self.image_create(self.rurl)
 
-                # attach c2p 1 -> 0
+                # attach c2p 1 -> 0.
                 self.pkg("attach-linked -p system:img1 %s" % self.img_path(0))
 
-                # try to install packages that have unmet parent dependencies
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-
-                # install packages in parent
+                # try to install or exact-instal packages that have unmet
+                # parent dependencies.
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+
+                # install or exact-install packages in parent.
                 self.set_image(0)
                 self.pkg("install [email protected]")
                 self.set_image(1)
 
-                # try to install packages that have unmet parent dependencies
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-
-                # install packages in parent
+                # try to install or exact-install packages that have unmet
+                # parent dependencies.
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+
+                # install or exact-install packages in parent.
                 self.set_image(0)
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.set_image(1)
 
-                # try to install packages that have unmet parent dependencies
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
+                # try to install or exact-install packages that have unmet
+                # parent dependencies.
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
 
                 # install packages in parent
                 self.set_image(0)
                 self.pkg("update [email protected]")
                 self.set_image(1)
 
-                # try to install packages that have unmet parent dependencies
-                self.pkg("install [email protected]", exit=EXIT_OOPS)
-
-                # try to install packages that have satisfied parent deps
-                self.pkg("install [email protected]")
+                # try to install or exact-install packages that have unmet parent dependencies.
+                self.pkg("%s [email protected]" % install_cmd, exit=EXIT_OOPS)
+
+                # try to install or exact-install packages that have satisfied parent deps.
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify")
                 self.pkg("uninstall [email protected]")
-                self.pkg("install [email protected]")
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify")
                 self.pkg("uninstall [email protected]")
 
-                # install packages in parent
+                # install or exact-install packages in parent.
                 self.set_image(0)
-                self.pkg("install [email protected]")
+                if install_cmd == "install":
+                        self.pkg("install [email protected]")
+                else:
+                        self.pkg("exact-install [email protected] [email protected]")
                 self.set_image(1)
 
-                # try to install packages that have satisfied parent deps
-                self.pkg("install [email protected]")
+                # try to install or exact-install packages that have satisfied.
+                # parent deps.
+                self.pkg("%s [email protected]" % install_cmd)
                 self.pkg("verify")
                 self.pkg("uninstall [email protected]")
 
@@ -5880,7 +6917,7 @@
         """Test cases for obsolete packages."""
 
         persistent_setup = True
-        def test_basic(self):
+        def test_basic_install(self):
                 foo1 = """
                     open foo@1
                     add dir path=usr mode=0755 owner=root group=root
@@ -5986,6 +7023,115 @@
                 self.pkg("list foo@1", exit=1) # should not be installed
                 self.pkg("install qux") #update
                 self.pkg("list foo@1")
+                self.pkgrepo("remove -s %s fred@2" % self.rurl)
+
+        def test_basic_exact_install(self):
+                foo1 = """
+                    open foo@1
+                    add dir path=usr mode=0755 owner=root group=root
+                    close
+                """
+                # Obsolete packages can have metadata
+                foo2 = """
+                    open foo@2
+                    add set name=pkg.obsolete value=true
+                    add set name=pkg.summary value="A test package"
+                    close
+                """
+
+                fbar = """
+                    open fbar@1
+                    add depend type=require fmri=foo@2
+                    close
+                """
+
+                qbar = """
+                    open qbar@1
+                    add depend type=require fmri=qux@2
+                    close
+                """
+
+                qux1 = """
+                    open qux@1
+                    add dir path=usr mode=0755 owner=root group=root
+                    close
+                """
+
+                qux2 = """
+                    open qux@2
+                    add set name=pkg.renamed value=true
+                    add depend type=require fmri=foo@1
+                    close
+                """
+
+                fred1 = """
+                    open fred@1
+                    add depend type=require fmri=foo
+                    close
+                """
+                fred2 = """
+                    open fred@2
+                    close
+                """
+
+                self.pkgsend_bulk(self.rurl, (foo1, foo2, fbar, qbar, qux1,
+                    qux2, fred1))
+
+                self.image_create(self.rurl)
+
+                # First exact-install the non-obsolete version of foo
+                self.pkg("exact-install foo@1")
+                self.pkg("list foo@1")
+
+                # Now exact-install the obsolete version, and ensure it disappears
+                # (5).
+                self.pkg("exact-install foo")
+                self.pkg("list foo", exit=1)
+
+                # Explicitly exact-installing an obsolete package succeeds, but
+                # results in nothing on the system. (1)
+                self.pkg("exact-install foo@2", exit=4)
+                self.pkg("list foo", exit=1)
+
+                # Exact-nstalling a package with a dependency on an obsolete package
+                # fails. (2)
+                self.pkg("exact-install fbar", exit=1)
+
+                # Exact-installing a package with a dependency on a renamed
+                # package succeeds, leaving the first package and the renamed
+                # package on the system, as well as the empty, pre-renamed
+                # package. (3)
+                self.pkg("exact-install qbar")
+                self.pkg("list qbar")
+                self.pkg("list foo@1")
+                self.pkg("list qux | grep -- i-r")
+                self.pkg("uninstall '*'") #clean up for next test
+                # A simple rename test: First exact-install the pre-renamed
+                # version of qux.  Then install the renamed version, and see
+                # that the new package is installed, and the renamed package
+                # is installed, but marked renamed.  (4)
+                self.pkg("exact-install qux@1")
+                self.pkg("exact-install qux") # upgrades qux
+                self.pkg("list foo@1")
+                self.pkg("list qux", exit=1)
+                self.pkg("uninstall '*'") #clean up for next test
+
+                # Exact-install a package that's going to be obsoleted and a
+                # package that depends on it.  Update the package to its
+                # obsolete version and see that it fails.  (6, sorta)
+                self.pkg("exact-install foo@1 fred@1")
+                self.pkg("exact-install foo@2 fred@1", exit=1)
+
+                # If fred is not in the command line, we should ignore its
+                # restriction and install foo@2.
+                self.pkg("exact-install foo@2")
+                # now add a version of fred that doesn't require foo, and
+                # show that update works
+                self.pkgsend_bulk(self.rurl, fred2)
+                self.pkg("refresh")
+                self.pkg("exact-install foo@2 fred")
+                self.pkg("uninstall '*'") #clean up for next test
+                self.pkgrepo("remove -s %s fred@2" % self.rurl)
 
         def test_basic_7a(self):
                 """Upgrade a package to a version with a dependency on a renamed
@@ -6262,9 +7408,13 @@
                 self.pkg("list", exit=1)
 
         def test_basic_11(self):
-                """Install a package with an ambiguous name, where only one
-                match is non-obsolete."""
-
+                """Install or exact-install a package with an ambiguous name,
+                where only one match is non-obsolete."""
+
+                self.basic_11_helper("install")
+                self.basic_11_helper("exact-install")
+
+        def basic_11_helper(self, install_cmd):
                 t11p1 = """
                     open netbeans@1
                     add set name=pkg.obsolete value=true
@@ -6279,15 +7429,19 @@
                 self.pkgsend_bulk(self.rurl, (t11p1, t11p2))
                 self.image_create(self.rurl)
 
-                self.pkg("install netbeans")
+                self.pkg("%s netbeans" % install_cmd)
                 self.pkg("list pkg:/developer/netbeans")
                 self.pkg("list pkg:/netbeans", exit=1)
 
         def test_basic_11a(self):
-                """Install a package using an ambiguous name where
-                pkg is renamed to another package, but not the
+                """Install or exact-install a package using an ambiguous name
+                where pkg is renamed to another package, but not the
                 conflicting one"""
 
+                self.basic_11a_helper("install")
+                self.basic_11a_helper("exact-install")
+
+        def basic_11a_helper(self, install_cmd):
                 t11p1 = """
                     open netbonze@1
                     add set name=pkg.renamed value=true
@@ -6308,13 +7462,17 @@
                 self.pkgsend_bulk(self.rurl, (t11p1, t11p2, t11p3))
                 self.image_create(self.rurl)
 
-                self.pkg("install netbonze", exit=1)
+                self.pkg("%s netbonze" % install_cmd, exit=1)
 
         def test_basic_11b(self):
-                """Install a package using an ambiguous name where only one
-                match is non-renamed, and the renamed match is renamed to the
-                other."""
-
+                """Install or exact-install a package using an ambiguous name
+                where only one match is non-renamed, and the renamed match
+                is renamed to the other."""
+
+                self.basic_11b_helper("install")
+                self.basic_11b_helper("exact-install")
+
+        def basic_11b_helper(self, install_cmd):
                 t11p1 = """
                     open netbooze@1
                     close
@@ -6341,7 +7499,7 @@
                 self.pkgsend_bulk(self.rurl, (t11p1, t11p2, t11p3, t11p4))
                 self.image_create(self.rurl)
 
-                self.pkg("install netbooze")
+                self.pkg("%s netbooze" % install_cmd)
                 self.pkg("list pkg:/developer/netbooze")
                 self.pkg("list pkg:/netbooze", exit=1)
 
@@ -6496,6 +7654,10 @@
                 does not prevent the system from upgrading to or installing
                 a resurrected version."""
 
+                self.unobsoleted_helper("install")
+                self.unobsoleted_helper("exact-install")
+
+        def unobsoleted_helper(self, install_cmd):
                 pA_1 = """
                     open reintroA@1
                     close
@@ -6543,21 +7705,24 @@
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroA")
 
-                # Testing reintroA@1 -> reintroA@3 with install
-                self.pkg("install reintroA@1")
-                self.pkg("install reintroA@3")
+                # Testing reintroA@1 -> reintroA@3 with install or
+                # exact-install.
+                self.pkg("%s reintroA@1" % install_cmd)
+                self.pkg("%s reintroA@3" % install_cmd)
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroA")
 
-                # Testing empty image -> reintroA@3 with install
-                self.pkg("install reintroA@3")
+                # Testing empty image -> reintroA@3 with install or
+                # exact-install.
+                self.pkg("%s reintroA@3" % install_cmd)
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroA")
 
                 # Testing reintroA@1 -> reintroA@2 -> reintroA@3 with install
-                self.pkg("install reintroA@1")
-                self.pkg("install reintroA@2")
-                self.pkg("install reintroA@3")
+                # or exact-install.
+                self.pkg("%s reintroA@1" % install_cmd)
+                self.pkg("%s reintroA@2" % install_cmd)
+                self.pkg("%s reintroA@3" % install_cmd)
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroA")
 
@@ -6572,23 +7737,26 @@
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroB reintroA")
 
-                # Testing reintroB@1 -> reintroB@3 with install
-                self.pkg("install reintroB@1")
-                self.pkg("install reintroB@3")
+                # Testing reintroB@1 -> reintroB@3 with install or
+                # exact-install
+                self.pkg("%s reintroB@1" % install_cmd)
+                self.pkg("%s reintroB@3" % install_cmd)
                 self.pkg("list reintroB@3")
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroB reintroA")
 
-                # Testing empty image -> reintroB@3 with install
-                self.pkg("install reintroB@3")
+                # Testing empty image -> reintroB@3 with install or
+                # exact-install
+                self.pkg("%s reintroB@3" % install_cmd)
                 self.pkg("list reintroB@3")
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroB reintroA")
 
                 # Testing reintroB@1 -> reintroB@2 -> reintroB@3 with install
-                self.pkg("install reintroB@1")
-                self.pkg("install reintroB@2")
-                self.pkg("install reintroB@3")
+                # or exact-install
+                self.pkg("%s reintroB@1" % install_cmd)
+                self.pkg("%s reintroB@2" % install_cmd)
+                self.pkg("%s reintroB@3" % install_cmd)
                 self.pkg("list reintroB@3")
                 self.pkg("list reintroA@3")
                 self.pkg("uninstall reintroB reintroA")
@@ -6596,6 +7764,10 @@
         def test_incorp_1(self):
                 """We should be able to incorporate an obsolete package."""
 
+                self.incorp_1_helper("install")
+                self.incorp_1_helper("exact-install")
+
+        def incorp_1_helper(self, install_cmd):
                 p1_1 = """
                     open inc1p1@1
                     add depend type=incorporate fmri=inc1p2@1
@@ -6611,10 +7783,13 @@
                 self.pkgsend_bulk(self.rurl, (p1_1, p2_1))
                 self.image_create(self.rurl)
 
-                self.pkg("install inc1p1")
-                self.pkg("install inc1p2", exit=4)
-
-                self.pkg("list inc1p2", exit=1)
+                if install_cmd == "install":
+                        self.pkg("install inc1p1")
+                        self.pkg("install inc1p2", exit=4)
+
+                        self.pkg("list inc1p2", exit=1)
+                else:
+                        self.pkg("exact-install inc1p1")
 
         def test_incorp_2(self):
                 """We should be able to continue incorporating a package when it
@@ -6655,6 +7830,67 @@
                 self.pkg("update -v")
                 self.pkg("list inc2p2", exit=1)
 
+class TestObsoletionNestedIncorporations(pkg5unittest.SingleDepotTestCase):
+        # Only start/stop the depot once (instead of for every test)
+
+        persistent_setup = True
+
+        bug_15713570 = """
+            open [email protected],5.11-0
+            add depend type=require [email protected]
+            close
+            open [email protected],5.11-0
+            add depend type=require fmri=osnet-incorporation
+            close
+            open [email protected],5.11-0
+            add set name=pkg.obsolete value=true
+            close
+            open [email protected],5.11-0
+            add depend type=incorporate fmri=osnet-incorporation
+            add depend type=incorporate fmri=osnet-incorporation@1
+            add depend type=incorporate [email protected]
+            close
+            open [email protected],5.11-0
+            add depend type=incorporate fmri=osnet-incorporation
+            add depend type=incorporate fmri=osnet-incorporation@1
+            add depend type=incorporate [email protected]
+            close
+            open [email protected],5.11-0
+            add depend type=incorporate fmri=osnet-incorporation
+            add depend type=incorporate fmri=osnet-incorporation@1
+            add depend type=incorporate [email protected]
+            close
+            open [email protected],5.11-0
+            add depend type=incorporate [email protected]
+            close
+            open [email protected],5.11-0
+            add depend type=incorporate [email protected]
+            close
+            open [email protected],5.11-0
+            add depend type=incorporate [email protected]
+            close
+       """
+
+        def test_15713570(self):
+                """If an unincorporated package has its dependency obsoleted
+                by a doubly nested incorporation with multiple levels of
+                incorporation, there is no useful error message generated"""
+
+                self.pkgsend_bulk(self.rurl, self.bug_15713570)
+                self.image_create(self.rurl)
+
+                self.pkg("install -v [email protected] oldcompiler")
+                self.pkg("list")
+                self.pkg("verify")
+                self.pkg("update -v entire", exit=4)
+                self.pkg("list")
+                self.pkg("verify")
+                self.pkg("update -v entire@2", exit=1)
+
+                self.assert_("oldcompiler" in self.errout and
+                    "oldperl" in self.errout,
+                    "error message does not mention oldcompiler and oldperl packages")
+
 
 class TestPkgInstallMultiObsolete(pkg5unittest.ManyDepotTestCase):
         """Tests involving obsolete packages and multiple publishers."""
@@ -6682,6 +7918,10 @@
                 a non-obsolete package of the same name is found in a
                 non-preferred publisher, pick the preferred pub as usual """
 
+                self.helper_01("install")
+                self.helper_01("exact-install")
+
+        def helper_01(self, install_cmd):
                 self.pkgsend_bulk(self.rurl1, self.obs)
                 self.pkgsend_bulk(self.rurl2, self.nonobs)
 
@@ -6689,7 +7929,7 @@
                 self.pkg("set-publisher -O " + self.rurl2 + " test2")
                 self.pkg("list -a")
 
-                self.pkg("install stem", exit=4) # noting to do since it's obs
+                self.pkg("%s stem" % install_cmd, exit=4) # noting to do since it's obs
                 # We should choose the obsolete package, which means nothing
                 # gets installed.
                 self.pkg("list", exit=1)
@@ -6702,6 +7942,10 @@
                 so the choice already isn't as straightforward, so we choose the
                 non-obsolete package."""
 
+                self.helper_02("install")
+                self.helper_02("exact-install")
+
+        def helper_02(self, install_cmd):
                 lobs = """
                     open some/stem@1
                     add set name=pkg.obsolete value=true
@@ -6714,7 +7958,7 @@
                 self.image_create(self.rurl1, prefix="test1")
                 self.pkg("set-publisher -O " + self.rurl2 + " test2")
 
-                self.pkg("install stem", exit=1)
+                self.pkg("%s stem" % install_cmd, exit=1)
 
 
 class TestPkgInstallLicense(pkg5unittest.SingleDepotTestCase):
@@ -7813,7 +9057,7 @@
 
                 self.pkgsend_bulk(self.rurl, pkgs)
 
-        def test_multiple_files(self):
+        def test_multiple_files_install(self):
                 """Test the behavior of pkg(1) when multiple file actions
                 deliver to the same pathname."""
 
@@ -7944,7 +9188,120 @@
                 self.pkg("uninstall pkg2", exit=1)
                 self.pkg("verify pkg2")
 
-        def test_overlay_files(self):
+        def test_multiple_files_exact_install(self):
+                """Test the behavior of pkg(1) when multiple file actions
+                deliver to the same pathname."""
+
+                self.image_create(self.rurl)
+
+                # Duplicate files in the same package.
+                self.pkg("exact-install dupfiles", exit=1)
+
+                # Duplicate files in different packages, but in the same
+                # transaction.
+                self.pkg("exact-install dupfilesp1 dupfilesp2@0", exit=1)
+
+                # Duplicate files in different packages, in different
+                # transactions. This should succeed because exact-install will
+                # uninstall dupfilesp1 first.
+                self.pkg("exact-install dupfilesp1")
+                self.pkg("exact-install dupfilesp2@0")
+
+                # Test that being in a duplicate file situation doesn't break
+                # you completely and allows you to add and remove other
+                # packages.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 dupfilesp2@0")
+                self.pkg("exact-install implicitdirs2")
+                self.pkg("uninstall implicitdirs2")
+
+                # If the packages involved get upgraded by exact-install, that
+                # means the old actions has been removed. So we should be okay.
+                self.pkg("exact-install dupfilesp2 dupfilesp3")
+                self.pkg("verify")
+
+                # Test that removing one of two offending actions reverts the
+                # system to a clean state.
+                self.pkg("uninstall dupfilesp3")
+                self.pkg("verify")
+
+                # You should be able to upgrade to a fixed set of packages in
+                # order to move past the problem, too.
+                self.pkg("uninstall dupfilesp2")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp2@0")
+                self.pkg("update")
+                self.pkg("verify")
+
+                # If we upgrade to a version of a conflicting package that no
+                # longer has the conflict, amd at the same time introduce a new
+                # file action at the path with different contents, we should
+                # succeed with exact-install.
+                self.pkg("uninstall dupfilesp2")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp2@0")
+                self.pkg("exact-install dupfilesp2 dupfilesp4")
+
+                # Removing one of more than two offending actions can't do much
+                # of anything, but should leave the system alone.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 dupfilesp2@0 dupfilesp3")
+                # XXX The checks here rely on verify failing due to hashes being
+                # wrong; they should probably report a duplicate action instead.
+                self.pkg("verify", exit=1)
+                out1, err1 = self.output, self.errout
+                self.pkg("uninstall dupfilesp3")
+                # Because we removed dupfilesp3, the error output in this verify
+                # won't exactly match that from the previous one, but the one
+                # remaining failing package should give the same output since we
+                # didn't modify the FS, so search for the current output in the
+                # old.
+                self.pkg("verify", exit=1)
+                out2 = self.output
+                # Strip the first (header) line; this error might not have been
+                # first in the previous output.
+                out2 = out2[out2.index("\n") + 1:]
+                self.assert_(out2 in out1)
+
+                # Removing all but one of the offending actions should get us
+                # back to sanity.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 dupfilesp2@0 dupfilesp3")
+                self.pkg("uninstall dupfilesp3 dupfilesp2")
+                self.pkg("verify")
+
+                # Make sure we handle cleaning up multiple files properly.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 dupfilesp2@0 dupotherfilesp1 "
+                    "dupotherfilesp2")
+                self.pkg("uninstall dupfilesp2 dupotherfilesp2")
+                self.pkg("verify")
+
+                # Make sure we get rid of all implicit directories.
+                self.pkg("uninstall '*'")
+                self.pkg("exact-install implicitdirs3 implicitdirs4")
+                self.pkg("uninstall implicitdirs3 implicitdirs4")
+
+                if os.path.isdir(os.path.join(self.get_img_path(), "usr/bin")):
+                        self.assert_(False, "Directory 'usr/bin' should not exist")
+
+                if os.path.isdir(os.path.join(self.get_img_path(), "usr")):
+                        self.assert_(False, "Directory 'usr' should not exist")
+
+                # Make sure identical actions don't cause problems.
+                self.pkg("exact-install -nv identicalfiles", exit=1)
+
+                # Trigger a bug similar to 17943 via duplicate files.
+                self.pkg("publisher")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1@0 dupfilesp2@0 dupfilesp3@0 "
+                    "dupotherfilesp1@0 dupotherfilesp2@0 dupotherfilesp3@0")
+                self.pkg("update")
+
+        def test_overlay_files_install(self):
                 """Test the behaviour of pkg(1) when actions for editable files
                 overlay other actions."""
 
@@ -8256,7 +9613,318 @@
                 self.file_contains("etc/pam.conf", "zagat")
                 self.file_contains("etc/pam.conf.new", "file4")
 
-        def test_different_types(self):
+        def test_overlay_files_exact_install(self):
+                """Test the behaviour of pkg(1) when actions for editable files
+                overlay other actions."""
+
+                # Ensure that overlay is allowed for file actions when one
+                # action has specified preserve attribute and overlay=allow,
+                # and *one* (only) other action has specified overlay=true
+                # (preserve does not have to be set).
+                self.image_create(self.rurl)
+
+                # With exact-install, this should succeed because exact-install
+                # will remove the previously installed package first.
+                # but not preserve (it isn't editable).
+                self.pkg("exact-install invalid-overlaid")
+                self.pkg("exact-install overlayer")
+                self.pkg("uninstall overlayer")
+
+                self.pkg("exact-install overlaid@0")
+                self.file_contains("etc/pam.conf", "file1")
+                # Should succeed with exact-install, because the previous
+                # package is actually removed.
+                self.pkg("contents -m overlaid")
+                self.pkg("contents -mr overlayer")
+                self.pkg("exact-install overlayer")
+                self.file_contains("etc/pam.conf", "file2")
+
+                # install back overlaid@0
+                self.pkg("exact-install overlaid@0")
+                self.pkg("verify overlaid")
+                self.file_contains("etc/pam.conf", "file1")
+                # This should also succeed with exact-install, because the
+                # previous package is removed.
+                self.pkg("exact-install invalid-overlayer")
+                self.file_contains("etc/pam.conf", "file2")
+                self.pkg("verify invalid-overlayer")
+                # This should also succeed with exact-install. Again.
+                self.pkg("exact-install overlaid@0")
+                self.pkg("exact-install mismatch-overlayer")
+                self.file_contains("etc/pam.conf", "file2")
+                self.pkg("verify mismatch-overlayer")
+                # This should alos succeed with exact-install, same reason.
+                self.pkg("exact-install overlaid@0")
+                self.pkg("exact-install multi-overlayer")
+                self.file_contains("etc/pam.conf", "file2")
+                self.pkg("verify multi-overlayer")
+                # Verify that removing the last package delivering an overlaid
+                # file removes the file.
+                self.pkg("uninstall multi-overlayer")
+                self.file_doesnt_exist("etc/pam.conf")
+
+                # Verify that exact-installing both packages at the same time
+                # results in only the overlaying file being delivered.
+                self.pkg("exact-install overlaid@0 overlayer")
+                self.file_contains("etc/pam.conf", "file2")
+
+                # Verify that the file isn't touched on uninstall of the
+                # overlaid package if overlaying package is still installed.
+                self.file_append("etc/pam.conf", "zigit")
+                self.pkg("uninstall overlaid")
+                self.file_contains("etc/pam.conf", "file2")
+                self.file_contains("etc/pam.conf", "zigit")
+
+                # Re-install overlaid package and verify that file content
+                # does not change.
+                self.pkg("exact-install overlaid@0")
+                self.file_contains("etc/pam.conf", "file2")
+                self.file_contains("etc/pam.conf", "zigit")
+                self.pkg("uninstall '*'")
+
+                # Should succeed because one action is overlayable and
+                # overlaying action declares its intent to overlay even
+                # though the overlaying action isn't marked with preserve.
+                self.pkg("exact-install overlaid@0 unpreserved-overlayer")
+                self.file_contains("etc/pam.conf", "unpreserved")
+
+                # Should succeed because overlaid action permits modification
+                # and contents matches overlaying action.
+                self.pkg("verify overlaid unpreserved-overlayer")
+
+                # Should succeed even though file has been modified since
+                # overlaid action permits modification.
+                self.file_append("etc/pam.conf", "zigit")
+                self.pkg("verify overlaid")
+
+                # Should fail because overlaying action does not permit
+                # modification.
+                self.pkg("verify unpreserved-overlayer", exit=1)
+
+                # Should revert to content delivered by overlaying action.
+                self.pkg("fix unpreserved-overlayer")
+                self.file_contains("etc/pam.conf", "unpreserved")
+                self.file_doesnt_contain("etc/pam.conf", "zigit")
+
+                # Should revert to content delivered by overlaying action.
+                self.file_append("etc/pam.conf", "zigit")
+                self.pkg("revert /etc/pam.conf")
+                self.file_contains("etc/pam.conf", "unpreserved")
+                self.file_doesnt_contain("etc/pam.conf", "zigit")
+                self.pkg("uninstall unpreserved-overlayer")
+
+                # Should revert to content delivered by overlaid action.
+                self.file_contains("etc/pam.conf", "unpreserved")
+                self.pkg("revert /etc/pam.conf")
+                self.file_contains("etc/pam.conf", "file1")
+
+                # Here if we use exact-install, we actually removed the
+                # unpreserved-overlayer and then unpreserved should disappear
+                # from etc/pam.conf.
+                self.pkg("exact-install -vvv unpreserved-overlayer")
+                self.file_contains("etc/pam.conf", "unpreserved")
+                self.pkg("exact-install overlaid@1")
+                self.file_contains("etc/pam.conf", "file1")
+                self.file_doesnt_contain("etc/pam.conf", "unpreserved")
+                self.pkg("uninstall -vvv overlaid")
+
+                # Now update overlaid package, and verify that it deliver the
+                # correct files
+                self.pkg("exact-install -vvv overlaid@2")
+                self.file_contains("etc/pam.conf", "file3")
+
+                self.pkg("exact-install -vvv overlaid@3")
+                self.file_contains("etc/pam.conf", "file3")
+
+                # Verify that unpreserved overlay is not salvaged when both
+                # overlaid and overlaying package are removed at the same time.
+                # (Preserved files are salvaged if they have been modified on
+                # uninstall.)
+
+                # Ensure directory is empty before testing.
+                api_inst = self.get_img_api_obj()
+                img_inst = api_inst.img
+                sroot = os.path.join(img_inst.imgdir, "lost+found")
+                shutil.rmtree(sroot)
+
+                # Verify etc directory not found after uninstall.
+                self.pkg("uninstall -vvv overlaid-renamed")
+                salvaged = [
+                    n for n in os.listdir(sroot)
+                    if n.startswith("etc")
+                ]
+                self.assertEqualDiff(salvaged, [])
+
+                # Next, update overlaid package again this time as part of a
+                # file move.  Verify that the old configuration file should
+                # be removed.
+                self.pkg("exact-install -vvv overlaid-renamed@3 "
+                    "unpreserved-overlayer")
+                self.pkg("exact-install -vvv [email protected]")
+                self.assert_(not os.path.exists(os.path.join(
+                    self.get_img_path(), "etc/pam.conf")))
+                self.file_contains("etc/pam/pam.conf.new", "file4")
+
+                # Verify etc/pam/pam.conf is salvaged after uninstall as
+                # overlay file has been changed.
+                self.pkg("uninstall -vvv overlaid-renamed")
+                salvaged = [
+                    n for n in os.listdir(os.path.join(sroot, "etc/pam"))
+                    if n.startswith("pam.conf")
+                ]
+                self.assert_(salvaged[0].startswith("pam.conf-"),
+                    msg=str(salvaged))
+
+                # Next, repeat the same set of tests performed above for
+                # renames and moves with an overlaying, preserved file.
+                #
+                # Exact-install overlaying package, then update overlaid
+                # package and verify that file content does not change if only
+                # preserve attribute changes.
+                self.pkg("exact-install -vvv overlayer")
+                self.file_contains("etc/pam.conf", "file2")
+                self.file_append("etc/pam.conf", "zigit")
+                self.pkg("exact-install -vvv overlaid@1")
+                self.file_contains("etc/pam.conf", "file2")
+                self.file_contains("etc/pam.conf", "zigit")
+
+                # Now update overlaid package again, and verify that file
+                # content does not change even though overlaid content has.
+                self.pkg("exact-install -vvv overlaid@2")
+                self.file_contains("etc/pam.conf", "zigit")
+                self.file_contains("etc/pam.conf", "file2")
+
+                # Now update overlaid package again this time as part of a
+                # rename, and verify that file content does not change even
+                # though file has moved between packages.
+                self.pkg("exact-install -vvv overlaid@3")
+                self.file_contains("etc/pam.conf", "zigit")
+
+                # Verify that preserved overlay is salvaged.
+                # (Preserved files are salvaged if they have been modified on
+                # uninstall.)
+
+                # Ensure directory is empty before testing.
+                api_inst = self.get_img_api_obj()
+                img_inst = api_inst.img
+                sroot = os.path.join(img_inst.imgdir, "lost+found")
+                shutil.rmtree(sroot)
+
+                # Verify etc directory found after uninstall.
+                self.pkg("uninstall -vvv overlaid-renamed")
+                salvaged = [
+                    n for n in os.listdir(sroot)
+                    if n.startswith("etc")
+                ]
+                self.assert_(salvaged[0].startswith("etc"),
+                    msg=str(salvaged))
+                self.assert_(salvaged[1].startswith("etc-"),
+                    msg=str(salvaged))
+
+                # Next, update overlaid package again, this time as part of a
+                # file move where the overlay attribute was dropped. Verify
+                # that the content has not changed after move to new location
+                # and that the new configuration exists as expected as
+                # ".new".
+                self.pkg("exact-install -vvv overlaid-renamed@3 overlayer")
+                self.file_append("etc/pam.conf", "zigit")
+                self.pkg("exact-install -vvv [email protected]")
+                self.file_contains("etc/pam/pam.conf", "zigit")
+                self.file_contains("etc/pam/pam.conf.new", "file4")
+                self.pkg("uninstall -vvv overlaid-renamed")
+
+                # Next, update overlaid package again, this time as part of a
+                # file move where the overlay attribute was dropped. Verify
+                # that the content has not changed after move to new location
+                # and that the new configuration exists as expected as
+                # ".new".
+                self.pkg("exact-install -vvv overlaid-renamed@3 overlayer")
+                self.file_append("etc/pam.conf", "zigit")
+                self.file_contains("etc/pam.conf", "file2")
+                self.pkg("exact-install -vvv [email protected]")
+                self.file_contains("etc/pam/pam.conf", "zigit")
+                self.file_contains("etc/pam/pam.conf.new", "file4")
+
+                # Next, downgrade the package and verify that if an overlaid
+                # file moves back to its original location. Because the
+                # previous etc/pam.conf for overlayer was removed by
+                # exact-install, the content of the overlay file will be a new
+                # one.
+                self.pkg("update -vvv overlaid-renamed@3")
+                self.file_contains("etc/pam.conf", "file3")
+                self.file_doesnt_contain("etc/pam.conf", "zigit")
+                self.file_append("etc/pam.conf", "zigit")
+                # Now upgrade again for remaining tests.
+                self.pkg("exact-install -vvv [email protected]")
+
+                # Verify etc/pam.conf and etc/pam/pam.conf salvaged after
+                # uninstall as overlay file and overlaid file is different from
+                # packaged.
+                shutil.rmtree(sroot)
+                self.pkg("uninstall -vvv overlaid-renamed")
+                salvaged = sorted(
+                    n for n in os.listdir(os.path.join(sroot, "etc"))
+                    if n.startswith("pam")
+                )
+                # Should have three entries; one should be 'pam' directory
+                # (presumably containing pam.conf-X...), a 'pam-XXX' directory,
+                # and a etc-XXX directory.
+                self.assertEqualDiff(salvaged[0], "pam")
+                self.assert_(salvaged[1].startswith("pam-"),
+                    msg=str(salvaged))
+
+                salvaged = sorted(
+                    n for n in os.listdir(os.path.join(sroot, "etc/pam"))
+                    if n.startswith("pam")
+                )
+                self.assert_(salvaged[0].startswith("pam.conf-"),
+                    msg=str(salvaged))
+                salvaged = sorted(
+                    n for n in os.listdir(sroot)
+                    if n.startswith("etc-")
+                )
+                self.assert_(salvaged[0].startswith("etc-"),
+                    msg=str(salvaged))
+
+                # Next, exact-install overlaid package and overlaying package,
+                # then upgrade each to a version where the file has changed
+                # locations and verify that the content remains intact.
+                self.pkg("exact-install -vvv overlaid@0 overlayer-move@0")
+                self.file_append("etc/pam.conf", "zigit")
+                self.pkg("exact-install -vvv overlaid@3 overlayer-move@0")
+                self.file_contains("etc/pam.conf", "zigit")
+                self.pkg("exact-install -vvv [email protected] "
+                    "overlayer-move@1")
+                self.file_contains("etc/pam/pam.conf", "zigit")
+
+                # Next, downgrade overlaid-renamed and overlaying package to
+                # versions where the file is restored to its original location
+                # and verify that the content is reverted to the original
+                # overlay version since this is a downgrade.
+                self.pkg("update -vvv overlaid-renamed@3 overlayer-move@0")
+                self.file_contains("etc/pam.conf", "file2")
+                self.pkg("uninstall overlaid-renamed overlayer-move")
+
+                # Next, exact-install overlaid package and overlaying package
+                # and verify preserve acts as expected for overlay package as
+                # it is updated.
+                self.pkg("exact-install -vvv overlaid@2 overlayer-update@0")
+                self.file_contains("etc/pam.conf", "file1")
+                # unpreserved -> preserved
+                self.pkg("exact-install -vvv overlayer-update@1")
+                self.file_contains("etc/pam.conf", "file2")
+                self.file_append("etc/pam.conf", "zigit")
+                # preserved -> renameold
+                self.pkg("exact-install -vvv overlayer-update@2")
+                self.file_doesnt_contain("etc/pam.conf", "zigit")
+                self.file_contains("etc/pam.conf.old", "zigit")
+                self.file_append("etc/pam.conf", "zagat")
+                # renameold -> renamenew
+                self.pkg("exact-install -vvv overlayer-update@3")
+                self.file_contains("etc/pam.conf", "zagat")
+                self.file_contains("etc/pam.conf.new", "file4")
+
+        def test_different_types_install(self):
                 """Test the behavior of pkg(1) when multiple actions of
                 different types deliver to the same pathname."""
 
@@ -8401,7 +10069,153 @@
                 self.pkg("install dupmultitypes3@0")
                 self.pkg("update")
 
-        def test_conflicting_attrs_fs(self):
+        def test_different_types_exact_install(self):
+                """Test the behavior of pkg(1) when multiple actions of
+                different types deliver to the same pathname."""
+
+                self.image_create(self.rurl)
+
+                # In the same package.
+                self.pkg("exact-install duppath-filelink", exit=1)
+
+                # In different packages, in the same transaction.
+                self.pkg("exact-install dupfilesp1 duplink", exit=1)
+
+                # In different packages, in different transactions. This should
+                # succeed because exact-install will first uninstall
+                # dupfilesp1.
+                self.pkg("exact-install dupfilesp1")
+                self.pkg("exact-install duplink")
+
+                # Does removal of one of the busted packages get us out of the
+                # situation?
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 duplink")
+                self.pkg("verify", exit=1)
+                self.pkg("uninstall dupfilesp1")
+                self.pkg("verify")
+
+                # Implicit directory conflicts with a file
+                self.pkg("uninstall '*'")
+                self.pkg("exact-install implicitdirs", exit=1)
+
+                # Implicit directory coincides with a delivered directory.
+                self.pkg("exact-install implicitdirs2")
+
+                # Make sure that we don't die trying to fixup a directory using
+                # an implicit directory action.
+                self.pkg("uninstall '*'")
+                self.pkg("exact-install implicitdirs4")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "install implicitdirs7")
+                self.pkg("uninstall implicitdirs7")
+                # XXX We don't currently fix up anything beneath a directory
+                # that was restored, so we have to do it by hand.
+                os.mkdir("%s/usr/bin" % self.img_path())
+                shutil.copy("%s/tmp/file1" % self.test_root,
+                    "%s/usr/bin/something" % self.img_path())
+                owner = portable.get_user_by_name("root", self.img_path(), True)
+                group = portable.get_group_by_name("bin", self.img_path(), True)
+                os.chown("%s/usr/bin/something" % self.img_path(), owner, group)
+                os.chmod("%s/usr/bin/something" % self.img_path(), 0755)
+                self.pkg("verify")
+
+                # Removing one of more than two offending actions can't do much
+                # of anything, but should leave the system alone.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 duplink dupdir@0")
+                tmap = {
+                    stat.S_IFIFO: "fifo",
+                    stat.S_IFCHR: "character device",
+                    stat.S_IFDIR: "directory",
+                    stat.S_IFBLK: "block device",
+                    stat.S_IFREG: "regular file",
+                    stat.S_IFLNK: "symbolic link",
+                    stat.S_IFSOCK: "socket",
+                }
+                thepath = "%s/dir/pathname" % self.img_path()
+                fmt = stat.S_IFMT(os.lstat(thepath).st_mode)
+                # XXX The checks here rely on verify failing due to action types
+                # not matching what's on the system; they should probably report
+                # duplicate actions instead.  Checking the output text is a bit
+                # ugly, too, but we do need to make sure that the two problems
+                # become one.
+                self.pkg("verify", exit=1)
+                verify_type_re = "File Type: '(.*?)' should be '(.*?)'"
+                matches = re.findall(verify_type_re, self.output)
+                # We make sure that what got reported is correct -- two actions
+                # of different types in conflict with whatever actually got laid
+                # down.
+                self.assert_(len(matches) == 2)
+                whatis = matches[0][0]
+                self.assert_(matches[1][0] == whatis)
+                self.assert_(whatis == tmap[fmt])
+                shouldbe = set(["symbolic link", "regular file", "directory"]) - \
+                    set([whatis])
+                self.assert_(set([matches[0][1], matches[1][1]]) == shouldbe)
+                # Now we uninstall one of the packages delivering a type which
+                # isn't what's on the filesystem.  The filesystem should remain
+                # unchanged, but one of the errors should go away.
+                if whatis == "directory":
+                        self.pkg("uninstall duplink")
+                else:
+                        self.pkg("uninstall dupdir")
+                self.pkg("verify", exit=1)
+                matches = re.findall(verify_type_re, self.output)
+                self.assert_(len(matches) == 1)
+                nfmt = stat.S_IFMT(os.lstat(thepath).st_mode)
+                self.assert_(nfmt == fmt)
+
+                # Now we do the same thing, but we uninstall the package
+                # delivering the type which *is* what's on the filesystem.  This
+                # should also leave the filesystem alone, even though what's
+                # there will match *neither* of the remaining installed
+                # packages.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupfilesp1 duplink dupdir@0")
+                fmt = stat.S_IFMT(os.lstat(thepath).st_mode)
+                self.pkg("verify", exit=1)
+                matches = re.findall(verify_type_re, self.output)
+                self.assert_(len(matches) == 2)
+                whatis = matches[0][0]
+                self.assert_(matches[1][0] == whatis)
+                self.assert_(whatis == tmap[fmt])
+                shouldbe = set(["symbolic link", "regular file", "directory"]) - \
+                    set([whatis])
+                self.assert_(set([matches[0][1], matches[1][1]]) == shouldbe)
+                if whatis == "directory":
+                        self.pkg("uninstall dupdir")
+                elif whatis == "symbolic link":
+                        self.pkg("uninstall duplink")
+                elif whatis == "regular file":
+                        self.pkg("uninstall dupfilesp1")
+                self.pkg("verify", exit=1)
+                matches = re.findall(verify_type_re, self.output)
+                self.assert_(len(matches) == 2)
+                nfmt = stat.S_IFMT(os.lstat(thepath).st_mode)
+                self.assert_(nfmt == fmt)
+
+                # Go from multiple conflicting types down to just one type.
+                # This also tests the case where a package version being newly
+                # installed gets fixed at the same time.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupmultitypes@1")
+                self.pkg("exact-install dupmultitypes")
+                self.pkg("verify")
+
+                # Upgrading from multiple instances of one refcounted type to
+                # multiple instances of another (here, link to directory)
+                # should succeed.
+                self.pkg("uninstall '*'")
+                self.pkg("exact-install dupmultitypes3@0")
+                self.pkg("update")
+
+
+        def test_conflicting_attrs_fs_install(self):
                 """Test the behavior of pkg(1) when multiple non-file actions of
                 the same type deliver to the same pathname, but whose other
                 attributes differ."""
@@ -8565,24 +10379,193 @@
                     "dupdirp12")
                 self.pkg("uninstall dupdirp12")
 
+        def test_conflicting_attrs_fs_exact_install(self):
+                """Test the behavior of pkg(1) when multiple non-file actions of
+                the same type deliver to the same pathname, but whose other
+                attributes differ."""
+
+                self.image_create(self.rurl)
+
+                # One package, two links with different targets
+                self.pkg("exact-install duppath-nonidenticallinks", exit=1)
+
+                # One package, two directories with different perms
+                self.pkg("exact-install duppath-nonidenticaldirs", exit=1)
+
+                # One package, two dirs with same modes expressed two ways
+                self.pkg("exact-install duppath-almostidenticaldirs")
+
+                # One package delivers a directory explicitly, another
+                # implicitly.
+                self.pkg("exact-install implicitdirs2 implicitdirs3")
+                self.pkg("verify")
+
+                self.pkg("uninstall '*'")
+
+                # Make sure that we don't die trying to fixup a directory using
+                # an implicit directory action.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install implicitdirs4 implicitdirs5 implicitdirs6")
+                self.pkg("uninstall implicitdirs5")
+                self.pkg("verify")
+
+                self.pkg("uninstall '*'")
+
+                # Make sure that we don't die trying to fixup a directory using
+                # an implicit directory action when that's all that's left.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install implicitdirs4 implicitdirs5 implicitdirs6")
+                self.pkg("uninstall implicitdirs5 implicitdirs6")
+                self.pkg("verify")
+
+                self.pkg("uninstall '*'")
+
+                # If two packages deliver conflicting directories and another
+                # package delivers that directory implicitly, make sure the
+                # third package isn't blamed.
+                self.pkg("exact-install implicitdirs4 implicitdirs5 "
+                    "implicitdirs6", exit=1)
+                self.assert_("implicitdirs4" not in self.errout)
+
+                # Two packages, two links with different targets, installed at
+                # once
+                self.pkg("exact-install duppath-nonidenticallinksp1 "
+                    "duppath-nonidenticallinksp2@0", exit=1)
+
+                # Two packages, two links with different targets, installed
+                # separately. again with exact-install the operation will
+                # will succeed becauseit will remove the
+                # duppath-nonidenticallinksp1 pkg first.
+                self.pkg("exact-install duppath-nonidenticallinksp1")
+                self.pkg("exact-install duppath-nonidenticallinksp2@0")
+
+                self.pkg("uninstall '*'")
+
+                # If we get into a broken state, can we get out of it?
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install duppath-nonidenticallinksp1 "
+                    "duppath-nonidenticallinksp2@0")
+                self.pkg("verify", exit=1)
+                self.pkg("exact-install duppath-nonidenticallinksp2")
+                self.pkg("verify")
+
+                # If we get into a broken state, can we make it a little bit
+                # better by uninstalling one of the packages?  Removing dupdir5
+                # here won't reduce the number of different groups under which
+                # dir is delivered, but does reduce the number of actions
+                # delivering it.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupdirp1 dupdirp2@1 dupdirp5 dupdirp6")
+                self.pkg("uninstall dupdirp5")
+                self.pkg("verify", exit=1)
+
+                self.pkg("-D broken-conflicting-action-handling=1 install "
+                    "dupdirp5")
+                # Make sure we can exact-install a package delivering an
+                # implicit directory that's currently in conflict.
+                self.pkg("exact-install dupdirp7")
+                # And make sure we can uninstall it again.
+                self.pkg("uninstall dupdirp7")
+                self.pkg("list", exit=1)
+
+                # Add everything back in, remove everything but one variant of
+                # the directory and an implicit directory, and verify.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupdirp2@1 dupdirp5 dupdirp6 dupdirp7")
+                self.pkg("uninstall dupdirp2 dupdirp5 dupdirp6")
+                self.pkg("verify")
+
+                # Get us into a saner state by upgrading.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupdirp2@1 dupdirp5 dupdirp6 dupdirp7")
+                self.pkg("update dupdirp2@2")
+
+                # Get us into a sane state by upgrading.
+                self.pkg("uninstall dupdirp2 dupdirp5 dupdirp6")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupdirp2@1 dupdirp7")
+                self.pkg("update dupdirp2@2")
+                self.pkg("verify")
+
+                # We start in a sane state, but the update would result in
+                # conflict, though no more actions deliver the path in
+                # question.
+                self.pkg("uninstall '*'")
+                self.pkg("exact-install dupdirp1 dupdirp8@1")
+                self.pkg("update", exit=1)
+
+                # How about removing one of the conflicting packages?  We'll
+                # remove the package which doesn't match the state on disk.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install duppath-nonidenticallinksp1 "
+                    "duppath-nonidenticallinksp2@0")
+                link = os.readlink("%s/dir/pathname" % self.img_path())
+                if link == "dir/something":
+                        self.pkg("uninstall duppath-nonidenticallinksp2")
+                else:
+                        self.pkg("uninstall duppath-nonidenticallinksp1")
+                self.pkg("verify")
+
+                # Now we'll try removing the package which *does* match the
+                # state on disk.  The code should clean up after us.
+                self.pkg("uninstall '*'")
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install duppath-nonidenticallinksp1 "
+                    "duppath-nonidenticallinksp2@0")
+                link = os.readlink("%s/dir/pathname" % self.img_path())
+                if link == "dir/something":
+                        self.pkg("uninstall duppath-nonidenticallinksp1")
+                else:
+                        self.pkg("uninstall duppath-nonidenticallinksp2")
+                self.pkg("verify")
+
+                # Let's try a duplicate directory delivered with all sorts of
+                # crazy conflicts!
+                self.pkg("uninstall '*'")
+                self.pkg("exact-install dupdirp1 dupdirp2@1 dupdirp3 dupdirp4",
+                    exit=1)
+
+                pkgs = " ".join("massivedupdir%d" % x for x in xrange(20))
+                self.pkg("exact-install %s" % pkgs, exit=1)
+
+                # Trigger bug 17943: we install packages with conflicts in two
+                # directories (p9, p10).  We also install a package (p11) which
+                # delivers those directories implicitly.  Then remove the last,
+                # triggering the stack trace associated with the bug.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupdirp9 dupdirp10 dupdirp11")
+                self.pkg("uninstall dupdirp11")
+
+                # Do the same, but with a package that delivers var implicitly
+                # via a legacy action.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install dupdirp9 dupdirp10 dupdirp12")
+                self.pkg("uninstall dupdirp12")
+
         def test_conflicting_attrs_fs_varcets(self):
                 """Test the behavior of pkg(1) when multiple non-file actions of
                 the same type deliver to the same pathname, but differ in their
                 variants or facets."""
 
+                self.conflicting_attrs_fs_varcets_helper("install")
+                self.conflicting_attrs_fs_varcets_helper("exact-install")
+
+        def conflicting_attrs_fs_varcets_helper(self, install_cmd):
                 self.image_create(self.rurl)
 
                 # Two packages delivering the same directory, one under the
                 # current architecture, the other not tagged with an arch
                 # variant.
-                self.pkg("install dupfilesv1 dupfilesv2")
+                self.pkg("%s dupfilesv1 dupfilesv2" % install_cmd)
                 self.dir_exists("dir/pathname")
 
                 # Two packages delivering the same directory with different
                 # attributes -- one under the current architecture, the other
                 # tagged with another arch variant.
                 self.pkg("uninstall '*'")
-                self.pkg("install dupfilesv1 dupfilesv3")
+                self.pkg("%s dupfilesv1 dupfilesv3" % install_cmd)
                 if platform.processor() == "sparc":
                         self.dir_exists("dir/pathname", mode=0777)
                 else:
@@ -8592,7 +10575,7 @@
                 # tagged only for non-global zones should install successfully
                 # together in a global zone.
                 self.pkg("uninstall '*'")
-                self.pkg("install dupfilesv5 dupfilesv6")
+                self.pkg("%s dupfilesv5 dupfilesv6" % install_cmd)
                 path = os.path.join(self.get_img_path(), "dir/pathname")
                 try:
                         f = open(path)
@@ -8607,19 +10590,19 @@
                 # Two packages delivering the same directory, one with the
                 # devel facet false, the other true.
                 self.pkg("uninstall '*'")
-                self.pkg("install dupfilesf1 dupfilesf2")
+                self.pkg("%s dupfilesf1 dupfilesf2" % install_cmd)
                 self.dir_exists("dir/pathname")
 
                 # Two packages delivering the same directory, one with the
                 # devel facet true, the other without.
                 self.pkg("uninstall '*'")
-                self.pkg("install dupfilesf1 dupfilesf3")
+                self.pkg("%s dupfilesf1 dupfilesf3" % install_cmd)
                 self.dir_exists("dir/pathname")
 
                 # Two packages delivering the same directory, one with the
                 # devel facet false, the other without.
                 self.pkg("uninstall '*'")
-                self.pkg("install dupfilesf2 dupfilesf3")
+                self.pkg("%s dupfilesf2 dupfilesf3" % install_cmd)
                 self.dir_exists("dir/pathname")
 
         def test_conflicting_uninstall_publisher(self):
@@ -8627,6 +10610,10 @@
                 conflicting packages from a publisher which has also been
                 removed."""
 
+                self.conflicting_uninstall_publisher_helper("install")
+                self.conflicting_uninstall_publisher_helper("exact-install")
+
+        def conflicting_uninstall_publisher_helper(self, install_cmd):
                 self.image_create(self.rurl)
                 # Dummy publisher so test publisher can be removed.
                 self.pkg("set-publisher -P ignored")
@@ -8634,8 +10621,8 @@
                 # If packages with conflicting actions are found during
                 # uninstall, and the publisher of the package has been
                 # removed, uninstall should still succeed.
-                self.pkg("-D broken-conflicting-action-handling=1 install "
-                    "dupdirp1 dupdirp2@1")
+                self.pkg("-D broken-conflicting-action-handling=1 %s "
+                    "dupdirp1 dupdirp2@1" % install_cmd)
                 self.pkg("unset-publisher test")
                 self.pkg("uninstall dupdirp2")
                 self.pkg("verify")
@@ -8690,7 +10677,7 @@
                 if group is not None:
                         self.assert_(st.st_gid == group)
 
-        def test_multiple_users(self):
+        def test_multiple_users_install(self):
                 """Test the behavior of pkg(1) when multiple user actions
                 deliver the same user."""
 
@@ -8780,43 +10767,110 @@
                     "otheruser othergroup@0")
                 self.pkg("update othergroup")
 
+        def test_multiple_users_exact_install(self):
+                """Test the behavior of pkg(1) when multiple user
+                actions deliver the same user."""
+
+                # This is largely identical to test_multiple_files; we may want
+                # to commonize in the future.
+
+                self.image_create(self.rurl)
+
+                self.pkg("exact-install userdb")
+
+                # Duplicate users in the same package
+                self.pkg("exact-install dupuser", exit=1)
+                # Make sure userdb is not accedentally removed.
+                self.pkg("list userdb")
+
+                # Duplicate users in different packages, but in the same
+                # transaction
+                self.pkg("exact-install userdb dupuserp1 dupuserp2@0", exit=1)
+
+                # Duplicate users in different packages, in different
+                # transactions. This should succeed with exact-install.
+                self.pkg("exact-install userdb dupuserp1")
+                self.pkg("exact-install userdb dupuserp2@0")
+
+                # Removing one of more than two offending actions can't do much
+                # of anything, but should leave the system alone.
+                self.image_destroy()
+                self.image_create(self.rurl)
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install userdb dupuserp1 dupuserp2@0 dupuserp3")
+                self.pkg("verify", exit=1)
+                out1 = self.output
+                self.pkg("uninstall dupuserp3")
+                self.pkg("verify", exit=1)
+                out2 = self.output
+                out2 = out2[out2.index("\n") + 1:]
+                self.assert_(out2 in out1)
+
+                # Removing all but one of the offending actions should get us
+                # back to sanity.
+                self.image_destroy()
+                self.image_create(self.rurl)
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install userdb dupuserp1 dupuserp2@0 dupuserp3")
+                self.pkg("uninstall dupuserp3 dupuserp2")
+                self.pkg("verify")
+
+                # Make sure we don't get confused when two actions in different
+                # namespace groups but with the same key attribute value are
+                # adjacent in the action cache.
+                self.pkg("-D broken-conflicting-action-handling=1 "
+                    "exact-install userdb otheruser othergroup@0")
+                self.pkg("update othergroup")
+
         def test_multiple_drivers(self):
                 """Test the behavior of pkg(1) when multiple driver actions
                 deliver the same driver."""
 
-                self.image_create(self.rurl)
-
-                self.pkg("install driverdb")
-
-                self.pkg("install dupdriver", exit=1)
+                self.multiple_drivers_helper("install")
+                self.multiple_drivers_helper("exact-install")
+
+        def multiple_drivers_helper(self, install_cmd):
+                self.image_create(self.rurl)
+
+                self.pkg("%s driverdb" % install_cmd)
+
+                self.pkg("%s dupdriver" % install_cmd, exit=1)
 
         def test_multiple_depend(self):
                 """Test to make sure we can have multiple depend actions on
                 (more or less) the same fmri"""
 
+                self.multiple_depend_helper("install")
+                self.multiple_depend_helper("exact-install")
+
+        def multiple_depend_helper(self, install_cmd):
                 self.image_create(self.rurl)
 
                 # Two identical unversioned require dependencies
-                self.pkg("install dupdepend1")
+                self.pkg("%s dupdepend1" % install_cmd)
 
                 # Two dependencies of different types on an identical
                 # unversioned fmri
-                self.pkg("install dupdepend2")
+                self.pkg("%s dupdepend2" % install_cmd)
 
                 # Two identical versioned require dependencies
-                self.pkg("install dupdepend3")
+                self.pkg("%s dupdepend3" % install_cmd)
 
                 # Two dependencies of different types on an identical versioned
                 # fmri
-                self.pkg("install dupdepend4")
+                self.pkg("%s dupdepend4" % install_cmd)
 
         def test_varianted_types(self):
                 """Test that actions which would otherwise conflict but are
                 delivered under different variants don't conflict."""
 
+                self.varianted_types_helper("install")
+                self.varianted_types_helper("exact-install")
+
+        def varianted_types_helper(self, install_cmd):
                 self.pkg_image_create(repourl=self.rurl,
                     additional_args="--variant foo=one")
-                self.pkg("install vpath")
+                self.pkg("%s vpath" % install_cmd)
 
 
 if __name__ == "__main__":
--- a/src/tests/cli/t_pkg_linked.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_linked.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,16 +21,18 @@
 #
 
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import testutils
 if __name__ == "__main__":
-	testutils.setup_environment("../../../proto")
+        testutils.setup_environment("../../../proto")
 import pkg5unittest
 
 import difflib
+import operator
 import os
+import itertools
 import re
 import shutil
 import tempfile
@@ -486,6 +488,28 @@
                             "-i %s -v variant.foo=baz" % lin, rv=rv)
                         # TODO: test change-facet
 
+                rv = EXIT_BADOPT
+
+                for op in ["update", "install", "uninstall"]:
+                        # -z and -Z can't be used together
+                        self._pkg([0], "%s -r "
+                            "-z system:img1 -Z system:img1 foo" % op, rv=rv)
+                        # check handling of valid but not existing child names
+                        self._pkg([0], "%s -r -z system:foo %s" % \
+                            (op, self.p_foo1_name[1]), rv=rv)
+                        self._pkg([0], "%s -r -Z system:foo %s" % \
+                            (op, self.p_foo1_name[1]), rv=rv)
+                        # check handling of valid but not existing zone names
+                        self._pkg([0], "%s -r -z foo %s" % \
+                            (op, self.p_foo1_name[1]), rv=rv)
+                        self._pkg([0], "%s -r -Z foo %s" % \
+                            (op, self.p_foo1_name[1]), rv=rv)
+                        # check handling of invalid child names
+                        self._pkg([0], "%s -r -z :foo:&& %s" % \
+                            (op, self.p_foo1_name[1]), rv=rv)
+                        self._pkg([0], "%s -r -Z :foo:&& %s" % \
+                            (op, self.p_foo1_name[1]), rv=rv)
+
         def test_opts_3_all(self):
                 self._imgs_create(1)
 
@@ -1382,6 +1406,22 @@
                     child_images=[{
                         "image_name": "system:img1",
                         "change_packages": [
+                            [self.s1_list[2], self.s1_list[0]]],
+                        },{
+                        "image_name": "system:img2",
+                        "change_packages": [
+                            [self.s1_list[2], self.s1_list[0]]],
+                    }])
+
+                # explicit recursion into all children
+                self.__test_linked_sync_via_parent_op(
+                    "update -r", "",
+                    change_packages=[
+                        [self.foo1_list[1], self.foo1_list[0]],
+                        [self.s1_list[1], self.s1_list[0]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [
                             [self.foo1_list[2], self.foo1_list[0]],
                             [self.s1_list[2], self.s1_list[0]]],
                         },{
@@ -1416,6 +1456,23 @@
                             [self.s1_list[2], self.s1_list[1]]],
                     }])
 
+                # explicit recursion into all children
+                self.__test_linked_sync_via_parent_op(
+                    "update -r", self.p_foo1_name[3],
+                    change_packages=[
+                        [self.foo1_list[1], self.foo1_list[3]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [
+                            [self.foo1_list[2], self.foo1_list[3]],
+                            [self.s1_list[2], self.s1_list[1]]],
+                        },{
+                        "image_name": "system:img2",
+                        "change_packages": [
+                            [self.foo1_list[2], self.foo1_list[3]],
+                            [self.s1_list[2], self.s1_list[1]]],
+                    }])
+
         def test_linked_sync_via_install(self):
                 """Verify that if we update child images to be in sync with
                 their constraints when we do an install."""
@@ -1441,6 +1498,24 @@
                             [self.s1_list[2], self.s1_list[1]]],
                     }])
 
+                # explicit recursion into all children
+                self.__test_linked_sync_via_parent_op(
+                    "install -r ", self.p_foo1_name[0],
+                    change_packages=[
+                        [self.foo1_list[1], self.foo1_list[0]],
+                    ],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [
+                            [self.foo1_list[2], self.foo1_list[0]],
+                            [self.s1_list[2], self.s1_list[1]]],
+                        },{
+                        "image_name": "system:img2",
+                        "change_packages": [
+                            [self.foo1_list[2], self.foo1_list[0]],
+                            [self.s1_list[2], self.s1_list[1]]],
+                    }])
+
         def test_linked_sync_via_sync(self):
                 """Verify that if we update child images to be in sync with
                 their constraints when we do a sync-linked."""
@@ -1535,6 +1610,22 @@
                             [self.s1_list[2], self.s1_list[1]]],
                     }])
 
+                # explicit recursion into all children
+                self.__test_linked_sync_via_parent_op(
+                    "uninstall -r", self.foo1_list[1],
+                    remove_packages=[
+                        self.foo1_list[1]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [
+                            [self.s1_list[2], self.s1_list[1]]],
+                        "remove_packages": [],
+                        },{
+                        "image_name": "system:img2",
+                        "change_packages": [
+                            [self.s1_list[2], self.s1_list[1]]],
+                    }])
+
 
 class TestPkgLinked3(TestPkgLinked):
         """Class used solely to split up the test suite for parallelization."""
@@ -1777,6 +1868,633 @@
                 self.__test_missing_parent_publisher_metadata()
 
 
+class TestPkgLinkedRecurse(TestPkgLinked):
+        """Test explicitly requested recursion"""
+
+        def _recursive_pkg(self, op, args, **kwargs):
+                """Run recursive pkg operation, compare results."""
+
+                def output_cb(output):
+                        self.assertEqualParsable(output, **kwargs)
+                self._pkg([0], "%s -r --parsable=0 %s" % (op, args),
+                    output_cb=output_cb)
+
+        def test_recursive_install(self):
+                """Test recursive pkg install"""
+
+                # create parent (0), push child (1, 2)
+                self._imgs_create(3)
+                self._attach_child(0, [1, 2])
+
+                self._recursive_pkg("install", self.foo1_list[0],
+                    add_packages=[self.foo1_list[0]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "add_packages": [self.foo1_list[0]]
+                    },{
+                        "image_name": "system:img2",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # remove pkgs from children, leave parent alone, try again
+                self._pkg([1,2], "uninstall %s" % self.foo1_list[0])
+
+                self._recursive_pkg("install", self.foo1_list[0],
+                    add_packages=[],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "add_packages": [self.foo1_list[0]]
+                    },{
+                        "image_name": "system:img2",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # remove pkgs from parent, leave children alone, try again
+                self._pkg([0], "uninstall %s" % self.foo1_list[0])
+
+                self._recursive_pkg("install", self.foo1_list[0],
+                    add_packages=[self.foo1_list[0]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "add_packages": []
+                    },{
+                        "image_name": "system:img2",
+                        "add_packages": []
+                    }
+                ])
+
+        def test_recursive_uninstall(self):
+                """Test recursive uninstall"""
+
+                # create parent (0), push child (1)
+                self._imgs_create(2)
+                self._attach_child(0, [1])
+
+                # install some packages to remove
+                self._pkg([0, 1], "install %s" % self.foo1_list[0])
+
+                # uninstall package which is present in parent and child
+                self._recursive_pkg("uninstall", self.foo1_list[0],
+                    remove_packages=[self.foo1_list[0]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "remove_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # install pkg back into child, leave parent alone, try again
+                self._pkg([1], "install %s" % self.foo1_list[0])
+                self._recursive_pkg("uninstall", self.foo1_list[0],
+                    remove_packages=[],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "remove_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # install pkg back into parent, leave child alone, try again
+                self._pkg([0], "install %s" % self.foo1_list[0])
+                self._recursive_pkg("uninstall", self.foo1_list[0],
+                    remove_packages=[self.foo1_list[0]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "remove_packages": []
+                    }
+                ])
+
+        def test_recursive_update(self):
+                """Test recursive update"""
+
+                # create parent (0), push child (1)
+                self._imgs_create(2)
+                self._attach_child(0, [1])
+
+                # install some packages to update
+                self._pkg([0, 1], "install %s" % self.foo1_list[0])
+
+                # update package which is present in parent and child
+                self._recursive_pkg("update", self.foo1_list[3],
+                    change_packages=[[self.foo1_list[0], self.foo1_list[3]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [[
+                            self.foo1_list[0],
+                            self.foo1_list[3]
+                        ]]
+                    }
+                ])
+
+                # downgrade child, leave parent alone, try again
+                self._pkg([1], "update %s" % self.foo1_list[0])
+                self._recursive_pkg("update", self.foo1_list[3],
+                    change_packages=[],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [[
+                            self.foo1_list[0],
+                            self.foo1_list[3]
+                        ]]
+                    }
+                ])
+
+                # downgrade parent, leave child alone, try again
+                self._pkg([0], "update %s" % self.foo1_list[0])
+                self._recursive_pkg("update", self.foo1_list[3],
+                    change_packages=[[self.foo1_list[0], self.foo1_list[3]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": []
+                    }
+                ])
+
+        def test_recursive_variant(self):
+                """Test recursive change-variant"""
+
+                # create parent (0), push child (1)
+                self._imgs_create(2)
+                self._attach_child(0, [1])
+
+                # install some packages
+                self._pkg([0, 1], "install %s" % self.foo1_list[0])
+
+                # change variant in parent and child
+                self._recursive_pkg("change-variant", "variant.foo=baz",
+                    change_variants=[["variant.foo", "baz"]],
+                    affect_packages=[self.foo1_list[0]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_variants": [["variant.foo", "baz"]],
+                        "affect_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # revert variant in child, leave parent alone, try again
+                self._pkg([1], "change-variant -v variant.foo=bar")
+                self._recursive_pkg("change-variant", "variant.foo=baz",
+                    change_variants=[],
+                    affect_packages=[],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_variants": [["variant.foo", "baz"]],
+                        "affect_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # revert variant in parent, leave child alone, try again
+                self._pkg([0], "change-variant -v variant.foo=bar")
+
+                self._pkg([0], "audit-linked -a")
+                self._recursive_pkg("change-variant", "variant.foo=baz",
+                    change_variants=[["variant.foo", "baz"]],
+                    affect_packages=[self.foo1_list[0]],
+                )
+
+        def test_recursive_facet(self):
+                """Test recursive change-facet"""
+
+                # create parent (0), push child (1)
+                self._imgs_create(2)
+                self._attach_child(0, [1])
+
+                # set facet in parent and child
+                self._recursive_pkg("change-facet", "facet.foo=True",
+                    change_facets=[["facet.foo", True, None, "local", False,
+                        False]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_facets": [["facet.foo", True, None, "local",
+                            False, False]],
+                    }
+                ])
+
+                # change facet in child, leave parent alone, try again
+                self._pkg([1], "change-facet -v facet.foo=False")
+                self._recursive_pkg("change-facet", "facet.foo=True",
+                    change_facets=[],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_facets": [["facet.foo", True, False, "local",
+                            False, False]],
+                    }
+                ])
+
+                # remove facet in child, leave parent alone, try again
+                self._pkg([1], "change-facet -v facet.foo=None")
+                self._recursive_pkg("change-facet", "facet.foo=True",
+                    change_facets=[],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_facets": [["facet.foo", True, None, "local",
+                            False, False]],
+                    }
+                ])
+
+                # change facet in parent, leave child alone, try again
+                self._pkg([0], "change-facet -v facet.foo=False")
+                self._recursive_pkg("change-facet", "facet.foo=True",
+                    change_facets=[["facet.foo", True, False, "local",
+                        False, False]],
+                )
+
+                # remove facet in parent, leave child alone, try again
+                self._pkg([0], "change-facet -v facet.foo=None")
+                self._recursive_pkg("change-facet", "facet.foo=True",
+                    change_facets=[["facet.foo", True, None, "local",
+                        False, False]],
+                )
+
+                # change facet in parent and child
+                self._recursive_pkg("change-facet", "facet.foo=False",
+                    change_facets=[["facet.foo", False, True, "local",
+                        False, False]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_facets": [["facet.foo", False, True, "local",
+                            False, False]],
+                    }
+                ])
+
+                # remove facet in parent and child
+                self._recursive_pkg("change-facet", "facet.foo=None",
+                    change_facets=[["facet.foo", None, False, "local",
+                            False, False]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_facets": [["facet.foo", None, False, "local",
+                            False, False]],
+                    }
+                ])
+
+        def test_image_selection(self):
+                """Test that explicit recursion into only the requested child
+                   images works as expected."""
+
+                # We already tested that all the different operations which
+                # support explicit recursion work in general so we only test
+                # with install to see if the image selection works correctly.
+
+                # create parent (0), push child (1,2,3)
+                self._imgs_create(4)
+                self._attach_child(0, [1,2,3])
+
+                # We are only interested if the correct children are selected
+                # for a certain operation so we make sure that operations on
+                # the parent are always a nop.
+                self._pkg([0], "install %s" % self.foo1_list[0])
+
+                # install into all children
+                self._recursive_pkg("install", self.foo1_list[0],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "add_packages": [self.foo1_list[0]]
+                    },{
+                        "image_name": "system:img2",
+                        "add_packages": [self.foo1_list[0]]
+                    },{
+                        "image_name": "system:img3",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # install only into img1
+                self._pkg([1,2,3], "uninstall %s" % self.foo1_list[0])
+                self._recursive_pkg("install -z system:img1", self.foo1_list[0],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # install only into img1 and img3
+                self._pkg([1], "uninstall %s" % self.foo1_list[0])
+                self._recursive_pkg("install -z system:img1 -z system:img3",
+                    self.foo1_list[0],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "add_packages": [self.foo1_list[0]]
+                    },{
+                        "image_name": "system:img3",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # install into all but img1
+                self._pkg([1,3], "uninstall %s" % self.foo1_list[0])
+                self._recursive_pkg("install -Z system:img1", self.foo1_list[0],
+                    child_images=[{
+                        "image_name": "system:img2",
+                        "add_packages": [self.foo1_list[0]]
+                    },{
+                        "image_name": "system:img3",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+                # install into all but img1 and img3
+                self._pkg([2,3], "uninstall %s" % self.foo1_list[0])
+                self._recursive_pkg("install -Z system:img1 -Z system:img3",
+                    self.foo1_list[0],
+                    child_images=[{
+                        "image_name": "system:img2",
+                        "add_packages": [self.foo1_list[0]]
+                    }
+                ])
+
+        def test_recursive_sync_install(self):
+                """Test that child images not specified for explicit recursion
+                   are still getting synced when installing."""
+
+                # create parent (0), push child (1,2)
+                self._imgs_create(3)
+                self._attach_child(0, [1, 2])
+
+                # install synced package into each image
+                self._pkg([0, 1, 2], "install -v %s" % self.p_sync1_name[2])
+
+                # install new version of synced pkg in parent and one child
+                # explicitly, second child should get synced too
+                self._recursive_pkg("install -z system:img1",
+                    self.p_sync1_name[1],
+                    change_packages=[[self.s1_list[2], self.s1_list[1]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [[self.s1_list[2], self.s1_list[1]]]
+                    },{
+                        "image_name": "system:img2",
+                        "change_packages": [[self.s1_list[2], self.s1_list[1]]]
+                    }
+                ])
+
+        def test_recursive_sync_update(self):
+                """Test that child images not specified for explicit recursion
+                   are still getting synced when updating."""
+
+                # create parent (0), push child (1,2)
+                self._imgs_create(3)
+                self._attach_child(0, [1, 2])
+
+                # install synced package into each image
+                self._pkg([0, 1, 2], "install -v %s" % self.p_sync1_name[2])
+
+                # install new version of synced pkg in parent and one child
+                # explicitly, second child should get synced too
+                self._recursive_pkg("update -z system:img1", "",
+                    change_packages=[[self.s1_list[2], self.s1_list[0]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [[self.s1_list[2], self.s1_list[0]]]
+                    },{
+                        "image_name": "system:img2",
+                        "change_packages": [[self.s1_list[2], self.s1_list[0]]]
+                    }
+                ])
+
+        def test_recursive_sync_update_pkg(self):
+                """Test that child images not specified for explicit recursion
+                   are still getting synced when updating a particular pkg."""
+
+                # create parent (0), push child (1,2)
+                self._imgs_create(3)
+                self._attach_child(0, [1, 2])
+
+                # install synced package into each image
+                self._pkg([0, 1, 2], "install -v %s" % self.p_sync1_name[2])
+
+                # install new version of synced pkg in parent and one child
+                # explicitly, second child should get synced too
+                self._recursive_pkg("update -z system:img1",
+                    self.p_sync1_name[1],
+                    change_packages=[[self.s1_list[2], self.s1_list[1]]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "change_packages": [[self.s1_list[2], self.s1_list[1]]]
+                    },{
+                        "image_name": "system:img2",
+                        "change_packages": [[self.s1_list[2], self.s1_list[1]]]
+                    }
+                ])
+
+        def test_recursive_uninstall_synced_pkg(self):
+                """Test that we can uninstall a synced package from all images
+                   with -r."""
+
+                # create parent (0), push child (1,2)
+                self._imgs_create(3)
+                self._attach_child(0, [1, 2])
+
+                # install synced package into each image
+                self._pkg([0, 1, 2], "install -v %s" % self.p_sync1_name[2])
+
+                # uninstall synced pkg from all images
+                self._recursive_pkg("uninstall", self.p_sync1_name[2],
+                    remove_packages=[self.s1_list[2]],
+                    child_images=[{
+                        "image_name": "system:img1",
+                        "remove_packages": [self.s1_list[2]]
+                    },{
+                        "image_name": "system:img2",
+                        "remove_packages": [self.s1_list[2]]
+                    }
+                ])
+
+        def test_recursive_idr_removal(self):
+                """Test if IDR handling with linked images works as intended."""
+
+                pkgs = (
+                        """
+                            open [email protected],5.11-0.1
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.2
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.2
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1
+                            add depend type=incorporate [email protected],5.11-0.1
+                            add depend type=incorporate [email protected],5.11-0.1
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                         """
+                            open [email protected],5.11-0.2
+                            add depend type=incorporate [email protected],5.11-0.2
+                            add depend type=incorporate [email protected],5.11-0.2
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.1.0
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=require fmri=pkg:/idr1
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.1.1
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=require fmri=pkg:/idr1
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.2.0
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=require fmri=pkg:/idr2
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.1.0
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=require fmri=pkg:/idr1
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.1.1
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=require fmri=pkg:/idr1
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.2.0
+                            add depend type=require fmri=pkg:/incorp
+                            add depend type=require fmri=pkg:/idr2
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.1.0
+                            add depend type=incorporate [email protected],5.11-0.1.1.0
+                            add depend type=incorporate [email protected],5.11-0.1.1.0
+                            add depend type=require fmri=idr1_entitlement
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.1.1
+                            add depend type=incorporate [email protected],5.11-0.1.1.1
+                            add depend type=incorporate [email protected],5.11-0.1.1.1
+                            add depend type=require fmri=idr1_entitlement
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0.1.2.0
+                            add depend type=incorporate [email protected],5.11-0.1.2.0
+                            add depend type=incorporate [email protected],5.11-0.1.2.0
+                            add depend type=require fmri=idr2_entitlement
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0
+                            add depend type=exclude fmri=no-idrs
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        """
+                            open [email protected],5.11-0
+                            add depend type=exclude fmri=no-idrs
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+
+                        # hack to prevent idrs from being installed from repo...
+
+                        """
+                            open [email protected],5.11-0
+                            add depend type=parent fmri=%s
+                            close """ % pkg.actions.depend.DEPEND_SELF,
+                )
+
+                # publish additional idr packages
+                self.pkgsend_bulk(self.rurl1, pkgs)
+
+                # create parent (0), push child (1,2)
+                self._imgs_create(3)
+                self._attach_child(0, [1, 2])
+
+                # install kernel pkg; remember version so we can reinstall it
+                # later
+                self._pkg([0, 1, 2], "install -v no-idrs")
+                # install kernel package into all images
+                self._pkg([0, 1 ,2], "install -v [email protected],5.11-0.1")
+                self._pkg([0], "list -Hv [email protected],5.11-0.1 | "
+                    "/usr/bin/awk '{print $1}'")
+                kernel_fmri = self.output.strip()
+                # install network package only in parent and one child
+                self._pkg([0, 1], "install -v [email protected],5.11-0.1")
+                self._pkg([0], "list -Hv [email protected],5.11-0.1 | "
+                    "/usr/bin/awk '{print $1}'")
+                network_fmri = self.output.strip()
+                self._pkg([2], "list network", rv=EXIT_OOPS)
+
+                # upgrade to next version w/o encountering idrs, children should
+                # be updated automatically.
+                self._pkg([0], "update -v");
+                self._pkg([0, 1, 2], "list [email protected],5.11-0.2")
+                self._pkg([0, 1], "list [email protected],5.11-0.2")
+                self._pkg([2], "list network", rv=EXIT_OOPS)
+
+                # try installing idr1; testing wild card support and -z as well
+                self._pkg([0], "uninstall -r no-idrs")
+                self._pkg([0], "install -r "
+                    "--reject 'k*' --reject 'i*' --reject network no-idrs")
+                self._pkg([0], "install -r -v [email protected],5.11-0.1")
+                self._pkg([0], "install -v -r -z system:img1 "
+                    "[email protected],5.11-0.1")
+
+                self._pkg([0], "install -r -v --reject no-idrs "
+                    "idr1_entitlement")
+                self._pkg([0], "install -r -v [email protected],5.11-0.1.1.0")
+                self._pkg([0], "update -r -v --reject idr2")
+                self._pkg([0, 1, 2], "list [email protected],5.11-0.1.1.1")
+
+                # switch to idr2, which affects same package
+                self._pkg([0], "install -r -v --reject idr1 --reject 'idr1_*' "
+                    "idr2 idr2_entitlement")
+
+                # switch back to base version of kernel and network
+                self._pkg([0], "update -v -r "
+                    "--reject idr2 --reject 'idr2_*' %s %s" % (kernel_fmri,
+                    network_fmri))
+
+                # reinstall idr1, then update to version 2 of base kernel
+                self._pkg([0], "install -r -v "
+                    "[email protected],5.11-0.1.1.0 idr1_entitlement")
+                self._pkg([0, 1, 2], "list [email protected],5.11-0.1.1.0")
+                self._pkg([0, 1], "list [email protected],5.11-0.1.1.0")
+                self._pkg([2], "list network", rv=EXIT_OOPS)
+
+                # Wildcards are purposefully used here for both patterns to
+                # ensure pattern matching works as expected for update.
+                self._pkg([0], "update -r -v "
+                    "--reject 'idr1*' '*[email protected]'")
+                self._pkg([0, 1, 2], "list [email protected],5.11-0.2")
+                self._pkg([0, 1], "list [email protected],5.11-0.2")
+                self._pkg([2], "list network", rv=EXIT_OOPS)
+
+
 class TestFacetInheritance(TestPkgLinked):
         """Class to test facet inheritance between images.
 
@@ -3183,7 +3901,6 @@
                 # populate repository
                 self.pkgsend_bulk(self.rurl1, self.p_sync1)
 
-
         def __req_phys_mem(self, phys_mem_req):
                 """Verify that the current machine has a minimal amount of
                 physical memory (in GB).  If it doesn't raise
@@ -3259,5 +3976,942 @@
                 self.pkg("update -C0 -q")
 
 
+class TestPkgLinkedPaths(pkg5unittest.ManyDepotTestCase):
+        """Class to test linked image path management."""
+
+        #
+        # linked image types
+        #
+        T_NONE = "none"
+        T_PUSH = "push"
+        T_PULL = "pull"
+
+        #
+        # Linked image trees for testing.
+        # All trees have an implicit parent node of type T_NONE.
+        # Trees are defined by a vector with up to four elements:
+        #     child 1: parented to root image
+        #     child 2: parented to root image
+        #     child 3: parented to child 1
+        #     child 4: parented to child 1
+        #
+        t_vec_list = [
+                [ T_PUSH ],
+                [ T_PULL ],
+                [ T_PUSH, T_PULL ],
+
+                [ T_PUSH, T_NONE, T_PUSH ],
+                [ T_PUSH, T_NONE, T_PULL ],
+                [ T_PUSH, T_NONE, T_PUSH, T_PULL ],
+
+                [ T_PULL, T_NONE, T_PUSH ],
+                [ T_PULL, T_NONE, T_PULL ],
+                [ T_PULL, T_NONE, T_PUSH, T_PULL ],
+        ]
+
+        #
+        # Linked image child locations.
+        #
+        L_CNEST = "children are nested"
+        L_CPARALLEL = "children are parallel to parent"
+        L_CBELOW = "children are below parent, but not nested"
+        L_CABOVE = "children are above parent, but not nested"
+        l_list = [ L_CNEST, L_CPARALLEL, L_CBELOW, L_CABOVE ]
+
+        #
+        # Linked image directory location vectors.
+        # Location vectors consist of 5 image locations:
+        #       root image path
+        #       child 1 path
+        #       child 2 path
+        #       child 3 path
+        #       child 4 path
+        #       child 5 path
+        #
+        l_vec_dict = {
+            L_CNEST:     [ "./",     "d/",    "d1/",   "d/d/",     "d/d1/"    ],
+            L_CPARALLEL: [ "d/",     "d1/",   "d2/",   "d3/",      "d4/"      ],
+            L_CBELOW:    [ "d/",     "d1/d/", "d2/d/", "d3/d1/d/", "d3/d2/d/" ],
+            L_CABOVE:    [ "d/d/d/", "d/d1/", "d/d2/", "d1/",      "d2/"      ],
+        }
+
+        path_start = "d1/p/p"
+        path_tests = [
+                # test directory moves down
+                # (tests beadm mount <be> /a; pkg -R /a type behavior)
+                "d1/p/p/a",
+                "d1/p/p/d1/p/p",
+
+                # test directory moves up
+                "d1/p",
+                "d1",
+
+                # test parallel directory moves
+                "d1/p/b",
+                "d2/p/p",
+                "d2/p",     # and up
+                "d2/p/p/a", # and down
+        ]
+
+        p_sync1 = []
+        p_vers = [
+            "@1.2,5.11-145:19700101T000001Z",
+            "@1.2,5.11-145:19700101T000000Z", # old time
+            "@1.1,5.11-145:19700101T000000Z", # old ver
+            "@1.1,5.11-144:19700101T000000Z", # old build
+            "@1.0,5.11-144:19700101T000000Z", # oldest
+        ]
+        p_files = [
+            "tmp/bar",
+            "tmp/baz",
+        ]
+
+        # fake zonename binary used for testing
+        zonename_sh = """
+#!/bin/sh
+echo global
+exit 0""".strip("\n")
+
+        # fake zoneadm binary used for testing
+        zoneadm_sh = """
+#!/bin/sh
+while getopts "R:" OPT ; do
+case $OPT in
+        R )
+                [[ "$OPTARG" != "$PKG_GZR/" ]] && exit 0
+                ;;
+esac
+done
+cat <<-EOF
+0:global:running:$PKG_GZR/::solaris:shared:-:none:
+-:z1:installed:$PKG_GZR/z1::solaris:excl:-::
+-:z2:unavailable:$PKG_GZR/z21::solaris:excl:-::
+-:z3:configured:$PKG_GZR/z3::solaris:excl:-::
+-:z4:incomplete:$PKG_GZR/z4::solaris:excl:-::
+-:kz:installed:$PKG_GZR/system/volatile/zones/kz1/zonepath::solaris-kz:excl:-:solaris-kz:
+-:s10:installed:$PKG_GZR/s10::solaris10:excl:-::
+EOF
+exit 0""".strip("\n")
+
+        # generate packages that do need to be synced
+        p_sync1_name_gen = "sync1"
+        pkgs = [p_sync1_name_gen + ver for ver in p_vers]
+        p_sync1_name = dict(zip(range(len(pkgs)), pkgs))
+        for i in p_sync1_name:
+                p_data = "open %s\n" % p_sync1_name[i]
+                p_data += "add depend type=parent fmri=%s" % \
+                    pkg.actions.depend.DEPEND_SELF
+                p_data += """
+                    close\n"""
+                p_sync1.append(p_data)
+
+        def setUp(self):
+                self.i_count = 3
+                pkg5unittest.ManyDepotTestCase.setUp(self, ["test"],
+                    image_count=self.i_count)
+
+                # create files that go in packages
+                self.make_misc_files(self.p_files)
+
+                # get repo url
+                self.rurl1 = self.dcs[1].get_repo_url()
+
+                # populate repository
+                self.pkgsend_bulk(self.rurl1, self.p_sync1)
+
+                # setup image names and paths
+                self.i_name = []
+                self.i_path = []
+                for i in range(self.i_count):
+                        name = "system:img%d" % i
+                        self.i_name.insert(i, name)
+                        self.i_path.insert(i, self.img_path(i))
+
+        def __mk_bin(self, path, txt):
+                with file(path, "w+") as fobj:
+                        print >> fobj, txt
+                self.cmdline_run("chmod a+x %s" % path, coverage=False)
+
+        def __mk_zone_bins(self, base_path):
+
+                # create a zonename binary
+                bin_zonename = os.path.join(base_path, "zonename")
+                self.__mk_bin(bin_zonename, self.zonename_sh)
+
+                # create a zoneadm binary
+                bin_zoneadm = os.path.join(base_path, "zoneadm")
+                self.__mk_bin(bin_zoneadm, self.zoneadm_sh)
+
+                return (bin_zonename, bin_zoneadm)
+
+        def __attach_params(self, base_path, pdir, cdir):
+                ppath = os.path.join(base_path, pdir)
+                cpath = os.path.join(base_path, cdir)
+                # generate child image name based on the child image dir
+                cname = re.sub('[/]', '_', cdir.rstrip(os.sep))
+                return ppath, cpath, cname
+
+        def __attach_child(self, base_path, pdir, cdir, exit=EXIT_OK):
+                ppath, cpath, cname = \
+                    self.__attach_params(base_path, pdir, cdir)
+                self.pkg("-R %s attach-linked -c system:%s %s" %
+                    (ppath, cname, cpath), exit=exit)
+
+        def __attach_parent(self, base_path, cdir, pdir, exit=EXIT_OK):
+                ppath, cpath, cname = \
+                    self.__attach_params(base_path, pdir, cdir)
+                self.pkg("-R %s attach-linked -p system:%s %s" %
+                    (cpath, cname, ppath), exit=exit)
+
+        def __try_attach(self, base_path, i1, i2):
+                self.__attach_child(base_path, i1, i2, exit=EXIT_OOPS)
+                self.__attach_parent(base_path, i1, i2, exit=EXIT_OOPS)
+
+        def __create_images(self, base_path, img_dirs, repos=None):
+                """Create images (in directory order)"""
+                for d in sorted(img_dirs):
+                        p = os.path.join(base_path, d)
+                        self.cmdline_run("mkdir -p %s" % p, coverage=False)
+                        self.image_create(self.rurl1, destroy=False, img_path=p)
+
+        def __define_limages(self, base_path, types, locs):
+                """Given a vector of linked image types and locations, return
+                a list of linked images.  The format of returned list entries
+                is:
+                        <image dir, image type, parent dir>
+                """
+
+                limages = []
+                index = 0
+                assert len(types) <= len(locs)
+
+                # first image is always a parent
+                limages.append([locs[0], self.T_NONE, None])
+
+                for t in types:
+                        index += 1
+
+                        # determine child and parent paths
+                        cdir = locs[index]
+                        pdir = None
+                        if index in [1, 2]:
+                                pdir = locs[0]
+                        elif index in [3, 4]:
+                                pdir = locs[1]
+                        else:
+                                assert "invalid index: ", index
+                        assert pdir is not None
+
+                        # skip this image
+                        if t == self.T_NONE:
+                                continue
+
+                        # add image to the list
+                        limages.append([cdir, t, pdir])
+
+                return limages
+
+        def __create_limages(self, base_path, limages):
+                """Create images (in directory order)"""
+                img_dirs = [
+                        cdir
+                        for cdir, t, pdir in limages
+                ]
+                self.__create_images(base_path, img_dirs)
+
+        def __attach_limages(self, base_path, limages):
+                """Attach images"""
+                for cdir, t, pdir in limages:
+                        if t == self.T_NONE:
+                                continue
+                        if t == self.T_PUSH:
+                                self.__attach_child(base_path, pdir, cdir)
+                                continue
+                        assert t == self.T_PULL
+                        self.__attach_parent(base_path, cdir, pdir)
+
+        def __audit_limages(self, base_path, limages):
+                """Audit images"""
+
+                parents = set([
+                    pdir
+                    for cdir, t, pdir in limages
+                    if t == self.T_PUSH
+                ])
+                for pdir in parents:
+                        p = os.path.join(base_path, pdir)
+                        self.pkg("-R %s audit-linked -a" % p)
+
+                children = set([
+                    cdir
+                    for cdir, t, pdir in limages
+                    if t != self.T_NONE
+                ])
+                for pdir in parents:
+                        p = os.path.join(base_path, cdir)
+                        self.pkg("-R %s audit-linked" % p)
+
+        def __ccmd(self, args, rv=0):
+                """Run a 'C' (or other non-python) command."""
+                assert type(args) == str
+                # Ensure 'coverage' is turned off-- it won't work.
+                self.cmdline_run("%s" % args, exit=rv, coverage=False)
+
+        def __list_linked_check(self, ipath, lipaths,
+            bin_zonename, bin_zoneadm):
+                """Given an image path (ipath), verify that pkg list-linked
+                displays the expected linked image paths (lipaths).  The
+                caller must specify paths to custom zonename and zoneadm
+                binaries that will output from those commands."""
+
+                outfile1 = os.path.join(ipath, "__list_linked_check")
+
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' "
+                    "--debug bin_zoneadm='%s' "
+                    "-R %s list-linked > %s" %
+                    (bin_zonename, bin_zoneadm, ipath, outfile1))
+                self.__ccmd("cat %s" % outfile1)
+                for lipath in lipaths:
+                        self.__ccmd("egrep '[ 	]%s[ 	]*$' %s" %
+                            (lipath, outfile1))
+
+        def __check_linked_props(self, ipath, liname, props,
+            bin_zonename, bin_zoneadm):
+                """Given an image path (ipath), verify that pkg
+                property-linked displays the expected linked image properties.
+                (props).  The caller must specify paths to custom zonename and
+                zoneadm binaries that will output from those commands."""
+
+                outfile1 = os.path.join(ipath, "__check_linked_props1")
+                outfile2 = os.path.join(ipath, "__check_linked_props2")
+
+                if liname:
+                        liname = "-l " + liname
+                else:
+                        liname = ""
+
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' "
+                    "--debug bin_zoneadm='%s' "
+                    "-R %s property-linked %s -H > %s" %
+                    (bin_zonename, bin_zoneadm,
+                    ipath, liname, outfile1))
+                self.__ccmd("cat %s" % outfile1)
+
+                for p, v in props.iteritems():
+                        if v is None:
+                                # verify property is not present
+                                self.__ccmd(
+                                    "grep \"^%s[ 	]\" %s" %
+                                    (p, outfile1), rv=1)
+                                continue
+
+                        # verify property and value
+                        self.__ccmd("grep \"^%s[ 	]\" %s > %s" %
+                            (p, outfile1, outfile2))
+                        self.__ccmd("cat %s" % outfile2)
+                        # verify property and value
+                        self.__ccmd("grep \"[ 	]%s[ 	]*$\" %s" %
+                            (v, outfile2))
+
+        def test_linked_paths_moves(self):
+                """Create trees of linked images, with different relative path
+                configurations.  Then move each tree to a different locations
+                and see if the images within each tree can still find each
+                other."""
+
+                tmp_path = os.path.join(self.img_path(0), "tmp")
+                base_path = os.path.join(self.img_path(0), "images")
+
+                for t_vec, loc in itertools.product(
+                    self.t_vec_list, self.l_list):
+
+                        l_vec = self.l_vec_dict[loc]
+
+                        pcur = os.path.join(base_path, self.path_start)
+
+                        # create and link image tree
+                        limages = self.__define_limages(pcur, t_vec, l_vec)
+                        self.__create_limages(pcur, limages)
+                        self.__attach_limages(pcur, limages)
+
+                        for pnew in self.path_tests:
+
+                                assert limages
+                                assert pcur != pnew
+
+                                # determine the parent images new location
+                                pnew = os.path.join(base_path, pnew)
+
+                                # move the parent to a temporary location
+                                self.__ccmd("mv %s %s" % (pcur, tmp_path))
+
+                                # cleanup old directory, avoid "rm -rf"
+                                d = pcur
+                                while True:
+                                        d = os.path.dirname(d)
+                                        if len(d) <= len(base_path):
+                                                break
+                                        self.__ccmd("rmdir %s" % d)
+
+                                # move the parent to it's new location
+                                self.__ccmd(
+                                    "mkdir -p %s" % os.path.dirname(pnew))
+                                self.__ccmd("mv %s %s" % (tmp_path, pnew))
+
+                                # verify that the images can find each other
+                                self.__audit_limages(pnew, limages)
+
+                                # save the parent images last location
+                                pcur = pnew
+
+                        # cleanup current image tree
+                        shutil.rmtree(base_path)
+
+
+        def test_linked_paths_no_self_link(self):
+                """You can't link images to themselves."""
+
+                base_path = self.img_path(0)
+                img_dirs = [ "./" ]
+                self.__create_images(base_path, img_dirs)
+                self.__try_attach(base_path, "./", "./")
+
+        def test_linked_paths_no_nested_parent(self):
+                """You can't link images if the parent image is nested within
+                the child."""
+
+                base_path = self.img_path(0)
+                img_dirs = [ "./", "1/" ]
+
+                self.__create_images(base_path, img_dirs)
+
+                self.__attach_child(base_path, "1/", "./", exit=EXIT_OOPS)
+                self.__attach_parent(base_path, "./", "1/", exit=EXIT_OOPS)
+
+        def test_linked_paths_no_liveroot_child(self):
+                """You can't link the liveroot image as a child."""
+
+                base_path = self.img_path(0)
+                img_dirs = [ "./", "1/" ]
+
+                self.__create_images(base_path, img_dirs)
+
+                ppath, cpath, cname = \
+                    self.__attach_params(base_path, "./", "1/")
+
+                self.pkg("--debug simulate_live_root='%s' "
+                    "-R %s attach-linked -c system:%s %s" %
+                    (cpath, ppath, cname, cpath), exit=EXIT_OOPS)
+                self.pkg("--debug simulate_live_root='%s' "
+                    "-R %s attach-linked -p system:%s %s" %
+                    (cpath, cpath, cname, ppath), exit=EXIT_OOPS)
+
+        def test_linked_paths_no_intermediate_imgs(self):
+                """You can't link images if there are intermediate image in
+                between."""
+
+                base_path = self.img_path(0)
+                img_dirs = [ "./", "1/", "1/11/", "2/" ]
+
+                self.__create_images(base_path, img_dirs)
+
+                # can't link "./" and "1/11/" because "1/" is inbetween
+                self.__try_attach(base_path, "./", "1/11/")
+
+                # can't link "1/" and "2/" because "./" is in between
+                self.__try_attach(base_path, "1/", "2/")
+
+        def test_linked_paths_no_attach_in_temporary_location(self):
+                """You can't link images if we're operating on already linked
+                images in temporary locations."""
+
+                base_path = os.path.join(self.img_path(0), "images1")
+                img_dirs = [ "./",
+                    "p/",
+                    "p/1/", "p/2/", "p/3/",
+                    "p/1/11/", "p/2/22/"
+                ]
+
+                self.__create_images(base_path, img_dirs)
+                self.__attach_child(base_path,  "p/", "p/1/")
+                self.__attach_parent(base_path, "p/2/", "p/")
+
+                # move the images
+                pnew = os.path.join(self.img_path(0), "images2")
+                self.__ccmd("mv %s %s" % (base_path, pnew))
+                base_path = pnew
+
+                self.__attach_parent(base_path, "p/",   "./",
+                    exit=EXIT_OOPS)
+                self.__attach_child(base_path,  "p/",   "p/3/",
+                    exit=EXIT_OOPS)
+                self.__attach_child(base_path,  "p/1/", "p/1/11/",
+                    exit=EXIT_OOPS)
+                self.__attach_child(base_path,  "p/2/", "p/2/22/",
+                    exit=EXIT_OOPS)
+
+        def test_linked_paths_staged(self):
+                """Test path handling code with staged operation.  Make sure
+                that we correctly handle images moving around between stages.
+                This simulates normal pkg updates where we plan an update for
+                "/", and then we clone "/", mount it at a  a temporarly
+                location, and then update the clone."""
+
+                tmp_path = os.path.join(self.img_path(0), "tmp")
+                base_path = os.path.join(self.img_path(0), "images")
+
+                t_vec = [ self.T_PUSH, self.T_NONE, self.T_PUSH, self.T_PULL ]
+                l_vec = [ "", "d/", "d1/", "d/d/", "d/d1/"    ]
+                limages = self.__define_limages(base_path, t_vec, l_vec)
+
+                self.__create_limages(base_path, limages)
+                for i in range(len(limages)):
+                        ipath = os.path.join(base_path, limages[i][0])
+                        self.pkg("-R %s install [email protected]" % ipath)
+                self.__attach_limages(base_path, limages)
+
+                for i in range(len(limages)):
+
+                        # It only makes sense to try and update T_NONE and
+                        # T_PULL images (T_PUSH images will be updated
+                        # implicitly via recursion).
+                        if limages[i][1] == self.T_PUSH:
+                                continue
+
+                        # plan update
+                        ipath = os.path.join(base_path, limages[i][0])
+                        self.pkg("-R %s update --stage=plan" % ipath)
+
+                        # move images to /a
+                        self.__ccmd("mv %s %s" % (base_path, tmp_path))
+                        new_path = os.path.join(base_path, "a")
+                        self.__ccmd("mkdir -p %s" % os.path.dirname(new_path))
+                        self.__ccmd("mv %s %s" % (tmp_path, new_path))
+
+                        # finish update
+                        ipath = os.path.join(new_path, limages[i][0])
+                        self.pkg("-R %s update --stage=prepare" % ipath)
+                        self.pkg("-R %s update --stage=execute" % ipath)
+
+                        # move images back
+                        # cleanup old directory, avoid "rm -rf"
+                        self.__ccmd("mv %s %s" % (new_path, tmp_path))
+                        d = new_path
+                        while True:
+                                d = os.path.dirname(d)
+                                if len(d) < len(base_path):
+                                        break
+                                self.__ccmd("rmdir %s" % d)
+                        self.__ccmd("mkdir -p %s" % os.path.dirname(base_path))
+                        self.__ccmd("mv %s %s" % (tmp_path, base_path))
+
+        def test_linked_paths_staged_with_zones(self):
+                """Simulate staged packaging operations involving zones."""
+
+                tmp_path = os.path.join(self.img_path(0), "tmp")
+                base_path = os.path.join(self.img_path(0), "images")
+
+                # create a zone binaries
+                bin_zonename, bin_zoneadm = self.__mk_zone_bins(self.test_root)
+
+                # setup image paths
+                img_dirs = [
+                    "", "z1/root"
+                ]
+                gzpath = os.path.join(base_path, img_dirs[0])
+                ngzpath = os.path.join(base_path, img_dirs[1])
+                os.environ["PKG_GZR"] = gzpath.rstrip(os.sep)
+
+                # create images, install packages, and link them
+                self.__create_images(base_path, img_dirs)
+                self.pkg("-R %s install [email protected]" % gzpath)
+                self.pkg("-R %s install [email protected]" % ngzpath)
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' --debug bin_zoneadm='%s' "
+                    "-R %s attach-linked -v -f -c zone:z1 %s" %
+                    (bin_zonename, "/bin/true", gzpath, ngzpath))
+
+                # plan update
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' --debug bin_zoneadm='%s' "
+                    "-R %s update -vvv --stage=plan" %
+                    (bin_zonename, bin_zoneadm, gzpath))
+
+                # move images to /a
+                self.__ccmd("mv %s %s" % (base_path, tmp_path))
+                base_path = os.path.join(base_path, "a")
+                gzpath = os.path.join(base_path, img_dirs[0])
+                ngzpath = os.path.join(base_path, img_dirs[1])
+                os.environ["PKG_GZR"] = gzpath.rstrip(os.sep)
+                self.__ccmd("mkdir -p %s" % os.path.dirname(base_path))
+                self.__ccmd("mv %s %s" % (tmp_path, gzpath))
+
+                # finish update
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' --debug bin_zoneadm='%s' "
+                    "-R %s update --stage=prepare" %
+                    (bin_zonename, bin_zoneadm, gzpath))
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' --debug bin_zoneadm='%s' "
+                    "-R %s update --stage=execute" %
+                    (bin_zonename, bin_zoneadm, gzpath))
+
+                # verify that all the images got updated
+                self.pkg("-R %s list [email protected]" % gzpath)
+                self.pkg("-R %s list [email protected]" % ngzpath)
+
+                del os.environ["PKG_GZR"]
+
+        def test_linked_paths_list_and_props(self):
+                """Verify that all linked image paths reported by list-linked
+                and property-linked are correct before and after moving trees
+                of images."""
+
+                tmp_path = os.path.join(self.img_path(0), "tmp")
+                base_path = os.path.join(self.img_path(0), "images")
+
+                # create a zone binaries
+                bin_zonename, bin_zoneadm = self.__mk_zone_bins(self.test_root)
+
+                # setup image paths
+                img_dirs = [
+                    "", "s1/", "s2/", "z1/root/"
+                ]
+                img_paths = [
+                        os.path.join(base_path, d)
+                        for d in img_dirs
+                ]
+                gzpath, s1path, s2path, ngzpath = img_paths
+                os.environ["PKG_GZR"] = gzpath.rstrip(os.sep)
+
+                # create images and link them
+                self.__create_images(base_path, img_dirs)
+                self.__attach_child(base_path, "", img_dirs[1])
+                self.__attach_parent(base_path, img_dirs[2], "")
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' --debug bin_zoneadm='%s' "
+                    "-R %s attach-linked -v -f -c zone:z1 %s" %
+                    (bin_zonename, "/bin/true", gzpath, ngzpath))
+
+                # Make sure that list-linked displays the correct paths.
+                for ipath, lipaths in [
+                        [ gzpath,  [ gzpath, s1path, ngzpath ]],
+                        [ s1path,  [ s1path ]],
+                        [ s2path,  [ gzpath, s2path ]],
+                        [ ngzpath, [ ngzpath ]],
+                    ]:
+                        self.__list_linked_check(ipath, lipaths,
+                            bin_zonename, bin_zoneadm)
+
+                # Make sure that property-linked displays the correct paths.
+                for ipath, liname, props in [
+                        [ gzpath, None, {
+                            "li-current-parent": None,
+                            "li-current-path": gzpath,
+                            "li-parent": None,
+                            "li-path": gzpath,
+                            "li-path-transform": "('/', '/')",
+                            }],
+                        [ gzpath, "system:s1", {
+                            "li-current-parent": None,
+                            "li-current-path": s1path,
+                            "li-parent": None,
+                            "li-path": s1path,
+                            "li-path-transform": "('/', '/')",
+                            }],
+                        [ gzpath, "zone:z1", {
+                            "li-current-parent": None,
+                            "li-current-path": ngzpath,
+                            "li-parent": None,
+                            "li-path": ngzpath,
+                            "li-path-transform": "('/', '/')",
+                            }],
+                        [ s1path, None, {
+                            "li-current-parent": None,
+                            "li-current-path": s1path,
+                            "li-parent": None,
+                            "li-path": s1path,
+                            "li-path-transform": "('/', '/')",
+                            }],
+                        [ s2path, None, {
+                            "li-current-parent": gzpath,
+                            "li-current-path": s2path,
+                            "li-parent": gzpath,
+                            "li-path": s2path,
+                            "li-path-transform": "('/', '/')",
+                            }],
+                        [ ngzpath, None, {
+                            "li-current-parent": None,
+                            "li-current-path": ngzpath,
+                            "li-parent": None,
+                            "li-path": "/",
+                            "li-path-transform": "('/', '%s')" % ngzpath,
+                            }],
+                    ]:
+                        self.__check_linked_props(ipath, liname, props,
+                            bin_zonename, bin_zoneadm)
+
+                # save old paths
+                ogzpath, os1path, os2path, ongzpath = img_paths
+
+                # move images to /a
+                self.__ccmd("mv %s %s" % (base_path, tmp_path))
+                base_path = os.path.join(base_path, "a")
+                self.__ccmd("mkdir -p %s" % os.path.dirname(base_path))
+                self.__ccmd("mv %s %s" % (tmp_path, base_path))
+
+                # update paths
+                img_paths = [
+                        os.path.join(base_path, d)
+                        for d in img_dirs
+                ]
+                gzpath, s1path, s2path, ngzpath = img_paths
+                os.environ["PKG_GZR"] = gzpath.rstrip(os.sep)
+
+                # Make sure that list-linked displays the correct paths.
+                for ipath, lipaths in [
+                        [ gzpath,  [ gzpath, s1path, ngzpath ]],
+                        [ s1path,  [ s1path ]],
+                        [ s2path,  [ gzpath, s2path ]],
+                        [ ngzpath, [ ngzpath ]],
+                    ]:
+                        self.__list_linked_check(ipath, lipaths,
+                            bin_zonename, bin_zoneadm)
+
+                # Make sure that property-linked displays the correct paths.
+                for ipath, liname, props in [
+                        [ gzpath, None, {
+                            "li-current-parent": None,
+                            "li-current-path": gzpath,
+                            "li-parent": None,
+                            "li-path": ogzpath,
+                            "li-path-transform": "('%s', '%s')" %
+                                (ogzpath, gzpath)
+                            }],
+                        [ gzpath, "system:s1", {
+                            "li-current-parent": None,
+                            "li-current-path": s1path,
+                            "li-parent": None,
+                            "li-path": os1path,
+                            "li-path-transform": "('%s', '%s')" %
+                                (ogzpath, gzpath)
+                            }],
+                        [ gzpath, "zone:z1", {
+                            "li-current-parent": None,
+                            "li-current-path": ngzpath,
+                            "li-parent": None,
+                            "li-path": ongzpath,
+                            "li-path-transform": "('%s', '%s')" %
+                                (ogzpath, gzpath)
+                            }],
+                        [ s1path, None, {
+                            "li-current-parent": None,
+                            "li-current-path": s1path,
+                            "li-parent": None,
+                            "li-path": os1path,
+                            "li-path-transform": "('%s', '%s')" %
+                                (ogzpath, gzpath)
+                            }],
+                        [ s2path, None, {
+                            "li-current-parent": gzpath,
+                            "li-current-path": s2path,
+                            "li-parent": ogzpath,
+                            "li-path": os2path,
+                            "li-path-transform": "('%s', '%s')" %
+                                (ogzpath, gzpath)
+                            }],
+                        [ ngzpath, None, {
+                            "li-current-parent": None,
+                            "li-current-path": ngzpath,
+                            "li-parent": None,
+                            "li-path": "/",
+                            "li-path-transform": "('/', '%s')" % ngzpath,
+                            }],
+                    ]:
+                        self.__check_linked_props(ipath, liname, props,
+                            bin_zonename, bin_zoneadm)
+
+        def test_linked_paths_guess_path_transform(self):
+                """If a parent image has no properties, then rather than
+                throwing an exception (that a user has no way to fix), we try
+                to fabricate some properties to run with.  To do this we ask
+                each linked image plugin if it knows what the current path
+                transform is (which would tell us what original root path was).
+                Only the zones plugin implements this functionality, so test
+                it here."""
+
+                base_path = os.path.join(self.img_path(0), "images")
+
+                # create a zone binaries
+                bin_zonename, bin_zoneadm = self.__mk_zone_bins(self.test_root)
+
+                # setup image paths
+                img_dirs = [
+                    "", "z1/root/"
+                ]
+                img_paths = [
+                        os.path.join(base_path, d)
+                        for d in img_dirs
+                ]
+                gzpath, ngzpath = img_paths
+                os.environ["PKG_GZR"] = gzpath.rstrip(os.sep)
+
+                # create images and link them
+                self.__create_images(base_path, img_dirs)
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' --debug bin_zoneadm='%s' "
+                    "-R %s attach-linked -v -f -c zone:z1 %s" %
+                    (bin_zonename, "/bin/true", gzpath, ngzpath))
+
+                # now delete the global zone linked image metadata
+                self.__ccmd("rm %svar/pkg/linked/*" % gzpath)
+
+                # Make sure that list-linked displays the correct paths.
+                for ipath, lipaths in [
+                        [ gzpath,  [ gzpath, ngzpath ]],
+                        [ ngzpath, [ ngzpath ]],
+                    ]:
+                        self.__list_linked_check(ipath, lipaths,
+                            bin_zonename, bin_zoneadm)
+
+                # now verify that the gz thinks it's in an alternate path
+                for ipath, liname, props in [
+                        [ gzpath, None, {
+                            "li-current-parent": None,
+                            "li-current-path": gzpath,
+                            "li-parent": None,
+                            "li-path": "/",
+                            "li-path-transform": "('/', '%s')" % gzpath,
+                            }],
+                        [ gzpath, "zone:z1", {
+                            "li-current-parent": None,
+                            "li-current-path": ngzpath,
+                            "li-parent": None,
+                            "li-path": "/z1/root/",
+                            "li-path-transform": "('/', '%s')" % gzpath,
+                            }],
+                    ]:
+                        self.__check_linked_props(ipath, liname, props,
+                            bin_zonename, bin_zoneadm)
+
+        def test_linked_paths_BE_cloning(self):
+                """Test that image object plan execution and re-initialization
+                works when the image is moving around.  This simulates an
+                update that involves BE cloning."""
+
+                # setup image paths
+                image1 = os.path.join(self.img_path(0), "image1")
+                image2 = os.path.join(self.img_path(0), "image2")
+                img_dirs = [ "", "c/", ]
+
+                # Create images, link them, and install packages.
+                self.__create_images(image1, img_dirs)
+                self.__attach_child(image1,  "", "c/")
+                for d in img_dirs:
+                        p = os.path.join(image1, d)
+                        self.pkg("-R %s install [email protected]" % p)
+
+                # Initialize an API object.
+                api_inst = self.get_img_api_obj(
+                    cmd_path=pkg.misc.api_cmdpath(), img_path=image1)
+
+                # Plan and prepare an update for the images.
+                for pd in api_inst.gen_plan_install(["[email protected]"]):
+                        continue
+                api_inst.prepare()
+
+                # clone the current images to an alternate location
+                self.__ccmd("mkdir -p %s" % image2)
+                self.__ccmd("cd %s; find . | cpio -pdm %s" % (image1, image2))
+
+                # Update the API object to point to the new location and
+                # execute the udpate.
+                api_inst._img.find_root(image2)
+                api_inst.execute_plan()
+
+                # Update the API object to point back to the old location.
+                api_inst._img.find_root(image1)
+
+        def test_linked_paths_bad_zoneadm_list_output(self):
+                """Test that we emit an error message if we fail to parse
+                zoneadm list -p output."""
+
+                base_path = self.img_path(0).rstrip(os.sep) + os.sep
+                gzpath = os.path.join(base_path, "gzpath/")
+                self.__ccmd("mkdir -p %s" % gzpath)
+
+                # fake zoneadm binary used for testing
+                zoneadm_sh = """
+#!/bin/sh
+cat <<-EOF
+this is invalid zoneadm list -p output.
+EOF
+exit 0""".strip("\n")
+
+                # create a zonename binary
+                bin_zonename = os.path.join(base_path, "zonename")
+                self.__mk_bin(bin_zonename, self.zonename_sh)
+
+                # create a zoneadm binary
+                bin_zoneadm = os.path.join(base_path, "zoneadm")
+                self.__mk_bin(bin_zoneadm, zoneadm_sh)
+
+                self.image_create(self.rurl1, destroy=False, img_path=gzpath)
+
+                self.pkg("--debug zones_supported=1 "
+                    "--debug bin_zonename='%s' "
+                    "--debug bin_zoneadm='%s' "
+                    "-R %s list-linked" %
+                    (bin_zonename, bin_zoneadm, gzpath), exit=EXIT_OOPS)
+
+                self.assert_(self.output == "")
+                self.assert_("this is invalid zoneadm list -p output." in
+                    self.errout)
+
+        def test_linked_paths_zone_paths_with_colon(self):
+                """Test that we can correctly parse zone paths that have a
+                colon in them."""
+
+                base_path = self.img_path(0).rstrip(os.sep) + os.sep
+                gzpath = os.path.join(base_path, "gzpath_with_a_:colon/")
+                self.__ccmd("mkdir -p %s" % gzpath)
+
+                os.environ["PKG_GZR"] = gzpath.rstrip(os.sep)
+
+
+                # fake zoneadm binary used for testing
+                zoneadm_sh = """
+#!/bin/sh
+while getopts "R:" OPT ; do
+case $OPT in
+        R )
+                [[ "$OPTARG" != "$PKG_GZR/" ]] && exit 0
+                ;;
+esac
+done
+PKG_GZR=$(echo "$PKG_GZR" | sed 's-:-\\\:-g')
+cat <<-EOF
+0:global:running:$PKG_GZR::solaris:shared:-:none:
+-:z1:installed:$PKG_GZR/ngzzone_path_with_a\:colon::solaris:excl:-::
+EOF
+exit 0""".strip("\n")
+
+                # create a zonename binary
+                bin_zonename = os.path.join(base_path, "zonename")
+                self.__mk_bin(bin_zonename, self.zonename_sh)
+
+                # create a zoneadm binary
+                bin_zoneadm = os.path.join(base_path, "zoneadm")
+                self.__mk_bin(bin_zoneadm, zoneadm_sh)
+
+                self.image_create(self.rurl1, destroy=False, img_path=gzpath)
+
+                ngzpath = gzpath + "ngzzone_path_with_a:colon/root/"
+                self.__list_linked_check(gzpath, [ngzpath],
+                    bin_zonename, bin_zoneadm)
+
+
 if __name__ == "__main__":
         unittest.main()
--- a/src/tests/cli/t_pkg_list.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_list.py	Thu Mar 27 22:03:22 2014 +0530
@@ -518,6 +518,9 @@
                     ("'fo*' food bogus", 3), ("'f?o*' bogus", 3)):
                         self.pkg("list -a %s" % pat, exit=ecode)
 
+                self.pkg("list junk_pkg_name", exit=1)
+                self.assert_("junk_pkg_name" in self.errout)
+
         def test_13_multi_name(self):
                 """Test for multiple name match listing."""
                 self.pkg("list -aHf '/foo*@1.2'")
@@ -549,6 +552,7 @@
                 # First, test individually.
                 for val in pats:
                         self.pkg("list %s" % val, exit=1)
+                        self.assert_(self.errout)
 
                 # Next, test invalid input but with options.  The option
                 # should not be in the error output. (If it is, the FMRI
@@ -671,6 +675,7 @@
 
                 self.image_create(self.rurl)
                 self.pkg("list", exit=1)
+                self.assert_(self.errout)
 
                 # Should not print anything if using -q.
                 self.pkg("list -q", exit=1)
--- a/src/tests/cli/t_pkg_nasty.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_nasty.py	Thu Mar 27 22:03:22 2014 +0530
@@ -34,6 +34,10 @@
 import random
 import re
 import shutil
+import signal
+import time
+
+import pkg.portable as portable
 
 class TestPkgNasty(pkg5unittest.SingleDepotTestCase):
 
@@ -351,5 +355,59 @@
                 self.do_main_loop(self.__nasty_temppub_1_run)
 
 
+class TestNastySig(pkg5unittest.SingleDepotTestCase):
+        # Only start/stop the depot once (instead of for every test)
+        persistent_setup = True
+
+        foo10 = """
+            open [email protected],5.11-0
+            close """
+
+        def setUp(self):
+                pkg5unittest.SingleDepotTestCase.setUp(self)
+                self.pkgsend_bulk(self.rurl, self.foo10)
+
+        def test_00_sig(self):
+                """Verify pkg client handles SIGTERM, SIGHUP, SIGINT gracefully
+                and writes a history entry if possible."""
+
+                if portable.osname == "windows":
+                        # SIGHUP not supported on Windows.
+                        sigs = (signal.SIGINT, signal.SIGTERM)
+                else:
+                        sigs = (signal.SIGHUP, signal.SIGINT, signal.SIGTERM)
+
+                for sig in sigs:
+                        self.pkg_image_create(self.rurl)
+
+                        imgdir = os.path.join(self.img_path(), "var", "pkg")
+                        self.assert_(os.path.exists(imgdir))
+
+                        hfile = os.path.join(imgdir, "pkg5.hang")
+                        self.assert_(not os.path.exists(hfile))
+
+                        self.pkg("purge-history")
+
+                        hndl = self.pkg(
+                            ["-D", "simulate-plan-hang=true", "install", "foo"],
+                            handle=True, coverage=False)
+
+                        # Wait for hang file before sending signal.
+                        while not os.path.exists(hfile):
+                                self.assertEqual(hndl.poll(), None)
+                                time.sleep(0.25)
+
+                        hndl.send_signal(sig)
+                        rc = hndl.wait()
+
+                        self.assertEqual(rc, 1)
+
+                        # Verify that history records operation as canceled.
+                        self.pkg(["history", "-H"])
+                        hentry = self.output.splitlines()[-1]
+                        self.assert_("install" in hentry)
+                        self.assert_("Canceled" in hentry)
+
+
 if __name__ == "__main__":
         unittest.main()
--- a/src/tests/cli/t_pkg_publisher.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_publisher.py	Thu Mar 27 22:03:22 2014 +0530
@@ -535,6 +535,37 @@
                         self.assert_("http://b/\thttp://foo" in self.output)
                         self.assert_("http://c/\thttp://foo" in self.output)
 
+        def test_publisher_special_repo_name(self):
+                """Tests that set-publisher can use the repository name with
+                special characters."""
+
+                self.image_create()
+
+                # "%" is a special character in SafeConfigParser, but needs
+                # to be supported anyway.
+                repo_dir = os.path.join(self.test_root, "repotest%symbol")
+                self.create_repo(repo_dir, properties={ "publisher": {
+                    "prefix": "test1" } })
+                self.pkg("set-publisher -p %s test1" % repo_dir)
+                shutil.rmtree(repo_dir)
+
+                # "+" will be converted into "%2B" by URL quoting routines.
+                # "%" is a special character in SafeConfigParser, but we need
+                # to support it here.
+                repo_dir = os.path.join(self.test_root, "repotest+symbol")
+                self.create_repo(repo_dir, properties={ "publisher": {
+                    "prefix": "test2" } })
+                self.pkg("set-publisher -g %s test2" % repo_dir)
+                shutil.rmtree(repo_dir)
+
+                # "%()" is the syntax of expansion language in SafeConfigParser
+                # but needs to be raw characters here.
+                repo_dir = os.path.join(self.test_root, "%(junkrepo)s")
+                self.create_repo(repo_dir, properties={ "publisher": {
+                    "prefix": "test3" } })
+                self.pkg("set-publisher -g %s test3" % repo_dir)
+                shutil.rmtree(repo_dir)
+
 
 class TestPkgPublisherMany(pkg5unittest.ManyDepotTestCase):
         # Only start/stop the depot once (instead of for every test)
--- a/src/tests/cli/t_pkg_temp_sources.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_temp_sources.py	Thu Mar 27 22:03:22 2014 +0530
@@ -521,7 +521,7 @@
  Build Release: 5.11
         Branch: None
 Packaging Date: %(signed10_pkg_date)s
-          Size: 7.79 kB
+          Size: 7.81 kB
           FMRI: %(signed10_pkg_fmri)s
 """ % { "foo10_pkg_date": pd(self.foo10), "foo10_pkg_fmri": self.foo10,
     "incorp20_pkg_date": pd(self.incorp20), "incorp20_pkg_fmri": self.incorp20,
--- a/src/tests/cli/t_pkg_uninstall.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_uninstall.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
 
 import testutils
 if __name__ == "__main__":
@@ -115,6 +115,11 @@
             add depend type=require [email protected]
             close """
 
+        implicit11 = """
+            open [email protected],5.11-0
+            add file tmp/file1 mode=0644 owner=root group=bin path=implicit/file1
+            close """
+
         def test_uninstalled_state(self):
                 """Uninstalling a package that is no longer known should result
                 in its removal from the output of pkg list -a, even if it has
@@ -134,6 +139,30 @@
                 self.pkg("list -a [email protected]", exit=1)
                 self.image_destroy()
 
+        def test_uninstall_implicit(self):
+                """Test for bug 16769328.""" 
+
+                self.make_misc_files("tmp/file1")
+                self.pkgsend_bulk(self.rurl1, (self.implicit11))
+                self.image_create(self.rurl1)
+                lofs_dir = os.path.join(self.test_root, "image0", "implicit")
+                os.mkdir(lofs_dir)
+                tmp_dir = os.path.join(self.test_root, "image0", "tmp_impl_dir")
+                os.mkdir(tmp_dir)
+                os.system("mount -F lofs %s %s" % (tmp_dir, lofs_dir))
+                self.pkg("install implicit")
+                self.pkg("uninstall implicit")
+                os.system("umount %s " % lofs_dir)
+                os.rmdir(lofs_dir)
+                os.rmdir(tmp_dir)
+
+        def test_ignore_missing(self):
+                """Test that uninstall shows correct behavior w/ and w/o
+                   --ignore-missing."""
+                self.image_create(self.rurl1)
+                self.pkg("uninstall missing", exit=1)
+                self.pkg("uninstall --ignore-missing missing", exit=4)
+
 
 if __name__ == "__main__":
         unittest.main()
--- a/src/tests/cli/t_pkg_varcet.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_varcet.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import testutils
 if __name__ == "__main__":
@@ -111,10 +111,14 @@
                 else:
                         self.assertEqualDiff("", self.errout)
 
-        def __assert_varcet_matches_tsv(self, cmd, expected, errout=None,
+        def __assert_varcet_matches_tsv(self, cmd, prefix, expected, errout=None,
             exit=0, opts=misc.EmptyI, names=misc.EmptyI, su_wrap=False):
                 self.pkg("%s %s -H -F tsv %s" % (cmd, " ".join(opts),
                     " ".join(names)), exit=exit, su_wrap=su_wrap)
+                expected = "".join(
+                        (prefix + l)
+                        for l in expected.splitlines(True)
+                )
                 self.assertEqualDiff(expected, self.output)
                 if errout:
                         self.assert_(self.errout != "")
@@ -134,14 +138,14 @@
                     **kwargs)
 
         def __assert_facet_matches_tsv(self, *args, **kwargs):
-                self.__assert_varcet_matches_tsv("facet", *args,
+                self.__assert_varcet_matches_tsv("facet", "facet.", *args,
                     **kwargs)
 
         def __assert_facet_matches(self, exp_def, **kwargs):
                 exp_tsv = exp_def.replace(" ", "\t")
                 self.__assert_varcet_matches_default("facet", exp_def,
                     **kwargs)
-                self.__assert_varcet_matches_tsv("facet", exp_tsv,
+                self.__assert_varcet_matches_tsv("facet", "facet.", exp_tsv,
                     **kwargs)
 
         def __assert_facet_fails(self, *args, **kwargs):
@@ -152,14 +156,14 @@
                     **kwargs)
 
         def __assert_variant_matches_tsv(self, *args, **kwargs):
-                self.__assert_varcet_matches_tsv("variant", *args,
+                self.__assert_varcet_matches_tsv("variant", "", *args,
                     **kwargs)
 
         def __assert_variant_matches(self, exp_def, **kwargs):
                 exp_tsv = exp_def.replace(" ", "\t")
                 self.__assert_varcet_matches_default("variant", exp_def,
                     **kwargs)
-                self.__assert_varcet_matches_tsv("variant", exp_tsv,
+                self.__assert_varcet_matches_tsv("variant", "variant.", exp_tsv,
                     **kwargs)
 
         def __assert_variant_fails(self, *args, **kwargs):
@@ -174,10 +178,10 @@
 
                 # Verify output for no options and no patterns.
                 exp_def = """\
-facet.doc.* False local
-facet.doc.html False local
-facet.doc.man False local
-facet.doc.txt True local
+doc.* False local
+doc.html False local
+doc.man False local
+doc.txt True local
 """
                 self.__assert_facet_matches(exp_def)
 
@@ -187,28 +191,28 @@
 
                 # Matched case for explicitly set.
                 exp_def = """\
-facet.doc.* False local
-facet.doc.txt True local
+doc.* False local
+doc.txt True local
 """
                 names = ("'facet.doc.[*]'", "doc.txt")
                 self.__assert_facet_matches(exp_def, names=names)
 
                 # Verify -a output.
                 exp_def = """\
-facet.doc.* False local
-facet.doc.html False local
-facet.doc.man False local
-facet.doc.pdf False local
-facet.doc.txt True local
+doc.* False local
+doc.html False local
+doc.man False local
+doc.pdf False local
+doc.txt True local
 """
                 opts = ("-a",)
                 self.__assert_facet_matches(exp_def, opts=opts)
 
                 # Matched case for explicitly set and those in packages.
                 exp_def = """\
-facet.doc.* False local
-facet.doc.pdf False local
-facet.doc.txt True local
+doc.* False local
+doc.pdf False local
+doc.txt True local
 """
                 names = ("'facet.doc.[*]'", "*pdf", "facet.doc.txt")
                 opts = ("-a",)
@@ -216,9 +220,9 @@
 
                 # Verify -i output.
                 exp_def = """\
-facet.doc.man False local
-facet.doc.pdf False local
-facet.doc.txt True local
+doc.man False local
+doc.pdf False local
+doc.txt True local
 """
                 opts = ("-i",)
                 self.__assert_facet_matches(exp_def, opts=opts)
@@ -229,15 +233,15 @@
 
                 # Matched case in packages.
                 exp_def = """\
-facet.doc.man False local
-facet.doc.pdf False local
+doc.man False local
+doc.pdf False local
 """
                 names = ("'facet.*[!t]'",)
                 opts = ("-i",)
                 self.__assert_facet_matches(exp_def, opts=opts, names=names)
 
                 exp_def = """\
-facet.doc.pdf False local
+doc.pdf False local
 """
                 names = ("'*pdf'",)
                 opts = ("-i",)
@@ -248,10 +252,10 @@
                 self.pkg("uninstall foo")
 
                 exp_def = """\
-facet.doc.* False local
-facet.doc.html False local
-facet.doc.man False local
-facet.doc.txt True local
+doc.* False local
+doc.html False local
+doc.man False local
+doc.txt True local
 """
 
                 # Output should be the same for both -a and default cases with
@@ -306,10 +310,10 @@
                     "facet.doc.html=False facet.doc.txt=True")
 
                 exp_def = """\
-facet.doc.* False local
-facet.doc.html False local
-facet.doc.man False local
-facet.doc.txt True local
+doc.* False local
+doc.html False local
+doc.man False local
+doc.txt True local
 """
 
                 # Output should be the same for both -a and default cases with
@@ -324,10 +328,10 @@
 
                 # Verify output for no options and no patterns.
                 exp_def = """\
-facet.doc.* False local
-facet.doc.html False local
-facet.doc.man False local
-facet.doc.txt True local
+doc.* False local
+doc.html False local
+doc.man False local
+doc.txt True local
 """
                 self.__assert_facet_matches(exp_def)
 
@@ -357,9 +361,9 @@
 
                 # Verify output for no options and no patterns.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.icecream strawberry
-variant.opensolaris.zone global
+arch %(variant.arch)s
+icecream strawberry
+opensolaris.zone global
 """ % variants
                 self.__assert_variant_matches(exp_def)
 
@@ -369,27 +373,27 @@
 
                 # Matched case for explicitly set.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.opensolaris.zone global
+arch %(variant.arch)s
+opensolaris.zone global
 """ % variants
                 names = ("arch", "'variant.*zone'")
                 self.__assert_variant_matches(exp_def, names=names)
 
                 # Verify -a output.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.debug.foo false
-variant.icecream strawberry
-variant.opensolaris.zone global
+arch %(variant.arch)s
+debug.foo false
+icecream strawberry
+opensolaris.zone global
 """ % variants
                 opts = ("-a",)
                 self.__assert_variant_matches(exp_def, opts=opts)
 
                 # Matched case for explicitly set and those in packages.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.debug.foo false
-variant.opensolaris.zone global
+arch %(variant.arch)s
+debug.foo false
+opensolaris.zone global
 """ % variants
                 names = ("'variant.debug.*'", "arch", "'*zone'")
                 opts = ("-a",)
@@ -397,8 +401,8 @@
 
                 # Verify -i output.
                 exp_def = """\
-variant.debug.foo false
-variant.icecream strawberry
+debug.foo false
+icecream strawberry
 """ % variants
                 opts = ("-i",)
                 self.__assert_variant_matches(exp_def, opts=opts)
@@ -409,17 +413,17 @@
 
                 # Verify -v and -av output.
                 exp_def = """\
-variant.debug.foo false
-variant.debug.foo true
-variant.icecream neapolitan
-variant.icecream strawberry
+debug.foo false
+debug.foo true
+icecream neapolitan
+icecream strawberry
 """
                 for opts in (("-v",), ("-av",)):
                         self.__assert_variant_matches(exp_def, opts=opts)
 
                 exp_def = """\
-variant.icecream neapolitan
-variant.icecream strawberry
+icecream neapolitan
+icecream strawberry
 """ % variants
                 names = ("'ice*'",)
                 opts = ("-av",)
@@ -427,14 +431,14 @@
 
                 # Matched case in packages.
                 exp_def = """\
-variant.icecream strawberry
+icecream strawberry
 """ % variants
                 names = ("'variant.*[!o]'",)
                 opts = ("-i",)
                 self.__assert_variant_matches(exp_def, opts=opts, names=names)
 
                 exp_def = """\
-variant.debug.foo false
+debug.foo false
 """ % variants
                 names = ("*foo",)
                 opts = ("-i",)
@@ -445,9 +449,9 @@
                 self.pkg("uninstall foo")
 
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.icecream strawberry
-variant.opensolaris.zone global
+arch %(variant.arch)s
+icecream strawberry
+opensolaris.zone global
 """ % variants
 
                 # Output should be the same for both -a and default cases with
@@ -475,6 +479,19 @@
                 self.__assert_variant_fails("-ai", exit=2)
                 self.__assert_variant_fails("-aiv", exit=2)
 
+                # Verify valid output format values do not cause failure
+                self.__assert_variant_fails("-F default", exit=0, errout=False)
+                self.__assert_variant_fails("--output-format default", exit=0,
+                    errout=False)
+
+                self.__assert_variant_fails("-F  json", exit=0, errout=False)
+                self.__assert_variant_fails("--output-format  json", exit=0,
+                    errout=False)
+
+                # Verify invalid output format values handled gracefully
+                self.__assert_variant_fails("-F dummy", exit=2)
+                self.__assert_variant_fails("--output-format dummy", exit=2)
+
                 #
                 # First, verify output before setting any variants or installing
                 # any packages.
@@ -483,8 +500,8 @@
                 # Output should be the same for -a and default cases with no
                 # variants set and no packages installed.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.opensolaris.zone global
+arch %(variant.arch)s
+opensolaris.zone global
 """ % variants
 
                 for opts in ((), ("-a",)):
@@ -517,9 +534,9 @@
                 self.pkg("change-variant variant.icecream=strawberry")
 
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.icecream strawberry
-variant.opensolaris.zone global
+arch %(variant.arch)s
+icecream strawberry
+opensolaris.zone global
 """ % variants
 
                 # Output should be the same for both -a and default cases with
@@ -534,9 +551,9 @@
 
                 # Verify output for no options and no patterns.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.icecream strawberry
-variant.opensolaris.zone global
+arch %(variant.arch)s
+icecream strawberry
+opensolaris.zone global
 """ % variants
                 self.__assert_variant_matches(exp_def)
 
@@ -563,32 +580,32 @@
 
                 # Verify output for no options and no patterns.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.icecream strawberry
-variant.opensolaris.zone global
+arch %(variant.arch)s
+icecream strawberry
+opensolaris.zone global
 """ % variants
                 self.__assert_variant_matches(exp_def)
 
                 # Verify -a output.
                 exp_def = """\
-variant.arch %(variant.arch)s
-variant.icecream strawberry
-variant.opensolaris.zone global
-variant.unknown 
+arch %(variant.arch)s
+icecream strawberry
+opensolaris.zone global
+unknown 
 """ % variants
                 self.__assert_variant_matches(exp_def, opts=("-a",))
 
                 # Verify -i output.
                 exp_def = """\
-variant.unknown 
+unknown 
 """ % variants
                 self.__assert_variant_matches(exp_def, opts=("-i",))
 
                 # Verify -v, -av, and -iv output.
                 for opts in (("-v",), ("-av",), ("-iv",)):
                         exp_def = """\
-variant.unknown bar
-variant.unknown foo
+unknown bar
+unknown foo
 """ % variants
                         self.__assert_variant_matches(exp_def, opts=opts)
 
--- a/src/tests/cli/t_pkg_verify.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkg_verify.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import testutils
 if __name__ == "__main__":
@@ -29,6 +29,9 @@
 
 import os
 import pkg.portable as portable
+import shutil
+import subprocess
+import tempfile
 import time
 import unittest
 
@@ -56,6 +59,12 @@
             close
             """
 
+        sysattr = """
+            open [email protected]
+            add dir mode=0755 owner=root group=bin path=/p1
+            add file bobcat mode=0555 owner=root group=bin sysattr=TH path=/p1/bobcat
+            close """
+
         misc_files = {
            "bobcat": "",
            "dricon_da": """zigit "pci8086,1234"\n""",
@@ -224,6 +233,44 @@
 
                 self.pkg_verify("", exit=1)
 
+        def test_sysattrs(self):
+                """Test that system attributes are verified correctly."""
+
+                if portable.osname != "sunos":
+                        raise pkg5unittest.TestSkippedException(
+                            "System attributes unsupported on this platform.")
+
+                self.pkgsend_bulk(self.rurl, [self.sysattr])
+
+                # Need to create an image in /var/tmp since sysattrs don't work
+                # in tmpfs.
+                old_img_path = self.img_path()
+                self.set_img_path(tempfile.mkdtemp(prefix="test-suite",
+                    dir="/var/tmp"))
+
+                self.image_create(self.rurl)
+                self.pkg("install sysattr")
+                self.pkg("verify")
+                fpath = os.path.join(self.img_path(),"p1/bobcat")
+
+                # Need to get creative here to remove the system attributes
+                # since you need the sys_linkdir privilege which we don't have:
+                # see run.py:393
+                # So we re-create the file with correct owner and mode and the
+                # only thing missing are the sysattrs.
+                portable.remove(fpath)
+                portable.copyfile(os.path.join(self.test_root, "bobcat"), fpath)
+                os.chmod(fpath, 0555)
+                os.chown(fpath, -1, 2)
+                self.pkg("verify", exit=1)
+                for sattr in ('H','T'):
+                        expected = "System attribute '%s' not set" % sattr
+                        self.assertTrue(expected in self.output,
+                            "Missing in verify output:  %s" % expected)
+
+                shutil.rmtree(self.img_path())
+                self.set_img_path(old_img_path)
+
 
 if __name__ == "__main__":
         unittest.main()
--- a/src/tests/cli/t_pkgdep.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkgdep.py	Thu Mar 27 22:03:22 2014 +0530
@@ -20,7 +20,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
 
 import testutils
 if __name__ == "__main__":
@@ -1028,6 +1028,8 @@
                 if bit64:
                         opts.append("-m64")
                 if shared_lib:
+                        # Always link to libc; the compiler may not.
+                        opts.append("-lc")
                         opts.append("-G")
                 if no_link:
                         opts.append("-c")
--- a/src/tests/cli/t_pkgrecv.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkgrecv.py	Thu Mar 27 22:03:22 2014 +0530
@@ -957,6 +957,59 @@
                 self.dcs[3].unset_debug_feature("hash=sha1+sha256")
                 self.dcs[3].start()
 
+        def test_13_output(self):
+                """Verify that pkgrecv handles verbose output as expected."""
+
+                # Now attempt to receive from a repository.
+                self.pkgrepo("create %s" % self.tempdir)
+                self.pkgrecv(self.dpath1, "-d %s -n -v \*" % self.tempdir)
+                expected = """\
+Retrieving packages (dry-run) ...
+        Packages to add:        9
+      Files to retrieve:       17
+Estimated transfer size: 528.00 B
+"""
+                self.assert_(expected in self.output, self.output)
+                for s in self.published:
+                        self.assert_(fmri.PkgFmri(s).get_fmri(anarchy=True,
+                            include_scheme=False) in self.output)
+
+                # Clean up for next test.
+                shutil.rmtree(self.tempdir)
+
+                # Now attempt to receive from a repository to a package archive.
+                self.pkgrecv(self.dpath1, "-a -d %s -n -v \*" % self.tempdir)
+                expected = """\
+Archiving packages (dry-run) ...
+        Packages to add:        9
+      Files to retrieve:       17
+Estimated transfer size: 528.00 B
+"""
+                self.assert_(expected in self.output, self.output)
+                for s in self.published:
+                        self.assert_(fmri.PkgFmri(s).get_fmri(anarchy=True,
+                            include_scheme=False) in self.output)
+
+                # Now attempt to clone a repository.
+                self.pkgrepo("create %s" % self.tempdir)
+                self.pkgrecv(self.dpath1, "--clone -d %s -p \* -n -v \*" \
+                    % self.tempdir)
+                expected = """\
+Retrieving packages (dry-run) ...
+        Packages to add:        9
+      Files to retrieve:       17
+Estimated transfer size: 528.00 B
+"""
+                self.assert_(expected in self.output, self.output)
+                for s in self.published:
+                        self.assert_(fmri.PkgFmri(s).get_fmri(anarchy=True,
+                            include_scheme=False) in self.output)
+
+                # Test that output is correct if -n is not specified.
+                self.pkgrecv(self.dpath1, "-d %s -v \*" % self.tempdir)
+                self.assert_("dry-run" not in self.output)
+
+
 class TestPkgrecvHTTPS(pkg5unittest.HTTPSTestClass):
 
         example_pkg10 = """
--- a/src/tests/cli/t_pkgrepo.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/cli/t_pkgrepo.py	Thu Mar 27 22:03:22 2014 +0530
@@ -928,6 +928,32 @@
                 self.assertEqualDiff([pfmri],
                     [str(f) for f in repo.get_catalog("test").fmris()])
  
+                # Now verify that 'pkgrepo rebuild' will still work
+                # (filesystem-based repos only) if the catalog is corrupted.
+                cat = repo.get_catalog("test")
+                part = cat.get_part("catalog.attrs")
+                apath = part.pathname
+
+                with open(apath, "r+b") as cfile:
+                        cfile.truncate(4)
+                        cfile.close()
+
+                # Should fail, since catalog is corrupt.
+                self.pkgrepo("refresh -s %s" % repo_path, exit=1)
+
+                # Should fail, because --no-catalog was specified.
+                self.pkgrepo("rebuild -s %s --no-catalog" % repo_path, exit=1)
+
+                # Should succeed.
+                self.pkgrepo("rebuild -s %s --no-index" % repo_path)
+
+                # Should succeed now that catalog is valid.
+                self.pkgrepo("refresh -s %s" % repo_path)
+
+                # Verify expected package is still known.
+                self.assertEqualDiff([pfmri],
+                    [str(f) for f in repo.get_catalog("test").fmris()])
+
         def __test_refresh(self, repo_path, repo_uri):
                 """Private function to verify refresh subcommand behaviour."""
 
@@ -1690,6 +1716,15 @@
                 fhash = self.fhashes[path]
                 return os.path.sep.join([fpath, fhash[0:2], fhash])
 
+        def __get_manifest_contents(self, fmri_str):
+                """Given an FMRI, return the unsorted manifest contents from our
+                repository as a string."""
+
+                mpath = self.__get_mf_path(fmri_str)
+                mf = pkg.manifest.Manifest()
+                mf.set_content(pathname=mpath)
+                return mf.tostr_unsorted()
+
         def __inject_badhash(self, path, valid_gzip=True):
                 """Corrupt a file in the repository with the given path, where
                 that path is a key in self.fhashes, returning the repository
@@ -2481,6 +2516,73 @@
                 pdir = os.path.join(repo_path, "publisher", "example.com")
                 self.assert_(not os.path.exists(pdir))
 
+        def test_26_contents(self):
+                """Verify that contents subcommand works as expected."""
+
+                repo_path = self.dc.get_repodir()
+                repo_uri = self.dc.get_repo_url()
+
+                # Publish some packages.
+                plist = self.pkgsend_bulk(repo_uri, (self.tree10, self.amber10,
+                    self.amber20))
+
+                # Verify graceful exit if invalid or incomplete set of
+                # options specified.
+                self.pkgrepo("contents", exit=2)
+                self.pkgrepo("contents -s bogus://location list", exit=1)
+
+                # Verify graceful exit for bad repository.
+                self.pkgrepo("contents -s /no/such/repository", exit=1)
+
+                # Verify graceful exit if invalid package name given.
+                self.pkgrepo("contents -s %s ^notvalid" % repo_path, exit=1)
+
+                # Verify graceful exit if no matching package found.
+                self.pkgrepo("contents -s %s nosuchpackage" % repo_path, exit=1)
+
+                # Verify default output when listing all packages for both
+                # file and http cases:
+                for src in (repo_path, repo_uri):
+                        self.pkgrepo("contents -s %s" % src)
+                        for p in plist:
+                                self.assert_(self.__get_manifest_contents(p)
+                                    in self.output)
+
+                # Verify ability to display specific packages but only using
+                # file repository for test efficiency.
+
+                # Verify ability to display specific packages.
+                self.pkgrepo("contents -s %s [email protected]" % repo_path)
+                self.assertEqualDiff(self.__get_manifest_contents(plist[2]),
+                    self.output)
+
+                # Verify ability to display multiple packages.
+                self.pkgrepo("contents -s %s tree [email protected]" % repo_path)
+                for i in range(2):
+                        self.assert_(self.__get_manifest_contents(plist[i]) in
+                            self.output)
+
+                # Verify -m option works fine.
+                self.pkgrepo("contents -m -s %s [email protected]" % repo_path)
+                self.assertEqualDiff(self.__get_manifest_contents(plist[2]),
+                    self.output)
+
+                # Verify -t option works fine.
+                self.pkgrepo("contents -s %s -t set tree" % repo_path)
+                self.assert_("set" in self.output and "file" not in self.output)
+                
+                # Verify graceful exit if no matching action type specified.
+                self.pkgrepo("contents -s %s -t nosuchtype tree" % repo_path,
+                    exit=1)
+
+                # Add packages for a different publisher.
+                self.pkgrepo("set -s %s publisher/prefix=test2" % repo_path)
+                self.pkgsend_bulk(repo_path, (self.truck10, self.zoo10))
+
+                # Verify that patterns matching packages only provided by one
+                # publisher will not result in partial failure.
+                self.pkgrepo("contents -s %s zoo" % repo_path)
+
 
 class TestPkgrepoHTTPS(pkg5unittest.HTTPSTestClass):
 
@@ -2553,6 +2655,10 @@
                 self.pkgrepo("-s %(url)s rebuild --key %(key)s --cert %(cert)s"
                     % arg_dict)
 
+                # pkgrepo contents
+                self.pkgrepo("-s %(url)s contents --key %(key)s --cert %(cert)s"
+                    % arg_dict)
+
                 # Try without key and cert (should fail)
                 self.pkgrepo("-s %(url)s rebuild" % arg_dict, exit=1)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tests/perf/manbench.py	Thu Mar 27 22:03:22 2014 +0530
@@ -0,0 +1,133 @@
+#!/usr/bin/python2.6
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+#
+# manbench - benchmark manifest operations
+#
+
+import sys
+
+import timeit
+
+#
+# Establish a specific exit status which means: "python barfed an exception"
+# so that we can more easily detect these in testing of the CLI commands.
+#
+if __name__ == "__main__":
+
+        # I took an existing manifest and randomized the lines.
+        setup1 = """
+import pkg.manifest as manifest
+m=\"\"\"
+dir group=sys mode=0755 owner=root path=usr/share
+dir group=sys mode=0755 owner=root path=usr/lib/brand/native
+file 836b34c529720378b05e55aae1f9c07f148ad099 group=bin mode=0444 owner=root path=usr/lib/brand/native/config.xml pkg.size=3785
+file dfa894680b63cba4ea06698ece7786e4af08ebe9 group=sys mode=0444 opensolaris.zone=global owner=root path=var/svc/manifest/system/zones.xml pkg.size=2835
+link path=usr/bin/zonename target=../../sbin/zonename
+dir group=sys mode=0755 owner=root path=usr/share/lib/xml
+file 27bd43e341d2d68d6715e9c74986dc96efdbba04 group=sys mode=0644 opensolaris.zone=global owner=root path=etc/zones/index pkg.size=1103 preserve=true
+file a98845cf2047a2eea8df6283201cc19c66dd6bbd elfarch=i386 elfbits=32 elfhash=9320a13a81de97546aec93b7c508d9c6de6dcf0e group=sys mode=0755 owner=root path=usr/kernel/drv/zcons pkg.size=9220
+depend fmri=pkg:/[email protected] type=require
+file 8030ff97f43d78d3539e6487e2f98b61a9450783 group=bin mode=0444 owner=root path=usr/lib/brand/native/platform.xml pkg.size=4452
+file 58371e22b5e75ec66602b966edf29bcce7038db5 elfarch=i386 elfbits=32 elfhash=cd12b081ddaef993fd0276dd04d653222d25fa77 group=bin mode=0755 owner=root path=usr/lib/libzonecfg.so.1 pkg.size=178072
+file 795465bd69c3b4f23ef5699c9422dcadf31e4e4a group=sys mode=0444 opensolaris.zone=global owner=root path=var/svc/manifest/system/resource-mgmt.xml pkg.size=2888
+file a1f246522e3736f260028d4ad85520a5e8b735c9 elfarch=i386 elfbits=32 elfhash=1b9b337a8a5d5a401f6d6a2a91bc63940f5be885 group=bin mode=0755 owner=root path=usr/lib/libbrand.so.1 pkg.size=55616
+dir group=bin mode=0755 owner=root path=usr/lib/zones
+file 712d89faf0996dcc70aedbf73db024332894d24c elfarch=i386 elfbits=64 elfhash=da90e678c2478e3dc390df47c10535ab0b03270a group=bin mode=0755 owner=root path=usr/lib/amd64/libzonecfg.so.1 pkg.size=204992
+dir group=sys mode=0755 opensolaris.zone=global owner=root path=etc
+dir group=sys mode=0755 owner=root path=usr/share/lib
+file a7521f402cbc479c160bde8a06fe00ab621426d3 group=bin mode=0444 opensolaris.zone=global owner=root path=etc/zones/SUNWblank.xml pkg.size=1196
+dir group=sys mode=0755 owner=root path=usr/share/lib/xml/dtd
+depend fmri=pkg:/[email protected] type=require
+dir group=sys mode=0755 opensolaris.zone=global owner=root path=var
+file 0e42a6543bd2e9a005e2be1282dcb62a4853ddf7 elfarch=i386 elfbits=32 elfhash=d35f1848ac052bfee3ead95a1914c946d2d3466d group=bin mode=0555 owner=root path=usr/sbin/zonecfg pkg.size=216968
+dir group=sys mode=0755 opensolaris.zone=global owner=root path=var/svc/manifest/system
+set name=description value="Solaris Zones (Usr)"
+file 7e95e16941d5de869da5f7a51c99d84139a35bb8 elfarch=i386 elfbits=64 elfhash=df2beb2742e8adfb774ecbf7802f6972e2c0b97f group=sys mode=0755 owner=root path=usr/kernel/drv/amd64/zcons pkg.size=15632
+file 86bac4c0a58de192fcf22ea9060c91224ae5fa3c elfarch=i386 elfbits=32 elfhash=ddf1b4f11e7d74a9400ba4e3988a71809dca5631 group=bin mode=0555 owner=root path=usr/sbin/zlogin pkg.size=37460
+license f9562cfd7500134682a60f6d9d6dc256902917c8 license=SUNWzoneu.copyright path=copyright pkg.size=93 transaction_id=1202260990_pkg%3A%2FSUNWzone%400.5.11%2C5.11-0.79%3A20080205T172310Z
+dir group=bin mode=0755 owner=root path=usr/bin
+dir group=sys mode=0755 opensolaris.zone=global owner=root path=var/svc
+legacy arch=i386 category=system desc="Solaris Zones Configuration Files" hotline="Please contact your local service provider" name="Solaris Zones (Root)" pkg=SUNWzoner vendor="Sun Microsystems, Inc." version=11.11,REV=2008.01.05.16.07
+dir group=sys mode=0755 opensolaris.zone=global owner=root path=var/svc/manifest
+file cb02c2a749bf0e22fd02af975ddd9bf86bb0ce19 group=bin mode=0644 owner=root path=usr/share/lib/xml/dtd/zone_platform.dtd.1 pkg.size=4372
+file 946db15bd854df6140bd4a48fb2b8e0238a81e3d group=bin mode=0555 opensolaris.zone=global owner=root path=lib/svc/method/svc-resource-mgmt pkg.size=1504
+file 2f11fd3f39c87d7b70bd0d18808efdf6292b115f group=bin mode=0444 owner=root path=usr/share/lib/xml/dtd/zonecfg.dtd.1 pkg.size=3923
+depend fmri=pkg:/[email protected] type=require
+dir group=bin mode=0755 owner=root path=usr/lib/amd64
+file acf17653def8f31e2d1251436435151b98d5e4db group=bin mode=0555 opensolaris.zone=global owner=root path=lib/svc/method/svc-zones pkg.size=4448
+depend fmri=pkg:/[email protected] type=require
+dir group=bin mode=0755 owner=root path=usr/lib/brand
+dir group=sys mode=0755 owner=root path=usr
+file b839312297d07b2596dff73cb449f1db768277ce elfarch=i386 elfbits=64 elfhash=5ee24f2fd5ffc9cb8dd0a1a42c0633ad955c6739 group=bin mode=0755 owner=root path=usr/lib/amd64/libbrand.so.1 pkg.size=61440
+file 723401c446e8779a963d6d67cbb5f9ab187fd25a group=bin mode=0644 owner=root path=usr/share/lib/xml/dtd/brand.dtd.1 pkg.size=10159
+dir group=bin mode=0755 owner=root path=usr/sbin
+dir group=bin mode=0755 opensolaris.zone=global owner=root path=lib
+dir group=bin mode=0755 opensolaris.zone=global owner=root path=lib/svc/method
+file dbd52c79aa5a1dc92232994a815718dedbc70eec elfarch=i386 elfbits=32 elfhash=2b510c241544342123d3591ea17548a075192d89 group=bin mode=0555 owner=root path=usr/lib/zones/zoneadmd pkg.size=109720
+legacy arch=i386 category=system desc="Solaris Zones Configuration and Administration" hotline="Please contact your local service provider" name="Solaris Zones (Usr)" pkg=SUNWzoneu vendor="Sun Microsystems, Inc." version=11.11,REV=2008.01.05.16.07
+file 1269a117ab6ed3eb8e86f34aabfffba1221ac829 group=bin mode=0444 opensolaris.zone=global owner=root path=etc/zones/SUNWdefault.xml pkg.size=1366
+set name=publisher value=foo
+dir group=sys mode=0755 owner=root path=usr/kernel/drv/amd64
+file 2c9c0651e59cbb4b12dd9c8b9502003fd4b0af74 group=bin mode=0755 owner=root path=usr/lib/brand/native/postclone pkg.size=1635
+file 0049f03d9a0fc515a0b89579abac3f2d04f0dede elfarch=i386 elfbits=32 elfhash=4777a16b7740405428b46a221ba30e36916db4e8 group=bin mode=0555 owner=root path=usr/sbin/zoneadm pkg.size=107864
+dir group=sys mode=0755 owner=root path=usr/kernel
+set name=fmri value=pkg:/[email protected],5.11-0.79:20080205T172310Z
+dir group=sys mode=0755 opensolaris.zone=global owner=root path=etc/zones
+depend fmri=pkg:/[email protected] type=require
+dir group=bin mode=0755 opensolaris.zone=global owner=root path=lib/svc
+dir group=sys mode=0755 owner=root path=usr/kernel/drv
+dir group=bin mode=0755 owner=root path=usr/lib
+license f9562cfd7500134682a60f6d9d6dc256902917c8 license=SUNWzoner.copyright path=copyright pkg.size=93 transaction_id=1202260990_pkg%3A%2FSUNWzone%400.5.11%2C5.11-0.79%3A20080205T172310Z
+\"\"\"
+mf = manifest.Manifest()
+mf.set_content(m)
+"""
+
+        n = 1000
+        
+        str1="""
+for act in mf.gen_actions():
+        continue
+"""
+        str2="""
+for act in mf.gen_actions(attr_match={ "mode": "0444" }):
+        continue
+"""
+
+        try:
+                print "manifest gen_actions"
+                for i in (1, 2, 3):
+                        t = timeit.Timer(str1, setup1).timeit(n)
+                        print "%20f %8d manifest gen_actions()/sec " \
+                            "(%d actions/sec)" % (t, n / t, (n * 60) / t)
+                print "manifest gen_actions - attr_match"
+                for i in (1, 2, 3):
+                        t = timeit.Timer(str2, setup1).timeit(n)
+                        print "%20f %8d manifest gen_actions()/sec " \
+                            "(%d actions/sec)" % (t, n / t, (n * 60) / t)
+        except KeyboardInterrupt:
+                sys.exit(0)
--- a/src/tests/pkg5unittest.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/pkg5unittest.py	Thu Mar 27 22:03:22 2014 +0530
@@ -18,7 +18,7 @@
 # CDDL HEADER END
 #
 
-# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 
 #
 # Define the basic classes that all test cases are inherited from.
@@ -85,6 +85,7 @@
 # These are initialized by pkg5testenv.setup_environment.
 #
 g_proto_area = "TOXIC"
+g_proto_readable = False
 # Location of root of test suite.
 g_test_dir = "TOXIC"
 # User's value for TEMPDIR
@@ -132,7 +133,7 @@
 
 # Version test suite is known to work with.
 PKG_CLIENT_NAME = "pkg"
-CLIENT_API_VERSION = 75
+CLIENT_API_VERSION = 78
 
 ELIDABLE_ERRORS = [ TestSkippedException, depotcontroller.DepotStateException ]
 
@@ -246,7 +247,6 @@
         sys.exit(1)
 """}
 
-
         def __init__(self, methodName='runTest'):
                 super(Pkg5TestCase, self).__init__(methodName)
                 self.__test_root = None
@@ -254,11 +254,17 @@
                 self.__pwd = os.getcwd()
                 self.__didteardown = False
                 self.__base_port = None
+                self.coverage_cmd = ""
+                self.coverage_env = {}
                 self.next_free_port = None
                 self.ident = None
                 self.pkg_cmdpath = "TOXIC"
                 self.debug_output = g_debug_output
                 setup_logging(self)
+                global g_proto_readable
+                if not g_proto_readable:
+                        self.assertProtoReadable()
+                        g_proto_readable = True
 
         @property
         def methodName(self):
@@ -282,6 +288,16 @@
 
         base_port = property(lambda self: self.__base_port, __set_base_port)
 
+        def assertProtoReadable(self):
+                """Ensure proto area is readable by unprivileged user."""
+                try:
+                        self.cmdline_run("dir {0}".format(g_proto_area),
+                            su_wrap=True)
+                except:
+                        raise TestStopException("proto area '{0} is not "
+                            "readable by unprivileged user {1}".format(
+                                g_proto_area, get_su_wrap_user()))
+
         def assertRegexp(self, text, regexp):
                 """Test that a regexp search matches text."""
 
@@ -395,13 +411,39 @@
         def cmdline_run(self, cmdline, comment="", coverage=True, exit=0,
             handle=False, out=False, prefix="", raise_error=True, su_wrap=None,
             stderr=False, env_arg=None, usepty=False):
+
+                # If caller provides arguments as a string, the shell must
+                # process them.
+                shell = not isinstance(cmdline, list)
+
                 wrapper = ""
                 if coverage:
                         wrapper = self.coverage_cmd
-                su_wrap, su_end = self.get_su_wrapper(su_wrap=su_wrap)
-
-                cmdline = "%s%s%s %s%s" % (prefix, su_wrap, wrapper,
-                    cmdline, su_end)
+                su_wrap, su_end = self.get_su_wrapper(su_wrap=su_wrap,
+                    shell=shell)
+
+                if isinstance(cmdline, list):
+                        if wrapper:
+                                # Coverage command must be split into arguments.
+                                wrapper = wrapper.split()
+                                while wrapper:
+                                        cmdline.insert(0, wrapper.pop())
+                        if su_wrap:
+                                # This ensures that all parts of the command
+                                # line to be passed to 'su -c' are passed as a
+                                # single argument.
+                                while su_wrap[-1] != "-c":
+                                        cmdline.insert(0, su_wrap.pop())
+                                cmdline = [" ".join(cmdline)]
+                                while su_wrap:
+                                        cmdline.insert(0, su_wrap.pop())
+                        if prefix:
+                                cmdline.insert(0, prefix)
+                else:
+                        # Space needed between su_wrap and wrapper.
+                        cmdline = "%s%s %s %s%s" % (prefix, su_wrap, wrapper,
+                            cmdline, su_end)
+
                 self.debugcmd(cmdline)
 
                 newenv = os.environ.copy()
@@ -413,13 +455,14 @@
                 if not usepty:
                         p = subprocess.Popen(cmdline,
                             env=newenv,
-                            shell=True,
+                            shell=shell,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
 
                         if handle:
                                 # Do nothing more.
                                 return p
+
                         self.output, self.errout = p.communicate()
                         retcode = p.returncode
                 else:
@@ -459,7 +502,10 @@
                     subsequent_indent="\t",
                     break_long_words=False,
                     break_on_hyphens=False)
-                res = wrapper.wrap(cmdline.strip())
+                if isinstance(cmdline, list):
+                        res = wrapper.wrap(" ".join(cmdline).strip())
+                else:
+                        res = wrapper.wrap(cmdline.strip())
                 self.debug(" \\\n".join(res))
 
         def debugfilecreate(self, content, path):
@@ -491,18 +537,49 @@
         def set_debugbuf(self, s):
                 self.__debug_buf = s
 
-        def get_su_wrapper(self, su_wrap=None):
-                if su_wrap:
-                        if su_wrap == True:
-                                su_wrap = get_su_wrap_user()
-                        cov_env = " ".join(
-                            ("%s=%s" % e for e in self.coverage_env.items()))
-                        su_wrap = "su %s -c 'LD_LIBRARY_PATH=%s %s " % \
-                            (su_wrap, os.getenv("LD_LIBRARY_PATH", ""), cov_env)
+        def get_su_wrapper(self, su_wrap=None, shell=True):
+                """If 'shell' is True, the wrapper will be returned as a tuple of
+                strings of the form (su_wrap, su_end).  If 'shell' is False, the
+                wrapper willbe returned as a tuple of (args, ignore) where
+                'args' is a list of the commands and their arguments that should
+                come before the command being executed."""
+
+                if not su_wrap:
+                        return "", ""
+
+                if su_wrap == True:
+                        su_user = get_su_wrap_user()
+                else:
+                        su_user = ""
+
+                cov_env = [
+                    "%s=%s" % e
+                    for e in self.coverage_env.items()
+                ]
+
+                su_wrap = ["su"]
+
+                if su_user:
+                        su_wrap.append(su_user)
+
+                if shell:
+                        su_wrap.append("-c 'env LD_LIBRARY_PATH=%s" %
+                            os.getenv("LD_LIBRARY_PATH", ""))
+                else:
+                        # If this ever changes, cmdline_run must be updated.
+                        su_wrap.append("-c")
+                        su_wrap.append("env")
+                        su_wrap.append("LD_LIBRARY_PATH=%s" %
+                            os.getenv("LD_LIBRARY_PATH", ""))
+
+                su_wrap.extend(cov_env)
+
+                if shell:
+                        su_wrap = " ".join(su_wrap)
                         su_end = "'"
                 else:
-                        su_wrap = ""
                         su_end = ""
+
                 return su_wrap, su_end
 
         def getTeardownFunc(self):
@@ -618,8 +695,6 @@
                 testMethod = getattr(self, self._testMethodName)
                 if getattr(result, "coverage", None) is not None:
                         self.coverage_cmd, self.coverage_env = result.coverage
-                else:
-                        self.coverage_cmd, self.coverage_env = "", {}
                 try:
                         needtodie = False
                         try:
@@ -950,7 +1025,7 @@
                 new_rcfile = file("%s/%s%s" % (test_root, os.path.basename(rcfile),
                     suffix), "w")
 
-                conf = ConfigParser.SafeConfigParser()
+                conf = ConfigParser.RawConfigParser()
                 conf.readfp(open(rcfile))
 
                 for key in config:
@@ -2283,21 +2358,26 @@
                         with open(os.path.join(self.img_path(), f), "wb") as fh:
                                 fh.close()
 
-        def image_create(self, repourl=None, destroy=True, fs=(), **kwargs):
+        def image_create(self, repourl=None, destroy=True, fs=(),
+            img_path=None, **kwargs):
                 """A convenience wrapper for callers that only need basic image
                 creation functionality.  This wrapper creates a full (as opposed
                 to user) image using the pkg.client.api and returns the related
                 API object."""
 
+                if img_path is None:
+                        img_path = self.img_path()
+
                 if destroy:
-                        self.image_destroy()
-                mkdir_eexist_ok(self.img_path())
+                        self.image_destroy(img_path=img_path)
+
+                mkdir_eexist_ok(img_path)
 
                 self.fs = set()
 
                 force = False
                 for path in fs:
-                        full_path = os.path.join(self.img_path(),
+                        full_path = os.path.join(img_path,
                             path.lstrip(os.path.sep))
                         os.makedirs(full_path)
                         self.cmdline_run("/usr/sbin/mount -F tmpfs swap " +
@@ -2306,10 +2386,10 @@
                         if path.lstrip(os.path.sep) == "var":
                                 force = True
 
-                self.debug("image_create %s" % self.img_path())
+                self.debug("image_create %s" % img_path)
                 progtrack = pkg.client.progress.NullProgressTracker()
                 api_inst = pkg.client.api.image_create(PKG_CLIENT_NAME,
-                    CLIENT_API_VERSION, self.img_path(),
+                    CLIENT_API_VERSION, img_path,
                     pkg.client.api.IMG_TYPE_ENTIRE, False, repo_uri=repourl,
                     progtrack=progtrack, force=force,
                     **kwargs)
@@ -2357,34 +2437,56 @@
                 cmdline = "cd %s; find . | cpio -pdm %s" % (src_path, dst_path)
                 retcode = self.cmdline_run(cmdline, coverage=False)
 
-        def image_destroy(self):
-                if os.path.exists(self.img_path()):
-                        self.debug("image_destroy %s" % self.img_path())
+        def image_destroy(self, img_path=None):
+
+                if img_path is None:
+                        img_path = self.img_path()
+
+                if os.path.exists(img_path):
+                        self.debug("image_destroy %s" % img_path)
                         # Make sure we're not in the image.
                         os.chdir(self.test_root)
                         for path in getattr(self, "fs", set()).copy():
                                 self.cmdline_run("/usr/sbin/umount " + path,
 				    coverage=False)
                                 self.fs.remove(path)
-                        shutil.rmtree(self.img_path())
+                        shutil.rmtree(img_path)
 
         def pkg(self, command, exit=0, comment="", prefix="", su_wrap=None,
             out=False, stderr=False, cmd_path=None, use_img_root=True,
-            debug_smf=True, env_arg=None, coverage=True):
-                if debug_smf and "smf_cmds_dir" not in command:
-                        command = "--debug smf_cmds_dir=%s %s" % \
-                            (DebugValues["smf_cmds_dir"], command)
-                command = "-D plandesc_validate=1 %s" % command
-                command = "-D manifest_validate=Always %s" % command
-                if use_img_root and "-R" not in command and \
-                    "image-create" not in command and "version" not in command:
-                        command = "-R %s %s" % (self.get_img_path(), command)
+            debug_smf=True, env_arg=None, coverage=True, handle=False):
+
+                if isinstance(command, list):
+                        cmdstr = " ".join(command)
+                else:
+                        cmdstr = command
+
+                cmdline = []
+
                 if not cmd_path:
                         cmd_path = self.pkg_cmdpath
-                cmdline = "%s %s" % (cmd_path, command)
+
+                cmdline.append(cmd_path)
+
+                if use_img_root and "-R" not in cmdstr and \
+                    "image-create" not in cmdstr and "version" not in cmdstr:
+                        cmdline.extend(("-R", self.get_img_path()))
+
+                cmdline.extend(("-D", "plandesc_validate=1"))
+                cmdline.extend(("-D", "manifest_validate=Always"))
+
+                if debug_smf and "smf_cmds_dir" not in cmdstr:
+                        cmdline.extend(("-D", "smf_cmds_dir=%s" %
+                            DebugValues["smf_cmds_dir"]))
+
+                if not isinstance(command, list):
+                        cmdline = "%s %s" % (" ".join(cmdline), command)
+                else:
+                        cmdline.extend(command)
+
                 return self.cmdline_run(cmdline, exit=exit, comment=comment,
                     prefix=prefix, su_wrap=su_wrap, out=out, stderr=stderr,
-                    env_arg=env_arg, coverage=coverage)
+                    env_arg=env_arg, coverage=coverage, handle=handle)
 
         def pkg_verify(self, command, exit=0, comment="", prefix="",
             su_wrap=None, out=False, stderr=False, cmd_path=None,
@@ -2878,13 +2980,17 @@
                 responsible for all error handling."""
 
                 mpath = self.get_img_manifest_path(pfmri)
-                mdir = self.get_img_manifest_cache_dir(pfmri)
-
-                # Dump the manifest directory for the package to ensure any
+                mdir = os.path.dirname(mpath)
+                mcdir = self.get_img_manifest_cache_dir(pfmri)
+
+                # Dump the manifest directories for the package to ensure any
                 # cached information related to it is gone.
                 shutil.rmtree(mdir, True)
+                shutil.rmtree(mcdir, True)
                 self.assert_(not os.path.exists(mdir))
+                self.assert_(not os.path.exists(mcdir))
                 os.makedirs(mdir, mode=0755)
+                os.makedirs(mcdir, mode=0755)
 
                 # Finally, write the new manifest.
                 with open(mpath, "wb") as f:
@@ -3079,7 +3185,7 @@
                                 continue
                         plan = api_obj.describe()
 
-                        # update licesnse status
+                        # update license status
                         for pfmri, src, dest, accepted, displayed in \
                             plan.get_licenses():
                                 api_obj.set_plan_license_status(pfmri,
@@ -3465,6 +3571,10 @@
                 ta = self.pub_ta_map[publisher]
                 return "cs1_ta%d_key.pem" % ta
 
+        def get_pub_ta(self, publisher):
+                ta = self.pub_ta_map[publisher]
+                return "ta%d" % ta
+
         def setUp(self, publishers, start_depots=True):
                 # We only have 5 usable CA certs and there are not many usecases
                 # for setting up more than 5 different SSL-secured depots.
--- a/src/tests/ro_data/signing_certs/generate_certs.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/generate_certs.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import os
@@ -29,339 +29,146 @@
 import subprocess
 import sys
 
-# Locations defined in openssl.cnf
-output_dir = "./produced"
-cnf_file = "openssl.cnf"
-mk_file = "Makefile"
-
-subj_str = "/C=US/ST=California/L=Santa Clara/O=pkg5/CN=%s/emailAddress=%s"
-https_subj_str = "/C=US/ST=California/L=Santa Clara/O=pkg5/OU=%s/" \
-    "CN=localhost/emailAddress=%s"
-
-def convert_pem_to_text(tmp_pth, out_pth, kind="x509"):
-        """Convert a pem file to a human friendly text file."""
-
-        assert not os.path.exists(out_pth)
-
-        cmd = ["openssl", kind, "-in", tmp_pth,
-            "-text"]
-
-        fh = open(out_pth, "wb")
-        p = subprocess.Popen(cmd, stdout=fh)
-        assert p.wait() == 0
-        fh.close()
-
-def make_ca_cert(new_loc, new_name, parent_loc, parent_name, ext="v3_ca",
-    expired=False, future=False, https=False):
-        """Create a new CA cert."""
-
-        subj_str_to_use = subj_str
-        if https:
-                subj_str_to_use = https_subj_str
-        cmd = ["openssl", "req", "-new", "-nodes",
-            "-keyout", "./keys/%s_key.pem" % new_name,
-            "-out", "./%s/%s.csr" % (new_loc, new_name),
-            "-sha256", "-subj", subj_str_to_use % (new_name, new_name)]
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
-
-        cmd = ["openssl", "ca", "-policy", "policy_anything",
-            "-extensions", ext,
-            "-out", "./%s/%s_cert.pem" % (new_loc, new_name),
-            "-in", "./%s/%s.csr" % (new_loc, new_name),
-            "-cert", "./%s/%s_cert.pem" % (parent_loc, parent_name),
-            "-outdir", "./%s" % new_loc,
-            "-keyfile", "./keys/%s_key.pem" % parent_name, "-config", cnf_file,
-            "-batch"]
-        if expired:
-                cmd.append("-startdate")
-                cmd.append("090101010101Z")
-                cmd.append("-enddate")
-                cmd.append("090102010101Z")
-        elif future:
-                cmd.append("-startdate")
-                cmd.append("350101010101Z")
-                cmd.append("-enddate")
-                cmd.append("350102010101Z")
-        else:
-                cmd.append("-days")
-                cmd.append("1000")
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
-
-
-def make_cs_cert(new_loc, new_name, parent_loc, parent_name, ext="v3_req",
-    expired=False, future=False, https=False, passphrase=None):
-        """Create a new code signing cert."""
-
-        subj_str_to_use = subj_str
-        if https:
-                subj_str_to_use = https_subj_str
-        cmd = ["openssl", "req", "-new", "-nodes",
-            "-keyout", "./keys/%s_key.pem" % new_name,
-            "-out", "./%s/%s.csr" % (new_loc, new_name),
-            "-sha256", "-subj", subj_str_to_use % (new_name, new_name)]
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
+sys.path.append("../../")
+import certgenerator
 
-        if passphrase:
-                # Add a passphrase to the key just created using a new filename.
-                cmd = ["openssl", "rsa", "-des3",
-                    "-in", "./keys/%s_key.pem" % new_name,
-                    "-out", "./keys/%s_reqpass_key.pem" % new_name,
-                    "-passout", "pass:%s" % passphrase]
-                p = subprocess.Popen(cmd)
-                assert p.wait() == 0
-
-        cmd = ["openssl", "ca", "-policy", "policy_anything",
-            "-extensions", ext,
-            "-out", "./%s/%s_cert.pem" % (new_loc, new_name),
-            "-in", "./%s/%s.csr" % (new_loc, new_name),
-            "-cert", "./%s/%s_cert.pem" % (parent_loc, parent_name),
-            "-outdir", "./%s" % new_loc,
-            "-keyfile", "./keys/%s_key.pem" % parent_name, "-config", cnf_file,
-            "-batch"]
-        if expired:
-                cmd.append("-startdate")
-                cmd.append("090101010101Z")
-                cmd.append("-enddate")
-                cmd.append("090102010101Z")
-        elif future:
-                cmd.append("-startdate")
-                cmd.append("350101010101Z")
-                cmd.append("-enddate")
-                cmd.append("350102010101Z")
-        else:
-                cmd.append("-days")
-                cmd.append("1000")
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
-
-
-def make_trust_anchor(name, https=False):
-        """Make a new trust anchor."""
-
-        subj_str_to_use = subj_str
-        if https:
-                subj_str_to_use = https_subj_str
-        cmd = ["openssl", "req", "-new", "-x509", "-nodes",
-            "-keyout", "./keys/%s_key.pem" % name,
-            "-subj", subj_str_to_use % (name, name),
-            "-out", "./%s/%s_cert.tmp" % (name, name), "-days", "1000",
-            "-sha256"]
-
-        os.mkdir("./%s" % name)
-
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
-        convert_pem_to_text("./%s/%s_cert.tmp" % (name, name),
-            "./%s/%s_cert.pem" % (name, name))
-
-        try:
-                os.link("./%s/%s_cert.pem" % (name, name),
-                    "./trust_anchors/%s_cert.pem" % name)
-        except:
-                shutil.copy("./%s/%s_cert.pem" % (name, name),
-                    "./trust_anchors/%s_cert.pem" % name)
-
-def revoke_cert(ca, revoked_cert, ca_dir=None, cert_dir="code_signing_certs"):
-        """Revoke a certificate using the CA given."""
-
-        if not ca_dir:
-                ca_dir = ca
-        cmd = ["openssl", "ca", "-keyfile", "keys/%s_key.pem" % ca,
-            "-cert", "%s/%s_cert.pem" % (ca_dir, ca),
-            "-config", cnf_file,
-            "-revoke", "%s/%s_cert.pem" % (cert_dir, revoked_cert)]
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
-
-        cmd = ["openssl", "ca", "-gencrl",
-            "-keyfile", "keys/%s_key.pem" % ca,
-            "-cert", "%s/%s_cert.pem" % (ca_dir, ca),
-            "-config", cnf_file,
-            "-out", "crl/%s_crl.tmp" % ca,
-            "-crldays", "1000"]
-        p = subprocess.Popen(cmd)
-        assert p.wait() == 0
-        convert_pem_to_text("crl/%s_crl.tmp" % ca, "crl/%s_crl.pem" % ca,
-            kind="crl")
-
+output_dir = "./produced"
 
 if __name__ == "__main__":
         # Remove any existing output from previous runs of this program.
         if os.path.isdir(output_dir):
                 shutil.rmtree(output_dir)
         os.mkdir(output_dir)
-        shutil.copy(cnf_file, os.path.join(output_dir, cnf_file))
-        os.chdir(output_dir)
 
-        # Set up the needed files and directories.
-        fh = open("index", "wb")
-        fh.close()
-
-        fh = open("serial", "wb")
-        fh.write("01\n")
-        fh.close()
-
-        os.mkdir("crl")
-        os.mkdir("keys")
-        os.mkdir("trust_anchors")
-        os.mkdir("chain_certs")
-        os.mkdir("code_signing_certs")
+        cg = certgenerator.CertGenerator(base_dir=output_dir)
 
         # Make a length 7 chain.
-        make_trust_anchor("ta1")
-        make_ca_cert("chain_certs", "ch1_ta1", "trust_anchors", "ta1",
-            ext="v3_ca_lp4")
-        make_ca_cert("chain_certs", "ch2_ta1", "chain_certs", "ch1_ta1",
+        cg.make_trust_anchor("ta1")
+        cg.make_ca_cert("ch1_ta1", "ta1", ext="v3_ca_lp4")
+        cg.make_ca_cert("ch2_ta1", "ch1_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp3")
-        make_ca_cert("chain_certs", "ch3_ta1", "chain_certs", "ch2_ta1",
+        cg.make_ca_cert("ch3_ta1", "ch2_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp2")
-        make_ca_cert("chain_certs", "ch4_ta1", "chain_certs", "ch3_ta1",
+        cg.make_ca_cert("ch4_ta1", "ch3_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp1")
-        make_ca_cert("chain_certs", "ch5_ta1", "chain_certs", "ch4_ta1",
+        cg.make_ca_cert("ch5_ta1", "ch4_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp0")
-        make_cs_cert("code_signing_certs", "cs1_ch5_ta1",
-            "chain_certs", "ch5_ta1")
+        cg.make_cs_cert("cs1_ch5_ta1", "ch5_ta1", parent_loc="chain_certs")
         # Make a chain where a chain cert has revoked the code signing cert.
-        make_cs_cert("code_signing_certs", "cs2_ch5_ta1",
-            "chain_certs", "ch5_ta1", ext="ch5_ta1_crl")
-        revoke_cert("ch5_ta1", "cs2_ch5_ta1", ca_dir="chain_certs")
+        cg.make_cs_cert("cs2_ch5_ta1", "ch5_ta1", parent_loc="chain_certs",
+            ext="ch5_ta1_crl")
+        cg.revoke_cert("ch5_ta1", "cs2_ch5_ta1", ca_dir="chain_certs")
         # Make a chain where the chain cert has an unsupported critical
         # extension.
-        make_ca_cert("chain_certs", "ch5.1_ta1", "chain_certs", "ch4_ta1",
+        cg.make_ca_cert("ch5.1_ta1", "ch4_ta1", parent_loc="chain_certs",
             ext="issuer_ext_ca")
-        make_cs_cert("code_signing_certs", "cs1_ch5.1_ta1",
-            "chain_certs", "ch5.1_ta1")
+        cg.make_cs_cert("cs1_ch5.1_ta1", "ch5.1_ta1", parent_loc="chain_certs")
         # Make a chain where a chain cert has a larger number than is needed.
-        make_ca_cert("chain_certs", "ch5.2_ta1", "chain_certs", "ch4_ta1",
+        cg.make_ca_cert("ch5.2_ta1", "ch4_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp1")
-        make_cs_cert("code_signing_certs", "cs1_ch5.2_ta1",
-            "chain_certs", "ch5.2_ta1")
+        cg.make_cs_cert("cs1_ch5.2_ta1", "ch5.2_ta1", parent_loc="chain_certs")
         # Make a chain where a chain cert has a smaller number than is needed.
-        make_ca_cert("chain_certs", "ch4.3_ta1", "chain_certs", "ch3_ta1",
+        cg.make_ca_cert("ch4.3_ta1", "ch3_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp0")
-        make_ca_cert("chain_certs", "ch5.3_ta1", "chain_certs", "ch4.3_ta1",
+        cg.make_ca_cert("ch5.3_ta1", "ch4.3_ta1", parent_loc="chain_certs",
             ext="v3_ca_lp0")
-        make_cs_cert("code_signing_certs", "cs1_ch5.3_ta1",
-            "chain_certs", "ch5.3_ta1")
+        cg.make_cs_cert("cs1_ch5.3_ta1", "ch5.3_ta1", parent_loc="chain_certs")
 
         # Make a length 2 chain
-        make_trust_anchor("ta2")
-        make_cs_cert("code_signing_certs", "cs1_ta2", "trust_anchors", "ta2")
+        cg.make_trust_anchor("ta2")
+        cg.make_cs_cert("cs1_ta2", "ta2")
 
         # Make a length 3 chain
-        make_trust_anchor("ta3")
-        make_ca_cert("chain_certs", "ch1_ta3", "trust_anchors", "ta3")
-        make_cs_cert("code_signing_certs", "cs1_ch1_ta3",
-            "chain_certs", "ch1_ta3")
+        cg.make_trust_anchor("ta3")
+        cg.make_ca_cert("ch1_ta3", "ta3")
+        cg.make_cs_cert("cs1_ch1_ta3", "ch1_ta3", parent_loc="chain_certs")
         # Add a certificate to the length 3 chain with an unsupported critical
         # extension.
-        make_cs_cert("code_signing_certs", "cs2_ch1_ta3",
-            "chain_certs", "ch1_ta3", ext="issuer_ext")
+        cg.make_cs_cert("cs2_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            ext="issuer_ext")
         # Add a certificate to the length 3 chain that has already expired.
-        make_cs_cert("code_signing_certs", "cs3_ch1_ta3",
-            "chain_certs", "ch1_ta3", expired=True)
+        cg.make_cs_cert("cs3_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            expired=True)
         # Add a certificate to the length 3 chain that is in the future.
-        make_cs_cert("code_signing_certs", "cs4_ch1_ta3",
-            "chain_certs", "ch1_ta3", future=True)
+        cg.make_cs_cert("cs4_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            future=True)
         # Add a certificate to the length 3 chain that has an unknown value for
         # a recognized non-critical extension.
-        make_cs_cert("code_signing_certs", "cs5_ch1_ta3",
-            "chain_certs", "ch1_ta3", ext="issuer_ext_non_critical")
+        cg.make_cs_cert("cs5_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            ext="issuer_ext_non_critical")
         # Add a certificate to the length 3 chain that has an unknown value for
         # a recognized critical extension.
-        make_cs_cert("code_signing_certs", "cs6_ch1_ta3",
-            "chain_certs", "ch1_ta3", ext="issuer_ext_bad_val")
+        cg.make_cs_cert("cs6_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            ext="issuer_ext_bad_val")
         # Add a certificate to the length 3 chain that has keyUsage information
         # but cannot be used to sign code.
-        make_cs_cert("code_signing_certs", "cs7_ch1_ta3",
-            "chain_certs", "ch1_ta3", ext="v3_no_keyUsage")
+        cg.make_cs_cert("cs7_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            ext="v3_no_keyUsage")
         # Make a chain where a CS is used to sign another CS.
-        make_cs_cert("code_signing_certs", "cs8_ch1_ta3",
-            "chain_certs", "ch1_ta3", ext="v3_confused_cs")
-        make_cs_cert("code_signing_certs", "cs1_cs8_ch1_ta3",
-            "code_signing_certs", "cs8_ch1_ta3")
+        cg.make_cs_cert("cs8_ch1_ta3", "ch1_ta3", parent_loc="chain_certs",
+            ext="v3_confused_cs")
+        cg.make_cs_cert("cs1_cs8_ch1_ta3", "cs8_ch1_ta3",
+            parent_loc="code_signing_certs")
         # Make a chain where the CA has an unsupported critical extension.
-        make_ca_cert("chain_certs", "ch1.1_ta3", "trust_anchors", "ta3",
-            ext="issuer_ext_ca")
-        make_cs_cert("code_signing_certs", "cs1_ch1.1_ta3",
-            "chain_certs", "ch1.1_ta3")
+        cg.make_ca_cert("ch1.1_ta3", "ta3", ext="issuer_ext_ca")
+        cg.make_cs_cert("cs1_ch1.1_ta3", "ch1.1_ta3", parent_loc="chain_certs")
         # Make a chain where the CA is expired but the CS is current.
-        make_ca_cert("chain_certs", "ch1.2_ta3", "trust_anchors", "ta3",
-            expired=True)
-        make_cs_cert("code_signing_certs", "cs1_ch1.2_ta3",
-            "chain_certs", "ch1.2_ta3")
+        cg.make_ca_cert("ch1.2_ta3", "ta3", expired=True)
+        cg.make_cs_cert("cs1_ch1.2_ta3", "ch1.2_ta3", parent_loc="chain_certs")
         # Make a chain where the CA is in the future but the CS is current.
-        make_ca_cert("chain_certs", "ch1.3_ta3", "trust_anchors", "ta3",
-            future=True)
-        make_cs_cert("code_signing_certs", "cs1_ch1.3_ta3",
-            "chain_certs", "ch1.3_ta3")
+        cg.make_ca_cert("ch1.3_ta3", "ta3", future=True)
+        cg.make_cs_cert("cs1_ch1.3_ta3", "ch1.3_ta3", parent_loc="chain_certs")
         # Make a chain where the CA does not have keyUsage set.
-        make_ca_cert("chain_certs", "ch1.4_ta3", "trust_anchors", "ta3",
-            future=True, ext="v3_ca_no_keyUsage")
-        make_cs_cert("code_signing_certs", "cs1_ch1.4_ta3",
-            "chain_certs", "ch1.4_ta3")
+        cg.make_ca_cert("ch1.4_ta3", "ta3", future=True, ext="v3_ca_no_keyUsage")
+        cg.make_cs_cert("cs1_ch1.4_ta3", "ch1.4_ta3", parent_loc="chain_certs")
 
         # Revoke a code signing certificate from the publisher.
-        make_trust_anchor("ta4")
-        make_ca_cert("chain_certs", "ch1_ta4", "trust_anchors", "ta4")
-        make_cs_cert("code_signing_certs", "cs1_ch1_ta4",
-            "chain_certs", "ch1_ta4", ext="crl_ext")
-        revoke_cert("ch1_ta4", "cs1_ch1_ta4", ca_dir="chain_certs")
-        make_cs_cert("code_signing_certs", "cs2_ch1_ta4",
-            "chain_certs", "ch1_ta4", ext="bad_crl")
-        make_cs_cert("code_signing_certs", "cs3_ch1_ta4",
-            "chain_certs", "ch1_ta4", ext="bad_crl_loc")
+        cg.make_trust_anchor("ta4")
+        cg.make_ca_cert("ch1_ta4", "ta4")
+        cg.make_cs_cert("cs1_ch1_ta4", "ch1_ta4", parent_loc="chain_certs",
+            ext="crl_ext")
+        cg.revoke_cert("ch1_ta4", "cs1_ch1_ta4", ca_dir="chain_certs")
+        cg.make_cs_cert("cs2_ch1_ta4", "ch1_ta4", parent_loc="chain_certs",
+            ext="bad_crl")
+        cg.make_cs_cert("cs3_ch1_ta4", "ch1_ta4", parent_loc="chain_certs",
+            ext="bad_crl_loc")
         # Revoke a code signing certificate but sign the CRL with a CA
         # certificate that does not have that keyUsage set.
-        make_ca_cert("chain_certs", "ch1.1_ta4", "trust_anchors", "ta4",
-            ext="v3_ca_no_crl")
-        make_cs_cert("code_signing_certs", "cs1_ch1.1_ta4",
-            "chain_certs", "ch1.1_ta4", ext="ch1.1_ta4_crl")
-        revoke_cert("ch1.1_ta4", "cs1_ch1.1_ta4", ca_dir="chain_certs")
+        cg.make_ca_cert("ch1.1_ta4", "ta4", ext="v3_ca_no_crl")
+        cg.make_cs_cert("cs1_ch1.1_ta4", "ch1.1_ta4", parent_loc="chain_certs",
+            ext="ch1.1_ta4_crl")
+        cg.revoke_cert("ch1.1_ta4", "cs1_ch1.1_ta4", ca_dir="chain_certs")
 
         # Revoke a CA cert from the trust anchor
-        make_trust_anchor("ta5")
-        make_ca_cert("chain_certs", "ch1_ta5", "trust_anchors", "ta5",
-            ext="crl_ca")
-        make_cs_cert("code_signing_certs", "cs1_ch1_ta5",
-            "chain_certs", "ch1_ta5")
-        revoke_cert("ta5", "ch1_ta5", cert_dir="chain_certs")
+        cg.make_trust_anchor("ta5")
+        cg.make_ca_cert("ch1_ta5", "ta5", ext="crl_ca")
+        cg.make_cs_cert("cs1_ch1_ta5", "ch1_ta5", parent_loc="chain_certs")
+        cg.revoke_cert("ta5", "ch1_ta5", cert_dir="chain_certs")
 
         # Make more length 2 chains for testing https repos.
-        make_trust_anchor("ta6", https=True)
-        make_cs_cert("code_signing_certs", "cs1_ta6", "trust_anchors", "ta6",
-            https=True)
-        make_trust_anchor("ta7", https=True)
+        cg.make_trust_anchor("ta6", https=True)
+        cg.make_cs_cert("cs1_ta6", "ta6", https=True)
+        cg.make_trust_anchor("ta7", https=True)
         # A passphrase is added to this one to test depot HTTPS functionality.
-        make_cs_cert("code_signing_certs", "cs1_ta7", "trust_anchors", "ta7",
-            https=True, passphrase="123")
-        make_trust_anchor("ta8", https=True)
-        make_cs_cert("code_signing_certs", "cs1_ta8", "trust_anchors", "ta8",
-            https=True)
-        make_trust_anchor("ta9", https=True)
-        make_cs_cert("code_signing_certs", "cs1_ta9", "trust_anchors", "ta9",
-            https=True)
-        make_trust_anchor("ta10", https=True)
-        make_cs_cert("code_signing_certs", "cs1_ta10", "trust_anchors", "ta10",
-            https=True)
-        make_trust_anchor("ta11", https=True)
-        make_cs_cert("code_signing_certs", "cs1_ta11", "trust_anchors", "ta11",
-            https=True)
+        cg.make_cs_cert("cs1_ta7", "ta7", https=True, passphrase="123")
+        cg.make_trust_anchor("ta8", https=True)
+        cg.make_cs_cert("cs1_ta8", "ta8", https=True)
+        cg.make_trust_anchor("ta9", https=True)
+        cg.make_cs_cert("cs1_ta9", "ta9", https=True)
+        cg.make_trust_anchor("ta10", https=True)
+        cg.make_cs_cert("cs1_ta10", "ta10", https=True)
+        cg.make_trust_anchor("ta11", https=True)
+        cg.make_cs_cert("cs1_ta11", "ta11", https=True)
 
         # Create a combined CA file to test different client certs with Apache
-        fhw = open("combined_cas.pem", "w")
+        fhw = open(os.path.join(output_dir, "combined_cas.pem"), "w")
         for x in range(6,12):
                 if x == 7:
                         # ta requires a password to unlock cert, don't use 
                         continue
-                fn = "ta%d/ta%d_cert.pem" % (x,x)
+                fn = "%s/ta%d/ta%d_cert.pem" % (output_dir, x, x)
                 fhr = open(fn, "r")
                 fhw.write(fhr.read())
                 fhr.close()
         fhw.close()
 
-        os.remove(cnf_file)
-        os.chdir("../")
--- a/src/tests/ro_data/signing_certs/openssl.cnf	Thu Feb 06 12:42:30 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,275 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-#
-
-# OpenSSL configuration file for use with generate_certs.py.
-
-HOME                    = .
-RANDFILE                = $ENV::HOME/.rnd
-
-[ ca ]
-default_ca      = CA_default
-
-[ CA_default ]
-dir             = .
-crl_dir         = $dir/crl
-database        = $dir/index
-serial          = $dir/serial
-
-x509_extensions = usr_cert
-unique_subject  = no
-
-default_md      = sha256
-preserve        = no
-
-policy          = policy_match
-
-# For the 'anything' policy
-# At this point in time, you must list all acceptable 'object'
-# types.
-[ policy_anything ]
-countryName             = optional
-stateOrProvinceName     = optional
-localityName            = optional
-organizationName        = optional
-organizationalUnitName  = optional
-commonName              = supplied
-emailAddress            = optional
-
-####################################################################
-[ req ]
-default_bits            = 2048
-default_keyfile         = ./private/ca-key.pem
-default_md              = sha256
-
-prompt                  = no
-distinguished_name      = root_ca_distinguished_name
-
-x509_extensions = v3_ca
-string_mask = nombstr
-
-[ root_ca_distinguished_name ]
-commonName = ta1
-countryName = US
-stateOrProvinceName = California
-localityName = Menlo Park
-0.organizationName = pkg5
-emailAddress = ta1@pkg5
-
-[ usr_cert ]
-
-# These extensions are added when 'ca' signs a request.
-
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid,issuer:always
-
-[ v3_req ]
-
-# Extensions to add to a certificate request
-
-basicConstraints = critical,CA:FALSE
-keyUsage = critical, digitalSignature
-
-[ v3_confused_cs ]
-
-# Have CA be true, but don't have keyUsage allow certificate signing to created
-# a confused certificate
-
-basicConstraints = critical,CA:true
-keyUsage = critical, digitalSignature
-
-[ v3_no_keyUsage ]
-
-# The extensions to use for a code signing certificate without a keyUsage
-# extension
-
-basicConstraints = critical,CA:FALSE
-
-[ v3_ca ]
-
-# Extensions for a typical CA
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true
-keyUsage = critical, keyCertSign, cRLSign
-
-[ v3_ca_lp4 ]
-
-# Extensions for a typical CA
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true,pathlen:4
-keyUsage = critical, keyCertSign, cRLSign
-
-[ v3_ca_lp3 ]
-
-# Extensions for a typical CA
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true,pathlen:3
-keyUsage = critical, keyCertSign, cRLSign
-
-[ v3_ca_lp2 ]
-
-# Extensions for a typical CA
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true,pathlen:2
-keyUsage = critical, keyCertSign, cRLSign
-
-[ v3_ca_lp1 ]
-
-# Extensions for a typical CA
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true,pathlen:1
-keyUsage = critical, keyCertSign, cRLSign
-
-[ v3_ca_lp0 ]
-
-# Extensions for a typical CA
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true,pathlen:0
-keyUsage = critical, keyCertSign, cRLSign
-
-[ v3_ca_no_crl ]
-
-# Extensions for a CA which cannot sign a CRL.
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true
-keyUsage = critical, keyCertSign
-
-[ v3_ca_no_keyUsage ]
-
-# Extensions for a CA without keyUsage information.
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true
-
-[ issuer_ext ]
-
-# Used for a code signing cert with an unsupported critical extension.
-
-basicConstraints = critical,CA:FALSE
-issuerAltName = critical,issuer:copy
-
-[ issuer_ext_ca ]
-
-# Used for a CA cert with an unsupported critical extension.
-
-basicConstraints = critical,CA:TRUE
-issuerAltName = critical,issuer:copy
-
-[ issuer_ext_non_critical ]
-
-# Used to test a recognized non-critical extension with an unrecognized value
-
-basicConstraints = critical,CA:FALSE
-keyUsage = encipherOnly
-
-[ issuer_ext_bad_val ]
-
-# Used to test a recognized critical extension with an unrecognized value
-
-basicConstraints = critical,CA:FALSE
-keyUsage = critical, encipherOnly
-
-[ crl_ext ]
-
-# Used for testing certificate revocation.
-
-basicConstraints = critical,CA:FALSE
-crlDistributionPoints = URI:http://localhost:12001/file/0/ch1_ta4_crl.pem
-
-[ ch5_ta1_crl ]
-
-# Used for testing certificate revocation.
-
-basicConstraints = critical,CA:FALSE
-crlDistributionPoints = URI:http://localhost:12001/file/0/ch5_ta1_crl.pem
-
-[ ch1.1_ta4_crl ]
-
-# Used for testing certificate revocation.
-
-basicConstraints = critical,CA:FALSE
-crlDistributionPoints = URI:http://localhost:12001/file/0/ch1.1_ta4_crl.pem
-
-[ ch1_ta1_crl ]
-
-# Used for testing certificate revocation at the level of a chain certificate.
-
-basicConstraints = critical,CA:FALSE
-crlDistributionPoints = URI:http://localhost:12001/file/0/ch1_pubCA1_crl.pem
-
-[ crl_ca ]
-
-# Used for testing CA certificate revocation by a trust anchor.
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-basicConstraints = critical,CA:true
-crlDistributionPoints = URI:http://localhost:12001/file/0/ta5_crl.pem
-keyUsage = critical, keyCertSign, cRLSign
-
-[ bad_crl ]
-
-# Used for testing a CRL with a bad file format.
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-
-basicConstraints = critical,CA:false
-
-crlDistributionPoints = URI:http://localhost:12001/file/0/example_file
-
-[ bad_crl_loc ]
-
-# PKIX recommendation.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-
-basicConstraints = critical,CA:false
-
-crlDistributionPoints = URI:foo://bar/baz
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/01.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/01.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 1 (0x1)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta1/emailAddress=ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta1/emailAddress=ta1
         Validity
-            Not Before: Apr 11 22:37:38 2011 GMT
-            Not After : Jan  5 22:37:38 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b1:ac:f5:20:5c:bf:44:a0:a0:ff:0b:28:02:1b:
-                    9d:dd:1f:3c:6a:f7:16:c0:8e:ec:af:a1:a4:c4:cf:
-                    26:8e:43:ca:8a:aa:05:8f:a2:10:03:32:41:d0:6e:
-                    b4:52:45:47:a8:46:8b:c5:f3:cd:55:56:f5:d0:c3:
-                    ec:e4:a4:63:8b:9a:87:fa:74:78:ff:2c:f7:66:77:
-                    3f:05:c3:31:d0:46:5f:b6:17:af:b5:76:9f:d8:8d:
-                    22:d3:76:ac:ad:55:6f:4c:76:2a:27:8e:e9:22:74:
-                    42:ce:db:42:b9:00:54:01:fe:18:c6:4a:96:b5:b9:
-                    88:32:6d:c5:d9:56:fc:87:95
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:da:3a:b2:74:16:5c:38:7c:93:3a:48:cb:9f:71:
+                    7c:aa:b9:ff:d7:25:5f:cd:90:6c:e6:87:6d:ed:34:
+                    0f:12:19:00:a8:36:fe:51:4b:b2:38:76:55:2a:d1:
+                    ce:3b:a3:78:75:db:c8:ba:85:8b:ad:80:0e:84:ab:
+                    1f:4b:80:90:20:56:49:7b:71:a0:16:f8:15:8a:cd:
+                    70:ee:45:1f:53:34:3c:85:df:10:75:e2:b1:68:97:
+                    c5:0d:66:7f:bf:e7:b3:d1:09:03:1b:50:14:dc:e3:
+                    3e:a9:b6:6a:63:e6:0f:51:3e:06:59:50:43:da:10:
+                    99:0d:79:a3:b4:76:89:a2:01
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C0:9E:26:BD:D6:FB:FB:BF:FA:CE:33:92:CA:4E:25:CF:EC:9E:BA:66
+                36:46:2D:8A:1B:8B:CE:C1:1D:02:37:B9:EC:A5:FF:BA:73:AE:E5:48
             X509v3 Authority Key Identifier: 
-                keyid:75:A9:2B:02:E8:FB:31:09:2A:F2:16:21:24:D8:B2:A5:D0:14:93:5B
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta1/emailAddress=ta1
-                serial:A1:49:EA:78:5A:F4:55:8D
+                keyid:81:54:6B:06:08:DD:44:4F:08:81:21:7A:7C:D5:96:EA:53:2B:E3:0A
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta1/emailAddress=ta1
+                serial:F6:A8:B6:5C:10:8D:04:4F
 
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:4
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        94:eb:ef:96:17:47:57:5e:c2:4f:4c:67:8b:bd:d7:14:22:1e:
-        d7:09:cc:b7:b2:f2:cf:df:51:e3:a6:ea:5a:7b:3a:5f:47:b1:
-        db:37:91:a3:ae:75:d2:d0:9e:9c:49:fc:ec:1f:2e:9b:b4:96:
-        43:60:c8:99:a7:a8:fb:93:c1:68:2e:c8:09:42:23:0c:8a:25:
-        08:67:e9:0e:6a:44:e9:18:08:d0:a0:ce:60:6c:d3:e8:c1:ec:
-        2d:f0:db:47:04:36:f3:27:86:69:c5:10:06:3b:93:65:ea:19:
-        e4:6d:cd:fb:8a:ee:21:58:de:f3:17:7a:ee:ce:80:06:cc:1f:
-        48:dd
+         38:4a:69:9d:14:fa:51:b9:35:9c:c8:ae:e5:c0:e2:2e:4c:d4:
+         57:ad:64:05:99:e4:94:b3:d3:97:e0:0e:bd:1c:b4:64:c8:2b:
+         07:18:26:7f:99:ef:9c:48:e6:23:b3:96:37:92:54:85:8b:29:
+         19:60:12:11:fc:d8:62:84:5c:75:73:76:9e:0f:f8:a7:95:79:
+         c8:3c:75:f7:13:73:1f:be:fa:60:79:5c:6c:12:8d:ca:f9:58:
+         4b:1f:ed:0a:52:4c:61:95:6f:9a:a7:57:0c:20:9a:19:73:dc:
+         3d:42:aa:47:29:ac:92:a9:cc:4a:eb:85:6d:ab:cd:ed:2b:9a:
+         e5:c1
 -----BEGIN CERTIFICATE-----
-MIIDMjCCApugAwIBAgIBATANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGExMRIwEAYJKoZIhvcNAQkBFgN0YTEwHhcNMTEw
-NDExMjIzNzM4WhcNMTQwMTA1MjIzNzM4WjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gxX3RhMTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsaz1IFy/RKCg/wsoAhud3R88avcWwI7s
-r6GkxM8mjkPKiqoFj6IQAzJB0G60UkVHqEaLxfPNVVb10MPs5KRji5qH+nR4/yz3
-Znc/BcMx0EZfthevtXaf2I0i03asrVVvTHYqJ47pInRCzttCuQBUAf4YxkqWtbmI
-Mm3F2Vb8h5UCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUwJ4mvdb7+7/6zjOSyk4lz+ye
-umYwgZoGA1UdIwSBkjCBj4AUdakrAuj7MQkq8hYhJNiypdAUk1uhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEW
-A3RhMYIJAKFJ6nha9FWNMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBCwUAA4GBAJTr75YXR1dewk9MZ4u91xQiHtcJzLey8s/f
-UeOm6lp7Ol9Hsds3kaOuddLQnpxJ/OwfLpu0lkNgyJmnqPuTwWguyAlCIwyKJQhn
-6Q5qROkYCNCgzmBs0+jB7C3w20cENvMnhmnFEAY7k2XqGeRtzfuK7iFY3vMXeu7O
-gAbMH0jd
+MIIDNTCCAp6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMTESMBAGCSqGSIb3DQEJARYDdGExMB4XDTEz
+MTIxMzAwMTMzNFoXDTE2MDkwODAwMTMzNFowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDFfdGExMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaOrJ0Flw4fJM6SMufcXyquf/XJV/N
+kGzmh23tNA8SGQCoNv5RS7I4dlUq0c47o3h128i6hYutgA6Eqx9LgJAgVkl7caAW
++BWKzXDuRR9TNDyF3xB14rFol8UNZn+/57PRCQMbUBTc4z6ptmpj5g9RPgZZUEPa
+EJkNeaO0domiAQIDAQABo4HkMIHhMB0GA1UdDgQWBBQ2Ri2KG4vOwR0CN7nspf+6
+c67lSDCBmwYDVR0jBIGTMIGQgBSBVGsGCN1ETwiBIXp81ZbqUyvjCqFtpGswaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRh
+IENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQDDAN0YTExEjAQBgkqhkiG9w0B
+CQEWA3RhMYIJAPaotlwQjQRPMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBADhKaZ0U+lG5NZzIruXA4i5M1FetZAWZ
+5JSz05fgDr0ctGTIKwcYJn+Z75xI5iOzljeSVIWLKRlgEhH82GKEXHVzdp4P+KeV
+ecg8dfcTcx+++mB5XGwSjcr5WEsf7QpSTGGVb5qnVwwgmhlz3D1CqkcprJKpzErr
+hW2rze0rmuXB
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/02.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/02.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 2 (0x2)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:f4:24:ed:3d:fe:70:c8:51:b6:8d:26:78:90:6a:
-                    77:ff:de:7d:58:1f:00:fe:63:b0:88:de:46:18:d2:
-                    16:84:af:65:a1:9a:97:b1:38:14:6b:e7:98:c1:79:
-                    6f:0a:db:b2:92:6e:d6:7e:cd:cb:55:39:a0:27:e9:
-                    06:c8:45:19:2c:16:c3:4f:f5:af:cd:f6:14:cb:85:
-                    59:5c:1b:83:dc:f6:b6:4d:30:06:28:66:f6:2b:19:
-                    03:3f:00:de:09:77:50:a2:98:b1:73:3d:d5:79:f0:
-                    7e:79:2b:8e:76:96:c9:43:cf:44:9a:15:2e:09:00:
-                    47:a6:5a:f0:35:8b:88:b7:61
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:be:c1:86:30:d2:a3:02:f4:00:33:fc:54:f3:6f:
+                    d7:27:99:7b:57:e2:f1:93:f8:58:1c:eb:9a:cc:6b:
+                    23:9b:b8:a9:11:27:50:9b:d7:a7:c2:fe:8b:ee:54:
+                    d0:5d:e2:24:04:47:1c:cc:54:b5:89:bb:a6:26:de:
+                    b9:3b:73:19:67:5e:9a:88:12:de:87:de:0e:26:c9:
+                    0c:44:13:65:23:cd:7f:34:d6:bb:45:20:87:7e:ba:
+                    48:d5:2f:3f:fc:d6:8d:d7:b7:b2:9f:42:ef:76:9a:
+                    cf:c3:01:ae:b9:8f:00:33:ea:28:15:ca:30:da:8f:
+                    25:76:a4:55:2a:2c:7a:b8:eb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C2:62:F6:27:E6:91:FB:98:5F:55:6E:11:EE:6E:E0:04:76:A0:E7:01
+                12:30:0A:74:FD:DE:71:CF:4A:77:1E:1E:57:5E:F8:76:71:D7:5B:9E
             X509v3 Authority Key Identifier: 
-                keyid:C0:9E:26:BD:D6:FB:FB:BF:FA:CE:33:92:CA:4E:25:CF:EC:9E:BA:66
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta1/emailAddress=ta1
+                keyid:36:46:2D:8A:1B:8B:CE:C1:1D:02:37:B9:EC:A5:FF:BA:73:AE:E5:48
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta1/emailAddress=ta1
                 serial:01
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        a0:f7:c7:f9:6b:cf:6e:6c:36:74:b2:47:8d:76:04:74:88:de:
-        3b:cb:2d:e7:6c:fd:78:43:0f:29:9c:ba:92:97:dd:62:89:88:
-        31:c7:9b:b2:46:42:4a:e0:c1:3f:a8:5f:63:86:d1:75:d9:47:
-        46:d1:d3:87:dc:3e:7a:22:ce:8c:05:51:95:19:c5:2b:83:0f:
-        02:4c:54:a6:e8:a9:c9:79:bd:0b:f0:e7:4d:31:77:e6:07:ea:
-        1d:b1:35:48:30:15:28:c2:2d:36:42:fd:e9:11:85:7f:b0:9f:
-        7b:9a:b6:0e:1d:94:02:3a:3b:c1:b8:bd:c8:c9:8d:c6:b6:9a:
-        11:17
+         8e:a5:2a:c9:3f:e0:1f:a9:8c:a3:45:b8:0d:0e:35:43:c3:d6:
+         fe:f6:bc:0d:76:f0:26:d6:ab:e7:39:30:92:6f:cc:8e:0e:5f:
+         b0:92:29:41:39:41:14:2a:43:b1:bb:e5:d4:8c:b3:6e:b7:7b:
+         89:ab:3d:a4:e1:98:45:40:b9:1e:86:7b:b6:3f:55:e3:46:ab:
+         ed:41:45:6a:cc:af:a4:63:54:c8:ab:27:3f:59:67:8a:f5:60:
+         1b:63:b7:bb:27:94:00:8f:ee:f9:31:53:59:98:85:76:77:db:
+         dd:39:6f:1a:61:fe:0d:68:88:20:a8:d5:2b:c7:6a:08:5b:f1:
+         ac:9a
 -----BEGIN CERTIFICATE-----
-MIIDMjCCApugAwIBAgIBAjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDJfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDJf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0JO09/nDIUbaNJniQanf/
-3n1YHwD+Y7CI3kYY0haEr2WhmpexOBRr55jBeW8K27KSbtZ+zctVOaAn6QbIRRks
-FsNP9a/N9hTLhVlcG4Pc9rZNMAYoZvYrGQM/AN4Jd1CimLFzPdV58H55K452lslD
-z0SaFS4JAEemWvA1i4i3YQIDAQABo4HbMIHYMB0GA1UdDgQWBBTCYvYn5pH7mF9V
-bhHubuAEdqDnATCBkgYDVR0jBIGKMIGHgBTAnia91vv7v/rOM5LKTiXP7J66ZqFs
-pGowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAMTA3RhMTESMBAGCSqG
-SIb3DQEJARYDdGExggEBMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBCwUAA4GBAKD3x/lrz25sNnSyR412BHSI3jvLLeds/XhD
-DymcupKX3WKJiDHHm7JGQkrgwT+oX2OG0XXZR0bR04fcPnoizowFUZUZxSuDDwJM
-VKboqcl5vQvw500xd+YH6h2xNUgwFSjCLTZC/ekRhX+wn3uatg4dlAI6O8G4vcjJ
-jca2mhEX
+MIIDNTCCAp6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTExFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoMl90YTExFjAUBgkqhkiG9w0BCQEWB2No
+Ml90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL7BhjDSowL0ADP8VPNv
+1yeZe1fi8ZP4WBzrmsxrI5u4qREnUJvXp8L+i+5U0F3iJARHHMxUtYm7pibeuTtz
+GWdemogS3ofeDibJDEQTZSPNfzTWu0Ugh366SNUvP/zWjde3sp9C73aaz8MBrrmP
+ADPqKBXKMNqPJXakVSoserjrAgMBAAGjgdwwgdkwHQYDVR0OBBYEFBIwCnT93nHP
+SnceHlde+HZx11ueMIGTBgNVHSMEgYswgYiAFDZGLYobi87BHQI3ueyl/7pzruVI
+oW2kazBpMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMTESMBAG
+CSqGSIb3DQEJARYDdGExggEBMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAI6lKsk/4B+pjKNFuA0ONUPD1v72vA12
+8CbWq+c5MJJvzI4OX7CSKUE5QRQqQ7G75dSMs263e4mrPaThmEVAuR6Ge7Y/VeNG
+q+1BRWrMr6RjVMirJz9ZZ4r1YBtjt7snlACP7vkxU1mYhXZ32905bxph/g1oiCCo
+1SvHaghb8aya
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/03.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/03.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 3 (0x3)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ec:46:7e:e1:35:25:1c:92:37:51:fb:99:13:70:
-                    e7:89:d6:3e:3b:28:59:98:96:e2:81:87:3f:99:85:
-                    5d:06:0a:d0:df:04:3e:fe:8a:00:f5:aa:91:93:a9:
-                    48:5c:59:b9:cb:f2:94:dd:fe:71:11:af:9c:7e:71:
-                    ce:96:21:cc:fd:27:e9:7e:82:2b:84:d5:73:3a:89:
-                    c0:09:2b:aa:16:d6:5f:7a:ac:81:d1:9b:18:4d:85:
-                    1e:33:2f:86:a8:c3:7a:2d:68:24:30:1d:7f:db:c5:
-                    30:0c:bf:d9:72:04:98:9d:ff:2f:cf:94:e7:2e:88:
-                    b2:47:fd:ee:c1:d2:e0:e9:39
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d3:5b:f1:93:8f:01:0f:c0:25:d9:07:f1:70:29:
+                    1e:56:0b:ff:93:70:1d:45:02:ef:52:22:8a:04:c9:
+                    08:85:33:db:77:c3:33:d9:5c:fe:30:2a:a8:ac:9d:
+                    d8:97:dc:b4:69:51:5e:d1:c9:86:68:a7:e3:ab:35:
+                    e2:8f:d0:36:1b:67:be:50:88:66:7c:4b:4f:d3:86:
+                    78:92:d9:c5:62:c7:04:a3:d7:9e:8c:c3:ca:48:41:
+                    52:3f:a1:82:dc:f2:bb:d2:9c:a9:58:25:3a:0b:73:
+                    b6:41:ab:6a:c3:6a:70:ce:a1:20:0f:b6:db:e0:91:
+                    0b:0a:1f:dc:02:f4:ed:32:0f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D0:F9:37:92:54:28:C0:40:AE:62:94:51:42:6A:7C:8E:37:5F:AC:A8
+                8F:2A:82:4C:1E:39:97:C3:4A:6A:52:FC:D4:CB:E6:37:CE:12:91:59
             X509v3 Authority Key Identifier: 
-                keyid:C2:62:F6:27:E6:91:FB:98:5F:55:6E:11:EE:6E:E0:04:76:A0:E7:01
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta1/emailAddress=ch1_ta1
+                keyid:12:30:0A:74:FD:DE:71:CF:4A:77:1E:1E:57:5E:F8:76:71:D7:5B:9E
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta1/emailAddress=ch1_ta1
                 serial:02
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        3e:60:a3:23:dc:e2:bc:b9:60:14:1b:e5:dd:af:bd:f2:8b:cb:
-        f1:55:8a:03:e1:ee:82:f2:d2:7b:3d:0d:4a:56:f5:61:80:97:
-        27:90:c0:05:e4:e9:18:e8:29:97:eb:aa:6b:d2:4a:0c:b8:c0:
-        f3:cf:a5:4f:95:dd:46:03:96:eb:29:e4:bb:22:fe:5b:34:da:
-        02:8c:36:12:b6:9c:3e:a4:e4:d7:33:a3:ac:d8:45:65:75:37:
-        68:55:63:eb:d8:d1:6f:28:66:fc:ac:ad:15:08:67:41:41:32:
-        3f:ed:60:fc:01:e1:b9:88:24:95:1e:9c:ee:69:3b:d2:91:f8:
-        ef:81
+         94:2a:c9:c9:21:b7:bd:3a:72:31:65:89:16:11:00:e1:46:38:
+         16:b6:cd:d4:04:b3:18:71:3d:8d:4a:0a:ec:02:4e:ee:58:2c:
+         7d:d2:0b:6f:c6:d2:be:a6:f9:1c:e7:c2:76:2a:09:87:d2:06:
+         8e:0d:aa:66:70:e8:8f:ff:7d:1d:e4:4e:9b:58:71:f7:40:46:
+         a8:79:9d:86:6c:bf:64:3b:76:66:6c:08:21:62:09:6d:7b:f4:
+         5d:e2:8e:1c:e6:e3:56:71:de:b7:fe:92:07:f0:7e:13:e0:ad:
+         62:b3:08:9f:06:7e:9b:f6:8b:76:96:df:86:30:0e:bb:ef:9b:
+         b3:07
 -----BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gyX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gyX3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDNfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDNf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsRn7hNSUckjdR+5kTcOeJ
-1j47KFmYluKBhz+ZhV0GCtDfBD7+igD1qpGTqUhcWbnL8pTd/nERr5x+cc6WIcz9
-J+l+giuE1XM6icAJK6oW1l96rIHRmxhNhR4zL4aow3otaCQwHX/bxTAMv9lyBJid
-/y/PlOcuiLJH/e7B0uDpOQIDAQABo4HjMIHgMB0GA1UdDgQWBBTQ+TeSVCjAQK5i
-lFFCanyON1+sqDCBmgYDVR0jBIGSMIGPgBTCYvYn5pH7mF9VbhHubuAEdqDnAaF0
-pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxEDAOBgNVBAMUB2NoMV90YTExFjAU
-BgkqhkiG9w0BCQEWB2NoMV90YTGCAQIwEgYDVR0TAQH/BAgwBgEB/wIBAjAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAPmCjI9zivLlgFBvl3a+98ovL
-8VWKA+HugvLSez0NSlb1YYCXJ5DABeTpGOgpl+uqa9JKDLjA88+lT5XdRgOW6ynk
-uyL+WzTaAow2EracPqTk1zOjrNhFZXU3aFVj69jRbyhm/KytFQhnQUEyP+1g/AHh
-uYgklR6c7mk70pH474E=
+MIIDPTCCAqagAwIBAgIBAzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMl90YTExFjAUBgkqhkiG9w0BCQEWB2NoMl90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTExFjAUBgkqhkiG9w0BCQEWB2No
+M190YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANNb8ZOPAQ/AJdkH8XAp
+HlYL/5NwHUUC71IiigTJCIUz23fDM9lc/jAqqKyd2JfctGlRXtHJhmin46s14o/Q
+NhtnvlCIZnxLT9OGeJLZxWLHBKPXnozDykhBUj+hgtzyu9KcqVglOgtztkGrasNq
+cM6hIA+22+CRCwof3AL07TIPAgMBAAGjgeQwgeEwHQYDVR0OBBYEFI8qgkweOZfD
+SmpS/NTL5jfOEpFZMIGbBgNVHSMEgZMwgZCAFBIwCnT93nHPSnceHlde+HZx11ue
+oXWkczBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTEx
+FjAUBgkqhkiG9w0BCQEWB2NoMV90YTGCAQIwEgYDVR0TAQH/BAgwBgEB/wIBAjAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAlCrJySG3vTpyMWWJFhEA
+4UY4FrbN1ASzGHE9jUoK7AJO7lgsfdILb8bSvqb5HOfCdioJh9IGjg2qZnDoj/99
+HeROm1hx90BGqHmdhmy/ZDt2ZmwIIWIJbXv0XeKOHObjVnHet/6SB/B+E+CtYrMI
+nwZ+m/aLdpbfhjAOu++bswc=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/04.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/04.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 4 (0x4)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:f5:af:af:99:95:f3:52:3b:eb:be:62:e6:eb:9f:
-                    c5:f8:ff:8f:0c:d2:e3:c7:06:b1:45:ca:ff:8c:fc:
-                    3d:bc:f4:6d:e3:f9:ac:12:69:d5:a1:6f:02:52:ad:
-                    50:34:7e:cc:a7:ee:82:04:b3:5b:e6:be:cc:44:e6:
-                    b8:d2:fc:1d:2a:80:d8:0c:c1:3c:4f:95:31:68:8a:
-                    fb:2b:e2:aa:b2:54:7c:3a:d3:86:6d:5f:20:b6:29:
-                    23:ae:74:09:fd:9a:d3:45:e2:e3:2a:62:1f:91:fd:
-                    a2:b1:2f:26:68:fb:4d:69:fb:66:1f:0b:4b:1a:52:
-                    ac:e1:8b:69:b1:16:96:89:13
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:af:c3:8b:39:3e:21:56:8a:d6:97:1b:c7:aa:c7:
+                    51:9e:e9:cf:15:1f:24:e6:91:92:81:b3:7d:30:eb:
+                    ea:12:30:13:03:d0:b9:60:41:8b:eb:88:f4:1f:e5:
+                    43:cf:b5:ae:47:7a:4d:46:6e:f8:16:42:67:db:20:
+                    e4:0d:1f:96:4f:21:59:95:f6:70:33:32:45:81:18:
+                    5e:a5:5b:fd:4a:e6:d7:97:cf:45:65:e7:74:79:5f:
+                    a5:9f:e1:c7:a5:d0:5d:24:a7:32:18:68:13:57:4c:
+                    cf:78:12:6f:9f:5c:e6:4d:be:89:24:4b:29:d8:02:
+                    b2:f9:f9:13:cf:92:43:0f:e5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B2:A1:C2:1D:B7:20:56:20:8C:64:DA:BA:06:C6:5A:E4:0A:23:6E:01
+                54:8A:14:10:0B:AF:89:DC:1E:65:8A:17:37:6A:AC:D2:2B:6C:27:5C
             X509v3 Authority Key Identifier: 
-                keyid:D0:F9:37:92:54:28:C0:40:AE:62:94:51:42:6A:7C:8E:37:5F:AC:A8
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
+                keyid:8F:2A:82:4C:1E:39:97:C3:4A:6A:52:FC:D4:CB:E6:37:CE:12:91:59
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
                 serial:03
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        d5:54:78:2a:2c:5f:82:26:03:07:71:54:04:2d:81:e5:dd:a6:
-        b1:92:8a:37:5f:52:f0:13:cd:35:4a:2b:a7:24:9c:44:7b:ac:
-        1d:3c:52:82:e4:15:85:a9:d4:19:4d:55:c6:85:74:ac:2a:6c:
-        42:9f:92:d9:86:02:d8:90:a8:53:28:31:e1:e2:33:1b:d5:05:
-        c3:f7:94:86:10:5d:78:62:96:a7:d1:e3:b4:be:0e:e6:8c:03:
-        ef:4c:03:96:4e:6d:9a:b2:32:55:46:20:cf:41:d1:4f:db:c6:
-        57:34:df:51:d4:b9:9d:bf:d1:20:a5:e6:a0:34:ef:ab:e8:e9:
-        93:ce
+         6a:17:96:16:a6:3f:96:b7:8e:fb:e5:d7:14:f9:a8:8e:52:16:
+         04:0d:58:4b:f7:c6:70:c4:3f:d3:2b:13:24:7b:47:2d:cf:89:
+         59:bf:5c:6c:17:31:46:c4:17:e5:41:fe:5e:3f:ec:44:2e:92:
+         94:eb:3b:c9:ff:d1:5e:c0:ad:d3:51:2b:12:11:87:b2:17:2f:
+         40:5a:ac:76:f0:0f:ed:cd:ca:be:b6:b2:ef:bf:d4:79:04:e0:
+         ed:88:33:96:b0:a4:27:41:a7:31:0b:c4:d9:6a:ad:7d:82:bb:
+         63:15:2a:00:8e:60:af:ee:a6:8a:d3:65:6a:b8:f9:7e:0e:cd:
+         bf:d5
 -----BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gzX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDRfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDRf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1r6+ZlfNSO+u+Yubrn8X4
-/48M0uPHBrFFyv+M/D289G3j+awSadWhbwJSrVA0fsyn7oIEs1vmvsxE5rjS/B0q
-gNgMwTxPlTFoivsr4qqyVHw604ZtXyC2KSOudAn9mtNF4uMqYh+R/aKxLyZo+01p
-+2YfC0saUqzhi2mxFpaJEwIDAQABo4HjMIHgMB0GA1UdDgQWBBSyocIdtyBWIIxk
-2roGxlrkCiNuATCBmgYDVR0jBIGSMIGPgBTQ+TeSVCjAQK5ilFFCanyON1+sqKF0
-pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxEDAOBgNVBAMUB2NoMl90YTExFjAU
-BgkqhkiG9w0BCQEWB2NoMl90YTGCAQMwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEA1VR4KixfgiYDB3FUBC2B5d2m
-sZKKN19S8BPNNUorpyScRHusHTxSguQVhanUGU1VxoV0rCpsQp+S2YYC2JCoUygx
-4eIzG9UFw/eUhhBdeGKWp9HjtL4O5owD70wDlk5tmrIyVUYgz0HRT9vGVzTfUdS5
-nb/RIKXmoDTvq+jpk84=
+MIIDPTCCAqagAwIBAgIBBDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTExFjAUBgkqhkiG9w0BCQEWB2NoM190
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2No
+NF90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK/Dizk+IVaK1pcbx6rH
+UZ7pzxUfJOaRkoGzfTDr6hIwEwPQuWBBi+uI9B/lQ8+1rkd6TUZu+BZCZ9sg5A0f
+lk8hWZX2cDMyRYEYXqVb/Urm15fPRWXndHlfpZ/hx6XQXSSnMhhoE1dMz3gSb59c
+5k2+iSRLKdgCsvn5E8+SQw/lAgMBAAGjgeQwgeEwHQYDVR0OBBYEFFSKFBALr4nc
+HmWKFzdqrNIrbCdcMIGbBgNVHSMEgZMwgZCAFI8qgkweOZfDSmpS/NTL5jfOEpFZ
+oXWkczBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoMl90YTEx
+FjAUBgkqhkiG9w0BCQEWB2NoMl90YTGCAQMwEgYDVR0TAQH/BAgwBgEB/wIBATAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAaheWFqY/lreO++XXFPmo
+jlIWBA1YS/fGcMQ/0ysTJHtHLc+JWb9cbBcxRsQX5UH+Xj/sRC6SlOs7yf/RXsCt
+01ErEhGHshcvQFqsdvAP7c3Kvray77/UeQTg7YgzlrCkJ0GnMQvE2WqtfYK7YxUq
+AI5gr+6mitNlarj5fg7Nv9U=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/05.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/05.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 5 (0x5)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c3:8d:d0:ab:25:75:ba:f5:20:df:7c:8a:d4:cd:
-                    40:f6:c3:ca:25:11:b5:30:d6:27:fa:e4:a0:11:d6:
-                    aa:32:7d:c8:15:9d:d7:6f:7f:ae:80:de:28:c3:ae:
-                    77:a8:7f:f1:05:e9:6b:bc:63:a9:a6:91:04:3b:79:
-                    6b:96:f2:e0:9a:17:79:d3:04:0a:5f:46:09:b5:6f:
-                    3e:a9:f4:34:47:62:18:f4:28:f7:d9:09:cd:4f:8a:
-                    33:df:9b:69:9b:61:ce:72:c7:35:ed:61:a0:5b:0c:
-                    c1:61:00:0a:ac:83:9a:6a:3c:6d:30:96:eb:77:8c:
-                    28:3f:fc:62:8a:fa:60:8e:17
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:df:c0:ed:cc:df:82:ab:d3:9b:54:8d:56:f7:0d:
+                    e4:d8:b4:ba:03:ef:a3:82:f6:b6:e6:4d:0f:b4:e5:
+                    61:98:88:bd:32:b3:47:21:4b:2c:e8:c3:9a:22:9c:
+                    35:63:a8:4f:2a:c1:47:1a:3a:b2:46:d6:61:4e:87:
+                    2a:13:3a:d8:35:3e:3c:ae:67:43:b8:3d:a9:95:df:
+                    7b:ba:e9:71:ec:31:99:b3:fa:00:96:8c:80:4b:1d:
+                    d9:77:e5:d2:14:9d:95:a2:ce:32:21:d5:2e:67:ae:
+                    b1:08:04:fb:9d:fb:70:16:74:5f:1a:d1:36:77:e8:
+                    4b:68:c3:d8:d4:fb:18:20:31
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                69:C7:BA:72:9C:7F:C3:92:8D:F6:A6:D0:20:48:5A:8E:A7:B6:E7:82
+                B7:43:D6:5A:46:C2:2F:15:50:05:D5:FB:5E:BE:EC:F8:33:9E:EC:EC
             X509v3 Authority Key Identifier: 
-                keyid:B2:A1:C2:1D:B7:20:56:20:8C:64:DA:BA:06:C6:5A:E4:0A:23:6E:01
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+                keyid:54:8A:14:10:0B:AF:89:DC:1E:65:8A:17:37:6A:AC:D2:2B:6C:27:5C
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
                 serial:04
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        e7:9a:14:6b:dc:a5:fa:da:15:2a:f0:b5:87:ef:82:df:2c:b1:
-        8b:f9:f6:a5:a0:e6:d2:86:da:46:69:68:6f:68:26:5c:79:73:
-        21:31:ea:b4:a7:e6:58:c9:12:cd:8c:c0:d0:e2:05:f0:6f:1d:
-        56:e5:3f:4a:32:eb:02:39:b6:6e:cb:c4:e1:d5:21:0f:63:1e:
-        4f:0b:3d:af:ca:5a:7b:2b:9c:7f:51:44:7a:39:73:e5:f2:ba:
-        48:85:20:f9:36:b5:c2:14:44:da:7d:ae:83:2e:b4:d8:f1:77:
-        19:97:c0:c7:8b:e7:62:81:93:75:ed:93:dd:19:4b:36:00:ba:
-        c6:2d
+         96:fb:63:43:cf:70:0a:14:7b:47:4e:37:4b:2f:7c:7f:8c:75:
+         85:bb:e3:44:af:9c:2c:08:c5:9c:4d:c7:59:f1:70:3a:67:82:
+         1c:4c:3c:f7:8b:e7:00:f0:05:db:af:29:79:53:6f:09:a2:ac:
+         ae:4d:e2:df:4a:7d:4e:56:79:8c:85:97:47:14:4e:2f:7e:bd:
+         07:2c:70:01:85:43:3c:18:32:ed:24:36:24:1c:29:e0:0b:ce:
+         86:4d:a7:a9:88:b8:de:f1:0e:a3:13:c1:5c:d7:1b:76:81:c2:
+         3f:63:c3:76:1d:60:f7:e5:43:1f:25:3b:ae:d2:a5:1f:02:fa:
+         8c:a3
 -----BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIBBTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g0X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g0X3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDVfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDVf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDjdCrJXW69SDffIrUzUD2
-w8olEbUw1if65KAR1qoyfcgVnddvf66A3ijDrneof/EF6Wu8Y6mmkQQ7eWuW8uCa
-F3nTBApfRgm1bz6p9DRHYhj0KPfZCc1PijPfm2mbYc5yxzXtYaBbDMFhAAqsg5pq
-PG0wlut3jCg//GKK+mCOFwIDAQABo4HjMIHgMB0GA1UdDgQWBBRpx7pynH/Dko32
-ptAgSFqOp7bngjCBmgYDVR0jBIGSMIGPgBSyocIdtyBWIIxk2roGxlrkCiNuAaF0
-pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxEDAOBgNVBAMUB2NoM190YTExFjAU
-BgkqhkiG9w0BCQEWB2NoM190YTGCAQQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEA55oUa9yl+toVKvC1h++C3yyx
-i/n2paDm0obaRmlob2gmXHlzITHqtKfmWMkSzYzA0OIF8G8dVuU/SjLrAjm2bsvE
-4dUhD2MeTws9r8paeyucf1FEejlz5fK6SIUg+Ta1whRE2n2ugy602PF3GZfAx4vn
-YoGTde2T3RlLNgC6xi0=
+MIIDPTCCAqagAwIBAgIBBTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2NoNF90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2No
+NV90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN/A7czfgqvTm1SNVvcN
+5Ni0ugPvo4L2tuZND7TlYZiIvTKzRyFLLOjDmiKcNWOoTyrBRxo6skbWYU6HKhM6
+2DU+PK5nQ7g9qZXfe7rpcewxmbP6AJaMgEsd2Xfl0hSdlaLOMiHVLmeusQgE+537
+cBZ0XxrRNnfoS2jD2NT7GCAxAgMBAAGjgeQwgeEwHQYDVR0OBBYEFLdD1lpGwi8V
+UAXV+16+7PgznuzsMIGbBgNVHSMEgZMwgZCAFFSKFBALr4ncHmWKFzdqrNIrbCdc
+oXWkczBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTEx
+FjAUBgkqhkiG9w0BCQEWB2NoM190YTGCAQQwEgYDVR0TAQH/BAgwBgEB/wIBADAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAlvtjQ89wChR7R043Sy98
+f4x1hbvjRK+cLAjFnE3HWfFwOmeCHEw894vnAPAF268peVNvCaKsrk3i30p9TlZ5
+jIWXRxROL369ByxwAYVDPBgy7SQ2JBwp4AvOhk2nqYi43vEOoxPBXNcbdoHCP2PD
+dh1g9+VDHyU7rtKlHwL6jKM=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/08.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/08.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 8 (0x8)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Validity
-            Not Before: Apr 11 22:37:40 2011 GMT
-            Not After : Jan  5 22:37:40 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cc:de:54:ed:78:31:c0:7c:e4:25:98:a3:0d:fa:
-                    77:08:f3:39:c4:9f:88:41:ee:00:a3:35:ed:b6:f0:
-                    cc:a3:fd:0f:ce:3c:70:b5:aa:1e:42:4e:5c:ae:d8:
-                    cb:99:53:ef:1e:49:f9:4c:5f:47:be:d0:e6:e2:f1:
-                    12:29:d5:77:75:88:79:4c:3b:64:05:ba:08:5d:dc:
-                    ed:1f:7f:15:92:69:ec:b9:c9:84:f0:7d:3f:db:66:
-                    34:a5:35:8c:22:9b:5f:4b:19:83:15:35:49:7c:4b:
-                    77:35:2c:c4:58:34:15:f1:66:99:ce:65:d3:06:b7:
-                    d2:35:d7:96:39:ee:d8:08:91
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:9d:91:87:82:56:78:7f:64:32:62:7e:ee:6c:38:
+                    f2:a2:f6:34:ba:a9:ec:bb:6e:0f:87:ab:46:a4:37:
+                    ce:80:f1:b5:8b:9b:0a:4b:2a:b6:46:9b:f1:47:c0:
+                    6b:85:7f:64:08:61:ac:53:d4:3b:ce:54:2a:6d:a4:
+                    65:cd:a7:dc:a5:3a:33:bf:86:2b:f6:d0:fb:24:80:
+                    56:8f:4f:d4:f9:96:71:f3:86:74:4b:47:38:da:18:
+                    79:ae:d9:5b:9d:09:9e:f7:cb:b4:a7:85:33:85:20:
+                    d3:2a:fc:72:c1:37:62:01:d6:b1:cb:4a:a0:09:c2:
+                    72:ea:fd:b8:5d:03:68:33:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -29,27 +29,27 @@
                 <EMPTY>
 
     Signature Algorithm: sha256WithRSAEncryption
-        22:ec:49:fd:44:5e:9a:b1:55:f7:29:4c:cf:66:ff:1f:ce:d7:
-        e6:31:ae:b5:f3:3b:c9:d8:e4:d4:4a:59:ff:db:9a:88:23:28:
-        14:62:78:03:b8:36:d8:32:56:c6:d2:09:0f:e4:33:ea:02:7f:
-        24:02:fc:4c:58:5c:e7:3a:4c:b6:69:55:bc:5e:c8:3e:c2:97:
-        66:82:74:6a:1c:1e:ae:ae:3d:35:f5:6e:a3:a5:9b:9d:23:d5:
-        da:de:e2:47:ee:ea:78:8a:36:19:73:f5:7f:38:bd:0e:bb:56:
-        3c:c8:21:0e:5a:57:a0:cf:08:50:e6:80:ef:3e:e5:ed:64:69:
-        d6:6d
+         11:3c:6b:22:14:f6:1a:18:8b:59:a4:8d:38:d6:6f:48:8a:01:
+         e2:d3:9d:6a:26:40:61:d3:9b:ce:8a:ab:b9:25:c4:89:c4:f9:
+         98:1e:6c:f5:1c:d7:f7:6a:c9:7b:48:ba:d7:e0:03:59:41:4d:
+         29:28:7d:2d:61:c5:7f:7f:8c:2f:30:2b:c6:6e:16:31:7d:45:
+         d2:2a:83:ea:fc:25:92:1f:cb:85:28:0a:f4:2c:a0:c4:c2:fc:
+         52:43:53:d1:46:e7:fd:3c:0a:9b:11:45:0f:09:2e:c6:93:26:
+         72:c9:20:28:7a:db:18:55:1b:15:70:1f:bc:0e:ab:18:c1:f8:
+         64:03
 -----BEGIN CERTIFICATE-----
-MIICezCCAeSgAwIBAgIBCDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g0X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g0X3Rh
-MTAeFw0xMTA0MTEyMjM3NDBaFw0xNDAxMDUyMjM3NDBaMHQxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRIwEAYDVQQDFAljaDUuMV90YTExGDAWBgkqhkiG9w0BCQEWCWNo
-NS4xX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzN5U7XgxwHzkJZij
-Dfp3CPM5xJ+IQe4AozXttvDMo/0PzjxwtaoeQk5crtjLmVPvHkn5TF9HvtDm4vES
-KdV3dYh5TDtkBboIXdztH38VkmnsucmE8H0/22Y0pTWMIptfSxmDFTVJfEt3NSzE
-WDQV8WaZzmXTBrfSNdeWOe7YCJECAwEAAaMhMB8wDwYDVR0TAQH/BAUwAwEB/zAM
-BgNVHRIBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4GBACLsSf1EXpqxVfcpTM9m/x/O
-1+YxrrXzO8nY5NRKWf/bmogjKBRieAO4NtgyVsbSCQ/kM+oCfyQC/ExYXOc6TLZp
-VbxeyD7Cl2aCdGocHq6uPTX1bqOlm50j1dre4kfu6niKNhlz9X84vQ67VjzIIQ5a
-V6DPCFDmgO8+5e1kadZt
+MIICfTCCAeagAwIBAgIBCDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2NoNF90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB1MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4xX3RhMTEYMBYGCSqGSIb3DQEJARYJ
+Y2g1LjFfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdkYeCVnh/ZDJi
+fu5sOPKi9jS6qey7bg+Hq0akN86A8bWLmwpLKrZGm/FHwGuFf2QIYaxT1DvOVCpt
+pGXNp9ylOjO/hiv20PskgFaPT9T5lnHzhnRLRzjaGHmu2VudCZ73y7SnhTOFINMq
+/HLBN2IB1rHLSqAJwnLq/bhdA2gzfQIDAQABoyEwHzAPBgNVHRMBAf8EBTADAQH/
+MAwGA1UdEgEB/wQCMAAwDQYJKoZIhvcNAQELBQADgYEAETxrIhT2GhiLWaSNONZv
+SIoB4tOdaiZAYdObzoqruSXEicT5mB5s9RzX92rJe0i61+ADWUFNKSh9LWHFf3+M
+LzArxm4WMX1F0iqD6vwlkh/LhSgK9CygxML8UkNT0Ubn/TwKmxFFDwkuxpMmcskg
+KHrbGFUbFXAfvA6rGMH4ZAM=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/0A.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/0A.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 10 (0xa)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Validity
-            Not Before: Apr 11 22:37:41 2011 GMT
-            Not After : Jan  5 22:37:41 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:27:9b:4d:c3:41:cf:96:d4:f0:21:59:1b:77:
-                    ce:54:81:dc:05:57:1f:56:69:8c:5f:58:3f:88:4a:
-                    c6:73:bd:a9:4a:d0:f8:a3:33:1b:4f:d8:94:b5:d3:
-                    95:bd:00:06:d1:18:e8:ea:9e:41:ad:06:ea:c6:cc:
-                    9f:93:a7:c4:a0:3e:05:62:4c:3f:1c:88:79:a0:a1:
-                    eb:f3:94:d0:1b:8c:a8:9f:4c:3b:37:80:06:6b:00:
-                    e7:30:6c:d4:c2:51:27:7f:1a:e5:95:a7:1c:15:d6:
-                    98:0e:1f:2f:28:b7:a7:75:60:56:8e:74:a0:86:9a:
-                    06:d5:23:0f:11:83:02:95:73
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a0:b5:e8:50:6e:0b:2e:be:8a:39:95:a1:f3:8f:
+                    03:1c:da:d3:74:5c:9d:ed:34:54:5e:3f:ac:e2:91:
+                    40:50:5e:d7:e3:bc:b1:8e:a6:62:d1:0b:33:e2:59:
+                    d7:67:f1:b7:af:f9:61:37:b1:24:aa:6f:67:e0:4f:
+                    ef:5d:a2:72:42:70:41:1e:32:e5:1a:94:4f:de:60:
+                    6c:e7:e1:96:99:82:d0:35:f2:40:03:de:92:10:f3:
+                    4f:91:e8:78:24:a1:ef:92:da:7b:49:4b:57:03:80:
+                    57:d8:fc:41:60:8a:f0:e6:55:fe:67:55:5e:68:bf:
+                    fe:fd:23:2b:ab:94:cb:12:c3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                89:81:B5:75:FE:47:C0:C6:F5:28:97:38:D7:FC:58:E9:62:8D:31:C0
+                A4:07:01:64:2E:FC:65:F5:BC:44:82:AB:87:E5:17:5F:91:F5:8A:DD
             X509v3 Authority Key Identifier: 
-                keyid:B2:A1:C2:1D:B7:20:56:20:8C:64:DA:BA:06:C6:5A:E4:0A:23:6E:01
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+                keyid:54:8A:14:10:0B:AF:89:DC:1E:65:8A:17:37:6A:AC:D2:2B:6C:27:5C
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
                 serial:04
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        63:3d:1b:46:ff:99:65:19:01:e8:fc:b1:a4:22:30:8c:da:43:
-        c5:79:05:0c:60:3a:0f:4b:3f:53:63:f0:12:63:a9:ee:63:10:
-        15:aa:f4:ae:13:10:4f:43:b4:31:8c:84:f5:c1:0b:86:ab:7b:
-        78:7e:7c:9b:3c:26:56:8e:aa:54:3b:ad:7e:be:23:3e:8f:8c:
-        cf:47:22:7d:f6:83:53:ca:72:f1:02:9a:07:4a:f7:94:00:1b:
-        d2:57:80:6d:c9:37:ab:58:d6:54:71:90:de:c9:3f:ee:c3:b5:
-        5c:0e:46:09:30:cf:95:58:2f:07:64:fe:27:70:9e:d0:29:dd:
-        f5:25
+         04:21:55:e4:d4:f9:07:b1:55:dd:d3:6c:5e:17:f5:84:36:49:
+         08:3f:96:1b:79:f6:1f:c8:aa:0a:e2:64:bd:90:e1:00:89:23:
+         94:1c:d9:c8:7d:a6:5e:48:4f:e4:6a:9d:c1:2a:b9:6c:6b:ed:
+         24:14:54:9f:87:bf:a1:d3:fd:73:39:eb:c4:88:85:7e:f5:35:
+         91:3d:85:ad:9e:c5:1f:fc:f6:06:71:ce:3f:dc:12:e8:6c:a6:
+         61:07:b8:d0:78:03:de:e6:be:e9:67:59:2f:70:24:c3:54:4e:
+         b3:5c:6e:54:8e:04:c3:b6:f1:83:1b:8d:7f:e8:b7:5b:3d:b2:
+         26:fe
 -----BEGIN CERTIFICATE-----
-MIIDPjCCAqegAwIBAgIBCjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g0X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g0X3Rh
-MTAeFw0xMTA0MTEyMjM3NDFaFw0xNDAxMDUyMjM3NDFaMHQxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRIwEAYDVQQDFAljaDUuMl90YTExGDAWBgkqhkiG9w0BCQEWCWNo
-NS4yX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxSebTcNBz5bU8CFZ
-G3fOVIHcBVcfVmmMX1g/iErGc72pStD4ozMbT9iUtdOVvQAG0Rjo6p5BrQbqxsyf
-k6fEoD4FYkw/HIh5oKHr85TQG4yon0w7N4AGawDnMGzUwlEnfxrllaccFdaYDh8v
-KLendWBWjnSghpoG1SMPEYMClXMCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUiYG1df5H
-wMb1KJc41/xY6WKNMcAwgZoGA1UdIwSBkjCBj4AUsqHCHbcgViCMZNq6BsZa5Aoj
-bgGhdKRyMHAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYD
-VQQHEwpNZW5sbyBQYXJrMQ0wCwYDVQQKEwRwa2c1MRAwDgYDVQQDFAdjaDNfdGEx
-MRYwFAYJKoZIhvcNAQkBFgdjaDNfdGExggEEMBIGA1UdEwEB/wQIMAYBAf8CAQEw
-DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAGM9G0b/mWUZAej8saQi
-MIzaQ8V5BQxgOg9LP1Nj8BJjqe5jEBWq9K4TEE9DtDGMhPXBC4are3h+fJs8JlaO
-qlQ7rX6+Iz6PjM9HIn32g1PKcvECmgdK95QAG9JXgG3JN6tY1lRxkN7JP+7DtVwO
-Rgkwz5VYLwdk/idwntAp3fUl
+MIIDQTCCAqqgAwIBAgIBCjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2NoNF90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB1MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4yX3RhMTEYMBYGCSqGSIb3DQEJARYJ
+Y2g1LjJfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgtehQbgsuvoo5
+laHzjwMc2tN0XJ3tNFReP6zikUBQXtfjvLGOpmLRCzPiWddn8bev+WE3sSSqb2fg
+T+9donJCcEEeMuUalE/eYGzn4ZaZgtA18kAD3pIQ80+R6Hgkoe+S2ntJS1cDgFfY
+/EFgivDmVf5nVV5ov/79IyurlMsSwwIDAQABo4HkMIHhMB0GA1UdDgQWBBSkBwFk
+Lvxl9bxEgquH5RdfkfWK3TCBmwYDVR0jBIGTMIGQgBRUihQQC6+J3B5lihc3aqzS
+K2wnXKF1pHMwcTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQDDAdjaDNf
+dGExMRYwFAYJKoZIhvcNAQkBFgdjaDNfdGExggEEMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAAQhVeTU+QexVd3T
+bF4X9YQ2SQg/lht59h/IqgriZL2Q4QCJI5Qc2ch9pl5IT+RqncEquWxr7SQUVJ+H
+v6HT/XM568SIhX71NZE9ha2exR/89gZxzj/cEuhspmEHuNB4A97mvulnWS9wJMNU
+TrNcblSOBMO28YMbjX/ot1s9sib+
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/0C.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/0C.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 12 (0xc)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e2:d0:ba:91:89:c2:26:21:4c:9d:68:63:7e:87:
-                    9b:9e:31:52:4d:30:b3:2b:9c:26:85:40:63:69:66:
-                    7c:5d:52:73:d3:61:01:78:18:0e:46:21:6d:34:1f:
-                    84:e2:42:72:9c:ef:68:7e:49:a6:3d:62:82:f3:0f:
-                    95:74:13:88:a1:d1:bf:00:93:10:24:d2:fc:bd:1a:
-                    a7:4f:f2:24:b2:60:d5:57:96:62:09:c8:94:5f:b6:
-                    57:38:f1:00:62:97:d9:a2:35:d6:95:47:97:78:48:
-                    17:77:2b:c4:62:fa:00:0c:f1:d4:6e:e1:74:25:38:
-                    0f:5c:57:af:92:37:e7:18:21
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:dd:ec:30:ee:2a:39:ec:cf:6d:c0:b9:04:f2:e0:
+                    0f:04:7a:e9:ab:f0:27:28:d9:6b:70:e5:c4:9b:c6:
+                    1b:bb:71:16:42:d5:47:80:60:2c:f6:26:90:9d:0b:
+                    cc:1b:18:bf:54:98:c7:e8:ba:bf:a2:5d:60:c9:b3:
+                    09:79:de:ee:02:d9:b9:70:22:c3:cd:60:04:5f:1e:
+                    df:a3:8f:43:73:ea:68:5e:df:70:86:aa:67:75:5a:
+                    59:ef:cd:0d:e4:f1:6d:ee:d3:bb:04:c7:52:e5:72:
+                    53:2a:e2:f3:02:65:7f:53:46:c3:15:e4:cb:8d:1b:
+                    cf:8f:1e:8d:6d:04:07:09:77
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9E:F5:29:85:12:A6:F3:26:1C:25:81:F4:75:82:9E:80:B1:33:8D:BE
+                16:06:DB:79:36:82:5D:96:BA:FD:0F:C3:3D:E2:64:BA:E6:03:E6:3A
             X509v3 Authority Key Identifier: 
-                keyid:D0:F9:37:92:54:28:C0:40:AE:62:94:51:42:6A:7C:8E:37:5F:AC:A8
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
+                keyid:8F:2A:82:4C:1E:39:97:C3:4A:6A:52:FC:D4:CB:E6:37:CE:12:91:59
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
                 serial:03
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        87:45:e7:89:11:9c:2a:47:8e:63:84:93:80:3f:03:27:65:dd:
-        19:50:aa:1f:e5:50:67:c9:d8:3f:1e:74:85:fb:46:b2:c8:1c:
-        22:cb:a9:d0:d4:26:60:06:6e:9e:15:7e:d3:5a:06:8d:95:26:
-        36:10:16:e9:08:92:fb:9a:45:14:99:b5:ac:ee:06:d2:6b:c4:
-        21:63:13:b4:55:1f:c3:35:02:56:9e:7d:d1:4a:1f:45:91:f6:
-        c1:28:c3:f9:aa:e0:31:63:cc:c0:5d:77:7f:54:65:98:a3:39:
-        eb:73:83:ab:74:f3:c2:3e:be:9b:fe:18:75:3c:44:ad:a2:fc:
-        c2:42
+         26:70:cc:69:5b:26:cf:cc:1d:19:b6:61:20:59:22:d7:fa:a3:
+         d9:fa:e2:e3:87:07:24:5a:41:5b:7e:21:4c:f5:32:d2:d8:fd:
+         a5:17:b5:c4:0f:9a:d2:a6:dd:45:9f:13:2a:30:8a:75:5b:69:
+         9b:dd:06:85:3e:19:06:7d:5d:0f:3f:15:64:76:41:e9:a8:30:
+         bd:d7:26:66:07:60:da:e2:ec:80:44:6d:a5:8b:fd:9a:3a:0b:
+         92:b9:6c:f8:72:cc:7e:24:78:a2:a3:f7:ef:47:7a:aa:8b:89:
+         45:33:ff:01:bd:a0:d0:18:ea:a1:46:98:b5:7f:00:e1:00:8e:
+         7e:68
 -----BEGIN CERTIFICATE-----
-MIIDPjCCAqegAwIBAgIBDDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gzX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3Rh
-MTAeFw0xMTA0MTEyMjM3NDJaFw0xNDAxMDUyMjM3NDJaMHQxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRIwEAYDVQQDFAljaDQuM190YTExGDAWBgkqhkiG9w0BCQEWCWNo
-NC4zX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4tC6kYnCJiFMnWhj
-foebnjFSTTCzK5wmhUBjaWZ8XVJz02EBeBgORiFtNB+E4kJynO9ofkmmPWKC8w+V
-dBOIodG/AJMQJNL8vRqnT/IksmDVV5ZiCciUX7ZXOPEAYpfZojXWlUeXeEgXdyvE
-YvoADPHUbuF0JTgPXFevkjfnGCECAwEAAaOB4zCB4DAdBgNVHQ4EFgQUnvUphRKm
-8yYcJYH0dYKegLEzjb4wgZoGA1UdIwSBkjCBj4AU0Pk3klQowECuYpRRQmp8jjdf
-rKihdKRyMHAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYD
-VQQHEwpNZW5sbyBQYXJrMQ0wCwYDVQQKEwRwa2c1MRAwDgYDVQQDFAdjaDJfdGEx
-MRYwFAYJKoZIhvcNAQkBFgdjaDJfdGExggEDMBIGA1UdEwEB/wQIMAYBAf8CAQAw
-DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAIdF54kRnCpHjmOEk4A/
-Aydl3RlQqh/lUGfJ2D8edIX7RrLIHCLLqdDUJmAGbp4VftNaBo2VJjYQFukIkvua
-RRSZtazuBtJrxCFjE7RVH8M1AlaefdFKH0WR9sEow/mq4DFjzMBdd39UZZijOetz
-g6t088I+vpv+GHU8RK2i/MJC
+MIIDQTCCAqqgAwIBAgIBDDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTExFjAUBgkqhkiG9w0BCQEWB2NoM190
+YTEwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjB1MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEjAQBgNVBAMMCWNoNC4zX3RhMTEYMBYGCSqGSIb3DQEJARYJ
+Y2g0LjNfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDd7DDuKjnsz23A
+uQTy4A8Eeumr8Cco2Wtw5cSbxhu7cRZC1UeAYCz2JpCdC8wbGL9UmMfour+iXWDJ
+swl53u4C2blwIsPNYARfHt+jj0Nz6mhe33CGqmd1WlnvzQ3k8W3u07sEx1LlclMq
+4vMCZX9TRsMV5MuNG8+PHo1tBAcJdwIDAQABo4HkMIHhMB0GA1UdDgQWBBQWBtt5
+NoJdlrr9D8M94mS65gPmOjCBmwYDVR0jBIGTMIGQgBSPKoJMHjmXw0pqUvzUy+Y3
+zhKRWaF1pHMwcTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQDDAdjaDJf
+dGExMRYwFAYJKoZIhvcNAQkBFgdjaDJfdGExggEDMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBACZwzGlbJs/MHRm2
+YSBZItf6o9n64uOHByRaQVt+IUz1MtLY/aUXtcQPmtKm3UWfEyowinVbaZvdBoU+
+GQZ9XQ8/FWR2QemoML3XJmYHYNri7IBEbaWL/Zo6C5K5bPhyzH4keKKj9+9HeqqL
+iUUz/wG9oNAY6qFGmLV/AOEAjn5o
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/0D.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/0D.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 13 (0xd)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:be:99:38:81:c2:5f:37:c3:d2:cc:7f:01:19:61:
-                    8d:8b:57:70:3a:2c:36:c1:c8:e4:a6:33:2a:bc:27:
-                    e9:cf:d7:ca:49:90:d2:e0:f1:82:0e:7d:50:aa:e3:
-                    8c:ca:07:61:bf:d3:fd:1e:f3:af:ec:00:dd:d2:ab:
-                    70:6a:1a:5a:00:32:ec:04:a3:a4:25:b1:82:1d:90:
-                    3c:f9:ae:91:90:d7:d6:c2:0e:8d:31:55:62:e2:6b:
-                    10:e0:10:6f:33:93:78:2f:58:b7:46:f4:b9:1a:4c:
-                    fd:81:b2:66:42:95:4b:a1:ff:46:9e:9d:f6:32:56:
-                    63:88:bc:83:43:54:bb:ce:a1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:9a:0b:35:00:7e:06:fd:e2:50:97:7e:d2:c2:b8:
+                    20:2a:d9:bb:b8:3f:14:f9:aa:e3:98:dc:b9:49:62:
+                    32:9e:e7:51:16:ef:6b:69:59:7e:0f:c3:50:08:3d:
+                    dc:23:18:37:fa:70:cc:45:b8:47:1e:49:ef:18:15:
+                    47:8e:e6:c9:65:64:02:a8:f5:2a:d1:ef:3a:91:8f:
+                    5a:52:21:46:8f:61:87:55:c9:61:ea:e8:98:18:c5:
+                    99:1f:bd:43:02:13:a6:bf:c0:cd:d9:a5:ee:40:a3:
+                    05:bf:18:28:57:f6:4e:21:d0:89:a1:21:1c:39:ed:
+                    2d:ed:45:f0:da:75:37:da:7b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9F:45:5B:75:2A:5E:64:78:D2:D9:6F:34:3C:19:AE:27:DE:D7:6C:98
+                A5:4B:BC:BC:6C:A7:1D:7E:CB:31:E5:DF:BE:24:BE:B9:86:28:DE:68
             X509v3 Authority Key Identifier: 
-                keyid:9E:F5:29:85:12:A6:F3:26:1C:25:81:F4:75:82:9E:80:B1:33:8D:BE
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+                keyid:16:06:DB:79:36:82:5D:96:BA:FD:0F:C3:3D:E2:64:BA:E6:03:E6:3A
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
                 serial:0C
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        62:7d:64:11:6a:5f:cd:6d:09:ae:5c:5f:d7:ef:5e:08:1f:c0:
-        6d:b0:b5:a1:28:74:88:95:10:93:2b:50:a4:7f:f3:92:3c:75:
-        23:ad:4b:e6:bd:ae:62:35:74:1c:0f:fd:00:e4:e7:e2:53:80:
-        b9:c5:30:1e:47:83:39:a5:88:3d:9b:a2:ee:86:27:94:cb:f5:
-        57:ba:91:ce:70:d7:12:a0:61:39:64:af:70:91:12:41:5e:4c:
-        7e:5d:5e:b0:42:05:31:e5:13:fd:bc:86:cc:b6:bc:4e:4c:69:
-        b6:2f:0e:63:80:16:c2:6d:7c:68:07:b6:a7:b4:04:ff:0b:97:
-        51:ee
+         4b:1b:27:81:60:e8:9c:ca:e9:2b:c6:94:9e:64:d5:1a:44:18:
+         e7:fb:98:cf:a0:10:e3:ae:ad:b3:fa:a6:21:9d:be:35:46:17:
+         e6:42:3f:8c:79:81:c5:46:f4:f8:04:72:02:a5:5c:6a:1f:cf:
+         62:e1:f9:6f:3a:26:5c:7b:13:27:bd:27:e7:8d:e4:75:b0:04:
+         05:84:44:8b:cf:2c:8b:8b:44:35:c7:60:79:91:04:69:cc:35:
+         90:5b:e5:9a:71:cb:6d:65:dd:a1:09:2c:d0:35:69:cc:cf:0a:
+         62:41:8f:18:ac:9e:8f:52:4c:fa:77:14:98:45:ce:06:c5:f9:
+         5d:6a
 -----BEGIN CERTIFICATE-----
-MIIDQjCCAqugAwIBAgIBDTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g0LjNfdGExMRgwFgYJKoZIhvcNAQkBFgljaDQu
-M190YTEwHhcNMTEwNDExMjIzNzQyWhcNMTQwMTA1MjIzNzQyWjB0MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTESMBAGA1UEAxQJY2g1LjNfdGExMRgwFgYJKoZIhvcNAQkB
-FgljaDUuM190YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL6ZOIHCXzfD
-0sx/ARlhjYtXcDosNsHI5KYzKrwn6c/XykmQ0uDxgg59UKrjjMoHYb/T/R7zr+wA
-3dKrcGoaWgAy7ASjpCWxgh2QPPmukZDX1sIOjTFVYuJrEOAQbzOTeC9Yt0b0uRpM
-/YGyZkKVS6H/Rp6d9jJWY4i8g0NUu86hAgMBAAGjgeMwgeAwHQYDVR0OBBYEFJ9F
-W3UqXmR40tlvNDwZrife12yYMIGaBgNVHSMEgZIwgY+AFJ71KYUSpvMmHCWB9HWC
-noCxM42+oXSkcjBwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTET
-MBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UEAxQHY2gz
-X3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3RhMYIBDDASBgNVHRMBAf8ECDAGAQH/
-AgEAMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQBifWQRal/NbQmu
-XF/X714IH8BtsLWhKHSIlRCTK1Ckf/OSPHUjrUvmva5iNXQcD/0A5OfiU4C5xTAe
-R4M5pYg9m6LuhieUy/VXupHOcNcSoGE5ZK9wkRJBXkx+XV6wQgUx5RP9vIbMtrxO
-TGm2Lw5jgBbCbXxoB7antAT/C5dR7g==
+MIIDRTCCAq6gAwIBAgIBDTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNC4zX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g0
+LjNfdGExMB4XDTEzMTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowdTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRIwEAYDVQQDDAljaDUuM190YTExGDAWBgkqhkiG9w0B
+CQEWCWNoNS4zX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmgs1AH4G
+/eJQl37SwrggKtm7uD8U+arjmNy5SWIynudRFu9raVl+D8NQCD3cIxg3+nDMRbhH
+HknvGBVHjubJZWQCqPUq0e86kY9aUiFGj2GHVclh6uiYGMWZH71DAhOmv8DN2aXu
+QKMFvxgoV/ZOIdCJoSEcOe0t7UXw2nU32nsCAwEAAaOB5DCB4TAdBgNVHQ4EFgQU
+pUu8vGynHX7LMeXfviS+uYYo3mgwgZsGA1UdIwSBkzCBkIAUFgbbeTaCXZa6/Q/D
+PeJkuuYD5jqhdaRzMHExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
+MRQwEgYDVQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEQMA4GA1UEAwwH
+Y2gzX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3RhMYIBDDASBgNVHRMBAf8ECDAG
+AQH/AgEAMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQBLGyeBYOic
+yukrxpSeZNUaRBjn+5jPoBDjrq2z+qYhnb41RhfmQj+MeYHFRvT4BHICpVxqH89i
+4flvOiZcexMnvSfnjeR1sAQFhESLzyyLi0Q1x2B5kQRpzDWQW+WaccttZd2hCSzQ
+NWnMzwpiQY8YrJ6PUkz6dxSYRc4Gxfldag==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/10.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/10.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 16 (0x10)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
-            Not Before: Apr 11 22:37:44 2011 GMT
-            Not After : Jan  5 22:37:44 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e1:a3:d0:51:dc:0b:73:6f:44:f2:c7:6b:f2:9d:
-                    da:56:de:d4:41:61:75:48:78:10:2c:53:f1:c1:28:
-                    01:4a:10:53:7d:32:bc:e2:01:a2:75:59:0b:cf:3a:
-                    fc:41:b8:2c:36:fb:fe:3d:d9:a2:41:7b:6e:3c:0a:
-                    a9:7e:74:5a:86:ea:06:6a:2b:ad:3c:7e:32:8b:97:
-                    a4:ba:53:c1:b8:bc:f0:8f:80:22:53:97:66:bb:80:
-                    15:05:96:dc:df:62:29:4d:15:df:85:e6:90:30:4d:
-                    29:d3:04:b7:4f:22:40:b8:a1:22:ed:0e:4b:e6:00:
-                    82:df:89:48:63:87:b5:80:55
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ba:0e:36:90:a0:6b:75:19:6b:30:76:54:9e:20:
+                    b0:81:70:21:47:97:9c:c1:15:7c:9e:2d:50:3c:db:
+                    dc:8c:d0:31:9c:b9:78:c6:2a:5c:53:ca:ed:d3:44:
+                    e2:f9:93:d8:b5:b6:a6:8a:c2:bd:be:4f:8b:f5:a0:
+                    28:68:cf:ec:f9:e3:e9:57:a8:ab:cd:a5:45:0d:82:
+                    eb:f0:5b:aa:2d:1b:88:65:30:9f:a1:74:59:1f:e5:
+                    d2:25:f9:d6:31:3f:0a:a2:4a:92:5d:2a:30:2e:3f:
+                    2f:72:48:93:f8:8d:7c:bf:79:21:e3:e1:91:9a:a7:
+                    03:01:ba:20:95:a6:da:56:35
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D9:77:48:13:09:B0:17:15:2A:95:47:CA:4C:13:2E:A9:AC:18:5D:AD
+                A7:11:90:E6:5F:5F:79:74:A3:1D:B5:9E:0C:15:F1:16:C5:D4:FB:6B
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        a5:b4:3f:fe:d9:aa:36:19:da:97:ab:60:50:43:50:e0:26:2e:
-        23:af:39:d9:d6:60:0a:41:5d:6a:2f:6f:f2:4c:4f:a8:22:40:
-        04:40:84:4e:0a:34:10:21:a5:9a:36:f6:7c:aa:e3:29:88:ce:
-        8c:1f:4a:cd:db:19:db:25:0c:04:46:28:67:ba:74:ff:74:78:
-        4e:20:9b:ef:31:95:c9:ab:46:53:f3:02:bb:25:78:3e:43:6a:
-        87:d6:86:61:a6:3e:8a:91:91:a6:88:f2:32:2d:b2:51:22:46:
-        9a:b3:b6:c9:45:90:83:c2:0f:d7:a2:4a:1b:61:30:3f:55:3d:
-        47:1f
+         5f:db:a1:d4:03:bc:a0:f9:d7:80:88:ac:94:2b:22:cc:1c:88:
+         56:65:bd:0d:57:d6:d4:ae:5c:a2:27:44:7c:5e:4d:23:8c:ba:
+         fe:1c:a6:49:96:20:c2:f5:45:cf:52:0e:0a:80:40:5b:1c:e7:
+         83:2b:d4:72:6c:95:10:c6:a7:44:27:85:6b:e5:37:f5:a4:25:
+         70:e4:e0:0e:de:1d:c1:72:1f:05:be:0f:4b:23:61:38:e3:52:
+         cb:05:c3:f4:41:26:80:58:ea:02:c6:6b:7d:f8:9f:41:40:76:
+         94:44:59:2e:da:bc:a8:54:11:22:bc:58:ff:61:85:3c:60:e7:
+         67:e6
 -----BEGIN CERTIFICATE-----
-MIIDLzCCApigAwIBAgIBEDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMTEw
-NDExMjIzNzQ0WhcNMTQwMTA1MjIzNzQ0WjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3RhMzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4aPQUdwLc29E8sdr8p3aVt7UQWF1SHgQ
-LFPxwSgBShBTfTK84gGidVkLzzr8QbgsNvv+PdmiQXtuPAqpfnRahuoGaiutPH4y
-i5ekulPBuLzwj4AiU5dmu4AVBZbc32IpTRXfheaQME0p0wS3TyJAuKEi7Q5L5gCC
-34lIY4e1gFUCAwEAAaOB4DCB3TAdBgNVHQ4EFgQU2XdIEwmwFxUqlUfKTBMuqawY
-Xa0wgZoGA1UdIwSBkjCBj4AUevZRen+bqzc9TpMDkG1qhAl8Ot2hbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEW
-A3RhM4IJAPRYVGqDImbpMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4GBAKW0P/7ZqjYZ2perYFBDUOAmLiOvOdnWYApBXWov
-b/JMT6giQARAhE4KNBAhpZo29nyq4ymIzowfSs3bGdslDARGKGe6dP90eE4gm+8x
-lcmrRlPzArsleD5DaofWhmGmPoqRkaaI8jItslEiRpqztslFkIPCD9eiShthMD9V
-PUcf
+MIIDMjCCApugAwIBAgIBEDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTEz
+MTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGEzMRYwFAYJKoZIhvcNAQkBFgdjaDFfdGEzMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6DjaQoGt1GWswdlSeILCBcCFHl5zB
+FXyeLVA829yM0DGcuXjGKlxTyu3TROL5k9i1tqaKwr2+T4v1oChoz+z54+lXqKvN
+pUUNguvwW6otG4hlMJ+hdFkf5dIl+dYxPwqiSpJdKjAuPy9ySJP4jXy/eSHj4ZGa
+pwMBuiCVptpWNQIDAQABo4HhMIHeMB0GA1UdDgQWBBSnEZDmX195dKMdtZ4MFfEW
+xdT7azCBmwYDVR0jBIGTMIGQgBS01Daf+MuiX1CJ2iHjJ8SR94SIRaFtpGswaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRh
+IENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQDDAN0YTMxEjAQBgkqhkiG9w0B
+CQEWA3RhM4IJAMDEtH2I1uM+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBCwUAA4GBAF/bodQDvKD514CIrJQrIswciFZlvQ1X1tSu
+XKInRHxeTSOMuv4cpkmWIML1Rc9SDgqAQFsc54Mr1HJslRDGp0QnhWvlN/WkJXDk
+4A7eHcFyHwW+D0sjYTjjUssFw/RBJoBY6gLGa334n0FAdpREWS7avKhUESK8WP9h
+hTxg52fm
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/1A.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/1A.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 26 (0x1a)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
-            Not Before: Apr 11 22:37:47 2011 GMT
-            Not After : Jan  5 22:37:47 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a1:1f:54:43:20:65:63:b2:fc:8b:d7:f6:a8:90:
-                    f0:1e:b8:e9:06:37:cb:1b:c9:47:56:3a:3f:ec:7e:
-                    e6:ee:c6:9a:d4:15:0d:64:f7:d5:77:2f:52:31:6c:
-                    36:8d:2f:07:7f:0d:a7:cf:79:af:68:70:2b:74:a7:
-                    30:92:1e:55:fc:2a:f4:b7:c3:47:01:57:4f:65:ba:
-                    58:bf:75:73:02:4c:4c:a8:51:3d:82:ee:57:fa:93:
-                    64:d6:53:05:12:10:36:c9:9c:c3:af:6c:56:9d:20:
-                    44:4b:b4:bc:67:d8:06:99:8e:fa:32:4c:c1:4f:09:
-                    5a:46:ec:06:cf:ac:e1:fa:21
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:df:da:60:8b:c6:d6:55:f7:d0:5b:a7:5a:87:d2:
+                    90:7b:9c:46:31:96:5e:15:a0:c7:44:b3:79:ce:ae:
+                    d7:af:99:a9:fe:6d:c6:69:23:09:45:68:64:01:dc:
+                    a0:7e:8c:ed:c9:bc:14:d3:84:62:2a:8a:21:30:48:
+                    30:97:94:99:84:69:f0:c0:46:a4:72:82:51:30:fe:
+                    f0:fc:60:6c:ea:b8:7d:52:ce:fd:e5:20:b7:9f:4b:
+                    03:21:74:f3:58:35:3a:ef:f7:e0:84:64:06:84:36:
+                    62:e8:82:65:82:1e:56:c7:ea:1e:eb:65:7d:b3:83:
+                    9c:fc:e6:ba:65:c4:82:e3:5f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -29,27 +29,27 @@
                 <EMPTY>
 
     Signature Algorithm: sha256WithRSAEncryption
-        34:ad:5e:5d:7a:64:12:a2:c0:f9:85:cb:e4:5c:43:0a:e9:f7:
-        68:be:c5:96:93:83:04:ca:dc:2c:93:f6:a6:ec:fb:26:a7:9d:
-        dc:d3:e7:ee:f2:d2:93:90:10:3c:4f:8f:ce:0e:63:60:d7:5d:
-        6a:af:97:4d:3d:1b:4b:5c:e6:ed:24:19:c7:d9:20:27:0d:8e:
-        d2:e2:85:68:c2:45:ba:2e:70:9b:78:bd:91:b6:29:0e:75:93:
-        f3:c2:38:14:ee:37:c2:66:1b:cf:de:81:b1:64:eb:8d:19:c4:
-        b2:1d:33:66:47:83:dc:e3:5b:14:d9:69:30:d8:5c:90:5f:34:
-        48:d5
+         ae:2b:af:4b:e6:7b:a1:28:27:46:1e:10:55:c2:2c:e4:6b:e9:
+         f2:6c:38:87:ed:f1:da:d5:92:39:89:22:53:3e:b4:da:3d:ae:
+         8d:ea:42:15:bb:4d:c6:ef:50:9c:1d:8b:93:92:7d:33:31:bd:
+         48:79:76:15:d4:8a:fd:bd:ae:1d:61:43:8d:88:ec:83:8d:15:
+         c9:50:73:e0:07:1a:41:e7:b2:a0:ac:9b:33:ed:bd:73:c5:32:
+         25:dd:ad:01:4b:90:62:25:e8:75:8e:19:e8:f5:4b:b8:89:2a:
+         c6:eb:d6:9c:31:f5:83:dd:1d:f9:71:11:ce:3b:0c:f5:e3:e4:
+         89:0a
 -----BEGIN CERTIFICATE-----
-MIICczCCAdygAwIBAgIBGjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMTEw
-NDExMjIzNzQ3WhcNMTQwMTA1MjIzNzQ3WjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjFfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuMV90YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKEfVEMgZWOy/IvX9qiQ8B646QY3
-yxvJR1Y6P+x+5u7GmtQVDWT31XcvUjFsNo0vB38Np895r2hwK3SnMJIeVfwq9LfD
-RwFXT2W6WL91cwJMTKhRPYLuV/qTZNZTBRIQNsmcw69sVp0gREu0vGfYBpmO+jJM
-wU8JWkbsBs+s4fohAgMBAAGjITAfMA8GA1UdEwEB/wQFMAMBAf8wDAYDVR0SAQH/
-BAIwADANBgkqhkiG9w0BAQsFAAOBgQA0rV5demQSosD5hcvkXEMK6fdovsWWk4ME
-ytwsk/am7Psmp53c0+fu8tKTkBA8T4/ODmNg111qr5dNPRtLXObtJBnH2SAnDY7S
-4oVowkW6LnCbeL2RtikOdZPzwjgU7jfCZhvP3oGxZOuNGcSyHTNmR4Pc41sU2Wkw
-2FyQXzRI1Q==
+MIICdTCCAd6gAwIBAgIBGjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTEz
+MTIxMzAwMTMzNloXDTE2MDkwODAwMTMzNlowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuMV90YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS4xX3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA39pgi8bWVffQW6dah9KQe5xG
+MZZeFaDHRLN5zq7Xr5mp/m3GaSMJRWhkAdygfoztybwU04RiKoohMEgwl5SZhGnw
+wEakcoJRMP7w/GBs6rh9Us795SC3n0sDIXTzWDU67/fghGQGhDZi6IJlgh5Wx+oe
+62V9s4Oc/Oa6ZcSC418CAwEAAaMhMB8wDwYDVR0TAQH/BAUwAwEB/zAMBgNVHRIB
+Af8EAjAAMA0GCSqGSIb3DQEBCwUAA4GBAK4rr0vme6EoJ0YeEFXCLORr6fJsOIft
+8drVkjmJIlM+tNo9ro3qQhW7TcbvUJwdi5OSfTMxvUh5dhXUiv29rh1hQ42I7ION
+FclQc+AHGkHnsqCsmzPtvXPFMiXdrQFLkGIl6HWOGej1S7iJKsbr1pwx9YPdHflx
+Ec47DPXj5IkK
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/1C.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/1C.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 28 (0x1c)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
             Not Before: Jan  1 01:01:01 2009 GMT
             Not After : Jan  2 01:01:01 2009 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c7:97:bd:7a:78:72:f6:bb:6f:5b:ca:07:34:d8:
-                    70:93:94:39:d6:9c:73:b2:58:c6:fa:10:eb:8e:c7:
-                    54:39:fd:9a:35:f5:2c:a4:ae:e6:ca:a2:9c:07:0c:
-                    57:05:78:cc:8b:98:2e:39:e8:74:73:28:bf:f7:bf:
-                    d1:fb:5d:10:9d:f0:19:75:9d:35:fe:50:97:76:70:
-                    6d:00:79:66:1a:2f:af:c6:12:45:16:45:ea:3e:f0:
-                    90:3b:56:9d:ed:f7:70:ba:de:f7:ec:55:2b:ee:b1:
-                    9b:fb:1d:55:46:65:86:c3:1b:9e:50:b9:8c:b9:d3:
-                    02:73:aa:e6:1e:4d:11:2b:bf
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:db:7e:41:d8:93:1f:35:e5:6b:38:25:93:e5:99:
+                    cf:fe:c7:b8:ab:0b:14:47:23:66:52:c7:d4:18:58:
+                    ff:39:a6:c4:a3:44:2e:46:be:24:7b:9d:71:26:12:
+                    6a:99:bd:92:01:5a:dc:a9:36:3c:2d:f8:42:b8:5f:
+                    db:87:8f:09:9a:83:32:5c:b6:1d:c5:e4:aa:47:6d:
+                    46:11:16:72:44:d7:49:ea:d3:4a:a4:52:9a:f4:8a:
+                    b5:e4:ef:32:7b:71:a0:d7:8e:71:86:22:34:44:4a:
+                    95:5a:37:ef:c4:7f:57:1f:99:32:39:ef:ab:94:05:
+                    1b:9a:88:de:39:85:56:4c:f7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5A:E6:5A:C4:85:7D:C2:25:75:F9:C2:6A:93:15:18:69:7F:57:47:7C
+                91:8B:82:B9:57:2C:1B:DB:4B:F6:16:04:D7:3F:04:10:DD:8B:3B:05
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        23:82:0a:78:02:e9:9f:de:a1:62:2d:47:42:8d:f8:88:26:cf:
-        3b:31:64:91:56:e1:50:eb:46:12:61:6b:e4:bd:97:43:f5:f7:
-        33:b4:92:34:62:31:8b:df:7c:13:44:ed:04:24:73:4a:35:17:
-        98:15:ad:75:3f:33:bf:86:84:e2:29:34:7e:de:90:a1:99:f5:
-        8a:37:85:98:7d:8e:71:64:6a:1d:aa:47:57:9d:ad:e3:07:90:
-        0a:06:7c:08:e2:97:25:20:38:c9:41:62:d5:96:fb:fe:0e:b4:
-        1c:e1:20:75:7d:6a:f3:62:1d:cc:72:90:a6:13:58:48:af:e4:
-        c9:b1
+         8a:bc:bf:7b:28:d4:bd:a2:a9:91:e8:24:cf:1e:1b:05:7c:32:
+         68:71:40:9a:ef:48:3c:58:43:6c:ae:90:7a:50:a3:49:86:12:
+         57:21:00:0c:49:28:ec:31:fb:04:58:a4:24:c6:7e:14:9d:5a:
+         96:bd:ba:cd:c1:31:cd:c8:f0:77:de:3f:81:0a:d0:31:65:f2:
+         d5:11:c9:6f:cc:5a:f8:f3:c1:8f:31:37:75:3a:c6:6d:6d:6e:
+         d7:16:0a:9b:b0:ce:07:d7:97:36:61:37:5e:4a:16:df:8d:97:
+         f4:71:fe:9b:32:4b:b6:d2:27:f4:9a:7c:b8:83:b3:92:48:2c:
+         ec:0c
 -----BEGIN CERTIFICATE-----
-MIIDMzCCApygAwIBAgIBHDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMDkw
-MTAxMDEwMTAxWhcNMDkwMTAyMDEwMTAxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjJfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuMl90YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMeXvXp4cva7b1vKBzTYcJOUOdac
-c7JYxvoQ647HVDn9mjX1LKSu5sqinAcMVwV4zIuYLjnodHMov/e/0ftdEJ3wGXWd
-Nf5Ql3ZwbQB5Zhovr8YSRRZF6j7wkDtWne33cLre9+xVK+6xm/sdVUZlhsMbnlC5
-jLnTAnOq5h5NESu/AgMBAAGjgeAwgd0wHQYDVR0OBBYEFFrmWsSFfcIldfnCapMV
-GGl/V0d8MIGaBgNVHSMEgZIwgY+AFHr2UXp/m6s3PU6TA5BtaoQJfDrdoWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcN
-AQkBFgN0YTOCCQD0WFRqgyJm6TAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOBgQAjggp4Aumf3qFiLUdCjfiIJs87MWSRVuFQ
-60YSYWvkvZdD9fcztJI0YjGL33wTRO0EJHNKNReYFa11PzO/hoTiKTR+3pChmfWK
-N4WYfY5xZGodqkdXna3jB5AKBnwI4pclIDjJQWLVlvv+DrQc4SB1fWrzYh3McpCm
-E1hIr+TJsQ==
+MIIDNjCCAp+gAwIBAgIBHDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTA5
+MDEwMTAxMDEwMVoXDTA5MDEwMjAxMDEwMVowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuMl90YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS4yX3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA235B2JMfNeVrOCWT5ZnP/se4
+qwsURyNmUsfUGFj/OabEo0QuRr4ke51xJhJqmb2SAVrcqTY8LfhCuF/bh48JmoMy
+XLYdxeSqR21GERZyRNdJ6tNKpFKa9Iq15O8ye3Gg145xhiI0REqVWjfvxH9XH5ky
+Oe+rlAUbmojeOYVWTPcCAwEAAaOB4TCB3jAdBgNVHQ4EFgQUkYuCuVcsG9tL9hYE
+1z8EEN2LOwUwgZsGA1UdIwSBkzCBkIAUtNQ2n/jLol9Qidoh4yfEkfeEiEWhbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZI
+hvcNAQkBFgN0YTOCCQDAxLR9iNbjPjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQCKvL97KNS9oqmR6CTPHhsFfDJocUCa
+70g8WENsrpB6UKNJhhJXIQAMSSjsMfsEWKQkxn4UnVqWvbrNwTHNyPB33j+BCtAx
+ZfLVEclvzFr488GPMTd1OsZtbW7XFgqbsM4H15c2YTdeShbfjZf0cf6bMku20if0
+mny4g7OSSCzsDA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/1E.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/1E.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 30 (0x1e)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
             Not Before: Jan  1 01:01:01 2035 GMT
             Not After : Jan  2 01:01:01 2035 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d9:34:eb:28:22:6a:51:f8:11:2c:ee:1f:6d:c9:
-                    f1:12:5a:04:33:dd:d6:27:ca:9a:40:ae:df:5c:78:
-                    53:28:c8:37:d2:47:14:e1:fc:22:ea:90:d9:19:05:
-                    08:fd:b7:99:20:97:28:23:fd:3d:62:87:0d:29:a0:
-                    de:95:61:33:6c:d6:e0:65:db:c1:8b:8c:70:c3:ce:
-                    66:e9:93:ee:92:9f:87:2c:d4:6f:1d:e1:92:cb:8a:
-                    38:a4:95:0a:6a:a2:94:c6:41:25:17:ce:a6:01:fb:
-                    cf:03:52:40:93:34:37:b5:74:48:15:d4:e7:64:82:
-                    46:ee:b3:bd:b5:1f:3b:42:81
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ce:58:8a:05:67:47:a9:62:99:37:13:35:4c:74:
+                    75:9b:2f:d7:4c:23:7a:cd:60:35:0c:95:4b:58:b3:
+                    dd:c8:2d:69:ad:3c:8d:d3:27:0d:02:06:d0:4b:6c:
+                    6e:57:e9:1f:3c:dc:f3:88:22:25:86:35:13:91:3c:
+                    9f:76:67:a4:ae:98:63:d2:73:4d:2f:07:d5:7f:80:
+                    7e:27:92:25:16:aa:32:fe:7a:17:65:d5:9f:ee:39:
+                    9f:c8:a1:57:6a:9b:2d:e3:61:d9:35:d5:94:fb:fa:
+                    95:21:c3:31:33:50:d6:2f:e5:c0:7a:bb:a7:61:a4:
+                    e0:9b:5e:ca:99:2a:5d:6a:db
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E0:C8:F3:4A:A9:FE:FA:63:97:C7:CE:EE:A8:27:45:F4:C5:11:8F:A6
+                28:44:43:26:57:0F:45:87:1A:A5:36:FB:0F:49:91:4B:A1:38:F3:ED
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        8d:45:1b:e3:e0:58:10:d4:92:66:aa:50:1a:ee:7a:d9:99:82:
-        7b:6e:3b:9b:88:9e:7c:a2:35:34:bb:77:9d:1f:79:d2:5d:aa:
-        b6:91:f8:07:ff:dc:63:81:d5:f3:e2:47:27:cc:79:2a:33:c8:
-        77:d5:9b:9a:f0:2e:58:64:d3:cb:fb:e4:f9:55:bb:89:9c:36:
-        8f:dd:84:95:a9:8c:8c:d3:6b:81:f8:64:b1:8a:15:20:59:10:
-        e3:5c:b3:05:c6:cd:d1:cb:03:3c:39:84:1c:93:f3:67:5c:10:
-        09:e9:99:1a:a0:45:21:ea:16:31:a1:3d:74:4d:27:75:f9:3d:
-        aa:df
+         b8:a1:7b:ba:b7:10:91:c0:21:86:fe:4d:01:f7:14:34:d9:aa:
+         dc:f3:04:56:c2:08:e6:66:f5:77:55:7e:dd:ea:b5:49:ff:d9:
+         32:39:2c:c9:9f:2f:9c:b3:cc:68:25:3e:d4:92:ef:be:b7:a1:
+         a5:d6:8c:31:3d:3a:7f:f4:5d:e8:ca:a3:30:29:ff:89:82:63:
+         cb:46:47:34:e8:ce:25:dd:a4:09:61:0b:08:7b:fd:24:1b:2b:
+         2d:9b:b9:84:ba:9e:fe:c1:2a:bd:df:e5:86:08:9c:74:ca:51:
+         c8:2e:b8:24:13:49:8c:a4:3e:c1:48:44:bd:30:18:40:88:43:
+         c1:a6
 -----BEGIN CERTIFICATE-----
-MIIDMzCCApygAwIBAgIBHjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMzUw
-MTAxMDEwMTAxWhcNMzUwMTAyMDEwMTAxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjNfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuM190YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANk06ygialH4ESzuH23J8RJaBDPd
-1ifKmkCu31x4UyjIN9JHFOH8IuqQ2RkFCP23mSCXKCP9PWKHDSmg3pVhM2zW4GXb
-wYuMcMPOZumT7pKfhyzUbx3hksuKOKSVCmqilMZBJRfOpgH7zwNSQJM0N7V0SBXU
-52SCRu6zvbUfO0KBAgMBAAGjgeAwgd0wHQYDVR0OBBYEFODI80qp/vpjl8fO7qgn
-RfTFEY+mMIGaBgNVHSMEgZIwgY+AFHr2UXp/m6s3PU6TA5BtaoQJfDrdoWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcN
-AQkBFgN0YTOCCQD0WFRqgyJm6TAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOBgQCNRRvj4FgQ1JJmqlAa7nrZmYJ7bjubiJ58
-ojU0u3edH3nSXaq2kfgH/9xjgdXz4kcnzHkqM8h31Zua8C5YZNPL++T5VbuJnDaP
-3YSVqYyM02uB+GSxihUgWRDjXLMFxs3RywM8OYQck/NnXBAJ6ZkaoEUh6hYxoT10
-TSd1+T2q3w==
+MIIDNjCCAp+gAwIBAgIBHjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTM1
+MDEwMTAxMDEwMVoXDTM1MDEwMjAxMDEwMVowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuM190YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS4zX3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzliKBWdHqWKZNxM1THR1my/X
+TCN6zWA1DJVLWLPdyC1prTyN0ycNAgbQS2xuV+kfPNzziCIlhjUTkTyfdmekrphj
+0nNNLwfVf4B+J5IlFqoy/noXZdWf7jmfyKFXapst42HZNdWU+/qVIcMxM1DWL+XA
+erunYaTgm17KmSpdatsCAwEAAaOB4TCB3jAdBgNVHQ4EFgQUKERDJlcPRYcapTb7
+D0mRS6E48+0wgZsGA1UdIwSBkzCBkIAUtNQ2n/jLol9Qidoh4yfEkfeEiEWhbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZI
+hvcNAQkBFgN0YTOCCQDAxLR9iNbjPjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQC4oXu6txCRwCGG/k0B9xQ02arc8wRW
+wgjmZvV3VX7d6rVJ/9kyOSzJny+cs8xoJT7Uku++t6Gl1owxPTp/9F3oyqMwKf+J
+gmPLRkc06M4l3aQJYQsIe/0kGystm7mEup7+wSq93+WGCJx0ylHILrgkE0mMpD7B
+SES9MBhAiEPBpg==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/20.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/20.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,61 +2,61 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 32 (0x20)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
             Not Before: Jan  1 01:01:01 2035 GMT
             Not After : Jan  2 01:01:01 2035 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cc:54:a0:55:75:b1:69:33:96:b6:97:29:82:06:
-                    06:46:f2:43:2f:19:57:bf:92:f0:4e:b5:01:65:d3:
-                    dc:e3:cf:5e:a9:f5:99:8e:91:e9:ad:88:15:8b:25:
-                    5e:92:c6:fd:d6:9e:e5:27:56:59:4a:09:e0:84:b8:
-                    86:af:bb:9d:e9:d2:99:f9:84:48:d6:b6:35:e8:aa:
-                    e0:b3:ac:94:09:7f:b8:67:53:75:26:65:16:b7:cf:
-                    92:52:be:5f:07:da:dd:f8:b1:1c:7c:54:37:7f:66:
-                    f7:dc:97:cd:d2:0d:fa:58:a4:2e:96:b8:83:fe:e2:
-                    3d:b6:fb:c5:08:46:ba:1b:47
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:e9:3c:28:6e:b8:7a:e3:7a:f2:ee:5e:69:7a:71:
+                    b8:bb:97:d5:d3:c4:77:3e:90:f3:29:69:b8:51:ba:
+                    8b:27:4d:3f:b2:10:76:86:6e:38:4a:49:be:ce:01:
+                    c5:d2:0e:6e:0e:a9:51:e9:94:57:ce:67:4b:99:ca:
+                    84:93:a9:f9:e6:35:1c:0f:d6:3d:b1:c1:c7:00:d7:
+                    fa:2c:05:a0:20:0d:86:6d:32:c0:54:0f:e8:b9:6e:
+                    b5:dd:1a:00:4c:89:bf:d4:6d:79:0e:e7:4e:10:d2:
+                    fb:75:2c:03:da:75:c8:e1:b7:dc:2e:42:c5:9b:ec:
+                    b2:f1:15:6d:db:56:f9:20:a3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                F8:0C:60:C6:C6:4D:79:11:F2:CD:D2:91:28:DF:F6:26:6C:BB:B0:ED
+                33:65:69:5E:6D:D8:12:02:E9:68:A2:6C:7D:77:F1:38:D8:7B:97:E6
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        c8:ba:31:b9:ed:17:ae:ac:ca:cd:4d:48:f6:b6:66:1c:17:c5:
-        8a:18:96:e8:9b:47:de:b3:7e:23:21:78:cc:f9:63:09:4e:56:
-        64:a1:de:33:16:8b:6a:94:c1:68:0a:72:dd:8e:b6:8c:dd:61:
-        cf:05:07:12:e3:4f:41:52:bc:73:33:a5:3e:94:ca:40:53:74:
-        a7:9c:46:f2:73:5b:b7:7f:df:18:7f:60:2f:2d:4b:41:8c:78:
-        c4:5f:4c:a8:85:a4:2c:84:91:b3:ab:60:61:ca:93:67:1b:2a:
-        0e:9a:e1:e8:a5:dc:5e:78:18:a3:b3:4b:86:4d:03:08:78:9b:
-        70:bc
+         5c:06:87:8e:6c:26:b3:5d:7c:94:c0:e3:7d:9e:8c:7c:bf:86:
+         e0:07:8a:65:95:af:8f:93:0c:a6:72:e5:cb:36:a5:69:03:95:
+         03:7f:e0:18:c8:f2:da:ce:99:b8:54:7a:49:75:f2:61:00:d4:
+         f4:63:e1:5c:cc:f0:91:e7:85:92:0d:7e:91:4b:3a:8b:76:e6:
+         a0:c8:51:28:06:44:d2:c8:a8:4c:da:be:7e:78:88:45:d3:f7:
+         07:92:90:fc:96:4d:7d:ce:5a:c9:9a:21:d9:66:98:3e:9b:5d:
+         18:9a:0c:b8:c4:10:86:4d:06:15:d9:ea:19:9b:e7:f7:e2:74:
+         25:eb
 -----BEGIN CERTIFICATE-----
-MIIDIzCCAoygAwIBAgIBIDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMzUw
-MTAxMDEwMTAxWhcNMzUwMTAyMDEwMTAxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjRfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuNF90YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMxUoFV1sWkzlraXKYIGBkbyQy8Z
-V7+S8E61AWXT3OPPXqn1mY6R6a2IFYslXpLG/dae5SdWWUoJ4IS4hq+7nenSmfmE
-SNa2Neiq4LOslAl/uGdTdSZlFrfPklK+Xwfa3fixHHxUN39m99yXzdIN+likLpa4
-g/7iPbb7xQhGuhtHAgMBAAGjgdAwgc0wHQYDVR0OBBYEFPgMYMbGTXkR8s3SkSjf
-9iZsu7DtMIGaBgNVHSMEgZIwgY+AFHr2UXp/m6s3PU6TA5BtaoQJfDrdoWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcN
-AQkBFgN0YTOCCQD0WFRqgyJm6TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4GBAMi6MbntF66sys1NSPa2ZhwXxYoYluibR96zfiMheMz5YwlOVmSh3jMW
-i2qUwWgKct2OtozdYc8FBxLjT0FSvHMzpT6UykBTdKecRvJzW7d/3xh/YC8tS0GM
-eMRfTKiFpCyEkbOrYGHKk2cbKg6a4eil3F54GKOzS4ZNAwh4m3C8
+MIIDJjCCAo+gAwIBAgIBIDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTM1
+MDEwMTAxMDEwMVoXDTM1MDEwMjAxMDEwMVowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuNF90YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS40X3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6Twobrh643ry7l5penG4u5fV
+08R3PpDzKWm4UbqLJ00/shB2hm44Skm+zgHF0g5uDqlR6ZRXzmdLmcqEk6n55jUc
+D9Y9scHHANf6LAWgIA2GbTLAVA/ouW613RoATIm/1G15DudOENL7dSwD2nXI4bfc
+LkLFm+yy8RVt21b5IKMCAwEAAaOB0TCBzjAdBgNVHQ4EFgQUM2VpXm3YEgLpaKJs
+fXfxONh7l+YwgZsGA1UdIwSBkzCBkIAUtNQ2n/jLol9Qidoh4yfEkfeEiEWhbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZI
+hvcNAQkBFgN0YTOCCQDAxLR9iNbjPjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4GBAFwGh45sJrNdfJTA432ejHy/huAHimWVr4+TDKZy5cs2pWkDlQN/
+4BjI8trOmbhUekl18mEA1PRj4VzM8JHnhZINfpFLOot25qDIUSgGRNLIqEzavn54
+iEXT9weSkPyWTX3OWsmaIdlmmD6bXRiaDLjEEIZNBhXZ6hmb5/fidCXr
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/22.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/22.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 34 (0x22)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Validity
-            Not Before: Apr 11 22:37:49 2011 GMT
-            Not After : Jan  5 22:37:49 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b6:ab:16:bb:1d:ee:25:5a:2f:58:e7:db:d8:0a:
-                    e7:36:63:d5:ca:de:60:b5:90:c2:82:e3:ec:7d:49:
-                    0c:a9:b6:95:c8:a1:ab:04:0c:a9:09:e1:93:a6:be:
-                    43:36:7e:1b:61:28:1b:38:03:a2:06:19:88:72:a9:
-                    b9:a2:71:ff:db:e1:3c:85:98:01:b2:5f:93:a0:4a:
-                    b8:e7:36:ad:8f:50:8c:d6:a1:14:29:b0:ee:ec:e2:
-                    08:3f:7d:34:a1:c4:5f:3a:e9:4f:b0:c0:d6:5f:f2:
-                    10:78:2b:ae:f4:ee:28:c8:29:21:9f:ce:70:d5:fb:
-                    ea:33:fc:e2:5a:5c:e2:1b:d9
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b4:25:1c:3a:c2:26:af:8d:82:4d:29:e3:e0:78:
+                    6f:2b:7f:3c:b1:8c:c0:37:96:71:d2:42:21:df:2e:
+                    c4:c0:5a:60:e4:71:6f:05:df:88:a8:4b:ec:87:54:
+                    8d:08:c9:f7:19:84:a5:d0:cc:cb:43:c3:70:69:67:
+                    2e:4c:be:e6:2d:93:90:f9:02:30:a7:43:d2:1f:e5:
+                    d4:cf:5b:5c:74:88:06:0e:ee:cd:78:2c:2f:27:4c:
+                    99:2f:be:9a:73:5b:9b:1c:e3:67:54:b6:74:a7:c9:
+                    31:d3:63:6a:c5:4a:50:22:eb:af:e2:cd:7a:de:59:
+                    68:6a:a6:0e:26:d6:52:b6:a1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                2A:94:C1:FF:E0:11:A0:91:F1:71:46:35:9A:37:3C:BC:C4:21:4A:8F
+                29:7A:F9:B4:E3:1B:8F:19:63:52:FA:19:A0:AB:DA:37:E4:70:A9:71
             X509v3 Authority Key Identifier: 
-                keyid:3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
-                serial:BA:06:FD:EC:89:18:B5:7F
+                keyid:84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
+                serial:E8:F7:8D:38:FA:4B:55:DD
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        9d:2d:ff:a2:d2:42:31:72:9e:6f:8d:45:2c:21:9b:15:cf:89:
-        06:70:3b:5f:3e:2c:73:b9:08:d9:be:48:d8:6b:dc:23:86:3a:
-        ab:3c:16:80:13:62:a4:12:f8:ee:e7:6f:d6:e8:4f:ad:36:eb:
-        1e:81:c8:03:1c:65:ba:be:55:6d:07:8f:bc:fa:ba:d2:14:90:
-        1d:02:35:bd:5d:bd:0b:fb:48:57:94:6d:fe:71:85:ce:9f:65:
-        9c:31:80:13:56:b2:6f:2a:03:b6:1d:7f:5a:4a:dd:50:63:7a:
-        46:40:4b:1d:c3:71:5d:72:72:f0:50:f8:db:60:56:97:c8:cd:
-        73:83
+         91:d2:2e:6f:55:ce:c6:39:d8:b4:1f:7a:df:7f:bd:8f:4e:66:
+         ec:10:3d:35:f1:36:22:90:ae:b7:16:e4:48:f5:ec:63:27:e8:
+         88:32:78:ac:21:cc:71:f9:46:6a:73:b7:09:24:a7:44:68:41:
+         a5:07:f9:a3:ec:c7:53:ca:68:e4:09:68:b7:ee:11:f2:8c:08:
+         80:3c:a5:56:e2:f3:a8:aa:1e:34:99:49:26:8a:1f:50:36:d2:
+         0e:ee:b6:a0:a6:e6:b0:94:41:a6:bc:de:93:6f:af:b3:fa:f4:
+         a3:c3:46:83:f8:27:67:8e:9e:40:ec:79:08:0b:e2:46:73:61:
+         0d:c6
 -----BEGIN CERTIFICATE-----
-MIIDLzCCApigAwIBAgIBIjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGE0MRIwEAYJKoZIhvcNAQkBFgN0YTQwHhcNMTEw
-NDExMjIzNzQ5WhcNMTQwMTA1MjIzNzQ5WjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3RhNDCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtqsWux3uJVovWOfb2ArnNmPVyt5gtZDC
-guPsfUkMqbaVyKGrBAypCeGTpr5DNn4bYSgbOAOiBhmIcqm5onH/2+E8hZgBsl+T
-oEq45zatj1CM1qEUKbDu7OIIP300ocRfOulPsMDWX/IQeCuu9O4oyCkhn85w1fvq
-M/ziWlziG9kCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUKpTB/+ARoJHxcUY1mjc8vMQh
-So8wgZoGA1UdIwSBkjCBj4AUPl9k6WPLnBDQkfRFYfLx6kJp7KWhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEW
-A3RhNIIJALoG/eyJGLV/MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4GBAJ0t/6LSQjFynm+NRSwhmxXPiQZwO18+LHO5CNm+
-SNhr3COGOqs8FoATYqQS+O7nb9boT6026x6ByAMcZbq+VW0Hj7z6utIUkB0CNb1d
-vQv7SFeUbf5xhc6fZZwxgBNWsm8qA7Ydf1pK3VBjekZASx3DcV1ycvBQ+NtgVpfI
-zXOD
+MIIDMjCCApugAwIBAgIBIjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhNDESMBAGCSqGSIb3DQEJARYDdGE0MB4XDTEz
+MTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGE0MRYwFAYJKoZIhvcNAQkBFgdjaDFfdGE0MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0JRw6wiavjYJNKePgeG8rfzyxjMA3
+lnHSQiHfLsTAWmDkcW8F34ioS+yHVI0IyfcZhKXQzMtDw3BpZy5MvuYtk5D5AjCn
+Q9If5dTPW1x0iAYO7s14LC8nTJkvvppzW5sc42dUtnSnyTHTY2rFSlAi66/izXre
+WWhqpg4m1lK2oQIDAQABo4HhMIHeMB0GA1UdDgQWBBQpevm04xuPGWNS+hmgq9o3
+5HCpcTCBmwYDVR0jBIGTMIGQgBSERimIdDHvpsw841gp3r79G/RZmKFtpGswaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRh
+IENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQDDAN0YTQxEjAQBgkqhkiG9w0B
+CQEWA3RhNIIJAOj3jTj6S1XdMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBCwUAA4GBAJHSLm9VzsY52LQfet9/vY9OZuwQPTXxNiKQ
+rrcW5Ej17GMn6IgyeKwhzHH5Rmpztwkkp0RoQaUH+aPsx1PKaOQJaLfuEfKMCIA8
+pVbi86iqHjSZSSaKH1A20g7utqCm5rCUQaa83pNvr7P69KPDRoP4J2eOnkDseQgL
+4kZzYQ3G
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/26.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/26.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 38 (0x26)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Validity
-            Not Before: Apr 11 22:37:51 2011 GMT
-            Not After : Jan  5 22:37:51 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b8:6a:e3:b5:bf:65:66:f4:b3:32:73:a9:64:b7:
-                    dd:a0:4a:e9:70:d3:7b:5c:1b:5b:76:e7:56:a3:72:
-                    0e:9d:fa:9f:b2:a5:47:eb:3f:db:9a:7b:45:d2:17:
-                    77:ca:05:b3:95:22:15:78:9e:ab:f3:4b:fa:83:89:
-                    e6:19:54:22:69:18:67:ba:bb:37:2a:b4:93:5a:bb:
-                    9c:68:5b:ec:b1:7e:ac:01:7b:b3:d9:91:57:93:eb:
-                    43:e6:a6:35:e1:b5:c2:2d:ca:bb:63:af:35:d6:b4:
-                    16:9a:a3:7a:1c:ad:e1:f4:fb:63:4a:fd:3d:57:99:
-                    33:b8:1e:41:e9:f9:42:80:33
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ba:40:be:7e:1b:2f:92:11:cc:dc:44:14:76:87:
+                    8a:6a:94:b6:28:4e:87:5b:bc:57:46:75:63:38:4d:
+                    90:3e:7a:46:0e:87:e9:a9:04:1a:7d:e5:20:dc:81:
+                    9a:79:7e:1b:ab:ce:50:ce:47:54:04:98:16:d5:a6:
+                    6d:16:3c:52:ef:ed:43:c5:9b:d3:c8:48:cb:47:5d:
+                    08:1d:d1:44:fd:7c:c7:54:41:11:3b:3e:ae:bb:7f:
+                    94:a6:13:8f:89:6c:24:b3:a8:5e:e2:5d:20:40:85:
+                    2b:a0:ac:ed:a3:a8:b2:15:59:fc:ad:e8:5d:72:ee:
+                    64:eb:9c:30:8c:0a:97:32:f9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C9:2D:8D:6C:97:26:48:F8:6F:14:66:05:ED:06:D8:BF:21:8A:6F:FD
+                D1:74:80:71:CE:2E:24:57:71:C0:CA:50:42:8B:B3:99:0C:C7:6B:AD
             X509v3 Authority Key Identifier: 
-                keyid:3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
-                serial:BA:06:FD:EC:89:18:B5:7F
+                keyid:84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
+                serial:E8:F7:8D:38:FA:4B:55:DD
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign
     Signature Algorithm: sha256WithRSAEncryption
-        8e:ea:a2:87:02:69:a4:9f:44:22:c3:62:83:9c:fb:e2:3f:59:
-        d0:09:0f:57:81:8f:59:37:21:c5:59:81:36:8d:9c:4e:c0:0f:
-        4b:40:e6:db:ba:9f:d4:b8:86:2f:1b:1b:fd:2d:5d:4e:df:1b:
-        d4:b4:04:d0:07:b8:ad:25:52:1c:0b:ec:07:6c:21:b7:1d:65:
-        d3:a2:dc:a0:96:03:9d:2e:13:7a:a7:8a:29:55:95:5a:dc:ff:
-        6a:a4:4b:7a:26:7f:eb:ad:88:e9:80:5d:53:5e:0f:48:6a:21:
-        18:c9:89:be:83:38:51:40:b6:ad:5d:71:b2:2e:45:60:b3:1d:
-        69:9b
+         25:f7:af:7c:b8:de:50:02:c2:31:ed:50:89:5e:85:bc:e5:f4:
+         a0:03:7e:35:85:d5:2c:4c:bb:62:39:45:e9:50:9b:db:7a:4b:
+         91:e1:dd:e7:dc:b6:da:36:69:d7:2d:68:5c:96:a9:7b:e8:33:
+         17:4c:28:75:c2:6c:53:a8:11:8f:8f:23:89:59:25:8b:26:75:
+         4c:ee:9a:13:eb:78:28:52:dc:b2:fd:96:04:73:a8:78:9e:24:
+         b2:b2:85:88:84:10:ec:83:42:65:22:f1:b5:15:76:14:db:5c:
+         28:43:a4:62:df:27:4a:c5:4b:00:d5:44:83:24:37:f5:c5:4d:
+         b0:4a
 -----BEGIN CERTIFICATE-----
-MIIDMzCCApygAwIBAgIBJjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGE0MRIwEAYJKoZIhvcNAQkBFgN0YTQwHhcNMTEw
-NDExMjIzNzUxWhcNMTQwMTA1MjIzNzUxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjFfdGE0MRgwFgYJKoZIhvcNAQkBFgljaDEuMV90YTQw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALhq47W/ZWb0szJzqWS33aBK6XDT
-e1wbW3bnVqNyDp36n7KlR+s/25p7RdIXd8oFs5UiFXieq/NL+oOJ5hlUImkYZ7q7
-Nyq0k1q7nGhb7LF+rAF7s9mRV5PrQ+amNeG1wi3Ku2OvNda0Fpqjehyt4fT7Y0r9
-PVeZM7geQen5QoAzAgMBAAGjgeAwgd0wHQYDVR0OBBYEFMktjWyXJkj4bxRmBe0G
-2L8him/9MIGaBgNVHSMEgZIwgY+AFD5fZOljy5wQ0JH0RWHy8epCaeyloWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGE0MRIwEAYJKoZIhvcN
-AQkBFgN0YTSCCQC6Bv3siRi1fzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwICBDANBgkqhkiG9w0BAQsFAAOBgQCO6qKHAmmkn0Qiw2KDnPviP1nQCQ9XgY9Z
-NyHFWYE2jZxOwA9LQObbup/UuIYvGxv9LV1O3xvUtATQB7itJVIcC+wHbCG3HWXT
-otyglgOdLhN6p4opVZVa3P9qpEt6Jn/rrYjpgF1TXg9IaiEYyYm+gzhRQLatXXGy
-LkVgsx1pmw==
+MIIDNjCCAp+gAwIBAgIBJjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhNDESMBAGCSqGSIb3DQEJARYDdGE0MB4XDTEz
+MTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuMV90YTQxGDAWBgkqhkiG9w0BCQEWCWNoMS4xX3Rh
+NDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAukC+fhsvkhHM3EQUdoeKapS2
+KE6HW7xXRnVjOE2QPnpGDofpqQQafeUg3IGaeX4bq85QzkdUBJgW1aZtFjxS7+1D
+xZvTyEjLR10IHdFE/XzHVEEROz6uu3+UphOPiWwks6he4l0gQIUroKzto6iyFVn8
+rehdcu5k65wwjAqXMvkCAwEAAaOB4TCB3jAdBgNVHQ4EFgQU0XSAcc4uJFdxwMpQ
+QouzmQzHa60wgZsGA1UdIwSBkzCBkIAUhEYpiHQx76bMPONYKd6+/Rv0WZihbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGE0MRIwEAYJKoZI
+hvcNAQkBFgN0YTSCCQDo9404+ktV3TAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQsFAAOBgQAl9698uN5QAsIx7VCJXoW85fSgA341
+hdUsTLtiOUXpUJvbekuR4d3n3LbaNmnXLWhclql76DMXTCh1wmxTqBGPjyOJWSWL
+JnVM7poT63goUtyy/ZYEc6h4niSysoWIhBDsg0JlIvG1FXYU21woQ6Ri3ydKxUsA
+1USDJDf1xU2wSg==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/28.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/28.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,68 +2,70 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 40 (0x28)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta5/emailAddress=ta5
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta5/emailAddress=ta5
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e7:14:d9:dc:4c:60:0f:ad:49:9f:14:f8:2f:d9:
-                    0e:65:93:a4:c4:e5:6b:13:93:c1:79:40:14:4f:19:
-                    56:d7:88:07:9b:de:45:40:ce:24:91:44:b0:14:6b:
-                    8b:4d:f5:d1:b2:75:cc:5c:d7:ed:73:2c:d2:75:aa:
-                    50:6f:94:00:8d:0e:bb:15:8c:ef:a1:5d:2c:23:73:
-                    95:f7:48:b5:4a:3b:de:2a:a1:7c:03:aa:28:17:f0:
-                    a7:46:b9:86:f3:98:a7:31:ff:e1:75:b4:28:b4:11:
-                    b4:4b:ca:64:e4:cd:2a:f7:d8:6f:6b:73:64:ab:55:
-                    0b:5b:60:76:5f:ea:86:57:1f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c6:67:76:93:23:82:9f:2f:70:27:4f:64:9e:c3:
+                    80:4d:e3:9d:bb:f9:ea:2e:f1:02:e1:e1:a8:5b:f6:
+                    dc:c9:7b:ef:be:5a:41:11:bd:c4:51:e1:d8:74:6a:
+                    16:89:83:f7:3a:fd:0b:cc:9b:e6:96:d8:13:e3:ef:
+                    78:65:97:ff:81:90:97:e8:77:fd:ed:9c:56:2e:c7:
+                    a4:ec:f7:2c:fc:a0:f6:de:ab:ec:d6:e7:9e:35:e6:
+                    b7:dc:65:1b:c8:e4:5a:a2:9d:d8:5b:b9:fa:26:8c:
+                    8d:00:66:c4:05:28:9c:a8:3c:b1:81:c7:75:0a:51:
+                    ed:4f:49:d7:96:b5:8b:34:f9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                59:7D:00:A7:48:7C:5E:D9:A2:26:D0:9A:83:3F:D0:03:9C:36:D5:50
+                8E:29:B3:96:C1:67:FE:34:F3:55:99:68:C4:DA:2A:C0:24:8A:19:C6
             X509v3 Authority Key Identifier: 
-                keyid:E7:E6:72:5B:A0:5F:2C:A6:40:45:1A:66:E4:45:A5:0F:1D:67:5D:93
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta5/emailAddress=ta5
-                serial:9C:19:39:11:06:1A:55:91
+                keyid:29:DA:B1:46:E3:61:51:AC:3C:3E:F6:78:5B:95:7B:6D:B2:F9:17:21
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta5/emailAddress=ta5
+                serial:A7:8F:F0:5E:6B:64:C2:46
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ta5_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ta5_crl.pem
 
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        a0:48:28:f4:94:07:dd:08:f2:c6:74:0d:a9:31:10:71:64:f8:
-        b5:c3:fb:82:8e:46:9d:30:fb:fd:9d:4b:c9:92:5b:c4:06:d2:
-        d0:5e:aa:91:f5:19:7c:c3:11:b2:26:ef:e6:01:cf:3e:ea:07:
-        d6:d2:f8:22:e6:a0:50:86:40:53:cc:ed:81:73:33:b1:a8:2b:
-        92:1a:10:f9:fc:30:43:84:4b:ca:ef:8c:d3:be:0a:63:f0:40:
-        99:be:80:88:c9:8f:2b:9a:82:9f:7b:56:9a:f1:08:e1:67:88:
-        30:fa:a1:12:bc:c8:ea:22:60:64:0f:91:80:48:cd:2a:5d:05:
-        ca:f7
+         9d:32:27:d7:4e:4e:8b:e4:9f:d0:0d:11:f3:e5:be:5f:7f:7e:
+         cf:ef:98:41:33:ba:04:ba:d9:7a:11:88:b8:13:66:74:44:1c:
+         fb:1e:f3:fa:d4:18:85:cd:ed:f0:f8:c2:be:ab:75:cf:65:da:
+         1a:77:01:0e:aa:49:ea:af:a7:db:39:84:f2:01:1d:28:e7:df:
+         22:a9:59:5a:21:f9:f9:30:84:64:52:50:01:9b:b2:bf:ca:8a:
+         b4:8b:36:96:e3:1a:ea:51:53:36:82:ba:88:8f:15:8c:e6:79:
+         59:aa:71:9b:4c:58:a2:68:f0:43:36:15:af:69:af:32:ed:49:
+         c8:9c
 -----BEGIN CERTIFICATE-----
-MIIDbTCCAtagAwIBAgIBKDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGE1MRIwEAYJKoZIhvcNAQkBFgN0YTUwHhcNMTEw
-NDExMjIzNzUyWhcNMTQwMTA1MjIzNzUyWjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhNTEWMBQGCSqGSIb3DQEJARYHY2gxX3RhNTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5xTZ3ExgD61JnxT4L9kOZZOkxOVrE5PB
-eUAUTxlW14gHm95FQM4kkUSwFGuLTfXRsnXMXNftcyzSdapQb5QAjQ67FYzvoV0s
-I3OV90i1SjveKqF8A6ooF/CnRrmG85inMf/hdbQotBG0S8pk5M0q99hva3Nkq1UL
-W2B2X+qGVx8CAwEAAaOCAR0wggEZMB0GA1UdDgQWBBRZfQCnSHxe2aIm0JqDP9AD
-nDbVUDCBmgYDVR0jBIGSMIGPgBTn5nJboF8spkBFGmbkRaUPHWddk6FspGowaDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxv
-IFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAMTA3RhNTESMBAGCSqGSIb3DQEJ
-ARYDdGE1ggkAnBk5EQYaVZEwDwYDVR0TAQH/BAUwAwEB/zA6BgNVHR8EMzAxMC+g
-LaArhilodHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUvMC90YTVfY3JsLnBlbTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAoEgo9JQH3QjyxnQNqTEQ
-cWT4tcP7go5GnTD7/Z1LyZJbxAbS0F6qkfUZfMMRsibv5gHPPuoH1tL4IuagUIZA
-U8ztgXMzsagrkhoQ+fwwQ4RLyu+M074KY/BAmb6AiMmPK5qCn3tWmvEI4WeIMPqh
-ErzI6iJgZA+RgEjNKl0Fyvc=
+MIIDcDCCAtmgAwIBAgIBKDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3DQEJARYDdGE1MB4XDTEz
+MTIxMzAwMTMzOFoXDTE2MDkwODAwMTMzOFowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGE1MRYwFAYJKoZIhvcNAQkBFgdjaDFfdGE1MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGZ3aTI4KfL3AnT2Sew4BN4527+eou
+8QLh4ahb9tzJe+++WkERvcRR4dh0ahaJg/c6/QvMm+aW2BPj73hll/+BkJfod/3t
+nFYux6Ts9yz8oPbeq+zW55415rfcZRvI5FqindhbufomjI0AZsQFKJyoPLGBx3UK
+Ue1PSdeWtYs0+QIDAQABo4IBHjCCARowHQYDVR0OBBYEFI4ps5bBZ/4081WZaMTa
+KsAkihnGMIGbBgNVHSMEgZMwgZCAFCnasUbjYVGsPD72eFuVe22y+RchoW2kazBp
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2Fu
+dGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3
+DQEJARYDdGE1ggkAp4/wXmtkwkYwDwYDVR0TAQH/BAUwAwEB/zA6BgNVHR8EMzAx
+MC+gLaArhilodHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUvMC90YTVfY3JsLnBl
+bTAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAnTIn105Oi+Sf0A0R
+8+W+X39+z++YQTO6BLrZehGIuBNmdEQc+x7z+tQYhc3t8PjCvqt1z2XaGncBDqpJ
+6q+n2zmE8gEdKOffIqlZWiH5+TCEZFJQAZuyv8qKtIs2luMa6lFTNoK6iI8VjOZ5
+Wapxm0xYomjwQzYVr2mvMu1JyJw=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 26 (0x1a)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
-            Not Before: Apr 11 22:37:47 2011 GMT
-            Not After : Jan  5 22:37:47 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a1:1f:54:43:20:65:63:b2:fc:8b:d7:f6:a8:90:
-                    f0:1e:b8:e9:06:37:cb:1b:c9:47:56:3a:3f:ec:7e:
-                    e6:ee:c6:9a:d4:15:0d:64:f7:d5:77:2f:52:31:6c:
-                    36:8d:2f:07:7f:0d:a7:cf:79:af:68:70:2b:74:a7:
-                    30:92:1e:55:fc:2a:f4:b7:c3:47:01:57:4f:65:ba:
-                    58:bf:75:73:02:4c:4c:a8:51:3d:82:ee:57:fa:93:
-                    64:d6:53:05:12:10:36:c9:9c:c3:af:6c:56:9d:20:
-                    44:4b:b4:bc:67:d8:06:99:8e:fa:32:4c:c1:4f:09:
-                    5a:46:ec:06:cf:ac:e1:fa:21
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:df:da:60:8b:c6:d6:55:f7:d0:5b:a7:5a:87:d2:
+                    90:7b:9c:46:31:96:5e:15:a0:c7:44:b3:79:ce:ae:
+                    d7:af:99:a9:fe:6d:c6:69:23:09:45:68:64:01:dc:
+                    a0:7e:8c:ed:c9:bc:14:d3:84:62:2a:8a:21:30:48:
+                    30:97:94:99:84:69:f0:c0:46:a4:72:82:51:30:fe:
+                    f0:fc:60:6c:ea:b8:7d:52:ce:fd:e5:20:b7:9f:4b:
+                    03:21:74:f3:58:35:3a:ef:f7:e0:84:64:06:84:36:
+                    62:e8:82:65:82:1e:56:c7:ea:1e:eb:65:7d:b3:83:
+                    9c:fc:e6:ba:65:c4:82:e3:5f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -29,27 +29,27 @@
                 <EMPTY>
 
     Signature Algorithm: sha256WithRSAEncryption
-        34:ad:5e:5d:7a:64:12:a2:c0:f9:85:cb:e4:5c:43:0a:e9:f7:
-        68:be:c5:96:93:83:04:ca:dc:2c:93:f6:a6:ec:fb:26:a7:9d:
-        dc:d3:e7:ee:f2:d2:93:90:10:3c:4f:8f:ce:0e:63:60:d7:5d:
-        6a:af:97:4d:3d:1b:4b:5c:e6:ed:24:19:c7:d9:20:27:0d:8e:
-        d2:e2:85:68:c2:45:ba:2e:70:9b:78:bd:91:b6:29:0e:75:93:
-        f3:c2:38:14:ee:37:c2:66:1b:cf:de:81:b1:64:eb:8d:19:c4:
-        b2:1d:33:66:47:83:dc:e3:5b:14:d9:69:30:d8:5c:90:5f:34:
-        48:d5
+         ae:2b:af:4b:e6:7b:a1:28:27:46:1e:10:55:c2:2c:e4:6b:e9:
+         f2:6c:38:87:ed:f1:da:d5:92:39:89:22:53:3e:b4:da:3d:ae:
+         8d:ea:42:15:bb:4d:c6:ef:50:9c:1d:8b:93:92:7d:33:31:bd:
+         48:79:76:15:d4:8a:fd:bd:ae:1d:61:43:8d:88:ec:83:8d:15:
+         c9:50:73:e0:07:1a:41:e7:b2:a0:ac:9b:33:ed:bd:73:c5:32:
+         25:dd:ad:01:4b:90:62:25:e8:75:8e:19:e8:f5:4b:b8:89:2a:
+         c6:eb:d6:9c:31:f5:83:dd:1d:f9:71:11:ce:3b:0c:f5:e3:e4:
+         89:0a
 -----BEGIN CERTIFICATE-----
-MIICczCCAdygAwIBAgIBGjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMTEw
-NDExMjIzNzQ3WhcNMTQwMTA1MjIzNzQ3WjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjFfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuMV90YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKEfVEMgZWOy/IvX9qiQ8B646QY3
-yxvJR1Y6P+x+5u7GmtQVDWT31XcvUjFsNo0vB38Np895r2hwK3SnMJIeVfwq9LfD
-RwFXT2W6WL91cwJMTKhRPYLuV/qTZNZTBRIQNsmcw69sVp0gREu0vGfYBpmO+jJM
-wU8JWkbsBs+s4fohAgMBAAGjITAfMA8GA1UdEwEB/wQFMAMBAf8wDAYDVR0SAQH/
-BAIwADANBgkqhkiG9w0BAQsFAAOBgQA0rV5demQSosD5hcvkXEMK6fdovsWWk4ME
-ytwsk/am7Psmp53c0+fu8tKTkBA8T4/ODmNg111qr5dNPRtLXObtJBnH2SAnDY7S
-4oVowkW6LnCbeL2RtikOdZPzwjgU7jfCZhvP3oGxZOuNGcSyHTNmR4Pc41sU2Wkw
-2FyQXzRI1Q==
+MIICdTCCAd6gAwIBAgIBGjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTEz
+MTIxMzAwMTMzNloXDTE2MDkwODAwMTMzNlowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuMV90YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS4xX3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA39pgi8bWVffQW6dah9KQe5xG
+MZZeFaDHRLN5zq7Xr5mp/m3GaSMJRWhkAdygfoztybwU04RiKoohMEgwl5SZhGnw
+wEakcoJRMP7w/GBs6rh9Us795SC3n0sDIXTzWDU67/fghGQGhDZi6IJlgh5Wx+oe
+62V9s4Oc/Oa6ZcSC418CAwEAAaMhMB8wDwYDVR0TAQH/BAUwAwEB/zAMBgNVHRIB
+Af8EAjAAMA0GCSqGSIb3DQEBCwUAA4GBAK4rr0vme6EoJ0YeEFXCLORr6fJsOIft
+8drVkjmJIlM+tNo9ro3qQhW7TcbvUJwdi5OSfTMxvUh5dhXUiv29rh1hQ42I7ION
+FclQc+AHGkHnsqCsmzPtvXPFMiXdrQFLkGIl6HWOGej1S7iJKsbr1pwx9YPdHflx
+Ec47DPXj5IkK
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.1_ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.1_ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 38 (0x26)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Validity
-            Not Before: Apr 11 22:37:51 2011 GMT
-            Not After : Jan  5 22:37:51 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b8:6a:e3:b5:bf:65:66:f4:b3:32:73:a9:64:b7:
-                    dd:a0:4a:e9:70:d3:7b:5c:1b:5b:76:e7:56:a3:72:
-                    0e:9d:fa:9f:b2:a5:47:eb:3f:db:9a:7b:45:d2:17:
-                    77:ca:05:b3:95:22:15:78:9e:ab:f3:4b:fa:83:89:
-                    e6:19:54:22:69:18:67:ba:bb:37:2a:b4:93:5a:bb:
-                    9c:68:5b:ec:b1:7e:ac:01:7b:b3:d9:91:57:93:eb:
-                    43:e6:a6:35:e1:b5:c2:2d:ca:bb:63:af:35:d6:b4:
-                    16:9a:a3:7a:1c:ad:e1:f4:fb:63:4a:fd:3d:57:99:
-                    33:b8:1e:41:e9:f9:42:80:33
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ba:40:be:7e:1b:2f:92:11:cc:dc:44:14:76:87:
+                    8a:6a:94:b6:28:4e:87:5b:bc:57:46:75:63:38:4d:
+                    90:3e:7a:46:0e:87:e9:a9:04:1a:7d:e5:20:dc:81:
+                    9a:79:7e:1b:ab:ce:50:ce:47:54:04:98:16:d5:a6:
+                    6d:16:3c:52:ef:ed:43:c5:9b:d3:c8:48:cb:47:5d:
+                    08:1d:d1:44:fd:7c:c7:54:41:11:3b:3e:ae:bb:7f:
+                    94:a6:13:8f:89:6c:24:b3:a8:5e:e2:5d:20:40:85:
+                    2b:a0:ac:ed:a3:a8:b2:15:59:fc:ad:e8:5d:72:ee:
+                    64:eb:9c:30:8c:0a:97:32:f9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C9:2D:8D:6C:97:26:48:F8:6F:14:66:05:ED:06:D8:BF:21:8A:6F:FD
+                D1:74:80:71:CE:2E:24:57:71:C0:CA:50:42:8B:B3:99:0C:C7:6B:AD
             X509v3 Authority Key Identifier: 
-                keyid:3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
-                serial:BA:06:FD:EC:89:18:B5:7F
+                keyid:84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
+                serial:E8:F7:8D:38:FA:4B:55:DD
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign
     Signature Algorithm: sha256WithRSAEncryption
-        8e:ea:a2:87:02:69:a4:9f:44:22:c3:62:83:9c:fb:e2:3f:59:
-        d0:09:0f:57:81:8f:59:37:21:c5:59:81:36:8d:9c:4e:c0:0f:
-        4b:40:e6:db:ba:9f:d4:b8:86:2f:1b:1b:fd:2d:5d:4e:df:1b:
-        d4:b4:04:d0:07:b8:ad:25:52:1c:0b:ec:07:6c:21:b7:1d:65:
-        d3:a2:dc:a0:96:03:9d:2e:13:7a:a7:8a:29:55:95:5a:dc:ff:
-        6a:a4:4b:7a:26:7f:eb:ad:88:e9:80:5d:53:5e:0f:48:6a:21:
-        18:c9:89:be:83:38:51:40:b6:ad:5d:71:b2:2e:45:60:b3:1d:
-        69:9b
+         25:f7:af:7c:b8:de:50:02:c2:31:ed:50:89:5e:85:bc:e5:f4:
+         a0:03:7e:35:85:d5:2c:4c:bb:62:39:45:e9:50:9b:db:7a:4b:
+         91:e1:dd:e7:dc:b6:da:36:69:d7:2d:68:5c:96:a9:7b:e8:33:
+         17:4c:28:75:c2:6c:53:a8:11:8f:8f:23:89:59:25:8b:26:75:
+         4c:ee:9a:13:eb:78:28:52:dc:b2:fd:96:04:73:a8:78:9e:24:
+         b2:b2:85:88:84:10:ec:83:42:65:22:f1:b5:15:76:14:db:5c:
+         28:43:a4:62:df:27:4a:c5:4b:00:d5:44:83:24:37:f5:c5:4d:
+         b0:4a
 -----BEGIN CERTIFICATE-----
-MIIDMzCCApygAwIBAgIBJjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGE0MRIwEAYJKoZIhvcNAQkBFgN0YTQwHhcNMTEw
-NDExMjIzNzUxWhcNMTQwMTA1MjIzNzUxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjFfdGE0MRgwFgYJKoZIhvcNAQkBFgljaDEuMV90YTQw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALhq47W/ZWb0szJzqWS33aBK6XDT
-e1wbW3bnVqNyDp36n7KlR+s/25p7RdIXd8oFs5UiFXieq/NL+oOJ5hlUImkYZ7q7
-Nyq0k1q7nGhb7LF+rAF7s9mRV5PrQ+amNeG1wi3Ku2OvNda0Fpqjehyt4fT7Y0r9
-PVeZM7geQen5QoAzAgMBAAGjgeAwgd0wHQYDVR0OBBYEFMktjWyXJkj4bxRmBe0G
-2L8him/9MIGaBgNVHSMEgZIwgY+AFD5fZOljy5wQ0JH0RWHy8epCaeyloWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGE0MRIwEAYJKoZIhvcN
-AQkBFgN0YTSCCQC6Bv3siRi1fzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwICBDANBgkqhkiG9w0BAQsFAAOBgQCO6qKHAmmkn0Qiw2KDnPviP1nQCQ9XgY9Z
-NyHFWYE2jZxOwA9LQObbup/UuIYvGxv9LV1O3xvUtATQB7itJVIcC+wHbCG3HWXT
-otyglgOdLhN6p4opVZVa3P9qpEt6Jn/rrYjpgF1TXg9IaiEYyYm+gzhRQLatXXGy
-LkVgsx1pmw==
+MIIDNjCCAp+gAwIBAgIBJjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhNDESMBAGCSqGSIb3DQEJARYDdGE0MB4XDTEz
+MTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuMV90YTQxGDAWBgkqhkiG9w0BCQEWCWNoMS4xX3Rh
+NDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAukC+fhsvkhHM3EQUdoeKapS2
+KE6HW7xXRnVjOE2QPnpGDofpqQQafeUg3IGaeX4bq85QzkdUBJgW1aZtFjxS7+1D
+xZvTyEjLR10IHdFE/XzHVEEROz6uu3+UphOPiWwks6he4l0gQIUroKzto6iyFVn8
+rehdcu5k65wwjAqXMvkCAwEAAaOB4TCB3jAdBgNVHQ4EFgQU0XSAcc4uJFdxwMpQ
+QouzmQzHa60wgZsGA1UdIwSBkzCBkIAUhEYpiHQx76bMPONYKd6+/Rv0WZihbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGE0MRIwEAYJKoZI
+hvcNAQkBFgN0YTSCCQDo9404+ktV3TAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwICBDANBgkqhkiG9w0BAQsFAAOBgQAl9698uN5QAsIx7VCJXoW85fSgA341
+hdUsTLtiOUXpUJvbekuR4d3n3LbaNmnXLWhclql76DMXTCh1wmxTqBGPjyOJWSWL
+JnVM7poT63goUtyy/ZYEc6h4niSysoWIhBDsg0JlIvG1FXYU21woQ6Ri3ydKxUsA
+1USDJDf1xU2wSg==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.2_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.2_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 28 (0x1c)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
             Not Before: Jan  1 01:01:01 2009 GMT
             Not After : Jan  2 01:01:01 2009 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c7:97:bd:7a:78:72:f6:bb:6f:5b:ca:07:34:d8:
-                    70:93:94:39:d6:9c:73:b2:58:c6:fa:10:eb:8e:c7:
-                    54:39:fd:9a:35:f5:2c:a4:ae:e6:ca:a2:9c:07:0c:
-                    57:05:78:cc:8b:98:2e:39:e8:74:73:28:bf:f7:bf:
-                    d1:fb:5d:10:9d:f0:19:75:9d:35:fe:50:97:76:70:
-                    6d:00:79:66:1a:2f:af:c6:12:45:16:45:ea:3e:f0:
-                    90:3b:56:9d:ed:f7:70:ba:de:f7:ec:55:2b:ee:b1:
-                    9b:fb:1d:55:46:65:86:c3:1b:9e:50:b9:8c:b9:d3:
-                    02:73:aa:e6:1e:4d:11:2b:bf
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:db:7e:41:d8:93:1f:35:e5:6b:38:25:93:e5:99:
+                    cf:fe:c7:b8:ab:0b:14:47:23:66:52:c7:d4:18:58:
+                    ff:39:a6:c4:a3:44:2e:46:be:24:7b:9d:71:26:12:
+                    6a:99:bd:92:01:5a:dc:a9:36:3c:2d:f8:42:b8:5f:
+                    db:87:8f:09:9a:83:32:5c:b6:1d:c5:e4:aa:47:6d:
+                    46:11:16:72:44:d7:49:ea:d3:4a:a4:52:9a:f4:8a:
+                    b5:e4:ef:32:7b:71:a0:d7:8e:71:86:22:34:44:4a:
+                    95:5a:37:ef:c4:7f:57:1f:99:32:39:ef:ab:94:05:
+                    1b:9a:88:de:39:85:56:4c:f7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                5A:E6:5A:C4:85:7D:C2:25:75:F9:C2:6A:93:15:18:69:7F:57:47:7C
+                91:8B:82:B9:57:2C:1B:DB:4B:F6:16:04:D7:3F:04:10:DD:8B:3B:05
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        23:82:0a:78:02:e9:9f:de:a1:62:2d:47:42:8d:f8:88:26:cf:
-        3b:31:64:91:56:e1:50:eb:46:12:61:6b:e4:bd:97:43:f5:f7:
-        33:b4:92:34:62:31:8b:df:7c:13:44:ed:04:24:73:4a:35:17:
-        98:15:ad:75:3f:33:bf:86:84:e2:29:34:7e:de:90:a1:99:f5:
-        8a:37:85:98:7d:8e:71:64:6a:1d:aa:47:57:9d:ad:e3:07:90:
-        0a:06:7c:08:e2:97:25:20:38:c9:41:62:d5:96:fb:fe:0e:b4:
-        1c:e1:20:75:7d:6a:f3:62:1d:cc:72:90:a6:13:58:48:af:e4:
-        c9:b1
+         8a:bc:bf:7b:28:d4:bd:a2:a9:91:e8:24:cf:1e:1b:05:7c:32:
+         68:71:40:9a:ef:48:3c:58:43:6c:ae:90:7a:50:a3:49:86:12:
+         57:21:00:0c:49:28:ec:31:fb:04:58:a4:24:c6:7e:14:9d:5a:
+         96:bd:ba:cd:c1:31:cd:c8:f0:77:de:3f:81:0a:d0:31:65:f2:
+         d5:11:c9:6f:cc:5a:f8:f3:c1:8f:31:37:75:3a:c6:6d:6d:6e:
+         d7:16:0a:9b:b0:ce:07:d7:97:36:61:37:5e:4a:16:df:8d:97:
+         f4:71:fe:9b:32:4b:b6:d2:27:f4:9a:7c:b8:83:b3:92:48:2c:
+         ec:0c
 -----BEGIN CERTIFICATE-----
-MIIDMzCCApygAwIBAgIBHDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMDkw
-MTAxMDEwMTAxWhcNMDkwMTAyMDEwMTAxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjJfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuMl90YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMeXvXp4cva7b1vKBzTYcJOUOdac
-c7JYxvoQ647HVDn9mjX1LKSu5sqinAcMVwV4zIuYLjnodHMov/e/0ftdEJ3wGXWd
-Nf5Ql3ZwbQB5Zhovr8YSRRZF6j7wkDtWne33cLre9+xVK+6xm/sdVUZlhsMbnlC5
-jLnTAnOq5h5NESu/AgMBAAGjgeAwgd0wHQYDVR0OBBYEFFrmWsSFfcIldfnCapMV
-GGl/V0d8MIGaBgNVHSMEgZIwgY+AFHr2UXp/m6s3PU6TA5BtaoQJfDrdoWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcN
-AQkBFgN0YTOCCQD0WFRqgyJm6TAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOBgQAjggp4Aumf3qFiLUdCjfiIJs87MWSRVuFQ
-60YSYWvkvZdD9fcztJI0YjGL33wTRO0EJHNKNReYFa11PzO/hoTiKTR+3pChmfWK
-N4WYfY5xZGodqkdXna3jB5AKBnwI4pclIDjJQWLVlvv+DrQc4SB1fWrzYh3McpCm
-E1hIr+TJsQ==
+MIIDNjCCAp+gAwIBAgIBHDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTA5
+MDEwMTAxMDEwMVoXDTA5MDEwMjAxMDEwMVowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuMl90YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS4yX3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA235B2JMfNeVrOCWT5ZnP/se4
+qwsURyNmUsfUGFj/OabEo0QuRr4ke51xJhJqmb2SAVrcqTY8LfhCuF/bh48JmoMy
+XLYdxeSqR21GERZyRNdJ6tNKpFKa9Iq15O8ye3Gg145xhiI0REqVWjfvxH9XH5ky
+Oe+rlAUbmojeOYVWTPcCAwEAAaOB4TCB3jAdBgNVHQ4EFgQUkYuCuVcsG9tL9hYE
+1z8EEN2LOwUwgZsGA1UdIwSBkzCBkIAUtNQ2n/jLol9Qidoh4yfEkfeEiEWhbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZI
+hvcNAQkBFgN0YTOCCQDAxLR9iNbjPjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQCKvL97KNS9oqmR6CTPHhsFfDJocUCa
+70g8WENsrpB6UKNJhhJXIQAMSSjsMfsEWKQkxn4UnVqWvbrNwTHNyPB33j+BCtAx
+ZfLVEclvzFr488GPMTd1OsZtbW7XFgqbsM4H15c2YTdeShbfjZf0cf6bMku20if0
+mny4g7OSSCzsDA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.3_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.3_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 30 (0x1e)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
             Not Before: Jan  1 01:01:01 2035 GMT
             Not After : Jan  2 01:01:01 2035 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d9:34:eb:28:22:6a:51:f8:11:2c:ee:1f:6d:c9:
-                    f1:12:5a:04:33:dd:d6:27:ca:9a:40:ae:df:5c:78:
-                    53:28:c8:37:d2:47:14:e1:fc:22:ea:90:d9:19:05:
-                    08:fd:b7:99:20:97:28:23:fd:3d:62:87:0d:29:a0:
-                    de:95:61:33:6c:d6:e0:65:db:c1:8b:8c:70:c3:ce:
-                    66:e9:93:ee:92:9f:87:2c:d4:6f:1d:e1:92:cb:8a:
-                    38:a4:95:0a:6a:a2:94:c6:41:25:17:ce:a6:01:fb:
-                    cf:03:52:40:93:34:37:b5:74:48:15:d4:e7:64:82:
-                    46:ee:b3:bd:b5:1f:3b:42:81
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ce:58:8a:05:67:47:a9:62:99:37:13:35:4c:74:
+                    75:9b:2f:d7:4c:23:7a:cd:60:35:0c:95:4b:58:b3:
+                    dd:c8:2d:69:ad:3c:8d:d3:27:0d:02:06:d0:4b:6c:
+                    6e:57:e9:1f:3c:dc:f3:88:22:25:86:35:13:91:3c:
+                    9f:76:67:a4:ae:98:63:d2:73:4d:2f:07:d5:7f:80:
+                    7e:27:92:25:16:aa:32:fe:7a:17:65:d5:9f:ee:39:
+                    9f:c8:a1:57:6a:9b:2d:e3:61:d9:35:d5:94:fb:fa:
+                    95:21:c3:31:33:50:d6:2f:e5:c0:7a:bb:a7:61:a4:
+                    e0:9b:5e:ca:99:2a:5d:6a:db
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E0:C8:F3:4A:A9:FE:FA:63:97:C7:CE:EE:A8:27:45:F4:C5:11:8F:A6
+                28:44:43:26:57:0F:45:87:1A:A5:36:FB:0F:49:91:4B:A1:38:F3:ED
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        8d:45:1b:e3:e0:58:10:d4:92:66:aa:50:1a:ee:7a:d9:99:82:
-        7b:6e:3b:9b:88:9e:7c:a2:35:34:bb:77:9d:1f:79:d2:5d:aa:
-        b6:91:f8:07:ff:dc:63:81:d5:f3:e2:47:27:cc:79:2a:33:c8:
-        77:d5:9b:9a:f0:2e:58:64:d3:cb:fb:e4:f9:55:bb:89:9c:36:
-        8f:dd:84:95:a9:8c:8c:d3:6b:81:f8:64:b1:8a:15:20:59:10:
-        e3:5c:b3:05:c6:cd:d1:cb:03:3c:39:84:1c:93:f3:67:5c:10:
-        09:e9:99:1a:a0:45:21:ea:16:31:a1:3d:74:4d:27:75:f9:3d:
-        aa:df
+         b8:a1:7b:ba:b7:10:91:c0:21:86:fe:4d:01:f7:14:34:d9:aa:
+         dc:f3:04:56:c2:08:e6:66:f5:77:55:7e:dd:ea:b5:49:ff:d9:
+         32:39:2c:c9:9f:2f:9c:b3:cc:68:25:3e:d4:92:ef:be:b7:a1:
+         a5:d6:8c:31:3d:3a:7f:f4:5d:e8:ca:a3:30:29:ff:89:82:63:
+         cb:46:47:34:e8:ce:25:dd:a4:09:61:0b:08:7b:fd:24:1b:2b:
+         2d:9b:b9:84:ba:9e:fe:c1:2a:bd:df:e5:86:08:9c:74:ca:51:
+         c8:2e:b8:24:13:49:8c:a4:3e:c1:48:44:bd:30:18:40:88:43:
+         c1:a6
 -----BEGIN CERTIFICATE-----
-MIIDMzCCApygAwIBAgIBHjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMzUw
-MTAxMDEwMTAxWhcNMzUwMTAyMDEwMTAxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjNfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuM190YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANk06ygialH4ESzuH23J8RJaBDPd
-1ifKmkCu31x4UyjIN9JHFOH8IuqQ2RkFCP23mSCXKCP9PWKHDSmg3pVhM2zW4GXb
-wYuMcMPOZumT7pKfhyzUbx3hksuKOKSVCmqilMZBJRfOpgH7zwNSQJM0N7V0SBXU
-52SCRu6zvbUfO0KBAgMBAAGjgeAwgd0wHQYDVR0OBBYEFODI80qp/vpjl8fO7qgn
-RfTFEY+mMIGaBgNVHSMEgZIwgY+AFHr2UXp/m6s3PU6TA5BtaoQJfDrdoWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcN
-AQkBFgN0YTOCCQD0WFRqgyJm6TAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOBgQCNRRvj4FgQ1JJmqlAa7nrZmYJ7bjubiJ58
-ojU0u3edH3nSXaq2kfgH/9xjgdXz4kcnzHkqM8h31Zua8C5YZNPL++T5VbuJnDaP
-3YSVqYyM02uB+GSxihUgWRDjXLMFxs3RywM8OYQck/NnXBAJ6ZkaoEUh6hYxoT10
-TSd1+T2q3w==
+MIIDNjCCAp+gAwIBAgIBHjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTM1
+MDEwMTAxMDEwMVoXDTM1MDEwMjAxMDEwMVowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuM190YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS4zX3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzliKBWdHqWKZNxM1THR1my/X
+TCN6zWA1DJVLWLPdyC1prTyN0ycNAgbQS2xuV+kfPNzziCIlhjUTkTyfdmekrphj
+0nNNLwfVf4B+J5IlFqoy/noXZdWf7jmfyKFXapst42HZNdWU+/qVIcMxM1DWL+XA
+erunYaTgm17KmSpdatsCAwEAAaOB4TCB3jAdBgNVHQ4EFgQUKERDJlcPRYcapTb7
+D0mRS6E48+0wgZsGA1UdIwSBkzCBkIAUtNQ2n/jLol9Qidoh4yfEkfeEiEWhbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZI
+hvcNAQkBFgN0YTOCCQDAxLR9iNbjPjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQC4oXu6txCRwCGG/k0B9xQ02arc8wRW
+wgjmZvV3VX7d6rVJ/9kyOSzJny+cs8xoJT7Uku++t6Gl1owxPTp/9F3oyqMwKf+J
+gmPLRkc06M4l3aQJYQsIe/0kGystm7mEup7+wSq93+WGCJx0ylHILrgkE0mMpD7B
+SES9MBhAiEPBpg==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.4_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1.4_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,61 +2,61 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 32 (0x20)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
             Not Before: Jan  1 01:01:01 2035 GMT
             Not After : Jan  2 01:01:01 2035 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cc:54:a0:55:75:b1:69:33:96:b6:97:29:82:06:
-                    06:46:f2:43:2f:19:57:bf:92:f0:4e:b5:01:65:d3:
-                    dc:e3:cf:5e:a9:f5:99:8e:91:e9:ad:88:15:8b:25:
-                    5e:92:c6:fd:d6:9e:e5:27:56:59:4a:09:e0:84:b8:
-                    86:af:bb:9d:e9:d2:99:f9:84:48:d6:b6:35:e8:aa:
-                    e0:b3:ac:94:09:7f:b8:67:53:75:26:65:16:b7:cf:
-                    92:52:be:5f:07:da:dd:f8:b1:1c:7c:54:37:7f:66:
-                    f7:dc:97:cd:d2:0d:fa:58:a4:2e:96:b8:83:fe:e2:
-                    3d:b6:fb:c5:08:46:ba:1b:47
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:e9:3c:28:6e:b8:7a:e3:7a:f2:ee:5e:69:7a:71:
+                    b8:bb:97:d5:d3:c4:77:3e:90:f3:29:69:b8:51:ba:
+                    8b:27:4d:3f:b2:10:76:86:6e:38:4a:49:be:ce:01:
+                    c5:d2:0e:6e:0e:a9:51:e9:94:57:ce:67:4b:99:ca:
+                    84:93:a9:f9:e6:35:1c:0f:d6:3d:b1:c1:c7:00:d7:
+                    fa:2c:05:a0:20:0d:86:6d:32:c0:54:0f:e8:b9:6e:
+                    b5:dd:1a:00:4c:89:bf:d4:6d:79:0e:e7:4e:10:d2:
+                    fb:75:2c:03:da:75:c8:e1:b7:dc:2e:42:c5:9b:ec:
+                    b2:f1:15:6d:db:56:f9:20:a3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                F8:0C:60:C6:C6:4D:79:11:F2:CD:D2:91:28:DF:F6:26:6C:BB:B0:ED
+                33:65:69:5E:6D:D8:12:02:E9:68:A2:6C:7D:77:F1:38:D8:7B:97:E6
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        c8:ba:31:b9:ed:17:ae:ac:ca:cd:4d:48:f6:b6:66:1c:17:c5:
-        8a:18:96:e8:9b:47:de:b3:7e:23:21:78:cc:f9:63:09:4e:56:
-        64:a1:de:33:16:8b:6a:94:c1:68:0a:72:dd:8e:b6:8c:dd:61:
-        cf:05:07:12:e3:4f:41:52:bc:73:33:a5:3e:94:ca:40:53:74:
-        a7:9c:46:f2:73:5b:b7:7f:df:18:7f:60:2f:2d:4b:41:8c:78:
-        c4:5f:4c:a8:85:a4:2c:84:91:b3:ab:60:61:ca:93:67:1b:2a:
-        0e:9a:e1:e8:a5:dc:5e:78:18:a3:b3:4b:86:4d:03:08:78:9b:
-        70:bc
+         5c:06:87:8e:6c:26:b3:5d:7c:94:c0:e3:7d:9e:8c:7c:bf:86:
+         e0:07:8a:65:95:af:8f:93:0c:a6:72:e5:cb:36:a5:69:03:95:
+         03:7f:e0:18:c8:f2:da:ce:99:b8:54:7a:49:75:f2:61:00:d4:
+         f4:63:e1:5c:cc:f0:91:e7:85:92:0d:7e:91:4b:3a:8b:76:e6:
+         a0:c8:51:28:06:44:d2:c8:a8:4c:da:be:7e:78:88:45:d3:f7:
+         07:92:90:fc:96:4d:7d:ce:5a:c9:9a:21:d9:66:98:3e:9b:5d:
+         18:9a:0c:b8:c4:10:86:4d:06:15:d9:ea:19:9b:e7:f7:e2:74:
+         25:eb
 -----BEGIN CERTIFICATE-----
-MIIDIzCCAoygAwIBAgIBIDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMzUw
-MTAxMDEwMTAxWhcNMzUwMTAyMDEwMTAxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTESMBAGA1UEAxQJY2gxLjRfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEuNF90YTMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMxUoFV1sWkzlraXKYIGBkbyQy8Z
-V7+S8E61AWXT3OPPXqn1mY6R6a2IFYslXpLG/dae5SdWWUoJ4IS4hq+7nenSmfmE
-SNa2Neiq4LOslAl/uGdTdSZlFrfPklK+Xwfa3fixHHxUN39m99yXzdIN+likLpa4
-g/7iPbb7xQhGuhtHAgMBAAGjgdAwgc0wHQYDVR0OBBYEFPgMYMbGTXkR8s3SkSjf
-9iZsu7DtMIGaBgNVHSMEgZIwgY+AFHr2UXp/m6s3PU6TA5BtaoQJfDrdoWykajBo
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcN
-AQkBFgN0YTOCCQD0WFRqgyJm6TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4GBAMi6MbntF66sys1NSPa2ZhwXxYoYluibR96zfiMheMz5YwlOVmSh3jMW
-i2qUwWgKct2OtozdYc8FBxLjT0FSvHMzpT6UykBTdKecRvJzW7d/3xh/YC8tS0GM
-eMRfTKiFpCyEkbOrYGHKk2cbKg6a4eil3F54GKOzS4ZNAwh4m3C8
+MIIDJjCCAo+gAwIBAgIBIDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTM1
+MDEwMTAxMDEwMVoXDTM1MDEwMjAxMDEwMVowdTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRIwEAYDVQQDDAljaDEuNF90YTMxGDAWBgkqhkiG9w0BCQEWCWNoMS40X3Rh
+MzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6Twobrh643ry7l5penG4u5fV
+08R3PpDzKWm4UbqLJ00/shB2hm44Skm+zgHF0g5uDqlR6ZRXzmdLmcqEk6n55jUc
+D9Y9scHHANf6LAWgIA2GbTLAVA/ouW613RoATIm/1G15DudOENL7dSwD2nXI4bfc
+LkLFm+yy8RVt21b5IKMCAwEAAaOB0TCBzjAdBgNVHQ4EFgQUM2VpXm3YEgLpaKJs
+fXfxONh7l+YwgZsGA1UdIwSBkzCBkIAUtNQ2n/jLol9Qidoh4yfEkfeEiEWhbaRr
+MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+YW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZI
+hvcNAQkBFgN0YTOCCQDAxLR9iNbjPjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4GBAFwGh45sJrNdfJTA432ejHy/huAHimWVr4+TDKZy5cs2pWkDlQN/
+4BjI8trOmbhUekl18mEA1PRj4VzM8JHnhZINfpFLOot25qDIUSgGRNLIqEzavn54
+iEXT9weSkPyWTX3OWsmaIdlmmD6bXRiaDLjEEIZNBhXZ6hmb5/fidCXr
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 1 (0x1)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta1/emailAddress=ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta1/emailAddress=ta1
         Validity
-            Not Before: Apr 11 22:37:38 2011 GMT
-            Not After : Jan  5 22:37:38 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b1:ac:f5:20:5c:bf:44:a0:a0:ff:0b:28:02:1b:
-                    9d:dd:1f:3c:6a:f7:16:c0:8e:ec:af:a1:a4:c4:cf:
-                    26:8e:43:ca:8a:aa:05:8f:a2:10:03:32:41:d0:6e:
-                    b4:52:45:47:a8:46:8b:c5:f3:cd:55:56:f5:d0:c3:
-                    ec:e4:a4:63:8b:9a:87:fa:74:78:ff:2c:f7:66:77:
-                    3f:05:c3:31:d0:46:5f:b6:17:af:b5:76:9f:d8:8d:
-                    22:d3:76:ac:ad:55:6f:4c:76:2a:27:8e:e9:22:74:
-                    42:ce:db:42:b9:00:54:01:fe:18:c6:4a:96:b5:b9:
-                    88:32:6d:c5:d9:56:fc:87:95
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:da:3a:b2:74:16:5c:38:7c:93:3a:48:cb:9f:71:
+                    7c:aa:b9:ff:d7:25:5f:cd:90:6c:e6:87:6d:ed:34:
+                    0f:12:19:00:a8:36:fe:51:4b:b2:38:76:55:2a:d1:
+                    ce:3b:a3:78:75:db:c8:ba:85:8b:ad:80:0e:84:ab:
+                    1f:4b:80:90:20:56:49:7b:71:a0:16:f8:15:8a:cd:
+                    70:ee:45:1f:53:34:3c:85:df:10:75:e2:b1:68:97:
+                    c5:0d:66:7f:bf:e7:b3:d1:09:03:1b:50:14:dc:e3:
+                    3e:a9:b6:6a:63:e6:0f:51:3e:06:59:50:43:da:10:
+                    99:0d:79:a3:b4:76:89:a2:01
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C0:9E:26:BD:D6:FB:FB:BF:FA:CE:33:92:CA:4E:25:CF:EC:9E:BA:66
+                36:46:2D:8A:1B:8B:CE:C1:1D:02:37:B9:EC:A5:FF:BA:73:AE:E5:48
             X509v3 Authority Key Identifier: 
-                keyid:75:A9:2B:02:E8:FB:31:09:2A:F2:16:21:24:D8:B2:A5:D0:14:93:5B
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta1/emailAddress=ta1
-                serial:A1:49:EA:78:5A:F4:55:8D
+                keyid:81:54:6B:06:08:DD:44:4F:08:81:21:7A:7C:D5:96:EA:53:2B:E3:0A
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta1/emailAddress=ta1
+                serial:F6:A8:B6:5C:10:8D:04:4F
 
             X509v3 Basic Constraints: critical
                 CA:TRUE, pathlen:4
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        94:eb:ef:96:17:47:57:5e:c2:4f:4c:67:8b:bd:d7:14:22:1e:
-        d7:09:cc:b7:b2:f2:cf:df:51:e3:a6:ea:5a:7b:3a:5f:47:b1:
-        db:37:91:a3:ae:75:d2:d0:9e:9c:49:fc:ec:1f:2e:9b:b4:96:
-        43:60:c8:99:a7:a8:fb:93:c1:68:2e:c8:09:42:23:0c:8a:25:
-        08:67:e9:0e:6a:44:e9:18:08:d0:a0:ce:60:6c:d3:e8:c1:ec:
-        2d:f0:db:47:04:36:f3:27:86:69:c5:10:06:3b:93:65:ea:19:
-        e4:6d:cd:fb:8a:ee:21:58:de:f3:17:7a:ee:ce:80:06:cc:1f:
-        48:dd
+         38:4a:69:9d:14:fa:51:b9:35:9c:c8:ae:e5:c0:e2:2e:4c:d4:
+         57:ad:64:05:99:e4:94:b3:d3:97:e0:0e:bd:1c:b4:64:c8:2b:
+         07:18:26:7f:99:ef:9c:48:e6:23:b3:96:37:92:54:85:8b:29:
+         19:60:12:11:fc:d8:62:84:5c:75:73:76:9e:0f:f8:a7:95:79:
+         c8:3c:75:f7:13:73:1f:be:fa:60:79:5c:6c:12:8d:ca:f9:58:
+         4b:1f:ed:0a:52:4c:61:95:6f:9a:a7:57:0c:20:9a:19:73:dc:
+         3d:42:aa:47:29:ac:92:a9:cc:4a:eb:85:6d:ab:cd:ed:2b:9a:
+         e5:c1
 -----BEGIN CERTIFICATE-----
-MIIDMjCCApugAwIBAgIBATANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGExMRIwEAYJKoZIhvcNAQkBFgN0YTEwHhcNMTEw
-NDExMjIzNzM4WhcNMTQwMTA1MjIzNzM4WjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gxX3RhMTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsaz1IFy/RKCg/wsoAhud3R88avcWwI7s
-r6GkxM8mjkPKiqoFj6IQAzJB0G60UkVHqEaLxfPNVVb10MPs5KRji5qH+nR4/yz3
-Znc/BcMx0EZfthevtXaf2I0i03asrVVvTHYqJ47pInRCzttCuQBUAf4YxkqWtbmI
-Mm3F2Vb8h5UCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUwJ4mvdb7+7/6zjOSyk4lz+ye
-umYwgZoGA1UdIwSBkjCBj4AUdakrAuj7MQkq8hYhJNiypdAUk1uhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEW
-A3RhMYIJAKFJ6nha9FWNMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBCwUAA4GBAJTr75YXR1dewk9MZ4u91xQiHtcJzLey8s/f
-UeOm6lp7Ol9Hsds3kaOuddLQnpxJ/OwfLpu0lkNgyJmnqPuTwWguyAlCIwyKJQhn
-6Q5qROkYCNCgzmBs0+jB7C3w20cENvMnhmnFEAY7k2XqGeRtzfuK7iFY3vMXeu7O
-gAbMH0jd
+MIIDNTCCAp6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMTESMBAGCSqGSIb3DQEJARYDdGExMB4XDTEz
+MTIxMzAwMTMzNFoXDTE2MDkwODAwMTMzNFowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDFfdGExMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaOrJ0Flw4fJM6SMufcXyquf/XJV/N
+kGzmh23tNA8SGQCoNv5RS7I4dlUq0c47o3h128i6hYutgA6Eqx9LgJAgVkl7caAW
++BWKzXDuRR9TNDyF3xB14rFol8UNZn+/57PRCQMbUBTc4z6ptmpj5g9RPgZZUEPa
+EJkNeaO0domiAQIDAQABo4HkMIHhMB0GA1UdDgQWBBQ2Ri2KG4vOwR0CN7nspf+6
+c67lSDCBmwYDVR0jBIGTMIGQgBSBVGsGCN1ETwiBIXp81ZbqUyvjCqFtpGswaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRh
+IENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQDDAN0YTExEjAQBgkqhkiG9w0B
+CQEWA3RhMYIJAPaotlwQjQRPMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBADhKaZ0U+lG5NZzIruXA4i5M1FetZAWZ
+5JSz05fgDr0ctGTIKwcYJn+Z75xI5iOzljeSVIWLKRlgEhH82GKEXHVzdp4P+KeV
+ecg8dfcTcx+++mB5XGwSjcr5WEsf7QpSTGGVb5qnVwwgmhlz3D1CqkcprJKpzErr
+hW2rze0rmuXB
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 16 (0x10)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
-            Not Before: Apr 11 22:37:44 2011 GMT
-            Not After : Jan  5 22:37:44 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e1:a3:d0:51:dc:0b:73:6f:44:f2:c7:6b:f2:9d:
-                    da:56:de:d4:41:61:75:48:78:10:2c:53:f1:c1:28:
-                    01:4a:10:53:7d:32:bc:e2:01:a2:75:59:0b:cf:3a:
-                    fc:41:b8:2c:36:fb:fe:3d:d9:a2:41:7b:6e:3c:0a:
-                    a9:7e:74:5a:86:ea:06:6a:2b:ad:3c:7e:32:8b:97:
-                    a4:ba:53:c1:b8:bc:f0:8f:80:22:53:97:66:bb:80:
-                    15:05:96:dc:df:62:29:4d:15:df:85:e6:90:30:4d:
-                    29:d3:04:b7:4f:22:40:b8:a1:22:ed:0e:4b:e6:00:
-                    82:df:89:48:63:87:b5:80:55
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ba:0e:36:90:a0:6b:75:19:6b:30:76:54:9e:20:
+                    b0:81:70:21:47:97:9c:c1:15:7c:9e:2d:50:3c:db:
+                    dc:8c:d0:31:9c:b9:78:c6:2a:5c:53:ca:ed:d3:44:
+                    e2:f9:93:d8:b5:b6:a6:8a:c2:bd:be:4f:8b:f5:a0:
+                    28:68:cf:ec:f9:e3:e9:57:a8:ab:cd:a5:45:0d:82:
+                    eb:f0:5b:aa:2d:1b:88:65:30:9f:a1:74:59:1f:e5:
+                    d2:25:f9:d6:31:3f:0a:a2:4a:92:5d:2a:30:2e:3f:
+                    2f:72:48:93:f8:8d:7c:bf:79:21:e3:e1:91:9a:a7:
+                    03:01:ba:20:95:a6:da:56:35
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D9:77:48:13:09:B0:17:15:2A:95:47:CA:4C:13:2E:A9:AC:18:5D:AD
+                A7:11:90:E6:5F:5F:79:74:A3:1D:B5:9E:0C:15:F1:16:C5:D4:FB:6B
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta3/emailAddress=ta3
+                serial:C0:C4:B4:7D:88:D6:E3:3E
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        a5:b4:3f:fe:d9:aa:36:19:da:97:ab:60:50:43:50:e0:26:2e:
-        23:af:39:d9:d6:60:0a:41:5d:6a:2f:6f:f2:4c:4f:a8:22:40:
-        04:40:84:4e:0a:34:10:21:a5:9a:36:f6:7c:aa:e3:29:88:ce:
-        8c:1f:4a:cd:db:19:db:25:0c:04:46:28:67:ba:74:ff:74:78:
-        4e:20:9b:ef:31:95:c9:ab:46:53:f3:02:bb:25:78:3e:43:6a:
-        87:d6:86:61:a6:3e:8a:91:91:a6:88:f2:32:2d:b2:51:22:46:
-        9a:b3:b6:c9:45:90:83:c2:0f:d7:a2:4a:1b:61:30:3f:55:3d:
-        47:1f
+         5f:db:a1:d4:03:bc:a0:f9:d7:80:88:ac:94:2b:22:cc:1c:88:
+         56:65:bd:0d:57:d6:d4:ae:5c:a2:27:44:7c:5e:4d:23:8c:ba:
+         fe:1c:a6:49:96:20:c2:f5:45:cf:52:0e:0a:80:40:5b:1c:e7:
+         83:2b:d4:72:6c:95:10:c6:a7:44:27:85:6b:e5:37:f5:a4:25:
+         70:e4:e0:0e:de:1d:c1:72:1f:05:be:0f:4b:23:61:38:e3:52:
+         cb:05:c3:f4:41:26:80:58:ea:02:c6:6b:7d:f8:9f:41:40:76:
+         94:44:59:2e:da:bc:a8:54:11:22:bc:58:ff:61:85:3c:60:e7:
+         67:e6
 -----BEGIN CERTIFICATE-----
-MIIDLzCCApigAwIBAgIBEDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEzMRIwEAYJKoZIhvcNAQkBFgN0YTMwHhcNMTEw
-NDExMjIzNzQ0WhcNMTQwMTA1MjIzNzQ0WjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3RhMzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4aPQUdwLc29E8sdr8p3aVt7UQWF1SHgQ
-LFPxwSgBShBTfTK84gGidVkLzzr8QbgsNvv+PdmiQXtuPAqpfnRahuoGaiutPH4y
-i5ekulPBuLzwj4AiU5dmu4AVBZbc32IpTRXfheaQME0p0wS3TyJAuKEi7Q5L5gCC
-34lIY4e1gFUCAwEAAaOB4DCB3TAdBgNVHQ4EFgQU2XdIEwmwFxUqlUfKTBMuqawY
-Xa0wgZoGA1UdIwSBkjCBj4AUevZRen+bqzc9TpMDkG1qhAl8Ot2hbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEW
-A3RhM4IJAPRYVGqDImbpMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4GBAKW0P/7ZqjYZ2perYFBDUOAmLiOvOdnWYApBXWov
-b/JMT6giQARAhE4KNBAhpZo29nyq4ymIzowfSs3bGdslDARGKGe6dP90eE4gm+8x
-lcmrRlPzArsleD5DaofWhmGmPoqRkaaI8jItslEiRpqztslFkIPCD9eiShthMD9V
-PUcf
+MIIDMjCCApugAwIBAgIBEDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMB4XDTEz
+MTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGEzMRYwFAYJKoZIhvcNAQkBFgdjaDFfdGEzMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6DjaQoGt1GWswdlSeILCBcCFHl5zB
+FXyeLVA829yM0DGcuXjGKlxTyu3TROL5k9i1tqaKwr2+T4v1oChoz+z54+lXqKvN
+pUUNguvwW6otG4hlMJ+hdFkf5dIl+dYxPwqiSpJdKjAuPy9ySJP4jXy/eSHj4ZGa
+pwMBuiCVptpWNQIDAQABo4HhMIHeMB0GA1UdDgQWBBSnEZDmX195dKMdtZ4MFfEW
+xdT7azCBmwYDVR0jBIGTMIGQgBS01Daf+MuiX1CJ2iHjJ8SR94SIRaFtpGswaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRh
+IENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQDDAN0YTMxEjAQBgkqhkiG9w0B
+CQEWA3RhM4IJAMDEtH2I1uM+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBCwUAA4GBAF/bodQDvKD514CIrJQrIswciFZlvQ1X1tSu
+XKInRHxeTSOMuv4cpkmWIML1Rc9SDgqAQFsc54Mr1HJslRDGp0QnhWvlN/WkJXDk
+4A7eHcFyHwW+D0sjYTjjUssFw/RBJoBY6gLGa334n0FAdpREWS7avKhUESK8WP9h
+hTxg52fm
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,64 +2,64 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 34 (0x22)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Validity
-            Not Before: Apr 11 22:37:49 2011 GMT
-            Not After : Jan  5 22:37:49 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b6:ab:16:bb:1d:ee:25:5a:2f:58:e7:db:d8:0a:
-                    e7:36:63:d5:ca:de:60:b5:90:c2:82:e3:ec:7d:49:
-                    0c:a9:b6:95:c8:a1:ab:04:0c:a9:09:e1:93:a6:be:
-                    43:36:7e:1b:61:28:1b:38:03:a2:06:19:88:72:a9:
-                    b9:a2:71:ff:db:e1:3c:85:98:01:b2:5f:93:a0:4a:
-                    b8:e7:36:ad:8f:50:8c:d6:a1:14:29:b0:ee:ec:e2:
-                    08:3f:7d:34:a1:c4:5f:3a:e9:4f:b0:c0:d6:5f:f2:
-                    10:78:2b:ae:f4:ee:28:c8:29:21:9f:ce:70:d5:fb:
-                    ea:33:fc:e2:5a:5c:e2:1b:d9
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b4:25:1c:3a:c2:26:af:8d:82:4d:29:e3:e0:78:
+                    6f:2b:7f:3c:b1:8c:c0:37:96:71:d2:42:21:df:2e:
+                    c4:c0:5a:60:e4:71:6f:05:df:88:a8:4b:ec:87:54:
+                    8d:08:c9:f7:19:84:a5:d0:cc:cb:43:c3:70:69:67:
+                    2e:4c:be:e6:2d:93:90:f9:02:30:a7:43:d2:1f:e5:
+                    d4:cf:5b:5c:74:88:06:0e:ee:cd:78:2c:2f:27:4c:
+                    99:2f:be:9a:73:5b:9b:1c:e3:67:54:b6:74:a7:c9:
+                    31:d3:63:6a:c5:4a:50:22:eb:af:e2:cd:7a:de:59:
+                    68:6a:a6:0e:26:d6:52:b6:a1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                2A:94:C1:FF:E0:11:A0:91:F1:71:46:35:9A:37:3C:BC:C4:21:4A:8F
+                29:7A:F9:B4:E3:1B:8F:19:63:52:FA:19:A0:AB:DA:37:E4:70:A9:71
             X509v3 Authority Key Identifier: 
-                keyid:3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
-                serial:BA:06:FD:EC:89:18:B5:7F
+                keyid:84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
+                serial:E8:F7:8D:38:FA:4B:55:DD
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        9d:2d:ff:a2:d2:42:31:72:9e:6f:8d:45:2c:21:9b:15:cf:89:
-        06:70:3b:5f:3e:2c:73:b9:08:d9:be:48:d8:6b:dc:23:86:3a:
-        ab:3c:16:80:13:62:a4:12:f8:ee:e7:6f:d6:e8:4f:ad:36:eb:
-        1e:81:c8:03:1c:65:ba:be:55:6d:07:8f:bc:fa:ba:d2:14:90:
-        1d:02:35:bd:5d:bd:0b:fb:48:57:94:6d:fe:71:85:ce:9f:65:
-        9c:31:80:13:56:b2:6f:2a:03:b6:1d:7f:5a:4a:dd:50:63:7a:
-        46:40:4b:1d:c3:71:5d:72:72:f0:50:f8:db:60:56:97:c8:cd:
-        73:83
+         91:d2:2e:6f:55:ce:c6:39:d8:b4:1f:7a:df:7f:bd:8f:4e:66:
+         ec:10:3d:35:f1:36:22:90:ae:b7:16:e4:48:f5:ec:63:27:e8:
+         88:32:78:ac:21:cc:71:f9:46:6a:73:b7:09:24:a7:44:68:41:
+         a5:07:f9:a3:ec:c7:53:ca:68:e4:09:68:b7:ee:11:f2:8c:08:
+         80:3c:a5:56:e2:f3:a8:aa:1e:34:99:49:26:8a:1f:50:36:d2:
+         0e:ee:b6:a0:a6:e6:b0:94:41:a6:bc:de:93:6f:af:b3:fa:f4:
+         a3:c3:46:83:f8:27:67:8e:9e:40:ec:79:08:0b:e2:46:73:61:
+         0d:c6
 -----BEGIN CERTIFICATE-----
-MIIDLzCCApigAwIBAgIBIjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGE0MRIwEAYJKoZIhvcNAQkBFgN0YTQwHhcNMTEw
-NDExMjIzNzQ5WhcNMTQwMTA1MjIzNzQ5WjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3RhNDCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtqsWux3uJVovWOfb2ArnNmPVyt5gtZDC
-guPsfUkMqbaVyKGrBAypCeGTpr5DNn4bYSgbOAOiBhmIcqm5onH/2+E8hZgBsl+T
-oEq45zatj1CM1qEUKbDu7OIIP300ocRfOulPsMDWX/IQeCuu9O4oyCkhn85w1fvq
-M/ziWlziG9kCAwEAAaOB4DCB3TAdBgNVHQ4EFgQUKpTB/+ARoJHxcUY1mjc8vMQh
-So8wgZoGA1UdIwSBkjCBj4AUPl9k6WPLnBDQkfRFYfLx6kJp7KWhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEW
-A3RhNIIJALoG/eyJGLV/MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4GBAJ0t/6LSQjFynm+NRSwhmxXPiQZwO18+LHO5CNm+
-SNhr3COGOqs8FoATYqQS+O7nb9boT6026x6ByAMcZbq+VW0Hj7z6utIUkB0CNb1d
-vQv7SFeUbf5xhc6fZZwxgBNWsm8qA7Ydf1pK3VBjekZASx3DcV1ycvBQ+NtgVpfI
-zXOD
+MIIDMjCCApugAwIBAgIBIjANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhNDESMBAGCSqGSIb3DQEJARYDdGE0MB4XDTEz
+MTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGE0MRYwFAYJKoZIhvcNAQkBFgdjaDFfdGE0MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0JRw6wiavjYJNKePgeG8rfzyxjMA3
+lnHSQiHfLsTAWmDkcW8F34ioS+yHVI0IyfcZhKXQzMtDw3BpZy5MvuYtk5D5AjCn
+Q9If5dTPW1x0iAYO7s14LC8nTJkvvppzW5sc42dUtnSnyTHTY2rFSlAi66/izXre
+WWhqpg4m1lK2oQIDAQABo4HhMIHeMB0GA1UdDgQWBBQpevm04xuPGWNS+hmgq9o3
+5HCpcTCBmwYDVR0jBIGTMIGQgBSERimIdDHvpsw841gp3r79G/RZmKFtpGswaTEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRh
+IENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQDDAN0YTQxEjAQBgkqhkiG9w0B
+CQEWA3RhNIIJAOj3jTj6S1XdMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBCwUAA4GBAJHSLm9VzsY52LQfet9/vY9OZuwQPTXxNiKQ
+rrcW5Ej17GMn6IgyeKwhzHH5Rmpztwkkp0RoQaUH+aPsx1PKaOQJaLfuEfKMCIA8
+pVbi86iqHjSZSSaKH1A20g7utqCm5rCUQaa83pNvr7P69KPDRoP4J2eOnkDseQgL
+4kZzYQ3G
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta5_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch1_ta5_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,68 +2,70 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 40 (0x28)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta5/emailAddress=ta5
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta5/emailAddress=ta5
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e7:14:d9:dc:4c:60:0f:ad:49:9f:14:f8:2f:d9:
-                    0e:65:93:a4:c4:e5:6b:13:93:c1:79:40:14:4f:19:
-                    56:d7:88:07:9b:de:45:40:ce:24:91:44:b0:14:6b:
-                    8b:4d:f5:d1:b2:75:cc:5c:d7:ed:73:2c:d2:75:aa:
-                    50:6f:94:00:8d:0e:bb:15:8c:ef:a1:5d:2c:23:73:
-                    95:f7:48:b5:4a:3b:de:2a:a1:7c:03:aa:28:17:f0:
-                    a7:46:b9:86:f3:98:a7:31:ff:e1:75:b4:28:b4:11:
-                    b4:4b:ca:64:e4:cd:2a:f7:d8:6f:6b:73:64:ab:55:
-                    0b:5b:60:76:5f:ea:86:57:1f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c6:67:76:93:23:82:9f:2f:70:27:4f:64:9e:c3:
+                    80:4d:e3:9d:bb:f9:ea:2e:f1:02:e1:e1:a8:5b:f6:
+                    dc:c9:7b:ef:be:5a:41:11:bd:c4:51:e1:d8:74:6a:
+                    16:89:83:f7:3a:fd:0b:cc:9b:e6:96:d8:13:e3:ef:
+                    78:65:97:ff:81:90:97:e8:77:fd:ed:9c:56:2e:c7:
+                    a4:ec:f7:2c:fc:a0:f6:de:ab:ec:d6:e7:9e:35:e6:
+                    b7:dc:65:1b:c8:e4:5a:a2:9d:d8:5b:b9:fa:26:8c:
+                    8d:00:66:c4:05:28:9c:a8:3c:b1:81:c7:75:0a:51:
+                    ed:4f:49:d7:96:b5:8b:34:f9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                59:7D:00:A7:48:7C:5E:D9:A2:26:D0:9A:83:3F:D0:03:9C:36:D5:50
+                8E:29:B3:96:C1:67:FE:34:F3:55:99:68:C4:DA:2A:C0:24:8A:19:C6
             X509v3 Authority Key Identifier: 
-                keyid:E7:E6:72:5B:A0:5F:2C:A6:40:45:1A:66:E4:45:A5:0F:1D:67:5D:93
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta5/emailAddress=ta5
-                serial:9C:19:39:11:06:1A:55:91
+                keyid:29:DA:B1:46:E3:61:51:AC:3C:3E:F6:78:5B:95:7B:6D:B2:F9:17:21
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta5/emailAddress=ta5
+                serial:A7:8F:F0:5E:6B:64:C2:46
 
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ta5_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ta5_crl.pem
 
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        a0:48:28:f4:94:07:dd:08:f2:c6:74:0d:a9:31:10:71:64:f8:
-        b5:c3:fb:82:8e:46:9d:30:fb:fd:9d:4b:c9:92:5b:c4:06:d2:
-        d0:5e:aa:91:f5:19:7c:c3:11:b2:26:ef:e6:01:cf:3e:ea:07:
-        d6:d2:f8:22:e6:a0:50:86:40:53:cc:ed:81:73:33:b1:a8:2b:
-        92:1a:10:f9:fc:30:43:84:4b:ca:ef:8c:d3:be:0a:63:f0:40:
-        99:be:80:88:c9:8f:2b:9a:82:9f:7b:56:9a:f1:08:e1:67:88:
-        30:fa:a1:12:bc:c8:ea:22:60:64:0f:91:80:48:cd:2a:5d:05:
-        ca:f7
+         9d:32:27:d7:4e:4e:8b:e4:9f:d0:0d:11:f3:e5:be:5f:7f:7e:
+         cf:ef:98:41:33:ba:04:ba:d9:7a:11:88:b8:13:66:74:44:1c:
+         fb:1e:f3:fa:d4:18:85:cd:ed:f0:f8:c2:be:ab:75:cf:65:da:
+         1a:77:01:0e:aa:49:ea:af:a7:db:39:84:f2:01:1d:28:e7:df:
+         22:a9:59:5a:21:f9:f9:30:84:64:52:50:01:9b:b2:bf:ca:8a:
+         b4:8b:36:96:e3:1a:ea:51:53:36:82:ba:88:8f:15:8c:e6:79:
+         59:aa:71:9b:4c:58:a2:68:f0:43:36:15:af:69:af:32:ed:49:
+         c8:9c
 -----BEGIN CERTIFICATE-----
-MIIDbTCCAtagAwIBAgIBKDANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGE1MRIwEAYJKoZIhvcNAQkBFgN0YTUwHhcNMTEw
-NDExMjIzNzUyWhcNMTQwMTA1MjIzNzUyWjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY2gxX3RhNTEWMBQGCSqGSIb3DQEJARYHY2gxX3RhNTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5xTZ3ExgD61JnxT4L9kOZZOkxOVrE5PB
-eUAUTxlW14gHm95FQM4kkUSwFGuLTfXRsnXMXNftcyzSdapQb5QAjQ67FYzvoV0s
-I3OV90i1SjveKqF8A6ooF/CnRrmG85inMf/hdbQotBG0S8pk5M0q99hva3Nkq1UL
-W2B2X+qGVx8CAwEAAaOCAR0wggEZMB0GA1UdDgQWBBRZfQCnSHxe2aIm0JqDP9AD
-nDbVUDCBmgYDVR0jBIGSMIGPgBTn5nJboF8spkBFGmbkRaUPHWddk6FspGowaDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxv
-IFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAMTA3RhNTESMBAGCSqGSIb3DQEJ
-ARYDdGE1ggkAnBk5EQYaVZEwDwYDVR0TAQH/BAUwAwEB/zA6BgNVHR8EMzAxMC+g
-LaArhilodHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUvMC90YTVfY3JsLnBlbTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAoEgo9JQH3QjyxnQNqTEQ
-cWT4tcP7go5GnTD7/Z1LyZJbxAbS0F6qkfUZfMMRsibv5gHPPuoH1tL4IuagUIZA
-U8ztgXMzsagrkhoQ+fwwQ4RLyu+M074KY/BAmb6AiMmPK5qCn3tWmvEI4WeIMPqh
-ErzI6iJgZA+RgEjNKl0Fyvc=
+MIIDcDCCAtmgAwIBAgIBKDANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3DQEJARYDdGE1MB4XDTEz
+MTIxMzAwMTMzOFoXDTE2MDkwODAwMTMzOFowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjaDFfdGE1MRYwFAYJKoZIhvcNAQkBFgdjaDFfdGE1MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGZ3aTI4KfL3AnT2Sew4BN4527+eou
+8QLh4ahb9tzJe+++WkERvcRR4dh0ahaJg/c6/QvMm+aW2BPj73hll/+BkJfod/3t
+nFYux6Ts9yz8oPbeq+zW55415rfcZRvI5FqindhbufomjI0AZsQFKJyoPLGBx3UK
+Ue1PSdeWtYs0+QIDAQABo4IBHjCCARowHQYDVR0OBBYEFI4ps5bBZ/4081WZaMTa
+KsAkihnGMIGbBgNVHSMEgZMwgZCAFCnasUbjYVGsPD72eFuVe22y+RchoW2kazBp
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2Fu
+dGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3
+DQEJARYDdGE1ggkAp4/wXmtkwkYwDwYDVR0TAQH/BAUwAwEB/zA6BgNVHR8EMzAx
+MC+gLaArhilodHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUvMC90YTVfY3JsLnBl
+bTAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAnTIn105Oi+Sf0A0R
+8+W+X39+z++YQTO6BLrZehGIuBNmdEQc+x7z+tQYhc3t8PjCvqt1z2XaGncBDqpJ
+6q+n2zmE8gEdKOffIqlZWiH5+TCEZFJQAZuyv8qKtIs2luMa6lFTNoK6iI8VjOZ5
+Wapxm0xYomjwQzYVr2mvMu1JyJw=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch2_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch2_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 2 (0x2)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta1/emailAddress=ch1_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:f4:24:ed:3d:fe:70:c8:51:b6:8d:26:78:90:6a:
-                    77:ff:de:7d:58:1f:00:fe:63:b0:88:de:46:18:d2:
-                    16:84:af:65:a1:9a:97:b1:38:14:6b:e7:98:c1:79:
-                    6f:0a:db:b2:92:6e:d6:7e:cd:cb:55:39:a0:27:e9:
-                    06:c8:45:19:2c:16:c3:4f:f5:af:cd:f6:14:cb:85:
-                    59:5c:1b:83:dc:f6:b6:4d:30:06:28:66:f6:2b:19:
-                    03:3f:00:de:09:77:50:a2:98:b1:73:3d:d5:79:f0:
-                    7e:79:2b:8e:76:96:c9:43:cf:44:9a:15:2e:09:00:
-                    47:a6:5a:f0:35:8b:88:b7:61
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:be:c1:86:30:d2:a3:02:f4:00:33:fc:54:f3:6f:
+                    d7:27:99:7b:57:e2:f1:93:f8:58:1c:eb:9a:cc:6b:
+                    23:9b:b8:a9:11:27:50:9b:d7:a7:c2:fe:8b:ee:54:
+                    d0:5d:e2:24:04:47:1c:cc:54:b5:89:bb:a6:26:de:
+                    b9:3b:73:19:67:5e:9a:88:12:de:87:de:0e:26:c9:
+                    0c:44:13:65:23:cd:7f:34:d6:bb:45:20:87:7e:ba:
+                    48:d5:2f:3f:fc:d6:8d:d7:b7:b2:9f:42:ef:76:9a:
+                    cf:c3:01:ae:b9:8f:00:33:ea:28:15:ca:30:da:8f:
+                    25:76:a4:55:2a:2c:7a:b8:eb
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                C2:62:F6:27:E6:91:FB:98:5F:55:6E:11:EE:6E:E0:04:76:A0:E7:01
+                12:30:0A:74:FD:DE:71:CF:4A:77:1E:1E:57:5E:F8:76:71:D7:5B:9E
             X509v3 Authority Key Identifier: 
-                keyid:C0:9E:26:BD:D6:FB:FB:BF:FA:CE:33:92:CA:4E:25:CF:EC:9E:BA:66
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta1/emailAddress=ta1
+                keyid:36:46:2D:8A:1B:8B:CE:C1:1D:02:37:B9:EC:A5:FF:BA:73:AE:E5:48
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta1/emailAddress=ta1
                 serial:01
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        a0:f7:c7:f9:6b:cf:6e:6c:36:74:b2:47:8d:76:04:74:88:de:
-        3b:cb:2d:e7:6c:fd:78:43:0f:29:9c:ba:92:97:dd:62:89:88:
-        31:c7:9b:b2:46:42:4a:e0:c1:3f:a8:5f:63:86:d1:75:d9:47:
-        46:d1:d3:87:dc:3e:7a:22:ce:8c:05:51:95:19:c5:2b:83:0f:
-        02:4c:54:a6:e8:a9:c9:79:bd:0b:f0:e7:4d:31:77:e6:07:ea:
-        1d:b1:35:48:30:15:28:c2:2d:36:42:fd:e9:11:85:7f:b0:9f:
-        7b:9a:b6:0e:1d:94:02:3a:3b:c1:b8:bd:c8:c9:8d:c6:b6:9a:
-        11:17
+         8e:a5:2a:c9:3f:e0:1f:a9:8c:a3:45:b8:0d:0e:35:43:c3:d6:
+         fe:f6:bc:0d:76:f0:26:d6:ab:e7:39:30:92:6f:cc:8e:0e:5f:
+         b0:92:29:41:39:41:14:2a:43:b1:bb:e5:d4:8c:b3:6e:b7:7b:
+         89:ab:3d:a4:e1:98:45:40:b9:1e:86:7b:b6:3f:55:e3:46:ab:
+         ed:41:45:6a:cc:af:a4:63:54:c8:ab:27:3f:59:67:8a:f5:60:
+         1b:63:b7:bb:27:94:00:8f:ee:f9:31:53:59:98:85:76:77:db:
+         dd:39:6f:1a:61:fe:0d:68:88:20:a8:d5:2b:c7:6a:08:5b:f1:
+         ac:9a
 -----BEGIN CERTIFICATE-----
-MIIDMjCCApugAwIBAgIBAjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDJfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDJf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0JO09/nDIUbaNJniQanf/
-3n1YHwD+Y7CI3kYY0haEr2WhmpexOBRr55jBeW8K27KSbtZ+zctVOaAn6QbIRRks
-FsNP9a/N9hTLhVlcG4Pc9rZNMAYoZvYrGQM/AN4Jd1CimLFzPdV58H55K452lslD
-z0SaFS4JAEemWvA1i4i3YQIDAQABo4HbMIHYMB0GA1UdDgQWBBTCYvYn5pH7mF9V
-bhHubuAEdqDnATCBkgYDVR0jBIGKMIGHgBTAnia91vv7v/rOM5LKTiXP7J66ZqFs
-pGowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAMTA3RhMTESMBAGCSqG
-SIb3DQEJARYDdGExggEBMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBCwUAA4GBAKD3x/lrz25sNnSyR412BHSI3jvLLeds/XhD
-DymcupKX3WKJiDHHm7JGQkrgwT+oX2OG0XXZR0bR04fcPnoizowFUZUZxSuDDwJM
-VKboqcl5vQvw500xd+YH6h2xNUgwFSjCLTZC/ekRhX+wn3uatg4dlAI6O8G4vcjJ
-jca2mhEX
+MIIDNTCCAp6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTExFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoMl90YTExFjAUBgkqhkiG9w0BCQEWB2No
+Ml90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL7BhjDSowL0ADP8VPNv
+1yeZe1fi8ZP4WBzrmsxrI5u4qREnUJvXp8L+i+5U0F3iJARHHMxUtYm7pibeuTtz
+GWdemogS3ofeDibJDEQTZSPNfzTWu0Ugh366SNUvP/zWjde3sp9C73aaz8MBrrmP
+ADPqKBXKMNqPJXakVSoserjrAgMBAAGjgdwwgdkwHQYDVR0OBBYEFBIwCnT93nHP
+SnceHlde+HZx11ueMIGTBgNVHSMEgYswgYiAFDZGLYobi87BHQI3ueyl/7pzruVI
+oW2kazBpMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMTESMBAG
+CSqGSIb3DQEJARYDdGExggEBMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAI6lKsk/4B+pjKNFuA0ONUPD1v72vA12
+8CbWq+c5MJJvzI4OX7CSKUE5QRQqQ7G75dSMs263e4mrPaThmEVAuR6Ge7Y/VeNG
+q+1BRWrMr6RjVMirJz9ZZ4r1YBtjt7snlACP7vkxU1mYhXZ32905bxph/g1oiCCo
+1SvHaghb8aya
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch3_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch3_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 3 (0x3)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch2_ta1/emailAddress=ch2_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ec:46:7e:e1:35:25:1c:92:37:51:fb:99:13:70:
-                    e7:89:d6:3e:3b:28:59:98:96:e2:81:87:3f:99:85:
-                    5d:06:0a:d0:df:04:3e:fe:8a:00:f5:aa:91:93:a9:
-                    48:5c:59:b9:cb:f2:94:dd:fe:71:11:af:9c:7e:71:
-                    ce:96:21:cc:fd:27:e9:7e:82:2b:84:d5:73:3a:89:
-                    c0:09:2b:aa:16:d6:5f:7a:ac:81:d1:9b:18:4d:85:
-                    1e:33:2f:86:a8:c3:7a:2d:68:24:30:1d:7f:db:c5:
-                    30:0c:bf:d9:72:04:98:9d:ff:2f:cf:94:e7:2e:88:
-                    b2:47:fd:ee:c1:d2:e0:e9:39
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d3:5b:f1:93:8f:01:0f:c0:25:d9:07:f1:70:29:
+                    1e:56:0b:ff:93:70:1d:45:02:ef:52:22:8a:04:c9:
+                    08:85:33:db:77:c3:33:d9:5c:fe:30:2a:a8:ac:9d:
+                    d8:97:dc:b4:69:51:5e:d1:c9:86:68:a7:e3:ab:35:
+                    e2:8f:d0:36:1b:67:be:50:88:66:7c:4b:4f:d3:86:
+                    78:92:d9:c5:62:c7:04:a3:d7:9e:8c:c3:ca:48:41:
+                    52:3f:a1:82:dc:f2:bb:d2:9c:a9:58:25:3a:0b:73:
+                    b6:41:ab:6a:c3:6a:70:ce:a1:20:0f:b6:db:e0:91:
+                    0b:0a:1f:dc:02:f4:ed:32:0f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                D0:F9:37:92:54:28:C0:40:AE:62:94:51:42:6A:7C:8E:37:5F:AC:A8
+                8F:2A:82:4C:1E:39:97:C3:4A:6A:52:FC:D4:CB:E6:37:CE:12:91:59
             X509v3 Authority Key Identifier: 
-                keyid:C2:62:F6:27:E6:91:FB:98:5F:55:6E:11:EE:6E:E0:04:76:A0:E7:01
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta1/emailAddress=ch1_ta1
+                keyid:12:30:0A:74:FD:DE:71:CF:4A:77:1E:1E:57:5E:F8:76:71:D7:5B:9E
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta1/emailAddress=ch1_ta1
                 serial:02
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        3e:60:a3:23:dc:e2:bc:b9:60:14:1b:e5:dd:af:bd:f2:8b:cb:
-        f1:55:8a:03:e1:ee:82:f2:d2:7b:3d:0d:4a:56:f5:61:80:97:
-        27:90:c0:05:e4:e9:18:e8:29:97:eb:aa:6b:d2:4a:0c:b8:c0:
-        f3:cf:a5:4f:95:dd:46:03:96:eb:29:e4:bb:22:fe:5b:34:da:
-        02:8c:36:12:b6:9c:3e:a4:e4:d7:33:a3:ac:d8:45:65:75:37:
-        68:55:63:eb:d8:d1:6f:28:66:fc:ac:ad:15:08:67:41:41:32:
-        3f:ed:60:fc:01:e1:b9:88:24:95:1e:9c:ee:69:3b:d2:91:f8:
-        ef:81
+         94:2a:c9:c9:21:b7:bd:3a:72:31:65:89:16:11:00:e1:46:38:
+         16:b6:cd:d4:04:b3:18:71:3d:8d:4a:0a:ec:02:4e:ee:58:2c:
+         7d:d2:0b:6f:c6:d2:be:a6:f9:1c:e7:c2:76:2a:09:87:d2:06:
+         8e:0d:aa:66:70:e8:8f:ff:7d:1d:e4:4e:9b:58:71:f7:40:46:
+         a8:79:9d:86:6c:bf:64:3b:76:66:6c:08:21:62:09:6d:7b:f4:
+         5d:e2:8e:1c:e6:e3:56:71:de:b7:fe:92:07:f0:7e:13:e0:ad:
+         62:b3:08:9f:06:7e:9b:f6:8b:76:96:df:86:30:0e:bb:ef:9b:
+         b3:07
 -----BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIBAzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gyX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gyX3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDNfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDNf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsRn7hNSUckjdR+5kTcOeJ
-1j47KFmYluKBhz+ZhV0GCtDfBD7+igD1qpGTqUhcWbnL8pTd/nERr5x+cc6WIcz9
-J+l+giuE1XM6icAJK6oW1l96rIHRmxhNhR4zL4aow3otaCQwHX/bxTAMv9lyBJid
-/y/PlOcuiLJH/e7B0uDpOQIDAQABo4HjMIHgMB0GA1UdDgQWBBTQ+TeSVCjAQK5i
-lFFCanyON1+sqDCBmgYDVR0jBIGSMIGPgBTCYvYn5pH7mF9VbhHubuAEdqDnAaF0
-pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxEDAOBgNVBAMUB2NoMV90YTExFjAU
-BgkqhkiG9w0BCQEWB2NoMV90YTGCAQIwEgYDVR0TAQH/BAgwBgEB/wIBAjAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAPmCjI9zivLlgFBvl3a+98ovL
-8VWKA+HugvLSez0NSlb1YYCXJ5DABeTpGOgpl+uqa9JKDLjA88+lT5XdRgOW6ynk
-uyL+WzTaAow2EracPqTk1zOjrNhFZXU3aFVj69jRbyhm/KytFQhnQUEyP+1g/AHh
-uYgklR6c7mk70pH474E=
+MIIDPTCCAqagAwIBAgIBAzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMl90YTExFjAUBgkqhkiG9w0BCQEWB2NoMl90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTExFjAUBgkqhkiG9w0BCQEWB2No
+M190YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANNb8ZOPAQ/AJdkH8XAp
+HlYL/5NwHUUC71IiigTJCIUz23fDM9lc/jAqqKyd2JfctGlRXtHJhmin46s14o/Q
+NhtnvlCIZnxLT9OGeJLZxWLHBKPXnozDykhBUj+hgtzyu9KcqVglOgtztkGrasNq
+cM6hIA+22+CRCwof3AL07TIPAgMBAAGjgeQwgeEwHQYDVR0OBBYEFI8qgkweOZfD
+SmpS/NTL5jfOEpFZMIGbBgNVHSMEgZMwgZCAFBIwCnT93nHPSnceHlde+HZx11ue
+oXWkczBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTEx
+FjAUBgkqhkiG9w0BCQEWB2NoMV90YTGCAQIwEgYDVR0TAQH/BAgwBgEB/wIBAjAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAlCrJySG3vTpyMWWJFhEA
+4UY4FrbN1ASzGHE9jUoK7AJO7lgsfdILb8bSvqb5HOfCdioJh9IGjg2qZnDoj/99
+HeROm1hx90BGqHmdhmy/ZDt2ZmwIIWIJbXv0XeKOHObjVnHet/6SB/B+E+CtYrMI
+nwZ+m/aLdpbfhjAOu++bswc=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch4.3_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch4.3_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 12 (0xc)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e2:d0:ba:91:89:c2:26:21:4c:9d:68:63:7e:87:
-                    9b:9e:31:52:4d:30:b3:2b:9c:26:85:40:63:69:66:
-                    7c:5d:52:73:d3:61:01:78:18:0e:46:21:6d:34:1f:
-                    84:e2:42:72:9c:ef:68:7e:49:a6:3d:62:82:f3:0f:
-                    95:74:13:88:a1:d1:bf:00:93:10:24:d2:fc:bd:1a:
-                    a7:4f:f2:24:b2:60:d5:57:96:62:09:c8:94:5f:b6:
-                    57:38:f1:00:62:97:d9:a2:35:d6:95:47:97:78:48:
-                    17:77:2b:c4:62:fa:00:0c:f1:d4:6e:e1:74:25:38:
-                    0f:5c:57:af:92:37:e7:18:21
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:dd:ec:30:ee:2a:39:ec:cf:6d:c0:b9:04:f2:e0:
+                    0f:04:7a:e9:ab:f0:27:28:d9:6b:70:e5:c4:9b:c6:
+                    1b:bb:71:16:42:d5:47:80:60:2c:f6:26:90:9d:0b:
+                    cc:1b:18:bf:54:98:c7:e8:ba:bf:a2:5d:60:c9:b3:
+                    09:79:de:ee:02:d9:b9:70:22:c3:cd:60:04:5f:1e:
+                    df:a3:8f:43:73:ea:68:5e:df:70:86:aa:67:75:5a:
+                    59:ef:cd:0d:e4:f1:6d:ee:d3:bb:04:c7:52:e5:72:
+                    53:2a:e2:f3:02:65:7f:53:46:c3:15:e4:cb:8d:1b:
+                    cf:8f:1e:8d:6d:04:07:09:77
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9E:F5:29:85:12:A6:F3:26:1C:25:81:F4:75:82:9E:80:B1:33:8D:BE
+                16:06:DB:79:36:82:5D:96:BA:FD:0F:C3:3D:E2:64:BA:E6:03:E6:3A
             X509v3 Authority Key Identifier: 
-                keyid:D0:F9:37:92:54:28:C0:40:AE:62:94:51:42:6A:7C:8E:37:5F:AC:A8
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
+                keyid:8F:2A:82:4C:1E:39:97:C3:4A:6A:52:FC:D4:CB:E6:37:CE:12:91:59
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
                 serial:03
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        87:45:e7:89:11:9c:2a:47:8e:63:84:93:80:3f:03:27:65:dd:
-        19:50:aa:1f:e5:50:67:c9:d8:3f:1e:74:85:fb:46:b2:c8:1c:
-        22:cb:a9:d0:d4:26:60:06:6e:9e:15:7e:d3:5a:06:8d:95:26:
-        36:10:16:e9:08:92:fb:9a:45:14:99:b5:ac:ee:06:d2:6b:c4:
-        21:63:13:b4:55:1f:c3:35:02:56:9e:7d:d1:4a:1f:45:91:f6:
-        c1:28:c3:f9:aa:e0:31:63:cc:c0:5d:77:7f:54:65:98:a3:39:
-        eb:73:83:ab:74:f3:c2:3e:be:9b:fe:18:75:3c:44:ad:a2:fc:
-        c2:42
+         26:70:cc:69:5b:26:cf:cc:1d:19:b6:61:20:59:22:d7:fa:a3:
+         d9:fa:e2:e3:87:07:24:5a:41:5b:7e:21:4c:f5:32:d2:d8:fd:
+         a5:17:b5:c4:0f:9a:d2:a6:dd:45:9f:13:2a:30:8a:75:5b:69:
+         9b:dd:06:85:3e:19:06:7d:5d:0f:3f:15:64:76:41:e9:a8:30:
+         bd:d7:26:66:07:60:da:e2:ec:80:44:6d:a5:8b:fd:9a:3a:0b:
+         92:b9:6c:f8:72:cc:7e:24:78:a2:a3:f7:ef:47:7a:aa:8b:89:
+         45:33:ff:01:bd:a0:d0:18:ea:a1:46:98:b5:7f:00:e1:00:8e:
+         7e:68
 -----BEGIN CERTIFICATE-----
-MIIDPjCCAqegAwIBAgIBDDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gzX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3Rh
-MTAeFw0xMTA0MTEyMjM3NDJaFw0xNDAxMDUyMjM3NDJaMHQxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRIwEAYDVQQDFAljaDQuM190YTExGDAWBgkqhkiG9w0BCQEWCWNo
-NC4zX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4tC6kYnCJiFMnWhj
-foebnjFSTTCzK5wmhUBjaWZ8XVJz02EBeBgORiFtNB+E4kJynO9ofkmmPWKC8w+V
-dBOIodG/AJMQJNL8vRqnT/IksmDVV5ZiCciUX7ZXOPEAYpfZojXWlUeXeEgXdyvE
-YvoADPHUbuF0JTgPXFevkjfnGCECAwEAAaOB4zCB4DAdBgNVHQ4EFgQUnvUphRKm
-8yYcJYH0dYKegLEzjb4wgZoGA1UdIwSBkjCBj4AU0Pk3klQowECuYpRRQmp8jjdf
-rKihdKRyMHAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYD
-VQQHEwpNZW5sbyBQYXJrMQ0wCwYDVQQKEwRwa2c1MRAwDgYDVQQDFAdjaDJfdGEx
-MRYwFAYJKoZIhvcNAQkBFgdjaDJfdGExggEDMBIGA1UdEwEB/wQIMAYBAf8CAQAw
-DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAIdF54kRnCpHjmOEk4A/
-Aydl3RlQqh/lUGfJ2D8edIX7RrLIHCLLqdDUJmAGbp4VftNaBo2VJjYQFukIkvua
-RRSZtazuBtJrxCFjE7RVH8M1AlaefdFKH0WR9sEow/mq4DFjzMBdd39UZZijOetz
-g6t088I+vpv+GHU8RK2i/MJC
+MIIDQTCCAqqgAwIBAgIBDDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTExFjAUBgkqhkiG9w0BCQEWB2NoM190
+YTEwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjB1MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEjAQBgNVBAMMCWNoNC4zX3RhMTEYMBYGCSqGSIb3DQEJARYJ
+Y2g0LjNfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDd7DDuKjnsz23A
+uQTy4A8Eeumr8Cco2Wtw5cSbxhu7cRZC1UeAYCz2JpCdC8wbGL9UmMfour+iXWDJ
+swl53u4C2blwIsPNYARfHt+jj0Nz6mhe33CGqmd1WlnvzQ3k8W3u07sEx1LlclMq
+4vMCZX9TRsMV5MuNG8+PHo1tBAcJdwIDAQABo4HkMIHhMB0GA1UdDgQWBBQWBtt5
+NoJdlrr9D8M94mS65gPmOjCBmwYDVR0jBIGTMIGQgBSPKoJMHjmXw0pqUvzUy+Y3
+zhKRWaF1pHMwcTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQDDAdjaDJf
+dGExMRYwFAYJKoZIhvcNAQkBFgdjaDJfdGExggEDMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBACZwzGlbJs/MHRm2
+YSBZItf6o9n64uOHByRaQVt+IUz1MtLY/aUXtcQPmtKm3UWfEyowinVbaZvdBoU+
+GQZ9XQ8/FWR2QemoML3XJmYHYNri7IBEbaWL/Zo6C5K5bPhyzH4keKKj9+9HeqqL
+iUUz/wG9oNAY6qFGmLV/AOEAjn5o
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch4_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch4_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 4 (0x4)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch3_ta1/emailAddress=ch3_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:f5:af:af:99:95:f3:52:3b:eb:be:62:e6:eb:9f:
-                    c5:f8:ff:8f:0c:d2:e3:c7:06:b1:45:ca:ff:8c:fc:
-                    3d:bc:f4:6d:e3:f9:ac:12:69:d5:a1:6f:02:52:ad:
-                    50:34:7e:cc:a7:ee:82:04:b3:5b:e6:be:cc:44:e6:
-                    b8:d2:fc:1d:2a:80:d8:0c:c1:3c:4f:95:31:68:8a:
-                    fb:2b:e2:aa:b2:54:7c:3a:d3:86:6d:5f:20:b6:29:
-                    23:ae:74:09:fd:9a:d3:45:e2:e3:2a:62:1f:91:fd:
-                    a2:b1:2f:26:68:fb:4d:69:fb:66:1f:0b:4b:1a:52:
-                    ac:e1:8b:69:b1:16:96:89:13
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:af:c3:8b:39:3e:21:56:8a:d6:97:1b:c7:aa:c7:
+                    51:9e:e9:cf:15:1f:24:e6:91:92:81:b3:7d:30:eb:
+                    ea:12:30:13:03:d0:b9:60:41:8b:eb:88:f4:1f:e5:
+                    43:cf:b5:ae:47:7a:4d:46:6e:f8:16:42:67:db:20:
+                    e4:0d:1f:96:4f:21:59:95:f6:70:33:32:45:81:18:
+                    5e:a5:5b:fd:4a:e6:d7:97:cf:45:65:e7:74:79:5f:
+                    a5:9f:e1:c7:a5:d0:5d:24:a7:32:18:68:13:57:4c:
+                    cf:78:12:6f:9f:5c:e6:4d:be:89:24:4b:29:d8:02:
+                    b2:f9:f9:13:cf:92:43:0f:e5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B2:A1:C2:1D:B7:20:56:20:8C:64:DA:BA:06:C6:5A:E4:0A:23:6E:01
+                54:8A:14:10:0B:AF:89:DC:1E:65:8A:17:37:6A:AC:D2:2B:6C:27:5C
             X509v3 Authority Key Identifier: 
-                keyid:D0:F9:37:92:54:28:C0:40:AE:62:94:51:42:6A:7C:8E:37:5F:AC:A8
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
+                keyid:8F:2A:82:4C:1E:39:97:C3:4A:6A:52:FC:D4:CB:E6:37:CE:12:91:59
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
                 serial:03
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        d5:54:78:2a:2c:5f:82:26:03:07:71:54:04:2d:81:e5:dd:a6:
-        b1:92:8a:37:5f:52:f0:13:cd:35:4a:2b:a7:24:9c:44:7b:ac:
-        1d:3c:52:82:e4:15:85:a9:d4:19:4d:55:c6:85:74:ac:2a:6c:
-        42:9f:92:d9:86:02:d8:90:a8:53:28:31:e1:e2:33:1b:d5:05:
-        c3:f7:94:86:10:5d:78:62:96:a7:d1:e3:b4:be:0e:e6:8c:03:
-        ef:4c:03:96:4e:6d:9a:b2:32:55:46:20:cf:41:d1:4f:db:c6:
-        57:34:df:51:d4:b9:9d:bf:d1:20:a5:e6:a0:34:ef:ab:e8:e9:
-        93:ce
+         6a:17:96:16:a6:3f:96:b7:8e:fb:e5:d7:14:f9:a8:8e:52:16:
+         04:0d:58:4b:f7:c6:70:c4:3f:d3:2b:13:24:7b:47:2d:cf:89:
+         59:bf:5c:6c:17:31:46:c4:17:e5:41:fe:5e:3f:ec:44:2e:92:
+         94:eb:3b:c9:ff:d1:5e:c0:ad:d3:51:2b:12:11:87:b2:17:2f:
+         40:5a:ac:76:f0:0f:ed:cd:ca:be:b6:b2:ef:bf:d4:79:04:e0:
+         ed:88:33:96:b0:a4:27:41:a7:31:0b:c4:d9:6a:ad:7d:82:bb:
+         63:15:2a:00:8e:60:af:ee:a6:8a:d3:65:6a:b8:f9:7e:0e:cd:
+         bf:d5
 -----BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gzX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDRfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDRf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1r6+ZlfNSO+u+Yubrn8X4
-/48M0uPHBrFFyv+M/D289G3j+awSadWhbwJSrVA0fsyn7oIEs1vmvsxE5rjS/B0q
-gNgMwTxPlTFoivsr4qqyVHw604ZtXyC2KSOudAn9mtNF4uMqYh+R/aKxLyZo+01p
-+2YfC0saUqzhi2mxFpaJEwIDAQABo4HjMIHgMB0GA1UdDgQWBBSyocIdtyBWIIxk
-2roGxlrkCiNuATCBmgYDVR0jBIGSMIGPgBTQ+TeSVCjAQK5ilFFCanyON1+sqKF0
-pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxEDAOBgNVBAMUB2NoMl90YTExFjAU
-BgkqhkiG9w0BCQEWB2NoMl90YTGCAQMwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEA1VR4KixfgiYDB3FUBC2B5d2m
-sZKKN19S8BPNNUorpyScRHusHTxSguQVhanUGU1VxoV0rCpsQp+S2YYC2JCoUygx
-4eIzG9UFw/eUhhBdeGKWp9HjtL4O5owD70wDlk5tmrIyVUYgz0HRT9vGVzTfUdS5
-nb/RIKXmoDTvq+jpk84=
+MIIDPTCCAqagAwIBAgIBBDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTExFjAUBgkqhkiG9w0BCQEWB2NoM190
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2No
+NF90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK/Dizk+IVaK1pcbx6rH
+UZ7pzxUfJOaRkoGzfTDr6hIwEwPQuWBBi+uI9B/lQ8+1rkd6TUZu+BZCZ9sg5A0f
+lk8hWZX2cDMyRYEYXqVb/Urm15fPRWXndHlfpZ/hx6XQXSSnMhhoE1dMz3gSb59c
+5k2+iSRLKdgCsvn5E8+SQw/lAgMBAAGjgeQwgeEwHQYDVR0OBBYEFFSKFBALr4nc
+HmWKFzdqrNIrbCdcMIGbBgNVHSMEgZMwgZCAFI8qgkweOZfDSmpS/NTL5jfOEpFZ
+oXWkczBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoMl90YTEx
+FjAUBgkqhkiG9w0BCQEWB2NoMl90YTGCAQMwEgYDVR0TAQH/BAgwBgEB/wIBATAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAaheWFqY/lreO++XXFPmo
+jlIWBA1YS/fGcMQ/0ysTJHtHLc+JWb9cbBcxRsQX5UH+Xj/sRC6SlOs7yf/RXsCt
+01ErEhGHshcvQFqsdvAP7c3Kvray77/UeQTg7YgzlrCkJ0GnMQvE2WqtfYK7YxUq
+AI5gr+6mitNlarj5fg7Nv9U=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch5.1_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch5.1_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 8 (0x8)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Validity
-            Not Before: Apr 11 22:37:40 2011 GMT
-            Not After : Jan  5 22:37:40 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cc:de:54:ed:78:31:c0:7c:e4:25:98:a3:0d:fa:
-                    77:08:f3:39:c4:9f:88:41:ee:00:a3:35:ed:b6:f0:
-                    cc:a3:fd:0f:ce:3c:70:b5:aa:1e:42:4e:5c:ae:d8:
-                    cb:99:53:ef:1e:49:f9:4c:5f:47:be:d0:e6:e2:f1:
-                    12:29:d5:77:75:88:79:4c:3b:64:05:ba:08:5d:dc:
-                    ed:1f:7f:15:92:69:ec:b9:c9:84:f0:7d:3f:db:66:
-                    34:a5:35:8c:22:9b:5f:4b:19:83:15:35:49:7c:4b:
-                    77:35:2c:c4:58:34:15:f1:66:99:ce:65:d3:06:b7:
-                    d2:35:d7:96:39:ee:d8:08:91
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:9d:91:87:82:56:78:7f:64:32:62:7e:ee:6c:38:
+                    f2:a2:f6:34:ba:a9:ec:bb:6e:0f:87:ab:46:a4:37:
+                    ce:80:f1:b5:8b:9b:0a:4b:2a:b6:46:9b:f1:47:c0:
+                    6b:85:7f:64:08:61:ac:53:d4:3b:ce:54:2a:6d:a4:
+                    65:cd:a7:dc:a5:3a:33:bf:86:2b:f6:d0:fb:24:80:
+                    56:8f:4f:d4:f9:96:71:f3:86:74:4b:47:38:da:18:
+                    79:ae:d9:5b:9d:09:9e:f7:cb:b4:a7:85:33:85:20:
+                    d3:2a:fc:72:c1:37:62:01:d6:b1:cb:4a:a0:09:c2:
+                    72:ea:fd:b8:5d:03:68:33:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -29,27 +29,27 @@
                 <EMPTY>
 
     Signature Algorithm: sha256WithRSAEncryption
-        22:ec:49:fd:44:5e:9a:b1:55:f7:29:4c:cf:66:ff:1f:ce:d7:
-        e6:31:ae:b5:f3:3b:c9:d8:e4:d4:4a:59:ff:db:9a:88:23:28:
-        14:62:78:03:b8:36:d8:32:56:c6:d2:09:0f:e4:33:ea:02:7f:
-        24:02:fc:4c:58:5c:e7:3a:4c:b6:69:55:bc:5e:c8:3e:c2:97:
-        66:82:74:6a:1c:1e:ae:ae:3d:35:f5:6e:a3:a5:9b:9d:23:d5:
-        da:de:e2:47:ee:ea:78:8a:36:19:73:f5:7f:38:bd:0e:bb:56:
-        3c:c8:21:0e:5a:57:a0:cf:08:50:e6:80:ef:3e:e5:ed:64:69:
-        d6:6d
+         11:3c:6b:22:14:f6:1a:18:8b:59:a4:8d:38:d6:6f:48:8a:01:
+         e2:d3:9d:6a:26:40:61:d3:9b:ce:8a:ab:b9:25:c4:89:c4:f9:
+         98:1e:6c:f5:1c:d7:f7:6a:c9:7b:48:ba:d7:e0:03:59:41:4d:
+         29:28:7d:2d:61:c5:7f:7f:8c:2f:30:2b:c6:6e:16:31:7d:45:
+         d2:2a:83:ea:fc:25:92:1f:cb:85:28:0a:f4:2c:a0:c4:c2:fc:
+         52:43:53:d1:46:e7:fd:3c:0a:9b:11:45:0f:09:2e:c6:93:26:
+         72:c9:20:28:7a:db:18:55:1b:15:70:1f:bc:0e:ab:18:c1:f8:
+         64:03
 -----BEGIN CERTIFICATE-----
-MIICezCCAeSgAwIBAgIBCDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g0X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g0X3Rh
-MTAeFw0xMTA0MTEyMjM3NDBaFw0xNDAxMDUyMjM3NDBaMHQxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRIwEAYDVQQDFAljaDUuMV90YTExGDAWBgkqhkiG9w0BCQEWCWNo
-NS4xX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzN5U7XgxwHzkJZij
-Dfp3CPM5xJ+IQe4AozXttvDMo/0PzjxwtaoeQk5crtjLmVPvHkn5TF9HvtDm4vES
-KdV3dYh5TDtkBboIXdztH38VkmnsucmE8H0/22Y0pTWMIptfSxmDFTVJfEt3NSzE
-WDQV8WaZzmXTBrfSNdeWOe7YCJECAwEAAaMhMB8wDwYDVR0TAQH/BAUwAwEB/zAM
-BgNVHRIBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4GBACLsSf1EXpqxVfcpTM9m/x/O
-1+YxrrXzO8nY5NRKWf/bmogjKBRieAO4NtgyVsbSCQ/kM+oCfyQC/ExYXOc6TLZp
-VbxeyD7Cl2aCdGocHq6uPTX1bqOlm50j1dre4kfu6niKNhlz9X84vQ67VjzIIQ5a
-V6DPCFDmgO8+5e1kadZt
+MIICfTCCAeagAwIBAgIBCDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2NoNF90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB1MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4xX3RhMTEYMBYGCSqGSIb3DQEJARYJ
+Y2g1LjFfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdkYeCVnh/ZDJi
+fu5sOPKi9jS6qey7bg+Hq0akN86A8bWLmwpLKrZGm/FHwGuFf2QIYaxT1DvOVCpt
+pGXNp9ylOjO/hiv20PskgFaPT9T5lnHzhnRLRzjaGHmu2VudCZ73y7SnhTOFINMq
+/HLBN2IB1rHLSqAJwnLq/bhdA2gzfQIDAQABoyEwHzAPBgNVHRMBAf8EBTADAQH/
+MAwGA1UdEgEB/wQCMAAwDQYJKoZIhvcNAQELBQADgYEAETxrIhT2GhiLWaSNONZv
+SIoB4tOdaiZAYdObzoqruSXEicT5mB5s9RzX92rJe0i61+ADWUFNKSh9LWHFf3+M
+LzArxm4WMX1F0iqD6vwlkh/LhSgK9CygxML8UkNT0Ubn/TwKmxFFDwkuxpMmcskg
+KHrbGFUbFXAfvA6rGMH4ZAM=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch5.2_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch5.2_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 10 (0xa)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Validity
-            Not Before: Apr 11 22:37:41 2011 GMT
-            Not After : Jan  5 22:37:41 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:27:9b:4d:c3:41:cf:96:d4:f0:21:59:1b:77:
-                    ce:54:81:dc:05:57:1f:56:69:8c:5f:58:3f:88:4a:
-                    c6:73:bd:a9:4a:d0:f8:a3:33:1b:4f:d8:94:b5:d3:
-                    95:bd:00:06:d1:18:e8:ea:9e:41:ad:06:ea:c6:cc:
-                    9f:93:a7:c4:a0:3e:05:62:4c:3f:1c:88:79:a0:a1:
-                    eb:f3:94:d0:1b:8c:a8:9f:4c:3b:37:80:06:6b:00:
-                    e7:30:6c:d4:c2:51:27:7f:1a:e5:95:a7:1c:15:d6:
-                    98:0e:1f:2f:28:b7:a7:75:60:56:8e:74:a0:86:9a:
-                    06:d5:23:0f:11:83:02:95:73
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a0:b5:e8:50:6e:0b:2e:be:8a:39:95:a1:f3:8f:
+                    03:1c:da:d3:74:5c:9d:ed:34:54:5e:3f:ac:e2:91:
+                    40:50:5e:d7:e3:bc:b1:8e:a6:62:d1:0b:33:e2:59:
+                    d7:67:f1:b7:af:f9:61:37:b1:24:aa:6f:67:e0:4f:
+                    ef:5d:a2:72:42:70:41:1e:32:e5:1a:94:4f:de:60:
+                    6c:e7:e1:96:99:82:d0:35:f2:40:03:de:92:10:f3:
+                    4f:91:e8:78:24:a1:ef:92:da:7b:49:4b:57:03:80:
+                    57:d8:fc:41:60:8a:f0:e6:55:fe:67:55:5e:68:bf:
+                    fe:fd:23:2b:ab:94:cb:12:c3
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                89:81:B5:75:FE:47:C0:C6:F5:28:97:38:D7:FC:58:E9:62:8D:31:C0
+                A4:07:01:64:2E:FC:65:F5:BC:44:82:AB:87:E5:17:5F:91:F5:8A:DD
             X509v3 Authority Key Identifier: 
-                keyid:B2:A1:C2:1D:B7:20:56:20:8C:64:DA:BA:06:C6:5A:E4:0A:23:6E:01
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+                keyid:54:8A:14:10:0B:AF:89:DC:1E:65:8A:17:37:6A:AC:D2:2B:6C:27:5C
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
                 serial:04
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        63:3d:1b:46:ff:99:65:19:01:e8:fc:b1:a4:22:30:8c:da:43:
-        c5:79:05:0c:60:3a:0f:4b:3f:53:63:f0:12:63:a9:ee:63:10:
-        15:aa:f4:ae:13:10:4f:43:b4:31:8c:84:f5:c1:0b:86:ab:7b:
-        78:7e:7c:9b:3c:26:56:8e:aa:54:3b:ad:7e:be:23:3e:8f:8c:
-        cf:47:22:7d:f6:83:53:ca:72:f1:02:9a:07:4a:f7:94:00:1b:
-        d2:57:80:6d:c9:37:ab:58:d6:54:71:90:de:c9:3f:ee:c3:b5:
-        5c:0e:46:09:30:cf:95:58:2f:07:64:fe:27:70:9e:d0:29:dd:
-        f5:25
+         04:21:55:e4:d4:f9:07:b1:55:dd:d3:6c:5e:17:f5:84:36:49:
+         08:3f:96:1b:79:f6:1f:c8:aa:0a:e2:64:bd:90:e1:00:89:23:
+         94:1c:d9:c8:7d:a6:5e:48:4f:e4:6a:9d:c1:2a:b9:6c:6b:ed:
+         24:14:54:9f:87:bf:a1:d3:fd:73:39:eb:c4:88:85:7e:f5:35:
+         91:3d:85:ad:9e:c5:1f:fc:f6:06:71:ce:3f:dc:12:e8:6c:a6:
+         61:07:b8:d0:78:03:de:e6:be:e9:67:59:2f:70:24:c3:54:4e:
+         b3:5c:6e:54:8e:04:c3:b6:f1:83:1b:8d:7f:e8:b7:5b:3d:b2:
+         26:fe
 -----BEGIN CERTIFICATE-----
-MIIDPjCCAqegAwIBAgIBCjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g0X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g0X3Rh
-MTAeFw0xMTA0MTEyMjM3NDFaFw0xNDAxMDUyMjM3NDFaMHQxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRIwEAYDVQQDFAljaDUuMl90YTExGDAWBgkqhkiG9w0BCQEWCWNo
-NS4yX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxSebTcNBz5bU8CFZ
-G3fOVIHcBVcfVmmMX1g/iErGc72pStD4ozMbT9iUtdOVvQAG0Rjo6p5BrQbqxsyf
-k6fEoD4FYkw/HIh5oKHr85TQG4yon0w7N4AGawDnMGzUwlEnfxrllaccFdaYDh8v
-KLendWBWjnSghpoG1SMPEYMClXMCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUiYG1df5H
-wMb1KJc41/xY6WKNMcAwgZoGA1UdIwSBkjCBj4AUsqHCHbcgViCMZNq6BsZa5Aoj
-bgGhdKRyMHAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYD
-VQQHEwpNZW5sbyBQYXJrMQ0wCwYDVQQKEwRwa2c1MRAwDgYDVQQDFAdjaDNfdGEx
-MRYwFAYJKoZIhvcNAQkBFgdjaDNfdGExggEEMBIGA1UdEwEB/wQIMAYBAf8CAQEw
-DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAGM9G0b/mWUZAej8saQi
-MIzaQ8V5BQxgOg9LP1Nj8BJjqe5jEBWq9K4TEE9DtDGMhPXBC4are3h+fJs8JlaO
-qlQ7rX6+Iz6PjM9HIn32g1PKcvECmgdK95QAG9JXgG3JN6tY1lRxkN7JP+7DtVwO
-Rgkwz5VYLwdk/idwntAp3fUl
+MIIDQTCCAqqgAwIBAgIBCjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2NoNF90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB1MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4yX3RhMTEYMBYGCSqGSIb3DQEJARYJ
+Y2g1LjJfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgtehQbgsuvoo5
+laHzjwMc2tN0XJ3tNFReP6zikUBQXtfjvLGOpmLRCzPiWddn8bev+WE3sSSqb2fg
+T+9donJCcEEeMuUalE/eYGzn4ZaZgtA18kAD3pIQ80+R6Hgkoe+S2ntJS1cDgFfY
+/EFgivDmVf5nVV5ov/79IyurlMsSwwIDAQABo4HkMIHhMB0GA1UdDgQWBBSkBwFk
+Lvxl9bxEgquH5RdfkfWK3TCBmwYDVR0jBIGTMIGQgBRUihQQC6+J3B5lihc3aqzS
+K2wnXKF1pHMwcTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQDDAdjaDNf
+dGExMRYwFAYJKoZIhvcNAQkBFgdjaDNfdGExggEEMBIGA1UdEwEB/wQIMAYBAf8C
+AQEwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4GBAAQhVeTU+QexVd3T
+bF4X9YQ2SQg/lht59h/IqgriZL2Q4QCJI5Qc2ch9pl5IT+RqncEquWxr7SQUVJ+H
+v6HT/XM568SIhX71NZE9ha2exR/89gZxzj/cEuhspmEHuNB4A97mvulnWS9wJMNU
+TrNcblSOBMO28YMbjX/ot1s9sib+
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch5.3_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch5.3_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 13 (0xd)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4.3_ta1/emailAddress=ch4.3_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:be:99:38:81:c2:5f:37:c3:d2:cc:7f:01:19:61:
-                    8d:8b:57:70:3a:2c:36:c1:c8:e4:a6:33:2a:bc:27:
-                    e9:cf:d7:ca:49:90:d2:e0:f1:82:0e:7d:50:aa:e3:
-                    8c:ca:07:61:bf:d3:fd:1e:f3:af:ec:00:dd:d2:ab:
-                    70:6a:1a:5a:00:32:ec:04:a3:a4:25:b1:82:1d:90:
-                    3c:f9:ae:91:90:d7:d6:c2:0e:8d:31:55:62:e2:6b:
-                    10:e0:10:6f:33:93:78:2f:58:b7:46:f4:b9:1a:4c:
-                    fd:81:b2:66:42:95:4b:a1:ff:46:9e:9d:f6:32:56:
-                    63:88:bc:83:43:54:bb:ce:a1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:9a:0b:35:00:7e:06:fd:e2:50:97:7e:d2:c2:b8:
+                    20:2a:d9:bb:b8:3f:14:f9:aa:e3:98:dc:b9:49:62:
+                    32:9e:e7:51:16:ef:6b:69:59:7e:0f:c3:50:08:3d:
+                    dc:23:18:37:fa:70:cc:45:b8:47:1e:49:ef:18:15:
+                    47:8e:e6:c9:65:64:02:a8:f5:2a:d1:ef:3a:91:8f:
+                    5a:52:21:46:8f:61:87:55:c9:61:ea:e8:98:18:c5:
+                    99:1f:bd:43:02:13:a6:bf:c0:cd:d9:a5:ee:40:a3:
+                    05:bf:18:28:57:f6:4e:21:d0:89:a1:21:1c:39:ed:
+                    2d:ed:45:f0:da:75:37:da:7b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                9F:45:5B:75:2A:5E:64:78:D2:D9:6F:34:3C:19:AE:27:DE:D7:6C:98
+                A5:4B:BC:BC:6C:A7:1D:7E:CB:31:E5:DF:BE:24:BE:B9:86:28:DE:68
             X509v3 Authority Key Identifier: 
-                keyid:9E:F5:29:85:12:A6:F3:26:1C:25:81:F4:75:82:9E:80:B1:33:8D:BE
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+                keyid:16:06:DB:79:36:82:5D:96:BA:FD:0F:C3:3D:E2:64:BA:E6:03:E6:3A
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
                 serial:0C
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        62:7d:64:11:6a:5f:cd:6d:09:ae:5c:5f:d7:ef:5e:08:1f:c0:
-        6d:b0:b5:a1:28:74:88:95:10:93:2b:50:a4:7f:f3:92:3c:75:
-        23:ad:4b:e6:bd:ae:62:35:74:1c:0f:fd:00:e4:e7:e2:53:80:
-        b9:c5:30:1e:47:83:39:a5:88:3d:9b:a2:ee:86:27:94:cb:f5:
-        57:ba:91:ce:70:d7:12:a0:61:39:64:af:70:91:12:41:5e:4c:
-        7e:5d:5e:b0:42:05:31:e5:13:fd:bc:86:cc:b6:bc:4e:4c:69:
-        b6:2f:0e:63:80:16:c2:6d:7c:68:07:b6:a7:b4:04:ff:0b:97:
-        51:ee
+         4b:1b:27:81:60:e8:9c:ca:e9:2b:c6:94:9e:64:d5:1a:44:18:
+         e7:fb:98:cf:a0:10:e3:ae:ad:b3:fa:a6:21:9d:be:35:46:17:
+         e6:42:3f:8c:79:81:c5:46:f4:f8:04:72:02:a5:5c:6a:1f:cf:
+         62:e1:f9:6f:3a:26:5c:7b:13:27:bd:27:e7:8d:e4:75:b0:04:
+         05:84:44:8b:cf:2c:8b:8b:44:35:c7:60:79:91:04:69:cc:35:
+         90:5b:e5:9a:71:cb:6d:65:dd:a1:09:2c:d0:35:69:cc:cf:0a:
+         62:41:8f:18:ac:9e:8f:52:4c:fa:77:14:98:45:ce:06:c5:f9:
+         5d:6a
 -----BEGIN CERTIFICATE-----
-MIIDQjCCAqugAwIBAgIBDTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g0LjNfdGExMRgwFgYJKoZIhvcNAQkBFgljaDQu
-M190YTEwHhcNMTEwNDExMjIzNzQyWhcNMTQwMTA1MjIzNzQyWjB0MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTESMBAGA1UEAxQJY2g1LjNfdGExMRgwFgYJKoZIhvcNAQkB
-FgljaDUuM190YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL6ZOIHCXzfD
-0sx/ARlhjYtXcDosNsHI5KYzKrwn6c/XykmQ0uDxgg59UKrjjMoHYb/T/R7zr+wA
-3dKrcGoaWgAy7ASjpCWxgh2QPPmukZDX1sIOjTFVYuJrEOAQbzOTeC9Yt0b0uRpM
-/YGyZkKVS6H/Rp6d9jJWY4i8g0NUu86hAgMBAAGjgeMwgeAwHQYDVR0OBBYEFJ9F
-W3UqXmR40tlvNDwZrife12yYMIGaBgNVHSMEgZIwgY+AFJ71KYUSpvMmHCWB9HWC
-noCxM42+oXSkcjBwMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTET
-MBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UEAxQHY2gz
-X3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3RhMYIBDDASBgNVHRMBAf8ECDAGAQH/
-AgEAMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQBifWQRal/NbQmu
-XF/X714IH8BtsLWhKHSIlRCTK1Ckf/OSPHUjrUvmva5iNXQcD/0A5OfiU4C5xTAe
-R4M5pYg9m6LuhieUy/VXupHOcNcSoGE5ZK9wkRJBXkx+XV6wQgUx5RP9vIbMtrxO
-TGm2Lw5jgBbCbXxoB7antAT/C5dR7g==
+MIIDRTCCAq6gAwIBAgIBDTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNC4zX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g0
+LjNfdGExMB4XDTEzMTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowdTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRIwEAYDVQQDDAljaDUuM190YTExGDAWBgkqhkiG9w0B
+CQEWCWNoNS4zX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmgs1AH4G
+/eJQl37SwrggKtm7uD8U+arjmNy5SWIynudRFu9raVl+D8NQCD3cIxg3+nDMRbhH
+HknvGBVHjubJZWQCqPUq0e86kY9aUiFGj2GHVclh6uiYGMWZH71DAhOmv8DN2aXu
+QKMFvxgoV/ZOIdCJoSEcOe0t7UXw2nU32nsCAwEAAaOB5DCB4TAdBgNVHQ4EFgQU
+pUu8vGynHX7LMeXfviS+uYYo3mgwgZsGA1UdIwSBkzCBkIAUFgbbeTaCXZa6/Q/D
+PeJkuuYD5jqhdaRzMHExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
+MRQwEgYDVQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEQMA4GA1UEAwwH
+Y2gzX3RhMTEWMBQGCSqGSIb3DQEJARYHY2gzX3RhMYIBDDASBgNVHRMBAf8ECDAG
+AQH/AgEAMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOBgQBLGyeBYOic
+yukrxpSeZNUaRBjn+5jPoBDjrq2z+qYhnb41RhfmQj+MeYHFRvT4BHICpVxqH89i
+4flvOiZcexMnvSfnjeR1sAQFhESLzyyLi0Q1x2B5kQRpzDWQW+WaccttZd2hCSzQ
+NWnMzwpiQY8YrJ6PUkz6dxSYRc4Gxfldag==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/chain_certs/ch5_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/chain_certs/ch5_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,32 +2,32 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 5 (0x5)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch4_ta1/emailAddress=ch4_ta1
         Validity
-            Not Before: Apr 11 22:37:39 2011 GMT
-            Not After : Jan  5 22:37:39 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c3:8d:d0:ab:25:75:ba:f5:20:df:7c:8a:d4:cd:
-                    40:f6:c3:ca:25:11:b5:30:d6:27:fa:e4:a0:11:d6:
-                    aa:32:7d:c8:15:9d:d7:6f:7f:ae:80:de:28:c3:ae:
-                    77:a8:7f:f1:05:e9:6b:bc:63:a9:a6:91:04:3b:79:
-                    6b:96:f2:e0:9a:17:79:d3:04:0a:5f:46:09:b5:6f:
-                    3e:a9:f4:34:47:62:18:f4:28:f7:d9:09:cd:4f:8a:
-                    33:df:9b:69:9b:61:ce:72:c7:35:ed:61:a0:5b:0c:
-                    c1:61:00:0a:ac:83:9a:6a:3c:6d:30:96:eb:77:8c:
-                    28:3f:fc:62:8a:fa:60:8e:17
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:df:c0:ed:cc:df:82:ab:d3:9b:54:8d:56:f7:0d:
+                    e4:d8:b4:ba:03:ef:a3:82:f6:b6:e6:4d:0f:b4:e5:
+                    61:98:88:bd:32:b3:47:21:4b:2c:e8:c3:9a:22:9c:
+                    35:63:a8:4f:2a:c1:47:1a:3a:b2:46:d6:61:4e:87:
+                    2a:13:3a:d8:35:3e:3c:ae:67:43:b8:3d:a9:95:df:
+                    7b:ba:e9:71:ec:31:99:b3:fa:00:96:8c:80:4b:1d:
+                    d9:77:e5:d2:14:9d:95:a2:ce:32:21:d5:2e:67:ae:
+                    b1:08:04:fb:9d:fb:70:16:74:5f:1a:d1:36:77:e8:
+                    4b:68:c3:d8:d4:fb:18:20:31
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                69:C7:BA:72:9C:7F:C3:92:8D:F6:A6:D0:20:48:5A:8E:A7:B6:E7:82
+                B7:43:D6:5A:46:C2:2F:15:50:05:D5:FB:5E:BE:EC:F8:33:9E:EC:EC
             X509v3 Authority Key Identifier: 
-                keyid:B2:A1:C2:1D:B7:20:56:20:8C:64:DA:BA:06:C6:5A:E4:0A:23:6E:01
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+                keyid:54:8A:14:10:0B:AF:89:DC:1E:65:8A:17:37:6A:AC:D2:2B:6C:27:5C
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
                 serial:04
 
             X509v3 Basic Constraints: critical
@@ -35,31 +35,31 @@
             X509v3 Key Usage: critical
                 Certificate Sign, CRL Sign
     Signature Algorithm: sha256WithRSAEncryption
-        e7:9a:14:6b:dc:a5:fa:da:15:2a:f0:b5:87:ef:82:df:2c:b1:
-        8b:f9:f6:a5:a0:e6:d2:86:da:46:69:68:6f:68:26:5c:79:73:
-        21:31:ea:b4:a7:e6:58:c9:12:cd:8c:c0:d0:e2:05:f0:6f:1d:
-        56:e5:3f:4a:32:eb:02:39:b6:6e:cb:c4:e1:d5:21:0f:63:1e:
-        4f:0b:3d:af:ca:5a:7b:2b:9c:7f:51:44:7a:39:73:e5:f2:ba:
-        48:85:20:f9:36:b5:c2:14:44:da:7d:ae:83:2e:b4:d8:f1:77:
-        19:97:c0:c7:8b:e7:62:81:93:75:ed:93:dd:19:4b:36:00:ba:
-        c6:2d
+         96:fb:63:43:cf:70:0a:14:7b:47:4e:37:4b:2f:7c:7f:8c:75:
+         85:bb:e3:44:af:9c:2c:08:c5:9c:4d:c7:59:f1:70:3a:67:82:
+         1c:4c:3c:f7:8b:e7:00:f0:05:db:af:29:79:53:6f:09:a2:ac:
+         ae:4d:e2:df:4a:7d:4e:56:79:8c:85:97:47:14:4e:2f:7e:bd:
+         07:2c:70:01:85:43:3c:18:32:ed:24:36:24:1c:29:e0:0b:ce:
+         86:4d:a7:a9:88:b8:de:f1:0e:a3:13:c1:5c:d7:1b:76:81:c2:
+         3f:63:c3:76:1d:60:f7:e5:43:1f:25:3b:ae:d2:a5:1f:02:fa:
+         8c:a3
 -----BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIBBTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g0X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g0X3Rh
-MTAeFw0xMTA0MTEyMjM3MzlaFw0xNDAxMDUyMjM3MzlaMHAxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRAwDgYDVQQDFAdjaDVfdGExMRYwFAYJKoZIhvcNAQkBFgdjaDVf
-dGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDjdCrJXW69SDffIrUzUD2
-w8olEbUw1if65KAR1qoyfcgVnddvf66A3ijDrneof/EF6Wu8Y6mmkQQ7eWuW8uCa
-F3nTBApfRgm1bz6p9DRHYhj0KPfZCc1PijPfm2mbYc5yxzXtYaBbDMFhAAqsg5pq
-PG0wlut3jCg//GKK+mCOFwIDAQABo4HjMIHgMB0GA1UdDgQWBBRpx7pynH/Dko32
-ptAgSFqOp7bngjCBmgYDVR0jBIGSMIGPgBSyocIdtyBWIIxk2roGxlrkCiNuAaF0
-pHIwcDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcT
-Ck1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxEDAOBgNVBAMUB2NoM190YTExFjAU
-BgkqhkiG9w0BCQEWB2NoM190YTGCAQQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEA55oUa9yl+toVKvC1h++C3yyx
-i/n2paDm0obaRmlob2gmXHlzITHqtKfmWMkSzYzA0OIF8G8dVuU/SjLrAjm2bsvE
-4dUhD2MeTws9r8paeyucf1FEejlz5fK6SIUg+Ta1whRE2n2ugy602PF3GZfAx4vn
-YoGTde2T3RlLNgC6xi0=
+MIIDPTCCAqagAwIBAgIBBTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNF90YTExFjAUBgkqhkiG9w0BCQEWB2NoNF90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjBxMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2No
+NV90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN/A7czfgqvTm1SNVvcN
+5Ni0ugPvo4L2tuZND7TlYZiIvTKzRyFLLOjDmiKcNWOoTyrBRxo6skbWYU6HKhM6
+2DU+PK5nQ7g9qZXfe7rpcewxmbP6AJaMgEsd2Xfl0hSdlaLOMiHVLmeusQgE+537
+cBZ0XxrRNnfoS2jD2NT7GCAxAgMBAAGjgeQwgeEwHQYDVR0OBBYEFLdD1lpGwi8V
+UAXV+16+7PgznuzsMIGbBgNVHSMEgZMwgZCAFFSKFBALr4ncHmWKFzdqrNIrbCdc
+oXWkczBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UE
+BwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxEDAOBgNVBAMMB2NoM190YTEx
+FjAUBgkqhkiG9w0BCQEWB2NoM190YTGCAQQwEgYDVR0TAQH/BAgwBgEB/wIBADAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADgYEAlvtjQ89wChR7R043Sy98
+f4x1hbvjRK+cLAjFnE3HWfFwOmeCHEw894vnAPAF268peVNvCaKsrk3i30p9TlZ5
+jIWXRxROL369ByxwAYVDPBgy7SQ2JBwp4AvOhk2nqYi43vEOoxPBXNcbdoHCP2PD
+dh1g9+VDHyU7rtKlHwL6jKM=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/06.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/06.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 6 (0x6)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
         Validity
-            Not Before: Apr 11 22:37:40 2011 GMT
-            Not After : Jan  5 22:37:40 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5_ta1/emailAddress=cs1_ch5_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5_ta1/emailAddress=cs1_ch5_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e9:6c:6d:b5:1a:ef:fa:b5:f6:42:f6:7e:e6:f3:
-                    3f:11:2f:a7:c9:10:14:67:c9:fb:4b:c4:2f:c4:25:
-                    0d:a3:3c:66:0f:a0:1a:86:d5:19:48:e6:54:a3:a6:
-                    8d:6a:a2:89:a9:a5:ed:e7:49:ae:20:95:39:0c:19:
-                    41:87:e0:63:af:27:92:1d:55:b1:10:ea:b4:6d:5a:
-                    e6:21:78:93:94:e2:06:e6:7d:c6:53:4e:d5:af:82:
-                    08:a1:82:64:c1:57:78:7e:52:18:f6:38:f0:5e:8e:
-                    09:ea:fa:fc:7d:f3:2d:87:5d:a9:8e:ef:87:7a:e5:
-                    97:ef:7b:fb:b4:96:09:6b:17
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ba:a7:a1:60:33:eb:59:84:e6:2f:b0:30:38:b8:
+                    49:97:86:3b:82:4e:51:6a:28:bf:2a:6d:d3:46:77:
+                    67:ec:10:70:69:22:7f:e1:5d:7a:45:b5:81:2b:d2:
+                    ea:7d:41:5c:e2:4d:e8:2d:06:89:1c:4c:17:aa:3c:
+                    f5:2f:32:12:04:80:69:52:80:4a:ce:a1:4f:dc:76:
+                    a1:5a:d2:53:43:8f:7c:fb:82:eb:96:06:cd:05:89:
+                    74:34:7d:99:62:bc:09:67:e9:27:80:5b:78:65:05:
+                    57:c8:b6:b4:b7:83:5a:46:b2:80:6c:3f:05:3c:c6:
+                    49:2d:75:7c:48:2e:22:35:b7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        14:9a:25:22:78:e5:77:2e:7f:28:cb:57:a9:d8:22:b1:7a:f1:
-        75:b9:79:3f:f3:7e:bc:eb:49:1e:35:0f:7a:20:f0:0a:f6:a1:
-        eb:08:a1:be:4c:c7:98:22:5b:9f:f9:a6:9a:e2:4a:85:13:2a:
-        f1:7f:da:cc:04:b1:13:d5:52:90:59:17:a8:f8:77:f8:ba:02:
-        88:62:fb:9d:28:3f:0d:15:ad:79:3f:d0:a2:cb:a2:87:b7:e0:
-        10:3a:a1:1b:4b:0c:79:f6:1e:b0:20:dc:0f:01:7e:c0:9c:86:
-        91:6d:c4:06:4b:fb:3b:da:70:e0:1b:9b:f3:9d:2d:57:cb:16:
-        26:4f
+         c2:d0:56:dd:4a:bb:8f:f9:de:49:4c:0c:41:af:29:73:07:f5:
+         da:44:4a:aa:0b:9c:80:33:56:cc:eb:c5:58:14:f9:c2:c9:cc:
+         93:2f:75:eb:6c:fd:b8:79:de:0d:35:db:46:8b:a6:d7:0b:59:
+         3d:35:c9:ac:68:76:63:85:bd:b1:03:21:c7:53:a5:f5:22:9f:
+         f0:c2:23:7e:de:32:6f:4a:7b:d8:d5:2d:b1:ee:db:ad:5a:f9:
+         35:46:55:11:5a:bb:6b:53:21:1d:ea:c4:4d:16:5c:01:f5:af:
+         91:47:bb:16:c1:9b:71:4e:5b:52:b5:ea:f9:d8:7a:53:c0:ef:
+         e7:f4
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBBjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g1X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g1X3Rh
-MTAeFw0xMTA0MTEyMjM3NDBaFw0xNDAxMDUyMjM3NDBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2g1X3RhMTEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoNV90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOlsbbUa7/q1
-9kL2fubzPxEvp8kQFGfJ+0vEL8QlDaM8Zg+gGobVGUjmVKOmjWqiiaml7edJriCV
-OQwZQYfgY68nkh1VsRDqtG1a5iF4k5TiBuZ9xlNO1a+CCKGCZMFXeH5SGPY48F6O
-Cer6/H3zLYddqY7vh3rll+97+7SWCWsXAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBABSaJSJ45XcufyjLV6nY
-IrF68XW5eT/zfrzrSR41D3og8Ar2oesIob5Mx5giW5/5ppriSoUTKvF/2swEsRPV
-UpBZF6j4d/i6Aohi+50oPw0VrXk/0KLLooe34BA6oRtLDHn2HrAg3A8BfsCchpFt
-xAZL+zvacOAbm/OdLVfLFiZP
+MIICgDCCAemgAwIBAgIBBjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2NoNV90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDVfdGExMRowGAYJKoZIhvcNAQkB
+FgtjczFfY2g1X3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuqehYDPr
+WYTmL7AwOLhJl4Y7gk5Raii/Km3TRndn7BBwaSJ/4V16RbWBK9LqfUFc4k3oLQaJ
+HEwXqjz1LzISBIBpUoBKzqFP3HahWtJTQ498+4LrlgbNBYl0NH2ZYrwJZ+kngFt4
+ZQVXyLa0t4NaRrKAbD8FPMZJLXV8SC4iNbcCAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAwtBW3Uq7j/neSUwM
+Qa8pcwf12kRKqgucgDNWzOvFWBT5wsnMky9162z9uHneDTXbRoum1wtZPTXJrGh2
+Y4W9sQMhx1Ol9SKf8MIjft4yb0p72NUtse7brVr5NUZVEVq7a1MhHerETRZcAfWv
+kUe7FsGbcU5bUrXq+dh6U8Dv5/Q=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/07.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/07.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,55 +2,57 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 7 (0x7)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
         Validity
-            Not Before: Apr 11 22:37:40 2011 GMT
-            Not After : Jan  5 22:37:40 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs2_ch5_ta1/emailAddress=cs2_ch5_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs2_ch5_ta1/emailAddress=cs2_ch5_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cd:c9:ab:ee:a1:89:01:60:89:00:7c:93:1f:fe:
-                    4c:54:75:58:52:81:b0:cb:be:4c:a7:a7:23:18:86:
-                    0e:9f:e1:41:99:dd:ff:e7:f3:66:1d:41:dd:aa:9e:
-                    f7:23:2d:c4:0e:24:16:e2:4d:54:8b:38:72:55:b4:
-                    11:26:f9:fc:04:fe:de:9b:83:02:01:98:36:8e:41:
-                    42:f2:0b:a7:07:00:f9:0e:66:96:a0:e4:f3:32:06:
-                    26:9d:41:fb:91:bf:7e:a8:c0:c7:62:e1:c9:ce:37:
-                    de:07:b5:df:55:87:9a:a5:3b:d4:c5:b6:24:4b:2a:
-                    e4:88:50:85:e9:d9:13:12:47
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:51:a3:86:48:a6:81:11:01:ba:be:40:6d:dc:
+                    f7:b6:0a:f8:9a:11:71:ea:09:42:3a:ed:ee:4e:0f:
+                    87:10:99:6f:c8:ef:41:bd:f6:d0:17:a7:db:7b:fe:
+                    51:dd:de:3a:f2:3b:d7:de:7d:96:71:4e:7f:4e:d0:
+                    cf:dd:3b:d8:6b:ce:ca:83:3a:7d:6e:65:cd:b5:fb:
+                    4b:32:9a:e6:20:f8:ed:8e:4c:99:f4:02:de:c5:d4:
+                    3b:6e:35:a8:3c:b4:9f:3f:5e:3b:85:33:4a:4d:b3:
+                    35:a3:d0:76:78:74:d2:72:99:9e:c1:69:1f:d1:8f:
+                    2a:11:eb:35:32:7b:ba:8f:99
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ch5_ta1_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ch5_ta1_crl.pem
 
     Signature Algorithm: sha256WithRSAEncryption
-        58:ba:80:0f:56:d9:4e:90:97:38:a2:f5:b7:3d:98:ff:32:ec:
-        63:01:79:25:5a:5b:d4:ac:bc:aa:e1:2d:c8:ea:34:32:b0:aa:
-        ce:9f:de:e7:f2:f7:35:f8:e5:71:97:27:d1:66:80:e8:22:c7:
-        bc:23:31:2b:98:60:b4:76:7b:62:38:ff:14:57:24:64:37:6b:
-        9d:22:2a:f9:16:90:91:01:d7:f3:91:24:29:c3:c6:53:7a:0b:
-        e9:af:2b:3b:5e:77:61:83:48:e8:e2:f2:a6:44:cc:5e:90:36:
-        f2:8e:dd:59:b6:c8:21:92:17:30:87:66:c9:08:2d:b9:5b:3a:
-        f2:4e
+         2c:76:2d:19:cd:d6:f0:88:16:6c:99:6c:19:1b:5e:d3:ca:b1:
+         6d:3c:f1:5b:2c:3b:52:cd:7f:f5:1b:4f:e0:49:9e:48:5c:5e:
+         16:55:57:a3:0d:c6:eb:f5:a7:13:8d:57:c4:ff:df:3d:66:00:
+         a3:b9:18:c3:19:5c:ba:1c:ae:83:bd:90:a6:c8:6e:5a:c6:b5:
+         51:b5:33:69:59:7a:5a:00:24:61:02:41:c5:c2:ff:cc:12:a1:
+         d7:d4:d5:29:b9:22:94:e0:5c:5c:29:ec:82:ba:ff:1a:40:50:
+         88:58:98:a8:b3:2b:86:3c:a2:21:8b:b4:b2:fc:3a:b0:c7:f1:
+         03:e8
 -----BEGIN CERTIFICATE-----
-MIICrjCCAhegAwIBAgIBBzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g1X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g1X3Rh
-MTAeFw0xMTA0MTEyMjM3NDBaFw0xNDAxMDUyMjM3NDBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczJfY2g1X3RhMTEaMBgGCSqGSIb3DQEJARYL
-Y3MyX2NoNV90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM3Jq+6hiQFg
-iQB8kx/+TFR1WFKBsMu+TKenIxiGDp/hQZnd/+fzZh1B3aqe9yMtxA4kFuJNVIs4
-clW0ESb5/AT+3puDAgGYNo5BQvILpwcA+Q5mlqDk8zIGJp1B+5G/fqjAx2Lhyc43
-3ge131WHmqU71MW2JEsq5IhQhenZExJHAgMBAAGjUDBOMAwGA1UdEwEB/wQCMAAw
-PgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2xvY2FsaG9zdDoxMjAwMS9maWxlLzAv
-Y2g1X3RhMV9jcmwucGVtMA0GCSqGSIb3DQEBCwUAA4GBAFi6gA9W2U6Qlzii9bc9
-mP8y7GMBeSVaW9SsvKrhLcjqNDKwqs6f3ufy9zX45XGXJ9FmgOgix7wjMSuYYLR2
-e2I4/xRXJGQ3a50iKvkWkJEB1/ORJCnDxlN6C+mvKzted2GDSOji8qZEzF6QNvKO
-3Vm2yCGSFzCHZskILblbOvJO
+MIICsDCCAhmgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2NoNV90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMl9jaDVfdGExMRowGAYJKoZIhvcNAQkB
+FgtjczJfY2g1X3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzFGjhkim
+gREBur5Abdz3tgr4mhFx6glCOu3uTg+HEJlvyO9BvfbQF6fbe/5R3d468jvX3n2W
+cU5/TtDP3TvYa87Kgzp9bmXNtftLMprmIPjtjkyZ9ALexdQ7bjWoPLSfP147hTNK
+TbM1o9B2eHTScpmewWkf0Y8qEes1Mnu6j5kCAwEAAaNQME4wDAYDVR0TAQH/BAIw
+ADA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUv
+MC9jaDVfdGExX2NybC5wZW0wDQYJKoZIhvcNAQELBQADgYEALHYtGc3W8IgWbJls
+GRte08qxbTzxWyw7Us1/9RtP4EmeSFxeFlVXow3G6/WnE41XxP/fPWYAo7kYwxlc
+uhyug72QpshuWsa1UbUzaVl6WgAkYQJBxcL/zBKh19TVKbkilOBcXCnsgrr/GkBQ
+iFiYqLMrhjyiIYu0svw6sMfxA+g=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/09.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/09.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 9 (0x9)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
         Validity
-            Not Before: Apr 11 22:37:41 2011 GMT
-            Not After : Jan  5 22:37:41 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5.1_ta1/emailAddress=cs1_ch5.1_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5.1_ta1/emailAddress=cs1_ch5.1_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:9d:74:cf:25:35:26:cd:52:2e:9a:fc:8d:0b:4f:
-                    85:33:83:61:7a:f1:f1:c1:55:3d:dc:2e:20:77:8e:
-                    20:de:eb:e4:37:b6:6a:a4:c8:94:09:6c:f8:36:bd:
-                    78:a6:3f:2c:64:c3:23:d3:c7:fa:1c:36:a3:24:51:
-                    c0:ac:2d:20:6f:15:bf:aa:d8:94:5f:5f:8e:0a:c5:
-                    e0:aa:24:02:a5:f9:e4:cc:97:7f:74:b1:f1:a1:ab:
-                    30:6c:70:74:a4:5a:bd:5e:d7:69:64:6a:42:8d:c5:
-                    d0:b9:21:66:5a:9b:37:25:fa:34:cc:08:21:45:cb:
-                    23:10:eb:66:66:d2:9b:bc:19
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d5:b5:6f:9a:de:79:48:1e:9e:7c:61:b5:05:3f:
+                    f1:ef:a2:74:ac:83:92:f7:fa:6f:bc:ea:bf:7d:ac:
+                    d8:c9:ef:a3:50:01:2c:db:17:7c:68:6c:34:04:77:
+                    89:f6:77:db:63:08:2b:e7:59:6a:7a:d9:13:ef:d0:
+                    b1:1c:13:e0:3a:ee:0f:b6:e9:74:98:ce:30:25:dd:
+                    57:05:ed:55:f8:d2:5e:7a:c9:37:9d:29:87:a4:c8:
+                    55:f2:e7:a4:d8:cf:19:ee:af:d9:0d:35:e7:67:ae:
+                    87:70:f6:d2:98:1d:62:c6:aa:b6:ed:d0:50:77:79:
+                    ad:2e:5f:ef:a7:22:81:b3:2f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        3d:79:e6:0f:d3:33:eb:e7:fb:d4:39:f7:41:1e:f2:47:56:01:
-        d3:8b:bd:0d:0c:d5:ae:f1:85:6d:34:74:78:b3:27:20:88:4d:
-        bd:3a:b1:ac:d2:5c:f6:f3:87:f9:af:76:3a:93:60:a4:f5:97:
-        4c:c3:a6:aa:2a:f1:22:61:ea:2d:e4:97:f4:57:f7:30:84:85:
-        81:a1:aa:12:5a:37:82:96:11:d0:53:40:6c:5e:28:9f:42:1c:
-        3c:89:ae:d5:88:5d:cc:3e:4d:5c:ab:94:03:de:95:4a:b1:f2:
-        6b:cd:c1:cd:08:fa:87:88:80:e4:97:0f:36:55:3b:5d:60:a6:
-        1e:e3
+         75:2d:87:c6:b6:d7:5c:e7:bd:77:6f:d7:63:e4:f4:04:d1:df:
+         37:6f:80:99:9d:fe:b3:81:30:b4:1d:0b:3b:c7:f6:6c:15:a5:
+         ad:c2:2e:dc:5a:87:88:e0:b0:c9:81:99:33:c3:6a:f1:8d:4b:
+         8f:8c:cd:99:d4:ff:86:fe:3e:6e:b1:00:f0:15:16:d7:01:16:
+         13:8e:0e:31:35:ca:00:3c:88:7e:ca:8f:e3:32:6e:74:02:35:
+         66:3a:db:c8:83:37:b7:8c:7b:ba:bf:0d:aa:b8:d4:d8:28:03:
+         f5:f7:6f:c9:aa:d0:3c:03:cf:3d:da:aa:ae:1a:04:c6:7e:58:
+         ff:fe
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBCTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g1LjFfdGExMRgwFgYJKoZIhvcNAQkBFgljaDUu
-MV90YTEwHhcNMTEwNDExMjIzNzQxWhcNMTQwMTA1MjIzNzQxWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoNS4xX3RhMTEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoNS4xX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-nXTPJTUmzVIumvyNC0+FM4NhevHxwVU93C4gd44g3uvkN7ZqpMiUCWz4Nr14pj8s
-ZMMj08f6HDajJFHArC0gbxW/qtiUX1+OCsXgqiQCpfnkzJd/dLHxoaswbHB0pFq9
-XtdpZGpCjcXQuSFmWps3Jfo0zAghRcsjEOtmZtKbvBkCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAPXnmD9Mz
-6+f71Dn3QR7yR1YB04u9DQzVrvGFbTR0eLMnIIhNvTqxrNJc9vOH+a92OpNgpPWX
-TMOmqirxImHqLeSX9Ff3MISFgaGqElo3gpYR0FNAbF4on0IcPImu1YhdzD5NXKuU
-A96VSrHya83BzQj6h4iA5JcPNlU7XWCmHuM=
+MIICiDCCAfGgAwIBAgIBCTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4xX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g1
+LjFfdGExMB4XDTEzMTIxMzAwMTMzNFoXDTE2MDkwODAwMTMzNFowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2g1LjFfdGExMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2g1LjFfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDVtW+a3nlIHp58YbUFP/HvonSsg5L3+m+86r99rNjJ76NQASzbF3xobDQEd4n2
+d9tjCCvnWWp62RPv0LEcE+A67g+26XSYzjAl3VcF7VX40l56yTedKYekyFXy56TY
+zxnur9kNNednrodw9tKYHWLGqrbt0FB3ea0uX++nIoGzLwIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQB1LYfG
+ttdc5713b9dj5PQE0d83b4CZnf6zgTC0HQs7x/ZsFaWtwi7cWoeI4LDJgZkzw2rx
+jUuPjM2Z1P+G/j5usQDwFRbXARYTjg4xNcoAPIh+yo/jMm50AjVmOtvIgze3jHu6
+vw2quNTYKAP192/JqtA8A8892qquGgTGflj//g==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/0B.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/0B.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 11 (0xb)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5.2_ta1/emailAddress=cs1_ch5.2_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5.2_ta1/emailAddress=cs1_ch5.2_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c8:74:f3:2f:47:e9:02:0e:f4:93:b9:c2:65:ae:
-                    74:a2:90:3e:2c:36:bd:86:b1:44:f9:ac:ce:ac:0d:
-                    8f:c6:fa:b4:94:62:39:25:63:12:77:4e:4b:26:ca:
-                    7b:ad:7e:e2:1c:9a:18:6d:10:cf:6d:82:b6:00:db:
-                    57:d6:ca:56:bb:af:bd:72:76:19:5f:18:f3:ce:55:
-                    3e:c9:9f:a0:a5:65:6d:01:d4:0b:fe:a0:8e:ba:d2:
-                    2d:19:5f:72:93:ab:50:a7:91:ba:3d:e6:d7:5f:07:
-                    4a:61:c2:3a:7b:22:77:9e:93:73:16:b9:b8:e4:d6:
-                    a4:9f:95:1d:f3:54:69:19:3f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b5:6f:3b:c4:aa:e3:6b:1a:e2:26:41:f2:49:f1:
+                    40:85:73:dc:ec:ef:04:d4:c9:fa:05:29:fc:bb:b9:
+                    83:5f:f1:05:d2:06:9c:e2:52:09:91:d7:d5:3c:45:
+                    ef:3f:77:2b:c8:fc:69:78:19:96:e5:14:c3:7e:8a:
+                    af:56:c0:44:ca:5c:49:bc:3c:71:0a:b9:05:6e:2a:
+                    b7:3f:02:8a:80:da:e7:ab:47:eb:18:40:18:4a:80:
+                    54:2c:dd:97:09:df:7d:ae:0f:f2:3a:9a:51:11:af:
+                    86:bb:f1:ec:5d:45:4d:64:11:d5:0f:2f:bd:79:eb:
+                    91:c1:5e:23:2e:18:aa:6e:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        13:49:e0:c1:04:5e:6e:af:74:a7:15:5c:2d:b4:0d:26:fb:00:
-        ca:f3:ed:0a:87:fb:5f:1a:c9:d4:48:fd:30:96:eb:c2:f4:34:
-        af:09:ef:71:ad:1d:d0:dd:5d:53:12:cd:63:7f:09:2a:10:f7:
-        12:7d:61:78:29:5b:80:c3:c7:5f:e7:16:af:c4:11:72:1e:45:
-        82:0b:67:3b:76:8e:33:f0:d1:3a:b6:ca:5a:e9:8f:33:c9:79:
-        b6:7e:ac:b6:ef:c3:36:f8:a0:ae:88:0c:7e:ed:74:f9:44:b2:
-        1b:e3:de:36:d4:9e:dd:5b:99:86:b3:7e:13:19:31:6d:6d:ff:
-        bf:f7
+         30:93:85:ec:3e:1b:11:03:97:84:c4:63:bf:5c:02:32:b6:56:
+         af:42:a5:28:24:7d:63:6c:a5:9c:9a:f5:52:7b:cf:c0:22:91:
+         47:7a:92:10:19:c4:51:08:1a:68:5e:50:a2:f1:fc:ac:23:8c:
+         dd:0c:a4:6a:21:8d:db:78:e1:5b:29:7b:8d:3c:5e:85:d8:4e:
+         5f:24:f4:17:f8:96:a8:62:db:04:2d:92:3c:ea:9f:7e:3b:ef:
+         1e:45:aa:0d:88:84:e9:a3:ee:42:bd:13:43:dd:e4:8f:0d:db:
+         e2:ae:0c:be:40:7b:a6:f1:86:19:ee:ff:6d:6f:5b:11:3a:41:
+         51:9c
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBCzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g1LjJfdGExMRgwFgYJKoZIhvcNAQkBFgljaDUu
-Ml90YTEwHhcNMTEwNDExMjIzNzQyWhcNMTQwMTA1MjIzNzQyWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoNS4yX3RhMTEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoNS4yX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-yHTzL0fpAg70k7nCZa50opA+LDa9hrFE+azOrA2Pxvq0lGI5JWMSd05LJsp7rX7i
-HJoYbRDPbYK2ANtX1spWu6+9cnYZXxjzzlU+yZ+gpWVtAdQL/qCOutItGV9yk6tQ
-p5G6PebXXwdKYcI6eyJ3npNzFrm45Nakn5Ud81RpGT8CAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAE0ngwQRe
-bq90pxVcLbQNJvsAyvPtCof7XxrJ1Ej9MJbrwvQ0rwnvca0d0N1dUxLNY38JKhD3
-En1heClbgMPHX+cWr8QRch5FggtnO3aOM/DROrbKWumPM8l5tn6stu/DNvigrogM
-fu10+USyG+PeNtSe3VuZhrN+ExkxbW3/v/c=
+MIICiDCCAfGgAwIBAgIBCzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4yX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g1
+LjJfdGExMB4XDTEzMTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2g1LjJfdGExMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2g1LjJfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC1bzvEquNrGuImQfJJ8UCFc9zs7wTUyfoFKfy7uYNf8QXSBpziUgmR19U8Re8/
+dyvI/Gl4GZblFMN+iq9WwETKXEm8PHEKuQVuKrc/AoqA2uerR+sYQBhKgFQs3ZcJ
+332uD/I6mlERr4a78exdRU1kEdUPL71565HBXiMuGKpuiQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQAwk4Xs
+PhsRA5eExGO/XAIytlavQqUoJH1jbKWcmvVSe8/AIpFHepIQGcRRCBpoXlCi8fys
+I4zdDKRqIY3beOFbKXuNPF6F2E5fJPQX+JaoYtsELZI86p9+O+8eRaoNiITpo+5C
+vRND3eSPDdvirgy+QHum8YYZ7v9tb1sROkFRnA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/0E.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/0E.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 14 (0xe)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5.3_ta1/emailAddress=cs1_ch5.3_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5.3_ta1/emailAddress=cs1_ch5.3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b5:76:e5:90:97:10:d5:aa:02:02:eb:87:f5:96:
-                    3a:94:31:a6:d9:1b:99:36:6b:62:13:36:cd:75:bf:
-                    5d:b9:19:02:15:79:e8:0c:95:12:80:a8:97:85:60:
-                    30:6f:4a:3d:cb:b4:bc:d8:a6:4d:a0:42:64:28:d3:
-                    07:2e:0a:f3:35:c3:35:10:08:f9:1e:e9:07:63:4b:
-                    7d:36:cc:65:7e:be:65:cb:a2:ad:8b:4a:1c:ec:9e:
-                    f6:f5:14:e7:93:42:5c:0b:a3:7e:73:ae:18:42:32:
-                    32:a0:45:96:2d:d5:d7:5c:75:f2:e3:48:23:34:20:
-                    88:4f:7e:1a:21:8c:45:30:0d
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c5:03:2b:f6:07:4e:f1:a3:9b:96:87:6d:ea:e2:
+                    bb:0b:fb:95:70:f6:34:a7:bb:e7:9f:df:ff:8a:fd:
+                    28:56:0b:fb:de:5d:79:d1:ba:0f:41:73:7f:5b:b9:
+                    17:6b:24:db:6f:20:a3:62:5e:3a:bb:71:29:18:33:
+                    52:24:ff:a9:9b:70:49:7f:78:94:f7:bd:a3:bf:2f:
+                    f4:de:e2:6f:61:13:ce:4f:f3:6a:85:84:35:ae:1d:
+                    a7:fb:00:2d:35:33:cc:18:ff:85:d9:37:0a:15:2b:
+                    15:71:de:ae:8c:99:ef:5b:dc:7b:4b:c1:b3:08:d9:
+                    57:29:29:e0:8d:46:e0:79:83
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        76:78:0e:96:48:35:42:08:26:68:65:9d:49:c6:3b:b7:f2:c7:
-        3b:41:e1:94:2b:30:ec:65:1d:90:bd:3e:6a:ec:66:f1:3d:e6:
-        76:b7:e7:a3:c7:96:b0:61:39:0b:e1:4e:15:cd:f7:95:48:c7:
-        ee:21:ce:81:5e:04:85:5b:2e:66:9f:2a:c1:6e:6f:4d:e3:c8:
-        32:1f:35:53:7d:4f:ff:0f:0f:07:25:6a:f9:da:74:0c:8d:cf:
-        86:3b:c1:30:bc:dd:a4:80:37:78:a3:03:1e:58:29:16:1b:d5:
-        b0:12:4e:8f:f4:da:c4:46:f4:28:4e:36:ac:d7:8a:95:c3:18:
-        e8:2e
+         0d:01:09:aa:c9:69:4c:33:74:70:07:ab:60:b6:0f:75:36:9e:
+         62:c2:96:82:f4:94:e4:9e:4b:6a:b4:fc:4e:45:21:e5:a7:20:
+         18:2a:a4:82:43:92:3a:d5:29:3a:f4:bb:e8:40:65:c8:08:53:
+         3b:46:42:4d:0b:f6:ba:8d:3f:08:ab:43:98:4b:41:40:8c:d6:
+         2d:58:dc:a8:53:e3:78:51:92:32:7e:00:9c:16:bb:c1:61:73:
+         68:2b:6d:4e:0f:f6:41:e4:08:43:b1:77:85:22:2b:06:1e:69:
+         48:38:28:9c:d5:60:65:7b:94:db:e7:d4:37:de:6a:0f:f3:cb:
+         53:45
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBDjANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g1LjNfdGExMRgwFgYJKoZIhvcNAQkBFgljaDUu
-M190YTEwHhcNMTEwNDExMjIzNzQyWhcNMTQwMTA1MjIzNzQyWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoNS4zX3RhMTEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoNS4zX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-tXblkJcQ1aoCAuuH9ZY6lDGm2RuZNmtiEzbNdb9duRkCFXnoDJUSgKiXhWAwb0o9
-y7S82KZNoEJkKNMHLgrzNcM1EAj5HukHY0t9Nsxlfr5ly6Kti0oc7J729RTnk0Jc
-C6N+c64YQjIyoEWWLdXXXHXy40gjNCCIT34aIYxFMA0CAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAdngOlkg1
-QggmaGWdScY7t/LHO0HhlCsw7GUdkL0+auxm8T3mdrfno8eWsGE5C+FOFc33lUjH
-7iHOgV4EhVsuZp8qwW5vTePIMh81U31P/w8PByVq+dp0DI3PhjvBMLzdpIA3eKMD
-HlgpFhvVsBJOj/TaxEb0KE42rNeKlcMY6C4=
+MIICiDCCAfGgAwIBAgIBDjANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4zX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g1
+LjNfdGExMB4XDTEzMTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2g1LjNfdGExMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2g1LjNfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDFAyv2B07xo5uWh23q4rsL+5Vw9jSnu+ef3/+K/ShWC/veXXnRug9Bc39buRdr
+JNtvIKNiXjq7cSkYM1Ik/6mbcEl/eJT3vaO/L/Te4m9hE85P82qFhDWuHaf7AC01
+M8wY/4XZNwoVKxVx3q6Mme9b3HtLwbMI2VcpKeCNRuB5gwIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQANAQmq
+yWlMM3RwB6tgtg91Np5iwpaC9JTknktqtPxORSHlpyAYKqSCQ5I61Sk69LvoQGXI
+CFM7RkJNC/a6jT8Iq0OYS0FAjNYtWNyoU+N4UZIyfgCcFrvBYXNoK21OD/ZB5AhD
+sXeFIisGHmlIOCic1WBle5Tb59Q33moP88tTRQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/0F.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/0F.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 15 (0xf)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta2/emailAddress=ta2
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta2/emailAddress=ta2
         Validity
-            Not Before: Apr 11 22:37:43 2011 GMT
-            Not After : Jan  5 22:37:43 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ta2/emailAddress=cs1_ta2
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ta2/emailAddress=cs1_ta2
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e7:3a:08:5d:d7:3d:c8:50:43:ad:92:87:40:58:
-                    59:5c:fa:34:ba:c9:bd:5b:d7:9f:17:b8:4f:d2:15:
-                    fd:86:d9:f0:3a:07:48:14:f3:c0:a4:9e:e3:ee:00:
-                    45:ba:aa:de:3a:5c:53:d6:0d:dd:46:88:d3:b6:13:
-                    aa:ee:f8:c0:3e:fa:eb:0a:6d:4a:0d:f7:39:21:ff:
-                    5d:dc:d7:13:5b:2a:e9:e4:c0:1e:31:2b:5b:00:ce:
-                    b0:55:44:72:97:66:06:ab:41:71:05:4a:83:6b:3b:
-                    cf:a7:ce:5d:61:43:3b:bb:60:19:c4:33:ac:23:72:
-                    66:9d:e9:72:be:bd:6c:ad:2b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:be:2d:d1:b2:aa:38:aa:c1:4f:f3:f7:07:f2:f3:
+                    30:0c:6d:f7:13:ed:c3:c7:c8:f8:87:8d:ea:a3:49:
+                    cf:74:dd:30:1b:1f:9d:a6:8e:b7:eb:fa:f5:f7:e5:
+                    e0:05:9a:e4:b1:ed:2d:ee:ff:f8:ab:23:9a:f3:24:
+                    ad:99:26:83:4d:e7:35:b7:c8:b1:60:3d:0c:44:e9:
+                    2c:24:50:ee:86:5c:f0:ba:61:34:5d:f9:6c:a3:b7:
+                    e3:16:0e:90:35:9e:05:15:99:32:ff:50:de:b5:e0:
+                    66:88:e6:d5:0b:ae:16:a9:91:f5:86:c4:23:c9:7e:
+                    f1:9d:2b:86:43:e6:fb:c1:a5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        49:7b:52:fd:1f:be:ee:30:38:0d:93:6b:07:01:95:14:35:6e:
-        5b:dd:74:9e:a0:a7:1a:bd:a8:cd:35:a9:7f:21:af:d7:a2:0c:
-        69:f9:d4:d0:eb:45:93:e2:48:fd:86:b4:70:fb:b5:dd:e5:48:
-        5f:93:d4:41:7a:cb:a5:73:02:d8:d9:e8:5f:9c:f8:4f:ad:50:
-        fb:88:24:b3:f5:e0:cf:d9:3e:bf:3f:5b:0c:db:a0:20:51:5d:
-        ea:13:0b:5b:44:6d:af:0f:6a:72:b6:25:8c:9f:bd:d0:a9:0e:
-        38:60:39:53:7e:9d:6e:ac:65:21:9a:32:f4:57:65:39:dc:f7:
-        36:9a
+         10:82:e5:2b:f8:67:14:0c:22:0d:f4:4e:17:c5:d5:7f:3d:fa:
+         24:2a:ad:33:47:ff:2a:f5:37:f6:83:81:2f:32:df:01:18:80:
+         7a:00:0b:f5:37:f9:eb:de:b0:38:cc:38:94:94:83:76:38:bb:
+         0e:0a:72:9b:2c:87:ce:8c:46:ef:68:f4:e0:a9:2f:cc:28:53:
+         c3:ac:63:7d:2b:87:fb:76:7b:9e:98:c6:0e:80:9e:80:4e:40:
+         b8:1e:2c:8b:c1:8b:cd:13:58:16:ea:aa:a0:0e:b6:b8:4b:a7:
+         74:a1:0d:d9:41:70:44:1e:19:d2:25:4b:b1:52:65:40:32:b0:
+         5d:3d
 -----BEGIN CERTIFICATE-----
-MIICbjCCAdegAwIBAgIBDzANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEyMRIwEAYJKoZIhvcNAQkBFgN0YTIwHhcNMTEw
-NDExMjIzNzQzWhcNMTQwMTA1MjIzNzQzWjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY3MxX3RhMjEWMBQGCSqGSIb3DQEJARYHY3MxX3RhMjCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5zoIXdc9yFBDrZKHQFhZXPo0usm9W9ef
-F7hP0hX9htnwOgdIFPPApJ7j7gBFuqreOlxT1g3dRojTthOq7vjAPvrrCm1KDfc5
-If9d3NcTWyrp5MAeMStbAM6wVURyl2YGq0FxBUqDazvPp85dYUM7u2AZxDOsI3Jm
-nelyvr1srSsCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4Aw
-DQYJKoZIhvcNAQELBQADgYEASXtS/R++7jA4DZNrBwGVFDVuW910nqCnGr2ozTWp
-fyGv16IMafnU0OtFk+JI/Ya0cPu13eVIX5PUQXrLpXMC2NnoX5z4T61Q+4gks/Xg
-z9k+vz9bDNugIFFd6hMLW0Rtrw9qcrYljJ+90KkOOGA5U36dbqxlIZoy9FdlOdz3
-Npo=
+MIICcDCCAdmgAwIBAgIBDzANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMjESMBAGCSqGSIb3DQEJARYDdGEyMB4XDTEz
+MTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjczFfdGEyMRYwFAYJKoZIhvcNAQkBFgdjczFfdGEyMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+LdGyqjiqwU/z9wfy8zAMbfcT7cPH
+yPiHjeqjSc903TAbH52mjrfr+vX35eAFmuSx7S3u//irI5rzJK2ZJoNN5zW3yLFg
+PQxE6SwkUO6GXPC6YTRd+Wyjt+MWDpA1ngUVmTL/UN614GaI5tULrhapkfWGxCPJ
+fvGdK4ZD5vvBpQIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIH
+gDANBgkqhkiG9w0BAQsFAAOBgQAQguUr+GcUDCIN9E4XxdV/PfokKq0zR/8q9Tf2
+g4EvMt8BGIB6AAv1N/nr3rA4zDiUlIN2OLsOCnKbLIfOjEbvaPTgqS/MKFPDrGN9
+K4f7dnuemMYOgJ6ATkC4HiyLwYvNE1gW6qqgDra4S6d0oQ3ZQXBEHhnSJUuxUmVA
+MrBdPQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/11.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/11.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 17 (0x11)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:44 2011 GMT
-            Not After : Jan  5 22:37:44 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cc:26:a7:16:78:9a:fb:e2:da:da:e3:c4:ef:7e:
-                    cb:5c:21:1c:aa:c1:53:35:df:cc:dc:f5:e2:98:0b:
-                    e6:8e:05:f4:e5:97:28:98:54:95:15:11:c9:1e:97:
-                    ed:ee:f4:49:4e:2f:0a:a2:16:83:0d:f5:49:65:78:
-                    6d:ba:a2:19:1b:74:27:64:1a:22:0b:85:47:d0:e1:
-                    85:25:1e:5c:fd:00:7a:37:9e:7e:83:43:cf:17:4e:
-                    2f:ea:7d:c9:5a:b8:70:7a:82:2c:74:0f:77:47:10:
-                    1a:a4:51:16:08:9e:71:b5:7c:54:53:60:92:a8:0c:
-                    1c:b3:b1:0f:ab:c3:0e:46:c5
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ea:17:76:34:ce:b3:de:ac:50:62:a0:0f:14:50:
+                    89:72:26:d5:a2:97:17:91:eb:df:97:7e:80:ff:69:
+                    8e:01:0a:bb:d1:a1:e0:f3:d2:27:56:c6:2d:0f:b5:
+                    84:e4:70:f3:e1:7e:fc:92:8e:fd:77:48:cb:ac:cd:
+                    bf:f4:aa:fa:29:5f:1b:44:03:cf:fa:6f:6d:ae:db:
+                    61:f1:3e:ef:95:de:41:23:36:a2:3a:e7:67:26:04:
+                    6b:7e:9d:f6:92:5e:5b:4c:ab:0a:aa:cf:99:b4:4c:
+                    54:05:73:81:a3:7b:5d:82:cb:e0:ee:9b:29:29:e6:
+                    fb:dd:93:64:23:13:85:d1:e1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        39:fc:dd:ed:5b:f5:75:d9:01:ed:86:33:11:21:27:c9:ad:78:
-        d3:e7:48:8a:3e:11:71:71:0f:d5:10:5b:5a:f0:16:a2:ac:70:
-        e9:3c:db:b9:30:c0:0d:2e:b4:8a:97:c3:50:d7:00:53:d3:4f:
-        b7:24:ff:38:64:e0:ff:87:01:18:6f:7c:bd:3c:2a:bc:fe:9b:
-        0a:d8:66:ce:9e:4e:fa:4c:5c:b5:62:ae:dc:1b:c4:ef:84:da:
-        45:3f:c2:a9:6d:74:a5:f0:44:7e:14:70:a4:4d:e3:dc:92:bb:
-        49:de:68:35:bb:59:a0:24:ba:d6:89:44:28:6b:b8:69:ca:64:
-        7f:f4
+         60:5d:82:5a:64:28:86:45:51:ab:d5:4c:74:ad:eb:84:37:fa:
+         ed:53:df:29:0d:00:9c:4b:33:f4:25:83:ad:b3:e4:cb:11:b0:
+         6e:92:cd:4f:9d:4b:7d:d0:bb:bc:c5:ef:b1:44:2e:54:e1:5e:
+         68:1f:a9:06:a7:e2:ca:82:f9:ac:e8:14:82:a3:26:03:7b:1b:
+         63:98:4f:bb:c9:5d:d5:79:77:bc:2e:e3:3d:7a:82:79:af:7d:
+         fc:e8:a0:9d:f9:e1:74:6d:e6:b9:47:84:19:dd:3f:43:51:8d:
+         9b:c1:27:9e:b7:c7:6b:e2:1f:77:29:bb:5f:a6:16:bf:d0:fd:
+         5a:c2
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBETANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDRaFw0xNDAxMDUyMjM3NDRaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMwmpxZ4mvvi
-2trjxO9+y1whHKrBUzXfzNz14pgL5o4F9OWXKJhUlRURyR6X7e70SU4vCqIWgw31
-SWV4bbqiGRt0J2QaIguFR9DhhSUeXP0AejeefoNDzxdOL+p9yVq4cHqCLHQPd0cQ
-GqRRFgiecbV8VFNgkqgMHLOxD6vDDkbFAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBADn83e1b9XXZAe2GMxEh
-J8mteNPnSIo+EXFxD9UQW1rwFqKscOk827kwwA0utIqXw1DXAFPTT7ck/zhk4P+H
-ARhvfL08Krz+mwrYZs6eTvpMXLVirtwbxO+E2kU/wqltdKXwRH4UcKRN49ySu0ne
-aDW7WaAkutaJRChruGnKZH/0
+MIICgDCCAemgAwIBAgIBETANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczFfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6hd2NM6z
+3qxQYqAPFFCJcibVopcXkevfl36A/2mOAQq70aHg89InVsYtD7WE5HDz4X78ko79
+d0jLrM2/9Kr6KV8bRAPP+m9trtth8T7vld5BIzaiOudnJgRrfp32kl5bTKsKqs+Z
+tExUBXOBo3tdgsvg7pspKeb73ZNkIxOF0eECAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAYF2CWmQohkVRq9VM
+dK3rhDf67VPfKQ0AnEsz9CWDrbPkyxGwbpLNT51LfdC7vMXvsUQuVOFeaB+pBqfi
+yoL5rOgUgqMmA3sbY5hPu8ld1Xl3vC7jPXqCea99/OignfnhdG3muUeEGd0/Q1GN
+m8EnnrfHa+Ifdym7X6YWv9D9WsI=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/12.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/12.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 18 (0x12)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:44 2011 GMT
-            Not After : Jan  5 22:37:44 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:b6:f8:33:c7:cd:e9:6d:d9:aa:77:60:23:86:
-                    71:56:dc:22:a3:cf:36:d7:b3:59:f7:5d:ae:82:ed:
-                    3f:17:12:62:09:3e:3e:ec:fa:a6:92:df:05:ce:9a:
-                    a2:6d:93:b9:7e:16:f9:c5:b3:83:1d:9a:96:6a:1b:
-                    35:df:f6:b8:82:55:45:5b:43:0a:71:66:4f:bc:df:
-                    00:13:25:22:df:79:76:b6:98:42:25:b2:a1:5c:47:
-                    72:7b:96:9f:65:3f:37:02:97:29:16:9c:75:22:7b:
-                    5d:31:53:80:0a:eb:cc:73:13:da:8e:61:f5:ca:f7:
-                    af:fc:53:cd:b9:11:95:3c:3f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:98:97:30:92:90:4d:45:5a:0c:e2:6f:fb:25:9e:
+                    72:7f:56:64:f5:64:f5:b2:5b:85:27:b7:ad:fa:24:
+                    d7:54:00:1d:5c:4d:c2:92:81:76:f1:37:49:14:b7:
+                    9d:8c:fb:96:69:2d:11:32:6a:19:eb:eb:eb:27:a3:
+                    be:1f:00:29:c8:ba:d6:ca:97:df:e0:83:68:51:9c:
+                    81:f5:63:e0:69:39:1a:fe:5e:af:c3:af:b6:23:b8:
+                    aa:b4:65:c7:f4:7e:63:db:ff:1b:7e:ce:ed:60:7d:
+                    be:2f:fd:05:ee:d0:cd:72:7e:91:93:69:82:29:8f:
+                    a8:a8:53:b1:d7:ea:83:df:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -29,27 +29,27 @@
                 <EMPTY>
 
     Signature Algorithm: sha256WithRSAEncryption
-        2e:40:56:59:03:e3:5b:62:73:0c:57:dc:12:d8:4b:97:00:8b:
-        66:c8:a6:10:29:78:3b:7a:52:fb:f9:63:94:44:b2:1b:eb:3f:
-        13:e9:40:9b:24:01:38:f6:b2:f7:99:1e:d9:17:57:e3:df:ff:
-        01:8b:00:02:7e:a0:f5:e5:3a:f0:72:4c:72:6f:76:07:26:ac:
-        97:6d:c2:12:e1:64:99:29:ff:25:fd:21:c7:43:41:87:c5:bb:
-        ce:06:c4:b1:f9:64:ad:e8:d8:90:ac:89:26:8a:1e:a3:d4:45:
-        2d:8a:27:a4:88:8c:f3:97:5f:f7:82:d7:c4:76:98:f5:20:af:
-        5e:23
+         53:10:01:62:32:bd:ff:7d:30:a5:09:5f:77:44:af:0d:81:d4:
+         4b:c8:f6:fe:ba:38:65:9f:b6:55:77:7a:36:86:42:64:1a:89:
+         66:4f:1d:f5:0a:65:1e:06:2c:07:46:b3:57:ba:98:1d:1c:46:
+         52:08:65:32:70:9d:98:3e:e9:6b:be:da:7e:91:54:60:52:ad:
+         0e:90:3f:ee:7c:2a:03:84:8f:4f:e4:1b:d3:4f:a8:d3:c2:29:
+         74:cc:ac:87:81:7e:38:07:cd:d8:5f:20:00:b6:e4:ea:c1:e5:
+         06:77:19:da:9c:3b:43:7f:91:ab:8c:f1:b7:03:09:09:0a:85:
+         de:91
 -----BEGIN CERTIFICATE-----
-MIICfDCCAeWgAwIBAgIBEjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDRaFw0xNDAxMDUyMjM3NDRaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczJfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3MyX2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMW2+DPHzelt
-2ap3YCOGcVbcIqPPNtezWfddroLtPxcSYgk+Puz6ppLfBc6aom2TuX4W+cWzgx2a
-lmobNd/2uIJVRVtDCnFmT7zfABMlIt95draYQiWyoVxHcnuWn2U/NwKXKRacdSJ7
-XTFTgArrzHMT2o5h9cr3r/xTzbkRlTw/AgMBAAGjHjAcMAwGA1UdEwEB/wQCMAAw
-DAYDVR0SAQH/BAIwADANBgkqhkiG9w0BAQsFAAOBgQAuQFZZA+NbYnMMV9wS2EuX
-AItmyKYQKXg7elL7+WOURLIb6z8T6UCbJAE49rL3mR7ZF1fj3/8BiwACfqD15Trw
-ckxyb3YHJqyXbcIS4WSZKf8l/SHHQ0GHxbvOBsSx+WSt6NiQrIkmih6j1EUtiiek
-iIzzl1/3gtfEdpj1IK9eIw==
+MIICfjCCAeegAwIBAgIBEjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMl9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczJfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmJcwkpBN
+RVoM4m/7JZ5yf1Zk9WT1sluFJ7et+iTXVAAdXE3CkoF28TdJFLedjPuWaS0RMmoZ
+6+vrJ6O+HwApyLrWypff4INoUZyB9WPgaTka/l6vw6+2I7iqtGXH9H5j2/8bfs7t
+YH2+L/0F7tDNcn6Rk2mCKY+oqFOx1+qD34kCAwEAAaMeMBwwDAYDVR0TAQH/BAIw
+ADAMBgNVHRIBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4GBAFMQAWIyvf99MKUJX3dE
+rw2B1EvI9v66OGWftlV3ejaGQmQaiWZPHfUKZR4GLAdGs1e6mB0cRlIIZTJwnZg+
+6Wu+2n6RVGBSrQ6QP+58KgOEj0/kG9NPqNPCKXTMrIeBfjgHzdhfIAC25OrB5QZ3
+GdqcO0N/kauM8bcDCQkKhd6R
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/13.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/13.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 19 (0x13)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
             Not Before: Jan  1 01:01:01 2009 GMT
             Not After : Jan  2 01:01:01 2009 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs3_ch1_ta3/emailAddress=cs3_ch1_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs3_ch1_ta3/emailAddress=cs3_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b7:60:7b:08:47:0a:05:c1:6c:80:9a:84:e2:de:
-                    c6:11:65:df:a6:c7:30:bb:37:e9:ae:9e:37:9d:f9:
-                    f3:3a:18:38:ee:be:e0:fb:6b:84:fb:93:2c:5b:1e:
-                    9f:7a:78:da:26:28:c7:fb:6e:9f:2e:8f:f9:5a:1c:
-                    e8:0b:e0:f1:5c:45:f6:a0:0e:58:01:4e:86:20:bd:
-                    ff:7d:0c:41:4b:b2:50:5c:78:89:3c:4a:83:cf:59:
-                    9f:e4:17:27:de:ea:aa:ff:c8:19:f5:b7:c3:67:bd:
-                    5e:78:79:8e:46:33:1a:ef:36:40:f8:f2:7e:bc:ca:
-                    54:85:57:56:e5:e7:b8:52:4d
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d3:01:be:68:e6:07:6b:d4:f1:10:9e:99:93:cb:
+                    79:4d:15:d1:39:fb:b2:de:74:10:57:84:c3:ab:3e:
+                    25:cc:f4:7e:66:1e:f2:fa:f2:32:b4:c5:6c:80:e7:
+                    31:80:1a:96:79:96:83:b5:44:58:f1:2a:9b:3b:c0:
+                    0d:42:00:27:49:bf:6e:0a:d6:8b:b4:20:5c:a7:3d:
+                    11:74:25:95:08:45:bb:c5:ca:07:42:a3:e8:19:36:
+                    e1:62:42:53:bc:2f:1f:a8:10:31:ee:40:7d:ec:b5:
+                    54:04:c4:63:e8:43:12:09:7d:1e:99:60:f6:db:ec:
+                    65:d3:13:bb:36:be:e2:d8:ed
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        27:40:ae:0c:a2:ad:5d:28:30:53:fe:e4:35:31:02:e4:1a:ef:
-        6d:ec:95:1e:3e:a0:15:15:32:e8:88:46:68:45:a7:60:9f:93:
-        79:ab:ef:78:f6:2c:23:ef:a1:f4:71:b3:9a:f1:c6:4d:ac:34:
-        a1:24:d8:4e:38:36:3c:bb:90:30:9b:e4:b3:8e:55:e0:06:c4:
-        5a:c4:f1:23:90:fd:b3:ef:40:dd:4d:4c:2b:55:50:11:64:6b:
-        64:3f:e3:67:3c:6c:c1:da:55:6c:7d:8d:87:18:40:6a:cb:13:
-        17:3b:75:35:09:71:0b:e9:c4:7e:b1:a1:db:80:78:93:b3:5b:
-        d0:4e
+         5f:64:85:36:62:d2:01:78:45:6d:63:d5:c8:d8:01:cb:39:f7:
+         0f:75:61:87:9c:d0:2b:9d:3f:0f:56:4d:8c:7d:06:69:eb:60:
+         3a:ca:ed:91:39:ba:e8:8b:a9:42:58:33:32:e3:08:ac:a9:ca:
+         76:ef:37:39:74:46:2d:ea:54:e0:0d:e5:62:18:48:5e:e6:8b:
+         6c:6c:25:0c:8d:61:98:f6:7a:ae:b6:73:cb:8a:2d:27:a5:c7:
+         cf:5e:36:a5:2f:10:74:41:b0:93:6d:21:e2:52:c2:d5:88:6e:
+         ff:91:04:eb:92:8b:62:3a:81:a8:88:6c:10:67:4e:a2:6a:2c:
+         17:ec
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBEzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0wOTAxMDEwMTAxMDFaFw0wOTAxMDIwMTAxMDFaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczNfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3MzX2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALdgewhHCgXB
-bICahOLexhFl36bHMLs36a6eN5358zoYOO6+4PtrhPuTLFsen3p42iYox/tuny6P
-+Voc6Avg8VxF9qAOWAFOhiC9/30MQUuyUFx4iTxKg89Zn+QXJ97qqv/IGfW3w2e9
-Xnh5jkYzGu82QPjyfrzKVIVXVuXnuFJNAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBACdArgyirV0oMFP+5DUx
-AuQa723slR4+oBUVMuiIRmhFp2Cfk3mr73j2LCPvofRxs5rxxk2sNKEk2E44Njy7
-kDCb5LOOVeAGxFrE8SOQ/bPvQN1NTCtVUBFka2Q/42c8bMHaVWx9jYcYQGrLExc7
-dTUJcQvpxH6xoduAeJOzW9BO
+MIICgDCCAemgAwIBAgIBEzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMDkwMTAxMDEwMTAxWhcNMDkwMTAyMDEwMTAxWjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzM19jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczNfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0wG+aOYH
+a9TxEJ6Zk8t5TRXROfuy3nQQV4TDqz4lzPR+Zh7y+vIytMVsgOcxgBqWeZaDtURY
+8SqbO8ANQgAnSb9uCtaLtCBcpz0RdCWVCEW7xcoHQqPoGTbhYkJTvC8fqBAx7kB9
+7LVUBMRj6EMSCX0emWD22+xl0xO7Nr7i2O0CAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAX2SFNmLSAXhFbWPV
+yNgByzn3D3Vhh5zQK50/D1ZNjH0GaetgOsrtkTm66IupQlgzMuMIrKnKdu83OXRG
+LepU4A3lYhhIXuaLbGwlDI1hmPZ6rrZzy4otJ6XHz142pS8QdEGwk20h4lLC1Yhu
+/5EE65KLYjqBqIhsEGdOomosF+w=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/14.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/14.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 20 (0x14)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
             Not Before: Jan  1 01:01:01 2035 GMT
             Not After : Jan  2 01:01:01 2035 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs4_ch1_ta3/emailAddress=cs4_ch1_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs4_ch1_ta3/emailAddress=cs4_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d7:42:45:a6:d0:f4:a9:54:6d:c8:4d:42:e8:05:
-                    a4:33:25:f1:b7:eb:20:df:33:26:6e:ca:30:63:57:
-                    df:d3:a9:02:b0:29:f3:cb:7b:64:77:34:7e:1d:c7:
-                    a8:2c:ca:73:23:22:43:71:6c:33:9e:89:0e:89:ce:
-                    6d:db:2b:f3:5a:af:e3:dc:f3:1c:48:64:60:5d:57:
-                    e6:17:6b:e6:61:4b:cb:e0:a9:e3:1c:aa:f6:70:34:
-                    b4:8b:d8:19:e6:26:06:60:24:82:c6:d8:5d:87:de:
-                    99:2b:0d:78:db:92:f2:c2:24:65:8b:f8:07:b6:fe:
-                    17:8d:bb:4f:c7:c0:ae:24:c9
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cb:2c:5a:74:59:a7:60:a1:a4:1b:36:25:92:c1:
+                    aa:39:3f:7c:17:de:d0:36:c3:1c:bf:c6:25:30:e0:
+                    10:7b:d7:76:7d:de:d6:71:6c:81:df:95:22:a4:dd:
+                    80:55:2a:5e:fd:82:df:94:a0:aa:f9:8e:b1:e9:20:
+                    be:04:26:18:17:e8:04:9e:af:67:ca:57:8e:f6:92:
+                    2c:6e:76:02:4b:84:d8:2b:78:2b:32:74:8e:4c:ea:
+                    ab:3c:61:62:cb:95:af:5c:77:74:19:b2:0e:4f:49:
+                    63:8a:72:ac:c1:77:6a:42:ed:91:6f:be:a4:df:c8:
+                    0b:1b:b4:32:18:46:dc:b9:f5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        b9:09:ff:d1:80:e1:9e:05:e8:27:40:d0:d3:76:d7:b6:72:cd:
-        4a:e4:d8:b7:e2:14:90:3a:74:61:b3:c8:3c:7c:bd:2e:9c:9d:
-        62:0d:cd:9b:e9:36:ba:aa:87:f7:c7:e4:3a:6c:5d:d9:99:d5:
-        33:a0:5a:3f:fd:5e:06:62:11:ad:ca:33:9d:0a:59:8a:a9:0e:
-        6e:4a:d8:6f:da:ff:96:89:e3:8a:3b:5e:a6:b4:8c:93:ff:70:
-        4d:d2:32:f8:44:c0:ff:84:65:b0:1f:59:4a:2c:10:d7:5e:a6:
-        ed:5b:a8:e2:eb:42:e0:0d:7b:f5:43:ca:1a:9a:cd:df:e6:f8:
-        4d:d5
+         40:91:53:35:b9:b9:31:8d:16:de:85:84:2f:b4:5e:35:7a:da:
+         a8:31:06:29:14:94:80:ee:0a:55:7d:8f:02:2f:74:f4:94:5e:
+         00:d1:c7:8b:2a:71:21:8d:3c:d6:f2:b6:50:84:fe:45:f1:56:
+         bd:36:68:72:b7:73:c6:b7:38:3b:fe:be:22:af:77:43:0d:32:
+         f7:7e:ce:2e:e9:1f:24:5a:b9:bb:ae:b3:fd:cd:ea:87:1a:43:
+         7b:22:71:2f:6b:16:74:e6:73:6b:af:38:17:c6:a4:c6:8c:01:
+         a9:c4:76:be:a3:02:8b:47:35:e1:53:c8:27:87:1e:5c:ad:cb:
+         93:4e
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBFDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0zNTAxMDEwMTAxMDFaFw0zNTAxMDIwMTAxMDFaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczRfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M0X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANdCRabQ9KlU
-bchNQugFpDMl8bfrIN8zJm7KMGNX39OpArAp88t7ZHc0fh3HqCzKcyMiQ3FsM56J
-DonObdsr81qv49zzHEhkYF1X5hdr5mFLy+Cp4xyq9nA0tIvYGeYmBmAkgsbYXYfe
-mSsNeNuS8sIkZYv4B7b+F427T8fAriTJAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBALkJ/9GA4Z4F6CdA0NN2
-17ZyzUrk2LfiFJA6dGGzyDx8vS6cnWINzZvpNrqqh/fH5DpsXdmZ1TOgWj/9XgZi
-Ea3KM50KWYqpDm5K2G/a/5aJ44o7Xqa0jJP/cE3SMvhEwP+EZbAfWUosENdepu1b
-qOLrQuANe/VDyhqazd/m+E3V
+MIICgDCCAemgAwIBAgIBFDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMzUwMTAxMDEwMTAxWhcNMzUwMTAyMDEwMTAxWjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzNF9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczRfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyyxadFmn
+YKGkGzYlksGqOT98F97QNsMcv8YlMOAQe9d2fd7WcWyB35UipN2AVSpe/YLflKCq
++Y6x6SC+BCYYF+gEnq9nyleO9pIsbnYCS4TYK3grMnSOTOqrPGFiy5WvXHd0GbIO
+T0ljinKswXdqQu2Rb76k38gLG7QyGEbcufUCAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAQJFTNbm5MY0W3oWE
+L7ReNXraqDEGKRSUgO4KVX2PAi909JReANHHiypxIY081vK2UIT+RfFWvTZocrdz
+xrc4O/6+Iq93Qw0y937OLukfJFq5u66z/c3qhxpDeyJxL2sWdOZza684F8akxowB
+qcR2vqMCi0c14VPIJ4ceXK3Lk04=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/15.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/15.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 21 (0x15)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:45 2011 GMT
-            Not After : Jan  5 22:37:45 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c0:be:66:e6:55:cb:9e:d6:d2:7b:d3:b2:34:fb:
-                    c9:74:d5:30:4f:62:1c:68:bd:13:97:08:b7:8c:b6:
-                    4e:dd:7f:98:a5:e2:2f:2e:9c:74:92:01:43:62:8e:
-                    9c:62:23:3e:b6:e4:e2:18:2b:3f:ae:fb:17:e7:d8:
-                    c4:28:27:27:d9:3e:5c:d1:8f:51:b7:10:4c:44:f6:
-                    bb:6b:24:7c:2e:09:bc:fb:8a:af:fa:e4:ce:94:2f:
-                    27:cd:3d:e7:be:93:4b:62:37:f5:f1:a8:8e:7e:76:
-                    92:62:7b:02:41:98:c2:f6:ff:68:8e:d2:1d:fb:9e:
-                    f1:45:f5:6a:9c:8d:28:23:c1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ea:23:95:11:2c:b5:2d:49:c5:10:77:74:82:98:
+                    da:5f:58:1f:2b:40:6e:1b:2e:d8:4f:30:07:6b:a2:
+                    ae:9f:f7:ed:8d:2d:b4:b3:68:48:ec:60:72:a2:fb:
+                    8b:7e:62:11:90:79:96:f9:ee:82:78:3f:09:22:2b:
+                    03:45:af:9e:ca:7e:3c:80:4f:ad:59:77:85:c5:e7:
+                    6b:4a:0b:a2:6b:4b:c5:e7:f9:38:81:64:05:ea:cd:
+                    76:9c:bf:eb:51:aa:29:6c:c1:3e:98:c6:ac:49:a2:
+                    ac:32:60:78:d8:ff:c6:79:f8:a5:a6:78:61:24:9a:
+                    27:26:2e:06:3a:19:8e:54:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: 
                 Encipher Only
     Signature Algorithm: sha256WithRSAEncryption
-        26:c1:64:ae:88:f7:19:f6:4f:f6:89:c9:d4:4e:46:cc:8f:51:
-        d3:b0:1c:d5:54:08:b0:5c:a7:51:48:24:be:e5:9f:d1:79:8b:
-        fb:92:84:aa:92:c6:2f:b1:76:e2:f2:21:f7:f1:5d:05:c3:5c:
-        01:90:20:8c:46:9e:a2:b9:dd:71:4f:a4:b9:3a:15:d3:74:98:
-        59:bf:f8:44:c5:a4:99:67:01:e7:d6:52:8d:2f:02:3a:f4:e8:
-        c8:b3:9c:f3:35:18:4e:41:03:a7:b6:b3:5c:84:61:43:6b:95:
-        b4:84:d1:c1:72:29:ac:d5:6f:e4:6c:f1:86:b6:eb:09:77:1e:
-        89:92
+         80:7c:f9:bc:bd:15:b1:9d:75:d1:82:b5:42:79:d3:5e:2c:e3:
+         c4:73:ed:3b:3c:8a:83:9c:51:e9:1f:93:75:1f:81:01:11:f9:
+         fd:a8:56:0f:cf:d3:a9:38:26:e3:f0:78:79:75:ef:97:7b:01:
+         0b:b7:37:65:6c:93:76:07:ec:fa:f5:1e:2d:6a:3b:6d:15:fc:
+         41:6f:fb:17:52:be:cc:a8:95:da:be:3b:6d:d8:5d:42:10:aa:
+         20:9e:8e:c5:33:ed:7b:8a:f1:e5:e3:45:21:05:2e:77:3b:c9:
+         66:46:25:37:e4:5c:b0:f5:29:0a:be:0d:bc:c8:e9:d8:fc:31:
+         22:e3
 -----BEGIN CERTIFICATE-----
-MIICezCCAeSgAwIBAgIBFTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDVaFw0xNDAxMDUyMjM3NDVaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczVfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M1X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMC+ZuZVy57W
-0nvTsjT7yXTVME9iHGi9E5cIt4y2Tt1/mKXiLy6cdJIBQ2KOnGIjPrbk4hgrP677
-F+fYxCgnJ9k+XNGPUbcQTET2u2skfC4JvPuKr/rkzpQvJ809576TS2I39fGojn52
-kmJ7AkGYwvb/aI7SHfue8UX1apyNKCPBAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAw
-CwYDVR0PBAQDAgABMA0GCSqGSIb3DQEBCwUAA4GBACbBZK6I9xn2T/aJydRORsyP
-UdOwHNVUCLBcp1FIJL7ln9F5i/uShKqSxi+xduLyIffxXQXDXAGQIIxGnqK53XFP
-pLk6FdN0mFm/+ETFpJlnAefWUo0vAjr06MiznPM1GE5BA6e2s1yEYUNrlbSE0cFy
-KazVb+Rs8Ya26wl3HomS
+MIICfTCCAeagAwIBAgIBFTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzNV9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczVfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6iOVESy1
+LUnFEHd0gpjaX1gfK0BuGy7YTzAHa6Kun/ftjS20s2hI7GByovuLfmIRkHmW+e6C
+eD8JIisDRa+eyn48gE+tWXeFxedrSguia0vF5/k4gWQF6s12nL/rUaopbME+mMas
+SaKsMmB42P/GefilpnhhJJonJi4GOhmOVNECAwEAAaMdMBswDAYDVR0TAQH/BAIw
+ADALBgNVHQ8EBAMCAAEwDQYJKoZIhvcNAQELBQADgYEAgHz5vL0VsZ110YK1QnnT
+XizjxHPtOzyKg5xR6R+TdR+BARH5/ahWD8/TqTgm4/B4eXXvl3sBC7c3ZWyTdgfs
++vUeLWo7bRX8QW/7F1K+zKiV2r47bdhdQhCqIJ6OxTPte4rx5eNFIQUudzvJZkYl
+N+RcsPUpCr4NvMjp2PwxIuM=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/16.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/16.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 22 (0x16)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:45 2011 GMT
-            Not After : Jan  5 22:37:45 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs6_ch1_ta3/emailAddress=cs6_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs6_ch1_ta3/emailAddress=cs6_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c7:77:32:f6:35:5a:29:de:dc:61:89:a9:7e:d3:
-                    4f:ac:a1:db:f1:7f:58:1c:d3:46:a8:eb:61:62:80:
-                    d0:cf:40:6b:a4:39:ac:fb:f3:e4:a2:47:53:78:d4:
-                    cd:5a:5f:b1:c0:e8:2c:81:2d:00:98:d5:2f:6b:e9:
-                    e7:85:e6:0e:1e:46:d6:22:b9:f3:a7:e0:6c:18:ea:
-                    42:33:cd:c0:9c:e0:98:ec:29:67:39:c4:a3:f7:69:
-                    8b:04:66:f5:a2:3c:08:1b:24:e5:ba:d4:57:5b:14:
-                    f1:f2:c8:2b:0f:22:ae:6e:d1:ca:85:01:e6:75:82:
-                    03:df:7a:ed:96:8a:64:2f:5f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a5:2e:d6:bd:fc:2f:5b:4c:b8:91:90:8e:f6:3f:
+                    bb:55:28:8d:4f:9d:47:70:ed:3e:a1:bd:70:42:47:
+                    b0:41:09:7b:87:4f:eb:1a:45:9f:09:6d:0a:8c:53:
+                    73:a3:3d:fb:3f:dc:67:f4:03:d3:7c:51:15:f3:ab:
+                    6c:2c:39:d0:a7:4e:c2:3f:5c:d2:d8:87:f1:03:3b:
+                    eb:75:9e:9e:66:d5:3d:d5:e5:6d:32:92:ad:05:b8:
+                    c2:3b:48:e5:72:b4:9d:c9:b7:42:4f:d7:b4:a5:8c:
+                    a4:88:76:df:11:3e:b1:5c:a2:bd:7d:56:f8:c8:76:
+                    00:c4:88:64:0f:36:7e:cb:23
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Encipher Only
     Signature Algorithm: sha256WithRSAEncryption
-        7b:52:05:af:d4:77:41:4d:3f:cf:39:bd:33:a2:82:96:38:df:
-        a5:f7:ab:44:a3:b4:fc:13:ad:f5:d0:48:81:34:10:12:e9:c7:
-        47:3f:13:1d:0a:20:8c:a7:df:23:a1:f5:5c:05:58:7a:ff:58:
-        61:57:25:2c:36:22:10:e6:a4:d4:e3:f4:ad:b3:35:a9:91:93:
-        24:52:f6:28:4c:90:12:98:31:9b:31:8c:64:2f:79:df:d1:f1:
-        6e:d2:43:84:fe:bf:e5:ea:a9:74:6c:ce:cd:44:89:6b:df:bf:
-        7c:dd:77:24:0b:18:07:42:89:41:b3:2c:60:30:db:75:05:82:
-        15:85
+         48:51:71:0e:8c:c2:42:98:91:34:dc:a9:8a:92:98:18:ce:30:
+         fd:61:11:66:9a:87:7a:7b:a6:dd:09:7f:36:9c:7d:d8:19:b6:
+         ab:5d:6a:22:b3:4a:00:45:66:1f:ed:d5:1f:b4:cc:c7:a5:07:
+         5f:6f:35:2c:bc:52:1a:c9:c0:96:56:fd:82:33:50:7b:2e:43:
+         79:2c:cb:e4:e9:22:55:0a:09:96:05:f7:96:e1:22:95:3a:8e:
+         66:b1:21:aa:88:f1:21:4a:20:ae:08:b1:27:7e:f6:6b:be:55:
+         68:0b:d0:d6:77:30:78:92:75:38:d2:ab:31:79:8e:5d:71:a3:
+         b3:2b
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBFjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDVaFw0xNDAxMDUyMjM3NDVaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczZfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M2X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMd3MvY1Wine
-3GGJqX7TT6yh2/F/WBzTRqjrYWKA0M9Aa6Q5rPvz5KJHU3jUzVpfscDoLIEtAJjV
-L2vp54XmDh5G1iK586fgbBjqQjPNwJzgmOwpZznEo/dpiwRm9aI8CBsk5brUV1sU
-8fLIKw8irm7RyoUB5nWCA9967ZaKZC9fAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgABMA0GCSqGSIb3DQEBCwUAA4GBAHtSBa/Ud0FNP885vTOi
-gpY436X3q0SjtPwTrfXQSIE0EBLpx0c/Ex0KIIyn3yOh9VwFWHr/WGFXJSw2IhDm
-pNTj9K2zNamRkyRS9ihMkBKYMZsxjGQved/R8W7SQ4T+v+XqqXRszs1EiWvfv3zd
-dyQLGAdCiUGzLGAw23UFghWF
+MIICgDCCAemgAwIBAgIBFjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzNl9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczZfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApS7Wvfwv
+W0y4kZCO9j+7VSiNT51HcO0+ob1wQkewQQl7h0/rGkWfCW0KjFNzoz37P9xn9APT
+fFEV86tsLDnQp07CP1zS2IfxAzvrdZ6eZtU91eVtMpKtBbjCO0jlcrSdybdCT9e0
+pYykiHbfET6xXKK9fVb4yHYAxIhkDzZ+yyMCAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCAAEwDQYJKoZIhvcNAQELBQADgYEASFFxDozCQpiRNNyp
+ipKYGM4w/WERZpqHenum3Ql/Npx92Bm2q11qIrNKAEVmH+3VH7TMx6UHX281LLxS
+GsnAllb9gjNQey5DeSzL5OkiVQoJlgX3luEilTqOZrEhqojxIUogrgixJ372a75V
+aAvQ1ncweJJ1ONKrMXmOXXGjsys=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/17.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/17.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,51 +2,51 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 23 (0x17)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:46 2011 GMT
-            Not After : Jan  5 22:37:46 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs7_ch1_ta3/emailAddress=cs7_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs7_ch1_ta3/emailAddress=cs7_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c8:97:06:72:77:82:e7:03:53:56:f7:71:5c:f4:
-                    b5:ae:e1:22:08:f7:a7:70:47:2f:ad:6f:af:a9:39:
-                    c3:73:ca:f5:d5:54:e9:3d:46:f8:a4:a1:1a:27:d5:
-                    1a:c6:90:c9:4b:c1:21:32:06:9b:56:d7:23:3c:23:
-                    d9:aa:2a:17:15:61:0c:cc:08:e7:60:af:55:e6:9e:
-                    e2:24:bd:1f:e9:04:e8:09:ed:f4:a3:d8:5e:24:91:
-                    95:3e:9f:7e:f7:64:66:60:08:7d:cf:ac:b6:f4:6b:
-                    72:28:61:8c:dc:51:4d:00:3e:4d:67:70:0e:ae:3c:
-                    37:99:28:47:e7:61:fe:a3:73
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:bc:52:93:cc:6b:6d:63:bb:fe:a2:33:3d:40:a4:
+                    ba:3f:12:4c:72:69:a0:87:80:32:50:47:91:8f:39:
+                    6f:8a:78:78:9a:f6:34:83:2d:7d:6a:19:90:36:9f:
+                    fb:7c:1c:c8:13:f9:13:b2:6a:75:1a:2c:3a:76:2b:
+                    10:d2:f3:90:1f:65:df:65:04:0c:97:a2:fa:43:53:
+                    33:32:f8:8f:f3:30:a7:1c:4a:67:9c:da:81:b8:7a:
+                    55:c4:30:1d:59:5d:f1:0a:bc:b6:52:b3:09:41:24:
+                    1f:30:6b:ed:95:ba:90:cf:0d:af:eb:c7:fb:31:35:
+                    c5:5b:ff:67:9a:8a:1b:34:09
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-        7a:58:f4:9c:bc:64:08:aa:dc:9c:e2:d3:a0:92:cb:1a:b3:75:
-        c9:c7:39:07:84:cb:4a:0f:07:2c:b8:5d:8a:a3:22:69:2e:63:
-        04:d8:16:5f:8d:e8:11:de:fc:f5:df:a3:6c:c9:f0:c2:d7:5d:
-        6c:43:3c:e2:ae:ed:b2:01:cf:e1:77:b3:85:76:bb:76:f7:c9:
-        cd:50:7f:17:b7:82:22:ed:d9:1c:82:bf:da:3f:28:72:c5:45:
-        e3:08:96:ba:45:22:76:bb:b4:9d:f6:e1:a0:64:36:9b:a2:e2:
-        83:64:b1:76:1d:09:2f:6c:4b:a9:9b:00:e3:79:cf:7d:0b:91:
-        b3:95
+         68:79:a6:5a:7f:1d:50:2a:e9:60:26:b2:31:e8:66:e2:c1:5e:
+         12:78:d9:32:fc:0c:07:5d:15:22:f7:f7:22:52:96:0d:35:8e:
+         bd:dd:60:ab:0f:d9:dc:6b:4e:a5:d8:57:83:ff:d1:60:a5:c1:
+         c7:0c:49:c3:05:c4:9a:9f:87:ba:ff:47:9f:51:dd:04:2a:90:
+         53:b1:f9:8d:fa:34:97:a2:4b:4b:70:84:67:1d:de:f4:e6:e6:
+         bd:0e:c4:24:8a:e2:8b:fa:ac:06:2c:09:ed:bd:7d:b3:1e:df:
+         a9:be:4c:c5:49:c1:72:bd:d8:a7:3f:25:89:15:3f:1c:19:e6:
+         84:15
 -----BEGIN CERTIFICATE-----
-MIICbjCCAdegAwIBAgIBFzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDZaFw0xNDAxMDUyMjM3NDZaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczdfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M3X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMiXBnJ3gucD
-U1b3cVz0ta7hIgj3p3BHL61vr6k5w3PK9dVU6T1G+KShGifVGsaQyUvBITIGm1bX
-Izwj2aoqFxVhDMwI52CvVeae4iS9H+kE6Ant9KPYXiSRlT6ffvdkZmAIfc+stvRr
-cihhjNxRTQA+TWdwDq48N5koR+dh/qNzAgMBAAGjEDAOMAwGA1UdEwEB/wQCMAAw
-DQYJKoZIhvcNAQELBQADgYEAelj0nLxkCKrcnOLToJLLGrN1ycc5B4TLSg8HLLhd
-iqMiaS5jBNgWX43oEd789d+jbMnwwtddbEM84q7tsgHP4XezhXa7dvfJzVB/F7eC
-Iu3ZHIK/2j8ocsVF4wiWukUidru0nfbhoGQ2m6Lig2Sxdh0JL2xLqZsA43nPfQuR
-s5U=
+MIICcDCCAdmgAwIBAgIBFzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzN19jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczdfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvFKTzGtt
+Y7v+ojM9QKS6PxJMcmmgh4AyUEeRjzlvinh4mvY0gy19ahmQNp/7fBzIE/kTsmp1
+Giw6disQ0vOQH2XfZQQMl6L6Q1MzMviP8zCnHEpnnNqBuHpVxDAdWV3xCry2UrMJ
+QSQfMGvtlbqQzw2v68f7MTXFW/9nmoobNAkCAwEAAaMQMA4wDAYDVR0TAQH/BAIw
+ADANBgkqhkiG9w0BAQsFAAOBgQBoeaZafx1QKulgJrIx6GbiwV4SeNky/AwHXRUi
+9/ciUpYNNY693WCrD9nca06l2FeD/9FgpcHHDEnDBcSan4e6/0efUd0EKpBTsfmN
++jSXoktLcIRnHd705ua9DsQkiuKL+qwGLAntvX2zHt+pvkzFScFyvdinPyWJFT8c
+GeaEFQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/18.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/18.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 24 (0x18)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:46 2011 GMT
-            Not After : Jan  5 22:37:46 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c4:da:c4:d3:72:c2:65:ec:7f:b8:41:e3:c7:14:
-                    83:bb:fc:9e:d5:87:15:5f:eb:52:da:cb:f4:c7:db:
-                    2f:58:65:01:0e:0e:d5:27:cf:c5:e5:2c:ce:99:7f:
-                    0f:48:8c:4f:54:47:6b:4b:5e:90:3f:95:96:60:b8:
-                    8e:39:1f:a9:cc:38:b6:9f:21:6d:4e:69:2e:14:c5:
-                    71:fe:e1:e1:44:24:d4:74:45:4a:9f:88:64:36:96:
-                    f7:ba:74:1e:88:f9:6d:ac:e9:25:f0:74:58:c6:13:
-                    b9:05:ab:fa:0e:5c:77:fc:a1:3d:48:9c:78:90:f8:
-                    67:41:99:7c:bf:45:6a:67:ef
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:de:50:67:d6:8e:a7:53:1b:73:03:fe:c7:ef:59:
+                    82:0c:d7:74:ef:ad:21:33:68:78:46:27:7f:f1:0c:
+                    76:67:8d:be:ba:f8:36:00:c7:1b:eb:82:1f:70:58:
+                    71:02:db:6a:9e:11:37:a8:b0:28:27:b4:9f:be:1d:
+                    2a:fb:67:4f:a1:3a:ce:e2:70:d2:d8:81:eb:92:5a:
+                    c6:3f:97:ec:2c:49:b5:5b:8a:e1:ea:60:35:28:6a:
+                    e8:37:b6:7a:1e:83:36:32:52:3f:c0:a5:b2:74:19:
+                    b1:32:34:66:da:f8:fc:e1:92:42:b2:a6:87:48:56:
+                    37:66:e3:3c:6f:58:73:26:a1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        1d:d4:91:76:de:42:bb:70:5b:57:39:fe:bd:50:85:66:ee:7c:
-        c7:7c:7c:00:18:71:73:50:5a:70:04:43:ca:81:23:2a:42:c8:
-        8e:34:91:b9:8b:b8:f7:37:b0:08:3f:ee:b2:5f:a2:fd:03:b1:
-        59:d1:ff:cf:b6:73:f6:82:51:0a:73:a0:43:79:36:a2:c4:fb:
-        98:6c:64:bc:3a:f5:b9:c5:e7:c1:cf:76:fb:73:23:d3:47:e2:
-        a9:19:60:08:a7:c8:1b:c3:73:24:f9:8d:dc:bf:ae:5d:5b:fe:
-        48:d0:06:a7:33:e5:d8:db:4c:c9:82:a0:32:c1:1e:45:67:67:
-        ce:54
+         55:cb:0c:50:d9:e0:bd:c9:b2:60:0f:0d:3e:ac:e3:e0:e2:2f:
+         02:a9:5b:5b:2d:4c:bb:55:e0:5a:83:63:46:46:92:cc:1f:f3:
+         8b:24:de:6f:9e:c6:b5:f5:ca:57:1d:07:d4:97:4e:d3:9b:a9:
+         17:56:6c:fa:57:7f:cd:a4:55:ab:64:b7:57:b4:59:a4:be:d6:
+         8c:6d:70:8a:4f:f4:13:20:e1:70:89:18:98:77:e9:91:87:a9:
+         01:66:07:43:df:df:4d:ac:e1:1b:b1:c5:d8:20:3f:fc:fd:5f:
+         1d:fc:61:8e:43:b9:ca:ed:db:83:88:e2:0f:4a:a9:f2:20:ee:
+         e6:54
 -----BEGIN CERTIFICATE-----
-MIICgTCCAeqgAwIBAgIBGDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDZaFw0xNDAxMDUyMjM3NDZaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczhfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M4X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMTaxNNywmXs
-f7hB48cUg7v8ntWHFV/rUtrL9MfbL1hlAQ4O1SfPxeUszpl/D0iMT1RHa0tekD+V
-lmC4jjkfqcw4tp8hbU5pLhTFcf7h4UQk1HRFSp+IZDaW97p0Hoj5bazpJfB0WMYT
-uQWr+g5cd/yhPUiceJD4Z0GZfL9FamfvAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBAB3UkXbeQrtwW1c5
-/r1QhWbufMd8fAAYcXNQWnAEQ8qBIypCyI40kbmLuPc3sAg/7rJfov0DsVnR/8+2
-c/aCUQpzoEN5NqLE+5hsZLw69bnF58HPdvtzI9NH4qkZYAinyBvDcyT5jdy/rl1b
-/kjQBqcz5djbTMmCoDLBHkVnZ85U
+MIICgzCCAeygAwIBAgIBGDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzOF9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczhfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3lBn1o6n
+UxtzA/7H71mCDNd0760hM2h4Rid/8Qx2Z42+uvg2AMcb64IfcFhxAttqnhE3qLAo
+J7Sfvh0q+2dPoTrO4nDS2IHrklrGP5fsLEm1W4rh6mA1KGroN7Z6HoM2MlI/wKWy
+dBmxMjRm2vj84ZJCsqaHSFY3ZuM8b1hzJqECAwEAAaMjMCEwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAVcsMUNngvcmy
+YA8NPqzj4OIvAqlbWy1Mu1XgWoNjRkaSzB/ziyTeb57GtfXKVx0H1JdO05upF1Zs
++ld/zaRVq2S3V7RZpL7WjG1wik/0EyDhcIkYmHfpkYepAWYHQ9/fTazhG7HF2CA/
+/P1fHfxhjkO5yu3bg4jiD0qp8iDu5lQ=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/19.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/19.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 25 (0x19)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:46 2011 GMT
-            Not After : Jan  5 22:37:46 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a8:89:d6:f6:e1:32:a9:bc:a5:c2:c8:00:1c:a1:
-                    04:fc:93:5a:5c:29:1d:37:7e:29:e1:7f:69:79:24:
-                    ab:05:5a:83:71:d8:3c:bb:e5:1c:b8:e0:5e:a8:bd:
-                    41:06:cb:69:f6:d2:b9:48:c4:93:7c:ae:c6:38:bc:
-                    d7:9a:f2:db:8d:f9:5f:51:c4:1b:d2:c5:0e:57:6d:
-                    0b:73:19:a8:34:e6:5b:81:80:43:77:3a:8e:54:59:
-                    91:69:a9:aa:9f:2b:24:24:1e:06:e8:bc:f2:3f:c3:
-                    ee:33:3f:f4:5f:76:fd:24:05:48:a8:98:2f:15:eb:
-                    16:d5:24:6b:ea:59:e6:06:51
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:fd:f6:7a:f6:04:88:b5:e3:ff:6f:ce:2a:01:
+                    89:dd:07:a7:10:5d:ca:76:bf:d2:18:97:80:5a:b1:
+                    b8:6e:6b:bd:6b:65:9a:24:0d:3d:dc:7f:eb:53:1f:
+                    45:9e:9c:61:98:da:18:08:c3:3e:45:de:e0:1e:16:
+                    93:2d:30:a4:e3:52:48:5d:97:80:3d:b9:3e:25:28:
+                    b1:be:17:db:71:57:ba:3f:69:22:3e:83:c7:6f:fe:
+                    69:fd:6d:cf:7a:2f:72:36:8d:85:28:38:50:0f:45:
+                    2f:22:e8:49:04:da:17:d5:a1:15:7e:b6:0e:de:e4:
+                    cc:2f:2a:e2:21:95:08:cb:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        27:04:6d:7c:c0:89:81:f7:16:04:e2:f7:f1:4a:3b:60:17:4d:
-        f2:c3:0b:78:32:a5:f0:b4:e4:4e:2e:8e:06:d6:2d:3a:65:33:
-        a1:16:60:47:78:1f:f3:d3:72:c5:c7:43:f8:bb:0e:22:2a:7b:
-        a6:3e:9c:1e:40:c8:71:ff:28:82:0b:d9:93:8c:b9:f6:a2:ca:
-        d5:52:81:b6:b7:a1:20:09:e8:8a:68:e5:24:d1:dd:da:dc:1a:
-        01:3d:e5:77:77:fe:64:f5:b6:14:f9:8b:04:3f:11:7e:62:f5:
-        ee:01:7c:d9:d5:b7:00:19:a9:49:05:94:0b:30:22:63:d2:0d:
-        3e:7a
+         a7:ac:32:bc:eb:2c:bc:b7:f1:f5:7a:e0:5b:34:0f:f0:44:44:
+         c5:9d:19:ca:4d:81:a6:9c:ea:43:be:fb:4f:3c:86:26:cf:f8:
+         a5:d0:9b:4f:65:eb:90:a4:8c:12:54:1c:6b:7a:c8:d2:e5:2b:
+         46:81:23:bc:e2:1a:a7:53:35:ea:fe:a5:e7:d4:d4:12:12:f1:
+         28:65:e0:12:56:36:2e:78:e3:fa:ca:1e:5e:b5:6f:27:39:7a:
+         fd:a0:1c:38:0b:2f:d6:68:24:9f:66:62:ea:28:82:f8:d4:10:
+         40:02:af:d1:91:79:6d:bf:f8:de:d1:45:cd:7d:35:92:69:f3:
+         30:4d
 -----BEGIN CERTIFICATE-----
-MIICjzCCAfigAwIBAgIBGTANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEUMBIGA1UEAxQLY3M4X2NoMV90YTMxGjAYBgkqhkiG9w0BCQEWC2Nz
-OF9jaDFfdGEzMB4XDTExMDQxMTIyMzc0NloXDTE0MDEwNTIyMzc0NlowgYAxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MRgwFgYDVQQDFA9jczFfY3M4X2NoMV90YTMxHjAc
-BgkqhkiG9w0BCQEWD2NzMV9jczhfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEAqInW9uEyqbylwsgAHKEE/JNaXCkdN34p4X9peSSrBVqDcdg8u+Uc
-uOBeqL1BBstp9tK5SMSTfK7GOLzXmvLbjflfUcQb0sUOV20LcxmoNOZbgYBDdzqO
-VFmRaamqnyskJB4G6LzyP8PuMz/0X3b9JAVIqJgvFesW1SRr6lnmBlECAwEAAaMg
-MB4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQAD
-gYEAJwRtfMCJgfcWBOL38Uo7YBdN8sMLeDKl8LTkTi6OBtYtOmUzoRZgR3gf89Ny
-xcdD+LsOIip7pj6cHkDIcf8oggvZk4y59qLK1VKBtrehIAnoimjlJNHd2twaAT3l
-d3f+ZPW2FPmLBD8RfmL17gF82dW3ABmpSQWUCzAiY9INPno=
+MIICkTCCAfqgAwIBAgIBGTANBgkqhkiG9w0BAQsFADB5MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxFDASBgNVBAMMC2NzOF9jaDFfdGEzMRowGAYJKoZIhvcNAQkBFgtj
+czhfY2gxX3RhMzAeFw0xMzEyMTMwMDEzMzZaFw0xNjA5MDgwMDEzMzZaMIGBMQsw
+CQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEg
+Q2xhcmExDTALBgNVBAoMBHBrZzUxGDAWBgNVBAMMD2NzMV9jczhfY2gxX3RhMzEe
+MBwGCSqGSIb3DQEJARYPY3MxX2NzOF9jaDFfdGEzMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDM/fZ69gSIteP/b84qAYndB6cQXcp2v9IYl4Basbhua71rZZok
+DT3cf+tTH0WenGGY2hgIwz5F3uAeFpMtMKTjUkhdl4A9uT4lKLG+F9txV7o/aSI+
+g8dv/mn9bc96L3I2jYUoOFAPRS8i6EkE2hfVoRV+tg7e5MwvKuIhlQjLBwIDAQAB
+oyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsF
+AAOBgQCnrDK86yy8t/H1euBbNA/wRETFnRnKTYGmnOpDvvtPPIYmz/il0JtPZeuQ
+pIwSVBxresjS5StGgSO84hqnUzXq/qXn1NQSEvEoZeASVjYueOP6yh5etW8nOXr9
+oBw4Cy/WaCSfZmLqKIL41BBAAq/RkXltv/je0UXNfTWSafMwTQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/1B.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/1B.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 27 (0x1b)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
         Validity
-            Not Before: Apr 11 22:37:47 2011 GMT
-            Not After : Jan  5 22:37:47 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.1_ta3/emailAddress=cs1_ch1.1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.1_ta3/emailAddress=cs1_ch1.1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:eb:05:16:da:3a:66:0f:5c:d8:26:83:38:fa:4f:
-                    60:0f:8c:42:06:b6:45:be:2e:ca:6c:fd:d8:a7:5f:
-                    14:70:e9:04:ee:f2:c7:40:b2:28:f4:d9:99:65:b0:
-                    2e:a2:e6:2c:df:42:72:12:92:ca:c1:6e:4d:2f:76:
-                    41:aa:22:bc:8d:f4:e8:40:78:61:b5:92:a7:43:ef:
-                    1c:55:19:31:a8:45:23:0f:b6:d5:32:44:35:dd:78:
-                    d4:f1:80:39:68:d1:ac:c1:4d:18:e2:e5:4d:eb:a9:
-                    cb:95:51:6c:c7:3a:50:ba:d3:4a:dc:7d:21:ad:ee:
-                    5a:36:5b:ce:34:1c:58:a7:d3
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cb:04:cf:d4:10:a0:b8:0a:41:51:cc:92:ed:1d:
+                    e6:42:d0:be:20:9c:08:f4:eb:67:d9:88:86:90:3c:
+                    f5:44:60:42:95:d3:0c:27:9a:90:f5:af:c6:4d:22:
+                    36:ba:9f:e2:74:17:f7:dd:2a:04:50:db:f3:2b:df:
+                    68:16:d9:ae:83:3b:2a:fa:7e:05:00:4e:64:a5:1e:
+                    c1:8e:99:11:b5:99:64:ae:36:0c:6d:41:42:72:a6:
+                    b0:2f:8d:e7:f1:b6:a8:1a:88:e5:ce:bc:dc:3c:9a:
+                    d1:39:ad:09:ab:c7:a0:bd:3c:36:92:b2:31:12:f9:
+                    76:1a:68:24:e6:70:e3:2e:25
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        1d:bc:1d:73:ed:03:34:4b:73:87:24:58:03:61:5a:67:fc:64:
-        f5:5e:a0:db:84:be:f0:9d:91:37:36:fc:db:86:90:99:3a:c3:
-        07:23:07:90:e5:5a:68:97:8f:b1:e8:d1:57:e5:a8:7e:b0:19:
-        2b:b6:25:b0:42:56:da:0c:3c:a9:82:4d:af:8f:f0:b7:c0:c3:
-        d7:d2:4d:9f:c9:40:5c:72:c4:95:86:de:28:5d:64:fe:7d:fd:
-        3d:51:33:90:7b:c0:9f:2b:5c:2f:36:29:a8:72:4f:4f:ad:44:
-        0a:d5:b4:fe:1f:d4:01:82:07:ed:36:81:8b:b3:1d:1d:42:ab:
-        53:bc
+         86:83:0a:12:5d:ac:ff:51:37:a3:5f:b2:62:5b:87:29:77:27:
+         49:73:d0:01:ed:f1:a9:53:02:ad:8e:f5:51:d7:7c:56:76:68:
+         75:f5:9d:b1:6c:0a:99:4e:59:85:16:58:fd:d2:3d:83:41:9d:
+         5f:6e:3a:90:8f:1a:dd:8d:96:8e:91:3c:d2:bb:ed:94:c3:0f:
+         86:dd:07:35:cf:b9:7b:ac:3d:1d:4a:15:c7:c4:21:14:91:46:
+         0e:42:9f:41:4b:44:e7:3b:5d:68:f0:65:2c:ef:3a:76:cd:c5:
+         cc:db:be:21:d0:bc:a1:8e:8d:ce:a5:e8:b5:e7:a0:ae:cf:74:
+         72:24
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBGzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjFfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-MV90YTMwHhcNMTEwNDExMjIzNzQ3WhcNMTQwMTA1MjIzNzQ3WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4xX3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4xX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-6wUW2jpmD1zYJoM4+k9gD4xCBrZFvi7KbP3Yp18UcOkE7vLHQLIo9NmZZbAuouYs
-30JyEpLKwW5NL3ZBqiK8jfToQHhhtZKnQ+8cVRkxqEUjD7bVMkQ13XjU8YA5aNGs
-wU0Y4uVN66nLlVFsxzpQutNK3H0hre5aNlvONBxYp9MCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAHbwdc+0D
-NEtzhyRYA2FaZ/xk9V6g24S+8J2RNzb824aQmTrDByMHkOVaaJePsejRV+WofrAZ
-K7YlsEJW2gw8qYJNr4/wt8DD19JNn8lAXHLElYbeKF1k/n39PVEzkHvAnytcLzYp
-qHJPT61ECtW0/h/UAYIH7TaBi7MdHUKrU7w=
+MIICiDCCAfGgAwIBAgIBGzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4xX3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjFfdGEzMB4XDTEzMTIxMzAwMTMzNloXDTE2MDkwODAwMTMzNlowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjFfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjFfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDLBM/UEKC4CkFRzJLtHeZC0L4gnAj062fZiIaQPPVEYEKV0wwnmpD1r8ZNIja6
+n+J0F/fdKgRQ2/Mr32gW2a6DOyr6fgUATmSlHsGOmRG1mWSuNgxtQUJyprAvjefx
+tqgaiOXOvNw8mtE5rQmrx6C9PDaSsjES+XYaaCTmcOMuJQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQCGgwoS
+Xaz/UTejX7JiW4cpdydJc9AB7fGpUwKtjvVR13xWdmh19Z2xbAqZTlmFFlj90j2D
+QZ1fbjqQjxrdjZaOkTzSu+2Uww+G3Qc1z7l7rD0dShXHxCEUkUYOQp9BS0TnO11o
+8GUs7zp2zcXM274h0Lyhjo3Opei156Cuz3RyJA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/1D.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/1D.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 29 (0x1d)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
         Validity
-            Not Before: Apr 11 22:37:48 2011 GMT
-            Not After : Jan  5 22:37:48 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.2_ta3/emailAddress=cs1_ch1.2_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.2_ta3/emailAddress=cs1_ch1.2_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d7:e5:0a:18:00:54:5b:ee:5a:de:78:35:85:4f:
-                    db:06:0c:e0:87:10:97:78:78:dc:2b:ab:95:86:3c:
-                    35:c4:42:1a:e8:c3:98:c8:5d:a1:25:a5:94:d6:8b:
-                    8e:73:e5:75:82:0a:e7:a0:47:3d:d3:16:86:3d:55:
-                    4c:2e:65:75:1b:6f:90:48:a6:4b:84:ee:76:81:56:
-                    a0:36:17:9b:58:0c:45:a6:0c:b3:0c:f1:34:11:df:
-                    14:8e:99:be:22:a2:a5:62:65:f0:a8:57:57:39:b9:
-                    13:1c:8b:97:6d:fd:56:b7:ce:1b:cb:ff:ad:80:c6:
-                    a3:0d:42:fe:bc:82:8f:4a:03
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d0:f8:ae:0b:eb:1f:d2:8b:41:0a:36:62:76:eb:
+                    5d:55:d4:b8:8a:eb:80:b8:05:58:ed:29:5d:9c:3f:
+                    2b:84:e5:be:1e:f6:ab:dd:d4:32:04:ee:f4:9b:b2:
+                    38:1c:59:0a:12:33:f8:b7:b6:e2:37:66:2e:58:e5:
+                    3d:7e:b8:69:73:74:8c:ad:d1:ae:de:11:38:04:7e:
+                    26:92:d4:2c:2e:68:15:09:4a:4f:d1:04:b6:ad:c7:
+                    d8:d7:2a:6d:92:cc:ca:48:87:c6:68:a4:c5:37:af:
+                    cc:20:6d:83:ba:f8:6b:f5:9b:8e:7d:df:d6:8b:7d:
+                    f1:36:6f:a3:5b:0b:b1:e8:6b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        6b:92:5b:ba:16:e4:ff:58:0a:03:6e:d0:db:10:cb:1d:b3:b1:
-        0f:b5:b7:51:52:82:41:8c:0f:c2:3a:75:9c:26:bf:1d:25:91:
-        bc:b4:ca:17:79:ee:d8:61:89:1c:de:b1:23:4f:35:58:4f:2d:
-        d9:f4:e8:9f:56:d1:83:cc:ac:70:cd:3c:51:6f:45:e1:50:47:
-        06:17:61:cb:85:ed:d2:61:da:72:c6:79:4c:b9:7c:44:3a:c6:
-        a0:91:27:67:e5:e7:be:47:ee:fc:f4:c7:49:11:e5:65:3e:87:
-        f2:54:10:a9:41:24:6e:fb:ad:e5:4c:c8:e6:3f:9c:1c:61:41:
-        cd:a0
+         9f:2e:57:b4:bd:52:dd:f4:83:fb:24:d6:f1:99:36:97:b3:90:
+         4f:0d:10:ff:09:00:a3:1a:1e:10:39:63:f6:a6:0a:ee:9f:52:
+         55:b9:35:94:11:04:62:12:8a:c5:cf:c6:c5:2b:85:86:af:00:
+         80:b1:8a:1d:d6:4d:c3:78:d6:67:60:54:27:2e:28:15:b7:22:
+         23:47:4e:b0:89:8a:1a:03:24:db:5d:6a:a2:a7:af:cc:62:ca:
+         cd:2e:fd:7d:e2:2c:fb:5b:89:fd:b6:38:8a:3d:37:61:a9:94:
+         ad:31:d4:f3:d1:b6:91:d9:37:98:f1:ed:aa:11:da:0d:8f:93:
+         1c:8e
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBHTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjJfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-Ml90YTMwHhcNMTEwNDExMjIzNzQ4WhcNMTQwMTA1MjIzNzQ4WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4yX3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4yX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-1+UKGABUW+5a3ng1hU/bBgzghxCXeHjcK6uVhjw1xEIa6MOYyF2hJaWU1ouOc+V1
-ggrnoEc90xaGPVVMLmV1G2+QSKZLhO52gVagNhebWAxFpgyzDPE0Ed8Ujpm+IqKl
-YmXwqFdXObkTHIuXbf1Wt84by/+tgMajDUL+vIKPSgMCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAa5Jbuhbk
-/1gKA27Q2xDLHbOxD7W3UVKCQYwPwjp1nCa/HSWRvLTKF3nu2GGJHN6xI081WE8t
-2fTon1bRg8yscM08UW9F4VBHBhdhy4Xt0mHacsZ5TLl8RDrGoJEnZ+Xnvkfu/PTH
-SRHlZT6H8lQQqUEkbvut5UzI5j+cHGFBzaA=
+MIICiDCCAfGgAwIBAgIBHTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4yX3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjJfdGEzMB4XDTEzMTIxMzAwMTMzNloXDTE2MDkwODAwMTMzNlowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjJfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjJfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDQ+K4L6x/Si0EKNmJ2611V1LiK64C4BVjtKV2cPyuE5b4e9qvd1DIE7vSbsjgc
+WQoSM/i3tuI3Zi5Y5T1+uGlzdIyt0a7eETgEfiaS1CwuaBUJSk/RBLatx9jXKm2S
+zMpIh8ZopMU3r8wgbYO6+Gv1m45939aLffE2b6NbC7HoawIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQCfLle0
+vVLd9IP7JNbxmTaXs5BPDRD/CQCjGh4QOWP2pgrun1JVuTWUEQRiEorFz8bFK4WG
+rwCAsYod1k3DeNZnYFQnLigVtyIjR06wiYoaAyTbXWqip6/MYsrNLv194iz7W4n9
+tjiKPTdhqZStMdTz0baR2TeY8e2qEdoNj5Mcjg==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/1F.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/1F.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 31 (0x1f)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
         Validity
-            Not Before: Apr 11 22:37:48 2011 GMT
-            Not After : Jan  5 22:37:48 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.3_ta3/emailAddress=cs1_ch1.3_ta3
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.3_ta3/emailAddress=cs1_ch1.3_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b3:bb:8d:94:21:ec:dd:1d:bd:c4:ab:b9:04:17:
-                    f2:ac:58:db:4b:93:f9:17:2d:16:fc:d1:a5:ea:ee:
-                    e9:2e:4e:05:43:c2:4b:35:2e:ba:bc:70:f2:20:d7:
-                    53:64:ec:7f:84:ca:ce:eb:4d:ac:12:f0:55:6a:a9:
-                    be:17:a9:ae:63:61:37:3a:72:91:b2:82:b6:c1:7e:
-                    07:39:28:5a:20:a3:db:a4:24:34:ca:78:c8:9e:26:
-                    db:26:da:4f:b6:a6:cf:3f:23:d9:06:be:ad:d3:8f:
-                    23:41:51:49:f5:e3:63:91:68:a1:34:b9:3e:fd:da:
-                    22:07:86:a9:bd:58:93:84:2b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:fd:95:49:ab:6d:49:08:5c:f2:9b:77:e1:d0:71:
+                    4d:98:1b:84:31:e2:90:b2:0a:f6:af:2e:12:5b:31:
+                    d0:82:b4:ce:79:12:a5:56:44:d3:a5:49:51:68:45:
+                    cc:73:0e:67:6f:05:74:ff:ce:e7:27:8e:21:72:6a:
+                    df:58:42:b0:82:5d:ee:5f:9c:bc:be:10:d2:98:49:
+                    2a:a6:13:47:ac:27:23:83:fd:90:fd:42:9f:4d:5d:
+                    56:02:84:ff:53:40:51:ed:68:99:c6:20:c6:0d:e6:
+                    fb:47:f9:d8:42:0b:36:ca:50:69:27:9f:b7:8a:36:
+                    f6:5c:1a:0b:3e:9e:d7:12:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        28:69:b9:22:7b:ff:dd:7f:a5:95:f6:67:73:2d:f0:85:e9:22:
-        6e:ce:5e:f4:0e:39:90:56:a9:23:28:4a:73:d1:2f:4a:d5:dc:
-        fb:42:f2:c8:3c:a2:d7:97:08:ec:86:cc:72:65:23:21:88:e1:
-        be:67:8e:f8:44:7b:0e:b7:3f:04:75:db:4a:3f:32:e6:5a:e1:
-        6a:8e:f7:e9:20:ae:2c:62:51:34:d4:b1:c0:3b:20:64:d0:8f:
-        b3:86:4b:e1:82:ff:a2:61:eb:3f:1d:bf:2f:11:d2:01:96:a0:
-        a5:0f:df:1f:c9:1c:34:64:97:7d:3e:97:70:bf:2b:68:2f:cf:
-        91:52
+         50:82:2e:b8:61:6b:62:5f:4f:cf:e8:f9:6f:67:ba:ea:b2:40:
+         0c:49:40:e7:8d:db:af:e4:b0:61:8b:3c:6c:e5:43:d8:e9:8c:
+         f7:c2:7b:5f:ce:c5:f8:0e:9c:e2:77:6a:38:e2:25:0f:f0:e3:
+         d1:14:69:4a:ea:13:8a:91:ad:97:59:27:5e:4e:7c:f7:dc:b0:
+         34:94:3c:b7:9e:3f:40:da:44:66:73:f9:2c:8b:7e:d4:85:d8:
+         a6:58:fb:39:90:6e:3c:fd:b5:a1:39:82:dc:c3:87:97:d3:a7:
+         ce:e1:9d:18:63:27:77:99:fa:a3:c3:d7:d1:67:1d:4e:d0:07:
+         c2:9c
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBHzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjNfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-M190YTMwHhcNMTEwNDExMjIzNzQ4WhcNMTQwMTA1MjIzNzQ4WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4zX3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4zX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-s7uNlCHs3R29xKu5BBfyrFjbS5P5Fy0W/NGl6u7pLk4FQ8JLNS66vHDyINdTZOx/
-hMrO602sEvBVaqm+F6muY2E3OnKRsoK2wX4HOShaIKPbpCQ0ynjInibbJtpPtqbP
-PyPZBr6t048jQVFJ9eNjkWihNLk+/doiB4apvViThCsCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAKGm5Inv/
-3X+llfZncy3whekibs5e9A45kFapIyhKc9EvStXc+0LyyDyi15cI7IbMcmUjIYjh
-vmeO+ER7Drc/BHXbSj8y5lrhao736SCuLGJRNNSxwDsgZNCPs4ZL4YL/omHrPx2/
-LxHSAZagpQ/fH8kcNGSXfT6XcL8raC/PkVI=
+MIICiDCCAfGgAwIBAgIBHzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4zX3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjNfdGEzMB4XDTEzMTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjNfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjNfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQD9lUmrbUkIXPKbd+HQcU2YG4Qx4pCyCvavLhJbMdCCtM55EqVWRNOlSVFoRcxz
+DmdvBXT/zucnjiFyat9YQrCCXe5fnLy+ENKYSSqmE0esJyOD/ZD9Qp9NXVYChP9T
+QFHtaJnGIMYN5vtH+dhCCzbKUGknn7eKNvZcGgs+ntcSiQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQBQgi64
+YWtiX0/P6PlvZ7rqskAMSUDnjduv5LBhizxs5UPY6Yz3wntfzsX4Dpzid2o44iUP
+8OPRFGlK6hOKka2XWSdeTnz33LA0lDy3nj9A2kRmc/ksi37UhdimWPs5kG48/bWh
+OYLcw4eX06fO4Z0YYyd3mfqjw9fRZx1O0AfCnA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/21.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/21.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 33 (0x21)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
         Validity
-            Not Before: Apr 11 22:37:49 2011 GMT
-            Not After : Jan  5 22:37:49 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.4_ta3/emailAddress=cs1_ch1.4_ta3
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.4_ta3/emailAddress=cs1_ch1.4_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ae:be:e2:6c:c9:bb:11:1a:16:90:72:55:8c:f5:
-                    d6:64:e7:2d:5f:18:27:c7:1d:b5:6e:10:a4:8a:b9:
-                    0e:71:ef:d5:05:42:2b:12:da:79:51:58:08:2a:37:
-                    e9:3d:47:93:4f:0f:d2:2b:29:b3:de:84:02:86:a2:
-                    75:40:59:ef:26:7b:e5:23:f2:db:91:62:e0:d7:08:
-                    02:4c:c8:05:bf:f1:fc:d3:1a:cb:59:f9:86:a0:7f:
-                    99:c8:3a:08:82:ba:5f:4f:62:d7:74:a5:2d:3e:b8:
-                    17:d5:ca:25:0b:59:34:d0:f0:a0:ec:3a:cc:8a:e0:
-                    22:1d:fb:d0:b2:cf:62:db:13
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c2:93:d3:55:0b:34:cf:57:bc:a5:91:9e:80:a9:
+                    7a:83:fb:26:66:c5:c1:71:20:ab:f9:80:9a:59:eb:
+                    54:83:83:6b:ad:79:a8:7e:17:67:20:1a:a8:7e:57:
+                    6e:f8:dd:54:9a:6e:f0:2d:10:32:59:1f:74:53:6d:
+                    a2:50:6b:23:0c:bb:34:32:84:ed:7d:fe:f5:8e:a7:
+                    f4:92:bb:29:a8:91:7d:e8:5e:56:30:e6:fa:fb:d2:
+                    d7:b9:af:f2:86:c2:dc:b7:33:71:62:2a:2d:79:38:
+                    a0:b1:0d:eb:87:03:56:c5:1c:c9:fb:33:5c:3c:d2:
+                    b9:f2:c0:b6:3c:de:e2:d8:3d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        7a:92:69:a9:a5:d2:40:46:78:cf:22:7b:5c:36:44:e6:6b:00:
-        78:ab:ca:ff:45:ad:77:d7:87:fc:92:5b:23:3c:dc:27:c2:0f:
-        ee:fe:40:f4:3c:46:46:8f:86:c1:94:ff:60:31:db:24:0c:9c:
-        46:bb:fb:c6:80:55:61:dc:4d:b9:6c:d4:67:b1:a0:35:f1:a4:
-        94:30:25:9d:c2:16:d5:82:cd:a3:eb:fc:1c:44:b8:bb:44:ef:
-        5f:00:bd:68:04:57:a6:5a:03:a6:fd:44:72:22:28:7f:e3:85:
-        4a:0f:c6:45:a9:ae:8a:bd:b0:49:73:c3:e1:30:ad:c2:9f:f7:
-        04:4d
+         7c:85:b5:58:70:73:83:28:62:ea:1a:2f:5d:29:10:50:54:6e:
+         86:dc:e2:f8:7f:bd:5e:bb:52:40:62:60:45:72:56:2d:b3:29:
+         9f:29:d6:1e:90:f2:67:3f:98:5f:e4:d2:39:3c:9f:a4:df:0c:
+         f9:75:4c:0f:2d:94:d9:fe:a2:f9:68:66:3c:bf:0f:0a:73:12:
+         23:33:56:8f:40:65:44:59:b6:2e:90:a7:5e:fb:17:29:42:36:
+         4b:ac:f5:e2:67:ee:7e:94:c0:a2:29:9a:1c:bf:74:94:b8:83:
+         11:d7:ac:a4:e1:b0:c1:7e:db:79:de:b4:ab:67:52:2e:51:d4:
+         ab:65
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBITANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjRfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-NF90YTMwHhcNMTEwNDExMjIzNzQ5WhcNMTQwMTA1MjIzNzQ5WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS40X3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS40X3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-rr7ibMm7ERoWkHJVjPXWZOctXxgnxx21bhCkirkOce/VBUIrEtp5UVgIKjfpPUeT
-Tw/SKymz3oQChqJ1QFnvJnvlI/LbkWLg1wgCTMgFv/H80xrLWfmGoH+ZyDoIgrpf
-T2LXdKUtPrgX1colC1k00PCg7DrMiuAiHfvQss9i2xMCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAepJpqaXS
-QEZ4zyJ7XDZE5msAeKvK/0Wtd9eH/JJbIzzcJ8IP7v5A9DxGRo+GwZT/YDHbJAyc
-Rrv7xoBVYdxNuWzUZ7GgNfGklDAlncIW1YLNo+v8HES4u0TvXwC9aARXploDpv1E
-ciIof+OFSg/GRamuir2wSXPD4TCtwp/3BE0=
+MIICiDCCAfGgAwIBAgIBITANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS40X3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjRfdGEzMB4XDTEzMTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjRfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjRfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDCk9NVCzTPV7ylkZ6AqXqD+yZmxcFxIKv5gJpZ61SDg2uteah+F2cgGqh+V274
+3VSabvAtEDJZH3RTbaJQayMMuzQyhO19/vWOp/SSuymokX3oXlYw5vr70te5r/KG
+wty3M3FiKi15OKCxDeuHA1bFHMn7M1w80rnywLY83uLYPQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQB8hbVY
+cHODKGLqGi9dKRBQVG6G3OL4f71eu1JAYmBFclYtsymfKdYekPJnP5hf5NI5PJ+k
+3wz5dUwPLZTZ/qL5aGY8vw8KcxIjM1aPQGVEWbYukKde+xcpQjZLrPXiZ+5+lMCi
+KZocv3SUuIMR16yk4bDBftt53rSrZ1IuUdSrZQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/23.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/23.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,55 +2,57 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 35 (0x23)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Validity
-            Not Before: Apr 11 22:37:50 2011 GMT
-            Not After : Jan  5 22:37:50 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b2:8c:40:a3:36:97:32:f7:20:68:e2:f4:f5:76:
-                    a3:13:03:4c:1e:32:7c:47:2f:16:32:14:4e:df:0b:
-                    7a:6a:22:54:78:cf:69:c9:ea:a7:e6:82:17:6a:31:
-                    11:38:7e:e4:f9:ed:be:a2:89:42:df:f4:df:f6:e4:
-                    23:bd:ad:4a:c2:ba:a3:a9:26:39:60:ee:02:07:74:
-                    25:6c:b0:7e:9f:6b:33:e1:e7:37:13:77:7b:a6:7f:
-                    4e:e8:75:61:d4:6b:89:19:6b:e5:a5:df:52:5c:71:
-                    25:37:d6:a7:e2:c8:7f:cd:4f:c4:44:b5:15:7c:62:
-                    f3:d2:54:d2:9f:c5:99:7a:ad
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:bb:13:23:7f:7b:bc:24:4f:bd:c3:56:23:7e:84:
+                    f6:a5:cd:87:51:d1:45:92:5b:0d:68:b7:56:23:ae:
+                    88:d5:51:83:c0:f7:b4:49:1e:d2:d3:22:b8:c4:10:
+                    eb:a4:45:89:86:63:d5:1b:a8:4e:8e:30:8a:3c:44:
+                    3c:78:7b:cf:c0:20:3c:67:ff:7e:5f:e0:45:8c:f8:
+                    cb:0f:cf:ac:41:c4:1b:da:3f:d6:55:7d:31:14:ae:
+                    1e:5e:cd:dd:1d:34:22:dd:00:35:60:58:74:a3:2f:
+                    ae:d3:b4:4d:49:28:ea:78:cd:1d:fe:cb:9e:f8:19:
+                    09:ae:e3:10:40:03:b4:5e:7f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ch1_ta4_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ch1_ta4_crl.pem
 
     Signature Algorithm: sha256WithRSAEncryption
-        53:4e:93:21:c0:2f:46:e1:aa:bc:11:25:b1:ee:1a:6d:df:b8:
-        ef:5d:0e:59:3d:fb:1f:1e:62:83:66:98:cb:71:26:b9:87:df:
-        49:5f:8e:fb:ec:d5:4d:70:d7:57:64:7a:58:08:54:dd:2a:86:
-        26:b7:9b:a1:dd:1b:00:45:b3:c2:f9:8a:06:17:cf:28:c3:00:
-        13:7a:6c:83:52:ea:a3:0e:6e:3e:1e:98:56:c4:68:d9:1f:99:
-        af:11:00:e5:5f:42:4d:54:4f:88:c4:43:ee:24:ee:ce:ce:17:
-        9f:13:5a:f3:1c:e8:a6:76:7c:70:6e:63:1a:3b:52:1c:c0:83:
-        01:7b
+         4e:be:e0:f6:a4:b9:2a:9d:31:f1:88:8b:b8:b4:ff:36:12:51:
+         a0:ec:9e:a7:f2:cf:a8:56:1e:fa:26:2c:43:db:a2:14:76:53:
+         e4:c8:fa:0f:4e:63:25:70:79:6f:71:50:92:74:38:ce:f6:a6:
+         93:2e:92:58:ee:85:13:e2:b0:64:3f:1d:56:e3:0b:09:04:d5:
+         53:54:73:f2:37:54:78:27:64:b4:64:c8:ee:67:b9:b7:41:65:
+         f2:06:57:6a:33:c6:7a:15:8d:dd:62:7b:6a:30:b3:80:94:8a:
+         ea:88:db:76:1a:f6:ab:7c:af:e3:3e:63:65:ee:44:fc:b5:0b:
+         e7:7d
 -----BEGIN CERTIFICATE-----
-MIICrjCCAhegAwIBAgIBIzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NDAeFw0xMTA0MTEyMjM3NTBaFw0xNDAxMDUyMjM3NTBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2gxX3RhNDEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoMV90YTQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALKMQKM2lzL3
-IGji9PV2oxMDTB4yfEcvFjIUTt8LemoiVHjPacnqp+aCF2oxETh+5PntvqKJQt/0
-3/bkI72tSsK6o6kmOWDuAgd0JWywfp9rM+HnNxN3e6Z/Tuh1YdRriRlr5aXfUlxx
-JTfWp+LIf81PxES1FXxi89JU0p/FmXqtAgMBAAGjUDBOMAwGA1UdEwEB/wQCMAAw
-PgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2xvY2FsaG9zdDoxMjAwMS9maWxlLzAv
-Y2gxX3RhNF9jcmwucGVtMA0GCSqGSIb3DQEBCwUAA4GBAFNOkyHAL0bhqrwRJbHu
-Gm3fuO9dDlk9+x8eYoNmmMtxJrmH30lfjvvs1U1w11dkelgIVN0qhia3m6HdGwBF
-s8L5igYXzyjDABN6bINS6qMObj4emFbEaNkfma8RAOVfQk1UT4jEQ+4k7s7OF58T
-WvMc6KZ2fHBuYxo7UhzAgwF7
+MIICsDCCAhmgAwIBAgIBIzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDFfdGE0MRowGAYJKoZIhvcNAQkB
+FgtjczFfY2gxX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuxMjf3u8
+JE+9w1YjfoT2pc2HUdFFklsNaLdWI66I1VGDwPe0SR7S0yK4xBDrpEWJhmPVG6hO
+jjCKPEQ8eHvPwCA8Z/9+X+BFjPjLD8+sQcQb2j/WVX0xFK4eXs3dHTQi3QA1YFh0
+oy+u07RNSSjqeM0d/sue+BkJruMQQAO0Xn8CAwEAAaNQME4wDAYDVR0TAQH/BAIw
+ADA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUv
+MC9jaDFfdGE0X2NybC5wZW0wDQYJKoZIhvcNAQELBQADgYEATr7g9qS5Kp0x8YiL
+uLT/NhJRoOyep/LPqFYe+iYsQ9uiFHZT5Mj6D05jJXB5b3FQknQ4zvamky6SWO6F
+E+KwZD8dVuMLCQTVU1Rz8jdUeCdktGTI7me5t0Fl8gZXajPGehWN3WJ7ajCzgJSK
+6ojbdhr2q3yv4z5jZe5E/LUL530=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/24.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/24.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,66 +2,68 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 36 (0x24)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Validity
-            Not Before: Apr 11 22:37:50 2011 GMT
-            Not After : Jan  5 22:37:50 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs2_ch1_ta4/emailAddress=cs2_ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs2_ch1_ta4/emailAddress=cs2_ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:bf:ac:9d:17:06:fb:0f:06:2b:8f:e1:70:02:28:
-                    81:03:f5:1f:f4:4a:41:87:c5:4c:e1:4c:5b:9d:89:
-                    2f:a2:d4:5e:1a:4b:b6:93:c7:10:41:d9:e9:e0:d5:
-                    43:64:9f:39:1d:c8:2a:93:52:23:08:92:78:a3:5f:
-                    3b:98:50:e8:72:3a:73:12:4f:99:4b:4d:0e:e8:5d:
-                    92:f3:0b:5d:78:f6:5b:4b:c8:36:23:e3:ca:ab:8a:
-                    aa:52:33:d1:1e:61:d1:3e:91:5d:ee:38:bc:c4:0e:
-                    ee:54:f9:aa:00:a3:51:55:95:7a:c0:7b:0e:b2:d8:
-                    55:9d:f8:ae:1f:32:a7:87:eb
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ad:94:3a:b1:fd:3e:be:1e:33:73:ab:48:e2:ea:
+                    99:d8:1d:4d:c4:80:e6:fe:b6:6e:86:45:c4:86:81:
+                    df:c5:63:3d:b7:9b:50:75:bc:09:9d:cd:95:6c:6c:
+                    47:88:6d:0c:0c:24:7a:b9:50:f0:39:12:4b:6b:0c:
+                    2e:a3:7d:80:27:61:53:8b:63:c0:2e:a2:9e:b1:4d:
+                    0b:5a:a4:fd:6f:32:20:1d:2c:ea:18:c4:e5:ed:62:
+                    4d:ec:a7:ab:07:6e:8b:3f:c2:29:c7:30:90:7f:6a:
+                    2a:cc:08:9b:82:4b:24:a1:79:a2:06:a6:5c:7a:60:
+                    83:c5:ba:68:2c:ff:01:1f:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4E:1B:1F:2F:80:BA:AC:13:47:60:30:A5:43:F6:01:7D:54:3C:9B:24
+                9F:BB:AE:D3:46:0F:B1:D1:1B:E5:D0:7F:06:5D:5B:3D:15:22:E3:C5
             X509v3 Authority Key Identifier: 
-                keyid:2A:94:C1:FF:E0:11:A0:91:F1:71:46:35:9A:37:3C:BC:C4:21:4A:8F
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
+                keyid:29:7A:F9:B4:E3:1B:8F:19:63:52:FA:19:A0:AB:DA:37:E4:70:A9:71
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
                 serial:22
 
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/example_file
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/example_file
 
     Signature Algorithm: sha256WithRSAEncryption
-        6d:40:ad:c1:79:65:fc:25:80:f7:52:d5:6f:16:3c:b2:77:f8:
-        35:e2:b5:d4:3c:49:f1:1c:02:d7:5a:61:aa:c2:c7:bd:53:4a:
-        96:58:8e:3e:14:d3:38:89:43:70:f0:5c:73:e1:c0:36:5e:10:
-        73:f4:93:c3:de:0c:61:49:be:2d:d0:1e:37:b4:03:49:a9:a4:
-        37:42:77:6a:97:15:45:2f:7d:b2:dd:9d:b2:98:56:0a:70:14:
-        83:ac:6f:e1:1e:97:31:9e:0a:30:ca:7d:5f:87:30:41:05:63:
-        4b:38:cb:f0:c0:cd:4d:a6:d2:11:34:30:ba:f4:8a:74:73:70:
-        ee:45
+         19:54:e0:5b:f7:80:a2:90:05:af:21:fe:4c:1f:f1:4b:c1:2f:
+         36:f3:e4:d1:93:16:67:48:89:62:69:37:92:71:61:aa:f1:4a:
+         2d:fa:ca:cd:69:e5:50:53:45:0a:91:2c:44:f8:44:22:02:82:
+         cd:6d:4b:15:85:cf:8d:ea:f8:98:1b:ff:7c:54:10:48:07:81:
+         a4:04:37:36:c1:95:72:e6:a6:e7:db:59:2f:1c:c9:b4:46:da:
+         98:53:e6:2e:24:9a:f3:9d:74:62:d5:28:96:66:a1:a2:47:21:
+         0e:5d:8e:be:89:ac:d2:4f:89:eb:fd:db:2d:e0:92:d7:a8:99:
+         c7:cf
 -----BEGIN CERTIFICATE-----
-MIIDYjCCAsugAwIBAgIBJDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NDAeFw0xMTA0MTEyMjM3NTBaFw0xNDAxMDUyMjM3NTBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczJfY2gxX3RhNDEaMBgGCSqGSIb3DQEJARYL
-Y3MyX2NoMV90YTQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL+snRcG+w8G
-K4/hcAIogQP1H/RKQYfFTOFMW52JL6LUXhpLtpPHEEHZ6eDVQ2SfOR3IKpNSIwiS
-eKNfO5hQ6HI6cxJPmUtNDuhdkvMLXXj2W0vINiPjyquKqlIz0R5h0T6RXe44vMQO
-7lT5qgCjUVWVesB7DrLYVZ34rh8yp4frAgMBAAGjggECMIH/MB0GA1UdDgQWBBRO
-Gx8vgLqsE0dgMKVD9gF9VDybJDCBkgYDVR0jBIGKMIGHgBQqlMH/4BGgkfFxRjWa
-Nzy8xCFKj6FspGowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWEx
-EzARBgNVBAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAMTA3Rh
-NDESMBAGCSqGSIb3DQEJARYDdGE0ggEiMAwGA1UdEwEB/wQCMAAwOwYDVR0fBDQw
-MjAwoC6gLIYqaHR0cDovL2xvY2FsaG9zdDoxMjAwMS9maWxlLzAvZXhhbXBsZV9m
-aWxlMA0GCSqGSIb3DQEBCwUAA4GBAG1ArcF5ZfwlgPdS1W8WPLJ3+DXitdQ8SfEc
-AtdaYarCx71TSpZYjj4U0ziJQ3DwXHPhwDZeEHP0k8PeDGFJvi3QHje0A0mppDdC
-d2qXFUUvfbLdnbKYVgpwFIOsb+EelzGeCjDKfV+HMEEFY0s4y/DAzU2m0hE0MLr0
-inRzcO5F
+MIIDZjCCAs+gAwIBAgIBJDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMl9jaDFfdGE0MRowGAYJKoZIhvcNAQkB
+FgtjczJfY2gxX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArZQ6sf0+
+vh4zc6tI4uqZ2B1NxIDm/rZuhkXEhoHfxWM9t5tQdbwJnc2VbGxHiG0MDCR6uVDw
+ORJLawwuo32AJ2FTi2PALqKesU0LWqT9bzIgHSzqGMTl7WJN7KerB26LP8IpxzCQ
+f2oqzAibgkskoXmiBqZcemCDxbpoLP8BH9ECAwEAAaOCAQQwggEAMB0GA1UdDgQW
+BBSfu67TRg+x0Rvl0H8GXVs9FSLjxTCBkwYDVR0jBIGLMIGIgBQpevm04xuPGWNS
++hmgq9o35HCpcaFtpGswaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3Ju
+aWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQD
+DAN0YTQxEjAQBgkqhkiG9w0BCQEWA3RhNIIBIjAMBgNVHRMBAf8EAjAAMDsGA1Ud
+HwQ0MDIwMKAuoCyGKmh0dHA6Ly9sb2NhbGhvc3Q6MTIwMDEvZmlsZS8wL2V4YW1w
+bGVfZmlsZTANBgkqhkiG9w0BAQsFAAOBgQAZVOBb94CikAWvIf5MH/FLwS828+TR
+kxZnSIliaTeScWGq8Uot+srNaeVQU0UKkSxE+EQiAoLNbUsVhc+N6viYG/98VBBI
+B4GkBDc2wZVy5qbn21kvHMm0RtqYU+YuJJrznXRi1SiWZqGiRyEOXY6+iazST4nr
+/dst4JLXqJnHzw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/25.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/25.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,65 +2,67 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 37 (0x25)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Validity
-            Not Before: Apr 11 22:37:50 2011 GMT
-            Not After : Jan  5 22:37:50 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs3_ch1_ta4/emailAddress=cs3_ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs3_ch1_ta4/emailAddress=cs3_ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c3:0c:75:ca:f7:a7:94:08:4a:72:f4:27:88:98:
-                    9f:d7:cc:7b:41:e4:54:86:11:d1:c2:d8:a1:ce:68:
-                    b0:8f:6a:6e:78:bf:f9:08:c9:a3:44:99:27:24:da:
-                    c2:76:e8:59:76:be:b2:04:46:1c:f4:1a:77:76:73:
-                    cb:dd:53:b6:9f:c7:5e:04:0a:35:43:e1:5d:5d:62:
-                    9b:73:13:06:d3:96:8f:64:4e:34:0d:bf:31:33:3c:
-                    05:24:26:d7:71:a6:83:65:1f:cf:01:25:c1:87:49:
-                    35:b9:12:a1:9c:af:4c:4f:da:26:59:e4:13:ee:c1:
-                    72:52:1a:f5:49:84:92:18:3b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d6:0b:65:25:4a:ab:c6:97:60:f0:0a:13:02:12:
+                    58:0a:26:26:7f:ba:10:82:a4:68:2e:59:dc:9e:63:
+                    71:4c:03:85:55:7b:c0:20:c8:3b:f3:12:24:8c:e5:
+                    4d:d4:41:10:5f:5d:be:b6:76:77:41:e5:57:48:c7:
+                    01:42:be:18:a0:f7:39:fa:3f:30:07:e9:6f:05:16:
+                    00:43:98:5e:fa:62:46:36:79:b1:6a:84:22:15:36:
+                    16:2b:23:e5:6f:2f:c6:ca:ae:dc:72:95:7a:48:9b:
+                    9b:ae:72:bd:f0:ff:d2:0b:fe:82:ec:53:38:23:cd:
+                    6d:65:28:ba:53:5c:74:6f:5f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                90:5E:20:89:14:A6:9B:2F:BD:21:FA:EC:07:E1:37:24:59:70:10:C1
+                83:0A:1B:8B:11:B9:64:BB:0F:67:12:12:45:12:74:32:7C:36:15:F9
             X509v3 Authority Key Identifier: 
-                keyid:2A:94:C1:FF:E0:11:A0:91:F1:71:46:35:9A:37:3C:BC:C4:21:4A:8F
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
+                keyid:29:7A:F9:B4:E3:1B:8F:19:63:52:FA:19:A0:AB:DA:37:E4:70:A9:71
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
                 serial:22
 
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:foo://bar/baz
+
+                Full Name:
+                  URI:foo://bar/baz
 
     Signature Algorithm: sha256WithRSAEncryption
-        95:ab:fa:7f:38:e3:de:4d:db:7f:a4:ea:49:f6:99:0c:57:76:
-        36:df:e3:68:50:0d:b7:af:78:ea:e4:07:ad:63:75:15:48:34:
-        ca:81:6a:0b:64:6d:c5:ca:9b:3b:a2:fd:dd:19:90:8f:d4:4d:
-        35:a0:a2:18:84:bf:89:0d:22:cc:03:67:57:15:f7:70:16:2b:
-        f7:14:82:3e:a9:74:50:e5:22:11:13:5b:69:d1:d5:87:c2:44:
-        a6:b8:9c:73:d6:51:ec:20:89:1a:11:44:07:8f:e7:6d:df:a8:
-        0f:5e:71:36:9c:7b:0b:e4:2b:5a:94:77:06:c6:fb:f7:e5:dc:
-        77:a3
+         35:54:4b:75:7e:93:ad:b6:4a:01:0d:0b:90:a6:b8:97:82:f1:
+         53:14:12:ce:da:83:cd:0a:d2:57:68:c4:a2:b2:54:94:dc:f8:
+         fb:21:a5:e6:37:63:07:6a:eb:99:c9:61:b2:41:6f:76:a0:94:
+         97:ad:a3:7c:38:b8:da:4a:ff:cb:cd:e6:d2:75:1e:c3:ae:c3:
+         4f:28:32:7a:71:8d:58:c3:df:79:bb:f8:38:b8:2e:bb:fb:01:
+         dc:81:c8:85:91:66:2c:46:ee:0e:96:32:4c:3c:63:ba:7e:71:
+         ea:41:e1:2d:13:ac:34:2c:de:0e:9b:47:4c:41:24:0e:8a:ab:
+         c7:65
 -----BEGIN CERTIFICATE-----
-MIIDRDCCAq2gAwIBAgIBJTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NDAeFw0xMTA0MTEyMjM3NTBaFw0xNDAxMDUyMjM3NTBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczNfY2gxX3RhNDEaMBgGCSqGSIb3DQEJARYL
-Y3MzX2NoMV90YTQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMMMdcr3p5QI
-SnL0J4iYn9fMe0HkVIYR0cLYoc5osI9qbni/+QjJo0SZJyTawnboWXa+sgRGHPQa
-d3Zzy91Ttp/HXgQKNUPhXV1im3MTBtOWj2RONA2/MTM8BSQm13Gmg2UfzwElwYdJ
-NbkSoZyvTE/aJlnkE+7BclIa9UmEkhg7AgMBAAGjgeUwgeIwHQYDVR0OBBYEFJBe
-IIkUppsvvSH67AfhNyRZcBDBMIGSBgNVHSMEgYowgYeAFCqUwf/gEaCR8XFGNZo3
-PLzEIUqPoWykajBoMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTET
-MBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGE0
-MRIwEAYJKoZIhvcNAQkBFgN0YTSCASIwDAYDVR0TAQH/BAIwADAeBgNVHR8EFzAV
-MBOgEaAPhg1mb286Ly9iYXIvYmF6MA0GCSqGSIb3DQEBCwUAA4GBAJWr+n84495N
-23+k6kn2mQxXdjbf42hQDbeveOrkB61jdRVINMqBagtkbcXKmzui/d0ZkI/UTTWg
-ohiEv4kNIswDZ1cV93AWK/cUgj6pdFDlIhETW2nR1YfCRKa4nHPWUewgiRoRRAeP
-523fqA9ecTacewvkK1qUdwbG+/fl3Hej
+MIIDRzCCArCgAwIBAgIBJTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzM19jaDFfdGE0MRowGAYJKoZIhvcNAQkB
+FgtjczNfY2gxX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gtlJUqr
+xpdg8AoTAhJYCiYmf7oQgqRoLlncnmNxTAOFVXvAIMg78xIkjOVN1EEQX12+tnZ3
+QeVXSMcBQr4YoPc5+j8wB+lvBRYAQ5he+mJGNnmxaoQiFTYWKyPlby/Gyq7ccpV6
+SJubrnK98P/SC/6C7FM4I81tZSi6U1x0b18CAwEAAaOB5jCB4zAdBgNVHQ4EFgQU
+gwobixG5ZLsPZxISRRJ0Mnw2FfkwgZMGA1UdIwSBizCBiIAUKXr5tOMbjxljUvoZ
+oKvaN+RwqXGhbaRrMGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
+MRQwEgYDVQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwD
+dGE0MRIwEAYJKoZIhvcNAQkBFgN0YTSCASIwDAYDVR0TAQH/BAIwADAeBgNVHR8E
+FzAVMBOgEaAPhg1mb286Ly9iYXIvYmF6MA0GCSqGSIb3DQEBCwUAA4GBADVUS3V+
+k622SgENC5CmuJeC8VMUEs7ag80K0ldoxKKyVJTc+PshpeY3Ywdq65nJYbJBb3ag
+lJeto3w4uNpK/8vN5tJ1HsOuw08oMnpxjVjD33m7+Di4Lrv7AdyByIWRZixG7g6W
+Mkw8Y7p+cepB4S0TrDQs3g6bR0xBJA6Kq8dl
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/27.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/27.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,55 +2,57 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 39 (0x27)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
         Validity
-            Not Before: Apr 11 22:37:51 2011 GMT
-            Not After : Jan  5 22:37:51 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.1_ta4/emailAddress=cs1_ch1.1_ta4
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.1_ta4/emailAddress=cs1_ch1.1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ad:e1:a3:b5:65:8f:6f:53:61:4b:15:7a:d7:c6:
-                    0a:a3:b0:ee:20:0b:11:d7:9c:99:ad:63:e4:8d:22:
-                    6d:13:7b:10:d3:73:fa:a8:0a:14:44:3d:fb:88:be:
-                    d1:27:79:d8:6b:b1:ba:8a:35:29:2d:99:21:3b:65:
-                    20:d5:3d:bf:e6:fc:b6:01:e2:b3:8d:f5:9f:73:63:
-                    ca:48:9b:92:d6:34:84:fb:7c:87:1e:f5:8e:48:bd:
-                    96:5c:ce:e0:69:ab:f4:17:e5:22:1a:68:81:15:40:
-                    52:75:c5:b0:47:16:93:23:8b:4d:59:10:d0:e3:46:
-                    3e:ab:fd:09:6a:69:fc:6f:9d
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b6:6e:c2:9c:e6:4b:a1:4b:40:2a:15:bd:63:6b:
+                    1b:bc:ee:81:e8:d4:c6:d0:1d:1c:62:27:c1:e5:ea:
+                    7d:20:30:9b:91:ca:92:2c:b0:21:90:14:7c:db:98:
+                    e9:79:e7:dc:1f:13:17:37:66:43:d3:a5:b1:93:90:
+                    01:b6:2f:a3:a9:1b:29:5c:ff:93:d0:fb:32:e6:d4:
+                    1e:87:ba:1a:a1:82:5e:15:91:46:5e:1a:30:7d:70:
+                    b5:33:fc:20:ec:dc:34:41:e7:ce:02:3e:ec:d1:8f:
+                    55:58:e5:85:26:76:e2:96:b9:a1:bd:df:6a:38:09:
+                    d5:46:e8:2b:79:5e:59:9b:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ch1.1_ta4_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ch1.1_ta4_crl.pem
 
     Signature Algorithm: sha256WithRSAEncryption
-        57:fb:2f:75:3a:7a:68:6d:65:67:9a:c0:28:9e:c8:12:bf:b5:
-        63:c2:b8:9e:d0:78:07:6a:91:69:9f:a2:93:e1:90:8b:5a:25:
-        ec:3f:37:25:93:a2:f6:58:91:f1:f5:1a:67:44:2a:aa:ee:6e:
-        7c:dd:02:5c:82:8d:4e:7f:ea:de:42:0a:ef:83:c2:ec:78:74:
-        db:a8:e1:ba:0d:b8:e8:2a:b1:9b:d8:c6:df:28:75:34:85:78:
-        7d:f2:dd:68:63:63:4f:18:8e:66:65:73:1c:30:b0:a9:9e:df:
-        ae:ef:be:d2:99:28:bd:2c:9e:d9:d8:20:06:49:89:bb:0c:8c:
-        00:0e
+         3a:43:96:50:db:7b:96:a3:07:92:28:02:06:de:70:45:80:fe:
+         05:07:e8:f9:42:60:3b:11:10:3a:14:9b:5a:af:e6:1d:c2:7d:
+         0a:10:7d:0f:ad:26:a9:d7:9a:92:5d:0f:c1:76:d9:a0:ff:2d:
+         a9:b6:35:64:79:32:97:9b:d1:cc:ef:e3:b7:75:f9:a6:e9:50:
+         47:37:80:ca:dd:b0:3c:28:d4:78:2b:e8:53:56:76:30:5f:67:
+         e7:07:b8:e7:cb:7b:19:71:2a:71:6d:6d:58:1a:5e:3a:0f:c9:
+         ff:c4:0e:d4:e9:e5:5e:2c:26:5d:cd:a1:77:f9:3b:24:23:ec:
+         14:6c
 -----BEGIN CERTIFICATE-----
-MIICuDCCAiGgAwIBAgIBJzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjFfdGE0MRgwFgYJKoZIhvcNAQkBFgljaDEu
-MV90YTQwHhcNMTEwNDExMjIzNzUxWhcNMTQwMTA1MjIzNzUxWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4xX3RhNDEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4xX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-reGjtWWPb1NhSxV618YKo7DuIAsR15yZrWPkjSJtE3sQ03P6qAoURD37iL7RJ3nY
-a7G6ijUpLZkhO2Ug1T2/5vy2AeKzjfWfc2PKSJuS1jSE+3yHHvWOSL2WXM7gaav0
-F+UiGmiBFUBSdcWwRxaTI4tNWRDQ40Y+q/0Jamn8b50CAwEAAaNSMFAwDAYDVR0T
-AQH/BAIwADBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8vbG9jYWxob3N0OjEyMDAx
-L2ZpbGUvMC9jaDEuMV90YTRfY3JsLnBlbTANBgkqhkiG9w0BAQsFAAOBgQBX+y91
-OnpobWVnmsAonsgSv7Vjwrie0HgHapFpn6KT4ZCLWiXsPzclk6L2WJHx9RpnRCqq
-7m583QJcgo1Of+reQgrvg8LseHTbqOG6DbjoKrGb2MbfKHU0hXh98t1oY2NPGI5m
-ZXMcMLCpnt+u777SmSi9LJ7Z2CAGSYm7DIwADg==
+MIICujCCAiOgAwIBAgIBJzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4xX3RhNDEYMBYGCSqGSIb3DQEJARYJY2gx
+LjFfdGE0MB4XDTEzMTIxMzAwMTMzOFoXDTE2MDkwODAwMTMzOFowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjFfdGE0MRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjFfdGE0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC2bsKc5kuhS0AqFb1jaxu87oHo1MbQHRxiJ8Hl6n0gMJuRypIssCGQFHzbmOl5
+59wfExc3ZkPTpbGTkAG2L6OpGylc/5PQ+zLm1B6Huhqhgl4VkUZeGjB9cLUz/CDs
+3DRB584CPuzRj1VY5YUmduKWuaG932o4CdVG6Ct5XlmbiQIDAQABo1IwUDAMBgNV
+HRMBAf8EAjAAMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9sb2NhbGhvc3Q6MTIw
+MDEvZmlsZS8wL2NoMS4xX3RhNF9jcmwucGVtMA0GCSqGSIb3DQEBCwUAA4GBADpD
+llDbe5ajB5IoAgbecEWA/gUH6PlCYDsREDoUm1qv5h3CfQoQfQ+tJqnXmpJdD8F2
+2aD/Lam2NWR5Mpeb0czv47d1+abpUEc3gMrdsDwo1Hgr6FNWdjBfZ+cHuOfLexlx
+KnFtbVgaXjoPyf/EDtTp5V4sJl3NoXf5OyQj7BRs
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/29.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/29.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 41 (0x29)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1_ta5/emailAddress=cs1_ch1_ta5
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1_ta5/emailAddress=cs1_ch1_ta5
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:bc:a1:03:22:dd:57:7e:99:4b:58:8c:04:98:41:
-                    f9:77:26:01:6f:24:72:d0:7f:82:33:d5:8f:5f:a6:
-                    20:6c:02:b2:2c:56:8d:4d:fc:0d:a6:19:29:23:2f:
-                    88:8c:67:49:c3:e9:90:a6:17:0e:1a:62:28:44:49:
-                    68:80:aa:5e:24:e0:97:38:58:45:c1:45:59:38:e0:
-                    33:00:7c:65:63:b9:ea:a1:81:d0:92:5f:fe:50:1b:
-                    92:85:79:c9:91:96:51:0a:bf:1c:c8:a6:52:4f:b0:
-                    3e:1c:08:09:3b:a1:6a:af:ef:40:7b:df:8b:e3:bd:
-                    de:41:9c:1b:9b:f7:85:9c:25
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b4:65:08:30:97:70:86:fd:f9:89:7b:39:c4:95:
+                    a5:a9:81:55:71:9e:f9:f1:72:94:ec:0a:fa:af:c6:
+                    0b:43:68:db:17:2b:4e:40:ea:22:91:60:02:05:a2:
+                    ef:88:ad:78:8a:28:13:ac:2f:8a:65:6d:38:f3:43:
+                    9b:10:0e:c4:d1:d7:e7:ba:0f:31:06:1e:f6:f7:56:
+                    3f:68:1e:95:91:5f:d8:02:13:66:21:72:ed:66:6e:
+                    26:83:9a:de:60:87:e0:3a:63:e8:09:82:af:df:50:
+                    ae:f6:19:41:ba:c5:ae:8f:3e:6a:ba:f7:8b:fb:cd:
+                    90:a2:24:1e:7b:09:3e:a4:af
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        9f:43:a8:af:30:0a:8a:ca:fb:ac:58:e1:f7:d4:76:f6:08:2d:
-        b3:3a:cb:62:48:90:06:6e:bb:d3:7f:cc:3c:cc:57:3f:88:87:
-        a1:fd:d1:db:5a:a1:73:c6:c5:5a:d9:b9:bc:ba:43:43:ee:bf:
-        6b:c5:bc:5c:a3:2a:a4:01:9b:2f:60:b0:86:99:00:d4:1b:d6:
-        74:22:e8:9a:8e:06:b3:4e:33:34:3c:f4:96:ab:58:66:68:f1:
-        f4:75:a4:09:2e:4c:15:17:6d:9f:e0:e9:9f:45:4c:1f:24:7f:
-        b7:af:70:76:4c:38:20:8e:00:6e:eb:bf:84:e7:6f:b0:98:b7:
-        4a:67
+         60:5d:6b:d5:f4:71:25:3c:8d:93:35:51:dd:44:66:1b:98:10:
+         03:07:04:a7:a9:73:e1:f8:8e:62:6e:05:6e:d5:e5:04:7d:47:
+         fa:4d:1c:c6:a4:91:2e:96:d2:43:2d:92:11:54:d9:29:9a:13:
+         a9:21:8c:06:de:e8:55:a0:ac:02:6e:8f:a2:bc:1b:50:20:5c:
+         03:ff:45:b7:13:3a:ea:b2:35:90:f6:0d:a4:06:4f:f1:b0:9c:
+         cc:ce:df:c0:b2:88:44:5a:f5:86:41:94:94:aa:67:d8:62:b8:
+         73:c1:60:87:04:51:25:1e:75:ac:d4:da:5b:fd:3f:5d:bc:ac:
+         8d:d7
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBKTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNTEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NTAeFw0xMTA0MTEyMjM3NTJaFw0xNDAxMDUyMjM3NTJaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2gxX3RhNTEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoMV90YTUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALyhAyLdV36Z
-S1iMBJhB+XcmAW8kctB/gjPVj1+mIGwCsixWjU38DaYZKSMviIxnScPpkKYXDhpi
-KERJaICqXiTglzhYRcFFWTjgMwB8ZWO56qGB0JJf/lAbkoV5yZGWUQq/HMimUk+w
-PhwICTuhaq/vQHvfi+O93kGcG5v3hZwlAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBAJ9DqK8wCorK+6xY4ffU
-dvYILbM6y2JIkAZuu9N/zDzMVz+Ih6H90dtaoXPGxVrZuby6Q0Puv2vFvFyjKqQB
-my9gsIaZANQb1nQi6JqOBrNOMzQ89JarWGZo8fR1pAkuTBUXbZ/g6Z9FTB8kf7ev
-cHZMOCCOAG7rv4Tnb7CYt0pn
+MIICgDCCAemgAwIBAgIBKTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTUxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTUwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDFfdGE1MRowGAYJKoZIhvcNAQkB
+FgtjczFfY2gxX3RhNTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtGUIMJdw
+hv35iXs5xJWlqYFVcZ758XKU7Ar6r8YLQ2jbFytOQOoikWACBaLviK14iigTrC+K
+ZW0480ObEA7E0dfnug8xBh7291Y/aB6VkV/YAhNmIXLtZm4mg5reYIfgOmPoCYKv
+31Cu9hlBusWujz5quveL+82QoiQeewk+pK8CAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAYF1r1fRxJTyNkzVR
+3URmG5gQAwcEp6lz4fiOYm4FbtXlBH1H+k0cxqSRLpbSQy2SEVTZKZoTqSGMBt7o
+VaCsAm6PorwbUCBcA/9FtxM66rI1kPYNpAZP8bCczM7fwLKIRFr1hkGUlKpn2GK4
+c8FghwRRJR51rNTaW/0/Xbysjdc=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/2A.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/2A.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 42 (0x2a)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta6, CN=localhost/emailAddress=cs1_ta6
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta6, CN=localhost/emailAddress=cs1_ta6
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e1:f0:66:24:db:fa:5f:00:b6:c4:f6:63:f0:51:
-                    7d:49:f9:92:71:e1:b3:8c:e7:fc:e9:e4:4f:79:76:
-                    52:51:06:65:c1:5f:d4:51:26:30:46:c9:70:98:5a:
-                    c5:a9:9e:6a:67:24:25:7a:68:5b:63:af:90:e7:b1:
-                    fb:42:f9:15:9c:d4:41:c6:90:fd:c3:d3:d7:cf:fe:
-                    00:c6:39:cb:6c:ae:9c:cb:74:c4:b6:1f:be:1b:58:
-                    9f:c9:8a:33:66:ec:32:08:fc:d9:23:e1:29:e2:f3:
-                    3e:3d:53:a7:78:e7:69:49:2b:39:72:8b:74:33:46:
-                    b1:f7:3b:26:4f:8d:06:64:e7
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:e0:47:5b:b6:ff:33:b8:75:5d:d1:f8:31:47:d7:
+                    46:c1:12:4e:d3:95:54:a2:cd:d8:c0:19:35:21:ea:
+                    03:c3:73:e0:e0:50:a1:10:2e:cd:9a:a5:8a:b0:b9:
+                    2e:66:ad:2d:09:3f:38:42:ec:2f:bd:c2:d0:16:90:
+                    82:d0:1c:a9:c7:81:4c:3f:9d:c8:f5:6d:ca:38:04:
+                    c2:9e:77:3c:1f:0b:9f:4b:d2:ca:df:a2:af:f0:4e:
+                    b8:51:e1:2c:01:4b:a7:b7:56:6c:ee:96:22:2f:2f:
+                    33:83:e2:c1:a5:c0:aa:e5:45:2b:50:31:84:8a:d0:
+                    5b:06:0a:2f:5d:c3:d6:d5:1b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        6b:e1:7e:83:a6:a1:f8:46:a6:85:bb:c7:25:20:83:bb:b4:e0:
-        58:63:36:5a:97:1c:4c:76:24:a2:9d:c3:45:73:1f:22:39:97:
-        2c:47:b1:f5:3e:ac:b4:00:6d:c5:32:49:0c:83:e9:94:44:fa:
-        d6:e1:2d:a7:ae:66:34:9c:85:3e:a4:43:af:c0:2a:6c:f9:22:
-        64:d2:bb:54:67:e8:99:df:41:f2:7c:87:77:67:b5:3d:14:37:
-        75:32:56:69:21:f2:53:f2:d2:83:a1:fc:c0:3d:b5:4e:b5:d8:
-        06:d8:4e:71:f8:cc:3c:3a:93:a4:a0:05:a3:4f:7b:b1:83:21:
-        96:60
+         36:42:59:49:7a:7a:58:88:a3:c2:e9:16:fc:dc:5c:7c:26:2e:
+         d5:ff:4f:2f:45:96:7f:c0:5a:10:fd:a5:c5:18:95:48:b3:bf:
+         49:a0:a1:4d:70:e0:39:00:94:5d:7c:0b:99:dc:7d:29:57:40:
+         7a:31:67:94:00:83:61:aa:ca:48:7f:64:db:81:90:3c:2a:e4:
+         26:33:3e:80:14:12:85:06:bc:e9:8b:e2:49:80:bd:e7:a4:f0:
+         3a:c7:ba:e8:c0:1f:f2:7a:48:af:aa:ba:20:be:b2:e8:99:4d:
+         66:90:34:78:b1:82:9a:90:15:a8:dc:76:8d:27:df:7b:40:04:
+         a1:03
 -----BEGIN CERTIFICATE-----
-MIIClzCCAgCgAwIBAgIBKjANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UECxMDdGE2MRIwEAYDVQQDEwlsb2NhbGhvc3QxEjAQBgkq
-hkiG9w0BCQEWA3RhNjAeFw0xMTA0MTEyMjM3NTRaFw0xNDAxMDUyMjM3NTRaMIGE
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UECxQHY3MxX3RhNjESMBAGA1UE
-AxMJbG9jYWxob3N0MRYwFAYJKoZIhvcNAQkBFgdjczFfdGE2MIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDh8GYk2/pfALbE9mPwUX1J+ZJx4bOM5/zp5E95dlJR
-BmXBX9RRJjBGyXCYWsWpnmpnJCV6aFtjr5DnsftC+RWc1EHGkP3D09fP/gDGOcts
-rpzLdMS2H74bWJ/JijNm7DII/Nkj4Sni8z49U6d452lJKzlyi3QzRrH3OyZPjQZk
-5wIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
-9w0BAQsFAAOBgQBr4X6DpqH4RqaFu8clIIO7tOBYYzZalxxMdiSincNFcx8iOZcs
-R7H1Pqy0AG3FMkkMg+mURPrW4S2nrmY0nIU+pEOvwCps+SJk0rtUZ+iZ30HyfId3
-Z7U9FDd1MlZpIfJT8tKDofzAPbVOtdgG2E5x+Mw8OpOkoAWjT3uxgyGWYA==
+MIICmTCCAgKgAwIBAgIBKjANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAsMA3RhNjESMBAGA1UEAwwJbG9jYWxob3N0MRIwEAYJ
+KoZIhvcNAQkBFgN0YTYwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjCB
+hTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1Nh
+bnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQLDAdjczFfdGE2MRIwEAYD
+VQQDDAlsb2NhbGhvc3QxFjAUBgkqhkiG9w0BCQEWB2NzMV90YTYwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBAOBHW7b/M7h1XdH4MUfXRsESTtOVVKLN2MAZNSHq
+A8Nz4OBQoRAuzZqlirC5LmatLQk/OELsL73C0BaQgtAcqceBTD+dyPVtyjgEwp53
+PB8Ln0vSyt+ir/BOuFHhLAFLp7dWbO6WIi8vM4PiwaXAquVFK1AxhIrQWwYKL13D
+1tUbAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+SIb3DQEBCwUAA4GBADZCWUl6eliIo8LpFvzcXHwmLtX/Ty9Fln/AWhD9pcUYlUiz
+v0mgoU1w4DkAlF18C5ncfSlXQHoxZ5QAg2Gqykh/ZNuBkDwq5CYzPoAUEoUGvOmL
+4kmAveek8DrHuujAH/J6SK+quiC+suiZTWaQNHixgpqQFajcdo0n33tABKED
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/2B.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/2B.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 43 (0x2b)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta7, CN=localhost/emailAddress=cs1_ta7
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta7, CN=localhost/emailAddress=cs1_ta7
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c1:8e:b8:0a:bd:17:40:c0:8d:b3:6f:c3:ca:97:
-                    ca:b0:b6:95:01:9c:d8:a0:f3:9f:af:2e:c8:3f:0b:
-                    54:f3:f0:c6:ae:41:d0:b5:73:4d:6e:b3:93:f9:58:
-                    99:86:b4:66:21:2d:9f:78:ad:47:eb:81:78:5d:21:
-                    2e:19:38:7a:73:64:5e:c9:8f:5c:1c:f5:92:b9:5f:
-                    2f:f3:de:e7:a3:8c:8a:cb:d1:b2:00:ed:7c:24:a8:
-                    10:d2:2c:eb:32:7c:48:23:fe:c2:9d:41:b5:07:d7:
-                    52:aa:e9:20:d3:2a:63:60:c4:1a:60:27:05:28:ae:
-                    4f:88:fd:ba:8e:ff:02:c7:47
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d6:44:f3:0b:4a:01:1a:b9:6e:5a:01:90:e2:1d:
+                    39:37:48:16:5d:16:fe:7b:69:47:f0:e2:bb:e0:5b:
+                    e9:22:6c:cc:7c:2c:8a:0d:74:6d:30:f5:f5:83:b8:
+                    b5:87:7a:c1:0c:0a:5a:17:6e:dc:21:53:9f:8b:02:
+                    84:b0:45:9f:67:31:30:61:ff:1a:62:c2:a9:94:b4:
+                    f9:70:57:0d:03:af:a1:00:59:be:15:5c:08:75:e0:
+                    56:4d:30:ea:02:d0:8a:f1:2c:dd:fa:74:cc:f3:98:
+                    15:ae:1a:e0:c0:72:64:0a:26:b6:e2:04:17:24:5d:
+                    58:60:ac:01:a7:73:03:71:ef
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        b5:06:5c:d4:ad:4f:c3:e4:99:0c:07:e7:dd:33:09:94:42:7d:
-        8a:c8:04:56:c8:63:a0:be:4b:a7:60:52:e4:13:ef:82:bd:ce:
-        9f:4f:91:ee:e8:0e:09:35:e6:eb:c2:e3:da:78:8d:4e:a2:b4:
-        e5:f0:4c:99:29:02:0f:a8:b8:49:56:f8:d9:a3:4b:c7:bb:ce:
-        ba:63:78:ed:36:f9:34:6a:b8:9d:06:9b:ff:5e:e9:48:0e:b3:
-        39:d7:64:e5:c9:28:c8:3c:8f:42:52:08:56:ad:6d:f0:63:aa:
-        30:45:d4:40:17:34:be:24:4e:21:7a:b5:b3:2a:c7:ce:75:1b:
-        a5:eb
+         31:3b:0b:62:1c:06:94:b3:85:8c:08:b8:da:07:20:01:4c:23:
+         98:34:20:06:f4:ec:b9:fb:42:52:80:2c:0f:e9:91:b7:de:3f:
+         c4:42:4a:d7:22:0a:9b:ec:83:a0:1f:64:57:98:e9:1a:e1:ac:
+         08:78:ee:28:05:c1:53:50:3e:d1:e0:fa:55:9a:a0:ca:39:28:
+         9f:71:8b:ab:9d:a6:3e:04:e9:bf:b3:4d:97:74:b2:36:4e:65:
+         ed:cf:5c:44:3c:c1:37:77:1c:d3:7d:3b:76:fe:72:53:ac:90:
+         0a:07:37:b0:97:64:ab:b4:d3:63:28:ce:37:cf:80:26:8a:7e:
+         0b:f0
 -----BEGIN CERTIFICATE-----
-MIIClzCCAgCgAwIBAgIBKzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UECxMDdGE3MRIwEAYDVQQDEwlsb2NhbGhvc3QxEjAQBgkq
-hkiG9w0BCQEWA3RhNzAeFw0xMTA0MTEyMjM3NTRaFw0xNDAxMDUyMjM3NTRaMIGE
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UECxQHY3MxX3RhNzESMBAGA1UE
-AxMJbG9jYWxob3N0MRYwFAYJKoZIhvcNAQkBFgdjczFfdGE3MIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDBjrgKvRdAwI2zb8PKl8qwtpUBnNig85+vLsg/C1Tz
-8MauQdC1c01us5P5WJmGtGYhLZ94rUfrgXhdIS4ZOHpzZF7Jj1wc9ZK5Xy/z3uej
-jIrL0bIA7XwkqBDSLOsyfEgj/sKdQbUH11Kq6SDTKmNgxBpgJwUork+I/bqO/wLH
-RwIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
-9w0BAQsFAAOBgQC1BlzUrU/D5JkMB+fdMwmUQn2KyARWyGOgvkunYFLkE++Cvc6f
-T5Hu6A4JNebrwuPaeI1OorTl8EyZKQIPqLhJVvjZo0vHu866Y3jtNvk0aridBpv/
-XulIDrM512TlySjIPI9CUghWrW3wY6owRdRAFzS+JE4herWzKsfOdRul6w==
+MIICmTCCAgKgAwIBAgIBKzANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAsMA3RhNzESMBAGA1UEAwwJbG9jYWxob3N0MRIwEAYJ
+KoZIhvcNAQkBFgN0YTcwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjCB
+hTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1Nh
+bnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQLDAdjczFfdGE3MRIwEAYD
+VQQDDAlsb2NhbGhvc3QxFjAUBgkqhkiG9w0BCQEWB2NzMV90YTcwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBANZE8wtKARq5bloBkOIdOTdIFl0W/ntpR/Diu+Bb
+6SJszHwsig10bTD19YO4tYd6wQwKWhdu3CFTn4sChLBFn2cxMGH/GmLCqZS0+XBX
+DQOvoQBZvhVcCHXgVk0w6gLQivEs3fp0zPOYFa4a4MByZAomtuIEFyRdWGCsAadz
+A3HvAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+SIb3DQEBCwUAA4GBADE7C2IcBpSzhYwIuNoHIAFMI5g0IAb07Ln7QlKALA/pkbfe
+P8RCStciCpvsg6AfZFeY6RrhrAh47igFwVNQPtHg+lWaoMo5KJ9xi6udpj4E6b+z
+TZd0sjZOZe3PXEQ8wTd3HNN9O3b+clOskAoHN7CXZKu002MozjfPgCaKfgvw
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 27 (0x1b)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta3/emailAddress=ch1.1_ta3
         Validity
-            Not Before: Apr 11 22:37:47 2011 GMT
-            Not After : Jan  5 22:37:47 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.1_ta3/emailAddress=cs1_ch1.1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.1_ta3/emailAddress=cs1_ch1.1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:eb:05:16:da:3a:66:0f:5c:d8:26:83:38:fa:4f:
-                    60:0f:8c:42:06:b6:45:be:2e:ca:6c:fd:d8:a7:5f:
-                    14:70:e9:04:ee:f2:c7:40:b2:28:f4:d9:99:65:b0:
-                    2e:a2:e6:2c:df:42:72:12:92:ca:c1:6e:4d:2f:76:
-                    41:aa:22:bc:8d:f4:e8:40:78:61:b5:92:a7:43:ef:
-                    1c:55:19:31:a8:45:23:0f:b6:d5:32:44:35:dd:78:
-                    d4:f1:80:39:68:d1:ac:c1:4d:18:e2:e5:4d:eb:a9:
-                    cb:95:51:6c:c7:3a:50:ba:d3:4a:dc:7d:21:ad:ee:
-                    5a:36:5b:ce:34:1c:58:a7:d3
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cb:04:cf:d4:10:a0:b8:0a:41:51:cc:92:ed:1d:
+                    e6:42:d0:be:20:9c:08:f4:eb:67:d9:88:86:90:3c:
+                    f5:44:60:42:95:d3:0c:27:9a:90:f5:af:c6:4d:22:
+                    36:ba:9f:e2:74:17:f7:dd:2a:04:50:db:f3:2b:df:
+                    68:16:d9:ae:83:3b:2a:fa:7e:05:00:4e:64:a5:1e:
+                    c1:8e:99:11:b5:99:64:ae:36:0c:6d:41:42:72:a6:
+                    b0:2f:8d:e7:f1:b6:a8:1a:88:e5:ce:bc:dc:3c:9a:
+                    d1:39:ad:09:ab:c7:a0:bd:3c:36:92:b2:31:12:f9:
+                    76:1a:68:24:e6:70:e3:2e:25
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        1d:bc:1d:73:ed:03:34:4b:73:87:24:58:03:61:5a:67:fc:64:
-        f5:5e:a0:db:84:be:f0:9d:91:37:36:fc:db:86:90:99:3a:c3:
-        07:23:07:90:e5:5a:68:97:8f:b1:e8:d1:57:e5:a8:7e:b0:19:
-        2b:b6:25:b0:42:56:da:0c:3c:a9:82:4d:af:8f:f0:b7:c0:c3:
-        d7:d2:4d:9f:c9:40:5c:72:c4:95:86:de:28:5d:64:fe:7d:fd:
-        3d:51:33:90:7b:c0:9f:2b:5c:2f:36:29:a8:72:4f:4f:ad:44:
-        0a:d5:b4:fe:1f:d4:01:82:07:ed:36:81:8b:b3:1d:1d:42:ab:
-        53:bc
+         86:83:0a:12:5d:ac:ff:51:37:a3:5f:b2:62:5b:87:29:77:27:
+         49:73:d0:01:ed:f1:a9:53:02:ad:8e:f5:51:d7:7c:56:76:68:
+         75:f5:9d:b1:6c:0a:99:4e:59:85:16:58:fd:d2:3d:83:41:9d:
+         5f:6e:3a:90:8f:1a:dd:8d:96:8e:91:3c:d2:bb:ed:94:c3:0f:
+         86:dd:07:35:cf:b9:7b:ac:3d:1d:4a:15:c7:c4:21:14:91:46:
+         0e:42:9f:41:4b:44:e7:3b:5d:68:f0:65:2c:ef:3a:76:cd:c5:
+         cc:db:be:21:d0:bc:a1:8e:8d:ce:a5:e8:b5:e7:a0:ae:cf:74:
+         72:24
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBGzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjFfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-MV90YTMwHhcNMTEwNDExMjIzNzQ3WhcNMTQwMTA1MjIzNzQ3WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4xX3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4xX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-6wUW2jpmD1zYJoM4+k9gD4xCBrZFvi7KbP3Yp18UcOkE7vLHQLIo9NmZZbAuouYs
-30JyEpLKwW5NL3ZBqiK8jfToQHhhtZKnQ+8cVRkxqEUjD7bVMkQ13XjU8YA5aNGs
-wU0Y4uVN66nLlVFsxzpQutNK3H0hre5aNlvONBxYp9MCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAHbwdc+0D
-NEtzhyRYA2FaZ/xk9V6g24S+8J2RNzb824aQmTrDByMHkOVaaJePsejRV+WofrAZ
-K7YlsEJW2gw8qYJNr4/wt8DD19JNn8lAXHLElYbeKF1k/n39PVEzkHvAnytcLzYp
-qHJPT61ECtW0/h/UAYIH7TaBi7MdHUKrU7w=
+MIICiDCCAfGgAwIBAgIBGzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4xX3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjFfdGEzMB4XDTEzMTIxMzAwMTMzNloXDTE2MDkwODAwMTMzNlowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjFfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjFfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDLBM/UEKC4CkFRzJLtHeZC0L4gnAj062fZiIaQPPVEYEKV0wwnmpD1r8ZNIja6
+n+J0F/fdKgRQ2/Mr32gW2a6DOyr6fgUATmSlHsGOmRG1mWSuNgxtQUJyprAvjefx
+tqgaiOXOvNw8mtE5rQmrx6C9PDaSsjES+XYaaCTmcOMuJQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQCGgwoS
+Xaz/UTejX7JiW4cpdydJc9AB7fGpUwKtjvVR13xWdmh19Z2xbAqZTlmFFlj90j2D
+QZ1fbjqQjxrdjZaOkTzSu+2Uww+G3Qc1z7l7rD0dShXHxCEUkUYOQp9BS0TnO11o
+8GUs7zp2zcXM274h0Lyhjo3Opei156Cuz3RyJA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.1_ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.1_ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,55 +2,57 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 39 (0x27)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.1_ta4/emailAddress=ch1.1_ta4
         Validity
-            Not Before: Apr 11 22:37:51 2011 GMT
-            Not After : Jan  5 22:37:51 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.1_ta4/emailAddress=cs1_ch1.1_ta4
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.1_ta4/emailAddress=cs1_ch1.1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ad:e1:a3:b5:65:8f:6f:53:61:4b:15:7a:d7:c6:
-                    0a:a3:b0:ee:20:0b:11:d7:9c:99:ad:63:e4:8d:22:
-                    6d:13:7b:10:d3:73:fa:a8:0a:14:44:3d:fb:88:be:
-                    d1:27:79:d8:6b:b1:ba:8a:35:29:2d:99:21:3b:65:
-                    20:d5:3d:bf:e6:fc:b6:01:e2:b3:8d:f5:9f:73:63:
-                    ca:48:9b:92:d6:34:84:fb:7c:87:1e:f5:8e:48:bd:
-                    96:5c:ce:e0:69:ab:f4:17:e5:22:1a:68:81:15:40:
-                    52:75:c5:b0:47:16:93:23:8b:4d:59:10:d0:e3:46:
-                    3e:ab:fd:09:6a:69:fc:6f:9d
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b6:6e:c2:9c:e6:4b:a1:4b:40:2a:15:bd:63:6b:
+                    1b:bc:ee:81:e8:d4:c6:d0:1d:1c:62:27:c1:e5:ea:
+                    7d:20:30:9b:91:ca:92:2c:b0:21:90:14:7c:db:98:
+                    e9:79:e7:dc:1f:13:17:37:66:43:d3:a5:b1:93:90:
+                    01:b6:2f:a3:a9:1b:29:5c:ff:93:d0:fb:32:e6:d4:
+                    1e:87:ba:1a:a1:82:5e:15:91:46:5e:1a:30:7d:70:
+                    b5:33:fc:20:ec:dc:34:41:e7:ce:02:3e:ec:d1:8f:
+                    55:58:e5:85:26:76:e2:96:b9:a1:bd:df:6a:38:09:
+                    d5:46:e8:2b:79:5e:59:9b:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ch1.1_ta4_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ch1.1_ta4_crl.pem
 
     Signature Algorithm: sha256WithRSAEncryption
-        57:fb:2f:75:3a:7a:68:6d:65:67:9a:c0:28:9e:c8:12:bf:b5:
-        63:c2:b8:9e:d0:78:07:6a:91:69:9f:a2:93:e1:90:8b:5a:25:
-        ec:3f:37:25:93:a2:f6:58:91:f1:f5:1a:67:44:2a:aa:ee:6e:
-        7c:dd:02:5c:82:8d:4e:7f:ea:de:42:0a:ef:83:c2:ec:78:74:
-        db:a8:e1:ba:0d:b8:e8:2a:b1:9b:d8:c6:df:28:75:34:85:78:
-        7d:f2:dd:68:63:63:4f:18:8e:66:65:73:1c:30:b0:a9:9e:df:
-        ae:ef:be:d2:99:28:bd:2c:9e:d9:d8:20:06:49:89:bb:0c:8c:
-        00:0e
+         3a:43:96:50:db:7b:96:a3:07:92:28:02:06:de:70:45:80:fe:
+         05:07:e8:f9:42:60:3b:11:10:3a:14:9b:5a:af:e6:1d:c2:7d:
+         0a:10:7d:0f:ad:26:a9:d7:9a:92:5d:0f:c1:76:d9:a0:ff:2d:
+         a9:b6:35:64:79:32:97:9b:d1:cc:ef:e3:b7:75:f9:a6:e9:50:
+         47:37:80:ca:dd:b0:3c:28:d4:78:2b:e8:53:56:76:30:5f:67:
+         e7:07:b8:e7:cb:7b:19:71:2a:71:6d:6d:58:1a:5e:3a:0f:c9:
+         ff:c4:0e:d4:e9:e5:5e:2c:26:5d:cd:a1:77:f9:3b:24:23:ec:
+         14:6c
 -----BEGIN CERTIFICATE-----
-MIICuDCCAiGgAwIBAgIBJzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjFfdGE0MRgwFgYJKoZIhvcNAQkBFgljaDEu
-MV90YTQwHhcNMTEwNDExMjIzNzUxWhcNMTQwMTA1MjIzNzUxWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4xX3RhNDEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4xX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-reGjtWWPb1NhSxV618YKo7DuIAsR15yZrWPkjSJtE3sQ03P6qAoURD37iL7RJ3nY
-a7G6ijUpLZkhO2Ug1T2/5vy2AeKzjfWfc2PKSJuS1jSE+3yHHvWOSL2WXM7gaav0
-F+UiGmiBFUBSdcWwRxaTI4tNWRDQ40Y+q/0Jamn8b50CAwEAAaNSMFAwDAYDVR0T
-AQH/BAIwADBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8vbG9jYWxob3N0OjEyMDAx
-L2ZpbGUvMC9jaDEuMV90YTRfY3JsLnBlbTANBgkqhkiG9w0BAQsFAAOBgQBX+y91
-OnpobWVnmsAonsgSv7Vjwrie0HgHapFpn6KT4ZCLWiXsPzclk6L2WJHx9RpnRCqq
-7m583QJcgo1Of+reQgrvg8LseHTbqOG6DbjoKrGb2MbfKHU0hXh98t1oY2NPGI5m
-ZXMcMLCpnt+u777SmSi9LJ7Z2CAGSYm7DIwADg==
+MIICujCCAiOgAwIBAgIBJzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4xX3RhNDEYMBYGCSqGSIb3DQEJARYJY2gx
+LjFfdGE0MB4XDTEzMTIxMzAwMTMzOFoXDTE2MDkwODAwMTMzOFowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjFfdGE0MRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjFfdGE0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC2bsKc5kuhS0AqFb1jaxu87oHo1MbQHRxiJ8Hl6n0gMJuRypIssCGQFHzbmOl5
+59wfExc3ZkPTpbGTkAG2L6OpGylc/5PQ+zLm1B6Huhqhgl4VkUZeGjB9cLUz/CDs
+3DRB584CPuzRj1VY5YUmduKWuaG932o4CdVG6Ct5XlmbiQIDAQABo1IwUDAMBgNV
+HRMBAf8EAjAAMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9sb2NhbGhvc3Q6MTIw
+MDEvZmlsZS8wL2NoMS4xX3RhNF9jcmwucGVtMA0GCSqGSIb3DQEBCwUAA4GBADpD
+llDbe5ajB5IoAgbecEWA/gUH6PlCYDsREDoUm1qv5h3CfQoQfQ+tJqnXmpJdD8F2
+2aD/Lam2NWR5Mpeb0czv47d1+abpUEc3gMrdsDwo1Hgr6FNWdjBfZ+cHuOfLexlx
+KnFtbVgaXjoPyf/EDtTp5V4sJl3NoXf5OyQj7BRs
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.2_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.2_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 29 (0x1d)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.2_ta3/emailAddress=ch1.2_ta3
         Validity
-            Not Before: Apr 11 22:37:48 2011 GMT
-            Not After : Jan  5 22:37:48 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.2_ta3/emailAddress=cs1_ch1.2_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.2_ta3/emailAddress=cs1_ch1.2_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d7:e5:0a:18:00:54:5b:ee:5a:de:78:35:85:4f:
-                    db:06:0c:e0:87:10:97:78:78:dc:2b:ab:95:86:3c:
-                    35:c4:42:1a:e8:c3:98:c8:5d:a1:25:a5:94:d6:8b:
-                    8e:73:e5:75:82:0a:e7:a0:47:3d:d3:16:86:3d:55:
-                    4c:2e:65:75:1b:6f:90:48:a6:4b:84:ee:76:81:56:
-                    a0:36:17:9b:58:0c:45:a6:0c:b3:0c:f1:34:11:df:
-                    14:8e:99:be:22:a2:a5:62:65:f0:a8:57:57:39:b9:
-                    13:1c:8b:97:6d:fd:56:b7:ce:1b:cb:ff:ad:80:c6:
-                    a3:0d:42:fe:bc:82:8f:4a:03
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d0:f8:ae:0b:eb:1f:d2:8b:41:0a:36:62:76:eb:
+                    5d:55:d4:b8:8a:eb:80:b8:05:58:ed:29:5d:9c:3f:
+                    2b:84:e5:be:1e:f6:ab:dd:d4:32:04:ee:f4:9b:b2:
+                    38:1c:59:0a:12:33:f8:b7:b6:e2:37:66:2e:58:e5:
+                    3d:7e:b8:69:73:74:8c:ad:d1:ae:de:11:38:04:7e:
+                    26:92:d4:2c:2e:68:15:09:4a:4f:d1:04:b6:ad:c7:
+                    d8:d7:2a:6d:92:cc:ca:48:87:c6:68:a4:c5:37:af:
+                    cc:20:6d:83:ba:f8:6b:f5:9b:8e:7d:df:d6:8b:7d:
+                    f1:36:6f:a3:5b:0b:b1:e8:6b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        6b:92:5b:ba:16:e4:ff:58:0a:03:6e:d0:db:10:cb:1d:b3:b1:
-        0f:b5:b7:51:52:82:41:8c:0f:c2:3a:75:9c:26:bf:1d:25:91:
-        bc:b4:ca:17:79:ee:d8:61:89:1c:de:b1:23:4f:35:58:4f:2d:
-        d9:f4:e8:9f:56:d1:83:cc:ac:70:cd:3c:51:6f:45:e1:50:47:
-        06:17:61:cb:85:ed:d2:61:da:72:c6:79:4c:b9:7c:44:3a:c6:
-        a0:91:27:67:e5:e7:be:47:ee:fc:f4:c7:49:11:e5:65:3e:87:
-        f2:54:10:a9:41:24:6e:fb:ad:e5:4c:c8:e6:3f:9c:1c:61:41:
-        cd:a0
+         9f:2e:57:b4:bd:52:dd:f4:83:fb:24:d6:f1:99:36:97:b3:90:
+         4f:0d:10:ff:09:00:a3:1a:1e:10:39:63:f6:a6:0a:ee:9f:52:
+         55:b9:35:94:11:04:62:12:8a:c5:cf:c6:c5:2b:85:86:af:00:
+         80:b1:8a:1d:d6:4d:c3:78:d6:67:60:54:27:2e:28:15:b7:22:
+         23:47:4e:b0:89:8a:1a:03:24:db:5d:6a:a2:a7:af:cc:62:ca:
+         cd:2e:fd:7d:e2:2c:fb:5b:89:fd:b6:38:8a:3d:37:61:a9:94:
+         ad:31:d4:f3:d1:b6:91:d9:37:98:f1:ed:aa:11:da:0d:8f:93:
+         1c:8e
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBHTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjJfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-Ml90YTMwHhcNMTEwNDExMjIzNzQ4WhcNMTQwMTA1MjIzNzQ4WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4yX3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4yX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-1+UKGABUW+5a3ng1hU/bBgzghxCXeHjcK6uVhjw1xEIa6MOYyF2hJaWU1ouOc+V1
-ggrnoEc90xaGPVVMLmV1G2+QSKZLhO52gVagNhebWAxFpgyzDPE0Ed8Ujpm+IqKl
-YmXwqFdXObkTHIuXbf1Wt84by/+tgMajDUL+vIKPSgMCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAa5Jbuhbk
-/1gKA27Q2xDLHbOxD7W3UVKCQYwPwjp1nCa/HSWRvLTKF3nu2GGJHN6xI081WE8t
-2fTon1bRg8yscM08UW9F4VBHBhdhy4Xt0mHacsZ5TLl8RDrGoJEnZ+Xnvkfu/PTH
-SRHlZT6H8lQQqUEkbvut5UzI5j+cHGFBzaA=
+MIICiDCCAfGgAwIBAgIBHTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4yX3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjJfdGEzMB4XDTEzMTIxMzAwMTMzNloXDTE2MDkwODAwMTMzNlowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjJfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjJfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDQ+K4L6x/Si0EKNmJ2611V1LiK64C4BVjtKV2cPyuE5b4e9qvd1DIE7vSbsjgc
+WQoSM/i3tuI3Zi5Y5T1+uGlzdIyt0a7eETgEfiaS1CwuaBUJSk/RBLatx9jXKm2S
+zMpIh8ZopMU3r8wgbYO6+Gv1m45939aLffE2b6NbC7HoawIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQCfLle0
+vVLd9IP7JNbxmTaXs5BPDRD/CQCjGh4QOWP2pgrun1JVuTWUEQRiEorFz8bFK4WG
+rwCAsYod1k3DeNZnYFQnLigVtyIjR06wiYoaAyTbXWqip6/MYsrNLv194iz7W4n9
+tjiKPTdhqZStMdTz0baR2TeY8e2qEdoNj5Mcjg==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.3_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.3_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 31 (0x1f)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.3_ta3/emailAddress=ch1.3_ta3
         Validity
-            Not Before: Apr 11 22:37:48 2011 GMT
-            Not After : Jan  5 22:37:48 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.3_ta3/emailAddress=cs1_ch1.3_ta3
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.3_ta3/emailAddress=cs1_ch1.3_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b3:bb:8d:94:21:ec:dd:1d:bd:c4:ab:b9:04:17:
-                    f2:ac:58:db:4b:93:f9:17:2d:16:fc:d1:a5:ea:ee:
-                    e9:2e:4e:05:43:c2:4b:35:2e:ba:bc:70:f2:20:d7:
-                    53:64:ec:7f:84:ca:ce:eb:4d:ac:12:f0:55:6a:a9:
-                    be:17:a9:ae:63:61:37:3a:72:91:b2:82:b6:c1:7e:
-                    07:39:28:5a:20:a3:db:a4:24:34:ca:78:c8:9e:26:
-                    db:26:da:4f:b6:a6:cf:3f:23:d9:06:be:ad:d3:8f:
-                    23:41:51:49:f5:e3:63:91:68:a1:34:b9:3e:fd:da:
-                    22:07:86:a9:bd:58:93:84:2b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:fd:95:49:ab:6d:49:08:5c:f2:9b:77:e1:d0:71:
+                    4d:98:1b:84:31:e2:90:b2:0a:f6:af:2e:12:5b:31:
+                    d0:82:b4:ce:79:12:a5:56:44:d3:a5:49:51:68:45:
+                    cc:73:0e:67:6f:05:74:ff:ce:e7:27:8e:21:72:6a:
+                    df:58:42:b0:82:5d:ee:5f:9c:bc:be:10:d2:98:49:
+                    2a:a6:13:47:ac:27:23:83:fd:90:fd:42:9f:4d:5d:
+                    56:02:84:ff:53:40:51:ed:68:99:c6:20:c6:0d:e6:
+                    fb:47:f9:d8:42:0b:36:ca:50:69:27:9f:b7:8a:36:
+                    f6:5c:1a:0b:3e:9e:d7:12:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        28:69:b9:22:7b:ff:dd:7f:a5:95:f6:67:73:2d:f0:85:e9:22:
-        6e:ce:5e:f4:0e:39:90:56:a9:23:28:4a:73:d1:2f:4a:d5:dc:
-        fb:42:f2:c8:3c:a2:d7:97:08:ec:86:cc:72:65:23:21:88:e1:
-        be:67:8e:f8:44:7b:0e:b7:3f:04:75:db:4a:3f:32:e6:5a:e1:
-        6a:8e:f7:e9:20:ae:2c:62:51:34:d4:b1:c0:3b:20:64:d0:8f:
-        b3:86:4b:e1:82:ff:a2:61:eb:3f:1d:bf:2f:11:d2:01:96:a0:
-        a5:0f:df:1f:c9:1c:34:64:97:7d:3e:97:70:bf:2b:68:2f:cf:
-        91:52
+         50:82:2e:b8:61:6b:62:5f:4f:cf:e8:f9:6f:67:ba:ea:b2:40:
+         0c:49:40:e7:8d:db:af:e4:b0:61:8b:3c:6c:e5:43:d8:e9:8c:
+         f7:c2:7b:5f:ce:c5:f8:0e:9c:e2:77:6a:38:e2:25:0f:f0:e3:
+         d1:14:69:4a:ea:13:8a:91:ad:97:59:27:5e:4e:7c:f7:dc:b0:
+         34:94:3c:b7:9e:3f:40:da:44:66:73:f9:2c:8b:7e:d4:85:d8:
+         a6:58:fb:39:90:6e:3c:fd:b5:a1:39:82:dc:c3:87:97:d3:a7:
+         ce:e1:9d:18:63:27:77:99:fa:a3:c3:d7:d1:67:1d:4e:d0:07:
+         c2:9c
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBHzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjNfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-M190YTMwHhcNMTEwNDExMjIzNzQ4WhcNMTQwMTA1MjIzNzQ4WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS4zX3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS4zX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-s7uNlCHs3R29xKu5BBfyrFjbS5P5Fy0W/NGl6u7pLk4FQ8JLNS66vHDyINdTZOx/
-hMrO602sEvBVaqm+F6muY2E3OnKRsoK2wX4HOShaIKPbpCQ0ynjInibbJtpPtqbP
-PyPZBr6t048jQVFJ9eNjkWihNLk+/doiB4apvViThCsCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAKGm5Inv/
-3X+llfZncy3whekibs5e9A45kFapIyhKc9EvStXc+0LyyDyi15cI7IbMcmUjIYjh
-vmeO+ER7Drc/BHXbSj8y5lrhao736SCuLGJRNNSxwDsgZNCPs4ZL4YL/omHrPx2/
-LxHSAZagpQ/fH8kcNGSXfT6XcL8raC/PkVI=
+MIICiDCCAfGgAwIBAgIBHzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS4zX3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjNfdGEzMB4XDTEzMTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjNfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjNfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQD9lUmrbUkIXPKbd+HQcU2YG4Qx4pCyCvavLhJbMdCCtM55EqVWRNOlSVFoRcxz
+DmdvBXT/zucnjiFyat9YQrCCXe5fnLy+ENKYSSqmE0esJyOD/ZD9Qp9NXVYChP9T
+QFHtaJnGIMYN5vtH+dhCCzbKUGknn7eKNvZcGgs+ntcSiQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQBQgi64
+YWtiX0/P6PlvZ7rqskAMSUDnjduv5LBhizxs5UPY6Yz3wntfzsX4Dpzid2o44iUP
+8OPRFGlK6hOKka2XWSdeTnz33LA0lDy3nj9A2kRmc/ksi37UhdimWPs5kG48/bWh
+OYLcw4eX06fO4Z0YYyd3mfqjw9fRZx1O0AfCnA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.4_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1.4_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 33 (0x21)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1.4_ta3/emailAddress=ch1.4_ta3
         Validity
-            Not Before: Apr 11 22:37:49 2011 GMT
-            Not After : Jan  5 22:37:49 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1.4_ta3/emailAddress=cs1_ch1.4_ta3
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1.4_ta3/emailAddress=cs1_ch1.4_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:ae:be:e2:6c:c9:bb:11:1a:16:90:72:55:8c:f5:
-                    d6:64:e7:2d:5f:18:27:c7:1d:b5:6e:10:a4:8a:b9:
-                    0e:71:ef:d5:05:42:2b:12:da:79:51:58:08:2a:37:
-                    e9:3d:47:93:4f:0f:d2:2b:29:b3:de:84:02:86:a2:
-                    75:40:59:ef:26:7b:e5:23:f2:db:91:62:e0:d7:08:
-                    02:4c:c8:05:bf:f1:fc:d3:1a:cb:59:f9:86:a0:7f:
-                    99:c8:3a:08:82:ba:5f:4f:62:d7:74:a5:2d:3e:b8:
-                    17:d5:ca:25:0b:59:34:d0:f0:a0:ec:3a:cc:8a:e0:
-                    22:1d:fb:d0:b2:cf:62:db:13
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c2:93:d3:55:0b:34:cf:57:bc:a5:91:9e:80:a9:
+                    7a:83:fb:26:66:c5:c1:71:20:ab:f9:80:9a:59:eb:
+                    54:83:83:6b:ad:79:a8:7e:17:67:20:1a:a8:7e:57:
+                    6e:f8:dd:54:9a:6e:f0:2d:10:32:59:1f:74:53:6d:
+                    a2:50:6b:23:0c:bb:34:32:84:ed:7d:fe:f5:8e:a7:
+                    f4:92:bb:29:a8:91:7d:e8:5e:56:30:e6:fa:fb:d2:
+                    d7:b9:af:f2:86:c2:dc:b7:33:71:62:2a:2d:79:38:
+                    a0:b1:0d:eb:87:03:56:c5:1c:c9:fb:33:5c:3c:d2:
+                    b9:f2:c0:b6:3c:de:e2:d8:3d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        7a:92:69:a9:a5:d2:40:46:78:cf:22:7b:5c:36:44:e6:6b:00:
-        78:ab:ca:ff:45:ad:77:d7:87:fc:92:5b:23:3c:dc:27:c2:0f:
-        ee:fe:40:f4:3c:46:46:8f:86:c1:94:ff:60:31:db:24:0c:9c:
-        46:bb:fb:c6:80:55:61:dc:4d:b9:6c:d4:67:b1:a0:35:f1:a4:
-        94:30:25:9d:c2:16:d5:82:cd:a3:eb:fc:1c:44:b8:bb:44:ef:
-        5f:00:bd:68:04:57:a6:5a:03:a6:fd:44:72:22:28:7f:e3:85:
-        4a:0f:c6:45:a9:ae:8a:bd:b0:49:73:c3:e1:30:ad:c2:9f:f7:
-        04:4d
+         7c:85:b5:58:70:73:83:28:62:ea:1a:2f:5d:29:10:50:54:6e:
+         86:dc:e2:f8:7f:bd:5e:bb:52:40:62:60:45:72:56:2d:b3:29:
+         9f:29:d6:1e:90:f2:67:3f:98:5f:e4:d2:39:3c:9f:a4:df:0c:
+         f9:75:4c:0f:2d:94:d9:fe:a2:f9:68:66:3c:bf:0f:0a:73:12:
+         23:33:56:8f:40:65:44:59:b6:2e:90:a7:5e:fb:17:29:42:36:
+         4b:ac:f5:e2:67:ee:7e:94:c0:a2:29:9a:1c:bf:74:94:b8:83:
+         11:d7:ac:a4:e1:b0:c1:7e:db:79:de:b4:ab:67:52:2e:51:d4:
+         ab:65
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBITANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2gxLjRfdGEzMRgwFgYJKoZIhvcNAQkBFgljaDEu
-NF90YTMwHhcNMTEwNDExMjIzNzQ5WhcNMTQwMTA1MjIzNzQ5WjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoMS40X3RhMzEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoMS40X3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-rr7ibMm7ERoWkHJVjPXWZOctXxgnxx21bhCkirkOce/VBUIrEtp5UVgIKjfpPUeT
-Tw/SKymz3oQChqJ1QFnvJnvlI/LbkWLg1wgCTMgFv/H80xrLWfmGoH+ZyDoIgrpf
-T2LXdKUtPrgX1colC1k00PCg7DrMiuAiHfvQss9i2xMCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAepJpqaXS
-QEZ4zyJ7XDZE5msAeKvK/0Wtd9eH/JJbIzzcJ8IP7v5A9DxGRo+GwZT/YDHbJAyc
-Rrv7xoBVYdxNuWzUZ7GgNfGklDAlncIW1YLNo+v8HES4u0TvXwC9aARXploDpv1E
-ciIof+OFSg/GRamuir2wSXPD4TCtwp/3BE0=
+MIICiDCCAfGgAwIBAgIBITANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoMS40X3RhMzEYMBYGCSqGSIb3DQEJARYJY2gx
+LjRfdGEzMB4XDTEzMTIxMzAwMTMzN1oXDTE2MDkwODAwMTMzN1owfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2gxLjRfdGEzMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2gxLjRfdGEzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDCk9NVCzTPV7ylkZ6AqXqD+yZmxcFxIKv5gJpZ61SDg2uteah+F2cgGqh+V274
+3VSabvAtEDJZH3RTbaJQayMMuzQyhO19/vWOp/SSuymokX3oXlYw5vr70te5r/KG
+wty3M3FiKi15OKCxDeuHA1bFHMn7M1w80rnywLY83uLYPQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQB8hbVY
+cHODKGLqGi9dKRBQVG6G3OL4f71eu1JAYmBFclYtsymfKdYekPJnP5hf5NI5PJ+k
+3wz5dUwPLZTZ/qL5aGY8vw8KcxIjM1aPQGVEWbYukKde+xcpQjZLrPXiZ+5+lMCi
+KZocv3SUuIMR16yk4bDBftt53rSrZ1IuUdSrZQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 17 (0x11)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:44 2011 GMT
-            Not After : Jan  5 22:37:44 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cc:26:a7:16:78:9a:fb:e2:da:da:e3:c4:ef:7e:
-                    cb:5c:21:1c:aa:c1:53:35:df:cc:dc:f5:e2:98:0b:
-                    e6:8e:05:f4:e5:97:28:98:54:95:15:11:c9:1e:97:
-                    ed:ee:f4:49:4e:2f:0a:a2:16:83:0d:f5:49:65:78:
-                    6d:ba:a2:19:1b:74:27:64:1a:22:0b:85:47:d0:e1:
-                    85:25:1e:5c:fd:00:7a:37:9e:7e:83:43:cf:17:4e:
-                    2f:ea:7d:c9:5a:b8:70:7a:82:2c:74:0f:77:47:10:
-                    1a:a4:51:16:08:9e:71:b5:7c:54:53:60:92:a8:0c:
-                    1c:b3:b1:0f:ab:c3:0e:46:c5
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ea:17:76:34:ce:b3:de:ac:50:62:a0:0f:14:50:
+                    89:72:26:d5:a2:97:17:91:eb:df:97:7e:80:ff:69:
+                    8e:01:0a:bb:d1:a1:e0:f3:d2:27:56:c6:2d:0f:b5:
+                    84:e4:70:f3:e1:7e:fc:92:8e:fd:77:48:cb:ac:cd:
+                    bf:f4:aa:fa:29:5f:1b:44:03:cf:fa:6f:6d:ae:db:
+                    61:f1:3e:ef:95:de:41:23:36:a2:3a:e7:67:26:04:
+                    6b:7e:9d:f6:92:5e:5b:4c:ab:0a:aa:cf:99:b4:4c:
+                    54:05:73:81:a3:7b:5d:82:cb:e0:ee:9b:29:29:e6:
+                    fb:dd:93:64:23:13:85:d1:e1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        39:fc:dd:ed:5b:f5:75:d9:01:ed:86:33:11:21:27:c9:ad:78:
-        d3:e7:48:8a:3e:11:71:71:0f:d5:10:5b:5a:f0:16:a2:ac:70:
-        e9:3c:db:b9:30:c0:0d:2e:b4:8a:97:c3:50:d7:00:53:d3:4f:
-        b7:24:ff:38:64:e0:ff:87:01:18:6f:7c:bd:3c:2a:bc:fe:9b:
-        0a:d8:66:ce:9e:4e:fa:4c:5c:b5:62:ae:dc:1b:c4:ef:84:da:
-        45:3f:c2:a9:6d:74:a5:f0:44:7e:14:70:a4:4d:e3:dc:92:bb:
-        49:de:68:35:bb:59:a0:24:ba:d6:89:44:28:6b:b8:69:ca:64:
-        7f:f4
+         60:5d:82:5a:64:28:86:45:51:ab:d5:4c:74:ad:eb:84:37:fa:
+         ed:53:df:29:0d:00:9c:4b:33:f4:25:83:ad:b3:e4:cb:11:b0:
+         6e:92:cd:4f:9d:4b:7d:d0:bb:bc:c5:ef:b1:44:2e:54:e1:5e:
+         68:1f:a9:06:a7:e2:ca:82:f9:ac:e8:14:82:a3:26:03:7b:1b:
+         63:98:4f:bb:c9:5d:d5:79:77:bc:2e:e3:3d:7a:82:79:af:7d:
+         fc:e8:a0:9d:f9:e1:74:6d:e6:b9:47:84:19:dd:3f:43:51:8d:
+         9b:c1:27:9e:b7:c7:6b:e2:1f:77:29:bb:5f:a6:16:bf:d0:fd:
+         5a:c2
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBETANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDRaFw0xNDAxMDUyMjM3NDRaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMwmpxZ4mvvi
-2trjxO9+y1whHKrBUzXfzNz14pgL5o4F9OWXKJhUlRURyR6X7e70SU4vCqIWgw31
-SWV4bbqiGRt0J2QaIguFR9DhhSUeXP0AejeefoNDzxdOL+p9yVq4cHqCLHQPd0cQ
-GqRRFgiecbV8VFNgkqgMHLOxD6vDDkbFAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBADn83e1b9XXZAe2GMxEh
-J8mteNPnSIo+EXFxD9UQW1rwFqKscOk827kwwA0utIqXw1DXAFPTT7ck/zhk4P+H
-ARhvfL08Krz+mwrYZs6eTvpMXLVirtwbxO+E2kU/wqltdKXwRH4UcKRN49ySu0ne
-aDW7WaAkutaJRChruGnKZH/0
+MIICgDCCAemgAwIBAgIBETANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczFfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6hd2NM6z
+3qxQYqAPFFCJcibVopcXkevfl36A/2mOAQq70aHg89InVsYtD7WE5HDz4X78ko79
+d0jLrM2/9Kr6KV8bRAPP+m9trtth8T7vld5BIzaiOudnJgRrfp32kl5bTKsKqs+Z
+tExUBXOBo3tdgsvg7pspKeb73ZNkIxOF0eECAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAYF2CWmQohkVRq9VM
+dK3rhDf67VPfKQ0AnEsz9CWDrbPkyxGwbpLNT51LfdC7vMXvsUQuVOFeaB+pBqfi
+yoL5rOgUgqMmA3sbY5hPu8ld1Xl3vC7jPXqCea99/OignfnhdG3muUeEGd0/Q1GN
+m8EnnrfHa+Ifdym7X6YWv9D9WsI=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,55 +2,57 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 35 (0x23)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Validity
-            Not Before: Apr 11 22:37:50 2011 GMT
-            Not After : Jan  5 22:37:50 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b2:8c:40:a3:36:97:32:f7:20:68:e2:f4:f5:76:
-                    a3:13:03:4c:1e:32:7c:47:2f:16:32:14:4e:df:0b:
-                    7a:6a:22:54:78:cf:69:c9:ea:a7:e6:82:17:6a:31:
-                    11:38:7e:e4:f9:ed:be:a2:89:42:df:f4:df:f6:e4:
-                    23:bd:ad:4a:c2:ba:a3:a9:26:39:60:ee:02:07:74:
-                    25:6c:b0:7e:9f:6b:33:e1:e7:37:13:77:7b:a6:7f:
-                    4e:e8:75:61:d4:6b:89:19:6b:e5:a5:df:52:5c:71:
-                    25:37:d6:a7:e2:c8:7f:cd:4f:c4:44:b5:15:7c:62:
-                    f3:d2:54:d2:9f:c5:99:7a:ad
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:bb:13:23:7f:7b:bc:24:4f:bd:c3:56:23:7e:84:
+                    f6:a5:cd:87:51:d1:45:92:5b:0d:68:b7:56:23:ae:
+                    88:d5:51:83:c0:f7:b4:49:1e:d2:d3:22:b8:c4:10:
+                    eb:a4:45:89:86:63:d5:1b:a8:4e:8e:30:8a:3c:44:
+                    3c:78:7b:cf:c0:20:3c:67:ff:7e:5f:e0:45:8c:f8:
+                    cb:0f:cf:ac:41:c4:1b:da:3f:d6:55:7d:31:14:ae:
+                    1e:5e:cd:dd:1d:34:22:dd:00:35:60:58:74:a3:2f:
+                    ae:d3:b4:4d:49:28:ea:78:cd:1d:fe:cb:9e:f8:19:
+                    09:ae:e3:10:40:03:b4:5e:7f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ch1_ta4_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ch1_ta4_crl.pem
 
     Signature Algorithm: sha256WithRSAEncryption
-        53:4e:93:21:c0:2f:46:e1:aa:bc:11:25:b1:ee:1a:6d:df:b8:
-        ef:5d:0e:59:3d:fb:1f:1e:62:83:66:98:cb:71:26:b9:87:df:
-        49:5f:8e:fb:ec:d5:4d:70:d7:57:64:7a:58:08:54:dd:2a:86:
-        26:b7:9b:a1:dd:1b:00:45:b3:c2:f9:8a:06:17:cf:28:c3:00:
-        13:7a:6c:83:52:ea:a3:0e:6e:3e:1e:98:56:c4:68:d9:1f:99:
-        af:11:00:e5:5f:42:4d:54:4f:88:c4:43:ee:24:ee:ce:ce:17:
-        9f:13:5a:f3:1c:e8:a6:76:7c:70:6e:63:1a:3b:52:1c:c0:83:
-        01:7b
+         4e:be:e0:f6:a4:b9:2a:9d:31:f1:88:8b:b8:b4:ff:36:12:51:
+         a0:ec:9e:a7:f2:cf:a8:56:1e:fa:26:2c:43:db:a2:14:76:53:
+         e4:c8:fa:0f:4e:63:25:70:79:6f:71:50:92:74:38:ce:f6:a6:
+         93:2e:92:58:ee:85:13:e2:b0:64:3f:1d:56:e3:0b:09:04:d5:
+         53:54:73:f2:37:54:78:27:64:b4:64:c8:ee:67:b9:b7:41:65:
+         f2:06:57:6a:33:c6:7a:15:8d:dd:62:7b:6a:30:b3:80:94:8a:
+         ea:88:db:76:1a:f6:ab:7c:af:e3:3e:63:65:ee:44:fc:b5:0b:
+         e7:7d
 -----BEGIN CERTIFICATE-----
-MIICrjCCAhegAwIBAgIBIzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NDAeFw0xMTA0MTEyMjM3NTBaFw0xNDAxMDUyMjM3NTBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2gxX3RhNDEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoMV90YTQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALKMQKM2lzL3
-IGji9PV2oxMDTB4yfEcvFjIUTt8LemoiVHjPacnqp+aCF2oxETh+5PntvqKJQt/0
-3/bkI72tSsK6o6kmOWDuAgd0JWywfp9rM+HnNxN3e6Z/Tuh1YdRriRlr5aXfUlxx
-JTfWp+LIf81PxES1FXxi89JU0p/FmXqtAgMBAAGjUDBOMAwGA1UdEwEB/wQCMAAw
-PgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2xvY2FsaG9zdDoxMjAwMS9maWxlLzAv
-Y2gxX3RhNF9jcmwucGVtMA0GCSqGSIb3DQEBCwUAA4GBAFNOkyHAL0bhqrwRJbHu
-Gm3fuO9dDlk9+x8eYoNmmMtxJrmH30lfjvvs1U1w11dkelgIVN0qhia3m6HdGwBF
-s8L5igYXzyjDABN6bINS6qMObj4emFbEaNkfma8RAOVfQk1UT4jEQ+4k7s7OF58T
-WvMc6KZ2fHBuYxo7UhzAgwF7
+MIICsDCCAhmgAwIBAgIBIzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDFfdGE0MRowGAYJKoZIhvcNAQkB
+FgtjczFfY2gxX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuxMjf3u8
+JE+9w1YjfoT2pc2HUdFFklsNaLdWI66I1VGDwPe0SR7S0yK4xBDrpEWJhmPVG6hO
+jjCKPEQ8eHvPwCA8Z/9+X+BFjPjLD8+sQcQb2j/WVX0xFK4eXs3dHTQi3QA1YFh0
+oy+u07RNSSjqeM0d/sue+BkJruMQQAO0Xn8CAwEAAaNQME4wDAYDVR0TAQH/BAIw
+ADA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUv
+MC9jaDFfdGE0X2NybC5wZW0wDQYJKoZIhvcNAQELBQADgYEATr7g9qS5Kp0x8YiL
+uLT/NhJRoOyep/LPqFYe+iYsQ9uiFHZT5Mj6D05jJXB5b3FQknQ4zvamky6SWO6F
+E+KwZD8dVuMLCQTVU1Rz8jdUeCdktGTI7me5t0Fl8gZXajPGehWN3WJ7ajCzgJSK
+6ojbdhr2q3yv4z5jZe5E/LUL530=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta5_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch1_ta5_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 41 (0x29)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta5/emailAddress=ch1_ta5
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch1_ta5/emailAddress=cs1_ch1_ta5
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch1_ta5/emailAddress=cs1_ch1_ta5
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:bc:a1:03:22:dd:57:7e:99:4b:58:8c:04:98:41:
-                    f9:77:26:01:6f:24:72:d0:7f:82:33:d5:8f:5f:a6:
-                    20:6c:02:b2:2c:56:8d:4d:fc:0d:a6:19:29:23:2f:
-                    88:8c:67:49:c3:e9:90:a6:17:0e:1a:62:28:44:49:
-                    68:80:aa:5e:24:e0:97:38:58:45:c1:45:59:38:e0:
-                    33:00:7c:65:63:b9:ea:a1:81:d0:92:5f:fe:50:1b:
-                    92:85:79:c9:91:96:51:0a:bf:1c:c8:a6:52:4f:b0:
-                    3e:1c:08:09:3b:a1:6a:af:ef:40:7b:df:8b:e3:bd:
-                    de:41:9c:1b:9b:f7:85:9c:25
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b4:65:08:30:97:70:86:fd:f9:89:7b:39:c4:95:
+                    a5:a9:81:55:71:9e:f9:f1:72:94:ec:0a:fa:af:c6:
+                    0b:43:68:db:17:2b:4e:40:ea:22:91:60:02:05:a2:
+                    ef:88:ad:78:8a:28:13:ac:2f:8a:65:6d:38:f3:43:
+                    9b:10:0e:c4:d1:d7:e7:ba:0f:31:06:1e:f6:f7:56:
+                    3f:68:1e:95:91:5f:d8:02:13:66:21:72:ed:66:6e:
+                    26:83:9a:de:60:87:e0:3a:63:e8:09:82:af:df:50:
+                    ae:f6:19:41:ba:c5:ae:8f:3e:6a:ba:f7:8b:fb:cd:
+                    90:a2:24:1e:7b:09:3e:a4:af
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        9f:43:a8:af:30:0a:8a:ca:fb:ac:58:e1:f7:d4:76:f6:08:2d:
-        b3:3a:cb:62:48:90:06:6e:bb:d3:7f:cc:3c:cc:57:3f:88:87:
-        a1:fd:d1:db:5a:a1:73:c6:c5:5a:d9:b9:bc:ba:43:43:ee:bf:
-        6b:c5:bc:5c:a3:2a:a4:01:9b:2f:60:b0:86:99:00:d4:1b:d6:
-        74:22:e8:9a:8e:06:b3:4e:33:34:3c:f4:96:ab:58:66:68:f1:
-        f4:75:a4:09:2e:4c:15:17:6d:9f:e0:e9:9f:45:4c:1f:24:7f:
-        b7:af:70:76:4c:38:20:8e:00:6e:eb:bf:84:e7:6f:b0:98:b7:
-        4a:67
+         60:5d:6b:d5:f4:71:25:3c:8d:93:35:51:dd:44:66:1b:98:10:
+         03:07:04:a7:a9:73:e1:f8:8e:62:6e:05:6e:d5:e5:04:7d:47:
+         fa:4d:1c:c6:a4:91:2e:96:d2:43:2d:92:11:54:d9:29:9a:13:
+         a9:21:8c:06:de:e8:55:a0:ac:02:6e:8f:a2:bc:1b:50:20:5c:
+         03:ff:45:b7:13:3a:ea:b2:35:90:f6:0d:a4:06:4f:f1:b0:9c:
+         cc:ce:df:c0:b2:88:44:5a:f5:86:41:94:94:aa:67:d8:62:b8:
+         73:c1:60:87:04:51:25:1e:75:ac:d4:da:5b:fd:3f:5d:bc:ac:
+         8d:d7
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBKTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNTEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NTAeFw0xMTA0MTEyMjM3NTJaFw0xNDAxMDUyMjM3NTJaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2gxX3RhNTEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoMV90YTUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALyhAyLdV36Z
-S1iMBJhB+XcmAW8kctB/gjPVj1+mIGwCsixWjU38DaYZKSMviIxnScPpkKYXDhpi
-KERJaICqXiTglzhYRcFFWTjgMwB8ZWO56qGB0JJf/lAbkoV5yZGWUQq/HMimUk+w
-PhwICTuhaq/vQHvfi+O93kGcG5v3hZwlAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBAJ9DqK8wCorK+6xY4ffU
-dvYILbM6y2JIkAZuu9N/zDzMVz+Ih6H90dtaoXPGxVrZuby6Q0Puv2vFvFyjKqQB
-my9gsIaZANQb1nQi6JqOBrNOMzQ89JarWGZo8fR1pAkuTBUXbZ/g6Z9FTB8kf7ev
-cHZMOCCOAG7rv4Tnb7CYt0pn
+MIICgDCCAemgAwIBAgIBKTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTUxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTUwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDFfdGE1MRowGAYJKoZIhvcNAQkB
+FgtjczFfY2gxX3RhNTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtGUIMJdw
+hv35iXs5xJWlqYFVcZ758XKU7Ar6r8YLQ2jbFytOQOoikWACBaLviK14iigTrC+K
+ZW0480ObEA7E0dfnug8xBh7291Y/aB6VkV/YAhNmIXLtZm4mg5reYIfgOmPoCYKv
+31Cu9hlBusWujz5quveL+82QoiQeewk+pK8CAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAYF1r1fRxJTyNkzVR
+3URmG5gQAwcEp6lz4fiOYm4FbtXlBH1H+k0cxqSRLpbSQy2SEVTZKZoTqSGMBt7o
+VaCsAm6PorwbUCBcA/9FtxM66rI1kPYNpAZP8bCczM7fwLKIRFr1hkGUlKpn2GK4
+c8FghwRRJR51rNTaW/0/Xbysjdc=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.1_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.1_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 9 (0x9)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.1_ta1/emailAddress=ch5.1_ta1
         Validity
-            Not Before: Apr 11 22:37:41 2011 GMT
-            Not After : Jan  5 22:37:41 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5.1_ta1/emailAddress=cs1_ch5.1_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5.1_ta1/emailAddress=cs1_ch5.1_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:9d:74:cf:25:35:26:cd:52:2e:9a:fc:8d:0b:4f:
-                    85:33:83:61:7a:f1:f1:c1:55:3d:dc:2e:20:77:8e:
-                    20:de:eb:e4:37:b6:6a:a4:c8:94:09:6c:f8:36:bd:
-                    78:a6:3f:2c:64:c3:23:d3:c7:fa:1c:36:a3:24:51:
-                    c0:ac:2d:20:6f:15:bf:aa:d8:94:5f:5f:8e:0a:c5:
-                    e0:aa:24:02:a5:f9:e4:cc:97:7f:74:b1:f1:a1:ab:
-                    30:6c:70:74:a4:5a:bd:5e:d7:69:64:6a:42:8d:c5:
-                    d0:b9:21:66:5a:9b:37:25:fa:34:cc:08:21:45:cb:
-                    23:10:eb:66:66:d2:9b:bc:19
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d5:b5:6f:9a:de:79:48:1e:9e:7c:61:b5:05:3f:
+                    f1:ef:a2:74:ac:83:92:f7:fa:6f:bc:ea:bf:7d:ac:
+                    d8:c9:ef:a3:50:01:2c:db:17:7c:68:6c:34:04:77:
+                    89:f6:77:db:63:08:2b:e7:59:6a:7a:d9:13:ef:d0:
+                    b1:1c:13:e0:3a:ee:0f:b6:e9:74:98:ce:30:25:dd:
+                    57:05:ed:55:f8:d2:5e:7a:c9:37:9d:29:87:a4:c8:
+                    55:f2:e7:a4:d8:cf:19:ee:af:d9:0d:35:e7:67:ae:
+                    87:70:f6:d2:98:1d:62:c6:aa:b6:ed:d0:50:77:79:
+                    ad:2e:5f:ef:a7:22:81:b3:2f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        3d:79:e6:0f:d3:33:eb:e7:fb:d4:39:f7:41:1e:f2:47:56:01:
-        d3:8b:bd:0d:0c:d5:ae:f1:85:6d:34:74:78:b3:27:20:88:4d:
-        bd:3a:b1:ac:d2:5c:f6:f3:87:f9:af:76:3a:93:60:a4:f5:97:
-        4c:c3:a6:aa:2a:f1:22:61:ea:2d:e4:97:f4:57:f7:30:84:85:
-        81:a1:aa:12:5a:37:82:96:11:d0:53:40:6c:5e:28:9f:42:1c:
-        3c:89:ae:d5:88:5d:cc:3e:4d:5c:ab:94:03:de:95:4a:b1:f2:
-        6b:cd:c1:cd:08:fa:87:88:80:e4:97:0f:36:55:3b:5d:60:a6:
-        1e:e3
+         75:2d:87:c6:b6:d7:5c:e7:bd:77:6f:d7:63:e4:f4:04:d1:df:
+         37:6f:80:99:9d:fe:b3:81:30:b4:1d:0b:3b:c7:f6:6c:15:a5:
+         ad:c2:2e:dc:5a:87:88:e0:b0:c9:81:99:33:c3:6a:f1:8d:4b:
+         8f:8c:cd:99:d4:ff:86:fe:3e:6e:b1:00:f0:15:16:d7:01:16:
+         13:8e:0e:31:35:ca:00:3c:88:7e:ca:8f:e3:32:6e:74:02:35:
+         66:3a:db:c8:83:37:b7:8c:7b:ba:bf:0d:aa:b8:d4:d8:28:03:
+         f5:f7:6f:c9:aa:d0:3c:03:cf:3d:da:aa:ae:1a:04:c6:7e:58:
+         ff:fe
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBCTANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g1LjFfdGExMRgwFgYJKoZIhvcNAQkBFgljaDUu
-MV90YTEwHhcNMTEwNDExMjIzNzQxWhcNMTQwMTA1MjIzNzQxWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoNS4xX3RhMTEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoNS4xX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-nXTPJTUmzVIumvyNC0+FM4NhevHxwVU93C4gd44g3uvkN7ZqpMiUCWz4Nr14pj8s
-ZMMj08f6HDajJFHArC0gbxW/qtiUX1+OCsXgqiQCpfnkzJd/dLHxoaswbHB0pFq9
-XtdpZGpCjcXQuSFmWps3Jfo0zAghRcsjEOtmZtKbvBkCAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAPXnmD9Mz
-6+f71Dn3QR7yR1YB04u9DQzVrvGFbTR0eLMnIIhNvTqxrNJc9vOH+a92OpNgpPWX
-TMOmqirxImHqLeSX9Ff3MISFgaGqElo3gpYR0FNAbF4on0IcPImu1YhdzD5NXKuU
-A96VSrHya83BzQj6h4iA5JcPNlU7XWCmHuM=
+MIICiDCCAfGgAwIBAgIBCTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4xX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g1
+LjFfdGExMB4XDTEzMTIxMzAwMTMzNFoXDTE2MDkwODAwMTMzNFowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2g1LjFfdGExMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2g1LjFfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDVtW+a3nlIHp58YbUFP/HvonSsg5L3+m+86r99rNjJ76NQASzbF3xobDQEd4n2
+d9tjCCvnWWp62RPv0LEcE+A67g+26XSYzjAl3VcF7VX40l56yTedKYekyFXy56TY
+zxnur9kNNednrodw9tKYHWLGqrbt0FB3ea0uX++nIoGzLwIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQB1LYfG
+ttdc5713b9dj5PQE0d83b4CZnf6zgTC0HQs7x/ZsFaWtwi7cWoeI4LDJgZkzw2rx
+jUuPjM2Z1P+G/j5usQDwFRbXARYTjg4xNcoAPIh+yo/jMm50AjVmOtvIgze3jHu6
+vw2quNTYKAP192/JqtA8A8892qquGgTGflj//g==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.2_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.2_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 11 (0xb)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.2_ta1/emailAddress=ch5.2_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5.2_ta1/emailAddress=cs1_ch5.2_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5.2_ta1/emailAddress=cs1_ch5.2_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c8:74:f3:2f:47:e9:02:0e:f4:93:b9:c2:65:ae:
-                    74:a2:90:3e:2c:36:bd:86:b1:44:f9:ac:ce:ac:0d:
-                    8f:c6:fa:b4:94:62:39:25:63:12:77:4e:4b:26:ca:
-                    7b:ad:7e:e2:1c:9a:18:6d:10:cf:6d:82:b6:00:db:
-                    57:d6:ca:56:bb:af:bd:72:76:19:5f:18:f3:ce:55:
-                    3e:c9:9f:a0:a5:65:6d:01:d4:0b:fe:a0:8e:ba:d2:
-                    2d:19:5f:72:93:ab:50:a7:91:ba:3d:e6:d7:5f:07:
-                    4a:61:c2:3a:7b:22:77:9e:93:73:16:b9:b8:e4:d6:
-                    a4:9f:95:1d:f3:54:69:19:3f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b5:6f:3b:c4:aa:e3:6b:1a:e2:26:41:f2:49:f1:
+                    40:85:73:dc:ec:ef:04:d4:c9:fa:05:29:fc:bb:b9:
+                    83:5f:f1:05:d2:06:9c:e2:52:09:91:d7:d5:3c:45:
+                    ef:3f:77:2b:c8:fc:69:78:19:96:e5:14:c3:7e:8a:
+                    af:56:c0:44:ca:5c:49:bc:3c:71:0a:b9:05:6e:2a:
+                    b7:3f:02:8a:80:da:e7:ab:47:eb:18:40:18:4a:80:
+                    54:2c:dd:97:09:df:7d:ae:0f:f2:3a:9a:51:11:af:
+                    86:bb:f1:ec:5d:45:4d:64:11:d5:0f:2f:bd:79:eb:
+                    91:c1:5e:23:2e:18:aa:6e:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        13:49:e0:c1:04:5e:6e:af:74:a7:15:5c:2d:b4:0d:26:fb:00:
-        ca:f3:ed:0a:87:fb:5f:1a:c9:d4:48:fd:30:96:eb:c2:f4:34:
-        af:09:ef:71:ad:1d:d0:dd:5d:53:12:cd:63:7f:09:2a:10:f7:
-        12:7d:61:78:29:5b:80:c3:c7:5f:e7:16:af:c4:11:72:1e:45:
-        82:0b:67:3b:76:8e:33:f0:d1:3a:b6:ca:5a:e9:8f:33:c9:79:
-        b6:7e:ac:b6:ef:c3:36:f8:a0:ae:88:0c:7e:ed:74:f9:44:b2:
-        1b:e3:de:36:d4:9e:dd:5b:99:86:b3:7e:13:19:31:6d:6d:ff:
-        bf:f7
+         30:93:85:ec:3e:1b:11:03:97:84:c4:63:bf:5c:02:32:b6:56:
+         af:42:a5:28:24:7d:63:6c:a5:9c:9a:f5:52:7b:cf:c0:22:91:
+         47:7a:92:10:19:c4:51:08:1a:68:5e:50:a2:f1:fc:ac:23:8c:
+         dd:0c:a4:6a:21:8d:db:78:e1:5b:29:7b:8d:3c:5e:85:d8:4e:
+         5f:24:f4:17:f8:96:a8:62:db:04:2d:92:3c:ea:9f:7e:3b:ef:
+         1e:45:aa:0d:88:84:e9:a3:ee:42:bd:13:43:dd:e4:8f:0d:db:
+         e2:ae:0c:be:40:7b:a6:f1:86:19:ee:ff:6d:6f:5b:11:3a:41:
+         51:9c
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBCzANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g1LjJfdGExMRgwFgYJKoZIhvcNAQkBFgljaDUu
-Ml90YTEwHhcNMTEwNDExMjIzNzQyWhcNMTQwMTA1MjIzNzQyWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoNS4yX3RhMTEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoNS4yX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-yHTzL0fpAg70k7nCZa50opA+LDa9hrFE+azOrA2Pxvq0lGI5JWMSd05LJsp7rX7i
-HJoYbRDPbYK2ANtX1spWu6+9cnYZXxjzzlU+yZ+gpWVtAdQL/qCOutItGV9yk6tQ
-p5G6PebXXwdKYcI6eyJ3npNzFrm45Nakn5Ud81RpGT8CAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAE0ngwQRe
-bq90pxVcLbQNJvsAyvPtCof7XxrJ1Ej9MJbrwvQ0rwnvca0d0N1dUxLNY38JKhD3
-En1heClbgMPHX+cWr8QRch5FggtnO3aOM/DROrbKWumPM8l5tn6stu/DNvigrogM
-fu10+USyG+PeNtSe3VuZhrN+ExkxbW3/v/c=
+MIICiDCCAfGgAwIBAgIBCzANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4yX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g1
+LjJfdGExMB4XDTEzMTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2g1LjJfdGExMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2g1LjJfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC1bzvEquNrGuImQfJJ8UCFc9zs7wTUyfoFKfy7uYNf8QXSBpziUgmR19U8Re8/
+dyvI/Gl4GZblFMN+iq9WwETKXEm8PHEKuQVuKrc/AoqA2uerR+sYQBhKgFQs3ZcJ
+332uD/I6mlERr4a78exdRU1kEdUPL71565HBXiMuGKpuiQIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQAwk4Xs
+PhsRA5eExGO/XAIytlavQqUoJH1jbKWcmvVSe8/AIpFHepIQGcRRCBpoXlCi8fys
+I4zdDKRqIY3beOFbKXuNPF6F2E5fJPQX+JaoYtsELZI86p9+O+8eRaoNiITpo+5C
+vRND3eSPDdvirgy+QHum8YYZ7v9tb1sROkFRnA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.3_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5.3_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 14 (0xe)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5.3_ta1/emailAddress=ch5.3_ta1
         Validity
-            Not Before: Apr 11 22:37:42 2011 GMT
-            Not After : Jan  5 22:37:42 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5.3_ta1/emailAddress=cs1_ch5.3_ta1
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5.3_ta1/emailAddress=cs1_ch5.3_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b5:76:e5:90:97:10:d5:aa:02:02:eb:87:f5:96:
-                    3a:94:31:a6:d9:1b:99:36:6b:62:13:36:cd:75:bf:
-                    5d:b9:19:02:15:79:e8:0c:95:12:80:a8:97:85:60:
-                    30:6f:4a:3d:cb:b4:bc:d8:a6:4d:a0:42:64:28:d3:
-                    07:2e:0a:f3:35:c3:35:10:08:f9:1e:e9:07:63:4b:
-                    7d:36:cc:65:7e:be:65:cb:a2:ad:8b:4a:1c:ec:9e:
-                    f6:f5:14:e7:93:42:5c:0b:a3:7e:73:ae:18:42:32:
-                    32:a0:45:96:2d:d5:d7:5c:75:f2:e3:48:23:34:20:
-                    88:4f:7e:1a:21:8c:45:30:0d
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c5:03:2b:f6:07:4e:f1:a3:9b:96:87:6d:ea:e2:
+                    bb:0b:fb:95:70:f6:34:a7:bb:e7:9f:df:ff:8a:fd:
+                    28:56:0b:fb:de:5d:79:d1:ba:0f:41:73:7f:5b:b9:
+                    17:6b:24:db:6f:20:a3:62:5e:3a:bb:71:29:18:33:
+                    52:24:ff:a9:9b:70:49:7f:78:94:f7:bd:a3:bf:2f:
+                    f4:de:e2:6f:61:13:ce:4f:f3:6a:85:84:35:ae:1d:
+                    a7:fb:00:2d:35:33:cc:18:ff:85:d9:37:0a:15:2b:
+                    15:71:de:ae:8c:99:ef:5b:dc:7b:4b:c1:b3:08:d9:
+                    57:29:29:e0:8d:46:e0:79:83
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        76:78:0e:96:48:35:42:08:26:68:65:9d:49:c6:3b:b7:f2:c7:
-        3b:41:e1:94:2b:30:ec:65:1d:90:bd:3e:6a:ec:66:f1:3d:e6:
-        76:b7:e7:a3:c7:96:b0:61:39:0b:e1:4e:15:cd:f7:95:48:c7:
-        ee:21:ce:81:5e:04:85:5b:2e:66:9f:2a:c1:6e:6f:4d:e3:c8:
-        32:1f:35:53:7d:4f:ff:0f:0f:07:25:6a:f9:da:74:0c:8d:cf:
-        86:3b:c1:30:bc:dd:a4:80:37:78:a3:03:1e:58:29:16:1b:d5:
-        b0:12:4e:8f:f4:da:c4:46:f4:28:4e:36:ac:d7:8a:95:c3:18:
-        e8:2e
+         0d:01:09:aa:c9:69:4c:33:74:70:07:ab:60:b6:0f:75:36:9e:
+         62:c2:96:82:f4:94:e4:9e:4b:6a:b4:fc:4e:45:21:e5:a7:20:
+         18:2a:a4:82:43:92:3a:d5:29:3a:f4:bb:e8:40:65:c8:08:53:
+         3b:46:42:4d:0b:f6:ba:8d:3f:08:ab:43:98:4b:41:40:8c:d6:
+         2d:58:dc:a8:53:e3:78:51:92:32:7e:00:9c:16:bb:c1:61:73:
+         68:2b:6d:4e:0f:f6:41:e4:08:43:b1:77:85:22:2b:06:1e:69:
+         48:38:28:9c:d5:60:65:7b:94:db:e7:d4:37:de:6a:0f:f3:cb:
+         53:45
 -----BEGIN CERTIFICATE-----
-MIIChjCCAe+gAwIBAgIBDjANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTESMBAGA1UEAxQJY2g1LjNfdGExMRgwFgYJKoZIhvcNAQkBFgljaDUu
-M190YTEwHhcNMTEwNDExMjIzNzQyWhcNMTQwMTA1MjIzNzQyWjB8MQswCQYDVQQG
-EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEN
-MAsGA1UEChMEcGtnNTEWMBQGA1UEAxQNY3MxX2NoNS4zX3RhMTEcMBoGCSqGSIb3
-DQEJARYNY3MxX2NoNS4zX3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-tXblkJcQ1aoCAuuH9ZY6lDGm2RuZNmtiEzbNdb9duRkCFXnoDJUSgKiXhWAwb0o9
-y7S82KZNoEJkKNMHLgrzNcM1EAj5HukHY0t9Nsxlfr5ly6Kti0oc7J729RTnk0Jc
-C6N+c64YQjIyoEWWLdXXXHXy40gjNCCIT34aIYxFMA0CAwEAAaMgMB4wDAYDVR0T
-AQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAdngOlkg1
-QggmaGWdScY7t/LHO0HhlCsw7GUdkL0+auxm8T3mdrfno8eWsGE5C+FOFc33lUjH
-7iHOgV4EhVsuZp8qwW5vTePIMh81U31P/w8PByVq+dp0DI3PhjvBMLzdpIA3eKMD
-HlgpFhvVsBJOj/TaxEb0KE42rNeKlcMY6C4=
+MIICiDCCAfGgAwIBAgIBDjANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEjAQBgNVBAMMCWNoNS4zX3RhMTEYMBYGCSqGSIb3DQEJARYJY2g1
+LjNfdGExMB4XDTEzMTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowfTELMAkGA1UE
+BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJh
+MQ0wCwYDVQQKDARwa2c1MRYwFAYDVQQDDA1jczFfY2g1LjNfdGExMRwwGgYJKoZI
+hvcNAQkBFg1jczFfY2g1LjNfdGExMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQDFAyv2B07xo5uWh23q4rsL+5Vw9jSnu+ef3/+K/ShWC/veXXnRug9Bc39buRdr
+JNtvIKNiXjq7cSkYM1Ik/6mbcEl/eJT3vaO/L/Te4m9hE85P82qFhDWuHaf7AC01
+M8wY/4XZNwoVKxVx3q6Mme9b3HtLwbMI2VcpKeCNRuB5gwIDAQABoyAwHjAMBgNV
+HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOBgQANAQmq
+yWlMM3RwB6tgtg91Np5iwpaC9JTknktqtPxORSHlpyAYKqSCQ5I61Sk69LvoQGXI
+CFM7RkJNC/a6jT8Iq0OYS0FAjNYtWNyoU+N4UZIyfgCcFrvBYXNoK21OD/ZB5AhD
+sXeFIisGHmlIOCic1WBle5Tb59Q33moP88tTRQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ch5_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 6 (0x6)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
         Validity
-            Not Before: Apr 11 22:37:40 2011 GMT
-            Not After : Jan  5 22:37:40 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ch5_ta1/emailAddress=cs1_ch5_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ch5_ta1/emailAddress=cs1_ch5_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e9:6c:6d:b5:1a:ef:fa:b5:f6:42:f6:7e:e6:f3:
-                    3f:11:2f:a7:c9:10:14:67:c9:fb:4b:c4:2f:c4:25:
-                    0d:a3:3c:66:0f:a0:1a:86:d5:19:48:e6:54:a3:a6:
-                    8d:6a:a2:89:a9:a5:ed:e7:49:ae:20:95:39:0c:19:
-                    41:87:e0:63:af:27:92:1d:55:b1:10:ea:b4:6d:5a:
-                    e6:21:78:93:94:e2:06:e6:7d:c6:53:4e:d5:af:82:
-                    08:a1:82:64:c1:57:78:7e:52:18:f6:38:f0:5e:8e:
-                    09:ea:fa:fc:7d:f3:2d:87:5d:a9:8e:ef:87:7a:e5:
-                    97:ef:7b:fb:b4:96:09:6b:17
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ba:a7:a1:60:33:eb:59:84:e6:2f:b0:30:38:b8:
+                    49:97:86:3b:82:4e:51:6a:28:bf:2a:6d:d3:46:77:
+                    67:ec:10:70:69:22:7f:e1:5d:7a:45:b5:81:2b:d2:
+                    ea:7d:41:5c:e2:4d:e8:2d:06:89:1c:4c:17:aa:3c:
+                    f5:2f:32:12:04:80:69:52:80:4a:ce:a1:4f:dc:76:
+                    a1:5a:d2:53:43:8f:7c:fb:82:eb:96:06:cd:05:89:
+                    74:34:7d:99:62:bc:09:67:e9:27:80:5b:78:65:05:
+                    57:c8:b6:b4:b7:83:5a:46:b2:80:6c:3f:05:3c:c6:
+                    49:2d:75:7c:48:2e:22:35:b7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        14:9a:25:22:78:e5:77:2e:7f:28:cb:57:a9:d8:22:b1:7a:f1:
-        75:b9:79:3f:f3:7e:bc:eb:49:1e:35:0f:7a:20:f0:0a:f6:a1:
-        eb:08:a1:be:4c:c7:98:22:5b:9f:f9:a6:9a:e2:4a:85:13:2a:
-        f1:7f:da:cc:04:b1:13:d5:52:90:59:17:a8:f8:77:f8:ba:02:
-        88:62:fb:9d:28:3f:0d:15:ad:79:3f:d0:a2:cb:a2:87:b7:e0:
-        10:3a:a1:1b:4b:0c:79:f6:1e:b0:20:dc:0f:01:7e:c0:9c:86:
-        91:6d:c4:06:4b:fb:3b:da:70:e0:1b:9b:f3:9d:2d:57:cb:16:
-        26:4f
+         c2:d0:56:dd:4a:bb:8f:f9:de:49:4c:0c:41:af:29:73:07:f5:
+         da:44:4a:aa:0b:9c:80:33:56:cc:eb:c5:58:14:f9:c2:c9:cc:
+         93:2f:75:eb:6c:fd:b8:79:de:0d:35:db:46:8b:a6:d7:0b:59:
+         3d:35:c9:ac:68:76:63:85:bd:b1:03:21:c7:53:a5:f5:22:9f:
+         f0:c2:23:7e:de:32:6f:4a:7b:d8:d5:2d:b1:ee:db:ad:5a:f9:
+         35:46:55:11:5a:bb:6b:53:21:1d:ea:c4:4d:16:5c:01:f5:af:
+         91:47:bb:16:c1:9b:71:4e:5b:52:b5:ea:f9:d8:7a:53:c0:ef:
+         e7:f4
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBBjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g1X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g1X3Rh
-MTAeFw0xMTA0MTEyMjM3NDBaFw0xNDAxMDUyMjM3NDBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczFfY2g1X3RhMTEaMBgGCSqGSIb3DQEJARYL
-Y3MxX2NoNV90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOlsbbUa7/q1
-9kL2fubzPxEvp8kQFGfJ+0vEL8QlDaM8Zg+gGobVGUjmVKOmjWqiiaml7edJriCV
-OQwZQYfgY68nkh1VsRDqtG1a5iF4k5TiBuZ9xlNO1a+CCKGCZMFXeH5SGPY48F6O
-Cer6/H3zLYddqY7vh3rll+97+7SWCWsXAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBABSaJSJ45XcufyjLV6nY
-IrF68XW5eT/zfrzrSR41D3og8Ar2oesIob5Mx5giW5/5ppriSoUTKvF/2swEsRPV
-UpBZF6j4d/i6Aohi+50oPw0VrXk/0KLLooe34BA6oRtLDHn2HrAg3A8BfsCchpFt
-xAZL+zvacOAbm/OdLVfLFiZP
+MIICgDCCAemgAwIBAgIBBjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2NoNV90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMV9jaDVfdGExMRowGAYJKoZIhvcNAQkB
+FgtjczFfY2g1X3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuqehYDPr
+WYTmL7AwOLhJl4Y7gk5Raii/Km3TRndn7BBwaSJ/4V16RbWBK9LqfUFc4k3oLQaJ
+HEwXqjz1LzISBIBpUoBKzqFP3HahWtJTQ498+4LrlgbNBYl0NH2ZYrwJZ+kngFt4
+ZQVXyLa0t4NaRrKAbD8FPMZJLXV8SC4iNbcCAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAwtBW3Uq7j/neSUwM
+Qa8pcwf12kRKqgucgDNWzOvFWBT5wsnMky9162z9uHneDTXbRoum1wtZPTXJrGh2
+Y4W9sQMhx1Ol9SKf8MIjft4yb0p72NUtse7brVr5NUZVEVq7a1MhHerETRZcAfWv
+kUe7FsGbcU5bUrXq+dh6U8Dv5/Q=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_cs8_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_cs8_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 25 (0x19)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:46 2011 GMT
-            Not After : Jan  5 22:37:46 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a8:89:d6:f6:e1:32:a9:bc:a5:c2:c8:00:1c:a1:
-                    04:fc:93:5a:5c:29:1d:37:7e:29:e1:7f:69:79:24:
-                    ab:05:5a:83:71:d8:3c:bb:e5:1c:b8:e0:5e:a8:bd:
-                    41:06:cb:69:f6:d2:b9:48:c4:93:7c:ae:c6:38:bc:
-                    d7:9a:f2:db:8d:f9:5f:51:c4:1b:d2:c5:0e:57:6d:
-                    0b:73:19:a8:34:e6:5b:81:80:43:77:3a:8e:54:59:
-                    91:69:a9:aa:9f:2b:24:24:1e:06:e8:bc:f2:3f:c3:
-                    ee:33:3f:f4:5f:76:fd:24:05:48:a8:98:2f:15:eb:
-                    16:d5:24:6b:ea:59:e6:06:51
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:fd:f6:7a:f6:04:88:b5:e3:ff:6f:ce:2a:01:
+                    89:dd:07:a7:10:5d:ca:76:bf:d2:18:97:80:5a:b1:
+                    b8:6e:6b:bd:6b:65:9a:24:0d:3d:dc:7f:eb:53:1f:
+                    45:9e:9c:61:98:da:18:08:c3:3e:45:de:e0:1e:16:
+                    93:2d:30:a4:e3:52:48:5d:97:80:3d:b9:3e:25:28:
+                    b1:be:17:db:71:57:ba:3f:69:22:3e:83:c7:6f:fe:
+                    69:fd:6d:cf:7a:2f:72:36:8d:85:28:38:50:0f:45:
+                    2f:22:e8:49:04:da:17:d5:a1:15:7e:b6:0e:de:e4:
+                    cc:2f:2a:e2:21:95:08:cb:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        27:04:6d:7c:c0:89:81:f7:16:04:e2:f7:f1:4a:3b:60:17:4d:
-        f2:c3:0b:78:32:a5:f0:b4:e4:4e:2e:8e:06:d6:2d:3a:65:33:
-        a1:16:60:47:78:1f:f3:d3:72:c5:c7:43:f8:bb:0e:22:2a:7b:
-        a6:3e:9c:1e:40:c8:71:ff:28:82:0b:d9:93:8c:b9:f6:a2:ca:
-        d5:52:81:b6:b7:a1:20:09:e8:8a:68:e5:24:d1:dd:da:dc:1a:
-        01:3d:e5:77:77:fe:64:f5:b6:14:f9:8b:04:3f:11:7e:62:f5:
-        ee:01:7c:d9:d5:b7:00:19:a9:49:05:94:0b:30:22:63:d2:0d:
-        3e:7a
+         a7:ac:32:bc:eb:2c:bc:b7:f1:f5:7a:e0:5b:34:0f:f0:44:44:
+         c5:9d:19:ca:4d:81:a6:9c:ea:43:be:fb:4f:3c:86:26:cf:f8:
+         a5:d0:9b:4f:65:eb:90:a4:8c:12:54:1c:6b:7a:c8:d2:e5:2b:
+         46:81:23:bc:e2:1a:a7:53:35:ea:fe:a5:e7:d4:d4:12:12:f1:
+         28:65:e0:12:56:36:2e:78:e3:fa:ca:1e:5e:b5:6f:27:39:7a:
+         fd:a0:1c:38:0b:2f:d6:68:24:9f:66:62:ea:28:82:f8:d4:10:
+         40:02:af:d1:91:79:6d:bf:f8:de:d1:45:cd:7d:35:92:69:f3:
+         30:4d
 -----BEGIN CERTIFICATE-----
-MIICjzCCAfigAwIBAgIBGTANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEUMBIGA1UEAxQLY3M4X2NoMV90YTMxGjAYBgkqhkiG9w0BCQEWC2Nz
-OF9jaDFfdGEzMB4XDTExMDQxMTIyMzc0NloXDTE0MDEwNTIyMzc0NlowgYAxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MRgwFgYDVQQDFA9jczFfY3M4X2NoMV90YTMxHjAc
-BgkqhkiG9w0BCQEWD2NzMV9jczhfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEAqInW9uEyqbylwsgAHKEE/JNaXCkdN34p4X9peSSrBVqDcdg8u+Uc
-uOBeqL1BBstp9tK5SMSTfK7GOLzXmvLbjflfUcQb0sUOV20LcxmoNOZbgYBDdzqO
-VFmRaamqnyskJB4G6LzyP8PuMz/0X3b9JAVIqJgvFesW1SRr6lnmBlECAwEAAaMg
-MB4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQAD
-gYEAJwRtfMCJgfcWBOL38Uo7YBdN8sMLeDKl8LTkTi6OBtYtOmUzoRZgR3gf89Ny
-xcdD+LsOIip7pj6cHkDIcf8oggvZk4y59qLK1VKBtrehIAnoimjlJNHd2twaAT3l
-d3f+ZPW2FPmLBD8RfmL17gF82dW3ABmpSQWUCzAiY9INPno=
+MIICkTCCAfqgAwIBAgIBGTANBgkqhkiG9w0BAQsFADB5MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxFDASBgNVBAMMC2NzOF9jaDFfdGEzMRowGAYJKoZIhvcNAQkBFgtj
+czhfY2gxX3RhMzAeFw0xMzEyMTMwMDEzMzZaFw0xNjA5MDgwMDEzMzZaMIGBMQsw
+CQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEg
+Q2xhcmExDTALBgNVBAoMBHBrZzUxGDAWBgNVBAMMD2NzMV9jczhfY2gxX3RhMzEe
+MBwGCSqGSIb3DQEJARYPY3MxX2NzOF9jaDFfdGEzMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDM/fZ69gSIteP/b84qAYndB6cQXcp2v9IYl4Basbhua71rZZok
+DT3cf+tTH0WenGGY2hgIwz5F3uAeFpMtMKTjUkhdl4A9uT4lKLG+F9txV7o/aSI+
+g8dv/mn9bc96L3I2jYUoOFAPRS8i6EkE2hfVoRV+tg7e5MwvKuIhlQjLBwIDAQAB
+oyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsF
+AAOBgQCnrDK86yy8t/H1euBbNA/wRETFnRnKTYGmnOpDvvtPPIYmz/il0JtPZeuQ
+pIwSVBxresjS5StGgSO84hqnUzXq/qXn1NQSEvEoZeASVjYueOP6yh5etW8nOXr9
+oBw4Cy/WaCSfZmLqKIL41BBAAq/RkXltv/je0UXNfTWSafMwTQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta10_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta10_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 46 (0x2e)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta10, CN=localhost/emailAddress=cs1_ta10
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta10, CN=localhost/emailAddress=cs1_ta10
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b2:6d:bc:ff:c2:ff:ef:b8:49:75:6b:8c:d4:5a:
-                    8c:de:94:66:55:60:46:1e:dc:0d:fd:e1:95:62:91:
-                    5c:11:1e:0e:2c:19:e2:e5:97:93:e5:dc:91:28:ac:
-                    83:69:8d:3a:86:2d:a1:e9:e6:17:b1:49:e8:98:49:
-                    af:5d:bb:0e:12:66:53:a2:d7:11:25:cf:1b:71:c2:
-                    f7:ad:50:7b:67:d1:2a:44:99:21:25:44:5f:f4:2d:
-                    a5:15:69:a2:12:ab:41:38:1c:c0:f0:9e:cc:49:30:
-                    91:38:6a:1e:e9:72:0d:f9:aa:0a:b9:32:dd:01:f2:
-                    6b:91:72:f6:4e:84:ab:fa:73
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:da:a5:56:23:b3:4b:c1:5a:2a:3c:95:5e:5e:98:
+                    21:7b:82:e5:7d:87:c2:b0:ef:f4:7c:1d:88:3c:f0:
+                    8d:c0:b3:da:44:fa:3e:1d:87:ca:86:7f:f6:64:5c:
+                    81:7c:4b:98:3b:0e:3e:ac:49:d9:dd:27:67:ef:a1:
+                    a7:b5:25:2e:62:f3:89:de:d4:46:a4:b3:76:16:67:
+                    1a:62:0e:d9:e7:03:67:aa:0a:b7:b2:2c:16:be:e3:
+                    d4:ca:8b:f6:2a:25:49:61:04:64:3b:e2:e5:94:e5:
+                    dc:81:a1:ff:e1:40:fc:e5:ef:3b:70:d0:40:2c:cb:
+                    3c:ea:d7:47:8f:1d:f8:47:3d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,28 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        09:46:77:32:eb:db:bb:3a:3f:98:4c:b7:3b:ae:ed:1e:dc:d8:
-        e6:cd:ea:e7:1d:33:e0:a0:b3:14:18:45:1d:a2:dd:62:ea:6b:
-        47:0d:26:a5:fa:17:10:94:5f:87:1a:3b:97:e1:72:3b:9c:71:
-        a8:b6:1e:33:28:cf:a7:ea:c1:d0:7e:8f:f0:de:80:1b:9f:3f:
-        23:4a:3c:0c:f5:6e:ad:9b:9b:87:32:93:43:c1:5f:4d:3b:23:
-        89:22:27:7d:89:67:f7:e4:e5:3d:48:ae:4d:53:6e:85:81:30:
-        6b:be:d1:dd:4d:f4:16:7d:3f:07:42:fc:f4:6e:86:14:f3:c7:
-        cd:45
+         6a:5b:26:9c:14:d2:2b:37:ba:32:2b:66:b7:a6:de:9f:03:85:
+         63:e7:59:c7:05:1f:72:04:44:01:49:d0:88:a9:23:c7:a0:20:
+         c2:6c:bb:0b:52:06:ee:34:b4:37:af:41:ad:e0:16:8f:8c:3d:
+         04:98:98:62:2f:45:66:57:c4:25:db:3e:16:09:ff:8c:07:63:
+         7e:59:31:24:ed:68:91:2d:b8:2e:3c:91:74:61:7e:8c:5e:e4:
+         5c:3f:9f:ff:05:99:20:78:b9:be:6b:79:e6:aa:91:9e:85:25:
+         07:79:dc:2b:22:dd:19:81:d5:c6:a9:e9:a8:5a:da:c6:09:8e:
+         91:c7
 -----BEGIN CERTIFICATE-----
-MIICmzCCAgSgAwIBAgIBLjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTENMAsGA1UECxMEdGExMDESMBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJ
-KoZIhvcNAQkBFgR0YTEwMB4XDTExMDQxMTIyMzc1NVoXDTE0MDEwNTIyMzc1NVow
-gYYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpN
-ZW5sbyBQYXJrMQ0wCwYDVQQKEwRwa2c1MREwDwYDVQQLFAhjczFfdGExMDESMBAG
-A1UEAxMJbG9jYWxob3N0MRcwFQYJKoZIhvcNAQkBFghjczFfdGExMDCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEAsm28/8L/77hJdWuM1FqM3pRmVWBGHtwN/eGV
-YpFcER4OLBni5ZeT5dyRKKyDaY06hi2h6eYXsUnomEmvXbsOEmZTotcRJc8bccL3
-rVB7Z9EqRJkhJURf9C2lFWmiEqtBOBzA8J7MSTCROGoe6XIN+aoKuTLdAfJrkXL2
-ToSr+nMCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJ
-KoZIhvcNAQELBQADgYEACUZ3Muvbuzo/mEy3O67tHtzY5s3q5x0z4KCzFBhFHaLd
-YuprRw0mpfoXEJRfhxo7l+FyO5xxqLYeMyjPp+rB0H6P8N6AG58/I0o8DPVurZub
-hzKTQ8FfTTsjiSInfYln9+TlPUiuTVNuhYEwa77R3U30Fn0/B0L89G6GFPPHzUU=
+MIICnTCCAgagAwIBAgIBLjANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDTALBgNVBAsMBHRhMTAxEjAQBgNVBAMMCWxvY2FsaG9zdDETMBEG
+CSqGSIb3DQEJARYEdGExMDAeFw0xMzEyMTMwMDEzMzlaFw0xNjA5MDgwMDEzMzla
+MIGHMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwL
+U2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxETAPBgNVBAsMCGNzMV90YTEwMRIw
+EAYDVQQDDAlsb2NhbGhvc3QxFzAVBgkqhkiG9w0BCQEWCGNzMV90YTEwMIGfMA0G
+CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDapVYjs0vBWio8lV5emCF7guV9h8Kw7/R8
+HYg88I3As9pE+j4dh8qGf/ZkXIF8S5g7Dj6sSdndJ2fvoae1JS5i84ne1Eaks3YW
+ZxpiDtnnA2eqCreyLBa+49TKi/YqJUlhBGQ74uWU5dyBof/hQPzl7ztw0EAsyzzq
+10ePHfhHPQIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAN
+BgkqhkiG9w0BAQsFAAOBgQBqWyacFNIrN7oyK2a3pt6fA4Vj51nHBR9yBEQBSdCI
+qSPHoCDCbLsLUgbuNLQ3r0Gt4BaPjD0EmJhiL0VmV8Ql2z4WCf+MB2N+WTEk7WiR
+LbguPJF0YX6MXuRcP5//BZkgeLm+a3nmqpGehSUHedwrIt0ZgdXGqemoWtrGCY6R
+xw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta11_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta11_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 47 (0x2f)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta11, CN=localhost/emailAddress=cs1_ta11
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta11, CN=localhost/emailAddress=cs1_ta11
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d0:21:b2:10:04:9f:9c:ed:82:b7:0e:98:3f:b6:
-                    27:97:24:74:1d:88:1e:42:29:bc:3b:1b:91:a5:92:
-                    4f:80:2a:81:05:71:2f:1b:3f:49:92:d1:9e:bf:e8:
-                    39:a8:6f:81:0d:53:20:04:fa:33:32:b7:96:3e:66:
-                    f7:85:d4:4d:32:e7:11:3e:aa:2f:3a:40:3f:28:97:
-                    b3:ee:9f:5d:b2:4c:e1:5e:7d:2e:d1:4f:ec:ff:b4:
-                    34:b4:64:b9:56:ed:2b:59:5c:e0:c5:e1:91:66:20:
-                    f2:56:9d:6e:55:69:60:38:6d:8a:c3:8d:d6:b9:30:
-                    37:ac:ed:eb:bf:ed:46:b7:5f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:e3:10:e4:f8:44:64:45:ea:54:25:0d:8e:5f:f7:
+                    1c:bb:80:f5:1e:af:19:dd:ba:30:fa:1b:6c:3e:00:
+                    9e:38:09:c8:e6:1a:5c:3f:4e:46:51:7d:2c:5e:82:
+                    5b:2d:03:5a:f3:30:da:fc:0b:45:2e:c2:4a:0a:a5:
+                    78:68:c5:81:d9:bb:b6:83:fc:90:64:0e:13:5d:75:
+                    d1:79:9c:38:11:15:f1:7a:98:70:3d:3d:65:a7:65:
+                    c4:c7:de:fb:70:02:81:0d:61:1c:f8:77:0d:c6:22:
+                    41:91:c9:11:24:5a:5a:cc:f3:30:2f:22:47:fd:8a:
+                    13:82:7a:c8:c2:3e:5e:78:57
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,28 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        6a:b0:56:90:12:50:3d:5b:96:88:2c:f3:fc:67:2b:ed:07:84:
-        f7:f6:34:e6:51:b4:fb:67:15:0f:88:65:f5:34:3c:53:9b:ab:
-        a4:fc:fd:06:96:f3:de:8f:2c:89:fd:26:41:20:cf:21:03:3b:
-        17:0c:8b:7b:f1:a9:85:8d:a7:f5:58:5a:58:a1:e4:fa:dc:b2:
-        3b:23:d6:ae:bc:f9:b9:34:5c:f2:00:49:9e:e7:f6:a7:60:ff:
-        1b:22:50:db:80:1a:c8:81:40:bc:00:ee:4b:44:ef:4b:d0:13:
-        b0:a2:e7:fb:03:e9:aa:39:7a:aa:00:f0:75:30:9c:31:8e:c8:
-        75:13
+         c2:e6:3c:ec:dd:c1:5d:d6:c9:2d:01:2a:7c:75:25:36:29:e1:
+         96:73:4b:4d:4c:09:76:f1:a0:f1:c0:1e:d3:d4:ba:16:22:68:
+         e7:3a:ba:31:7f:ac:67:69:4f:97:f8:f3:68:fa:6f:78:d6:cf:
+         86:e3:56:f0:f7:23:f9:f8:89:77:60:5a:06:af:d0:c8:34:b5:
+         07:23:be:97:03:8d:00:af:c3:43:26:46:24:97:03:e9:2e:74:
+         a3:31:92:bd:cb:b6:2a:c3:0e:df:b1:22:45:42:bf:45:fc:1f:
+         d9:49:66:22:77:90:08:a6:0c:2d:d7:0a:29:7f:be:7e:01:8b:
+         a8:99
 -----BEGIN CERTIFICATE-----
-MIICmzCCAgSgAwIBAgIBLzANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTENMAsGA1UECxMEdGExMTESMBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJ
-KoZIhvcNAQkBFgR0YTExMB4XDTExMDQxMTIyMzc1NVoXDTE0MDEwNTIyMzc1NVow
-gYYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpN
-ZW5sbyBQYXJrMQ0wCwYDVQQKEwRwa2c1MREwDwYDVQQLFAhjczFfdGExMTESMBAG
-A1UEAxMJbG9jYWxob3N0MRcwFQYJKoZIhvcNAQkBFghjczFfdGExMTCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEA0CGyEASfnO2Ctw6YP7YnlyR0HYgeQim8OxuR
-pZJPgCqBBXEvGz9JktGev+g5qG+BDVMgBPozMreWPmb3hdRNMucRPqovOkA/KJez
-7p9dskzhXn0u0U/s/7Q0tGS5Vu0rWVzgxeGRZiDyVp1uVWlgOG2Kw43WuTA3rO3r
-v+1Gt18CAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwDQYJ
-KoZIhvcNAQELBQADgYEAarBWkBJQPVuWiCzz/Gcr7QeE9/Y05lG0+2cVD4hl9TQ8
-U5urpPz9Bpbz3o8sif0mQSDPIQM7FwyLe/GphY2n9VhaWKHk+tyyOyPWrrz5uTRc
-8gBJnuf2p2D/GyJQ24AayIFAvADuS0TvS9ATsKLn+wPpqjl6qgDwdTCcMY7IdRM=
+MIICnTCCAgagAwIBAgIBLzANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDTALBgNVBAsMBHRhMTExEjAQBgNVBAMMCWxvY2FsaG9zdDETMBEG
+CSqGSIb3DQEJARYEdGExMTAeFw0xMzEyMTMwMDEzMzlaFw0xNjA5MDgwMDEzMzla
+MIGHMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwL
+U2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUxETAPBgNVBAsMCGNzMV90YTExMRIw
+EAYDVQQDDAlsb2NhbGhvc3QxFzAVBgkqhkiG9w0BCQEWCGNzMV90YTExMIGfMA0G
+CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjEOT4RGRF6lQlDY5f9xy7gPUerxndujD6
+G2w+AJ44CcjmGlw/TkZRfSxeglstA1rzMNr8C0UuwkoKpXhoxYHZu7aD/JBkDhNd
+ddF5nDgRFfF6mHA9PWWnZcTH3vtwAoENYRz4dw3GIkGRyREkWlrM8zAvIkf9ihOC
+esjCPl54VwIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAN
+BgkqhkiG9w0BAQsFAAOBgQDC5jzs3cFd1sktASp8dSU2KeGWc0tNTAl28aDxwB7T
+1LoWImjnOroxf6xnaU+X+PNo+m941s+G41bw9yP5+Il3YFoGr9DINLUHI76XA40A
+r8NDJkYklwPpLnSjMZK9y7Yqww7fsSJFQr9F/B/ZSWYid5AIpgwt1wopf75+AYuo
+mQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta2_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta2_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 15 (0xf)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta2/emailAddress=ta2
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta2/emailAddress=ta2
         Validity
-            Not Before: Apr 11 22:37:43 2011 GMT
-            Not After : Jan  5 22:37:43 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs1_ta2/emailAddress=cs1_ta2
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs1_ta2/emailAddress=cs1_ta2
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e7:3a:08:5d:d7:3d:c8:50:43:ad:92:87:40:58:
-                    59:5c:fa:34:ba:c9:bd:5b:d7:9f:17:b8:4f:d2:15:
-                    fd:86:d9:f0:3a:07:48:14:f3:c0:a4:9e:e3:ee:00:
-                    45:ba:aa:de:3a:5c:53:d6:0d:dd:46:88:d3:b6:13:
-                    aa:ee:f8:c0:3e:fa:eb:0a:6d:4a:0d:f7:39:21:ff:
-                    5d:dc:d7:13:5b:2a:e9:e4:c0:1e:31:2b:5b:00:ce:
-                    b0:55:44:72:97:66:06:ab:41:71:05:4a:83:6b:3b:
-                    cf:a7:ce:5d:61:43:3b:bb:60:19:c4:33:ac:23:72:
-                    66:9d:e9:72:be:bd:6c:ad:2b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:be:2d:d1:b2:aa:38:aa:c1:4f:f3:f7:07:f2:f3:
+                    30:0c:6d:f7:13:ed:c3:c7:c8:f8:87:8d:ea:a3:49:
+                    cf:74:dd:30:1b:1f:9d:a6:8e:b7:eb:fa:f5:f7:e5:
+                    e0:05:9a:e4:b1:ed:2d:ee:ff:f8:ab:23:9a:f3:24:
+                    ad:99:26:83:4d:e7:35:b7:c8:b1:60:3d:0c:44:e9:
+                    2c:24:50:ee:86:5c:f0:ba:61:34:5d:f9:6c:a3:b7:
+                    e3:16:0e:90:35:9e:05:15:99:32:ff:50:de:b5:e0:
+                    66:88:e6:d5:0b:ae:16:a9:91:f5:86:c4:23:c9:7e:
+                    f1:9d:2b:86:43:e6:fb:c1:a5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        49:7b:52:fd:1f:be:ee:30:38:0d:93:6b:07:01:95:14:35:6e:
-        5b:dd:74:9e:a0:a7:1a:bd:a8:cd:35:a9:7f:21:af:d7:a2:0c:
-        69:f9:d4:d0:eb:45:93:e2:48:fd:86:b4:70:fb:b5:dd:e5:48:
-        5f:93:d4:41:7a:cb:a5:73:02:d8:d9:e8:5f:9c:f8:4f:ad:50:
-        fb:88:24:b3:f5:e0:cf:d9:3e:bf:3f:5b:0c:db:a0:20:51:5d:
-        ea:13:0b:5b:44:6d:af:0f:6a:72:b6:25:8c:9f:bd:d0:a9:0e:
-        38:60:39:53:7e:9d:6e:ac:65:21:9a:32:f4:57:65:39:dc:f7:
-        36:9a
+         10:82:e5:2b:f8:67:14:0c:22:0d:f4:4e:17:c5:d5:7f:3d:fa:
+         24:2a:ad:33:47:ff:2a:f5:37:f6:83:81:2f:32:df:01:18:80:
+         7a:00:0b:f5:37:f9:eb:de:b0:38:cc:38:94:94:83:76:38:bb:
+         0e:0a:72:9b:2c:87:ce:8c:46:ef:68:f4:e0:a9:2f:cc:28:53:
+         c3:ac:63:7d:2b:87:fb:76:7b:9e:98:c6:0e:80:9e:80:4e:40:
+         b8:1e:2c:8b:c1:8b:cd:13:58:16:ea:aa:a0:0e:b6:b8:4b:a7:
+         74:a1:0d:d9:41:70:44:1e:19:d2:25:4b:b1:52:65:40:32:b0:
+         5d:3d
 -----BEGIN CERTIFICATE-----
-MIICbjCCAdegAwIBAgIBDzANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UEAxMDdGEyMRIwEAYJKoZIhvcNAQkBFgN0YTIwHhcNMTEw
-NDExMjIzNzQzWhcNMTQwMTA1MjIzNzQzWjBwMQswCQYDVQQGEwJVUzETMBEGA1UE
-CBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtn
-NTEQMA4GA1UEAxQHY3MxX3RhMjEWMBQGCSqGSIb3DQEJARYHY3MxX3RhMjCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5zoIXdc9yFBDrZKHQFhZXPo0usm9W9ef
-F7hP0hX9htnwOgdIFPPApJ7j7gBFuqreOlxT1g3dRojTthOq7vjAPvrrCm1KDfc5
-If9d3NcTWyrp5MAeMStbAM6wVURyl2YGq0FxBUqDazvPp85dYUM7u2AZxDOsI3Jm
-nelyvr1srSsCAwEAAaMgMB4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4Aw
-DQYJKoZIhvcNAQELBQADgYEASXtS/R++7jA4DZNrBwGVFDVuW910nqCnGr2ozTWp
-fyGv16IMafnU0OtFk+JI/Ya0cPu13eVIX5PUQXrLpXMC2NnoX5z4T61Q+4gks/Xg
-z9k+vz9bDNugIFFd6hMLW0Rtrw9qcrYljJ+90KkOOGA5U36dbqxlIZoy9FdlOdz3
-Npo=
+MIICcDCCAdmgAwIBAgIBDzANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAMMA3RhMjESMBAGCSqGSIb3DQEJARYDdGEyMB4XDTEz
+MTIxMzAwMTMzNVoXDTE2MDkwODAwMTMzNVowcTELMAkGA1UEBhMCVVMxEzARBgNV
+BAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARw
+a2c1MRAwDgYDVQQDDAdjczFfdGEyMRYwFAYJKoZIhvcNAQkBFgdjczFfdGEyMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+LdGyqjiqwU/z9wfy8zAMbfcT7cPH
+yPiHjeqjSc903TAbH52mjrfr+vX35eAFmuSx7S3u//irI5rzJK2ZJoNN5zW3yLFg
+PQxE6SwkUO6GXPC6YTRd+Wyjt+MWDpA1ngUVmTL/UN614GaI5tULrhapkfWGxCPJ
+fvGdK4ZD5vvBpQIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIH
+gDANBgkqhkiG9w0BAQsFAAOBgQAQguUr+GcUDCIN9E4XxdV/PfokKq0zR/8q9Tf2
+g4EvMt8BGIB6AAv1N/nr3rA4zDiUlIN2OLsOCnKbLIfOjEbvaPTgqS/MKFPDrGN9
+K4f7dnuemMYOgJ6ATkC4HiyLwYvNE1gW6qqgDra4S6d0oQ3ZQXBEHhnSJUuxUmVA
+MrBdPQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta6_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta6_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 42 (0x2a)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta6, CN=localhost/emailAddress=cs1_ta6
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta6, CN=localhost/emailAddress=cs1_ta6
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e1:f0:66:24:db:fa:5f:00:b6:c4:f6:63:f0:51:
-                    7d:49:f9:92:71:e1:b3:8c:e7:fc:e9:e4:4f:79:76:
-                    52:51:06:65:c1:5f:d4:51:26:30:46:c9:70:98:5a:
-                    c5:a9:9e:6a:67:24:25:7a:68:5b:63:af:90:e7:b1:
-                    fb:42:f9:15:9c:d4:41:c6:90:fd:c3:d3:d7:cf:fe:
-                    00:c6:39:cb:6c:ae:9c:cb:74:c4:b6:1f:be:1b:58:
-                    9f:c9:8a:33:66:ec:32:08:fc:d9:23:e1:29:e2:f3:
-                    3e:3d:53:a7:78:e7:69:49:2b:39:72:8b:74:33:46:
-                    b1:f7:3b:26:4f:8d:06:64:e7
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:e0:47:5b:b6:ff:33:b8:75:5d:d1:f8:31:47:d7:
+                    46:c1:12:4e:d3:95:54:a2:cd:d8:c0:19:35:21:ea:
+                    03:c3:73:e0:e0:50:a1:10:2e:cd:9a:a5:8a:b0:b9:
+                    2e:66:ad:2d:09:3f:38:42:ec:2f:bd:c2:d0:16:90:
+                    82:d0:1c:a9:c7:81:4c:3f:9d:c8:f5:6d:ca:38:04:
+                    c2:9e:77:3c:1f:0b:9f:4b:d2:ca:df:a2:af:f0:4e:
+                    b8:51:e1:2c:01:4b:a7:b7:56:6c:ee:96:22:2f:2f:
+                    33:83:e2:c1:a5:c0:aa:e5:45:2b:50:31:84:8a:d0:
+                    5b:06:0a:2f:5d:c3:d6:d5:1b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        6b:e1:7e:83:a6:a1:f8:46:a6:85:bb:c7:25:20:83:bb:b4:e0:
-        58:63:36:5a:97:1c:4c:76:24:a2:9d:c3:45:73:1f:22:39:97:
-        2c:47:b1:f5:3e:ac:b4:00:6d:c5:32:49:0c:83:e9:94:44:fa:
-        d6:e1:2d:a7:ae:66:34:9c:85:3e:a4:43:af:c0:2a:6c:f9:22:
-        64:d2:bb:54:67:e8:99:df:41:f2:7c:87:77:67:b5:3d:14:37:
-        75:32:56:69:21:f2:53:f2:d2:83:a1:fc:c0:3d:b5:4e:b5:d8:
-        06:d8:4e:71:f8:cc:3c:3a:93:a4:a0:05:a3:4f:7b:b1:83:21:
-        96:60
+         36:42:59:49:7a:7a:58:88:a3:c2:e9:16:fc:dc:5c:7c:26:2e:
+         d5:ff:4f:2f:45:96:7f:c0:5a:10:fd:a5:c5:18:95:48:b3:bf:
+         49:a0:a1:4d:70:e0:39:00:94:5d:7c:0b:99:dc:7d:29:57:40:
+         7a:31:67:94:00:83:61:aa:ca:48:7f:64:db:81:90:3c:2a:e4:
+         26:33:3e:80:14:12:85:06:bc:e9:8b:e2:49:80:bd:e7:a4:f0:
+         3a:c7:ba:e8:c0:1f:f2:7a:48:af:aa:ba:20:be:b2:e8:99:4d:
+         66:90:34:78:b1:82:9a:90:15:a8:dc:76:8d:27:df:7b:40:04:
+         a1:03
 -----BEGIN CERTIFICATE-----
-MIIClzCCAgCgAwIBAgIBKjANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UECxMDdGE2MRIwEAYDVQQDEwlsb2NhbGhvc3QxEjAQBgkq
-hkiG9w0BCQEWA3RhNjAeFw0xMTA0MTEyMjM3NTRaFw0xNDAxMDUyMjM3NTRaMIGE
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UECxQHY3MxX3RhNjESMBAGA1UE
-AxMJbG9jYWxob3N0MRYwFAYJKoZIhvcNAQkBFgdjczFfdGE2MIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDh8GYk2/pfALbE9mPwUX1J+ZJx4bOM5/zp5E95dlJR
-BmXBX9RRJjBGyXCYWsWpnmpnJCV6aFtjr5DnsftC+RWc1EHGkP3D09fP/gDGOcts
-rpzLdMS2H74bWJ/JijNm7DII/Nkj4Sni8z49U6d452lJKzlyi3QzRrH3OyZPjQZk
-5wIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
-9w0BAQsFAAOBgQBr4X6DpqH4RqaFu8clIIO7tOBYYzZalxxMdiSincNFcx8iOZcs
-R7H1Pqy0AG3FMkkMg+mURPrW4S2nrmY0nIU+pEOvwCps+SJk0rtUZ+iZ30HyfId3
-Z7U9FDd1MlZpIfJT8tKDofzAPbVOtdgG2E5x+Mw8OpOkoAWjT3uxgyGWYA==
+MIICmTCCAgKgAwIBAgIBKjANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAsMA3RhNjESMBAGA1UEAwwJbG9jYWxob3N0MRIwEAYJ
+KoZIhvcNAQkBFgN0YTYwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjCB
+hTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1Nh
+bnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQLDAdjczFfdGE2MRIwEAYD
+VQQDDAlsb2NhbGhvc3QxFjAUBgkqhkiG9w0BCQEWB2NzMV90YTYwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBAOBHW7b/M7h1XdH4MUfXRsESTtOVVKLN2MAZNSHq
+A8Nz4OBQoRAuzZqlirC5LmatLQk/OELsL73C0BaQgtAcqceBTD+dyPVtyjgEwp53
+PB8Ln0vSyt+ir/BOuFHhLAFLp7dWbO6WIi8vM4PiwaXAquVFK1AxhIrQWwYKL13D
+1tUbAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+SIb3DQEBCwUAA4GBADZCWUl6eliIo8LpFvzcXHwmLtX/Ty9Fln/AWhD9pcUYlUiz
+v0mgoU1w4DkAlF18C5ncfSlXQHoxZ5QAg2Gqykh/ZNuBkDwq5CYzPoAUEoUGvOmL
+4kmAveek8DrHuujAH/J6SK+quiC+suiZTWaQNHixgpqQFajcdo0n33tABKED
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta7_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta7_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 43 (0x2b)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta7, CN=localhost/emailAddress=cs1_ta7
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta7, CN=localhost/emailAddress=cs1_ta7
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c1:8e:b8:0a:bd:17:40:c0:8d:b3:6f:c3:ca:97:
-                    ca:b0:b6:95:01:9c:d8:a0:f3:9f:af:2e:c8:3f:0b:
-                    54:f3:f0:c6:ae:41:d0:b5:73:4d:6e:b3:93:f9:58:
-                    99:86:b4:66:21:2d:9f:78:ad:47:eb:81:78:5d:21:
-                    2e:19:38:7a:73:64:5e:c9:8f:5c:1c:f5:92:b9:5f:
-                    2f:f3:de:e7:a3:8c:8a:cb:d1:b2:00:ed:7c:24:a8:
-                    10:d2:2c:eb:32:7c:48:23:fe:c2:9d:41:b5:07:d7:
-                    52:aa:e9:20:d3:2a:63:60:c4:1a:60:27:05:28:ae:
-                    4f:88:fd:ba:8e:ff:02:c7:47
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d6:44:f3:0b:4a:01:1a:b9:6e:5a:01:90:e2:1d:
+                    39:37:48:16:5d:16:fe:7b:69:47:f0:e2:bb:e0:5b:
+                    e9:22:6c:cc:7c:2c:8a:0d:74:6d:30:f5:f5:83:b8:
+                    b5:87:7a:c1:0c:0a:5a:17:6e:dc:21:53:9f:8b:02:
+                    84:b0:45:9f:67:31:30:61:ff:1a:62:c2:a9:94:b4:
+                    f9:70:57:0d:03:af:a1:00:59:be:15:5c:08:75:e0:
+                    56:4d:30:ea:02:d0:8a:f1:2c:dd:fa:74:cc:f3:98:
+                    15:ae:1a:e0:c0:72:64:0a:26:b6:e2:04:17:24:5d:
+                    58:60:ac:01:a7:73:03:71:ef
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        b5:06:5c:d4:ad:4f:c3:e4:99:0c:07:e7:dd:33:09:94:42:7d:
-        8a:c8:04:56:c8:63:a0:be:4b:a7:60:52:e4:13:ef:82:bd:ce:
-        9f:4f:91:ee:e8:0e:09:35:e6:eb:c2:e3:da:78:8d:4e:a2:b4:
-        e5:f0:4c:99:29:02:0f:a8:b8:49:56:f8:d9:a3:4b:c7:bb:ce:
-        ba:63:78:ed:36:f9:34:6a:b8:9d:06:9b:ff:5e:e9:48:0e:b3:
-        39:d7:64:e5:c9:28:c8:3c:8f:42:52:08:56:ad:6d:f0:63:aa:
-        30:45:d4:40:17:34:be:24:4e:21:7a:b5:b3:2a:c7:ce:75:1b:
-        a5:eb
+         31:3b:0b:62:1c:06:94:b3:85:8c:08:b8:da:07:20:01:4c:23:
+         98:34:20:06:f4:ec:b9:fb:42:52:80:2c:0f:e9:91:b7:de:3f:
+         c4:42:4a:d7:22:0a:9b:ec:83:a0:1f:64:57:98:e9:1a:e1:ac:
+         08:78:ee:28:05:c1:53:50:3e:d1:e0:fa:55:9a:a0:ca:39:28:
+         9f:71:8b:ab:9d:a6:3e:04:e9:bf:b3:4d:97:74:b2:36:4e:65:
+         ed:cf:5c:44:3c:c1:37:77:1c:d3:7d:3b:76:fe:72:53:ac:90:
+         0a:07:37:b0:97:64:ab:b4:d3:63:28:ce:37:cf:80:26:8a:7e:
+         0b:f0
 -----BEGIN CERTIFICATE-----
-MIIClzCCAgCgAwIBAgIBKzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UECxMDdGE3MRIwEAYDVQQDEwlsb2NhbGhvc3QxEjAQBgkq
-hkiG9w0BCQEWA3RhNzAeFw0xMTA0MTEyMjM3NTRaFw0xNDAxMDUyMjM3NTRaMIGE
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UECxQHY3MxX3RhNzESMBAGA1UE
-AxMJbG9jYWxob3N0MRYwFAYJKoZIhvcNAQkBFgdjczFfdGE3MIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDBjrgKvRdAwI2zb8PKl8qwtpUBnNig85+vLsg/C1Tz
-8MauQdC1c01us5P5WJmGtGYhLZ94rUfrgXhdIS4ZOHpzZF7Jj1wc9ZK5Xy/z3uej
-jIrL0bIA7XwkqBDSLOsyfEgj/sKdQbUH11Kq6SDTKmNgxBpgJwUork+I/bqO/wLH
-RwIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
-9w0BAQsFAAOBgQC1BlzUrU/D5JkMB+fdMwmUQn2KyARWyGOgvkunYFLkE++Cvc6f
-T5Hu6A4JNebrwuPaeI1OorTl8EyZKQIPqLhJVvjZo0vHu866Y3jtNvk0aridBpv/
-XulIDrM512TlySjIPI9CUghWrW3wY6owRdRAFzS+JE4herWzKsfOdRul6w==
+MIICmTCCAgKgAwIBAgIBKzANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAsMA3RhNzESMBAGA1UEAwwJbG9jYWxob3N0MRIwEAYJ
+KoZIhvcNAQkBFgN0YTcwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjCB
+hTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1Nh
+bnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQLDAdjczFfdGE3MRIwEAYD
+VQQDDAlsb2NhbGhvc3QxFjAUBgkqhkiG9w0BCQEWB2NzMV90YTcwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBANZE8wtKARq5bloBkOIdOTdIFl0W/ntpR/Diu+Bb
+6SJszHwsig10bTD19YO4tYd6wQwKWhdu3CFTn4sChLBFn2cxMGH/GmLCqZS0+XBX
+DQOvoQBZvhVcCHXgVk0w6gLQivEs3fp0zPOYFa4a4MByZAomtuIEFyRdWGCsAadz
+A3HvAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+SIb3DQEBCwUAA4GBADE7C2IcBpSzhYwIuNoHIAFMI5g0IAb07Ln7QlKALA/pkbfe
+P8RCStciCpvsg6AfZFeY6RrhrAh47igFwVNQPtHg+lWaoMo5KJ9xi6udpj4E6b+z
+TZd0sjZOZe3PXEQ8wTd3HNN9O3b+clOskAoHN7CXZKu002MozjfPgCaKfgvw
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta8_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta8_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 44 (0x2c)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta8, CN=localhost/emailAddress=cs1_ta8
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta8, CN=localhost/emailAddress=cs1_ta8
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e7:a7:dd:2e:a7:89:c3:cc:da:a2:8b:bd:3b:ba:
-                    bc:66:6a:cd:65:00:60:70:55:8c:f0:b7:89:c3:fc:
-                    97:42:5c:cb:2c:f5:0a:1c:55:c7:79:b7:b9:28:30:
-                    f4:9a:a4:e0:31:e5:52:df:f4:40:85:49:8e:fc:08:
-                    a5:05:44:ed:b7:6e:00:0b:a7:2d:a1:2c:47:95:18:
-                    dc:5e:d0:c4:24:3d:4c:a7:cb:76:91:fb:00:89:2a:
-                    3f:7f:ab:f1:5e:b7:cb:24:6e:42:19:4d:d8:a7:12:
-                    83:c1:8c:b6:fb:02:f0:9c:1f:51:c3:c5:49:ed:a7:
-                    6e:09:bb:11:2f:a5:3f:00:d5
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:eb:76:dd:67:17:86:2d:82:c1:49:8d:1e:fd:34:
+                    12:74:70:5b:bd:91:50:64:4f:53:48:65:85:cf:0d:
+                    a6:8b:54:ca:a4:4f:58:fc:5e:b8:e9:ce:61:7c:8e:
+                    04:0c:06:e8:4a:66:9f:77:d3:5c:ed:2e:b0:d7:c6:
+                    61:14:d4:33:8c:5e:71:1a:1a:0a:c9:e5:90:23:7d:
+                    9c:c5:f8:42:e1:13:40:6b:e2:20:ab:04:c1:80:b4:
+                    1b:03:de:6d:b5:99:03:34:28:b2:db:ca:32:00:ac:
+                    b8:36:4d:da:3c:33:8b:89:aa:4b:78:c5:9b:64:aa:
+                    74:7d:65:ff:86:11:ad:cd:15
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        b3:c8:ea:1e:23:23:a9:77:46:ae:c3:1c:cf:43:81:80:aa:a6:
-        fb:25:ec:a2:fa:d5:c3:e9:1e:c7:78:e1:cc:a4:d7:3f:08:2f:
-        5f:58:05:b8:d4:0b:c7:87:2e:93:f6:c5:cb:17:31:e3:fa:88:
-        a3:0d:8d:4b:39:2b:96:dd:4d:21:91:37:e9:e7:f5:87:12:0f:
-        4e:77:8f:f2:e0:ab:ed:39:76:69:e4:ee:bb:1a:eb:cf:50:a5:
-        3b:23:42:74:1e:e0:00:56:ff:8f:7e:7d:97:04:9e:fc:25:a7:
-        2a:ee:e7:6c:44:21:68:d3:39:79:e2:ac:02:38:a0:ad:dc:c1:
-        32:f0
+         37:1a:ca:2a:23:42:8d:36:41:51:8d:64:97:c6:51:e2:aa:c9:
+         b8:68:c0:20:40:23:1f:1a:db:9b:4b:65:39:f1:60:48:6f:e1:
+         c5:30:57:f3:02:35:f2:07:37:ea:a4:42:45:1c:6a:57:71:8b:
+         71:1a:ee:16:1e:03:e7:8a:c4:92:90:2f:82:ee:b2:cd:bd:39:
+         df:3d:e7:d0:1b:bd:82:58:e1:a6:29:bd:4d:b3:40:a4:35:c1:
+         e0:13:6f:ab:0c:1e:f2:7c:b2:8d:03:5c:fa:1a:e7:f0:76:1a:
+         84:a0:ec:c5:eb:c4:ac:7e:cf:35:11:36:5e:04:06:5c:4c:e2:
+         76:22
 -----BEGIN CERTIFICATE-----
-MIIClzCCAgCgAwIBAgIBLDANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UECxMDdGE4MRIwEAYDVQQDEwlsb2NhbGhvc3QxEjAQBgkq
-hkiG9w0BCQEWA3RhODAeFw0xMTA0MTEyMjM3NTRaFw0xNDAxMDUyMjM3NTRaMIGE
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UECxQHY3MxX3RhODESMBAGA1UE
-AxMJbG9jYWxob3N0MRYwFAYJKoZIhvcNAQkBFgdjczFfdGE4MIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDnp90up4nDzNqii707urxmas1lAGBwVYzwt4nD/JdC
-XMss9QocVcd5t7koMPSapOAx5VLf9ECFSY78CKUFRO23bgALpy2hLEeVGNxe0MQk
-PUyny3aR+wCJKj9/q/Fet8skbkIZTdinEoPBjLb7AvCcH1HDxUntp24JuxEvpT8A
-1QIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
-9w0BAQsFAAOBgQCzyOoeIyOpd0auwxzPQ4GAqqb7Jeyi+tXD6R7HeOHMpNc/CC9f
-WAW41AvHhy6T9sXLFzHj+oijDY1LOSuW3U0hkTfp5/WHEg9Od4/y4KvtOXZp5O67
-GuvPUKU7I0J0HuAAVv+Pfn2XBJ78Jacq7udsRCFo0zl54qwCOKCt3MEy8A==
+MIICmTCCAgKgAwIBAgIBLDANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAsMA3RhODESMBAGA1UEAwwJbG9jYWxob3N0MRIwEAYJ
+KoZIhvcNAQkBFgN0YTgwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjCB
+hTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1Nh
+bnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQLDAdjczFfdGE4MRIwEAYD
+VQQDDAlsb2NhbGhvc3QxFjAUBgkqhkiG9w0BCQEWB2NzMV90YTgwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBAOt23WcXhi2CwUmNHv00EnRwW72RUGRPU0hlhc8N
+potUyqRPWPxeuOnOYXyOBAwG6Epmn3fTXO0usNfGYRTUM4xecRoaCsnlkCN9nMX4
+QuETQGviIKsEwYC0GwPebbWZAzQostvKMgCsuDZN2jwzi4mqS3jFm2SqdH1l/4YR
+rc0VAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+SIb3DQEBCwUAA4GBADcayiojQo02QVGNZJfGUeKqybhowCBAIx8a25tLZTnxYEhv
+4cUwV/MCNfIHN+qkQkUcaldxi3Ea7hYeA+eKxJKQL4Luss29Od8959AbvYJY4aYp
+vU2zQKQ1weATb6sMHvJ8so0DXPoa5/B2GoSg7MXrxKx+zzURNl4EBlxM4nYi
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta9_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs1_ta9_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 45 (0x2d)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=cs1_ta9, CN=localhost/emailAddress=cs1_ta9
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=cs1_ta9, CN=localhost/emailAddress=cs1_ta9
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a6:51:e1:02:04:84:16:9a:a9:17:63:51:f6:f2:
-                    b9:d4:54:53:8d:71:8b:2f:98:f8:0e:a8:fb:41:f4:
-                    7a:d3:74:9d:35:5b:58:e3:c8:46:13:86:67:8f:aa:
-                    9d:b0:c0:9e:0d:17:4a:f4:48:76:43:3e:ce:34:b6:
-                    d3:90:6d:77:42:ad:dc:50:aa:17:82:a4:0e:17:67:
-                    d7:b7:a2:11:ce:23:90:b2:24:1c:13:4d:f1:fb:33:
-                    e6:f1:e7:54:09:ae:ad:cb:27:e8:ae:0b:fc:d9:14:
-                    cd:c5:93:db:95:1f:13:cb:16:c0:a7:46:a3:66:53:
-                    8e:24:df:26:85:f1:72:27:03
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a0:f2:5b:a5:e0:85:79:27:38:34:98:e1:0c:74:
+                    ac:c0:52:24:c6:8c:bb:1b:a3:12:cc:ef:97:2e:e7:
+                    ed:89:07:47:14:e6:04:70:03:ce:72:79:3a:f6:e4:
+                    9d:31:97:0c:7b:de:9f:99:a8:d4:7d:ea:69:03:12:
+                    87:89:20:d9:62:0d:bc:c9:29:cb:8a:5b:61:25:86:
+                    a2:a5:6e:50:6d:8d:56:ac:cc:05:41:4f:c9:ba:94:
+                    a4:34:0d:95:d9:82:98:bc:b0:6c:4e:39:ea:09:21:
+                    7a:ba:69:7f:fb:94:f5:37:93:b5:a8:c1:bc:1b:8c:
+                    7e:00:33:a8:b0:90:0f:9c:df
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        cb:2d:8d:51:65:6e:b3:e4:70:dd:e3:ac:40:35:41:f2:b2:69:
-        35:50:32:f1:04:6d:94:f6:ff:32:5a:77:22:d3:6f:8f:57:87:
-        7f:5a:ac:99:a4:8c:2a:e9:b5:1c:5b:58:ea:f7:63:b6:e3:8a:
-        c7:b2:9e:e3:37:e7:8c:c5:01:0a:0c:a6:48:31:6e:0a:d4:6d:
-        ec:da:77:07:a9:3c:ea:87:b7:5a:58:39:a7:37:00:ee:5b:8c:
-        a6:53:d9:b9:59:85:48:51:ea:49:cd:5b:ec:a6:ea:e7:07:dc:
-        5e:7e:79:db:e7:d6:be:94:ec:91:64:3c:ae:16:8d:a5:80:29:
-        48:39
+         5e:f9:9a:f9:3a:51:06:d4:4c:3b:1b:97:af:6f:28:7d:ce:f2:
+         78:9c:bf:d0:7c:1d:00:20:dd:84:58:e5:29:ba:51:a8:7c:30:
+         54:ff:d0:f3:25:2c:5d:19:4d:17:ca:e7:3e:f3:09:af:cf:82:
+         3d:d9:5c:c0:fc:e6:31:19:52:70:4f:17:12:0f:e1:c8:e0:22:
+         d1:10:db:a5:0e:75:3c:fb:33:ee:e9:ab:95:44:93:96:9e:7e:
+         c3:fa:14:2d:a3:ee:a0:35:af:b4:d9:63:c5:c2:77:18:23:01:
+         d9:be:88:0c:23:b1:19:dc:55:4f:7d:a9:cf:62:41:c5:19:02:
+         43:b5
 -----BEGIN CERTIFICATE-----
-MIIClzCCAgCgAwIBAgIBLTANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEMMAoGA1UECxMDdGE5MRIwEAYDVQQDEwlsb2NhbGhvc3QxEjAQBgkq
-hkiG9w0BCQEWA3RhOTAeFw0xMTA0MTEyMjM3NTVaFw0xNDAxMDUyMjM3NTVaMIGE
-MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVu
-bG8gUGFyazENMAsGA1UEChMEcGtnNTEQMA4GA1UECxQHY3MxX3RhOTESMBAGA1UE
-AxMJbG9jYWxob3N0MRYwFAYJKoZIhvcNAQkBFgdjczFfdGE5MIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQCmUeECBIQWmqkXY1H28rnUVFONcYsvmPgOqPtB9HrT
-dJ01W1jjyEYThmePqp2wwJ4NF0r0SHZDPs40ttOQbXdCrdxQqheCpA4XZ9e3ohHO
-I5CyJBwTTfH7M+bx51QJrq3LJ+iuC/zZFM3Fk9uVHxPLFsCnRqNmU44k3yaF8XIn
-AwIDAQABoyAwHjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
-9w0BAQsFAAOBgQDLLY1RZW6z5HDd46xANUHysmk1UDLxBG2U9v8yWnci02+PV4d/
-WqyZpIwq6bUcW1jq92O244rHsp7jN+eMxQEKDKZIMW4K1G3s2ncHqTzqh7daWDmn
-NwDuW4ymU9m5WYVIUepJzVvspurnB9xefnnb59a+lOyRZDyuFo2lgClIOQ==
+MIICmTCCAgKgAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxDDAKBgNVBAsMA3RhOTESMBAGA1UEAwwJbG9jYWxob3N0MRIwEAYJ
+KoZIhvcNAQkBFgN0YTkwHhcNMTMxMjEzMDAxMzM5WhcNMTYwOTA4MDAxMzM5WjCB
+hTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDASBgNVBAcMC1Nh
+bnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MRAwDgYDVQQLDAdjczFfdGE5MRIwEAYD
+VQQDDAlsb2NhbGhvc3QxFjAUBgkqhkiG9w0BCQEWB2NzMV90YTkwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBAKDyW6XghXknODSY4Qx0rMBSJMaMuxujEszvly7n
+7YkHRxTmBHADznJ5OvbknTGXDHven5mo1H3qaQMSh4kg2WINvMkpy4pbYSWGoqVu
+UG2NVqzMBUFPybqUpDQNldmCmLywbE456gkherppf/uU9TeTtajBvBuMfgAzqLCQ
+D5zfAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+SIb3DQEBCwUAA4GBAF75mvk6UQbUTDsbl69vKH3O8nicv9B8HQAg3YRY5Sm6Uah8
+MFT/0PMlLF0ZTRfK5z7zCa/Pgj3ZXMD85jEZUnBPFxIP4cjgItEQ26UOdTz7M+7p
+q5VEk5aefsP6FC2j7qA1r7TZY8XCdxgjAdm+iAwjsRncVU99qc9iQcUZAkO1
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 18 (0x12)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:44 2011 GMT
-            Not After : Jan  5 22:37:44 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:b6:f8:33:c7:cd:e9:6d:d9:aa:77:60:23:86:
-                    71:56:dc:22:a3:cf:36:d7:b3:59:f7:5d:ae:82:ed:
-                    3f:17:12:62:09:3e:3e:ec:fa:a6:92:df:05:ce:9a:
-                    a2:6d:93:b9:7e:16:f9:c5:b3:83:1d:9a:96:6a:1b:
-                    35:df:f6:b8:82:55:45:5b:43:0a:71:66:4f:bc:df:
-                    00:13:25:22:df:79:76:b6:98:42:25:b2:a1:5c:47:
-                    72:7b:96:9f:65:3f:37:02:97:29:16:9c:75:22:7b:
-                    5d:31:53:80:0a:eb:cc:73:13:da:8e:61:f5:ca:f7:
-                    af:fc:53:cd:b9:11:95:3c:3f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:98:97:30:92:90:4d:45:5a:0c:e2:6f:fb:25:9e:
+                    72:7f:56:64:f5:64:f5:b2:5b:85:27:b7:ad:fa:24:
+                    d7:54:00:1d:5c:4d:c2:92:81:76:f1:37:49:14:b7:
+                    9d:8c:fb:96:69:2d:11:32:6a:19:eb:eb:eb:27:a3:
+                    be:1f:00:29:c8:ba:d6:ca:97:df:e0:83:68:51:9c:
+                    81:f5:63:e0:69:39:1a:fe:5e:af:c3:af:b6:23:b8:
+                    aa:b4:65:c7:f4:7e:63:db:ff:1b:7e:ce:ed:60:7d:
+                    be:2f:fd:05:ee:d0:cd:72:7e:91:93:69:82:29:8f:
+                    a8:a8:53:b1:d7:ea:83:df:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -29,27 +29,27 @@
                 <EMPTY>
 
     Signature Algorithm: sha256WithRSAEncryption
-        2e:40:56:59:03:e3:5b:62:73:0c:57:dc:12:d8:4b:97:00:8b:
-        66:c8:a6:10:29:78:3b:7a:52:fb:f9:63:94:44:b2:1b:eb:3f:
-        13:e9:40:9b:24:01:38:f6:b2:f7:99:1e:d9:17:57:e3:df:ff:
-        01:8b:00:02:7e:a0:f5:e5:3a:f0:72:4c:72:6f:76:07:26:ac:
-        97:6d:c2:12:e1:64:99:29:ff:25:fd:21:c7:43:41:87:c5:bb:
-        ce:06:c4:b1:f9:64:ad:e8:d8:90:ac:89:26:8a:1e:a3:d4:45:
-        2d:8a:27:a4:88:8c:f3:97:5f:f7:82:d7:c4:76:98:f5:20:af:
-        5e:23
+         53:10:01:62:32:bd:ff:7d:30:a5:09:5f:77:44:af:0d:81:d4:
+         4b:c8:f6:fe:ba:38:65:9f:b6:55:77:7a:36:86:42:64:1a:89:
+         66:4f:1d:f5:0a:65:1e:06:2c:07:46:b3:57:ba:98:1d:1c:46:
+         52:08:65:32:70:9d:98:3e:e9:6b:be:da:7e:91:54:60:52:ad:
+         0e:90:3f:ee:7c:2a:03:84:8f:4f:e4:1b:d3:4f:a8:d3:c2:29:
+         74:cc:ac:87:81:7e:38:07:cd:d8:5f:20:00:b6:e4:ea:c1:e5:
+         06:77:19:da:9c:3b:43:7f:91:ab:8c:f1:b7:03:09:09:0a:85:
+         de:91
 -----BEGIN CERTIFICATE-----
-MIICfDCCAeWgAwIBAgIBEjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDRaFw0xNDAxMDUyMjM3NDRaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczJfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3MyX2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMW2+DPHzelt
-2ap3YCOGcVbcIqPPNtezWfddroLtPxcSYgk+Puz6ppLfBc6aom2TuX4W+cWzgx2a
-lmobNd/2uIJVRVtDCnFmT7zfABMlIt95draYQiWyoVxHcnuWn2U/NwKXKRacdSJ7
-XTFTgArrzHMT2o5h9cr3r/xTzbkRlTw/AgMBAAGjHjAcMAwGA1UdEwEB/wQCMAAw
-DAYDVR0SAQH/BAIwADANBgkqhkiG9w0BAQsFAAOBgQAuQFZZA+NbYnMMV9wS2EuX
-AItmyKYQKXg7elL7+WOURLIb6z8T6UCbJAE49rL3mR7ZF1fj3/8BiwACfqD15Trw
-ckxyb3YHJqyXbcIS4WSZKf8l/SHHQ0GHxbvOBsSx+WSt6NiQrIkmih6j1EUtiiek
-iIzzl1/3gtfEdpj1IK9eIw==
+MIICfjCCAeegAwIBAgIBEjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMl9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczJfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmJcwkpBN
+RVoM4m/7JZ5yf1Zk9WT1sluFJ7et+iTXVAAdXE3CkoF28TdJFLedjPuWaS0RMmoZ
+6+vrJ6O+HwApyLrWypff4INoUZyB9WPgaTka/l6vw6+2I7iqtGXH9H5j2/8bfs7t
+YH2+L/0F7tDNcn6Rk2mCKY+oqFOx1+qD34kCAwEAAaMeMBwwDAYDVR0TAQH/BAIw
+ADAMBgNVHRIBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4GBAFMQAWIyvf99MKUJX3dE
+rw2B1EvI9v66OGWftlV3ejaGQmQaiWZPHfUKZR4GLAdGs1e6mB0cRlIIZTJwnZg+
+6Wu+2n6RVGBSrQ6QP+58KgOEj0/kG9NPqNPCKXTMrIeBfjgHzdhfIAC25OrB5QZ3
+GdqcO0N/kauM8bcDCQkKhd6R
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch1_ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch1_ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,66 +2,68 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 36 (0x24)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Validity
-            Not Before: Apr 11 22:37:50 2011 GMT
-            Not After : Jan  5 22:37:50 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs2_ch1_ta4/emailAddress=cs2_ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs2_ch1_ta4/emailAddress=cs2_ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:bf:ac:9d:17:06:fb:0f:06:2b:8f:e1:70:02:28:
-                    81:03:f5:1f:f4:4a:41:87:c5:4c:e1:4c:5b:9d:89:
-                    2f:a2:d4:5e:1a:4b:b6:93:c7:10:41:d9:e9:e0:d5:
-                    43:64:9f:39:1d:c8:2a:93:52:23:08:92:78:a3:5f:
-                    3b:98:50:e8:72:3a:73:12:4f:99:4b:4d:0e:e8:5d:
-                    92:f3:0b:5d:78:f6:5b:4b:c8:36:23:e3:ca:ab:8a:
-                    aa:52:33:d1:1e:61:d1:3e:91:5d:ee:38:bc:c4:0e:
-                    ee:54:f9:aa:00:a3:51:55:95:7a:c0:7b:0e:b2:d8:
-                    55:9d:f8:ae:1f:32:a7:87:eb
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ad:94:3a:b1:fd:3e:be:1e:33:73:ab:48:e2:ea:
+                    99:d8:1d:4d:c4:80:e6:fe:b6:6e:86:45:c4:86:81:
+                    df:c5:63:3d:b7:9b:50:75:bc:09:9d:cd:95:6c:6c:
+                    47:88:6d:0c:0c:24:7a:b9:50:f0:39:12:4b:6b:0c:
+                    2e:a3:7d:80:27:61:53:8b:63:c0:2e:a2:9e:b1:4d:
+                    0b:5a:a4:fd:6f:32:20:1d:2c:ea:18:c4:e5:ed:62:
+                    4d:ec:a7:ab:07:6e:8b:3f:c2:29:c7:30:90:7f:6a:
+                    2a:cc:08:9b:82:4b:24:a1:79:a2:06:a6:5c:7a:60:
+                    83:c5:ba:68:2c:ff:01:1f:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                4E:1B:1F:2F:80:BA:AC:13:47:60:30:A5:43:F6:01:7D:54:3C:9B:24
+                9F:BB:AE:D3:46:0F:B1:D1:1B:E5:D0:7F:06:5D:5B:3D:15:22:E3:C5
             X509v3 Authority Key Identifier: 
-                keyid:2A:94:C1:FF:E0:11:A0:91:F1:71:46:35:9A:37:3C:BC:C4:21:4A:8F
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
+                keyid:29:7A:F9:B4:E3:1B:8F:19:63:52:FA:19:A0:AB:DA:37:E4:70:A9:71
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
                 serial:22
 
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/example_file
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/example_file
 
     Signature Algorithm: sha256WithRSAEncryption
-        6d:40:ad:c1:79:65:fc:25:80:f7:52:d5:6f:16:3c:b2:77:f8:
-        35:e2:b5:d4:3c:49:f1:1c:02:d7:5a:61:aa:c2:c7:bd:53:4a:
-        96:58:8e:3e:14:d3:38:89:43:70:f0:5c:73:e1:c0:36:5e:10:
-        73:f4:93:c3:de:0c:61:49:be:2d:d0:1e:37:b4:03:49:a9:a4:
-        37:42:77:6a:97:15:45:2f:7d:b2:dd:9d:b2:98:56:0a:70:14:
-        83:ac:6f:e1:1e:97:31:9e:0a:30:ca:7d:5f:87:30:41:05:63:
-        4b:38:cb:f0:c0:cd:4d:a6:d2:11:34:30:ba:f4:8a:74:73:70:
-        ee:45
+         19:54:e0:5b:f7:80:a2:90:05:af:21:fe:4c:1f:f1:4b:c1:2f:
+         36:f3:e4:d1:93:16:67:48:89:62:69:37:92:71:61:aa:f1:4a:
+         2d:fa:ca:cd:69:e5:50:53:45:0a:91:2c:44:f8:44:22:02:82:
+         cd:6d:4b:15:85:cf:8d:ea:f8:98:1b:ff:7c:54:10:48:07:81:
+         a4:04:37:36:c1:95:72:e6:a6:e7:db:59:2f:1c:c9:b4:46:da:
+         98:53:e6:2e:24:9a:f3:9d:74:62:d5:28:96:66:a1:a2:47:21:
+         0e:5d:8e:be:89:ac:d2:4f:89:eb:fd:db:2d:e0:92:d7:a8:99:
+         c7:cf
 -----BEGIN CERTIFICATE-----
-MIIDYjCCAsugAwIBAgIBJDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NDAeFw0xMTA0MTEyMjM3NTBaFw0xNDAxMDUyMjM3NTBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczJfY2gxX3RhNDEaMBgGCSqGSIb3DQEJARYL
-Y3MyX2NoMV90YTQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL+snRcG+w8G
-K4/hcAIogQP1H/RKQYfFTOFMW52JL6LUXhpLtpPHEEHZ6eDVQ2SfOR3IKpNSIwiS
-eKNfO5hQ6HI6cxJPmUtNDuhdkvMLXXj2W0vINiPjyquKqlIz0R5h0T6RXe44vMQO
-7lT5qgCjUVWVesB7DrLYVZ34rh8yp4frAgMBAAGjggECMIH/MB0GA1UdDgQWBBRO
-Gx8vgLqsE0dgMKVD9gF9VDybJDCBkgYDVR0jBIGKMIGHgBQqlMH/4BGgkfFxRjWa
-Nzy8xCFKj6FspGowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWEx
-EzARBgNVBAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAMTA3Rh
-NDESMBAGCSqGSIb3DQEJARYDdGE0ggEiMAwGA1UdEwEB/wQCMAAwOwYDVR0fBDQw
-MjAwoC6gLIYqaHR0cDovL2xvY2FsaG9zdDoxMjAwMS9maWxlLzAvZXhhbXBsZV9m
-aWxlMA0GCSqGSIb3DQEBCwUAA4GBAG1ArcF5ZfwlgPdS1W8WPLJ3+DXitdQ8SfEc
-AtdaYarCx71TSpZYjj4U0ziJQ3DwXHPhwDZeEHP0k8PeDGFJvi3QHje0A0mppDdC
-d2qXFUUvfbLdnbKYVgpwFIOsb+EelzGeCjDKfV+HMEEFY0s4y/DAzU2m0hE0MLr0
-inRzcO5F
+MIIDZjCCAs+gAwIBAgIBJDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMl9jaDFfdGE0MRowGAYJKoZIhvcNAQkB
+FgtjczJfY2gxX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArZQ6sf0+
+vh4zc6tI4uqZ2B1NxIDm/rZuhkXEhoHfxWM9t5tQdbwJnc2VbGxHiG0MDCR6uVDw
+ORJLawwuo32AJ2FTi2PALqKesU0LWqT9bzIgHSzqGMTl7WJN7KerB26LP8IpxzCQ
+f2oqzAibgkskoXmiBqZcemCDxbpoLP8BH9ECAwEAAaOCAQQwggEAMB0GA1UdDgQW
+BBSfu67TRg+x0Rvl0H8GXVs9FSLjxTCBkwYDVR0jBIGLMIGIgBQpevm04xuPGWNS
++hmgq9o35HCpcaFtpGswaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3Ju
+aWExFDASBgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQwwCgYDVQQD
+DAN0YTQxEjAQBgkqhkiG9w0BCQEWA3RhNIIBIjAMBgNVHRMBAf8EAjAAMDsGA1Ud
+HwQ0MDIwMKAuoCyGKmh0dHA6Ly9sb2NhbGhvc3Q6MTIwMDEvZmlsZS8wL2V4YW1w
+bGVfZmlsZTANBgkqhkiG9w0BAQsFAAOBgQAZVOBb94CikAWvIf5MH/FLwS828+TR
+kxZnSIliaTeScWGq8Uot+srNaeVQU0UKkSxE+EQiAoLNbUsVhc+N6viYG/98VBBI
+B4GkBDc2wZVy5qbn21kvHMm0RtqYU+YuJJrznXRi1SiWZqGiRyEOXY6+iazST4nr
+/dst4JLXqJnHzw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch5_ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs2_ch5_ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,55 +2,57 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 7 (0x7)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch5_ta1/emailAddress=ch5_ta1
         Validity
-            Not Before: Apr 11 22:37:40 2011 GMT
-            Not After : Jan  5 22:37:40 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs2_ch5_ta1/emailAddress=cs2_ch5_ta1
+            Not Before: Dec 13 00:13:34 2013 GMT
+            Not After : Sep  8 00:13:34 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs2_ch5_ta1/emailAddress=cs2_ch5_ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cd:c9:ab:ee:a1:89:01:60:89:00:7c:93:1f:fe:
-                    4c:54:75:58:52:81:b0:cb:be:4c:a7:a7:23:18:86:
-                    0e:9f:e1:41:99:dd:ff:e7:f3:66:1d:41:dd:aa:9e:
-                    f7:23:2d:c4:0e:24:16:e2:4d:54:8b:38:72:55:b4:
-                    11:26:f9:fc:04:fe:de:9b:83:02:01:98:36:8e:41:
-                    42:f2:0b:a7:07:00:f9:0e:66:96:a0:e4:f3:32:06:
-                    26:9d:41:fb:91:bf:7e:a8:c0:c7:62:e1:c9:ce:37:
-                    de:07:b5:df:55:87:9a:a5:3b:d4:c5:b6:24:4b:2a:
-                    e4:88:50:85:e9:d9:13:12:47
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:51:a3:86:48:a6:81:11:01:ba:be:40:6d:dc:
+                    f7:b6:0a:f8:9a:11:71:ea:09:42:3a:ed:ee:4e:0f:
+                    87:10:99:6f:c8:ef:41:bd:f6:d0:17:a7:db:7b:fe:
+                    51:dd:de:3a:f2:3b:d7:de:7d:96:71:4e:7f:4e:d0:
+                    cf:dd:3b:d8:6b:ce:ca:83:3a:7d:6e:65:cd:b5:fb:
+                    4b:32:9a:e6:20:f8:ed:8e:4c:99:f4:02:de:c5:d4:
+                    3b:6e:35:a8:3c:b4:9f:3f:5e:3b:85:33:4a:4d:b3:
+                    35:a3:d0:76:78:74:d2:72:99:9e:c1:69:1f:d1:8f:
+                    2a:11:eb:35:32:7b:ba:8f:99
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:http://localhost:12001/file/0/ch5_ta1_crl.pem
+
+                Full Name:
+                  URI:http://localhost:12001/file/0/ch5_ta1_crl.pem
 
     Signature Algorithm: sha256WithRSAEncryption
-        58:ba:80:0f:56:d9:4e:90:97:38:a2:f5:b7:3d:98:ff:32:ec:
-        63:01:79:25:5a:5b:d4:ac:bc:aa:e1:2d:c8:ea:34:32:b0:aa:
-        ce:9f:de:e7:f2:f7:35:f8:e5:71:97:27:d1:66:80:e8:22:c7:
-        bc:23:31:2b:98:60:b4:76:7b:62:38:ff:14:57:24:64:37:6b:
-        9d:22:2a:f9:16:90:91:01:d7:f3:91:24:29:c3:c6:53:7a:0b:
-        e9:af:2b:3b:5e:77:61:83:48:e8:e2:f2:a6:44:cc:5e:90:36:
-        f2:8e:dd:59:b6:c8:21:92:17:30:87:66:c9:08:2d:b9:5b:3a:
-        f2:4e
+         2c:76:2d:19:cd:d6:f0:88:16:6c:99:6c:19:1b:5e:d3:ca:b1:
+         6d:3c:f1:5b:2c:3b:52:cd:7f:f5:1b:4f:e0:49:9e:48:5c:5e:
+         16:55:57:a3:0d:c6:eb:f5:a7:13:8d:57:c4:ff:df:3d:66:00:
+         a3:b9:18:c3:19:5c:ba:1c:ae:83:bd:90:a6:c8:6e:5a:c6:b5:
+         51:b5:33:69:59:7a:5a:00:24:61:02:41:c5:c2:ff:cc:12:a1:
+         d7:d4:d5:29:b9:22:94:e0:5c:5c:29:ec:82:ba:ff:1a:40:50:
+         88:58:98:a8:b3:2b:86:3c:a2:21:8b:b4:b2:fc:3a:b0:c7:f1:
+         03:e8
 -----BEGIN CERTIFICATE-----
-MIICrjCCAhegAwIBAgIBBzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2g1X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g1X3Rh
-MTAeFw0xMTA0MTEyMjM3NDBaFw0xNDAxMDUyMjM3NDBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczJfY2g1X3RhMTEaMBgGCSqGSIb3DQEJARYL
-Y3MyX2NoNV90YTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM3Jq+6hiQFg
-iQB8kx/+TFR1WFKBsMu+TKenIxiGDp/hQZnd/+fzZh1B3aqe9yMtxA4kFuJNVIs4
-clW0ESb5/AT+3puDAgGYNo5BQvILpwcA+Q5mlqDk8zIGJp1B+5G/fqjAx2Lhyc43
-3ge131WHmqU71MW2JEsq5IhQhenZExJHAgMBAAGjUDBOMAwGA1UdEwEB/wQCMAAw
-PgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2xvY2FsaG9zdDoxMjAwMS9maWxlLzAv
-Y2g1X3RhMV9jcmwucGVtMA0GCSqGSIb3DQEBCwUAA4GBAFi6gA9W2U6Qlzii9bc9
-mP8y7GMBeSVaW9SsvKrhLcjqNDKwqs6f3ufy9zX45XGXJ9FmgOgix7wjMSuYYLR2
-e2I4/xRXJGQ3a50iKvkWkJEB1/ORJCnDxlN6C+mvKzted2GDSOji8qZEzF6QNvKO
-3Vm2yCGSFzCHZskILblbOvJO
+MIICsDCCAhmgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2NoNV90
+YTEwHhcNMTMxMjEzMDAxMzM0WhcNMTYwOTA4MDAxMzM0WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzMl9jaDVfdGExMRowGAYJKoZIhvcNAQkB
+FgtjczJfY2g1X3RhMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzFGjhkim
+gREBur5Abdz3tgr4mhFx6glCOu3uTg+HEJlvyO9BvfbQF6fbe/5R3d468jvX3n2W
+cU5/TtDP3TvYa87Kgzp9bmXNtftLMprmIPjtjkyZ9ALexdQ7bjWoPLSfP147hTNK
+TbM1o9B2eHTScpmewWkf0Y8qEes1Mnu6j5kCAwEAAaNQME4wDAYDVR0TAQH/BAIw
+ADA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vbG9jYWxob3N0OjEyMDAxL2ZpbGUv
+MC9jaDVfdGExX2NybC5wZW0wDQYJKoZIhvcNAQELBQADgYEALHYtGc3W8IgWbJls
+GRte08qxbTzxWyw7Us1/9RtP4EmeSFxeFlVXow3G6/WnE41XxP/fPWYAo7kYwxlc
+uhyug72QpshuWsa1UbUzaVl6WgAkYQJBxcL/zBKh19TVKbkilOBcXCnsgrr/GkBQ
+iFiYqLMrhjyiIYu0svw6sMfxA+g=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs3_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs3_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 19 (0x13)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
             Not Before: Jan  1 01:01:01 2009 GMT
             Not After : Jan  2 01:01:01 2009 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs3_ch1_ta3/emailAddress=cs3_ch1_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs3_ch1_ta3/emailAddress=cs3_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b7:60:7b:08:47:0a:05:c1:6c:80:9a:84:e2:de:
-                    c6:11:65:df:a6:c7:30:bb:37:e9:ae:9e:37:9d:f9:
-                    f3:3a:18:38:ee:be:e0:fb:6b:84:fb:93:2c:5b:1e:
-                    9f:7a:78:da:26:28:c7:fb:6e:9f:2e:8f:f9:5a:1c:
-                    e8:0b:e0:f1:5c:45:f6:a0:0e:58:01:4e:86:20:bd:
-                    ff:7d:0c:41:4b:b2:50:5c:78:89:3c:4a:83:cf:59:
-                    9f:e4:17:27:de:ea:aa:ff:c8:19:f5:b7:c3:67:bd:
-                    5e:78:79:8e:46:33:1a:ef:36:40:f8:f2:7e:bc:ca:
-                    54:85:57:56:e5:e7:b8:52:4d
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d3:01:be:68:e6:07:6b:d4:f1:10:9e:99:93:cb:
+                    79:4d:15:d1:39:fb:b2:de:74:10:57:84:c3:ab:3e:
+                    25:cc:f4:7e:66:1e:f2:fa:f2:32:b4:c5:6c:80:e7:
+                    31:80:1a:96:79:96:83:b5:44:58:f1:2a:9b:3b:c0:
+                    0d:42:00:27:49:bf:6e:0a:d6:8b:b4:20:5c:a7:3d:
+                    11:74:25:95:08:45:bb:c5:ca:07:42:a3:e8:19:36:
+                    e1:62:42:53:bc:2f:1f:a8:10:31:ee:40:7d:ec:b5:
+                    54:04:c4:63:e8:43:12:09:7d:1e:99:60:f6:db:ec:
+                    65:d3:13:bb:36:be:e2:d8:ed
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        27:40:ae:0c:a2:ad:5d:28:30:53:fe:e4:35:31:02:e4:1a:ef:
-        6d:ec:95:1e:3e:a0:15:15:32:e8:88:46:68:45:a7:60:9f:93:
-        79:ab:ef:78:f6:2c:23:ef:a1:f4:71:b3:9a:f1:c6:4d:ac:34:
-        a1:24:d8:4e:38:36:3c:bb:90:30:9b:e4:b3:8e:55:e0:06:c4:
-        5a:c4:f1:23:90:fd:b3:ef:40:dd:4d:4c:2b:55:50:11:64:6b:
-        64:3f:e3:67:3c:6c:c1:da:55:6c:7d:8d:87:18:40:6a:cb:13:
-        17:3b:75:35:09:71:0b:e9:c4:7e:b1:a1:db:80:78:93:b3:5b:
-        d0:4e
+         5f:64:85:36:62:d2:01:78:45:6d:63:d5:c8:d8:01:cb:39:f7:
+         0f:75:61:87:9c:d0:2b:9d:3f:0f:56:4d:8c:7d:06:69:eb:60:
+         3a:ca:ed:91:39:ba:e8:8b:a9:42:58:33:32:e3:08:ac:a9:ca:
+         76:ef:37:39:74:46:2d:ea:54:e0:0d:e5:62:18:48:5e:e6:8b:
+         6c:6c:25:0c:8d:61:98:f6:7a:ae:b6:73:cb:8a:2d:27:a5:c7:
+         cf:5e:36:a5:2f:10:74:41:b0:93:6d:21:e2:52:c2:d5:88:6e:
+         ff:91:04:eb:92:8b:62:3a:81:a8:88:6c:10:67:4e:a2:6a:2c:
+         17:ec
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBEzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0wOTAxMDEwMTAxMDFaFw0wOTAxMDIwMTAxMDFaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczNfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3MzX2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALdgewhHCgXB
-bICahOLexhFl36bHMLs36a6eN5358zoYOO6+4PtrhPuTLFsen3p42iYox/tuny6P
-+Voc6Avg8VxF9qAOWAFOhiC9/30MQUuyUFx4iTxKg89Zn+QXJ97qqv/IGfW3w2e9
-Xnh5jkYzGu82QPjyfrzKVIVXVuXnuFJNAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBACdArgyirV0oMFP+5DUx
-AuQa723slR4+oBUVMuiIRmhFp2Cfk3mr73j2LCPvofRxs5rxxk2sNKEk2E44Njy7
-kDCb5LOOVeAGxFrE8SOQ/bPvQN1NTCtVUBFka2Q/42c8bMHaVWx9jYcYQGrLExc7
-dTUJcQvpxH6xoduAeJOzW9BO
+MIICgDCCAemgAwIBAgIBEzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMDkwMTAxMDEwMTAxWhcNMDkwMTAyMDEwMTAxWjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzM19jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczNfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0wG+aOYH
+a9TxEJ6Zk8t5TRXROfuy3nQQV4TDqz4lzPR+Zh7y+vIytMVsgOcxgBqWeZaDtURY
+8SqbO8ANQgAnSb9uCtaLtCBcpz0RdCWVCEW7xcoHQqPoGTbhYkJTvC8fqBAx7kB9
+7LVUBMRj6EMSCX0emWD22+xl0xO7Nr7i2O0CAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAX2SFNmLSAXhFbWPV
+yNgByzn3D3Vhh5zQK50/D1ZNjH0GaetgOsrtkTm66IupQlgzMuMIrKnKdu83OXRG
+LepU4A3lYhhIXuaLbGwlDI1hmPZ6rrZzy4otJ6XHz142pS8QdEGwk20h4lLC1Yhu
+/5EE65KLYjqBqIhsEGdOomosF+w=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs3_ch1_ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs3_ch1_ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,65 +2,67 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 37 (0x25)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta4/emailAddress=ch1_ta4
         Validity
-            Not Before: Apr 11 22:37:50 2011 GMT
-            Not After : Jan  5 22:37:50 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs3_ch1_ta4/emailAddress=cs3_ch1_ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs3_ch1_ta4/emailAddress=cs3_ch1_ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c3:0c:75:ca:f7:a7:94:08:4a:72:f4:27:88:98:
-                    9f:d7:cc:7b:41:e4:54:86:11:d1:c2:d8:a1:ce:68:
-                    b0:8f:6a:6e:78:bf:f9:08:c9:a3:44:99:27:24:da:
-                    c2:76:e8:59:76:be:b2:04:46:1c:f4:1a:77:76:73:
-                    cb:dd:53:b6:9f:c7:5e:04:0a:35:43:e1:5d:5d:62:
-                    9b:73:13:06:d3:96:8f:64:4e:34:0d:bf:31:33:3c:
-                    05:24:26:d7:71:a6:83:65:1f:cf:01:25:c1:87:49:
-                    35:b9:12:a1:9c:af:4c:4f:da:26:59:e4:13:ee:c1:
-                    72:52:1a:f5:49:84:92:18:3b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:d6:0b:65:25:4a:ab:c6:97:60:f0:0a:13:02:12:
+                    58:0a:26:26:7f:ba:10:82:a4:68:2e:59:dc:9e:63:
+                    71:4c:03:85:55:7b:c0:20:c8:3b:f3:12:24:8c:e5:
+                    4d:d4:41:10:5f:5d:be:b6:76:77:41:e5:57:48:c7:
+                    01:42:be:18:a0:f7:39:fa:3f:30:07:e9:6f:05:16:
+                    00:43:98:5e:fa:62:46:36:79:b1:6a:84:22:15:36:
+                    16:2b:23:e5:6f:2f:c6:ca:ae:dc:72:95:7a:48:9b:
+                    9b:ae:72:bd:f0:ff:d2:0b:fe:82:ec:53:38:23:cd:
+                    6d:65:28:ba:53:5c:74:6f:5f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                90:5E:20:89:14:A6:9B:2F:BD:21:FA:EC:07:E1:37:24:59:70:10:C1
+                83:0A:1B:8B:11:B9:64:BB:0F:67:12:12:45:12:74:32:7C:36:15:F9
             X509v3 Authority Key Identifier: 
-                keyid:2A:94:C1:FF:E0:11:A0:91:F1:71:46:35:9A:37:3C:BC:C4:21:4A:8F
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
+                keyid:29:7A:F9:B4:E3:1B:8F:19:63:52:FA:19:A0:AB:DA:37:E4:70:A9:71
+                DirName:/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta4/emailAddress=ta4
                 serial:22
 
             X509v3 Basic Constraints: critical
                 CA:FALSE
             X509v3 CRL Distribution Points: 
-                URI:foo://bar/baz
+
+                Full Name:
+                  URI:foo://bar/baz
 
     Signature Algorithm: sha256WithRSAEncryption
-        95:ab:fa:7f:38:e3:de:4d:db:7f:a4:ea:49:f6:99:0c:57:76:
-        36:df:e3:68:50:0d:b7:af:78:ea:e4:07:ad:63:75:15:48:34:
-        ca:81:6a:0b:64:6d:c5:ca:9b:3b:a2:fd:dd:19:90:8f:d4:4d:
-        35:a0:a2:18:84:bf:89:0d:22:cc:03:67:57:15:f7:70:16:2b:
-        f7:14:82:3e:a9:74:50:e5:22:11:13:5b:69:d1:d5:87:c2:44:
-        a6:b8:9c:73:d6:51:ec:20:89:1a:11:44:07:8f:e7:6d:df:a8:
-        0f:5e:71:36:9c:7b:0b:e4:2b:5a:94:77:06:c6:fb:f7:e5:dc:
-        77:a3
+         35:54:4b:75:7e:93:ad:b6:4a:01:0d:0b:90:a6:b8:97:82:f1:
+         53:14:12:ce:da:83:cd:0a:d2:57:68:c4:a2:b2:54:94:dc:f8:
+         fb:21:a5:e6:37:63:07:6a:eb:99:c9:61:b2:41:6f:76:a0:94:
+         97:ad:a3:7c:38:b8:da:4a:ff:cb:cd:e6:d2:75:1e:c3:ae:c3:
+         4f:28:32:7a:71:8d:58:c3:df:79:bb:f8:38:b8:2e:bb:fb:01:
+         dc:81:c8:85:91:66:2c:46:ee:0e:96:32:4c:3c:63:ba:7e:71:
+         ea:41:e1:2d:13:ac:34:2c:de:0e:9b:47:4c:41:24:0e:8a:ab:
+         c7:65
 -----BEGIN CERTIFICATE-----
-MIIDRDCCAq2gAwIBAgIBJTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-NDAeFw0xMTA0MTEyMjM3NTBaFw0xNDAxMDUyMjM3NTBaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczNfY2gxX3RhNDEaMBgGCSqGSIb3DQEJARYL
-Y3MzX2NoMV90YTQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMMMdcr3p5QI
-SnL0J4iYn9fMe0HkVIYR0cLYoc5osI9qbni/+QjJo0SZJyTawnboWXa+sgRGHPQa
-d3Zzy91Ttp/HXgQKNUPhXV1im3MTBtOWj2RONA2/MTM8BSQm13Gmg2UfzwElwYdJ
-NbkSoZyvTE/aJlnkE+7BclIa9UmEkhg7AgMBAAGjgeUwgeIwHQYDVR0OBBYEFJBe
-IIkUppsvvSH67AfhNyRZcBDBMIGSBgNVHSMEgYowgYeAFCqUwf/gEaCR8XFGNZo3
-PLzEIUqPoWykajBoMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTET
-MBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEMMAoGA1UEAxMDdGE0
-MRIwEAYJKoZIhvcNAQkBFgN0YTSCASIwDAYDVR0TAQH/BAIwADAeBgNVHR8EFzAV
-MBOgEaAPhg1mb286Ly9iYXIvYmF6MA0GCSqGSIb3DQEBCwUAA4GBAJWr+n84495N
-23+k6kn2mQxXdjbf42hQDbeveOrkB61jdRVINMqBagtkbcXKmzui/d0ZkI/UTTWg
-ohiEv4kNIswDZ1cV93AWK/cUgj6pdFDlIhETW2nR1YfCRKa4nHPWUewgiRoRRAeP
-523fqA9ecTacewvkK1qUdwbG+/fl3Hej
+MIIDRzCCArCgAwIBAgIBJTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzM19jaDFfdGE0MRowGAYJKoZIhvcNAQkB
+FgtjczNfY2gxX3RhNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gtlJUqr
+xpdg8AoTAhJYCiYmf7oQgqRoLlncnmNxTAOFVXvAIMg78xIkjOVN1EEQX12+tnZ3
+QeVXSMcBQr4YoPc5+j8wB+lvBRYAQ5he+mJGNnmxaoQiFTYWKyPlby/Gyq7ccpV6
+SJubrnK98P/SC/6C7FM4I81tZSi6U1x0b18CAwEAAaOB5jCB4zAdBgNVHQ4EFgQU
+gwobixG5ZLsPZxISRRJ0Mnw2FfkwgZMGA1UdIwSBizCBiIAUKXr5tOMbjxljUvoZ
+oKvaN+RwqXGhbaRrMGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
+MRQwEgYDVQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwD
+dGE0MRIwEAYJKoZIhvcNAQkBFgN0YTSCASIwDAYDVR0TAQH/BAIwADAeBgNVHR8E
+FzAVMBOgEaAPhg1mb286Ly9iYXIvYmF6MA0GCSqGSIb3DQEBCwUAA4GBADVUS3V+
+k622SgENC5CmuJeC8VMUEs7ag80K0ldoxKKyVJTc+PshpeY3Ywdq65nJYbJBb3ag
+lJeto3w4uNpK/8vN5tJ1HsOuw08oMnpxjVjD33m7+Di4Lrv7AdyByIWRZixG7g6W
+Mkw8Y7p+cepB4S0TrDQs3g6bR0xBJA6Kq8dl
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs4_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs4_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 20 (0x14)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
             Not Before: Jan  1 01:01:01 2035 GMT
             Not After : Jan  2 01:01:01 2035 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs4_ch1_ta3/emailAddress=cs4_ch1_ta3
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs4_ch1_ta3/emailAddress=cs4_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d7:42:45:a6:d0:f4:a9:54:6d:c8:4d:42:e8:05:
-                    a4:33:25:f1:b7:eb:20:df:33:26:6e:ca:30:63:57:
-                    df:d3:a9:02:b0:29:f3:cb:7b:64:77:34:7e:1d:c7:
-                    a8:2c:ca:73:23:22:43:71:6c:33:9e:89:0e:89:ce:
-                    6d:db:2b:f3:5a:af:e3:dc:f3:1c:48:64:60:5d:57:
-                    e6:17:6b:e6:61:4b:cb:e0:a9:e3:1c:aa:f6:70:34:
-                    b4:8b:d8:19:e6:26:06:60:24:82:c6:d8:5d:87:de:
-                    99:2b:0d:78:db:92:f2:c2:24:65:8b:f8:07:b6:fe:
-                    17:8d:bb:4f:c7:c0:ae:24:c9
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cb:2c:5a:74:59:a7:60:a1:a4:1b:36:25:92:c1:
+                    aa:39:3f:7c:17:de:d0:36:c3:1c:bf:c6:25:30:e0:
+                    10:7b:d7:76:7d:de:d6:71:6c:81:df:95:22:a4:dd:
+                    80:55:2a:5e:fd:82:df:94:a0:aa:f9:8e:b1:e9:20:
+                    be:04:26:18:17:e8:04:9e:af:67:ca:57:8e:f6:92:
+                    2c:6e:76:02:4b:84:d8:2b:78:2b:32:74:8e:4c:ea:
+                    ab:3c:61:62:cb:95:af:5c:77:74:19:b2:0e:4f:49:
+                    63:8a:72:ac:c1:77:6a:42:ed:91:6f:be:a4:df:c8:
+                    0b:1b:b4:32:18:46:dc:b9:f5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        b9:09:ff:d1:80:e1:9e:05:e8:27:40:d0:d3:76:d7:b6:72:cd:
-        4a:e4:d8:b7:e2:14:90:3a:74:61:b3:c8:3c:7c:bd:2e:9c:9d:
-        62:0d:cd:9b:e9:36:ba:aa:87:f7:c7:e4:3a:6c:5d:d9:99:d5:
-        33:a0:5a:3f:fd:5e:06:62:11:ad:ca:33:9d:0a:59:8a:a9:0e:
-        6e:4a:d8:6f:da:ff:96:89:e3:8a:3b:5e:a6:b4:8c:93:ff:70:
-        4d:d2:32:f8:44:c0:ff:84:65:b0:1f:59:4a:2c:10:d7:5e:a6:
-        ed:5b:a8:e2:eb:42:e0:0d:7b:f5:43:ca:1a:9a:cd:df:e6:f8:
-        4d:d5
+         40:91:53:35:b9:b9:31:8d:16:de:85:84:2f:b4:5e:35:7a:da:
+         a8:31:06:29:14:94:80:ee:0a:55:7d:8f:02:2f:74:f4:94:5e:
+         00:d1:c7:8b:2a:71:21:8d:3c:d6:f2:b6:50:84:fe:45:f1:56:
+         bd:36:68:72:b7:73:c6:b7:38:3b:fe:be:22:af:77:43:0d:32:
+         f7:7e:ce:2e:e9:1f:24:5a:b9:bb:ae:b3:fd:cd:ea:87:1a:43:
+         7b:22:71:2f:6b:16:74:e6:73:6b:af:38:17:c6:a4:c6:8c:01:
+         a9:c4:76:be:a3:02:8b:47:35:e1:53:c8:27:87:1e:5c:ad:cb:
+         93:4e
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBFDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0zNTAxMDEwMTAxMDFaFw0zNTAxMDIwMTAxMDFaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczRfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M0X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANdCRabQ9KlU
-bchNQugFpDMl8bfrIN8zJm7KMGNX39OpArAp88t7ZHc0fh3HqCzKcyMiQ3FsM56J
-DonObdsr81qv49zzHEhkYF1X5hdr5mFLy+Cp4xyq9nA0tIvYGeYmBmAkgsbYXYfe
-mSsNeNuS8sIkZYv4B7b+F427T8fAriTJAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBALkJ/9GA4Z4F6CdA0NN2
-17ZyzUrk2LfiFJA6dGGzyDx8vS6cnWINzZvpNrqqh/fH5DpsXdmZ1TOgWj/9XgZi
-Ea3KM50KWYqpDm5K2G/a/5aJ44o7Xqa0jJP/cE3SMvhEwP+EZbAfWUosENdepu1b
-qOLrQuANe/VDyhqazd/m+E3V
+MIICgDCCAemgAwIBAgIBFDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMzUwMTAxMDEwMTAxWhcNMzUwMTAyMDEwMTAxWjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzNF9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczRfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyyxadFmn
+YKGkGzYlksGqOT98F97QNsMcv8YlMOAQe9d2fd7WcWyB35UipN2AVSpe/YLflKCq
++Y6x6SC+BCYYF+gEnq9nyleO9pIsbnYCS4TYK3grMnSOTOqrPGFiy5WvXHd0GbIO
+T0ljinKswXdqQu2Rb76k38gLG7QyGEbcufUCAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAQJFTNbm5MY0W3oWE
+L7ReNXraqDEGKRSUgO4KVX2PAi909JReANHHiypxIY081vK2UIT+RfFWvTZocrdz
+xrc4O/6+Iq93Qw0y937OLukfJFq5u66z/c3qhxpDeyJxL2sWdOZza684F8akxowB
+qcR2vqMCi0c14VPIJ4ceXK3Lk04=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs5_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs5_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 21 (0x15)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:45 2011 GMT
-            Not After : Jan  5 22:37:45 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c0:be:66:e6:55:cb:9e:d6:d2:7b:d3:b2:34:fb:
-                    c9:74:d5:30:4f:62:1c:68:bd:13:97:08:b7:8c:b6:
-                    4e:dd:7f:98:a5:e2:2f:2e:9c:74:92:01:43:62:8e:
-                    9c:62:23:3e:b6:e4:e2:18:2b:3f:ae:fb:17:e7:d8:
-                    c4:28:27:27:d9:3e:5c:d1:8f:51:b7:10:4c:44:f6:
-                    bb:6b:24:7c:2e:09:bc:fb:8a:af:fa:e4:ce:94:2f:
-                    27:cd:3d:e7:be:93:4b:62:37:f5:f1:a8:8e:7e:76:
-                    92:62:7b:02:41:98:c2:f6:ff:68:8e:d2:1d:fb:9e:
-                    f1:45:f5:6a:9c:8d:28:23:c1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ea:23:95:11:2c:b5:2d:49:c5:10:77:74:82:98:
+                    da:5f:58:1f:2b:40:6e:1b:2e:d8:4f:30:07:6b:a2:
+                    ae:9f:f7:ed:8d:2d:b4:b3:68:48:ec:60:72:a2:fb:
+                    8b:7e:62:11:90:79:96:f9:ee:82:78:3f:09:22:2b:
+                    03:45:af:9e:ca:7e:3c:80:4f:ad:59:77:85:c5:e7:
+                    6b:4a:0b:a2:6b:4b:c5:e7:f9:38:81:64:05:ea:cd:
+                    76:9c:bf:eb:51:aa:29:6c:c1:3e:98:c6:ac:49:a2:
+                    ac:32:60:78:d8:ff:c6:79:f8:a5:a6:78:61:24:9a:
+                    27:26:2e:06:3a:19:8e:54:d1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: 
                 Encipher Only
     Signature Algorithm: sha256WithRSAEncryption
-        26:c1:64:ae:88:f7:19:f6:4f:f6:89:c9:d4:4e:46:cc:8f:51:
-        d3:b0:1c:d5:54:08:b0:5c:a7:51:48:24:be:e5:9f:d1:79:8b:
-        fb:92:84:aa:92:c6:2f:b1:76:e2:f2:21:f7:f1:5d:05:c3:5c:
-        01:90:20:8c:46:9e:a2:b9:dd:71:4f:a4:b9:3a:15:d3:74:98:
-        59:bf:f8:44:c5:a4:99:67:01:e7:d6:52:8d:2f:02:3a:f4:e8:
-        c8:b3:9c:f3:35:18:4e:41:03:a7:b6:b3:5c:84:61:43:6b:95:
-        b4:84:d1:c1:72:29:ac:d5:6f:e4:6c:f1:86:b6:eb:09:77:1e:
-        89:92
+         80:7c:f9:bc:bd:15:b1:9d:75:d1:82:b5:42:79:d3:5e:2c:e3:
+         c4:73:ed:3b:3c:8a:83:9c:51:e9:1f:93:75:1f:81:01:11:f9:
+         fd:a8:56:0f:cf:d3:a9:38:26:e3:f0:78:79:75:ef:97:7b:01:
+         0b:b7:37:65:6c:93:76:07:ec:fa:f5:1e:2d:6a:3b:6d:15:fc:
+         41:6f:fb:17:52:be:cc:a8:95:da:be:3b:6d:d8:5d:42:10:aa:
+         20:9e:8e:c5:33:ed:7b:8a:f1:e5:e3:45:21:05:2e:77:3b:c9:
+         66:46:25:37:e4:5c:b0:f5:29:0a:be:0d:bc:c8:e9:d8:fc:31:
+         22:e3
 -----BEGIN CERTIFICATE-----
-MIICezCCAeSgAwIBAgIBFTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDVaFw0xNDAxMDUyMjM3NDVaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczVfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M1X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMC+ZuZVy57W
-0nvTsjT7yXTVME9iHGi9E5cIt4y2Tt1/mKXiLy6cdJIBQ2KOnGIjPrbk4hgrP677
-F+fYxCgnJ9k+XNGPUbcQTET2u2skfC4JvPuKr/rkzpQvJ809576TS2I39fGojn52
-kmJ7AkGYwvb/aI7SHfue8UX1apyNKCPBAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAw
-CwYDVR0PBAQDAgABMA0GCSqGSIb3DQEBCwUAA4GBACbBZK6I9xn2T/aJydRORsyP
-UdOwHNVUCLBcp1FIJL7ln9F5i/uShKqSxi+xduLyIffxXQXDXAGQIIxGnqK53XFP
-pLk6FdN0mFm/+ETFpJlnAefWUo0vAjr06MiznPM1GE5BA6e2s1yEYUNrlbSE0cFy
-KazVb+Rs8Ya26wl3HomS
+MIICfTCCAeagAwIBAgIBFTANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzNV9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczVfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6iOVESy1
+LUnFEHd0gpjaX1gfK0BuGy7YTzAHa6Kun/ftjS20s2hI7GByovuLfmIRkHmW+e6C
+eD8JIisDRa+eyn48gE+tWXeFxedrSguia0vF5/k4gWQF6s12nL/rUaopbME+mMas
+SaKsMmB42P/GefilpnhhJJonJi4GOhmOVNECAwEAAaMdMBswDAYDVR0TAQH/BAIw
+ADALBgNVHQ8EBAMCAAEwDQYJKoZIhvcNAQELBQADgYEAgHz5vL0VsZ110YK1QnnT
+XizjxHPtOzyKg5xR6R+TdR+BARH5/ahWD8/TqTgm4/B4eXXvl3sBC7c3ZWyTdgfs
++vUeLWo7bRX8QW/7F1K+zKiV2r47bdhdQhCqIJ6OxTPte4rx5eNFIQUudzvJZkYl
+N+RcsPUpCr4NvMjp2PwxIuM=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs6_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs6_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 22 (0x16)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:45 2011 GMT
-            Not After : Jan  5 22:37:45 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs6_ch1_ta3/emailAddress=cs6_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs6_ch1_ta3/emailAddress=cs6_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c7:77:32:f6:35:5a:29:de:dc:61:89:a9:7e:d3:
-                    4f:ac:a1:db:f1:7f:58:1c:d3:46:a8:eb:61:62:80:
-                    d0:cf:40:6b:a4:39:ac:fb:f3:e4:a2:47:53:78:d4:
-                    cd:5a:5f:b1:c0:e8:2c:81:2d:00:98:d5:2f:6b:e9:
-                    e7:85:e6:0e:1e:46:d6:22:b9:f3:a7:e0:6c:18:ea:
-                    42:33:cd:c0:9c:e0:98:ec:29:67:39:c4:a3:f7:69:
-                    8b:04:66:f5:a2:3c:08:1b:24:e5:ba:d4:57:5b:14:
-                    f1:f2:c8:2b:0f:22:ae:6e:d1:ca:85:01:e6:75:82:
-                    03:df:7a:ed:96:8a:64:2f:5f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a5:2e:d6:bd:fc:2f:5b:4c:b8:91:90:8e:f6:3f:
+                    bb:55:28:8d:4f:9d:47:70:ed:3e:a1:bd:70:42:47:
+                    b0:41:09:7b:87:4f:eb:1a:45:9f:09:6d:0a:8c:53:
+                    73:a3:3d:fb:3f:dc:67:f4:03:d3:7c:51:15:f3:ab:
+                    6c:2c:39:d0:a7:4e:c2:3f:5c:d2:d8:87:f1:03:3b:
+                    eb:75:9e:9e:66:d5:3d:d5:e5:6d:32:92:ad:05:b8:
+                    c2:3b:48:e5:72:b4:9d:c9:b7:42:4f:d7:b4:a5:8c:
+                    a4:88:76:df:11:3e:b1:5c:a2:bd:7d:56:f8:c8:76:
+                    00:c4:88:64:0f:36:7e:cb:23
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Encipher Only
     Signature Algorithm: sha256WithRSAEncryption
-        7b:52:05:af:d4:77:41:4d:3f:cf:39:bd:33:a2:82:96:38:df:
-        a5:f7:ab:44:a3:b4:fc:13:ad:f5:d0:48:81:34:10:12:e9:c7:
-        47:3f:13:1d:0a:20:8c:a7:df:23:a1:f5:5c:05:58:7a:ff:58:
-        61:57:25:2c:36:22:10:e6:a4:d4:e3:f4:ad:b3:35:a9:91:93:
-        24:52:f6:28:4c:90:12:98:31:9b:31:8c:64:2f:79:df:d1:f1:
-        6e:d2:43:84:fe:bf:e5:ea:a9:74:6c:ce:cd:44:89:6b:df:bf:
-        7c:dd:77:24:0b:18:07:42:89:41:b3:2c:60:30:db:75:05:82:
-        15:85
+         48:51:71:0e:8c:c2:42:98:91:34:dc:a9:8a:92:98:18:ce:30:
+         fd:61:11:66:9a:87:7a:7b:a6:dd:09:7f:36:9c:7d:d8:19:b6:
+         ab:5d:6a:22:b3:4a:00:45:66:1f:ed:d5:1f:b4:cc:c7:a5:07:
+         5f:6f:35:2c:bc:52:1a:c9:c0:96:56:fd:82:33:50:7b:2e:43:
+         79:2c:cb:e4:e9:22:55:0a:09:96:05:f7:96:e1:22:95:3a:8e:
+         66:b1:21:aa:88:f1:21:4a:20:ae:08:b1:27:7e:f6:6b:be:55:
+         68:0b:d0:d6:77:30:78:92:75:38:d2:ab:31:79:8e:5d:71:a3:
+         b3:2b
 -----BEGIN CERTIFICATE-----
-MIICfjCCAeegAwIBAgIBFjANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDVaFw0xNDAxMDUyMjM3NDVaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczZfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M2X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMd3MvY1Wine
-3GGJqX7TT6yh2/F/WBzTRqjrYWKA0M9Aa6Q5rPvz5KJHU3jUzVpfscDoLIEtAJjV
-L2vp54XmDh5G1iK586fgbBjqQjPNwJzgmOwpZznEo/dpiwRm9aI8CBsk5brUV1sU
-8fLIKw8irm7RyoUB5nWCA9967ZaKZC9fAgMBAAGjIDAeMAwGA1UdEwEB/wQCMAAw
-DgYDVR0PAQH/BAQDAgABMA0GCSqGSIb3DQEBCwUAA4GBAHtSBa/Ud0FNP885vTOi
-gpY436X3q0SjtPwTrfXQSIE0EBLpx0c/Ex0KIIyn3yOh9VwFWHr/WGFXJSw2IhDm
-pNTj9K2zNamRkyRS9ihMkBKYMZsxjGQved/R8W7SQ4T+v+XqqXRszs1EiWvfv3zd
-dyQLGAdCiUGzLGAw23UFghWF
+MIICgDCCAemgAwIBAgIBFjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzNl9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczZfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApS7Wvfwv
+W0y4kZCO9j+7VSiNT51HcO0+ob1wQkewQQl7h0/rGkWfCW0KjFNzoz37P9xn9APT
+fFEV86tsLDnQp07CP1zS2IfxAzvrdZ6eZtU91eVtMpKtBbjCO0jlcrSdybdCT9e0
+pYykiHbfET6xXKK9fVb4yHYAxIhkDzZ+yyMCAwEAAaMgMB4wDAYDVR0TAQH/BAIw
+ADAOBgNVHQ8BAf8EBAMCAAEwDQYJKoZIhvcNAQELBQADgYEASFFxDozCQpiRNNyp
+ipKYGM4w/WERZpqHenum3Ql/Npx92Bm2q11qIrNKAEVmH+3VH7TMx6UHX281LLxS
+GsnAllb9gjNQey5DeSzL5OkiVQoJlgX3luEilTqOZrEhqojxIUogrgixJ372a75V
+aAvQ1ncweJJ1ONKrMXmOXXGjsys=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs7_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs7_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,51 +2,51 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 23 (0x17)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:46 2011 GMT
-            Not After : Jan  5 22:37:46 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs7_ch1_ta3/emailAddress=cs7_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs7_ch1_ta3/emailAddress=cs7_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c8:97:06:72:77:82:e7:03:53:56:f7:71:5c:f4:
-                    b5:ae:e1:22:08:f7:a7:70:47:2f:ad:6f:af:a9:39:
-                    c3:73:ca:f5:d5:54:e9:3d:46:f8:a4:a1:1a:27:d5:
-                    1a:c6:90:c9:4b:c1:21:32:06:9b:56:d7:23:3c:23:
-                    d9:aa:2a:17:15:61:0c:cc:08:e7:60:af:55:e6:9e:
-                    e2:24:bd:1f:e9:04:e8:09:ed:f4:a3:d8:5e:24:91:
-                    95:3e:9f:7e:f7:64:66:60:08:7d:cf:ac:b6:f4:6b:
-                    72:28:61:8c:dc:51:4d:00:3e:4d:67:70:0e:ae:3c:
-                    37:99:28:47:e7:61:fe:a3:73
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:bc:52:93:cc:6b:6d:63:bb:fe:a2:33:3d:40:a4:
+                    ba:3f:12:4c:72:69:a0:87:80:32:50:47:91:8f:39:
+                    6f:8a:78:78:9a:f6:34:83:2d:7d:6a:19:90:36:9f:
+                    fb:7c:1c:c8:13:f9:13:b2:6a:75:1a:2c:3a:76:2b:
+                    10:d2:f3:90:1f:65:df:65:04:0c:97:a2:fa:43:53:
+                    33:32:f8:8f:f3:30:a7:1c:4a:67:9c:da:81:b8:7a:
+                    55:c4:30:1d:59:5d:f1:0a:bc:b6:52:b3:09:41:24:
+                    1f:30:6b:ed:95:ba:90:cf:0d:af:eb:c7:fb:31:35:
+                    c5:5b:ff:67:9a:8a:1b:34:09
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
                 CA:FALSE
     Signature Algorithm: sha256WithRSAEncryption
-        7a:58:f4:9c:bc:64:08:aa:dc:9c:e2:d3:a0:92:cb:1a:b3:75:
-        c9:c7:39:07:84:cb:4a:0f:07:2c:b8:5d:8a:a3:22:69:2e:63:
-        04:d8:16:5f:8d:e8:11:de:fc:f5:df:a3:6c:c9:f0:c2:d7:5d:
-        6c:43:3c:e2:ae:ed:b2:01:cf:e1:77:b3:85:76:bb:76:f7:c9:
-        cd:50:7f:17:b7:82:22:ed:d9:1c:82:bf:da:3f:28:72:c5:45:
-        e3:08:96:ba:45:22:76:bb:b4:9d:f6:e1:a0:64:36:9b:a2:e2:
-        83:64:b1:76:1d:09:2f:6c:4b:a9:9b:00:e3:79:cf:7d:0b:91:
-        b3:95
+         68:79:a6:5a:7f:1d:50:2a:e9:60:26:b2:31:e8:66:e2:c1:5e:
+         12:78:d9:32:fc:0c:07:5d:15:22:f7:f7:22:52:96:0d:35:8e:
+         bd:dd:60:ab:0f:d9:dc:6b:4e:a5:d8:57:83:ff:d1:60:a5:c1:
+         c7:0c:49:c3:05:c4:9a:9f:87:ba:ff:47:9f:51:dd:04:2a:90:
+         53:b1:f9:8d:fa:34:97:a2:4b:4b:70:84:67:1d:de:f4:e6:e6:
+         bd:0e:c4:24:8a:e2:8b:fa:ac:06:2c:09:ed:bd:7d:b3:1e:df:
+         a9:be:4c:c5:49:c1:72:bd:d8:a7:3f:25:89:15:3f:1c:19:e6:
+         84:15
 -----BEGIN CERTIFICATE-----
-MIICbjCCAdegAwIBAgIBFzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDZaFw0xNDAxMDUyMjM3NDZaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczdfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M3X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMiXBnJ3gucD
-U1b3cVz0ta7hIgj3p3BHL61vr6k5w3PK9dVU6T1G+KShGifVGsaQyUvBITIGm1bX
-Izwj2aoqFxVhDMwI52CvVeae4iS9H+kE6Ant9KPYXiSRlT6ffvdkZmAIfc+stvRr
-cihhjNxRTQA+TWdwDq48N5koR+dh/qNzAgMBAAGjEDAOMAwGA1UdEwEB/wQCMAAw
-DQYJKoZIhvcNAQELBQADgYEAelj0nLxkCKrcnOLToJLLGrN1ycc5B4TLSg8HLLhd
-iqMiaS5jBNgWX43oEd789d+jbMnwwtddbEM84q7tsgHP4XezhXa7dvfJzVB/F7eC
-Iu3ZHIK/2j8ocsVF4wiWukUidru0nfbhoGQ2m6Lig2Sxdh0JL2xLqZsA43nPfQuR
-s5U=
+MIICcDCCAdmgAwIBAgIBFzANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzN19jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczdfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvFKTzGtt
+Y7v+ojM9QKS6PxJMcmmgh4AyUEeRjzlvinh4mvY0gy19ahmQNp/7fBzIE/kTsmp1
+Giw6disQ0vOQH2XfZQQMl6L6Q1MzMviP8zCnHEpnnNqBuHpVxDAdWV3xCry2UrMJ
+QSQfMGvtlbqQzw2v68f7MTXFW/9nmoobNAkCAwEAAaMQMA4wDAYDVR0TAQH/BAIw
+ADANBgkqhkiG9w0BAQsFAAOBgQBoeaZafx1QKulgJrIx6GbiwV4SeNky/AwHXRUi
+9/ciUpYNNY693WCrD9nca06l2FeD/9FgpcHHDEnDBcSan4e6/0efUd0EKpBTsfmN
++jSXoktLcIRnHd705ua9DsQkiuKL+qwGLAntvX2zHt+pvkzFScFyvdinPyWJFT8c
+GeaEFQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs8_ch1_ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/code_signing_certs/cs8_ch1_ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -2,25 +2,25 @@
     Data:
         Version: 3 (0x2)
         Serial Number: 24 (0x18)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ch1_ta3/emailAddress=ch1_ta3
         Validity
-            Not Before: Apr 11 22:37:46 2011 GMT
-            Not After : Jan  5 22:37:46 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
+            Not Before: Dec 13 00:13:36 2013 GMT
+            Not After : Sep  8 00:13:36 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c4:da:c4:d3:72:c2:65:ec:7f:b8:41:e3:c7:14:
-                    83:bb:fc:9e:d5:87:15:5f:eb:52:da:cb:f4:c7:db:
-                    2f:58:65:01:0e:0e:d5:27:cf:c5:e5:2c:ce:99:7f:
-                    0f:48:8c:4f:54:47:6b:4b:5e:90:3f:95:96:60:b8:
-                    8e:39:1f:a9:cc:38:b6:9f:21:6d:4e:69:2e:14:c5:
-                    71:fe:e1:e1:44:24:d4:74:45:4a:9f:88:64:36:96:
-                    f7:ba:74:1e:88:f9:6d:ac:e9:25:f0:74:58:c6:13:
-                    b9:05:ab:fa:0e:5c:77:fc:a1:3d:48:9c:78:90:f8:
-                    67:41:99:7c:bf:45:6a:67:ef
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:de:50:67:d6:8e:a7:53:1b:73:03:fe:c7:ef:59:
+                    82:0c:d7:74:ef:ad:21:33:68:78:46:27:7f:f1:0c:
+                    76:67:8d:be:ba:f8:36:00:c7:1b:eb:82:1f:70:58:
+                    71:02:db:6a:9e:11:37:a8:b0:28:27:b4:9f:be:1d:
+                    2a:fb:67:4f:a1:3a:ce:e2:70:d2:d8:81:eb:92:5a:
+                    c6:3f:97:ec:2c:49:b5:5b:8a:e1:ea:60:35:28:6a:
+                    e8:37:b6:7a:1e:83:36:32:52:3f:c0:a5:b2:74:19:
+                    b1:32:34:66:da:f8:fc:e1:92:42:b2:a6:87:48:56:
+                    37:66:e3:3c:6f:58:73:26:a1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -28,27 +28,27 @@
             X509v3 Key Usage: critical
                 Digital Signature
     Signature Algorithm: sha256WithRSAEncryption
-        1d:d4:91:76:de:42:bb:70:5b:57:39:fe:bd:50:85:66:ee:7c:
-        c7:7c:7c:00:18:71:73:50:5a:70:04:43:ca:81:23:2a:42:c8:
-        8e:34:91:b9:8b:b8:f7:37:b0:08:3f:ee:b2:5f:a2:fd:03:b1:
-        59:d1:ff:cf:b6:73:f6:82:51:0a:73:a0:43:79:36:a2:c4:fb:
-        98:6c:64:bc:3a:f5:b9:c5:e7:c1:cf:76:fb:73:23:d3:47:e2:
-        a9:19:60:08:a7:c8:1b:c3:73:24:f9:8d:dc:bf:ae:5d:5b:fe:
-        48:d0:06:a7:33:e5:d8:db:4c:c9:82:a0:32:c1:1e:45:67:67:
-        ce:54
+         55:cb:0c:50:d9:e0:bd:c9:b2:60:0f:0d:3e:ac:e3:e0:e2:2f:
+         02:a9:5b:5b:2d:4c:bb:55:e0:5a:83:63:46:46:92:cc:1f:f3:
+         8b:24:de:6f:9e:c6:b5:f5:ca:57:1d:07:d4:97:4e:d3:9b:a9:
+         17:56:6c:fa:57:7f:cd:a4:55:ab:64:b7:57:b4:59:a4:be:d6:
+         8c:6d:70:8a:4f:f4:13:20:e1:70:89:18:98:77:e9:91:87:a9:
+         01:66:07:43:df:df:4d:ac:e1:1b:b1:c5:d8:20:3f:fc:fd:5f:
+         1d:fc:61:8e:43:b9:ca:ed:db:83:88:e2:0f:4a:a9:f2:20:ee:
+         e6:54
 -----BEGIN CERTIFICATE-----
-MIICgTCCAeqgAwIBAgIBGDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzET
-MBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UE
-ChMEcGtnNTEQMA4GA1UEAxQHY2gxX3RhMzEWMBQGCSqGSIb3DQEJARYHY2gxX3Rh
-MzAeFw0xMTA0MTEyMjM3NDZaFw0xNDAxMDUyMjM3NDZaMHgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MRQwEgYDVQQDFAtjczhfY2gxX3RhMzEaMBgGCSqGSIb3DQEJARYL
-Y3M4X2NoMV90YTMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMTaxNNywmXs
-f7hB48cUg7v8ntWHFV/rUtrL9MfbL1hlAQ4O1SfPxeUszpl/D0iMT1RHa0tekD+V
-lmC4jjkfqcw4tp8hbU5pLhTFcf7h4UQk1HRFSp+IZDaW97p0Hoj5bazpJfB0WMYT
-uQWr+g5cd/yhPUiceJD4Z0GZfL9FamfvAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4GBAB3UkXbeQrtwW1c5
-/r1QhWbufMd8fAAYcXNQWnAEQ8qBIypCyI40kbmLuPc3sAg/7rJfov0DsVnR/8+2
-c/aCUQpzoEN5NqLE+5hsZLw69bnF58HPdvtzI9NH4qkZYAinyBvDcyT5jdy/rl1b
-/kjQBqcz5djbTMmCoDLBHkVnZ85U
+MIICgzCCAeygAwIBAgIBGDANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNV
+BAoMBHBrZzUxEDAOBgNVBAMMB2NoMV90YTMxFjAUBgkqhkiG9w0BCQEWB2NoMV90
+YTMwHhcNMTMxMjEzMDAxMzM2WhcNMTYwOTA4MDAxMzM2WjB5MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxFDASBgNVBAMMC2NzOF9jaDFfdGEzMRowGAYJKoZIhvcNAQkB
+FgtjczhfY2gxX3RhMzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3lBn1o6n
+UxtzA/7H71mCDNd0760hM2h4Rid/8Qx2Z42+uvg2AMcb64IfcFhxAttqnhE3qLAo
+J7Sfvh0q+2dPoTrO4nDS2IHrklrGP5fsLEm1W4rh6mA1KGroN7Z6HoM2MlI/wKWy
+dBmxMjRm2vj84ZJCsqaHSFY3ZuM8b1hzJqECAwEAAaMjMCEwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADgYEAVcsMUNngvcmy
+YA8NPqzj4OIvAqlbWy1Mu1XgWoNjRkaSzB/ziyTeb57GtfXKVx0H1JdO05upF1Zs
++ld/zaRVq2S3V7RZpL7WjG1wik/0EyDhcIkYmHfpkYepAWYHQ9/fTazhG7HF2CA/
+/P1fHfxhjkO5yu3bg4jiD0qp8iDu5lQ=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/combined_cas.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/combined_cas.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,322 +1,290 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            93:ae:7e:2d:c9:61:8f:4b
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+        Serial Number: 14039479151502690113 (0xc2d63fe768d20741)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:41:a2:3d:00:af:e2:71:29:e6:18:c2:73:65:
-                    fc:4a:9d:e3:f7:1a:6e:7a:f5:09:81:87:cd:cf:a9:
-                    74:a9:e4:47:da:e2:fa:bd:0e:0a:ae:ba:06:e8:1b:
-                    66:e3:8a:5e:bb:87:90:5e:d1:38:7d:12:93:72:a0:
-                    4b:88:77:dd:ce:02:67:9f:c5:be:49:cb:b7:e8:0e:
-                    bd:f0:78:37:55:bb:c5:91:6e:c7:7b:9c:b3:94:a2:
-                    24:7d:09:25:74:52:22:6d:4a:34:f8:92:71:b1:e9:
-                    74:9b:8e:87:d4:2a:46:f8:fa:8f:86:5c:b5:6b:20:
-                    24:d1:37:ea:8a:87:07:e3:ad
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c5:43:65:b9:e0:b5:bf:68:f6:d0:67:91:49:1f:
+                    53:c8:eb:36:57:b9:76:c9:d7:2d:26:4c:f2:08:38:
+                    e6:5d:56:b6:20:af:72:ea:ac:98:de:14:cd:35:ed:
+                    f9:b3:fb:e3:c4:1f:06:db:04:77:2a:cd:3e:3e:98:
+                    9f:52:f1:9e:27:db:91:ec:f4:de:3e:53:d5:fc:ba:
+                    5c:37:98:8b:b7:45:4c:bb:a9:d0:cc:b5:f8:45:a4:
+                    0c:58:a0:92:60:05:26:01:96:08:c1:8d:5f:18:e8:
+                    84:f1:d0:a2:f1:e3:32:67:20:52:a6:6f:7a:47:39:
+                    f1:f0:c0:47:6f:3b:9e:7c:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0C:08:1A:2C:FA:77:26:CE:37:0F:A5:85:98:85:0F:4D:48:BA:83:B3
+                75:D7:5E:D6:65:E8:AA:54:31:F5:3A:5C:DA:C8:EE:5C:02:46:28:26
             X509v3 Authority Key Identifier: 
-                keyid:0C:08:1A:2C:FA:77:26:CE:37:0F:A5:85:98:85:0F:4D:48:BA:83:B3
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta6/CN=localhost/emailAddress=ta6
-                serial:93:AE:7E:2D:C9:61:8F:4B
+                keyid:75:D7:5E:D6:65:E8:AA:54:31:F5:3A:5C:DA:C8:EE:5C:02:46:28:26
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        10:2c:ed:b9:a4:aa:bd:9e:4d:47:dd:02:64:52:a9:7a:73:a7:
-        f3:58:45:cf:da:5c:1e:80:30:d9:10:a7:e4:79:d2:eb:85:8b:
-        70:4c:39:df:b6:40:fb:7f:11:cd:a8:85:d6:5c:d1:2f:29:9f:
-        8d:fa:53:bc:20:f3:c8:97:9b:11:f4:7d:39:9a:2c:a6:6e:1e:
-        a4:0d:81:e0:65:59:89:f6:a9:66:65:38:05:44:e7:47:a2:9e:
-        a2:e3:82:07:2c:cb:8e:dc:47:a2:e9:cb:01:6a:54:c1:26:14:
-        03:e9:c3:ac:fe:98:0e:76:52:f3:5b:67:ea:26:0d:98:6d:e4:
-        23:ac
+         c0:55:58:54:3d:b7:dd:d8:c4:3f:35:a4:d9:25:b3:45:08:f3:
+         5b:98:16:46:40:36:01:c9:60:d4:a6:2b:9e:29:6d:89:26:d7:
+         4e:69:35:ba:15:b2:d1:1a:5e:97:ad:b3:16:33:c5:5b:4f:4f:
+         0e:8d:8e:b3:28:50:00:ad:88:2a:2c:60:d3:66:7c:66:95:f9:
+         83:0a:ae:14:8b:d8:42:35:8d:50:7f:b2:23:1f:9b:28:ca:de:
+         61:b8:6d:c5:38:4a:e1:60:da:75:42:f3:18:4c:14:ae:b0:5d:
+         a9:ab:ae:10:89:09:cc:61:1e:ce:28:95:f0:44:98:33:04:9c:
+         db:8f
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAJOufi3JYY9LMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTYxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE2MB4XDTExMDQxMTIyMzc1MloXDTE0MDEwNTIy
-Mzc1MlowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNjESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTYwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAMVBoj0Ar+JxKeYYwnNl/Eqd4/cabnr1CYGHzc+pdKnk
-R9ri+r0OCq66BugbZuOKXruHkF7ROH0Sk3KgS4h33c4CZ5/FvknLt+gOvfB4N1W7
-xZFux3ucs5SiJH0JJXRSIm1KNPiScbHpdJuOh9QqRvj6j4ZctWsgJNE36oqHB+Ot
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFAwIGiz6dybONw+lhZiFD01IuoOzMIGvBgNV
-HSMEgacwgaSAFAwIGiz6dybONw+lhZiFD01IuoOzoYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNjESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTaCCQCTrn4tyWGPSzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBABAs7bmkqr2eTUfdAmRSqXpzp/NYRc/aXB6AMNkQp+R50uuF
-i3BMOd+2QPt/Ec2ohdZc0S8pn436U7wg88iXmxH0fTmaLKZuHqQNgeBlWYn2qWZl
-OAVE50einqLjggcsy47cR6LpywFqVMEmFAPpw6z+mA52UvNbZ+omDZht5COs
+MIICyDCCAjGgAwIBAgIJAMLWP+do0gdBMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE2MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhNjAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE2MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhNjCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAxUNlueC1v2j20GeRSR9TyOs2V7l2ydctJkzyCDjm
+XVa2IK9y6qyY3hTNNe35s/vjxB8G2wR3Ks0+PpifUvGeJ9uR7PTePlPV/LpcN5iL
+t0VMu6nQzLX4RaQMWKCSYAUmAZYIwY1fGOiE8dCi8eMyZyBSpm96Rznx8MBHbzue
+fIECAwEAAaNQME4wHQYDVR0OBBYEFHXXXtZl6KpUMfU6XNrI7lwCRigmMB8GA1Ud
+IwQYMBaAFHXXXtZl6KpUMfU6XNrI7lwCRigmMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAwFVYVD233djEPzWk2SWzRQjzW5gWRkA2Aclg1KYrniltiSbX
+Tmk1uhWy0Rpel62zFjPFW09PDo2OsyhQAK2IKixg02Z8ZpX5gwquFIvYQjWNUH+y
+Ix+bKMreYbhtxThK4WDadULzGEwUrrBdqauuEIkJzGEeziiV8ESYMwSc248=
 -----END CERTIFICATE-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            b8:9a:b1:4d:fa:a9:68:23
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+        Serial Number: 16709229305513134148 (0xe7e31b8629a84844)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:da:5e:85:e0:17:14:35:c1:e8:f4:b6:97:15:d1:
-                    f5:c3:36:26:57:85:5c:0c:e8:8e:d7:2b:10:66:b2:
-                    61:92:a3:df:a4:4f:61:52:41:9c:3b:2f:0e:bc:bd:
-                    92:9b:e2:4c:ec:68:34:76:2c:86:54:e5:8b:9e:ac:
-                    2f:7e:4f:07:52:ec:7f:51:31:ed:9e:94:ed:7e:15:
-                    da:4f:fb:65:d0:07:85:c2:60:69:ce:ac:74:72:8a:
-                    45:31:e4:6c:3e:5e:05:bc:d3:2f:37:56:14:c2:2e:
-                    78:78:6b:93:14:e5:61:08:22:ef:4d:f9:bb:1b:1f:
-                    31:09:12:7a:ad:e5:cf:18:5b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c6:4d:f7:24:79:d7:8f:a0:93:61:37:d0:a4:5c:
+                    61:81:e2:1a:1c:0a:ff:ce:8b:3d:49:15:12:1c:1b:
+                    b7:9c:dd:28:f6:c5:5d:2e:63:f7:67:4b:c9:8c:95:
+                    5a:1c:e8:97:89:16:83:81:ff:bc:10:26:51:7c:f9:
+                    f1:03:f5:51:f4:01:45:da:d4:2f:cf:d9:35:68:0c:
+                    ae:11:2d:31:37:5a:73:73:c0:60:13:c8:10:73:3a:
+                    7d:c9:96:8c:07:00:b1:41:52:d2:b0:5f:cd:01:06:
+                    b8:d7:3f:d8:0f:17:f9:38:39:5d:2d:09:14:99:05:
+                    7c:1f:1f:6f:c9:2d:7d:6e:61
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                BB:CA:54:46:B9:0F:22:DB:69:82:15:BB:66:36:9D:50:1D:0B:1B:F5
+                9E:DE:D5:93:0F:57:31:37:6C:9A:F7:DA:A2:A0:D2:CE:F4:65:EC:86
             X509v3 Authority Key Identifier: 
-                keyid:BB:CA:54:46:B9:0F:22:DB:69:82:15:BB:66:36:9D:50:1D:0B:1B:F5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta8/CN=localhost/emailAddress=ta8
-                serial:B8:9A:B1:4D:FA:A9:68:23
+                keyid:9E:DE:D5:93:0F:57:31:37:6C:9A:F7:DA:A2:A0:D2:CE:F4:65:EC:86
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        7a:13:83:75:43:35:e1:4d:07:93:8d:1c:fd:4d:8f:5c:24:78:
-        f5:01:35:4c:a5:ad:5f:92:f3:23:21:0c:2d:dc:64:a5:7f:c2:
-        3c:c9:e3:b0:4e:d8:17:4e:76:4c:4d:71:fb:b9:3d:d9:51:b8:
-        fc:e0:91:a6:5c:18:c8:06:55:cc:a9:ba:9e:59:92:c4:5c:04:
-        11:e2:d9:99:1d:cb:bd:9d:6c:c2:0e:9e:f0:4c:20:69:6b:b1:
-        76:b6:d4:c0:e6:6c:4b:1e:18:cb:71:4a:9b:13:ca:db:c8:a4:
-        0e:35:c0:91:70:04:9c:32:bd:15:a2:36:72:97:d0:7b:d0:6c:
-        dc:03
+         81:1f:1d:b5:60:85:60:4f:9f:cc:9a:12:99:4a:dc:fb:49:2b:
+         70:9d:21:1e:d7:be:fe:a8:b8:eb:fd:49:e2:99:72:ae:0e:be:
+         cf:bc:c4:88:11:8e:5b:6c:d5:68:d0:cb:52:1a:7c:65:a2:c1:
+         1f:08:7e:31:6e:28:18:fa:04:90:70:d5:96:aa:89:97:9d:61:
+         08:47:f5:75:4c:9d:96:c7:37:8f:3e:f2:04:bc:48:a6:89:65:
+         25:27:13:70:5a:f7:97:ba:42:61:a5:d9:69:44:08:34:19:4d:
+         6e:1c:e7:23:25:1f:c0:f3:ad:fa:56:c2:02:75:ed:c2:51:ca:
+         cf:96
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJALiasU36qWgjMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTgxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE4MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhODESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTgwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBANpeheAXFDXB6PS2lxXR9cM2JleFXAzojtcrEGayYZKj
-36RPYVJBnDsvDry9kpviTOxoNHYshlTli56sL35PB1Lsf1Ex7Z6U7X4V2k/7ZdAH
-hcJgac6sdHKKRTHkbD5eBbzTLzdWFMIueHhrkxTlYQgi7035uxsfMQkSeq3lzxhb
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFLvKVEa5DyLbaYIVu2Y2nVAdCxv1MIGvBgNV
-HSMEgacwgaSAFLvKVEa5DyLbaYIVu2Y2nVAdCxv1oYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhODESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTiCCQC4mrFN+qloIzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAHoTg3VDNeFNB5ONHP1Nj1wkePUBNUylrV+S8yMhDC3cZKV/
-wjzJ47BO2BdOdkxNcfu5PdlRuPzgkaZcGMgGVcypup5ZksRcBBHi2Zkdy72dbMIO
-nvBMIGlrsXa21MDmbEseGMtxSpsTytvIpA41wJFwBJwyvRWiNnKX0HvQbNwD
+MIICyDCCAjGgAwIBAgIJAOfjG4YpqEhEMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE4MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhODAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE4MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhODCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAxk33JHnXj6CTYTfQpFxhgeIaHAr/zos9SRUSHBu3
+nN0o9sVdLmP3Z0vJjJVaHOiXiRaDgf+8ECZRfPnxA/VR9AFF2tQvz9k1aAyuES0x
+N1pzc8BgE8gQczp9yZaMBwCxQVLSsF/NAQa41z/YDxf5ODldLQkUmQV8Hx9vyS19
+bmECAwEAAaNQME4wHQYDVR0OBBYEFJ7e1ZMPVzE3bJr32qKg0s70ZeyGMB8GA1Ud
+IwQYMBaAFJ7e1ZMPVzE3bJr32qKg0s70ZeyGMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAgR8dtWCFYE+fzJoSmUrc+0krcJ0hHte+/qi46/1J4plyrg6+
+z7zEiBGOW2zVaNDLUhp8ZaLBHwh+MW4oGPoEkHDVlqqJl51hCEf1dUydlsc3jz7y
+BLxIpollJScTcFr3l7pCYaXZaUQINBlNbhznIyUfwPOt+lbCAnXtwlHKz5Y=
 -----END CERTIFICATE-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            a1:62:e1:e5:c0:a2:38:0d
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+        Serial Number: 16519569919148996401 (0xe5414d51291ab731)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e8:ab:ef:91:ca:05:4a:18:a2:98:c4:d8:93:d0:
-                    ce:99:a9:5e:02:8d:5d:5c:e3:f3:84:49:6b:a7:6d:
-                    ef:38:77:2e:32:c2:9c:09:1d:f6:be:6c:c6:c4:b1:
-                    c8:c3:32:72:2b:84:87:f6:ba:bf:fc:cf:5c:05:c2:
-                    4f:62:23:7e:02:3f:ce:6c:c6:b6:95:86:84:d7:97:
-                    9f:1c:87:70:29:62:6a:29:7c:06:a3:b7:18:12:67:
-                    07:3a:89:aa:f0:99:fe:df:46:00:b1:2f:aa:30:1e:
-                    a2:1e:f8:2b:37:99:21:b8:85:53:42:98:4a:bd:c5:
-                    f9:b4:61:60:0a:73:bc:0e:d1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c9:8a:2d:0d:53:04:e8:02:bb:bc:27:df:0e:b8:
+                    33:25:07:54:61:d0:d9:b6:08:33:5b:c3:eb:4c:a1:
+                    1f:9f:51:cc:a9:83:07:16:15:9c:69:0b:48:74:62:
+                    35:5f:a3:94:38:37:0f:3f:5f:58:26:9a:36:0b:a2:
+                    0f:bb:9b:57:ff:fd:70:01:d6:28:a2:b6:67:ed:a9:
+                    c8:90:15:b5:7f:91:60:32:ff:96:13:a4:3f:09:23:
+                    70:2f:38:6f:24:54:41:95:2f:91:5a:6e:a5:aa:77:
+                    da:6c:50:ee:62:e5:85:8a:67:63:7d:fc:07:30:ba:
+                    f3:96:93:6c:5d:5f:9e:2e:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A6:CF:35:00:96:15:AD:B4:24:DE:1D:5A:B9:56:A2:6E:B4:2D:46:C5
+                E8:5E:8E:77:D1:61:64:BB:48:AF:38:95:0C:57:16:4E:E3:77:3D:35
             X509v3 Authority Key Identifier: 
-                keyid:A6:CF:35:00:96:15:AD:B4:24:DE:1D:5A:B9:56:A2:6E:B4:2D:46:C5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta9/CN=localhost/emailAddress=ta9
-                serial:A1:62:E1:E5:C0:A2:38:0D
+                keyid:E8:5E:8E:77:D1:61:64:BB:48:AF:38:95:0C:57:16:4E:E3:77:3D:35
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        44:02:da:cf:c3:07:27:84:e4:06:22:ff:fc:7e:c9:47:7a:79:
-        e1:9f:6a:84:68:a8:fb:48:18:80:58:0f:b0:5e:ef:43:bf:3a:
-        69:23:b2:18:3e:78:3a:8e:ff:c5:d8:76:4c:99:d5:9f:be:8a:
-        fd:0e:79:b9:7e:62:c4:c2:4b:6f:78:01:e7:52:19:ff:08:86:
-        a7:b2:17:0c:11:03:ef:42:1f:b5:5b:40:0a:3a:9f:2a:4f:57:
-        31:3d:b1:dd:a8:51:e1:2f:b2:e4:5b:2e:1b:9f:a7:d6:b7:6b:
-        76:68:f9:2e:b1:38:6f:11:21:0e:81:a2:32:01:7b:bc:c3:1f:
-        82:4e
+         3e:20:dc:10:1b:b4:83:9a:0a:9a:41:d3:6f:ec:ef:5b:51:0f:
+         a7:4a:49:0e:b3:86:f6:0f:c2:84:ea:0f:b2:08:6d:a2:7c:e4:
+         24:10:ba:45:c2:c3:9e:07:b9:c3:74:10:f2:74:7f:c7:61:2e:
+         0e:45:33:00:c4:19:32:61:2b:58:0a:f4:51:7a:03:66:68:32:
+         27:c3:20:27:af:c4:93:64:45:0d:16:0e:ca:2b:86:f6:1c:22:
+         13:74:5a:d2:68:fc:45:11:b8:f1:13:26:e1:e4:c2:b7:b5:b8:
+         f8:fc:cc:6d:fb:87:3e:5d:53:31:ba:99:16:65:7b:b1:6c:e9:
+         78:8a
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAKFi4eXAojgNMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTkxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE5MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhOTESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTkwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAOir75HKBUoYopjE2JPQzpmpXgKNXVzj84RJa6dt7zh3
-LjLCnAkd9r5sxsSxyMMyciuEh/a6v/zPXAXCT2IjfgI/zmzGtpWGhNeXnxyHcCli
-ail8BqO3GBJnBzqJqvCZ/t9GALEvqjAeoh74KzeZIbiFU0KYSr3F+bRhYApzvA7R
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFKbPNQCWFa20JN4dWrlWom60LUbFMIGvBgNV
-HSMEgacwgaSAFKbPNQCWFa20JN4dWrlWom60LUbFoYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhOTESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTmCCQChYuHlwKI4DTAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAEQC2s/DByeE5AYi//x+yUd6eeGfaoRoqPtIGIBYD7Be70O/
-Omkjshg+eDqO/8XYdkyZ1Z++iv0Oebl+YsTCS294AedSGf8IhqeyFwwRA+9CH7Vb
-QAo6nypPVzE9sd2oUeEvsuRbLhufp9a3a3Zo+S6xOG8RIQ6BojIBe7zDH4JO
+MIICyDCCAjGgAwIBAgIJAOVBTVEpGrcxMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE5MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhOTAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE5MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhOTCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAyYotDVME6AK7vCffDrgzJQdUYdDZtggzW8PrTKEf
+n1HMqYMHFhWcaQtIdGI1X6OUODcPP19YJpo2C6IPu5tX//1wAdYoorZn7anIkBW1
+f5FgMv+WE6Q/CSNwLzhvJFRBlS+RWm6lqnfabFDuYuWFimdjffwHMLrzlpNsXV+e
+LgcCAwEAAaNQME4wHQYDVR0OBBYEFOhejnfRYWS7SK84lQxXFk7jdz01MB8GA1Ud
+IwQYMBaAFOhejnfRYWS7SK84lQxXFk7jdz01MAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAPiDcEBu0g5oKmkHTb+zvW1EPp0pJDrOG9g/ChOoPsghtonzk
+JBC6RcLDnge5w3QQ8nR/x2EuDkUzAMQZMmErWAr0UXoDZmgyJ8MgJ6/Ek2RFDRYO
+yiuG9hwiE3Ra0mj8RRG48RMm4eTCt7W4+PzMbfuHPl1TMbqZFmV7sWzpeIo=
 -----END CERTIFICATE-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            86:f1:45:12:31:c7:2b:2a
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+        Serial Number: 9711796497956498587 (0x86c73b75a7946c9b)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b6:50:43:73:64:12:40:26:54:0c:f9:67:e4:6a:
-                    ed:1f:18:e5:73:89:13:0f:c9:5f:6e:6e:c6:05:ad:
-                    2c:be:e4:6b:fd:c6:4f:ea:f3:6f:0d:f4:1a:34:7f:
-                    03:97:b0:a4:d1:6e:98:d2:36:fa:33:5d:51:37:de:
-                    8f:5b:3d:a0:07:52:c8:b7:71:30:71:fb:c3:a7:fa:
-                    61:f6:b4:28:be:9e:da:8b:8b:70:dd:8e:d0:a5:1a:
-                    00:70:1c:39:e1:cf:64:f8:ec:b4:83:b9:2b:67:fa:
-                    4d:ae:30:84:2f:2c:9d:6c:77:7e:09:95:43:77:6b:
-                    e1:9d:2b:c9:89:d9:a9:e5:8f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ab:08:de:44:e1:7d:cf:87:e5:0d:f9:b6:66:79:
+                    45:4b:18:3f:c4:c3:bc:3c:4e:10:1c:23:36:0b:17:
+                    8e:53:e9:1d:52:c0:d3:78:ce:74:30:13:d9:3e:98:
+                    8e:08:94:fe:76:94:55:7a:d9:73:87:01:5e:dd:c7:
+                    7b:5e:56:94:a6:5d:e6:8a:ab:22:03:cf:e1:7a:1c:
+                    7e:fb:16:c2:7c:f4:a3:6c:46:28:0b:15:15:e9:92:
+                    4f:50:a3:e3:04:25:91:6d:d0:71:2f:66:b3:20:64:
+                    db:f1:60:8d:3f:52:94:13:f1:f1:00:93:0b:20:be:
+                    f3:98:7d:c8:58:e3:f0:e9:c5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B7:F0:DB:5F:BA:CC:10:6D:A6:64:62:10:84:A5:C9:39:4C:3C:27:86
+                61:D2:DF:69:D2:65:98:6E:36:8B:4E:A5:34:33:A7:EF:84:5D:DE:F4
             X509v3 Authority Key Identifier: 
-                keyid:B7:F0:DB:5F:BA:CC:10:6D:A6:64:62:10:84:A5:C9:39:4C:3C:27:86
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta10/CN=localhost/emailAddress=ta10
-                serial:86:F1:45:12:31:C7:2B:2A
+                keyid:61:D2:DF:69:D2:65:98:6E:36:8B:4E:A5:34:33:A7:EF:84:5D:DE:F4
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        5b:6d:71:b8:4e:e3:27:06:d9:2a:47:ab:21:a3:df:94:a9:d8:
-        62:f1:6a:97:33:cc:1c:52:55:9a:f8:ec:6d:b4:91:17:4d:2a:
-        0e:03:b4:4b:00:83:10:8e:12:c1:05:67:56:9a:30:90:91:ad:
-        8b:dc:0a:eb:3f:28:5d:f9:d4:87:0d:f7:3a:5a:f6:47:52:9e:
-        af:4e:21:d4:2f:b8:40:4f:7f:81:1f:93:ca:bc:e6:04:c5:18:
-        65:5e:b1:dd:0b:3c:5e:3a:6f:48:e3:fc:b2:c8:37:8d:9f:14:
-        1b:a7:12:79:bb:2d:b9:fc:7a:01:ef:66:c6:d4:c2:44:01:49:
-        23:a9
+         48:43:2e:21:5e:c5:85:b1:97:37:72:7a:4a:a3:c0:db:5f:c4:
+         42:51:d0:3e:f5:20:43:f6:72:61:b3:fb:8f:13:71:36:0e:8e:
+         33:8c:14:7d:c2:39:ed:36:a9:55:db:bd:24:de:96:2c:b2:61:
+         d5:95:36:97:e4:b6:17:d3:a5:6c:8c:96:1a:89:54:ab:43:f0:
+         76:b1:f6:f1:4a:0d:69:79:ea:95:38:76:c8:5b:cc:99:ca:ba:
+         0d:71:7d:0f:d0:31:8c:94:a9:2d:7b:91:56:98:a1:ea:75:08:
+         ea:fe:03:e0:23:09:32:00:88:1e:83:f6:fe:df:40:3c:78:25:
+         ae:e5
 -----BEGIN CERTIFICATE-----
-MIIDYDCCAsmgAwIBAgIJAIbxRRIxxysqMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQ0wCwYDVQQLEwR0YTEwMRIwEAYDVQQDEwlsb2NhbGhv
-c3QxEzARBgkqhkiG9w0BCQEWBHRhMTAwHhcNMTEwNDExMjIzNzU1WhcNMTQwMTA1
-MjIzNzU1WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEG
-A1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMDES
-MBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQC2UENzZBJAJlQM+Wfkau0fGOVziRMPyV9ubsYF
-rSy+5Gv9xk/q828N9Bo0fwOXsKTRbpjSNvozXVE33o9bPaAHUsi3cTBx+8On+mH2
-tCi+ntqLi3DdjtClGgBwHDnhz2T47LSDuStn+k2uMIQvLJ1sd34JlUN3a+GdK8mJ
-2anljwIDAQABo4HlMIHiMB0GA1UdDgQWBBS38NtfuswQbaZkYhCEpck5TDwnhjCB
-sgYDVR0jBIGqMIGngBS38NtfuswQbaZkYhCEpck5TDwnhqGBg6SBgDB+MQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFy
-azENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMDESMBAGA1UEAxMJbG9jYWxo
-b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwggkAhvFFEjHHKyowDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOBgQBbbXG4TuMnBtkqR6sho9+Uqdhi8WqXM8wcUlWa
-+OxttJEXTSoOA7RLAIMQjhLBBWdWmjCQka2L3ArrPyhd+dSHDfc6WvZHUp6vTiHU
-L7hAT3+BH5PKvOYExRhlXrHdCzxeOm9I4/yyyDeNnxQbpxJ5uy25/HoB72bG1MJE
-AUkjqQ==
+MIICzDCCAjWgAwIBAgIJAIbHO3WnlGybMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTENMAsGA1UECwwEdGExMDESMBAGA1UEAwwJbG9jYWxo
+b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwMB4XDTEzMTIxMzAwMTMzOVoXDTE2MDkw
+ODAwMTMzOVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQ0wCwYDVQQLDAR0YTEw
+MRIwEAYDVQQDDAlsb2NhbGhvc3QxEzARBgkqhkiG9w0BCQEWBHRhMTAwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAKsI3kThfc+H5Q35tmZ5RUsYP8TDvDxOEBwj
+NgsXjlPpHVLA03jOdDAT2T6YjgiU/naUVXrZc4cBXt3He15WlKZd5oqrIgPP4Xoc
+fvsWwnz0o2xGKAsVFemST1Cj4wQlkW3QcS9msyBk2/FgjT9SlBPx8QCTCyC+85h9
+yFjj8OnFAgMBAAGjUDBOMB0GA1UdDgQWBBRh0t9p0mWYbjaLTqU0M6fvhF3e9DAf
+BgNVHSMEGDAWgBRh0t9p0mWYbjaLTqU0M6fvhF3e9DAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4GBAEhDLiFexYWxlzdyekqjwNtfxEJR0D71IEP2cmGz+48T
+cTYOjjOMFH3COe02qVXbvSTeliyyYdWVNpfkthfTpWyMlhqJVKtD8Hax9vFKDWl5
+6pU4dshbzJnKug1xfQ/QMYyUqS17kVaYoep1COr+A+AjCTIAiB6D9v7fQDx4Ja7l
 -----END CERTIFICATE-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            d7:f1:84:58:4b:42:ce:33
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+        Serial Number: 10111560406944601325 (0x8c537a9de4d654ed)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a3:c5:d4:23:f8:e8:a4:02:1f:38:cd:53:dc:7c:
-                    e8:3c:49:bd:14:c1:c7:a2:b7:00:7a:d2:d1:c8:01:
-                    7c:9b:f7:78:50:95:07:69:90:a0:7a:25:0f:55:55:
-                    f7:b2:33:ae:ae:66:64:5c:4c:86:66:e0:28:e2:63:
-                    8c:11:5f:ee:a4:af:77:86:c2:c0:18:0d:24:18:5f:
-                    26:ff:67:cc:f4:f9:7d:0c:e7:d7:0c:01:e8:85:57:
-                    f4:a8:d8:2c:f1:ec:2f:c7:8c:34:d4:3d:d3:1b:5c:
-                    2d:44:bd:d1:a6:35:d2:21:36:f9:31:ac:24:cb:ec:
-                    7b:70:c8:10:97:c8:8e:37:19
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:f3:d5:2f:b4:3e:12:ee:e5:01:6a:41:a4:09:1b:
+                    12:5f:f3:d5:a2:7e:3c:d8:6f:6f:a7:30:af:72:3d:
+                    f4:f4:31:30:94:b9:09:d8:2f:36:ba:12:61:56:8c:
+                    87:f9:52:6f:8b:b5:28:d1:23:93:f3:20:d4:b5:2d:
+                    ca:29:10:f5:10:7b:ad:d6:ee:de:40:22:d9:10:32:
+                    30:93:27:22:6d:87:f9:ed:85:16:c2:6d:da:24:51:
+                    db:1a:00:53:2b:65:4a:ce:24:0f:cf:57:f1:c0:51:
+                    9e:0c:ac:2f:17:5d:72:c1:f4:8d:83:20:41:d3:10:
+                    5f:f2:e0:2d:9f:ec:da:97:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CE:A0:CF:69:A4:17:A0:54:BE:C3:CB:28:70:86:6A:BD:3B:DE:E4:CC
+                BD:98:0D:A4:4D:61:87:11:83:C8:53:D1:C9:62:9D:ED:45:61:DD:42
             X509v3 Authority Key Identifier: 
-                keyid:CE:A0:CF:69:A4:17:A0:54:BE:C3:CB:28:70:86:6A:BD:3B:DE:E4:CC
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta11/CN=localhost/emailAddress=ta11
-                serial:D7:F1:84:58:4B:42:CE:33
+                keyid:BD:98:0D:A4:4D:61:87:11:83:C8:53:D1:C9:62:9D:ED:45:61:DD:42
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        89:34:9b:f9:55:53:63:83:82:0e:d0:f1:e5:0c:e3:4e:4b:2f:
-        54:20:2b:70:00:56:08:b4:18:88:59:e2:66:3e:5c:b6:0a:74:
-        16:bc:43:61:35:1e:df:e5:f6:f6:7e:de:87:18:61:b7:70:b0:
-        93:e8:5a:19:1d:01:a7:43:ca:38:ea:d2:e2:75:0e:3e:d2:b5:
-        91:57:1e:30:29:aa:2a:26:53:1b:9e:56:ad:61:41:3c:04:bb:
-        a5:af:da:75:63:5e:bb:31:21:f9:4c:dc:d0:c2:4c:90:07:45:
-        ed:32:0d:c0:c8:e9:6f:72:b5:ae:19:f2:88:9e:50:5c:5a:34:
-        47:a9
+         36:46:25:95:5e:65:37:e1:c4:14:31:7a:2a:a8:16:c0:bf:77:
+         ae:6a:17:f6:f2:dc:7c:0c:84:52:bb:07:4c:cb:1c:4e:80:b3:
+         55:74:15:69:40:a2:54:e9:e5:f8:2e:2f:b2:c9:37:ef:3d:7f:
+         87:64:02:e3:7c:f2:ec:97:77:b4:63:77:80:c1:61:25:fb:d5:
+         e0:26:c1:89:f0:0e:5d:65:d4:ba:d7:55:7b:ce:af:77:55:65:
+         96:7a:8d:7d:e5:79:a0:88:13:7a:cf:cf:4e:4d:a8:34:2d:3b:
+         f3:b2:44:f9:8b:c9:91:44:36:0f:94:eb:45:dd:2d:03:68:3e:
+         38:2e
 -----BEGIN CERTIFICATE-----
-MIIDYDCCAsmgAwIBAgIJANfxhFhLQs4zMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQ0wCwYDVQQLEwR0YTExMRIwEAYDVQQDEwlsb2NhbGhv
-c3QxEzARBgkqhkiG9w0BCQEWBHRhMTEwHhcNMTEwNDExMjIzNzU1WhcNMTQwMTA1
-MjIzNzU1WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEG
-A1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMTES
-MBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCjxdQj+OikAh84zVPcfOg8Sb0UwceitwB60tHI
-AXyb93hQlQdpkKB6JQ9VVfeyM66uZmRcTIZm4CjiY4wRX+6kr3eGwsAYDSQYXyb/
-Z8z0+X0M59cMAeiFV/So2Czx7C/HjDTUPdMbXC1EvdGmNdIhNvkxrCTL7HtwyBCX
-yI43GQIDAQABo4HlMIHiMB0GA1UdDgQWBBTOoM9ppBegVL7Dyyhwhmq9O97kzDCB
-sgYDVR0jBIGqMIGngBTOoM9ppBegVL7Dyyhwhmq9O97kzKGBg6SBgDB+MQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFy
-azENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMTESMBAGA1UEAxMJbG9jYWxo
-b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExggkA1/GEWEtCzjMwDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOBgQCJNJv5VVNjg4IO0PHlDONOSy9UICtwAFYItBiI
-WeJmPly2CnQWvENhNR7f5fb2ft6HGGG3cLCT6FoZHQGnQ8o46tLidQ4+0rWRVx4w
-KaoqJlMbnlatYUE8BLulr9p1Y167MSH5TNzQwkyQB0XtMg3AyOlvcrWuGfKInlBc
-WjRHqQ==
+MIICzDCCAjWgAwIBAgIJAIxTep3k1lTtMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTENMAsGA1UECwwEdGExMTESMBAGA1UEAwwJbG9jYWxo
+b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExMB4XDTEzMTIxMzAwMTMzOVoXDTE2MDkw
+ODAwMTMzOVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQ0wCwYDVQQLDAR0YTEx
+MRIwEAYDVQQDDAlsb2NhbGhvc3QxEzARBgkqhkiG9w0BCQEWBHRhMTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAPPVL7Q+Eu7lAWpBpAkbEl/z1aJ+PNhvb6cw
+r3I99PQxMJS5CdgvNroSYVaMh/lSb4u1KNEjk/Mg1LUtyikQ9RB7rdbu3kAi2RAy
+MJMnIm2H+e2FFsJt2iRR2xoAUytlSs4kD89X8cBRngysLxddcsH0jYMgQdMQX/Lg
+LZ/s2pd9AgMBAAGjUDBOMB0GA1UdDgQWBBS9mA2kTWGHEYPIU9HJYp3tRWHdQjAf
+BgNVHSMEGDAWgBS9mA2kTWGHEYPIU9HJYp3tRWHdQjAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4GBADZGJZVeZTfhxBQxeiqoFsC/d65qF/by3HwMhFK7B0zL
+HE6As1V0FWlAolTp5fguL7LJN+89f4dkAuN88uyXd7Rjd4DBYSX71eAmwYnwDl1l
+1LrXVXvOr3dVZZZ6jX3leaCIE3rPz05NqDQtO/OyRPmLyZFENg+U60XdLQNoPjgu
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/crl/ch1.1_ta4_crl.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/crl/ch1.1_ta4_crl.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,32 +1,32 @@
 Certificate Revocation List (CRL):
         Version 1 (0x0)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1.1_ta4/emailAddress=ch1.1_ta4
-        Last Update: Apr 11 22:37:52 2011 GMT
-        Next Update: Jan  5 22:37:52 2014 GMT
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: /C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1.1_ta4/emailAddress=ch1.1_ta4
+        Last Update: Dec 13 00:13:38 2013 GMT
+        Next Update: Sep  8 00:13:38 2016 GMT
 Revoked Certificates:
     Serial Number: 07
-        Revocation Date: Apr 11 22:37:40 2011 GMT
+        Revocation Date: Dec 13 00:13:34 2013 GMT
     Serial Number: 23
-        Revocation Date: Apr 11 22:37:50 2011 GMT
+        Revocation Date: Dec 13 00:13:37 2013 GMT
     Serial Number: 27
-        Revocation Date: Apr 11 22:37:51 2011 GMT
+        Revocation Date: Dec 13 00:13:38 2013 GMT
     Signature Algorithm: sha256WithRSAEncryption
-        43:11:2b:b7:e3:53:78:1d:44:94:46:89:65:a1:5a:92:32:97:
-        7a:77:06:4f:c0:49:01:c2:ad:32:d5:c8:f4:03:db:cb:71:5c:
-        7d:4c:b9:48:ae:7f:3d:18:11:9d:5d:f2:c0:75:a5:88:eb:0d:
-        b3:05:ed:0e:94:a0:19:2b:69:cf:6e:9a:04:bd:81:25:e8:aa:
-        7c:82:8d:37:c7:01:5f:21:79:5f:ed:ae:ff:79:e3:26:98:a9:
-        54:ba:53:3b:9c:bd:c4:67:24:5d:ec:a7:4f:d3:93:7e:1c:73:
-        48:79:e5:55:06:f5:88:49:10:4a:da:0a:66:05:5c:b2:0f:81:
-        37:c6
+         30:87:00:ce:08:9a:17:d1:76:60:ae:cc:53:9c:5d:89:51:72:
+         2b:f6:63:3f:72:73:63:70:4f:2d:f8:62:63:ca:b4:59:3e:e5:
+         4f:fc:90:81:9f:a8:72:2f:3a:4b:c0:db:f2:c3:7c:ec:c7:8a:
+         cc:6f:7e:a1:88:2a:6f:a1:e3:99:03:7d:1d:69:df:6b:35:f6:
+         00:1f:58:94:d8:fa:65:1c:a8:c4:a1:ed:69:80:ee:2a:72:b8:
+         34:04:89:f2:5a:26:96:f0:23:37:9f:5d:18:49:e8:74:8d:af:
+         5a:03:b8:ec:e0:b8:7b:1c:ca:29:7b:1d:54:b3:1b:73:89:e4:
+         ee:69
 -----BEGIN X509 CRL-----
-MIIBdzCB4TANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-Q2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTES
-MBAGA1UEAxQJY2gxLjFfdGE0MRgwFgYJKoZIhvcNAQkBFgljaDEuMV90YTQXDTEx
-MDQxMTIyMzc1MloXDTE0MDEwNTIyMzc1MlowPDASAgEHFw0xMTA0MTEyMjM3NDBa
-MBICASMXDTExMDQxMTIyMzc1MFowEgIBJxcNMTEwNDExMjIzNzUxWjANBgkqhkiG
-9w0BAQsFAAOBgQBDESu341N4HUSURolloVqSMpd6dwZPwEkBwq0y1cj0A9vLcVx9
-TLlIrn89GBGdXfLAdaWI6w2zBe0OlKAZK2nPbpoEvYEl6Kp8go03xwFfIXlf7a7/
-eeMmmKlUulM7nL3EZyRd7KdP05N+HHNIeeVVBvWISRBK2gpmBVyyD4E3xg==
+MIIBeDCB4jANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJVUzETMBEGA1UECAwK
+Q2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUx
+EjAQBgNVBAMMCWNoMS4xX3RhNDEYMBYGCSqGSIb3DQEJARYJY2gxLjFfdGE0Fw0x
+MzEyMTMwMDEzMzhaFw0xNjA5MDgwMDEzMzhaMDwwEgIBBxcNMTMxMjEzMDAxMzM0
+WjASAgEjFw0xMzEyMTMwMDEzMzdaMBICAScXDTEzMTIxMzAwMTMzOFowDQYJKoZI
+hvcNAQELBQADgYEAMIcAzgiaF9F2YK7MU5xdiVFyK/ZjP3JzY3BPLfhiY8q0WT7l
+T/yQgZ+oci86S8Db8sN87MeKzG9+oYgqb6HjmQN9HWnfazX2AB9YlNj6ZRyoxKHt
+aYDuKnK4NASJ8lomlvAjN59dGEnodI2vWgO47OC4exzKKXsdVLMbc4nk7mk=
 -----END X509 CRL-----
--- a/src/tests/ro_data/signing_certs/produced/crl/ch1_ta4_crl.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/crl/ch1_ta4_crl.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,30 +1,30 @@
 Certificate Revocation List (CRL):
         Version 1 (0x0)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta4/emailAddress=ch1_ta4
-        Last Update: Apr 11 22:37:50 2011 GMT
-        Next Update: Jan  5 22:37:50 2014 GMT
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: /C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta4/emailAddress=ch1_ta4
+        Last Update: Dec 13 00:13:37 2013 GMT
+        Next Update: Sep  8 00:13:37 2016 GMT
 Revoked Certificates:
     Serial Number: 07
-        Revocation Date: Apr 11 22:37:40 2011 GMT
+        Revocation Date: Dec 13 00:13:34 2013 GMT
     Serial Number: 23
-        Revocation Date: Apr 11 22:37:50 2011 GMT
+        Revocation Date: Dec 13 00:13:37 2013 GMT
     Signature Algorithm: sha256WithRSAEncryption
-        9b:df:54:93:58:08:f4:fc:9b:4c:1c:91:ba:dd:15:38:3c:47:
-        d3:68:e8:ed:0d:cd:f5:0e:56:59:e3:55:ac:9d:5a:57:e8:36:
-        ea:60:30:f3:cb:79:93:0c:65:ba:44:9a:b1:b4:56:1e:98:bd:
-        c8:b9:34:7f:ec:79:13:da:2d:37:65:02:5b:29:a6:39:5f:55:
-        a3:00:a2:a0:0a:0b:c7:81:9d:13:da:0c:3e:09:ab:a9:80:3c:
-        ef:99:1d:1c:88:e2:c7:c2:de:4c:a0:f6:5b:a2:0e:7e:08:7f:
-        06:25:03:ec:0e:d0:ce:be:25:0b:52:34:68:94:e3:d1:f3:6f:
-        0b:d6
+         74:4b:93:6c:3f:55:63:8a:7f:48:4c:a5:70:aa:bf:a8:e6:bf:
+         d0:c6:76:0d:22:53:8b:aa:58:bd:ef:b5:b1:65:c1:60:35:3b:
+         5a:cd:e0:52:85:d8:32:e3:f4:ac:73:63:91:1b:a3:ec:df:17:
+         50:d7:1c:12:e8:30:9f:d1:71:cd:58:41:8d:bc:0e:d9:a3:ab:
+         1a:5d:7c:47:4b:f8:02:09:4f:8a:28:e5:1b:ef:45:3d:b1:c3:
+         da:fd:4b:cb:10:45:c3:12:55:42:6b:26:1e:39:7e:1c:3f:6d:
+         3b:a2:79:62:25:94:b3:f0:73:c0:4e:8f:12:16:15:2d:fb:e7:
+         6d:23
 -----BEGIN X509 CRL-----
-MIIBXzCByTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-Q2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEQ
-MA4GA1UEAxQHY2gxX3RhNDEWMBQGCSqGSIb3DQEJARYHY2gxX3RhNBcNMTEwNDEx
-MjIzNzUwWhcNMTQwMTA1MjIzNzUwWjAoMBICAQcXDTExMDQxMTIyMzc0MFowEgIB
-IxcNMTEwNDExMjIzNzUwWjANBgkqhkiG9w0BAQsFAAOBgQCb31STWAj0/JtMHJG6
-3RU4PEfTaOjtDc31DlZZ41WsnVpX6DbqYDDzy3mTDGW6RJqxtFYemL3IuTR/7HkT
-2i03ZQJbKaY5X1WjAKKgCgvHgZ0T2gw+CaupgDzvmR0ciOLHwt5MoPZbog5+CH8G
-JQPsDtDOviULUjRolOPR828L1g==
+MIIBYDCByjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwK
+Q2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUx
+EDAOBgNVBAMMB2NoMV90YTQxFjAUBgkqhkiG9w0BCQEWB2NoMV90YTQXDTEzMTIx
+MzAwMTMzN1oXDTE2MDkwODAwMTMzN1owKDASAgEHFw0xMzEyMTMwMDEzMzRaMBIC
+ASMXDTEzMTIxMzAwMTMzN1owDQYJKoZIhvcNAQELBQADgYEAdEuTbD9VY4p/SEyl
+cKq/qOa/0MZ2DSJTi6pYve+1sWXBYDU7Ws3gUoXYMuP0rHNjkRuj7N8XUNccEugw
+n9FxzVhBjbwO2aOrGl18R0v4AglPiijlG+9FPbHD2v1LyxBFwxJVQmsmHjl+HD9t
+O6J5YiWUs/BzwE6PEhYVLfvnbSM=
 -----END X509 CRL-----
--- a/src/tests/ro_data/signing_certs/produced/crl/ch5_ta1_crl.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/crl/ch5_ta1_crl.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,27 +1,27 @@
 Certificate Revocation List (CRL):
         Version 1 (0x0)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch5_ta1/emailAddress=ch5_ta1
-        Last Update: Apr 11 22:37:40 2011 GMT
-        Next Update: Jan  5 22:37:40 2014 GMT
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: /C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch5_ta1/emailAddress=ch5_ta1
+        Last Update: Dec 13 00:13:34 2013 GMT
+        Next Update: Sep  8 00:13:34 2016 GMT
 Revoked Certificates:
     Serial Number: 07
-        Revocation Date: Apr 11 22:37:40 2011 GMT
+        Revocation Date: Dec 13 00:13:34 2013 GMT
     Signature Algorithm: sha256WithRSAEncryption
-        08:22:74:6f:ef:f6:1a:81:8a:04:6e:50:87:c8:95:f5:ba:de:
-        a9:f8:03:68:2b:c9:de:39:58:03:a9:cc:4d:04:ed:82:05:fa:
-        a7:54:2d:a5:a6:55:e9:37:1b:56:50:c4:ef:75:50:d1:d6:da:
-        42:dc:90:b2:e3:6f:4b:4e:29:45:70:ec:72:38:05:05:0e:0c:
-        3e:a0:a5:06:2e:57:50:d4:ea:b8:3e:cd:3e:20:a1:36:d6:d5:
-        81:a5:4c:ab:89:28:f5:d6:36:bf:42:4a:8d:50:12:79:ae:67:
-        24:7a:12:c7:73:76:b7:8b:1e:f7:fa:ee:25:f9:8e:8e:8e:66:
-        5d:21
+         ad:bf:ba:d1:11:86:e0:59:d6:ef:e1:1e:e6:03:40:54:85:f2:
+         f3:58:cd:44:5b:6d:43:4b:01:70:f7:20:cc:8a:24:58:9f:77:
+         74:74:66:02:a8:7a:8f:e7:64:65:bc:df:d8:f0:ad:72:cd:f2:
+         2a:ff:dc:41:dd:f3:c0:45:ad:cf:3d:ab:22:37:36:48:f5:9a:
+         4e:ef:ca:c0:5b:e0:f1:9f:91:a3:37:05:18:ca:cb:02:a9:b7:
+         5b:de:bd:c5:6c:62:8a:e6:06:1b:7c:70:f1:9b:6c:bc:0a:5c:
+         cd:4c:b6:e4:58:f8:e9:22:5f:29:17:54:77:64:a3:30:1b:f1:
+         f8:4e
 -----BEGIN X509 CRL-----
-MIIBSzCBtTANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-Q2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEQ
-MA4GA1UEAxQHY2g1X3RhMTEWMBQGCSqGSIb3DQEJARYHY2g1X3RhMRcNMTEwNDEx
-MjIzNzQwWhcNMTQwMTA1MjIzNzQwWjAUMBICAQcXDTExMDQxMTIyMzc0MFowDQYJ
-KoZIhvcNAQELBQADgYEACCJ0b+/2GoGKBG5Qh8iV9breqfgDaCvJ3jlYA6nMTQTt
-ggX6p1QtpaZV6TcbVlDE73VQ0dbaQtyQsuNvS04pRXDscjgFBQ4MPqClBi5XUNTq
-uD7NPiChNtbVgaVMq4ko9dY2v0JKjVASea5nJHoSx3N2t4se9/ruJfmOjo5mXSE=
+MIIBTDCBtjANBgkqhkiG9w0BAQsFADBxMQswCQYDVQQGEwJVUzETMBEGA1UECAwK
+Q2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUx
+EDAOBgNVBAMMB2NoNV90YTExFjAUBgkqhkiG9w0BCQEWB2NoNV90YTEXDTEzMTIx
+MzAwMTMzNFoXDTE2MDkwODAwMTMzNFowFDASAgEHFw0xMzEyMTMwMDEzMzRaMA0G
+CSqGSIb3DQEBCwUAA4GBAK2/utERhuBZ1u/hHuYDQFSF8vNYzURbbUNLAXD3IMyK
+JFifd3R0ZgKoeo/nZGW839jwrXLN8ir/3EHd88BFrc89qyI3Nkj1mk7vysBb4PGf
+kaM3BRjKywKpt1vevcVsYormBht8cPGbbLwKXM1MtuRY+OkiXykXVHdkozAb8fhO
 -----END X509 CRL-----
--- a/src/tests/ro_data/signing_certs/produced/crl/ta5_crl.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/crl/ta5_crl.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,35 +1,35 @@
 Certificate Revocation List (CRL):
         Version 1 (0x0)
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta5/emailAddress=ta5
-        Last Update: Apr 11 22:37:52 2011 GMT
-        Next Update: Jan  5 22:37:52 2014 GMT
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: /C=US/ST=California/L=Santa Clara/O=pkg5/CN=ta5/emailAddress=ta5
+        Last Update: Dec 13 00:13:38 2013 GMT
+        Next Update: Sep  8 00:13:38 2016 GMT
 Revoked Certificates:
     Serial Number: 07
-        Revocation Date: Apr 11 22:37:40 2011 GMT
+        Revocation Date: Dec 13 00:13:34 2013 GMT
     Serial Number: 23
-        Revocation Date: Apr 11 22:37:50 2011 GMT
+        Revocation Date: Dec 13 00:13:37 2013 GMT
     Serial Number: 27
-        Revocation Date: Apr 11 22:37:51 2011 GMT
+        Revocation Date: Dec 13 00:13:38 2013 GMT
     Serial Number: 28
-        Revocation Date: Apr 11 22:37:52 2011 GMT
+        Revocation Date: Dec 13 00:13:38 2013 GMT
     Signature Algorithm: sha256WithRSAEncryption
-        58:70:11:73:97:29:40:34:77:df:1e:5d:b1:77:6b:9a:6b:00:
-        33:d1:a3:50:34:05:f6:ba:ed:eb:c7:23:81:e5:da:56:3f:ac:
-        3a:32:e6:ff:e2:45:da:68:7d:03:70:ea:00:f4:f2:6d:52:f9:
-        5e:fc:0f:a9:83:1a:dd:a0:17:9b:6e:ee:9e:42:b5:25:e1:9f:
-        e1:38:db:99:21:71:53:fe:b6:ce:b4:57:1c:b7:d7:99:eb:6e:
-        a8:ba:65:e2:6d:16:53:7e:6c:6d:93:b0:0c:f7:48:ec:16:71:
-        ce:84:a6:27:c5:88:82:8d:76:09:c5:74:8f:5d:b9:29:46:6a:
-        e3:ae
+         4d:b9:05:ae:86:33:2a:45:ac:b2:d2:a6:82:a4:05:4d:95:20:
+         a6:3d:ed:57:b2:07:21:d4:8f:01:75:ad:4b:3d:62:9a:eb:85:
+         57:64:7e:e1:7b:04:54:25:b1:15:19:74:19:81:a5:82:f9:d7:
+         cb:d5:f3:5f:cb:54:21:b8:47:58:22:da:b8:3e:dc:31:53:4b:
+         c9:85:c4:d2:c0:ba:4d:57:60:ce:95:75:95:29:2d:3a:be:3e:
+         a2:c6:bc:41:1f:60:3a:03:ed:b7:c2:9d:9c:50:32:83:d3:9b:
+         8d:06:4a:72:1e:5e:13:a8:9d:5d:65:16:ec:87:3d:e0:b4:dc:
+         c4:16
 -----BEGIN X509 CRL-----
-MIIBfzCB6TANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
-Q2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTEM
-MAoGA1UEAxMDdGE1MRIwEAYJKoZIhvcNAQkBFgN0YTUXDTExMDQxMTIyMzc1MloX
-DTE0MDEwNTIyMzc1MlowUDASAgEHFw0xMTA0MTEyMjM3NDBaMBICASMXDTExMDQx
-MTIyMzc1MFowEgIBJxcNMTEwNDExMjIzNzUxWjASAgEoFw0xMTA0MTEyMjM3NTJa
-MA0GCSqGSIb3DQEBCwUAA4GBAFhwEXOXKUA0d98eXbF3a5prADPRo1A0Bfa67evH
-I4Hl2lY/rDoy5v/iRdpofQNw6gD08m1S+V78D6mDGt2gF5tu7p5CtSXhn+E425kh
-cVP+ts60Vxy315nrbqi6ZeJtFlN+bG2TsAz3SOwWcc6EpifFiIKNdgnFdI9duSlG
-auOu
+MIIBgDCB6jANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzETMBEGA1UECAwK
+Q2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTALBgNVBAoMBHBrZzUx
+DDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3DQEJARYDdGE1Fw0xMzEyMTMwMDEzMzha
+Fw0xNjA5MDgwMDEzMzhaMFAwEgIBBxcNMTMxMjEzMDAxMzM0WjASAgEjFw0xMzEy
+MTMwMDEzMzdaMBICAScXDTEzMTIxMzAwMTMzOFowEgIBKBcNMTMxMjEzMDAxMzM4
+WjANBgkqhkiG9w0BAQsFAAOBgQBNuQWuhjMqRayy0qaCpAVNlSCmPe1Xsgch1I8B
+da1LPWKa64VXZH7hewRUJbEVGXQZgaWC+dfL1fNfy1QhuEdYItq4PtwxU0vJhcTS
+wLpNV2DOlXWVKS06vj6ixrxBH2A6A+23wp2cUDKD05uNBkpyHl4TqJ1dZRbshz3g
+tNzEFg==
 -----END X509 CRL-----
--- a/src/tests/ro_data/signing_certs/produced/index	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/index	Thu Mar 27 22:03:22 2014 +0530
@@ -1,47 +1,47 @@
-V	140105223738Z		01	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta1/emailAddress=ch1_ta1
-V	140105223739Z		02	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
-V	140105223739Z		03	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
-V	140105223739Z		04	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch4_ta1/emailAddress=ch4_ta1
-V	140105223739Z		05	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch5_ta1/emailAddress=ch5_ta1
-V	140105223740Z		06	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch5_ta1/emailAddress=cs1_ch5_ta1
-R	140105223740Z	110411223740Z	07	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs2_ch5_ta1/emailAddress=cs2_ch5_ta1
-V	140105223740Z		08	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch5.1_ta1/emailAddress=ch5.1_ta1
-V	140105223741Z		09	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch5.1_ta1/emailAddress=cs1_ch5.1_ta1
-V	140105223741Z		0A	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch5.2_ta1/emailAddress=ch5.2_ta1
-V	140105223742Z		0B	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch5.2_ta1/emailAddress=cs1_ch5.2_ta1
-V	140105223742Z		0C	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch4.3_ta1/emailAddress=ch4.3_ta1
-V	140105223742Z		0D	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch5.3_ta1/emailAddress=ch5.3_ta1
-V	140105223742Z		0E	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch5.3_ta1/emailAddress=cs1_ch5.3_ta1
-V	140105223743Z		0F	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ta2/emailAddress=cs1_ta2
-V	140105223744Z		10	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta3/emailAddress=ch1_ta3
-V	140105223744Z		11	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3
-V	140105223744Z		12	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3
-V	090102010101Z		13	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs3_ch1_ta3/emailAddress=cs3_ch1_ta3
-V	350102010101Z		14	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs4_ch1_ta3/emailAddress=cs4_ch1_ta3
-V	140105223745Z		15	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3
-V	140105223745Z		16	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs6_ch1_ta3/emailAddress=cs6_ch1_ta3
-V	140105223746Z		17	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs7_ch1_ta3/emailAddress=cs7_ch1_ta3
-V	140105223746Z		18	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
-V	140105223746Z		19	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3
-V	140105223747Z		1A	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1.1_ta3/emailAddress=ch1.1_ta3
-V	140105223747Z		1B	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1.1_ta3/emailAddress=cs1_ch1.1_ta3
-V	090102010101Z		1C	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1.2_ta3/emailAddress=ch1.2_ta3
-V	140105223748Z		1D	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1.2_ta3/emailAddress=cs1_ch1.2_ta3
-V	350102010101Z		1E	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1.3_ta3/emailAddress=ch1.3_ta3
-V	140105223748Z		1F	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1.3_ta3/emailAddress=cs1_ch1.3_ta3
-V	350102010101Z		20	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1.4_ta3/emailAddress=ch1.4_ta3
-V	140105223749Z		21	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1.4_ta3/emailAddress=cs1_ch1.4_ta3
-V	140105223749Z		22	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta4/emailAddress=ch1_ta4
-R	140105223750Z	110411223750Z	23	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4
-V	140105223750Z		24	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs2_ch1_ta4/emailAddress=cs2_ch1_ta4
-V	140105223750Z		25	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs3_ch1_ta4/emailAddress=cs3_ch1_ta4
-V	140105223751Z		26	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1.1_ta4/emailAddress=ch1.1_ta4
-R	140105223751Z	110411223751Z	27	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1.1_ta4/emailAddress=cs1_ch1.1_ta4
-R	140105223752Z	110411223752Z	28	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta5/emailAddress=ch1_ta5
-V	140105223752Z		29	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1_ta5/emailAddress=cs1_ch1_ta5
-V	140105223754Z		2A	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/OU=cs1_ta6/CN=localhost/emailAddress=cs1_ta6
-V	140105223754Z		2B	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/OU=cs1_ta7/CN=localhost/emailAddress=cs1_ta7
-V	140105223754Z		2C	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/OU=cs1_ta8/CN=localhost/emailAddress=cs1_ta8
-V	140105223755Z		2D	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/OU=cs1_ta9/CN=localhost/emailAddress=cs1_ta9
-V	140105223755Z		2E	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/OU=cs1_ta10/CN=localhost/emailAddress=cs1_ta10
-V	140105223755Z		2F	unknown	/C=US/ST=California/L=Menlo Park/O=pkg5/OU=cs1_ta11/CN=localhost/emailAddress=cs1_ta11
+V	160908001334Z		01	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta1/emailAddress=ch1_ta1
+V	160908001334Z		02	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch2_ta1/emailAddress=ch2_ta1
+V	160908001334Z		03	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch3_ta1/emailAddress=ch3_ta1
+V	160908001334Z		04	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch4_ta1/emailAddress=ch4_ta1
+V	160908001334Z		05	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch5_ta1/emailAddress=ch5_ta1
+V	160908001334Z		06	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch5_ta1/emailAddress=cs1_ch5_ta1
+R	160908001334Z	131213001334Z	07	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs2_ch5_ta1/emailAddress=cs2_ch5_ta1
+V	160908001334Z		08	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch5.1_ta1/emailAddress=ch5.1_ta1
+V	160908001334Z		09	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch5.1_ta1/emailAddress=cs1_ch5.1_ta1
+V	160908001334Z		0A	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch5.2_ta1/emailAddress=ch5.2_ta1
+V	160908001335Z		0B	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch5.2_ta1/emailAddress=cs1_ch5.2_ta1
+V	160908001335Z		0C	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch4.3_ta1/emailAddress=ch4.3_ta1
+V	160908001335Z		0D	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch5.3_ta1/emailAddress=ch5.3_ta1
+V	160908001335Z		0E	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch5.3_ta1/emailAddress=cs1_ch5.3_ta1
+V	160908001335Z		0F	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ta2/emailAddress=cs1_ta2
+V	160908001335Z		10	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta3/emailAddress=ch1_ta3
+V	160908001335Z		11	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3
+V	160908001335Z		12	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3
+V	090102010101Z		13	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs3_ch1_ta3/emailAddress=cs3_ch1_ta3
+V	350102010101Z		14	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs4_ch1_ta3/emailAddress=cs4_ch1_ta3
+V	160908001336Z		15	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3
+V	160908001336Z		16	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs6_ch1_ta3/emailAddress=cs6_ch1_ta3
+V	160908001336Z		17	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs7_ch1_ta3/emailAddress=cs7_ch1_ta3
+V	160908001336Z		18	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3
+V	160908001336Z		19	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3
+V	160908001336Z		1A	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1.1_ta3/emailAddress=ch1.1_ta3
+V	160908001336Z		1B	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1.1_ta3/emailAddress=cs1_ch1.1_ta3
+V	090102010101Z		1C	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1.2_ta3/emailAddress=ch1.2_ta3
+V	160908001336Z		1D	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1.2_ta3/emailAddress=cs1_ch1.2_ta3
+V	350102010101Z		1E	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1.3_ta3/emailAddress=ch1.3_ta3
+V	160908001337Z		1F	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1.3_ta3/emailAddress=cs1_ch1.3_ta3
+V	350102010101Z		20	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1.4_ta3/emailAddress=ch1.4_ta3
+V	160908001337Z		21	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1.4_ta3/emailAddress=cs1_ch1.4_ta3
+V	160908001337Z		22	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta4/emailAddress=ch1_ta4
+R	160908001337Z	131213001337Z	23	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4
+V	160908001337Z		24	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs2_ch1_ta4/emailAddress=cs2_ch1_ta4
+V	160908001337Z		25	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs3_ch1_ta4/emailAddress=cs3_ch1_ta4
+V	160908001337Z		26	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1.1_ta4/emailAddress=ch1.1_ta4
+R	160908001338Z	131213001338Z	27	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1.1_ta4/emailAddress=cs1_ch1.1_ta4
+R	160908001338Z	131213001338Z	28	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=ch1_ta5/emailAddress=ch1_ta5
+V	160908001338Z		29	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/CN=cs1_ch1_ta5/emailAddress=cs1_ch1_ta5
+V	160908001338Z		2A	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/OU=cs1_ta6/CN=localhost/emailAddress=cs1_ta6
+V	160908001338Z		2B	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/OU=cs1_ta7/CN=localhost/emailAddress=cs1_ta7
+V	160908001338Z		2C	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/OU=cs1_ta8/CN=localhost/emailAddress=cs1_ta8
+V	160908001339Z		2D	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/OU=cs1_ta9/CN=localhost/emailAddress=cs1_ta9
+V	160908001339Z		2E	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/OU=cs1_ta10/CN=localhost/emailAddress=cs1_ta10
+V	160908001339Z		2F	unknown	/C=US/ST=California/L=Santa Clara/O=pkg5/OU=cs1_ta11/CN=localhost/emailAddress=cs1_ta11
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1.1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1.1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQChH1RDIGVjsvyL1/aokPAeuOkGN8sbyUdWOj/sfubuxprUFQ1k
-99V3L1IxbDaNLwd/DafPea9ocCt0pzCSHlX8KvS3w0cBV09luli/dXMCTEyoUT2C
-7lf6k2TWUwUSEDbJnMOvbFadIERLtLxn2AaZjvoyTMFPCVpG7AbPrOH6IQIDAQAB
-AoGAEQmRDXAViI9aqSbzDCwXWAhRi7jGn2+PPYz3SXi5zrHtmVOIkQ6r4eh9FoDM
-2+0HK+Yzwnqpk6+YyMMNHcZbbR3agEnwfL0TXE/WLR7x0FKq7jkEYo4o8F2+WaNf
-6EFd+3YFjWyN4HO4cDm6zVNu/YK7itBbBuWdXzKi3/J9bskCQQDSw6lKBlmPangw
-Q0odz7HNaTuFmyM7z4mxTAK6lWGgiLwgLV49/k/pajAo9E+ljg1cJ5aNcIY2wK7s
-V8fN4m1PAkEAw7QeC+EHB8xZER8Z+7HSgnZXvbjZghXUvvoKbQK6NybRkYg554Sq
-1lRiPpx3IFuy7DoPOmiHMSiZQSPj1x2ljwJBAMz9CmD57g+D0SO3vpViFR+g0whu
-TAV3JAex0xGgCpT1iGuPVJLdDuIJqo+alwCBOdNAmbg1EgScwUUTVzySlhcCQCDr
-W2KEJ7qYFSNcJ/K+prprTbcMMQpAwdieFsLfgpNkZDwmvhbDqjkDWMNPbnpy8lXq
-LkWU76jFO4JJlznIMuECQFcJ2+S+WaaS8CHkGclA/NF/YzciQMBZbbi8eRMED3iW
-DoWvdWM+TOJJ+2uEG62lssrJb668GnEY8M6ZdI5jWNc=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAN/aYIvG1lX30Fun
+WofSkHucRjGWXhWgx0Szec6u16+Zqf5txmkjCUVoZAHcoH6M7cm8FNOEYiqKITBI
+MJeUmYRp8MBGpHKCUTD+8PxgbOq4fVLO/eUgt59LAyF081g1Ou/34IRkBoQ2YuiC
+ZYIeVsfqHutlfbODnPzmumXEguNfAgMBAAECgYAnRt7Hx7SV0ux5GG0XBcgaGDps
+uvB5JQOxtzf5Hs5zXifon4Q/sEkRJ5bciMSUT8/tJJYW4tSCmEfoe9Ii1oz0zaPh
+nQ7JcKT8GPeiKWIZ9bP8nggCfhKLEIU7UMZWK0wQKSGIa84oIcDRvmFViH/+IYZK
+LWI8kJCwT8oAey19yQJBAP6Bs4dZjTDp9fFndefLh7U9W3Iv/aioXlTYO6cBe6zy
+xMZ2JlXn5q4ShmUf/JdoyG5tTbdgmbFixTCGZwEz/csCQQDhKqFra27TYuUp/rxv
+lfsHCSXp5FsOPmGNjE0U3AuPPrgXCngeDAFLSvConNxJ9mCD5kB5GMLBeuqEFSIF
+8P49AkAB6xxdUtF7oufVr//1hVU6ioHb9Hym/s3nOdIJSjuSbCoLjOxxDVRxz3Xv
+4TPYOFP6cRx622GNMr9lxD2WhrvNAkAlwGwIAp82OeKKQ/d8Df1klJgSuwK5RKQ+
+g0N5N9uITM+4rTyubPzajtoCqyoUDIbqFnTA2PHuVplzQ8fMjzdRAkAEal2tou53
+euNpN1JajivVxfbMn+o5BUxuSyiI/X/ANYhZU64cNzgqIgETkSJR8JIfauofbP/j
+pKSlFv+m4wBL
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1.1_ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1.1_ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQC4auO1v2Vm9LMyc6lkt92gSulw03tcG1t251ajcg6d+p+ypUfr
-P9uae0XSF3fKBbOVIhV4nqvzS/qDieYZVCJpGGe6uzcqtJNau5xoW+yxfqwBe7PZ
-kVeT60PmpjXhtcItyrtjrzXWtBaao3ocreH0+2NK/T1XmTO4HkHp+UKAMwIDAQAB
-AoGATJ2Dqq8wVnyUsgIhPsmwVnao0wnZNyPadOSZNuAcuH81t4c5AMAP4PcTw7ui
-NZj2yZ9WYj0xXKuVEO7KXH16qY8skQkH9ooVIOyy3V7r+/vmgJ+ey5R1AlkalJ+U
-7y/juiu4og9g8WwFqbu5zvUEVcwHE4qRpuaIzpcYdftClWECQQDyeuWwe5Uv4Jek
-o0sZuEr9VfjnXtcMkPSWP9ZPVXuyo4Kgx94f4m94IOuwWAZFEWIGDEgB5dBM+VgZ
-Kc3gOlsDAkEAwrM4tiObcQNBl3f9c8L2AZcOSRlqVBp00DA6x8j9FSxbpK7bmfW8
-9N37b1Mkm9bICoPuXZhyqF198uGVltcnEQJBALRqEKBhMz1uRCYxgV1frBwWbZ3p
-COTGrdVlJhXdKq5dzoHGdFUQ65NcG0EYHYIiTublGGahEX1UQOJoIlBl2vUCQQCw
-eJM5e3Kjb0kfSfGe4CHr9QdMuE2Ip2YjYOOWO5UwgMEbtiVzGanH4//GunxfB8DO
-zx/ZE5kxA3RqFY9pZd+RAkEA6eaGhnvreUcQQfRTSnyXf8AQPa5LzF/Dx9bUO/HU
-Un1M6et1+/bxf3ViW67Z0IX/+z+h+S8Nzk0ajIgmgv8qgQ==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALpAvn4bL5IRzNxE
+FHaHimqUtihOh1u8V0Z1YzhNkD56Rg6H6akEGn3lINyBmnl+G6vOUM5HVASYFtWm
+bRY8Uu/tQ8Wb08hIy0ddCB3RRP18x1RBETs+rrt/lKYTj4lsJLOoXuJdIECFK6Cs
+7aOoshVZ/K3oXXLuZOucMIwKlzL5AgMBAAECgYAVKIe7YbE8wcLo/t7oPCuQQgaT
+e6BK3pF3kpxL6BvLzS4qNmxn4+xygtYB1sNKq/XOxahOVrIHt5NYgAiCbyXoo7DB
+aV5VSYhU9uG1SfpOKQJZafIEtOQg/UFRVsnkH364M5ht5qigkzG4hfbSln/ZMeOO
+PgO0TqCaZSUxHEwDAQJBAPXMmvZ96IVL3YLDDoV5VR88TnHnsFjZXIHXjMHk2Mj0
+18lMuC0RlmlYL2AMdk4Dd4FhmUsGjWt3yvJDjjAGzKECQQDB+4NJkcBFa1C1oEdS
+IuxefQNkYWWGHCP48tKwAzxVGlgPmgE7SH4rkHgnYzRBL/w+StH9hHsK471VLgF7
+WK9ZAkADJoQ19JcuXjKQon9lJpD4vYUj4JxaBy8wWtrrAUvmB31cjyctLLSI1SCG
+UqKRjWnStrWISKU3Y2mugT8pTm0BAkEAnilvOz3ucet1DBHZ9PtqlAQEDwVmnLk3
+D1UVOdP5jj4DjPz5gheyX9zUSvEU+w2f8j5ZBwbMt+1GQzxWkvaVSQJACH2saMhm
+iqiXr2i4tuL2/7rpdfe221bYkPEmkapiPO21aiWJN+KD0xt2422YpAtfImP2FekB
+KNaULsqs5It7jg==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1.2_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1.2_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDHl716eHL2u29bygc02HCTlDnWnHOyWMb6EOuOx1Q5/Zo19Syk
-rubKopwHDFcFeMyLmC456HRzKL/3v9H7XRCd8Bl1nTX+UJd2cG0AeWYaL6/GEkUW
-Reo+8JA7Vp3t93C63vfsVSvusZv7HVVGZYbDG55QuYy50wJzquYeTRErvwIDAQAB
-AoGBALu8ktE7soc5zoj8AsNGQr3N0ol3J6w9rQtSFv95plPVotPWBWPxz8wSH8jR
-ZpkTAvLa9cAqUj5vugGDQDO7WgBJ+2VWA+PbzRoL3QHcouiP+8ZuM5vM+gWczThg
-PxawMfH8N0L2Tq/F0LjMGyf5jMzSN2QOIfTYpSys2mUb6sPBAkEA91vupkbiVr+Q
-Yyg/J+60YPQO0gIo2gk1SCehyhAbNlX6edoFLrPMDVFkEaSNvJTdgTFIW/VqLlNE
-V2XxnkGQeQJBAM6QpU7WSK3Gdyp9/cK8siid41zsp9EV3kHBGd3rXfp2H1ZgkX6r
-aArmC9q4QzrwtSbK1BU002DeI99XGk0JP/cCQCJ0utyMmTCuRIWbcJi2Zofu1zWn
-uVsN108yvhWwgqnh9h8NIJWt0+mzAbZ3borrTaOWYtb0a5MCZE2sVKjPxzkCQQCv
-yw3EID1OFp8HvJ2fgzMjuerrBER1fmTeFNZMtKgQJULaIejwojMzQ0BHbZVZrcyd
-LPR8764MvEBPLDOn5/1VAkEAzmStPUqA2sqy6jwuVxhcUzHukPsdZ95ybQ/wC6dJ
-ZB9uXYprFvXTSt4l3h7a5d/+k4ARCd5YAhFZrId8fDy9Dg==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANt+QdiTHzXlazgl
+k+WZz/7HuKsLFEcjZlLH1BhY/zmmxKNELka+JHudcSYSapm9kgFa3Kk2PC34Qrhf
+24ePCZqDMly2HcXkqkdtRhEWckTXSerTSqRSmvSKteTvMntxoNeOcYYiNERKlVo3
+78R/Vx+ZMjnvq5QFG5qI3jmFVkz3AgMBAAECgYBAC7hE7LD3tgiyKmzcWyRQ8JAX
+ALWbCF5MG1js/dMDTIEmLrfeFo9orokcldUbJTCcSpoGmfe3ZjB5wia5iGhBbldP
+ULZfElj2ynqhP/JUltMFP/RkdSu2w9QJQxrJG/4jAsA1/Nv69pgVoku37XKX1phN
+ryGGxu8DtdSILbEJIQJBAPHyv65WWVIPlQJS3iaBo9EE59EtnTPHOZwz/hFc/ugN
+nytytbnwgJLen114kUhQ9TROQWC0xk6MSZWgiRRMY4cCQQDoPaZtgtvSlJPE2gIb
+acmqWJv+1p61HvB49WrOoCnBSd9rBk0KHT0yeN2MJZb8dlhSjGOphWdBj1/g9uYG
+3QcRAkEAu8V3eafOHl+1d140xpGqP1edSbwq2rptPYskTPltY07fDusxmiLKxjE8
+YWBm8EbUZkmtd44UsXUyzosOl9BJFQJAdjzc/KhA7odCbFhp9jb3u0h9s1LlXmUw
+HQUlqakVWRkZLE367wlP3OB4Ox/wLPy7nttm6inHFjO+prRNDHV/YQJACM0ihM1g
+uXi26OnCXUAb/TUkexxgpoxBwVB6qR3iwORu0qMD5Ki86MeESyXm0vKMybN42QUJ
+Xfll9NdLZmFHjw==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1.3_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1.3_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDZNOsoImpR+BEs7h9tyfESWgQz3dYnyppArt9ceFMoyDfSRxTh
-/CLqkNkZBQj9t5kglygj/T1ihw0poN6VYTNs1uBl28GLjHDDzmbpk+6Sn4cs1G8d
-4ZLLijiklQpqopTGQSUXzqYB+88DUkCTNDe1dEgV1Odkgkbus721HztCgQIDAQAB
-AoGAKsOPdORpuF+1yfnL+EqlCu7sGuYXLthlzExhr4wFG2doDh9ujhudKD+Cbrme
-Do3iORdpkMRgHJDoV4TTredoPy1d/eCdEROIuRpCpn15a+LcLzI1l3V1Q8CsCe8R
-RYvnt9hOnJy+UuVWSPJe3KYV+cA0IQI9mnmTqdEVHtOvzNECQQD/QK7GifbUTfvk
-g+n/30zSs1M7+iHB5edQgIWfN0tjS/EjiBXrKlvLU/JXcY9w2Iu535h69epMu35E
-+HGhnPoVAkEA2de4OLuBbCvQw0MwdmZslRg3/PPZwl8nIN0IJEll5SoVvDU+dEJg
-k4o9EmH92g6D5iOAJDkqi+1Dnk8s+cldvQJBAPiuohjYTVxmZeUrCA28FnKpN4yV
-k9H/FS//JzAJhS9Gy7acXQ5yhGBCdzbucpu0vdznlP0nHZCIkurLSpn0AEkCQEnC
-PsAGzOWBWGgk4c3VFELPNnXRYxPq/+aisFUI/RVA0KcvJ/xZVTXfgposz7T7YTGV
-J5gcOwmxxkld6Y6R3ckCQHvkKIxyxgYRWM7whI4+1IYj/uyi6au0QHL33YegIGrV
-8PiPu1pHaHhUOdAZ/eezCOG5s716VW4Y74cAuLXm8Yk=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM5YigVnR6limTcT
+NUx0dZsv10wjes1gNQyVS1iz3cgtaa08jdMnDQIG0EtsblfpHzzc84giJYY1E5E8
+n3ZnpK6YY9JzTS8H1X+AfieSJRaqMv56F2XVn+45n8ihV2qbLeNh2TXVlPv6lSHD
+MTNQ1i/lwHq7p2Gk4JteypkqXWrbAgMBAAECgYEAmQTflZI5eks8A7Oi2seiTyrz
+JetJrfOiY2pzLZx043WJ4IX/Ro62/sG+xa/rRBYErEXN8y4fVZ8Wm6WxO0UwwVQU
+/TSsJUv1DxMxSkGSPkESQvRYgS83K8ubuDrNGMrCzC4oL2cH4IQyvlS/LLEzcSKm
+yulGz4xa7pSwKvt28gECQQDrh+X2Aki1qKw+/Z/FnXp7Vs5dhlT+qR73Wfpf6goy
+0Awf1gt3HvV3cOWLIl+hJ3jXRxCdcDcU961IFW0lz9rhAkEA4EdU50RxIRygpP4U
+JuVqGnYwKTuI5dZuJ2PUy4iqEap08L5dJtcTeEtesS5h0n1Fy2NNzLUz0PX6Wnms
+D9YZOwJAH1A1AYzyL7yaEdHUUQiLxSQYUZTPbf/8DvSWdfP+oRzJz928Ln0eM1/+
+FI5gWmOODEj1a4kEubPoBMJcfX9x4QJAIJ6/XpO50JMVWmoKDE45zHd8McMS+jrh
+8qC2hpPuCHu+XnWRnuCRWGG9+A9C8xZ9XEOpQSjpzG66ZwZjXDpLmQJBAMwFdcdn
+KuOs92pThe0PpfZons0DUGHJt0r1cEHWy0wGVBkDQlGBo17NKeA7Rq9velNCGTlT
+nrC97VN4YgRwIM8=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1.4_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1.4_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDMVKBVdbFpM5a2lymCBgZG8kMvGVe/kvBOtQFl09zjz16p9ZmO
-kemtiBWLJV6Sxv3WnuUnVllKCeCEuIavu53p0pn5hEjWtjXoquCzrJQJf7hnU3Um
-ZRa3z5JSvl8H2t34sRx8VDd/Zvfcl83SDfpYpC6WuIP+4j22+8UIRrobRwIDAQAB
-AoGBAMZEN2+1S/iwvkVeWEB6aAzfdqF1DdguVE+LA1gzQ9splMmGLwJQQ1bG/WCP
-Wj1CKXzfoauR9gIJo3olM0vB2W8Vg67Sfi3PQnmXxfQU7rRV2/A8jCz/wjbIuQq4
-wYtq+7fyZnC4cv//+PUvw5n7fSTel594FG38b4yKLpF57UbBAkEA69e2W0ZAcS98
-KROaDAPVSs9RGQAghDaoZ8kXlPrFD53ejzfEtFvp0evuhdaoti4eurqKFiieSXUT
-azOQ5gkPvQJBAN3LbGPs+dvXZpJ8P8+i4L6ODNKLhzs22/5xdTA79IyM1eWckJiY
-uWotb1bhtKqynx5AfxfTgsudF+pgVqe1lVMCQF5n+Q1Mb9tfALqIqC+LEURi/Lmf
-PWTvZDY3XwM55sw7i62Uy17PNCfd45sbtGlIyPBCX6hDFimdfep5t9T9Z5kCQFE0
-mMPhUP4P2ItLmKVyMi0ynzk7QtEIXfXEHq8BVKFdMzd1Ym+sgz5/0iMSUm6pJZ8S
-6DWWCG56XvY+PZv73OcCQD5PKZHpX7FbHsQZ6Pz4LjJN4si5VjkPVpDCH5QN8kyp
-7L5BFk8UVp+jDP2T66H5brfa31a5MEq6NzDZjsgh3sk=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAOk8KG64euN68u5e
+aXpxuLuX1dPEdz6Q8ylpuFG6iydNP7IQdoZuOEpJvs4BxdIObg6pUemUV85nS5nK
+hJOp+eY1HA/WPbHBxwDX+iwFoCANhm0ywFQP6Llutd0aAEyJv9RteQ7nThDS+3Us
+A9p1yOG33C5CxZvssvEVbdtW+SCjAgMBAAECgYEAgpD60YDUyqP5exe/VJx1Hg9R
+1MsXNh9PAM/+L0KOw+Gq1rQApiDtwiimeAzmAUGyuuJuyKQSw6lv2RhWP5PYIMWl
+zX5AS80oGyL0F3UW9zmHMEjqz+ZvnWmkovhxAjC/wJuLX7BP4D6S7u0BEb+eYmz0
+8Jq9uUVS20ZerpMmWgECQQD+87rUM1az1NFumEba35hKmRdn1mB72vWR8rUrF8Zf
+aJwSzKyzYsmAFEVn7jbsAR2Xa7sxK1gjwBLPpl+kfUIRAkEA6jGTnK7ZV34Edo/R
+5m/WWv9aXoqoUkx7c81zbNCrcTiew8Iv/jik5HcAbeUxqAjzuDlQdhgPSnugzc3P
++cpDcwJBALJjl7YitefeYSwhIHLFQKnxtI7TUW9YJbuZN2qPmB3p9EqzK6PY22Ti
+yi2OYJ+BqFLq7m/ZBDL/kin5H7LYcgECQQDOpyygJ9H1WGfLzyDi/HDkH0u4/RWG
+eaK+Dt75eDCwWcwO5X3AEG/AghnI32Ov6SZWu4x6iMSFbw34TNJmksptAkEA1k/d
+oS1pjwo8yJtxmviqlVSoUyuQbuQJEmBfG3JZgNLJkFuVxrRMyR2x4aROuBUnPbNO
+yMcLBi+NXhgCttxckw==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQCxrPUgXL9EoKD/CygCG53dHzxq9xbAjuyvoaTEzyaOQ8qKqgWP
-ohADMkHQbrRSRUeoRovF881VVvXQw+zkpGOLmof6dHj/LPdmdz8FwzHQRl+2F6+1
-dp/YjSLTdqytVW9MdionjukidELO20K5AFQB/hjGSpa1uYgybcXZVvyHlQIDAQAB
-AoGAIqJLWhaaNh91oqGjF94YRK09EsC9j6WMn6PLwY17v4mZZrRDxz7ZDjZyu9WI
-kuzsTfIKdvjSUstTuXEnsV4WBSJeVrflxkOMWI5tuGEn/7l9Ywsc6Ajpp9UIbVlY
-Cpy/yZnznqaoiVObmkkrxZArImwUjRgaltA6Z03IWQWUZEECQQDZJQAvT9bt0wS7
-2jZIV56qQRCPjdGfboPb0CZ80urPxwFnCBe63OARcnG2psYd5V557xoynXCT2EXy
-QYW+odHlAkEA0Xf09H5M3ymXACR9Gfm83z+j8Ev9QPxK1vOFrw6GFpeseX8SSZ0f
-X+4A/M9vRMUyK6ukgXdRZREQFptV3GtD8QJABcqq2pgyj11Vfv0u/Xb40Gmz22BY
-+vujoLVIkYO+p5QTQYBBwcYqY8y9o7WHCz0W7AGonTj9y7O1CeUdgBwo0QJAc9r9
-SR1yNxwxwIpuByfyJyhz7DybXo4sdqdKkYBe+a/6XVjDLKQS7mQdd7bjvA21qiHN
-Yy4zfsrpMxfHbZqGgQJBAKwzkCzcCMAQK3P0jkGblsK8iBPsOiySRuH+7InuKKfs
-R/nPaeSdE/RCEFPsO1gbhAJPEd009sNktR3mlscBXqo=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANo6snQWXDh8kzpI
+y59xfKq5/9clX82QbOaHbe00DxIZAKg2/lFLsjh2VSrRzjujeHXbyLqFi62ADoSr
+H0uAkCBWSXtxoBb4FYrNcO5FH1M0PIXfEHXisWiXxQ1mf7/ns9EJAxtQFNzjPqm2
+amPmD1E+BllQQ9oQmQ15o7R2iaIBAgMBAAECgYEAnj7AFsP8HY3gKPyOg1EFCLwV
+lEpqvSKEhWohQUdlwkbVHiW6pvLQCndsbL903/Q7LqOwW+jpD2fznyqDZ/mTCDjW
+yrWzI85x5NfasIKIRMtyxS35YuL1knPkM6tZmsUMHD6pgo6HF015MZQC0ftniWQk
+Ej2pKPtfpLpNc6czrX0CQQD2J5/JmboUS+fQ3njqeVrD6tViQ4uFLJcJCSFt5fyP
+EstsfMU+TjvpSmfGJ7DYusyTQmYW9MLjnZz4NjdLcAOLAkEA4vUk41yrIYBNwGii
+AS84fBYbd3WCS2qeuuA7SirFffdL35/3OmOtq5EyvxessGCCr7ln68Sr65v07QCe
+4ZgyIwJAYgQFLFF6NvrCo/jyTOtlqP2pWidrNuw6d+6a0RfzKUVimyBTqiucz5hB
+GjZTxPkc3MZjwGBV+iyYhH2SJwfDYQJABx3WvUZfm1pRldHyGoVniQSMce9+WW0L
+cyKq2UWEEdIaT/XNI8iSXoncBH/yi0lLb8UpjAwLtASc5n2Zfctu7wJAG0LrmIoB
+2b11B0S2zifCs9M2pmvOhcwkI8cRwf7CxuuN/z4yQLT+uOaZNduw9X1/XjPsP+Ol
+01sc3dlmZ2s4ig==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDho9BR3Atzb0Tyx2vyndpW3tRBYXVIeBAsU/HBKAFKEFN9Mrzi
-AaJ1WQvPOvxBuCw2+/492aJBe248Cql+dFqG6gZqK608fjKLl6S6U8G4vPCPgCJT
-l2a7gBUFltzfYilNFd+F5pAwTSnTBLdPIkC4oSLtDkvmAILfiUhjh7WAVQIDAQAB
-AoGAWMh3QK5/hvVCQPD85aL89W+KPwuU9WXgn0CMgH84Oqc/4qRjM96GyPu3rNu9
-xDIum5f9yuJmeLOThWaAmLQ5pd0Dirig+p19yQRZzZkFfUgtKY7MWqNbDF5PXjfv
-eNRE2ahH9I0R7925iRDiOpCDpHQrGgk9VTodEESvZHDX9QECQQD6pqxSmCfH7wVO
-DCfEaFD4Omxop2zRFpD+cSKTHQa35gRz2fE8iqYlbW4dQwISJ63C9eKmeKrHfO6V
-0kSHHcjBAkEA5nSAqcfm+Ky2DBjWCe7Ur6afgNnsSYwzRNEuPfonHVhriWAuO2y0
-6o8MKH8JwdFL/nl123Tve0a+eOZrZuGolQJBAOo0lS4z+G/sGoPb/cibRJU9WhDL
-6HTS5jaqFglqhN2O8zghPDU6xJaSUuLKuwOlycozIU410DXIudKKf/fUz8ECQQDD
-lhrgfVUstkAnEikN8xG1Jd/3Vnywivm0LShm11i9Eh7qT6PNMVx2OgOilvbr9Lrf
-dawuHhdl88uSBlUe0uPlAkBm2Vz/wge+qFNiaaBBzp7/PBbhv4+bzhPNyUR33F8h
-++iQhJPCY82FZUjz2i36JGjyT3Tmm6AcSL81fWwxo9Wx
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALoONpCga3UZazB2
+VJ4gsIFwIUeXnMEVfJ4tUDzb3IzQMZy5eMYqXFPK7dNE4vmT2LW2porCvb5Pi/Wg
+KGjP7Pnj6Veoq82lRQ2C6/Bbqi0biGUwn6F0WR/l0iX51jE/CqJKkl0qMC4/L3JI
+k/iNfL95IePhkZqnAwG6IJWm2lY1AgMBAAECgYEAqUWPHSvmOAZlQBUYTTk+fLTw
+gjsM0Zpj42EklAoP8UjlKkqP9/LIRy/kCgetXRXG3yQLB0m/6Wpj0pfgy+MIHI+B
++AJwJIXEhF/urTWIVHvzcxPBUXOu0JUDqGq2GDto5Pnjs687ACgYYlb9S9d70n/D
+ZUjdr6NxklCSpDDs3g0CQQDsPBbcTVu29qS300zWmyacbzwfChwy0McL2bkUnluU
+jWOp6CRLU+QUckpNwhUn3bh0YQjb9o0j7YnkS4ZCU/obAkEAyZ9V7d7Wi5BuDiSx
+vSsLcP6SFjtzWQi51XLFaJsKXu6BaxD1eLGW1M+MM4wToHX1zJLF8I8edTtsdykn
+Vcj17wJBAMS+IrflQW32qiZit0rAOn7scSDUtblogW2QLYFLhbAJtShLKvcFbh3N
+Na7e5emm0bkzG0K+aruyWDYm5DEXaWMCQDEY6tzk8cvEnPg2uU1+aOfYJgzh50Hc
+HRy8ORQzBQB/Bebjl1MPs9IYxGRdDP57GyL47tiYkWss0EnoLJr4N+MCQFBvN/z4
+aadtBPqyp2vkgHSxggnLqDNHskKFJIUyqsUenPJM9On0Hd2E3k6EemSfdQQiKMMq
+9hfr/ycJD0LKEK4=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1_ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1_ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQC2qxa7He4lWi9Y59vYCuc2Y9XK3mC1kMKC4+x9SQyptpXIoasE
-DKkJ4ZOmvkM2fhthKBs4A6IGGYhyqbmicf/b4TyFmAGyX5OgSrjnNq2PUIzWoRQp
-sO7s4gg/fTShxF866U+wwNZf8hB4K6707ijIKSGfznDV++oz/OJaXOIb2QIDAQAB
-AoGAXmVdcsbNyTmonA39OtCvmRjQY2y1lz4+djtoe3njdFRpZOu+n3IXbIbIsXNC
-8ocKiRObtT+TXAmXzIFO79ZvfAYx721ww+RaUah+X5UKtHqe3QWsAaFmwrkNqJ6v
-vNkSCHP5BSIn8m9t5OGrhPUkyBePu5GTkVgWHwx0yP3ucbECQQDlJq0V3U4MxuaM
-XEN83U06LzAm5Ro4Jy5nt7ooMHcsWZrdSWSDlQLOG/8PeAZ91PS355xBfDP6oVxm
-m1QLZYilAkEAzBIsx9Wh4gSjpm4ODB0PnwO1bMYjti+7ZSdws3aJiywv6NGgQ3nL
-ciChW4aLn23u0X3W8VZ8BCVYGbbZToUsJQJACkiDCfEleINQg0n8qVTRC2Rkt8oe
-NBjmBzeCfh02q+HVhkqt3Q3J03AEMTCEsg7lcH9PTs0BFCU7nUspKV3EFQJAOUdk
-sFaDUKhSstUzNi02BEELPFPFFE8Df1n5pTXBV4H4lJW6MRZPh2InSERUjlRR8xUq
-LqVCu/srZlRPXF2+zQJBALG9X8lDFV6jvaBZq7/upwL6KgvVf14jMaDWA8a1eL0y
-RdwfXtdb2igXabexV+yBLebkACCKO+veN7NuO/KQk20=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALQlHDrCJq+Ngk0p
+4+B4byt/PLGMwDeWcdJCId8uxMBaYORxbwXfiKhL7IdUjQjJ9xmEpdDMy0PDcGln
+Lky+5i2TkPkCMKdD0h/l1M9bXHSIBg7uzXgsLydMmS++mnNbmxzjZ1S2dKfJMdNj
+asVKUCLrr+LNet5ZaGqmDibWUrahAgMBAAECgYB0aZLfib2ULr8ofEyNL2av1i5z
+kkBY67isJh5bao6suvroRUF4qyZVk5LLNWFab6Fl9SluUBl+tdp70rjB0Y9Oh3hc
+BAt9f9qy4H3U+ObutWw6CYZh6BvEKlSJgtDZmZwRoYImfI9iooccsZaSYq76GtVz
+290WZmboO40/+xbRrQJBAO6fgwop0fhW4a3AUubURuFaNU2ZTp5C0P25MnymUps+
+fpCBgYm9kPmYoXhOiGEUR4m8OGZPMhavpEcfvUPDmoMCQQDBQ24rMTQRZYB2RqLr
+XBKFK/1IcMazvCKHR7GIhHxHHmecC9cWXNJ1LtlPhgt+chE66u1EjxCNO7MgsSJC
+yDELAkEAtcaFiER7Uva8TCPqAzVKGXkiic5zeVPk6KMftpzs6J4ew+4jw83IlpqS
+xpbshSdxp5beT/GccnOybQvcnbZwCQJAcaqIFC03M3ggSvAWiBi558tMh5uUskdX
+g3seJm3NbkKqq3OnSEbFnRg1xXjQL8lE6wMbE3SVRouzOeoUfXSiqwJBAIJnELnt
+PFx0NoYKpfjq1V9Jyh0u/N3KXNlV/fqFx3xTeD0C+ljmJ4tNsjexSEOxsTWw8tgP
+tUNWcnckwyiw/3c=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch1_ta5_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch1_ta5_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDnFNncTGAPrUmfFPgv2Q5lk6TE5WsTk8F5QBRPGVbXiAeb3kVA
-ziSRRLAUa4tN9dGydcxc1+1zLNJ1qlBvlACNDrsVjO+hXSwjc5X3SLVKO94qoXwD
-qigX8KdGuYbzmKcx/+F1tCi0EbRLymTkzSr32G9rc2SrVQtbYHZf6oZXHwIDAQAB
-AoGBAMWDpAfR3FXqB0CLeuvi+pRGE5MciV6Nb9TEudc2UG0fX2mSHd2bldP5Qwvh
-NIvpbli8qXY+Nj649BcRAXmtpp1LPXkd5zc9rAPsbY942a/4mw6JTYbDDl2x9nFm
-4FeaEou5tsNy+ukrodJSgEMyz/iWzg9ELBfMZQXoErmfq8EJAkEA93BZ3tjruxyL
-Bz+BZU+9GgaFH9yKoNcC/a21rhEMwW4xF+pe8dyR7mAOcJkEye3WZGvQ6UU28KdS
-Wc17TlU/swJBAO8TneZhhmXKQF7EXtXJT8FVBTcOz/qQZXVByQfn/sR+dJPGDmId
-Wo18kN8R4DDHSlL3E60za9pj2eBfpVFcNOUCQQC2XvFuJTVBWJ1Dv1Owhx/aQbn2
-rMbkGvUSYejJHbnoCz5V4SEPZEGOju+1n6J+7jQZGboFZEVFBB3XIHLkXkKvAkB4
-zHaqI3jfEdR4jcxFRVSxIR5jdW6M8kzxdG35OrW13xdUW2yFEsPgXaJttACNZQUe
-6ozcpPDIBk/eWTWU6HwpAkB/8uXEvZw9jF0B0S3u/5voLqM8ExVsFqZpbS4EZcO4
-8QAaG/C41RufSKhqX67tc4lZWSs4PUa6VCuyrtQSuIDY
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMZndpMjgp8vcCdP
+ZJ7DgE3jnbv56i7xAuHhqFv23Ml7775aQRG9xFHh2HRqFomD9zr9C8yb5pbYE+Pv
+eGWX/4GQl+h3/e2cVi7HpOz3LPyg9t6r7NbnnjXmt9xlG8jkWqKd2Fu5+iaMjQBm
+xAUonKg8sYHHdQpR7U9J15a1izT5AgMBAAECgYAl3DR6W3pfmhPSzIms6i2fr2G4
+LzaLAp7EL+WKtw7mu+nB70MfeZDu9yPxAxWN5ErXTNZlkxJrkowpINdeu6Sb5Dn+
+cQfKel7BwxqjkDuHYul5D/lZtmTAcI3QBGEGSu8xHDX7/QizjXk3QhmGoUCsft4u
+pBkrCFmhEdXkDwZkAQJBAP199VdFahCJfgrmUx7uDVw+dugZx3sbvUsdf0HOIomB
+b/HzwfPUUkl1++wK5EYStXYtd141aaRmhZUDGpnorsECQQDIXfqZU4YpuN9fBhwu
+Ui81TyXxtctYZgAidJBupzaromC91+e0HrGKg9zncdYcpcCClPWGm0+VugQjoskO
+m0w5AkEAxkcF5pN3GSRSoLf0AFd3v9VkMLwpWlQiRmT2K0TPovrJ01k1NkG3c5qD
+yOfkEiOEKMH7gocI8Pz4M8xPvF9SgQJAIo9TMi8d7QReQt2i7rpuOhu0x8Q7lrvB
+OjAw2WUuINyZIyWiaYcByIqGB8Wy0K4mTl+zGcygJYs4O41QcJyIwQJBAIpHZBtS
+tTSIYqfpgZzOqfca2vRw53/rcHNascr09PEbrzNGGg9p60ioeJOu41jAZHaSm2A/
+gsBQoZYIPdca7iw=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch2_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch2_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXwIBAAKBgQD0JO09/nDIUbaNJniQanf/3n1YHwD+Y7CI3kYY0haEr2Whmpex
-OBRr55jBeW8K27KSbtZ+zctVOaAn6QbIRRksFsNP9a/N9hTLhVlcG4Pc9rZNMAYo
-ZvYrGQM/AN4Jd1CimLFzPdV58H55K452lslDz0SaFS4JAEemWvA1i4i3YQIDAQAB
-AoGBAKGrikaRJRIhuicCILhRKKGRLaOa9EeAsDgSKIzrIeo/U6eN/YFnR26k8Gy+
-AyBHl5qMNxHFKS6IeFu1Xb5ks2NJkmcAwpPQ8eaj8aP5fAiKNuYlGveDp2RIlyUP
-CS38SyR18V+00656/HUbzvHuk+TjYxmRl0E5gEalR0Ig8Op5AkEA/gcI7do/dy6Y
-pMWNHjA0D7pCc7goDlGFj5LBQ/DU1g/xyDOwt6Cf/F0iyCzNx0KKQ1V2jfeqMMJt
-aE1xwvc4kwJBAPYKPt8ZVNrFKtsN6oHT3bgvoaoeJVor6JVw7gQyEC2Ijuy/drjq
-uuLaTW6f29zJuj82l6BEGSDkgyKGB2U2jLsCQQD8RIo2gyXBuvF1uIXS8/XPpJ43
-gyusRIMJuKjbSsBisMTgl4yoXwhiOy++cNgOSOM7yRSKGejWsU6rZTVTc+WnAkEA
-vPQTYs0WgMjpZ7/hOIGYhqp18qsiLoUIIzTOZoR4Li/w69sC93K1wiC7VNkKRh7a
-nU901Q1Xaw5zs2DRbyacnwJBAPBdIt4sy14Hhl5aLcHdup6wRrqnFZBfgZog5MQU
-9E4hhYKL5AS8kWPo1GbqSDNxp+RH7nLB14RHloIhHmqGZYM=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL7BhjDSowL0ADP8
+VPNv1yeZe1fi8ZP4WBzrmsxrI5u4qREnUJvXp8L+i+5U0F3iJARHHMxUtYm7pibe
+uTtzGWdemogS3ofeDibJDEQTZSPNfzTWu0Ugh366SNUvP/zWjde3sp9C73aaz8MB
+rrmPADPqKBXKMNqPJXakVSoserjrAgMBAAECgYALA5GD8CWJXh1E4yTkiWia2LnO
+cUQRjx1HTjM56lW8AAWDAAofdWwyThA2Sp9dTFlYBeMbyShSM4t8Yw++5v5oZ/ez
+8xfscm6IpZTFbzlhl8XMm2x6UVXctRdmJIyFVBP4glaUPXMM5mnNWDM4ObYeo3OD
+LXjmvARPdN8UMEnKgQJBAOkvfzXl1gs0djX20MDeapgPFadSQAVqtbBfmTRX964i
+vpza48uGWgJBj+i2Io0ZMbSKVXkXpnfK7r20U/WvfikCQQDRa0+TGkggC0Y3QADa
+dEQ5zxTRtGc3PnlHVUK/u4M5G8TJuG/2pZHxZ4Sv71w4rZ1vYcSUecxiYMpkSrXI
+hTjzAkEAz7wQh+OJG9JQvSJ0Nl3ueCh4EeekQS8fTVDdG1SCwg8R4IrgBKBb70aY
+/afEgA7BySSzoH0BQBb5OOc9JNKCgQJALK22Vm3/AUcmfdcb13+Cpsq1aGASvUiI
+210nVnyM7HwuKdM9n+OHFXe+aUKp7DWuJvs2026A2mRICcmeqt8xXQJBAOJyRyRk
+it1bjJwmxZBdu1OEPFpJkblwMRCB746oe0wROkEZVW6LeFUm7iGzBYKNA89DUsVH
+Eaq/pGHAdjto3BI=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch3_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch3_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDsRn7hNSUckjdR+5kTcOeJ1j47KFmYluKBhz+ZhV0GCtDfBD7+
-igD1qpGTqUhcWbnL8pTd/nERr5x+cc6WIcz9J+l+giuE1XM6icAJK6oW1l96rIHR
-mxhNhR4zL4aow3otaCQwHX/bxTAMv9lyBJid/y/PlOcuiLJH/e7B0uDpOQIDAQAB
-AoGAY/C5sHbzWK98WOAscq26MnJ95jX+F+4SpylXPI/NtkWS7hJ0tuQW3dMlOqlL
-I00MqvjUAUaj+xAmCNIIyTZI5yfux9nxkC3Fvl9CkfozzgXuey0pNgqONURR+osA
-NzshguNUmUN5cGeSd3Mgkvn7K84UIjisighYrres3sWmEwUCQQD+1oLiLHVblLd9
-rdoLLQP7JGsCepevHXQQjtT8xL9rBsG2g6+3lvql5bhM5b9WB9298fo0JKHK7FnD
-2WDJE6XrAkEA7VpQqYqWzQLxMQUymfA9Xe+9lCNTfHBRlkF90/H6FcvAiT9h0hu1
-kgjtpBJwnqSlF7/zPHD/0XIyhlSYzYuwawJBAN98O/ghySHxgCGlz2yxo6Yhv/7C
-iDe4esryl/K8kKpJmKR5RCabL2FB3qkBaxUFfP9RMH1+Cq2tLOPGxUxSANUCQCsb
-zzCr0i3UDfhoSEN7RboM8/K248/jGn5e0Lqw5UoWIpcK4vplO/oVEwxMqRW3M6D3
-pPbiUyQ4SILrVIFokJcCQQDyqLCgF7gr6xiP58th58/14ggZPm2vKTtiOrBxdV0e
-KVlv47uA25B/kd5BT7jwDPqoRQ1+4VFz2YcMDONr3GLV
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANNb8ZOPAQ/AJdkH
+8XApHlYL/5NwHUUC71IiigTJCIUz23fDM9lc/jAqqKyd2JfctGlRXtHJhmin46s1
+4o/QNhtnvlCIZnxLT9OGeJLZxWLHBKPXnozDykhBUj+hgtzyu9KcqVglOgtztkGr
+asNqcM6hIA+22+CRCwof3AL07TIPAgMBAAECgYEAz/QZtuYv1DBozKW9Dm7WczDw
+8D6R/dGKaFSlWVn2sSA5ohcET6voSLngJZ5Uee5j729pDJ3sSdJN9alZ1ce1Qu0y
+sGdbWYXgXpL5rTaPEiVKOm0egC9YgTquASN3D2Vk6zzeKeyLIjv5VSF4518pSPeO
+uRM0J1CTrIz0NHAMqqkCQQD08nUDkdAP5AHslSLVBMRcgqe9s3PKaCn9oiEO9viA
+lHxxa9uIlZrM65SYkAq60/BofHcnmAOMFA5HvgW3GPF1AkEA3OV9jYrR/9ZgSIz8
+jrDKe8CtwLBy+W+lcJLdMKErRJAjb1/fh5WZt+y3P/yuzM6FuRZAbypZWqEGeUt2
+P0AA8wJBAKjOUt/z5CyfWMgfe1LMpzqN/GXavyi1ooKd8iRrBZUvP5e22iOF3pns
+nIqLcimRF/QaGs/ZjlBCHhlJFo05jmUCQHZR9o56bUG8cpZp7l4AFHV1H5y25t71
+DojeIdyKd8Kh8lkV4YWefFgoU3/SuU660KXzZVAmPvZsiisuYIhAoEECQQDSoLW7
+P1BDXk+2oW9fdMo6HQtg/RG8+HkhDuHu8fbv/yo744qJ5CCSrkSDPHqtx7IJHjXt
+9cE2g36k09yI71iY
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch4.3_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch4.3_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDi0LqRicImIUydaGN+h5ueMVJNMLMrnCaFQGNpZnxdUnPTYQF4
-GA5GIW00H4TiQnKc72h+SaY9YoLzD5V0E4ih0b8AkxAk0vy9GqdP8iSyYNVXlmIJ
-yJRftlc48QBil9miNdaVR5d4SBd3K8Ri+gAM8dRu4XQlOA9cV6+SN+cYIQIDAQAB
-AoGBAI2hHs7gQY6Dvo6P74jD7uVyEN1IaqjxoZAVa74WE9RGNzMn4L3373nVR5aD
-k/ug2GasjAhHvvmXuQNDmORZijesfsJ42vmBlIoXIRkqWD6lsaWpXIrgdReB7nco
-NPyOro+YXcnd8ntyu0Ik3zQFmZ1A+GLwBWuDAYlzK+zMhYSdAkEA9Z5PP8WqMe2v
-pQN1Ld8dERu9oJpMlvMCQENFXFHp0u8MLVhFf2n8q6/ZwvQr5n9zA5lq9u8WdoOm
-Em7xlnZe+wJBAOxm9m18nz8J6ZkTv17T3jpI+PIhxNT/MZ2AT7KB8HK4/VIYUWwu
-DLWd6ipa0OXJz+T5c005thRblZyRBN5OSpMCQQCpOT4+oNBHAAzQ8xXr2dmr7OH0
-Yfq80YbOgcqq9aDU/G/2WefgBkTYgRrWb+ZDM7IpW61PnqBqXP+xmZCHaty7AkBw
-JJPH8nNUoy4mSMDiih0EhzNZIX3PENQHhCPKaWuX8HtzI0gUym+LBENeHkC0kRzG
-4TK6MqNWWu/JGt41WuxzAkAig54QT8lO28bjQlsQJC+cNRNy2EMf45VUuzreGQUE
-XBsoCuSEfFLqZzaKNN3R5v+Hd/LVikGWQTK+6TVGRfc4
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN3sMO4qOezPbcC5
+BPLgDwR66avwJyjZa3DlxJvGG7txFkLVR4BgLPYmkJ0LzBsYv1SYx+i6v6JdYMmz
+CXne7gLZuXAiw81gBF8e36OPQ3PqaF7fcIaqZ3VaWe/NDeTxbe7TuwTHUuVyUyri
+8wJlf1NGwxXky40bz48ejW0EBwl3AgMBAAECgYAP6kxoCCc3UHjyhVJRiLgK/jWb
+2xEz4MPPyOqcsUxz2Nxb1qfWEQ+oZ4Off6UXnGK8UmijzCDKKCA01t4rG02+TFdb
+AavVVpkbQfYeLY+o801j4QLLDaWlenb1nwEpkfzr3s1b31hiFTLl39kHPR00eZDb
+TIJGGY6Uo8vAYrBXwQJBAP0ER2ppfUWQTixgqicW43HG8Y+BjRfih93Wbn4geIDr
+incpp/PLarW2M+B6loGp3Isdfh42E0pnNkTmuKBgOnkCQQDgig5NOQhKeFKT3U4t
+P5mtqff3VO+Gt03Hp+KXHARXwQm948pgslKP5VlWoP7WTTUAo82EDBL90QYlqtWX
+P2dvAkEA+umjaQP0F2hkHd4+30TziYGhTI9NPMKJupVMPgg1eKQdTM8in8K6sDlg
+eN0ZJL0u2UcGKy+1MbPpPasQrPrBAQJBALt9K5H5tF2SeMl0+ik4ORdUnHQOnO7t
+MmorWj35K/smef7wLPVvEReMV3vJdOD2mPJO1HWVK2p61dov+qePTssCQF2Bfw7N
+oXXUcJHzNi305QYJ5PyNKLWYXSKTXoDelkGZMS2Vl+wNcblCInNq+kxcVuXxLvZ9
+ToRD++ah6d3wSdk=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch4_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch4_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQD1r6+ZlfNSO+u+Yubrn8X4/48M0uPHBrFFyv+M/D289G3j+awS
-adWhbwJSrVA0fsyn7oIEs1vmvsxE5rjS/B0qgNgMwTxPlTFoivsr4qqyVHw604Zt
-XyC2KSOudAn9mtNF4uMqYh+R/aKxLyZo+01p+2YfC0saUqzhi2mxFpaJEwIDAQAB
-AoGBAI/cYt90/Xhum9jsgrj/4mWuBy6EIlo9IfpzJnaAkQoeumYeoVJa5HvVy69r
-yqYihWXj9AAaojqYCHZj/1+TvuMpvatcl1H/pgcxL7hRg959chvh035eyJTCkEcg
-LqfJeYjWh9h/iRFEUvnx56aYzmRyT6OBCD9aFYYqH3t+7yyhAkEA/RYKtBlqyA1O
-e78kc760xLSc82UzOi0tAGcWgZlJZy7eVrd5pev48N3OVLdETXSWuOMcliijw5fA
-XauPwTyJMQJBAPiD1WFoGEnUJOYCG6Nho+8853opMOV/OtIL8oC/aJ//TTQKxMyM
-ZaCLLhwWFPqp6brQ8Qqv3a8Qbnpf/Bs8ZYMCQQDZB3XWS5WOSBrtc1RHDVrm9BtD
-fZ0YXnUgy0Y5jMGtgjuYEW54IosvwoWVkDM6WKiHk/qHqgIFULTdnqmAA/GBAkBz
-vhrUWgHt6LMiuNqcdm4+jzQT7jlKub3wdAYGtp8I3YPceCN+TOlMI2ZfSF2O/THR
-g1ywKIZr8ZAyyJ+HI9L3AkEA3oaUTA0xibu69MLgGBdGUtxxrnlA8iUqaEz0y7r6
-UdTgDUhSb1WYfTfB+VaFGdcd2utfiWBfbgH+0BwxeFhijg==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK/Dizk+IVaK1pcb
+x6rHUZ7pzxUfJOaRkoGzfTDr6hIwEwPQuWBBi+uI9B/lQ8+1rkd6TUZu+BZCZ9sg
+5A0flk8hWZX2cDMyRYEYXqVb/Urm15fPRWXndHlfpZ/hx6XQXSSnMhhoE1dMz3gS
+b59c5k2+iSRLKdgCsvn5E8+SQw/lAgMBAAECgYEAhLrjoWfE30jbgqNs5g+9GIey
+ZV3ujNvzylSUPuR5ECETyvbNdt4o3sa+rHODARFPOhUm1ACrAoxFR5qP/UUUSQ8e
+rHEV3zeU5RbezqEaHZ7YZv7dyCNSALcHMuQkK6xy/iWqvekJqiDnfcbyxUHzU1my
+s5XLLYA3YXKvtjOyD6UCQQDWRN1XaniyBwc4+pg+ayn1WuggDVPy8z9Z9u/yzfxK
+moWyPG+j4zsWqNVKIQVIbMDhi2Qt8OFat2r52p+PHeY7AkEA0f7edIr602YsOM5Q
+03lL0yjejXFWK+yF3REuI7CBmhXYjQ6X+M0dceGuShIXT7wkOGL6VxcbX/WMuHyJ
+P7XgXwJASUFGA0rtdMAeYgaa4kw1DiNEVSD5YIh1UkawhmySItdteiBbcsaPPxH9
+ydg8PCSiVPoZB/Pgt+kZc86g2oc4XQJBALH7bJwmdzTZcj2rUAIM2mFcUFRdbQXJ
+cCPQPeTt4sqwHVxgtBmh74ToHIqXDr773U8VRMyvvvnz6pMqqkEfa80CQEeW8xjM
+hNugf785JLU5ywPzUrvCvsjUCJOQOD4GuWvuDk9yBfOsUln0IJjReLGnouWMJ4x2
+eqZ+4CwCKxtu3qg=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch5.1_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch5.1_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQDM3lTteDHAfOQlmKMN+ncI8znEn4hB7gCjNe228Myj/Q/OPHC1
-qh5CTlyu2MuZU+8eSflMX0e+0Obi8RIp1Xd1iHlMO2QFughd3O0ffxWSaey5yYTw
-fT/bZjSlNYwim19LGYMVNUl8S3c1LMRYNBXxZpnOZdMGt9I115Y57tgIkQIDAQAB
-AoGABKxhtZUTVXfD4JOtzIjVJFAgFjspaY+bVh3J0W2GzYrdTHAWhh5eWFbfSGHL
-qzC9+KvpUvOteE3dpnmnV2r2MZ67kt76VQvWf26EAAaGNZp0rSZ7LOP8ipndQcMb
-KRykm81UuqC0ClJp8qSQ9/8HnFv1kZlglHnz2/XbaXkkSH0CQQDljwvofHrFEWMN
-8lchh3ESPOhZx1xjTp1zIDK4s8zz0Qv1JnXRJK+Zuvo/UPRUNrVAzYbxyo8wcTxF
-xtHXNntHAkEA5Hc/X4qOhhS6l5iSKiTMH6TtJmUoBdVmonOMSEnT4+EMoyhm+uO5
-m/EiApRXt4b7Jqqe9v/CRLXAmJiN10mZZwJAd0H0Xshkg4K/4hv3Nh0GGgJ4d0PB
-9HmABLJCh4ApRrVgr/BWHtwfOg9QOJqXBDUTvuHHbE/eSb1aIanjlBniuwJAMBDW
-iGdCLPtXdmVm+u7a8x1jt1w422FWQn9E2ECQD7VdT0ZExCv89M36dch32+jOFgh3
-gUe1u3bxmikeTljxqQJAOCV/Eex12RSZxgb4szTqdT+3PvsaIWhUMlhsra22d2GD
-9/WIh55SayJ/wPLO9u9m/f6EsJCkBg2fsYAN9gIN9Q==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ2Rh4JWeH9kMmJ+
+7mw48qL2NLqp7LtuD4erRqQ3zoDxtYubCksqtkab8UfAa4V/ZAhhrFPUO85UKm2k
+Zc2n3KU6M7+GK/bQ+ySAVo9P1PmWcfOGdEtHONoYea7ZW50JnvfLtKeFM4Ug0yr8
+csE3YgHWsctKoAnCcur9uF0DaDN9AgMBAAECgYEAm+vqwFt5Gfa4tScOICGqWQBx
+5VVJYZ/j1kjyuoZO3uJQ2Dkv0noNrYmbFXmf7JbHElQ1By85j09SPPU1mHDHsVt9
+jcRYMSj+zMWUxlB7yzFhRsYRMuSiS68l5Oc5SKZpd1qG5VWdL+i4h9BPA4h0Ny1s
+DVoikHRUinibHxNiPYECQQDMX04thoMtwMRBcZCjuOh+UMaYNKqPdTf3GeeP8bXs
+srvhfoYna0ioqFydaQhnWjl8qPQGUjXS7Iy82bYK+t5lAkEAxV9vdbUkDWYXR46X
+7FGEOpTBmB2EntvmpwNEDagNSz3gSWY1+FKgthfTHuN+1acORztfgiMfPdad3bAO
+y1ODOQJBAMNuh8XFEYAZDBNA0/2b/sd72s0F3+wbPY9P+D2P+FYGfN+fLA5Z6ztM
+9HOaUuzyPHLW5bN9vfabOeIFlq1dRHkCQBy08MUx/3hjbOdfegFJKe5LTI0PXgas
+/TM1amSCGMzkxwZl81uWyQEzHeXUONJiZdU+cXnAGf8og/WGceBo2SECQCXdPFtB
+3+qvlMFbcl3YSpbk4q4509cuIwq7mmQz7BVz0rkUxt0+D1gVtTLcdnzYfV4SGzvS
+ucaQ+9jANRTqJzs=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch5.2_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch5.2_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQDFJ5tNw0HPltTwIVkbd85UgdwFVx9WaYxfWD+ISsZzvalK0Pij
-MxtP2JS105W9AAbRGOjqnkGtBurGzJ+Tp8SgPgViTD8ciHmgoevzlNAbjKifTDs3
-gAZrAOcwbNTCUSd/GuWVpxwV1pgOHy8ot6d1YFaOdKCGmgbVIw8RgwKVcwIDAQAB
-AoGAXA0FBwa+iHUNEN0RJLEIZg6HsvqdiBQZ1T5302POSqXoECWHoXMwMlSWAls6
-05bal/BAd6LSWT4cihtp+l/ffnv3kUIFHbvZJg/AJXwWjMLa3LiRlXrNsooZ5Rov
-CMwP04rQDskjChLv+PC4oNgrveKfcUiqBgg9sMmeIvtjnuECQQDnF2q3+J4liHmj
-3y2/aPl2FvtNOEWsmj5bzGd00LMTh5D7hFS8wf92Qe034bRIwOWpqW7Av2SMyD4c
-Ol+PZARDAkEA2mfC+balVPRdoAT7V6hEFdpBUg+iyUxBD3QGyWGLaY8q3WX5u8Ly
-3JNNyGjTF08fbTWLl+iKKv9Qw5d1DrIvEQJAXMeCCSrAE8GfVLOd4mN7BHZlnrMh
-BhNHRgPi5XuE6ipbgx+2BbK9pfUCEJWFlFAd5OgplylAbWVXym2FQESfkQJAYkRT
-XqWGJ/427duv9tW3pJlp0HFGjgmoMDrFHvCrmFgZMjpCre9d9E62rZg0egVYn3t7
-DmNLX2M2xHot6enT8QJAe09HhlcbFOThQA5vCgK3OVXXSFkcE+i3tTWZqkKCwIlq
-S5WRuIQ2NzRGzBdpLaXaHa0EbDr2k1hd2E3z0bRC2A==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKC16FBuCy6+ijmV
+ofOPAxza03Rcne00VF4/rOKRQFBe1+O8sY6mYtELM+JZ12fxt6/5YTexJKpvZ+BP
+712ickJwQR4y5RqUT95gbOfhlpmC0DXyQAPekhDzT5HoeCSh75Lae0lLVwOAV9j8
+QWCK8OZV/mdVXmi//v0jK6uUyxLDAgMBAAECgYBcsE2qha1BaneCOsDLHkJnU/X8
++KXE9xdpvEPT8H4tXGYbXOrzIReBBXsJI1PPCWQtxCDD5BEHk3VPtAqT8GsA6IyP
+IkjJNESXn50Wxq/TrjB9mpsilW4fHegE8BPth6QHlui+lbChdXlEYJVtARcMlZ4k
+AwfdbO8ZLGDNVLAZIQJBAM1FNiXGVPCsvoUqlNQxJSNKBEM4ZbsCFR4oCWZt7zF1
+wlrXOzdHO/BEO1t5oz+3ZBK2fZew4x/F+34kbxLowZsCQQDIbYsbym0twBzqaXEV
+qyv4qDVtrirf83yVkDHv0mO9z6iglOoSK6mO8onFZUPabefgyQh32cJVDdlgeUQV
+Nfn5AkEAvQ1cdGf4vPzsL2trTQ7CPIEj8eEUWKrvVinblnnzjWL+kHmgMSYrPvso
+i/Q4dStrQIzQmQ+x7waBvMjDf+/ctwJBALyHPgjAGn6kbQ6abELjphLZtpga8j2C
+PTg6UJ6zmhqbUJTsPlklNPM/dRR2sqKuKyUoNIz4CnIS+txidQY2pZECQQDB09o6
+g9Y3a1BTH0KN4Um4otLpAuHo9l++gdTD3g43xRDlOFTk93QoFqB5ugbXecNPvH+5
+ZV4JvdKMThUq/URE
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch5.3_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch5.3_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQC+mTiBwl83w9LMfwEZYY2LV3A6LDbByOSmMyq8J+nP18pJkNLg
-8YIOfVCq44zKB2G/0/0e86/sAN3Sq3BqGloAMuwEo6QlsYIdkDz5rpGQ19bCDo0x
-VWLiaxDgEG8zk3gvWLdG9LkaTP2BsmZClUuh/0aenfYyVmOIvINDVLvOoQIDAQAB
-AoGAcb3yUM10EU1VUSBBwanL1Gnb2XtlOgPvH5fNWvfeumAmofxBPGgjmw4Bw9mD
-vVTmapnRplT6mTZzKjORJGCRcCAY9Mxzdn7v4b03MWkxfSOuWOjflKUSlrHK2+gu
-0jmsb0dZlbWlDVRySPahA1lzYkwWE+t9A7GLSZ9Hv1BFqnkCQQDzFm5NepMpYaAf
-XdaVsO8LEk7LwEjB0FJB1MePBrJXdq9XtOSLYm+2ZpPIx2aNH6jdzYK/jW+A73tr
-5hUgTT7bAkEAyLkHgGFLt+hZpGSPMHmkB+QWhwQQsmurox4UUpNxCYje52+3Qthe
-TwJLeFDPNmfGmhSiHBAjcZzgRvTtbdSrMwJBAJectuEWATD/FapakZq9RupF2eVU
-oUxYjOVIO8rl51eLy6LNTPnuRDSkV6oTS8/bHixwoAquwQvO0dCjKSwDYZ8CQEkw
-ttyIHc0Ei1NXW6MIZ9h8wf4fbFsyyZYkDLMDkk8wul7XrJJSRSk4I/7OMJCdDJz4
-cxgahmISGvGks8K9rmMCQDyQSDB/BTykXIE3cZH8i8Sn8Z0SiwlQcxPtebuiynYH
-DmrUQs2BRy7cO8LG4rxTykqjH9JtAReI1Hry7Ny+QrI=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJoLNQB+Bv3iUJd+
+0sK4ICrZu7g/FPmq45jcuUliMp7nURbva2lZfg/DUAg93CMYN/pwzEW4Rx5J7xgV
+R47myWVkAqj1KtHvOpGPWlIhRo9hh1XJYeromBjFmR+9QwITpr/Azdml7kCjBb8Y
+KFf2TiHQiaEhHDntLe1F8Np1N9p7AgMBAAECgYEAkmjOcm5WFN4SPTsT9HBuWmvh
+qGeEdxu+AF7hWGcVt8QhZUwfadzeHPtEyOCKp2xwX/7vl+Bi793Teq9W+PJPPS4p
+BkbeZzRzvE3xnO+f//nb9L3riRu9BozwA0rvTMPCaRHybfTFyc1qjGjCLCsrBmku
+0vgSOsmd+W+alSSj5hECQQDLwae7kS2l5QSWxCYbkuDdqWNBnGAY2YVOBscXOXDU
+2vwOo7jlutorxjo3ve8apPwzFV8sZld/o0sHGJWItSJjAkEAwYp3jYd76FQ8i9TZ
+GbecxO00cvuWQ7ykqbbEXVCXYpzgJauoxTdD6csCSLnbnuyYh8kxEq3K770/JVOW
+Sk5XCQJBAIGEFVR60eNTkfkrsXVxhZIgq8D233asPbn9QOwYTQpgMDw2Ab+1aBzP
+Ig5wot3y5YSrHxYf75pod7aI//Qn/zUCQElZtzG2dWl583BzfMxYYFvqIoSpgSuu
+5SFFGWrcTmObXQAp7M7BwUVsITN67RdwR+a+g5C2uUDfEn2NDlqfEjECQAabxwJ4
+fVemMHabTg6C3q+HzXo0A+CGwL/u/jocGIqNpHTesZU+KAkJ67bdxxLyJqcBcidy
+D5udYgkqbTEAycQ=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ch5_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ch5_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDDjdCrJXW69SDffIrUzUD2w8olEbUw1if65KAR1qoyfcgVnddv
-f66A3ijDrneof/EF6Wu8Y6mmkQQ7eWuW8uCaF3nTBApfRgm1bz6p9DRHYhj0KPfZ
-Cc1PijPfm2mbYc5yxzXtYaBbDMFhAAqsg5pqPG0wlut3jCg//GKK+mCOFwIDAQAB
-AoGAZo17rhViDV66E5nbsMfHVuHMo+4KaIcWxmOZcmFyNjJyeKujLGz4Vcqr9BsN
-04btHl2QS2a0tI5+erYtbycGE73NY7f8GFM99FckrlghBoARycoOo0gjXfO1FLub
-/nCgXktcs+OcS2axSioR/L3m5tg4wpLAFJDTmPveTSg2UqkCQQDzsqH6n6OXFgfN
-/S10ZRobR++BWjgw8t7PqemM8DSgeKiGBHjeZaOPqM7qZ7W432grrqGRefnwiSja
-pHM/pGiFAkEAzW0B/wreIWthQks15Ukv72Ai2E+y5YpzDzyD23nTWc0nbk1AVymI
-ZhyrHdJJRVJfVeR1Yw1XnQkT1/ChjdLs6wJBANn3Rwt753zGFpr2PMajevM1pxGC
-GUomoIUKyzrkyZ1R7iFYNKduLxnZ+aAMvKurHmgbnKUafSPX+fN9LRuaOGUCQFFx
-mWwDZAP97aZ56RlJhe6yv73hAz1MQcfVpzVZvHiLBMoPaKXl+oT5csI1AAWy3cdQ
-91VZEdZZpftkFLkE2hcCQQDzW4qLmaX1u4MTMtXeqtFdK/ohFw3dDK9wuqGVQlWZ
-7bBC1Ojb2QLr63TOSfv2t6GtY77Xp5BQ/rjR8oJIwO4X
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN/A7czfgqvTm1SN
+VvcN5Ni0ugPvo4L2tuZND7TlYZiIvTKzRyFLLOjDmiKcNWOoTyrBRxo6skbWYU6H
+KhM62DU+PK5nQ7g9qZXfe7rpcewxmbP6AJaMgEsd2Xfl0hSdlaLOMiHVLmeusQgE
++537cBZ0XxrRNnfoS2jD2NT7GCAxAgMBAAECgYEAiG7iUS7kRZN0vjykj2YIaV7h
+oa7IW/3Fjm3kqt/G/7Q48SZBs/pbut4yKPJo14h0JVTO3x51QB5OHQzryefylniF
+pfoQdSiCOHwiujzmkPPDL/C0Km0U+jYBye1wMxeQbfIa7SkUSssoySVnlMBBv9Kd
+UcNMwl/Swy+W9ZScZvECQQD2+P4MdumPxDrvYR+zv7bO+PjfmABXdZtEmLYoPSBz
+JYLnG3goyC6Al1DFbu0kp7PgFwci+oWSw4bBAfqELxINAkEA5+6rHBy0YcFYg5mY
+TBs/DNjqYcekTKIkOYAaKHnEx8C5iKrtX+ZAxMJDHvm+SWgREFZsqM4C2H4oekAy
+VDORtQJAIIlpHsdDufcGNKc8//dP5DCUyRBDa0JJNF5SETcMYV8dwciyqdzFk5db
+wsb8Ywnc/rbJ7+fFVTKBPEhAcs2ouQJBAJU0rG2kZcLxsHDQ8fIcIR6xuW74EVGf
+ibBYIfviAl8DNBig5Z6pMQejdazKu8jbowagoryh86C04HNtMzOKDXUCQQClJmmL
+alt17GPXVls29MVgqHI1h/Jo99xosPNRAZT9Mc8+4sevfi0ZQ3z5+jtsv0yRvAHm
+U9wRAPpyYbBQnr4r
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDrBRbaOmYPXNgmgzj6T2APjEIGtkW+Lsps/dinXxRw6QTu8sdA
-sij02ZllsC6i5izfQnISksrBbk0vdkGqIryN9OhAeGG1kqdD7xxVGTGoRSMPttUy
-RDXdeNTxgDlo0azBTRji5U3rqcuVUWzHOlC600rcfSGt7lo2W840HFin0wIDAQAB
-AoGBAN1q/gy72EvA/SPLnXK2NZpwWgRY1XxIOQ5WWjfVrDx0TOGSeYbKUyvbllnn
-kwiGMuBkiXRWOA/lC3MbxuGzuE93omfKCDawQoOCG97uF1nio2Bq3ocS8Kk99Uem
-EMcZ4BVT1dAfB3qwrcfdnZuZKxGHyo7Dy6dkP944OyzHpn4BAkEA+Ka4h7J7YHyz
-yWHppgeC/KXpIO9EvgQLuBfkNlgSYCg323SEKGvJXegW2QnA/UpA/tq32iwIyxKR
-WpwE2Wa3UQJBAPH3O/9YYyhxVJ9lPKPUvCljMyF6hJIae+qrpeLjVu4STi/8t2mH
-35etqHtIc2dBVw6AGn5dJylaV3zg1TqBq+MCQHUDOEmbg5YHeS/m5OZeGJU+mnQG
-RUpKax1qGNo+Hf+kTYz3yw2ek7eedcoTXf+Uhvun/+cq28R862xBicKpJNECQQDu
-ESQN8wf0xbTN84x7YRcU3Y50NRh0q+waE3JuzuE78fTN0CchhNcgZHNtgPZStH4U
-PURT6hFa5ZFIw+nn26ejAkEAweh2Jq7y09O1h47pAJn6rqwggslw/6bohoEDyKon
-MdCHyMiejE0DwlHQ4j/p8TxwMjv6yBS0PKQdh/YoWtQEgw==
+MIICXwIBAAKBgQDLBM/UEKC4CkFRzJLtHeZC0L4gnAj062fZiIaQPPVEYEKV0wwn
+mpD1r8ZNIja6n+J0F/fdKgRQ2/Mr32gW2a6DOyr6fgUATmSlHsGOmRG1mWSuNgxt
+QUJyprAvjefxtqgaiOXOvNw8mtE5rQmrx6C9PDaSsjES+XYaaCTmcOMuJQIDAQAB
+AoGBAMVBxqEZCt/m7vKIn9WOMJWI9sL+eOFn/P5q3bw1zmWCVg/3AJ9WWjStdjKp
+5J1ODhyY0TdtxMXAADUHm75gAWM6S7khQ/ELsfx3vSacB06u5RR+2jvNE/fhDO3r
+e0vIVkgS89EVQ9Sz1BxF+L/Ag2Qb2Izuk0xaTAWnbT30HDKBAkEA94w6UN5Z6e0B
+S4YHM+D6M6y3CJAvrukFOZS9LapP7PYRZsPlstmP73F7Na4Fi4iPeKmZvs0NEyQ0
+ecx5RlQ0hQJBANHzXTBXwa37c9kcmnmPvqQR+3as//7j2agGfDAUsTs1RLJu5ANv
+AFdQg8YRMNAmKrg07+JtnaGOLLC7GljLlSECQQCSIR4/pLJRK85K5eiUkGdCX9+A
+V5U+XGHwNsRiE5qw2CU3k8ahiFq2TzgbXQn673c6FGwkvOjN9t5fU/v3Lzf9AkEA
+x6D6i9v1qiO87MT40PtwDvuWOiqXI1qte8nmzaTvPFgTIQK1xdoG3f8NvQhdfJ29
+4vda3NbTmmjgb48Ip0O0YQJBANJBoWOQcybfmTi/VHruMwxPS9wMgROClA/4FYmp
+djFpokzGlxhJ8V49QhY5ldlYu9zh5Cqb64MJ8oJ3gXPaP2Q=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.1_ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.1_ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQCt4aO1ZY9vU2FLFXrXxgqjsO4gCxHXnJmtY+SNIm0TexDTc/qo
-ChREPfuIvtEnedhrsbqKNSktmSE7ZSDVPb/m/LYB4rON9Z9zY8pIm5LWNIT7fIce
-9Y5IvZZczuBpq/QX5SIaaIEVQFJ1xbBHFpMji01ZENDjRj6r/QlqafxvnQIDAQAB
-AoGAVD0KWKkZMi/M5NlFKB/Tq7XdxzxVqoU9lljcsttIyLVIU4jOmHY5l04H/Bml
-rmBDTvlNjANxLZwQE3xMycIeo3ZtQapvDQjGMWQjNH3iIx0wMbFHuiwQ5VfBuOR8
-JZUBelH11FgRhERe4q8TQUZZEL1iUMZS4dpEnqkDZfMh7oECQQDfQ8zhKzn1VsbJ
-fEdzxKcPv7SggPC0TLhwWu0W3K0cd9VRm2gp+C57qLseq1nkXDBhL9h2NrWRiYMh
-MV7ZuEqNAkEAx2A98Tkvo2/LZpV4RPTD/e2+9DOgzKgY8rE7QmIfFLnRgWIanMrS
-XqgoCQiRdWiscs1749VHYqOCopSAdN59UQJBAL38+yaNWze8TVL9z+vi52sObo26
-y5oSQ01RArpWtXUpQDy+q0gzqpKORhVWKRubm4vIZEJMUfvz8cNYOOe63K0CQQDA
-u1eFratQicyNUSZfOmGQQdhbBuGFlWXwjcVkSagUCADv2t8w/JvaJyH0gZTjc5lo
-rRz7RHxqbPfmpDl9QGrRAkA956+1yVojJHr03V20V4n4PkH6+4o8UpV2RYbSPpOQ
-NRFQCCzw/XK223UmJ7XOkb2s7045NA2ZRDsXzZpMqHyb
+MIICWwIBAAKBgQC2bsKc5kuhS0AqFb1jaxu87oHo1MbQHRxiJ8Hl6n0gMJuRypIs
+sCGQFHzbmOl559wfExc3ZkPTpbGTkAG2L6OpGylc/5PQ+zLm1B6Huhqhgl4VkUZe
+GjB9cLUz/CDs3DRB584CPuzRj1VY5YUmduKWuaG932o4CdVG6Ct5XlmbiQIDAQAB
+AoGAcSAHoAGSfmdKV455jS+62JJRjk57JkwW8KrUqryYcKCTp3kk4X8qoMyDjCyr
+AsQLFF3jNKA+iPyjO+y9kvrBkawnAIaQccUiEHOXHb+EUGztMy0dmKrIXQfmynWS
+yZEQusFBxG6cnUTm5dI5tJgzFWHSTvbT1Foq3GN685GO3vECQQDgeF/81ReCyKP+
+VHtzjj4xTCb1xM2ETItj91kD6hotCCd30m5U33SiZyLuYL1ZM3+QNmd9ONtR5AYX
+8l5K1FttAkEA0A7GfHLw5RYl8sm332bzgFr/blqKpI+6/dt6n/CHB6BKOXow1EGP
+b9fJa5OQZ9xsYVc5k2EsWhyqN/JBqBtzDQJAcu+QDrC50iCUQATYFWovFCTvCgbU
+SLq84Nnk/WkgMBCtzN+12MV2PjXbH/3u1j7VQW1p/idfvYWpTRewClbD3QJALopf
+lA8SG+ysaHb/DpY0+g1g/gp64PzV01t5PrXLPsV4VQskSRaxQ0992vaTYuhHxi6A
+zpr6FN48pW8niLc7MQJAYtieYiKsJ9Ra0ZNTlM8kHX88JP6ZGV0z838wm8ygfgKd
+K1YvPSB9Aq3YbsKp6hhVDOTg1A2ZlQqs1sU5DZpqFg==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.2_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.2_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDX5QoYAFRb7lreeDWFT9sGDOCHEJd4eNwrq5WGPDXEQhrow5jI
-XaElpZTWi45z5XWCCuegRz3TFoY9VUwuZXUbb5BIpkuE7naBVqA2F5tYDEWmDLMM
-8TQR3xSOmb4ioqViZfCoV1c5uRMci5dt/Va3zhvL/62AxqMNQv68go9KAwIDAQAB
-AoGALnIMuNshSuG9VM0BnptuYB/XEdeE7pr5qr9wHH/JhV4/UcH6lWhnKaU0nu9J
-By/fFsnnyLhq2YWn/XvjNrwG9CnWiLiGL0YK9Ly09IRu79r1DJ8Wr5xINPLindwO
-GCqLSo7KIJY6E79PjGNAzig8OI6EChqjZY6MMLouax2aFVkCQQDzVkEi6lC6UICU
-vacrJmRcb+UE7uCG6ZkqqPVKxLk3KKwVLIo/n4pYzpTUkURL+Za6JewpBcf3XAfh
-/7hXEFQfAkEA4yEyuf+l+StYX151sjMuTPOz/apOBmSF50luce2NEbosPuxURISJ
-T69IUC1ype+bqazDArIatwYahoGrwvXtnQJBAIM9F/BO069Iz7BpAQoCsMoyByC7
-/RiGUHdznKfwpbwcEYNx/DYIQ8NV12s11dHsEODgpxgQ6CJ+3jmDg9ZhFh0CQDCf
-lMp4zkFPZDXWdP/XMRxMN8YgRV/c+UWQVNKS9lZLMtmtokSg0vx6G9L+R8L6Tqq+
-T2kuU8XGyrrs26Z7G4kCQQDtMTiM8b8Qg9p3t9Wj0qUlECTUpeC+okFxFO7zHzSX
-zaPOQNgusuqT79nES2DOYgYDkkjj+leuFBzRnyqNtDSF
+MIICXAIBAAKBgQDQ+K4L6x/Si0EKNmJ2611V1LiK64C4BVjtKV2cPyuE5b4e9qvd
+1DIE7vSbsjgcWQoSM/i3tuI3Zi5Y5T1+uGlzdIyt0a7eETgEfiaS1CwuaBUJSk/R
+BLatx9jXKm2SzMpIh8ZopMU3r8wgbYO6+Gv1m45939aLffE2b6NbC7HoawIDAQAB
+AoGABYad65jDFakzBhccEXL12+AtJRdHJxaVHGhcnlYZS4FbvqvdLZd/3xuGglt7
+GlzMZGDVcd43KynbjeQ59RDhUOz7m7Xns6/kL33gvBQFCzXPtM2TqL+9P4RaO0/K
+1s0T9agNSEtVCEez84eSdWSScg6xaca4MkgZv1oUrODs6XkCQQD8Z+zxq9iAK10X
+ms3QlUC15PC8R/rI1xfbdgm6P9g0V00RApTpRCjGqoFO7dKXBizw99DLsOrhSC+A
+UtFP2CafAkEA0/JtCqRknHFXxQ3FMrHHmwIQY2s0a7w+FqvTfb8laOseUwaLs6Bu
+rDx47iKLBDWuf9PpLnH/s0HZ58beSf0mtQJALPXuNRZhWGNhD8VZiCAuCLihUUiZ
+GZGHBGbAUNbyklBCwBbvo6Wqhcj1g7PFYXWOJ9Zc8QuwqzSKkZcvBcQBDQJAdgc6
+0gJaRQSZbBMPDfwSvC+aEMNSnexmZxmo3Q3lN1g3uuSaR53ABAppDbQO1nlOg8Du
+yf6R9rFlN713bJydQQJBALqwH+/CV9ASBrUUbg5uovzDBA/DJFwGtCiwQe9FIq6e
+VTskU8t2A5M4iW7avYUadjMK+Jnju88ccuqTyV1V+lQ=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.3_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.3_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQCzu42UIezdHb3Eq7kEF/KsWNtLk/kXLRb80aXq7ukuTgVDwks1
-Lrq8cPIg11Nk7H+Eys7rTawS8FVqqb4Xqa5jYTc6cpGygrbBfgc5KFogo9ukJDTK
-eMieJtsm2k+2ps8/I9kGvq3TjyNBUUn142ORaKE0uT792iIHhqm9WJOEKwIDAQAB
-AoGAV4oR+wRLCaditletVYEUgT0GElmQCOm9OIYj+blDeXomtkn7t3t7GC0qwTQf
-Ohi2Q0dEYPcDyHWmJL1oCL5sYMoEmISCGadNwP8NPfcPaKS305pwhsTM9f0G7aEz
-7jRGJkJ1AGtbIyyIwhKYdRokCvYk4c8Spro7yiOnehLtlwECQQDb5go+X8fV6V60
-2MxYSEgdKiVtw5Cy9WM0mYNTslXZsmRX/D/t3TAVh1h0jpMdIKHC7qe6NPQDwMB0
-5U0WGclzAkEA0T1oFChvijl+ZoRLq+eAl+JyYC12bP9JPPa+BeV/yf+DV0G99WwL
-/rXXcqeQDQVt9ifmiE6D5T65aF70eZeMaQJBAL9TFmSQt3FR3Bnja2AAe+YMLoaj
-GjnqsUcprg7bYkDIKvA2xHSz90sz+G1pQ2ybYMMXHI4x1oGRaqIKhBiPlSsCQGDR
-jjhNoZcPFXrwWmd33pvpL01rm/HBiq0H61OlJyVb8vVMOU63qTE6CTBHcrNjwMb3
-HYgS9Jr+FCLEVVFyG4kCQQCicDltXxevyE3BNZ7kcyiEstq3UM3xQYY9iyXT8P2J
-EoMWjUnVw/EaH5X1i4G7tp+S4MMBq1YeiNOTpScEnYBQ
+MIICXAIBAAKBgQD9lUmrbUkIXPKbd+HQcU2YG4Qx4pCyCvavLhJbMdCCtM55EqVW
+RNOlSVFoRcxzDmdvBXT/zucnjiFyat9YQrCCXe5fnLy+ENKYSSqmE0esJyOD/ZD9
+Qp9NXVYChP9TQFHtaJnGIMYN5vtH+dhCCzbKUGknn7eKNvZcGgs+ntcSiQIDAQAB
+AoGAFLBwcUcaVU9YD+0pBFuqLAXatEM68PvKAqLspnoa+/8KdYBa8v3skqi3tp0z
+QBPlxn4YfKKB441KF0626DmQsvipil0LVO8Ivr3mjWQiRtEb2LKQyeAW/jNBpi1J
+koz8yVQAGSgAr3v2UTLvx2e2e7rNDAH9C/gx2p9DtHWjYk0CQQD+6er0BkK3wOXP
+A7gOSz190Pn81mXg9Ga9JXM+KMSwH8cOEoX4paGEN8nMGSid191K2woHbgJVxHqd
+qspPKyULAkEA/qnrIJy5kid9+QNLifUPwAhKZux1WLiIMyHjcrSq4TxtpzUV7JMp
+eF2mbm4G08kk+gcD1c6VdxtvY3cEjJQ7OwJAPPo9vuPkf8o/7tZH5/ttmTQtKKMs
+ubQdA2/68kqUSkE/v4kEzSbpzRP/TLhT8/YYNHjTHFXfbx7R6fdZ77g1YwJBANBV
+VaNSU4W7hRTnmy57Kq1gmu1kWAOCwvmBqb63CmxEsTfu98aYBX8Qrgz9OdycWwGo
+J30MCb5s1U07mp8ezO0CQHwV6D39VHAmFJInSIeP1stiXyg634hyrk1OawGGnxLI
+XWp0e7zknCiORPtLgkoLXkZSTzMv/BgvZCqzbY8JO5A=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.4_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1.4_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQCuvuJsybsRGhaQclWM9dZk5y1fGCfHHbVuEKSKuQ5x79UFQisS
-2nlRWAgqN+k9R5NPD9IrKbPehAKGonVAWe8me+Uj8tuRYuDXCAJMyAW/8fzTGstZ
-+Yagf5nIOgiCul9PYtd0pS0+uBfVyiULWTTQ8KDsOsyK4CId+9Cyz2LbEwIDAQAB
-AoGALk3aheU2sqNtEz2Yuc9yzi4L8cTe1X5j0xSJ5VCAKWTZ15je/RHzT8C5+SXz
-og9TU4HnuRRF21KzsKVf2Ht8SRAwM4Ml7Idy4HbQJvFjYDvOjspkIivHpI3UOn8M
-bvjLSuuEhOoq0ZUDOI4L85zwYY8y7Gz1bBYLp5APRkTZ83ECQQDYgSvrgs6rZ1wH
-cTOmSHJqybw9m4gqjj+1hFkzA3As7aIBpB6ptzKEDXOyxmz4owPKsMfwGp1Jji13
-BcDE1AR/AkEAzp+O5vuZcyvh/ZR2ez6t63WQfxffBKHAndkMRTcLscNZXvfVP/Qt
-4A+519shRKY5xPYw+J3sW5YghWZJOGaPbQJBANFlNS5FyE8c23RTNyoXHZpM3OQU
-/kBybgnIJGFjbOX3O14s9n8csR3oyMLaiOB9AZjTG70McJ2Ihk58YPG9QU8CQCwA
-Bmphwbeo7KMXbnOoUVkG3BJ0fuV5nI8AnYBPzIm6U9nJZPwNf4drUeQJofgAfeTX
-mG4ZEzAdtCc0NPtxu7ECQQCJiPY7V3Oqg3xfOAdL1GWwzeZo8dg22srzlmYWwmM+
-32gArO/ipkoiQp8B8xOTWDGHVjQFINhsmZs0nPvb5cvk
+MIICWwIBAAKBgQDCk9NVCzTPV7ylkZ6AqXqD+yZmxcFxIKv5gJpZ61SDg2uteah+
+F2cgGqh+V2743VSabvAtEDJZH3RTbaJQayMMuzQyhO19/vWOp/SSuymokX3oXlYw
+5vr70te5r/KGwty3M3FiKi15OKCxDeuHA1bFHMn7M1w80rnywLY83uLYPQIDAQAB
+AoGAZZMN64NiGitPC4+tErVmg6eEMHpjtU68+A6uhOpYwB7HA1RTJR/KcfP4qZuz
+Dq9cDxKCxsOBxQyqiTLeXOTQ8lYGURaypCE6WAoDbstgO/SDGAdVVmLze1f4ngBI
+YRsUPhHpctzSKJbpAC7pF4FEb8yiqDCog7Sv3uvAobNhpHECQQD5PiouZrCrvXXo
+e/gkQpgPDnB7+v5F5iXjgtpVmE2VudZ3V5JyGhhThfcaDaEdjCvc1xsQQT62liAr
+r6KIsKwvAkEAx9pDYmGbSAlOFRPo7Ye9PF/AHpjfazi0r4TWTpoGoHr0zWeQ/x/R
+uhTliGenBltWST0ofEtrFGu/8Bv2dtsLUwJAKFy1zf/ZOmabEoQI4i5am42WD63M
+wZsMpbRKETRx0/5dScRHteyd5eC67GAqqDNL4x5+hnpaYo0bNpfhtUsPBwJAcMmT
+IeCn+92UfXzBBdyHRZ1cFWh9HkvgXPYA5Fc0yjjaE1oRkInqmLPWXkbxEjtV1Pt4
+77y4b8vnhKCjVayFFQJAYsQVvvXTUaWDpHeH++EXrTv/cXmXVHrAEbxQ6fyDm+Td
+ccx48YQwWJw+9An+HNWTCVcEDS6gjjmy3md1cmXVJg==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDMJqcWeJr74tra48TvfstcIRyqwVM138zc9eKYC+aOBfTllyiY
-VJUVEckel+3u9ElOLwqiFoMN9UlleG26ohkbdCdkGiILhUfQ4YUlHlz9AHo3nn6D
-Q88XTi/qfclauHB6gix0D3dHEBqkURYInnG1fFRTYJKoDByzsQ+rww5GxQIDAQAB
-AoGAc4/lwXif8rnlvUZ1skSKBSrROW+aFMMNCn89t2f1KKwChvxcBG7MvVKGEIVc
-MImj/VfvovUvVnVlCMV1B9K+dqLXUFRe6wOd8KstqXWoxl9K9dZYTcE7nA69fWOC
-w07MlxkMhJHE/ihO3wEFuCEBso/6fR+6Gava5ags26iD8rkCQQDwBvaIPcPKWgkf
-We2P/6dfyY3Zjpe2pKEEImpseK6Bk0eFza1MQN+x/31klJOZwlKZpA3j7KzuWupd
-vvI5r+ZzAkEA2byDL1QBfeSZuTWh8Or9mkbwAkFcXcbSWu9Q41B81mhYK0F+I2IE
-Lr8r1nzW62qI3m41/JBi1UvbmtD0IJsX5wJAKTmI7i1tizubhX70hl7qaFE9w7fx
-5rSv0v32OVsg3bBmAF0q/oXF5dRzvOqnzyjI9wpuOE9WBDopNqCtCatkcQJAChYt
-jZe6qfZZGLdfVSXNscPvgms8uCtpu0Sy3pTv847J5tcV3NXBk9jPUxRdcHJy/Lrm
-TVjy+yaUecuMQ6ZrqQJBALxFiCUCBFCPHMb8f9qztsKonszK+0lifQaebpdID9Qi
-EG8s3wYxC31p6KAfWomT0oxITb/3zmOt5kUoXCBy+VI=
+MIICXwIBAAKBgQDqF3Y0zrPerFBioA8UUIlyJtWilxeR69+XfoD/aY4BCrvRoeDz
+0idWxi0PtYTkcPPhfvySjv13SMuszb/0qvopXxtEA8/6b22u22HxPu+V3kEjNqI6
+52cmBGt+nfaSXltMqwqqz5m0TFQFc4Gje12Cy+Dumykp5vvdk2QjE4XR4QIDAQAB
+AoGBAJ8HNUyGp/c8BJgbuGLKm7Uq4LNGBcMiBJG8ZRIeuVPH4PR3DoVVXVg75Vzo
+qdEvUt78D8XY0iR5FbTdSeyDQtIPpjYzpcoeAezQdDhCbDTTwXMTrCg84Bndf7O+
+Pz6hW8CaJh+53QhSW/WC5fwvz1I12hdeRV3C4SIvfi7BSXdJAkEA9j1FeiXSf6Ky
+adG4Wvo0NkvXVak1o8iMyzv85sLV7WDnI/5KqKXGdqwDQBlawZnfdbbpVcJ00Upd
+HA0yEXlXAwJBAPNe679nZnaGoDNR3ZDYiE69eI+jW6svm8FzZSleJI7pBTpIONKM
+7E8AgFaxKhdLxiy0hM2i/WUYYrZViXonHEsCQQCDobl0VKe0Z2rsupnMuJgUtnJE
+bpIoHdt2AXluepUVsomdaiDLCuOPKOEL8QHdIL6eFMujdrIv94rSphMv2Ce1AkEA
+iXwDFBL2yFiPYc6Kq4wXnNveos53N8Lia6uj53W+k1lCUcWBDDj+OjcfSVo2XAi7
+gH/OUlkUaysWgMjbrD0x9wJBAJXkqyY4CQgmKP3dmXZvWfatvokpP5SXMYDNgw0E
+6FT6ll2wf2CEpATESR3k1tUTKY2MUAFHGv76E55vFDRyVW0=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQCyjECjNpcy9yBo4vT1dqMTA0weMnxHLxYyFE7fC3pqIlR4z2nJ
-6qfmghdqMRE4fuT57b6iiULf9N/25CO9rUrCuqOpJjlg7gIHdCVssH6fazPh5zcT
-d3umf07odWHUa4kZa+Wl31JccSU31qfiyH/NT8REtRV8YvPSVNKfxZl6rQIDAQAB
-AoGBAKnH4mMRMx+8jS4Put17LcCTnxsL6M+Lv/BpDULdWE96S5cBrFfb8kKoK/nH
-pNdzGutqHp/SJCxwX1QXRsFD+tSuJUcDqmer7fGBR9dpxMzUAprl2c5Y3ulCBfLu
-Qn2W+j1SYll229IMO+dPHuplOSrtlaQPla6OYJF3FZ5z8eBFAkEA7C7Ik8UBeKs4
-eKeU7Eng18dnFmHm/OAK5thVyNl6FZoX4Xykb8K/l/yOV4ikbN3tfthW+O7qtcmI
-cfNKQMhjhwJBAMGHeAr0Mmjn9IT5JY8sFi6A1r+kcvz6pcZzQhBYNX1yu5KJdWer
-Jfcs6VqNeQa+k1YX2P5GynKDGykLC0IP5SsCQQDC7v4XkJNdUBxk4RP2TieokOjR
-vW5Tqmr1CvsKsgykhbFOJ3zkzV0rCYVGU/456JXbip2GClNoRPU776yKeZpDAkBZ
-EhNy3y9wTwmgRdc+jOjsoEm2TGbL/kRcEOIgCakcwriH2hIaE5BWsen4zlIcg4vm
-PPWXGlfE2oienEGjNxOfAkAYgUs7S579o+PcA+OdJx+wfSyK7W+xQNRDcDFkvcXj
-1A0VNfuJMZQ6JHgkkeWTQcYHCI4HWkQIpOh0SAOev0nA
+MIICXgIBAAKBgQC7EyN/e7wkT73DViN+hPalzYdR0UWSWw1ot1YjrojVUYPA97RJ
+HtLTIrjEEOukRYmGY9UbqE6OMIo8RDx4e8/AIDxn/35f4EWM+MsPz6xBxBvaP9ZV
+fTEUrh5ezd0dNCLdADVgWHSjL67TtE1JKOp4zR3+y574GQmu4xBAA7RefwIDAQAB
+AoGBAK5DiMjDgaItqe6hehTsVTpkN47Oq8lHCjmmtxYsCoj0ExCZbhbDIM7PRGBY
+BroSkKZgru7BnNO1gb/cLJxrcTzGpD7OUprXulO9ONPDZJfhU83FfoL28X5fDMuH
+q+0dO9HeaB6f0Hk/I85yV6y+kYCNRIGtntstDqOmfomOdlG5AkEA4YogcZAFDR4K
+lo5Lx0SdfuUofsBjoR51XwKJJ+TB+SS6D44ihHrU5S48CrRd0/i7PVwjgm3uyWeu
+HzJ9txVK2wJBANRXHksr0fxmQbYoFHs77/o84iG3VivPxlWS/Y3z8REQTCbAdL2B
+5YpkWysmhSFhvX/m5Y4Nc9KVaEo/9W3Jgi0CQQCIWTzr6qljGLpF8piVS0H7qQYm
+OqEAkq1aVuocGAu8Vxu0s7Tiam+ybZUW05u1vjVUDxPYkiU91VRKv/eIa3LpAkEA
+060VMfK5HlgB4ckKwd76WAchlmLhsEMsgFpMEZrBEjWg9HCe79vyK4fnqph31tNM
+yZgv9vBKKf9vO7WOwKdE8QJAVEpXPea9ltr1+0Csy4R/tCZe9iVe/T2BTg06G3GJ
+UaXMmRaVmLPdK0VW6wxQY3uewGDWg/0D/SErD1b9QP5b4w==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta5_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch1_ta5_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC8oQMi3Vd+mUtYjASYQfl3JgFvJHLQf4Iz1Y9fpiBsArIsVo1N
-/A2mGSkjL4iMZ0nD6ZCmFw4aYihESWiAql4k4Jc4WEXBRVk44DMAfGVjueqhgdCS
-X/5QG5KFecmRllEKvxzIplJPsD4cCAk7oWqv70B734vjvd5BnBub94WcJQIDAQAB
-AoGBAJRcJ7VSVjDSrTpV1n9S1L1r/RDHoC5xO509SWk3pqSNckoBQV6m8q1DeOGd
-z05vJsuadxTLaWJC9dzPyAv689O/NNvC1duMD94zgiXG9oDZRchwZ1wXsBCyUtpb
-06w2Awey/IXNOyOyLZG+TlRdOf/lK/w/gES73jezcvH3VorBAkEA6QMIkJ6HTZlA
-cJGKdZ5Sip8PkECNJtbCK88VKfHDlTBvFvp5huXRzCI1tr/D+DfvpFai2AwHGiZd
-KVRYaQPk/QJBAM89CmyC1Jpp3vikn4zhRV+JOZHj3wvHxRJw+4cW6HeXMrS3xmr1
-aW7Gi/+eVyw2CIneXkV866rTVswZ/N93kEkCQQDX6B2pk5sfxh81r0Yy0i79j4Fm
-Usn38QseeNXNdd2agbSOAC1XV+BcXF6VJX+6omoFRtnBgvOZwW6VezgoppkpAkAR
-kNf4WKKSsBShOLr5YwLRVT1W+1ylj/pJVOBNFAkCUgOPQ+CComicZiHpuc8jxTS2
-Eu4kr7D+GsnJpQ5FFspZAkBen0kL6QyqrpJMIa30XV7OmGVTwwdhfJmuy//uhMt4
-nOvhP+HJHzd4y3ddTyBP12wZI1ijRwe4kEZddDfdjrbA
+MIICWwIBAAKBgQC0ZQgwl3CG/fmJeznElaWpgVVxnvnxcpTsCvqvxgtDaNsXK05A
+6iKRYAIFou+IrXiKKBOsL4plbTjzQ5sQDsTR1+e6DzEGHvb3Vj9oHpWRX9gCE2Yh
+cu1mbiaDmt5gh+A6Y+gJgq/fUK72GUG6xa6PPmq694v7zZCiJB57CT6krwIDAQAB
+AoGASUz8ZPJEUTYGHa0qrgy4wgXBuGeG3GtYxAk6EA6DKSMEU4fPRmVdIoFGkQ/C
+EWGbp1fdlovCyq/1AjQoYAAATS2gmLqQLfwAw0FhV1zCDJuqvFBzheXdBn4sm3cp
+9/FumkUCFhAs65nm6I+FK+jAwTWlmygzGsryromf11JIjFECQQDcdwsijcPt8nN5
+Ej1YRheaR3Nq0TgIy70MxLmS/W7WAuaM5R/gRxwyzz/Mq7Ztdj3eUNwgf1CMXaN/
+CJbx2DUtAkEA0XiU+gyOdgOeW0vOkE8d0H3ZoVW6+CrjDFU381TA52K+G69OSEQo
+PWZ8J4AzUMXh6ndDx9uro4JPBxQ6eX6iywJAJTBTiYWealH+loq0HGLecmDhIECg
+kiNEBZZds2TawHEG0PeJc/yqzgtVuMGyaS6L6yd6qmSvgq38+V3KkIsnFQJAbC+T
+AfIqQdlsmEp2zSGPjHbzR9g3UKUVzvDUjOBhISBmf3XzQG+zOMMNrHkSB82r+KTQ
+ZRCXfUN3/Xf9G3LEMQJAad8iyds/Kl83lieC2s8Ej2L//A7t3KHOnr8QWFAgAyCW
+BSjqdJyiDiym/L9qomPyT8tqciAUV4Y3Ztkdx0+tkg==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.1_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.1_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQCddM8lNSbNUi6a/I0LT4Uzg2F68fHBVT3cLiB3jiDe6+Q3tmqk
-yJQJbPg2vXimPyxkwyPTx/ocNqMkUcCsLSBvFb+q2JRfX44KxeCqJAKl+eTMl390
-sfGhqzBscHSkWr1e12lkakKNxdC5IWZamzcl+jTMCCFFyyMQ62Zm0pu8GQIDAQAB
-AoGABTw0AvWwc5Uu7YJGIkEjmaHdpNvUgOwXoXF7LN5x41eOf/e1tgLhQSr5WcCU
-+VoSXMtMLqdwfm2moPeC43agpGOH4NBW9JhHGKoaLfiiSqleMiqlqrF/+MK0/0D2
-+1TR963duGwGuTFw1fjMU5ARIIssnKsYTGmy5oLXwI1XoTECQQDJ0+dYj6dr8QIq
-cR3U+gBvgrhx5Mpu/EPt+hnuKPBLBTuLzfkJb7hBUKwjMCO9bt1dCYktUXji/ExQ
-xBXNkwQVAkEAx7gHnabbDWEBatCzGcg653Ky4z6iXtd+jiEP5j9zO5+kblXzsNBX
-Ub5E9XubCO+RxZDJaNrm3xF6gElVeRaE9QJASVAeEz9rc3xCayRXz8tYaSk00rpn
-BlXAXyugS7C3SKkH7krNka3xYlhpjwanlOI2qtsR51JW9Szsk9IGkXw72QJAA8zV
-oENPgbapzz1/Wus7a7H8A2TqtAFHsC6i3c+xQp4sA8lw5JliP/Tt3PnoHkhorqit
-nGgl4nKzsQM0NCSgjQJAJxhdwFACB/G2abV/Ghy5jPwl4R/ux7panMX2jrdzEoUK
-jBXQZAn9XtJ6Z2SdoqhGct6jRMPi0Z6Vom5HHkNPvw==
+MIICXQIBAAKBgQDVtW+a3nlIHp58YbUFP/HvonSsg5L3+m+86r99rNjJ76NQASzb
+F3xobDQEd4n2d9tjCCvnWWp62RPv0LEcE+A67g+26XSYzjAl3VcF7VX40l56yTed
+KYekyFXy56TYzxnur9kNNednrodw9tKYHWLGqrbt0FB3ea0uX++nIoGzLwIDAQAB
+AoGBAJge0FSS7A3UDchH3IziGZsULqzl82Wk1IjLKIeS07XaaIt4aq+BpkLGUrij
+Roc0heuWU3oYgdz0TGa2THvKAh9jJpabj2/DPKuZdLmzd87AFOoSef+y9RsycB10
+BHGuh3SPRr0UzKQmwvQDLQlm5Y2aWdkvNZJ39FCOUr2b++uRAkEA9Jr2pSywCbK3
+KOTQ2v5GdG+J+BKTH4Zvrr4ABqunlyPm6G6BxaRatrSKV6LwEfCMIKCNeJ6re/3S
+X9uoxfyq8wJBAN+qBAcX1HhtraA3fms5P/uCHohbFLOt3um+q515v4fVWc4BWBDB
+hn2KmhypW+BL/7CrNGFnTxVHFzx6s4cKbdUCQD57m0ekO6+uhFUg5i0ayRqTJ3ZE
+IGrsJ3lGtbD+hkf4dtKm7+Vxz25effxW9eZPQSxQdvL57So2M1gjP2Cb43sCQQCI
+YqkAFkTmhqLYTt6UzZ05ZZfut/OAuWZzjGQjq6jiUHPpjaJA3XGAPjNJhPBUbqNk
+/JD9UDzGEcqWg4/TqcVdAkAr/J1N/5rdDciYl/j16U8amIijOPHwNj0oo12ZEKC0
+ZkOxMClj6MgiXtA0wm9PxI/TRO/zt/n+N2k3X3Kx/Cck
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.2_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.2_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDIdPMvR+kCDvSTucJlrnSikD4sNr2GsUT5rM6sDY/G+rSUYjkl
-YxJ3TksmynutfuIcmhhtEM9tgrYA21fWyla7r71ydhlfGPPOVT7Jn6ClZW0B1Av+
-oI660i0ZX3KTq1Cnkbo95tdfB0phwjp7Ineek3MWubjk1qSflR3zVGkZPwIDAQAB
-AoGBALsFIb4DAUmCWn1Y2h2z3e2tVdQ6XijESu4GY+vx2ypxzPiDi31uKVRWH5dZ
-YnpD3wGAYzmebWhmgxfZjOJAdRmOCM0upjKdpL7N+zReXVCAU6swkU0dcGkliE7X
-CAZuAI3iOBqtQz9Ysu/DgfGIKX8qimAa8DlGDC4THUb1Q3qBAkEA+Rmk69C7hf7T
-6jNRmSPQisIpfKzU/8X49MSmQIxLj7C9xv/kfPl+zmn0LZr06ntAGqCvyaBkegoF
-v42g1NrfqQJBAM4CYOK6pk315b2RPKH2hb/jPEWRNqEYlMGRXKYFnB7x5Fqpv7em
-bD87Kcs2XQLq4zphnUcL7FsbeKTZMrN+4qcCQFLHreHb7OV7qMrUoRJGL6BdI9JV
-0TbqgHA/BYy/0sB+mKKQGUta0kQgO9AIBcoCiWwP6DsV/S39NKnSlBcIYXkCQETO
-VI/FqYAGbipHlQm/beKuQdY2bxmVPTH9nAUzgHZxckS5x3fOVP81gnsF+EDeNPCt
-47r0B4hSf5QHm0CKU6cCQQCEO+tctu6RPuBk8ghRABeS3PgZLuJABabTg2Mt7Np2
-Pw0hyZ5PVERGMXOVPPvYgaidUPhEHmF2SaH2uJ27rCKr
+MIICXgIBAAKBgQC1bzvEquNrGuImQfJJ8UCFc9zs7wTUyfoFKfy7uYNf8QXSBpzi
+UgmR19U8Re8/dyvI/Gl4GZblFMN+iq9WwETKXEm8PHEKuQVuKrc/AoqA2uerR+sY
+QBhKgFQs3ZcJ332uD/I6mlERr4a78exdRU1kEdUPL71565HBXiMuGKpuiQIDAQAB
+AoGBAIEBiYbqV3AFmn3HcEbBQrZhTtotjcrbnmnjk+/LFa23TAMtbonB+Un5JIaJ
+13bR/pEXYMrjrxZN8D9ezxOo/H+Ou7PNVo2499wDRo41fqZdbVq81kZQ1hPTjFkb
+S7Hyih89D1fYIu5+BeHN9JYIR8VLES4b5Tp3s0YLbxG94j4NAkEA7VzQid+gFXSV
+bnqre3KX1wU2m3+BsRiuiMTTmltZdBddEq6Ert38jpXsnX/AmAXSyttAnDMvwQEL
+l+Kt8ehqDwJBAMOuN+fYApBUSM495cjIODvOafW0tUok3oZn2dxTnkcyKRwUsjx/
+wMSZ0Brz5kKMpyHKv0JwzXL6mL3vE+pIlecCQQCHw3ev9I2O2BEEkPt2b3Pz05KJ
+XGPk1JY3ukTB3BANO7PLlLBliKkFMTGWYFTbXzFTQBbzgL+GqD9mT4xoeiP3AkAX
+yO9msOzu2i/XUdLCawPa0SY0BXkbwAuETs8+ZrOQd9pjXWikzeqCeye+fvL4F9yg
+0OIak1eFqEw0mgDTs2r1AkEAmHXxOs8eAqu2dZEhVHEDqcP8p97EfQqgKnJihIom
+a7YfY7RGgK3aZYS3FLWVjX9sLjmrP3yUEl0MD6nDTUSBZA==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.3_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5.3_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC1duWQlxDVqgIC64f1ljqUMabZG5k2a2ITNs11v125GQIVeegM
-lRKAqJeFYDBvSj3LtLzYpk2gQmQo0wcuCvM1wzUQCPke6QdjS302zGV+vmXLoq2L
-Shzsnvb1FOeTQlwLo35zrhhCMjKgRZYt1ddcdfLjSCM0IIhPfhohjEUwDQIDAQAB
-AoGBAJf5zsNssW2wp2SYq9JTkhXhC5KS2ZtJDed3o1V1AuJtfmBMK7q18rwL9nJ+
-n7HlJKIBaZOsnCCW2dmS+1VlWFAJN9QFnEpunjZvQ0J1SGNfksvEj5sJUyVcuPEl
-TrBUKliwLTu31auUj9nZwEcIqKfBEiw1PH5IcozYOwrXbNhlAkEA6ks2pC5pbHMU
-Z3AD7oyzpH+MUQ/do1Pg7pRFo5RrQlubXkESn7hJycwRfJiSiPxMLyd7zM19ckhz
-K0LQuhSHWwJBAMZGuF6hChb1fo5V7E9OoSb1Ss8/RNgd8Y53bpY5OIHNHq2t5aSb
-+1OT86h3kxin/7AA7a98X0QOr3SpRDUCqrcCQBHbZ6+9xdU5NC3qELKm0K5R9lzb
-S7Y+F1+3t1MPZdlp5/6YERZRUnZp8k8/xbNhH2FcrgffBZenQ/fhIM198Q8CQG/y
-OeJjthikXuHqLVPRpzchwy0kIbCLp3iygeObRwYyU6HnzwKTduEHZci2SnzfTYOH
-4qrz462/RNzvPK1ZZh0CQQC3MCNFx6/85xbZB7lkwFXYWLd9yFSMOviGBVHWIJ3v
-FugIEWF4wktkRZtDq1wXBJbaO6vmpfAbgHICDDRTRXue
+MIICXAIBAAKBgQDFAyv2B07xo5uWh23q4rsL+5Vw9jSnu+ef3/+K/ShWC/veXXnR
+ug9Bc39buRdrJNtvIKNiXjq7cSkYM1Ik/6mbcEl/eJT3vaO/L/Te4m9hE85P82qF
+hDWuHaf7AC01M8wY/4XZNwoVKxVx3q6Mme9b3HtLwbMI2VcpKeCNRuB5gwIDAQAB
+AoGBAIxLu+ySO8ecKNpDSyUvnN/lowA0dD7WcxXI4CPMMANGuXAaxPtzMhX798AL
+yP+F2bYDWhZc4BpHdWpEccTjQ5Wru+CiO0efw/GuazgYtJDYI9V7p0aYntXwkwPs
+jk4EsF9136rKIzsulDVx/LPNXpAjhgxKrxTQOddKPsyBYZPxAkEA4r1qxxyZ2sqa
+F20jWFIuZ8jtptOnLk3HFEuxCRwEL6bq0NLjiftR+qFu8K6+N/OuguRyj27js9rZ
+3f6HYh5JHwJBAN5vrQJTBgFqMNq3dojZSsgUiVi1LdRVrsKpEdpEmMVm55teOtBn
+rBuqyalukSTrIthX0rVsdwj9wUq7Ad3Krx0CQF/ztLoqOlnCn08GmoyHyqeU+i09
+KGSJ+ZN3LKYkOwlHY9uXQz9jIaAkrOQhrtHSx6kQsAJO9QFpvgUZ74TwOBUCQCPM
+DyjHmbjSkSgxzFa7uYg3nd7z0XtRir1zHhdlYLysEev0Hzz44j7Vnnyw+ZTabpIo
+mBVwbju5MslHDUbXXpUCQCdQxpz9eFvnfPhOjYd3Xw7c+x/DyfzEuPVMSZgsuyj0
+K4pQzhH6PDUrpsOd+slz0HjbHLvAfFCaBZ1VYwBerHI=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ch5_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDpbG21Gu/6tfZC9n7m8z8RL6fJEBRnyftLxC/EJQ2jPGYPoBqG
-1RlI5lSjpo1qoomppe3nSa4glTkMGUGH4GOvJ5IdVbEQ6rRtWuYheJOU4gbmfcZT
-TtWvggihgmTBV3h+Uhj2OPBejgnq+vx98y2HXamO74d65Zfve/u0lglrFwIDAQAB
-AoGBAIQjqYdYlHmtAJevyu8azJ0CCU29GJAYu3WMvi2ffDToQC6gR+QERqgKG+f4
-pR20nZG4KRFBmJ1BXGYI9hvhXwv36ZTY0hzJ0WpwnBAh/AHq91h1L3hfL4KgHMw6
-9kN9+7JGjxOq95rLzlHS+KVkEQS8HAKLwD9LUoSPINiWAdmhAkEA9VE7gGLEIZ5X
-Zp7tkazr69AXTX63X8TPutnVDL6bNAGWWcPNluSEsJ6Q7VE3SPSL27ToPKXCBIQf
-mL7+zRHsAwJBAPOWmxpJwyOvdpJVDakLyLzZr/DFJ9pdrOlwkdYnHKRd+wbefH+h
-/R2ViuX9P61MGr6I7vXEeLy96xdIeFpaOl0CQGeWx8Ns8Vko3ctNrQ/ory7CjjSB
-H7nnB7jlJxvcmPka+nwpPHVNReK28ofj1a6O5Uf/WlnRvN3fVOBRNpMt0DUCQQDj
-Va+zvRut9lgHAfIZzrGt7sxRPO+Q0NRLmY/B+ga1MDDTnFk9FQWR0rsrIkuHhPuA
-z3OVU6QLIoSB2lTYnlTRAkBl4GdYElu/XS5mVrupO8hDpiPOLfKBTjMpKXCMuTMz
-In4MwPAfaYeAFO2fu2wCzqrs8ii1tZS+8SXWm2piKWxe
+MIICXQIBAAKBgQC6p6FgM+tZhOYvsDA4uEmXhjuCTlFqKL8qbdNGd2fsEHBpIn/h
+XXpFtYEr0up9QVziTegtBokcTBeqPPUvMhIEgGlSgErOoU/cdqFa0lNDj3z7guuW
+Bs0FiXQ0fZlivAln6SeAW3hlBVfItrS3g1pGsoBsPwU8xkktdXxILiI1twIDAQAB
+AoGBAIVYKgZTMQgj1FovMVPj+9b+81Z04t7HO0JxcST/OsO/Pr8tAVSb9jUEpMIN
+DK3s2xFk/L/l0l/f0Gwy3ioYSBurWDSigMxRz3AerkBh9mOKM306yxyjiYKIqD++
+eB1KHDiUIaN3WwhKR6S+PgH5Vf4M4JKkwvsCqvYM7avFOodJAkEA8R3hqUe2x8Dw
+0WUOIlyERfuk5FcYEHYa8omwxlpvtF5S7xH6zmZgWM/TF0bIxrOXvrBX4u4R+def
+o7Ko8ZNH7QJBAMYtJLkr7DUdEahLpym302OlnYOmIQbhBfi/kVUTnMMgNJAVNO1q
+uxi9kl7mJ0GhOXAPqZkK+DkHspjRxVIfN7MCQHVRpMtJKZZoOsSn9wihG3sxxjmU
+ZxEbZmE8vdbFijSo8JGCnhZvmdGczYk119tW5y7RfvHcBMMcN4DfHXTtxMECQQCz
+/mSQWrhbNV/IP45Acdnpc46w976fhNnrp/LUFtAW2bVj+B7uVDZCrku3LcsR7OFC
+Srd7bV8uTTOFYWGayQfJAkB/QuEnKLjuBoGq5E0e8df2R0cK1Ip74MXhKHMHtWG/
+3Ao7FcABx0du/dKR5qMf1onHRuTLVjUv5NgX7bqL+jPX
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_cs8_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_cs8_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQCoidb24TKpvKXCyAAcoQT8k1pcKR03finhf2l5JKsFWoNx2Dy7
-5Ry44F6ovUEGy2n20rlIxJN8rsY4vNea8tuN+V9RxBvSxQ5XbQtzGag05luBgEN3
-Oo5UWZFpqaqfKyQkHgbovPI/w+4zP/Rfdv0kBUiomC8V6xbVJGvqWeYGUQIDAQAB
-AoGAGpKpFwHIuCRrSju4cMseeyhMfe1pkt9MgSZSnewfHtf3k5KReNqV3bxakGZO
-g2C9E1KELin4SxdPX5C+ucqCvS086jIgEi+quRiqz1PmGm2aXQbXAskdMFaUUJ6U
-XVIzQKqROX0MqeTT8gZVy0LnWMeolFo8TvBg6Od+6JEi9GUCQQDZDbS8PHR1e35v
-W27Wz09CrsaOw1ea8PcshJfCkrHmwRs50hFqLJj9dYBm8HZYTUbfh0x54/vbfYEM
-9eI7J7bTAkEAxsebH0DmW1gP+1YVY0q0iueng8VnWBCuK9Hma0S49ACoE0G/W+9f
-u7LGXQuzMTQe4BqZXd/Ytlagj99GOtmfywI/WQZGGu6w1X7RXNsjmvdsiu0kg2mb
-hPFQb/HyTNveG8cYY57FhcbE+TA4egAmihEoAIZ914CqzFutkqNHJvwjAkEAqDDk
-VAF55/gPLb6cwjLHqHByENDKrH0QogssR78SL4MOs5yB6awU+KA/ryLjL9LF/SEE
-e6WXnFCX8qQcrFbPGQJAShAwR9+Jue0Zvbtp5tR4u2sAqFtQUSFKr9Krc8kcpgjs
-bJVeaWMeCmjF4KZnnWB3glVaDTSenOH/Q5L8I4gTWA==
+MIICXQIBAAKBgQDM/fZ69gSIteP/b84qAYndB6cQXcp2v9IYl4Basbhua71rZZok
+DT3cf+tTH0WenGGY2hgIwz5F3uAeFpMtMKTjUkhdl4A9uT4lKLG+F9txV7o/aSI+
+g8dv/mn9bc96L3I2jYUoOFAPRS8i6EkE2hfVoRV+tg7e5MwvKuIhlQjLBwIDAQAB
+AoGAJ+fQkcNOwqZWCiXjxn2iLusMdL0tasyQw8TKcd1i/+vtZfjTdu00+7XTQ800
+qlnbDfx27U3E06k9i93tLMDpeBXRlU6U2H/83dzKEV49Ns4BCvY/Jfn9GRqfPtLE
+JNQkPwuM/4y2B7Bi2xk7d6/b0OXNPNFFl69Kcq7bwTv6zFECQQD4juKmxVHZzMle
+jHDvIg4ejThkhpwnKemAy4I6ndp0sqzccBtZmnRvBUEe757+ABCRlyqyZHogz1lu
+AST6FFYdAkEA0yEobSKj3B/k7S6b2eTUSjwjPq0gjZg0v4IeiSLxoezc44bhu/a7
+A4qmWYfupFwjlAuzHb4zEJiqsMATr7PMcwJBAICREAWpbQQWnFZOmJ/o4prE+1Vs
+F1ten4xiN9NwES5puWYwisUXUoCWnC+PTJMfn3JfWdN6i31rI1v2NZUxbbUCQG4+
+eSqLlP6DVPmYhd8AQu3Eey7mHgJxwNFjM2iua3f/A9R3APYyPrL5uiUz+qOuTRGo
+Dk5wm5+F6FNE6MKtYwsCQQCPDwb8NyTW7QgK8GbXenjrch1x0JHWFdZpZk3H+BcN
+1g8pG9e6HVD21yBClcUuACoB2Ki078B91g5KKtDlw3tw
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta10_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta10_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQCybbz/wv/vuEl1a4zUWozelGZVYEYe3A394ZVikVwRHg4sGeLl
-l5Pl3JEorINpjTqGLaHp5hexSeiYSa9duw4SZlOi1xElzxtxwvetUHtn0SpEmSEl
-RF/0LaUVaaISq0E4HMDwnsxJMJE4ah7pcg35qgq5Mt0B8muRcvZOhKv6cwIDAQAB
-AoGAIJr9Fp/DtUKv6c0lhwilBWeI68EUDz+XLvWyHrkBYf9kB5sTY3E3jaGoxQ4B
-VaCBOVPNaripS7R91JZifXZZM6VJdpdKRyOQRt5h4rm+Iqro1Qgpqlhgfo/qXPpE
-TXPxIMmgs3Y+I8M41CxEtrTaLy/2AWLr4fjo3ChBtdxc58ECQQDj6wzkx/l/RkLn
-CZBYQm+RRtobZWVNnqOlQGBpdVh2Tr+gbvguPUCjT0Mq1avaFAVlf/xFKAc9AwDE
-zrm5H1F1AkEAyGmzLD08bsw9FNwiMX32hGNU7DucWbVd3NoV3Rcvrz+qXHsTI73Y
-z66PuugLSJv76tKIaLh3RYIbr71BCsN3RwJAVQlp8iI6kKYiaBlFZejDv6xzzCz0
-sxUxcYKndjF2JA4VqUI+DuKDr2rvYJgAWomFye0KrrLUoIrySnvnB48L0QJAXif6
-u8ARUmS2FcTOc74gQVaBoXLoI+VnscjsGLE5//XDTiusdFBPOlNix4cZNgXCtzIu
-UDTKJGfaJhieJDZtJQJBAMOEN++kynQ7Wc0crjSN1mGxj0ls8n1VNjO1+YH6yqQQ
-7NWOMU6j7DE35eAtSSnPtDH9iqr0RzoklOp/XZsFQGs=
+MIICXQIBAAKBgQDapVYjs0vBWio8lV5emCF7guV9h8Kw7/R8HYg88I3As9pE+j4d
+h8qGf/ZkXIF8S5g7Dj6sSdndJ2fvoae1JS5i84ne1Eaks3YWZxpiDtnnA2eqCrey
+LBa+49TKi/YqJUlhBGQ74uWU5dyBof/hQPzl7ztw0EAsyzzq10ePHfhHPQIDAQAB
+AoGBALjsX6eALJFS9igZWSB+YMs60WhTW3oU6N3UiHaqKeoS84elcsW9JLCPJ9CI
+YMfEk/NWv/Et4QLoIkMNoW9XDBv6bL5tSXp6JYYC6zvlrp6EWPmMB/N1qNt6nWLP
+yHWYZkxvSkeQfMdpusXEyGvG544+T0+Ri+0To7hKpJDC42HBAkEA81t/+NgbGEoi
+CyCrX5so9EHY7CObJTp6ETgYxWGeoX5zlizyC7v+SuWUpigi6Aei0PRK5t9pEbrk
+oIO20GP4bQJBAOYBMC/V8CTGofeqJrUIybY7+0zlM+iAXT91F+BmsfbzjYBKIMhs
+VLz+MpUSDxwtQaZz1AaiT/Vz35n2V4u66BECQGkr2xONObB2oV3TwZxw7vMY3gm3
+nZ4qNoTojHQJK0g54PQ++mAt38k4jNR+Ng+29Rt+6Dv8w2jBL3tbUQ+glMUCQHhP
+fM444UHLaSOsrEycCS861uvVJL7kjmJINLIb5dFges71d4p/KCAn83uIk8DQZ3vT
+MMA7nQmuj/LwKcEchpECQQDiuJHF8tri1ISrgOZpQ+NVUhbOl1YPHuLJ9klI+rjM
+QFChVvxeThsutz+liKhiv5/th0iA+mIH38XBb+Q3LTXn
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta11_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta11_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDQIbIQBJ+c7YK3Dpg/tieXJHQdiB5CKbw7G5Glkk+AKoEFcS8b
-P0mS0Z6/6Dmob4ENUyAE+jMyt5Y+ZveF1E0y5xE+qi86QD8ol7Pun12yTOFefS7R
-T+z/tDS0ZLlW7StZXODF4ZFmIPJWnW5VaWA4bYrDjda5MDes7eu/7Ua3XwIDAQAB
-AoGBAKejHDqOnsjU/L3YwYQ/gS/ZqrTGmCiOWQ/6qpsDd4kxsu3hNiHqHaZltEm6
-EAa8mONUmqunomktOZRVdvSSBQKPrB3phXGo4ngw9WD/YEIuyOyGZXUZMaJN8YmX
-v0wVshmKr1BKaCrxtXaaD1s2Hg96u7OB56nMmoDih6NGAuMhAkEA+2Tk1m1/FV+v
-uQreykAGJs4eJFWH3HFXrqIYmrqiA++ZcEgni6sY7PpLKdl0aLQmSFkS/Plzb4pd
-1om7hSZemQJBANPx44/6v7563QA7i2amxJYl5bBRv3tOmD4fLTLGV+0rpvQq2BQJ
-mfJFnsK/2fabiP1rlcmP64kxs1JGpWRI2LcCQQDA3KiKsLo8RYpkJajB9NhDUQHi
-0hNG1VV1TjoeCmxdJKXMdC6SghK/S036ry8VXI+6FUvx89XRjo9rFYNdJRCRAkA2
-nLKNbAgyVchSggVWiwxGwDciKr5TUJosD65+0drgMwpPCicpapvvcH8LIZJRWByB
-aFJtYJdJf7P8NFXztE2bAkEAqNQ9zutNLQi5PHKLZfEDz+AA+Fa7HXQeY2n+2gsv
-BB7f9KMyVxLbM822/45na7s2RO+JjK9jvPEPz2/zfuUvsA==
+MIICXgIBAAKBgQDjEOT4RGRF6lQlDY5f9xy7gPUerxndujD6G2w+AJ44CcjmGlw/
+TkZRfSxeglstA1rzMNr8C0UuwkoKpXhoxYHZu7aD/JBkDhNdddF5nDgRFfF6mHA9
+PWWnZcTH3vtwAoENYRz4dw3GIkGRyREkWlrM8zAvIkf9ihOCesjCPl54VwIDAQAB
+AoGBANgDe4CAN9CXk4NIeTjscoYisY6GUBozBmL5cakul1aCYIAfdcC364eciHhE
+lQ6mkYCn6rw60I8iQKQONRWfR94bs8Sa7wDtl2IPlCAZ7Qzk6ZdO0X1I9QcAfvjb
+wjXX8M3UNBOlC29UDRTGh2ZjcN9gChZdO3Ay13r+trHHI0mpAkEA9iUywAfaHU0m
+5qCZc/cYqSmvUU9INdvzaNx1j3q8IXJ/4wpscC0K/8TF4FeCDiVpyggQ0RRtILVs
+p0eO8s/LIwJBAOwoJdQY+EJtChD6dI/ixBj5VBw+98U8d+oLXow13xpYjpjS4h4y
+H6xqkgo87e6LWSmzb2LBb0QyXmmENlJuOz0CQQCD4cZhUVOyI2ZWZ3IQyjHyYR1I
+KXx9Lw4p/wUWDSLDoP+YfDtBl0CvbZS/8OMEBVO7Jbss6w7VWZ+PuS2EN4WVAkA+
+rm1T/YivgOeiGAgmRMdN5afIk4IKTQF7Eqd2ybm88XJv59FyuFUl22eF5iQ1I7F3
+2xOef787t67NjPUqLe31AkEAiQ2A5JJZPQDfpB5Zjcho5P06XW+qrJMxAn+ayYP7
+aVkhRXxokCNbUjmKzZzJv4a7mb3pLTIVj6RLLj1shkaq3w==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta2_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta2_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDnOghd1z3IUEOtkodAWFlc+jS6yb1b158XuE/SFf2G2fA6B0gU
-88CknuPuAEW6qt46XFPWDd1GiNO2E6ru+MA++usKbUoN9zkh/13c1xNbKunkwB4x
-K1sAzrBVRHKXZgarQXEFSoNrO8+nzl1hQzu7YBnEM6wjcmad6XK+vWytKwIDAQAB
-AoGAREGbSqhJMqKO9+PzTQlHh+zMN/9piH0EF6pu1aNsLayT/2062ASEb5P/0Lf/
-3XSnGS88CEobccDeTjdMFDMV/HHLp7Uu2OnCOeuogs9yhTiogEYuW8dz7MvxSdES
-4pSIWMNBZLIjTyoaom1CxaECwgXVaChfmhvD9Y5zJ3wPgFECQQD1lqNMkGliyyXx
-eAXtsqjxsEw5g+8tzwMVDf/wddkQ48d6pDXV3rzyzaBLfj7NIgfqTi4BPU0/P3AI
-EmHBYORHAkEA8QeHAfBEKIPZaZ8JziCPxsQGKbofZxGBf4qY1ilQ2lMQ7oyNkB1E
-ODR96zxBMMhHmxDtHMLOHBnL8/Ib8WTV/QJAR+ZhSsIgyHa3VhmQisW6pn+54UDa
-Hmwz988QdmLaORKmzSYUSNgcM222F0QPuNjUvmlDGMPMwM6eyw4upoHqcwJBAOUH
-ZBBBgGKHNtYYWzbU1gnnRnvr8d78UXMh/ayywbNTbyldwT6JsMM/jc8zCDcUeIYu
-hUDpEvS8xoJdMpQkXvkCQQCalOILTCDd10+NPQwa9q5o6EcfsULyvzd5CfaO/rIO
-aF8cGnI++bXAQipz025/mU7Dye/xsJYolWV0++rCFQW+
+MIICXQIBAAKBgQC+LdGyqjiqwU/z9wfy8zAMbfcT7cPHyPiHjeqjSc903TAbH52m
+jrfr+vX35eAFmuSx7S3u//irI5rzJK2ZJoNN5zW3yLFgPQxE6SwkUO6GXPC6YTRd
++Wyjt+MWDpA1ngUVmTL/UN614GaI5tULrhapkfWGxCPJfvGdK4ZD5vvBpQIDAQAB
+AoGAEaenQ/LRd+iiR3+zWTaCS2UZ/tufxTg++jaOhcIgZDT0dlAlDoVJRbrygqTw
+exS6Dlp6XSmeKCUSCWhqRUFyBuxHjTq/b31oQzdKJjxKqU4E84ag6vr3EsFGlpa0
+nWZ8JxCoIiAqBWpj9vJE4IbWIQ5jC6kjlv9zzsBYR14PBLECQQDv4wAdx6sQQC01
+b0DhMNraX/SwPy/T8cqLO4A3tClD2rVgWf26UQwl5kCcDrZp6AneFK1bwfq7c3jc
+p6un4MMXAkEAyvQQRTm6sZrAXi3CrnugCUmDDtsxWWa/PW3cTo/MmbizgGnN54Ek
+PbmetajC2TF9WHtFn56P2xtAPb4feDsGowJAZtn6G8qXIqGRgJ6Rv7uVqhmILOT6
+mbHKuMWrJLb/FlO4fnY3HmJPhhRh0UdRmLjfOjO9XGEgIqzQvjK5m4H3wwJBAJfY
+HOg+NfE1kCGmaRb0hZsNNhICaxyxY/nI3WCl8/U7HInCH3zKwVuxKg5OEmI/xcFS
+kZfIIWdULy9CtPbWarMCQQDBpYm0N7dqHT6FVeCyXgp51i2qHDJcNb/r6uOQZpaI
+9nbe9QpWqRt924QGEoXgVQD6aI/8KSqbbNj29kJ488Y5
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta6_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta6_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDh8GYk2/pfALbE9mPwUX1J+ZJx4bOM5/zp5E95dlJRBmXBX9RR
-JjBGyXCYWsWpnmpnJCV6aFtjr5DnsftC+RWc1EHGkP3D09fP/gDGOctsrpzLdMS2
-H74bWJ/JijNm7DII/Nkj4Sni8z49U6d452lJKzlyi3QzRrH3OyZPjQZk5wIDAQAB
-AoGAOjw4V6/LbMlGUqYfREX8wSBuuqOuH9d7vN14DpqMxQ2dFKaalv/82YH6X4ql
-//4w9ry+XDqhs6QA+XdKiAyjoPiam1mG8rsVGIVTLd+Nfih843GfECo2fUMos0+P
-bCgRI4l5p4EaLYEEH5HrxvjLVqjoVbZtriUxJO7eJjtTdKECQQD4JPyXgJERB4Or
-p0bPL9/uQppOB0vwR+QtgreY6Od3/VNLvQBMxoQ1IomR0ezWH5qu2CvXj2CHiMzx
-+hK5PvItAkEA6Rd0f2zjMjySe8IE+4AAkSS5z/Q/ytovv2wFY+H+GQNe54dsGbpC
-oIAzsiS0MIhulpVPNVPfAlbHt4QPVu+j4wJBAN7/3kAIulWjeyD34xqu238zO5iD
-1irJcLW1k2lHZTzf28tkvrBAdu+Jajgxf7WuEUSv4DaIEye6OPP82HbBqsECQQC3
-DLdtVoq5qf3zeLPG+of3dBsEJ7FtUZmLv34gKZsN86q1MpF/RtoKB4QRk2d6cbo/
-QXRZ0crhoFrpUKlnQXy3AkEA8qxGlRED2Ngr0rZk7KPgwpGc7jDe1vylwLkVfQ7C
-5MZBpxTL0HA9fnrsHiPg2WVOokJ52zBNNS4nKkspwcH0Rg==
+MIICXAIBAAKBgQDgR1u2/zO4dV3R+DFH10bBEk7TlVSizdjAGTUh6gPDc+DgUKEQ
+Ls2apYqwuS5mrS0JPzhC7C+9wtAWkILQHKnHgUw/ncj1bco4BMKedzwfC59L0srf
+oq/wTrhR4SwBS6e3VmzuliIvLzOD4sGlwKrlRStQMYSK0FsGCi9dw9bVGwIDAQAB
+AoGBAIzniBGCaCYdZqJCAgQWlhc6v1di3FekZ+bYb28tLMwhA0kqnuYh4X6lPmsl
+DKfpaQAEPf6dkKjxufZTODwzpd3KJGRplbCJ86lxXpI/A0+uUMT86iQdKhAJYZHY
+1Rprq5I8SIJZM5lXE+6njuvNMEh5DlCqeY38m1s1xEUwVlvRAkEA/bi9BagglU3x
+KwmC79Bg5dUGah6ODrXXe4TOk62SxsdEXFO8rpXDPgKSxT9dARdsLvU+M3wXL4HT
+k4iiImNppQJBAOJK75M0DiLVULrb9x8uRaeMADW7chmXG02TqlVyRl+7vdMF3fHo
+QEDxCjZbVEZiO3zbhSXytl26a+s1RQ8Rh78CQGfO9BeiaGJuF2Riad4wxdSDSjKU
++c5u/BEfj13AwLLvyLp10FcmE1IFv4NQn37Y1HyJ/r8V4G6hka1lU+D6B7kCQA+f
+1uzWAkfbbKiKOYTYoAySeQ08tQMZUNRJZtBhhIRlpRSl6g4i2BTjz62zHp2BeNQF
+ICtfl8He9kaWNf91WWcCQF30bCMIbOEqKvue4HfJ6Z8KfV5iCrZwRM6HLgv/1blb
+wg6lgLKxuPz2WPQTBZo1TLNJra/iJhQbO8WNrf/7VL0=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta7_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta7_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQDBjrgKvRdAwI2zb8PKl8qwtpUBnNig85+vLsg/C1Tz8MauQdC1
-c01us5P5WJmGtGYhLZ94rUfrgXhdIS4ZOHpzZF7Jj1wc9ZK5Xy/z3uejjIrL0bIA
-7XwkqBDSLOsyfEgj/sKdQbUH11Kq6SDTKmNgxBpgJwUork+I/bqO/wLHRwIDAQAB
-AoGAUINKYQUo8AFosBQ0kEg1wu4f60zP+5t7eAZwu3C+RL6KFqA/7cppkjvWuKi3
-LAZMWU6+ABesS/VOGQcdQtZwcGb64AlP2pwxEOU0bvmXgjVBIEw/WmEGKq56N1CB
-LQQXvJTSFYs9WV5YNBcZv8CEGPOSFGHhIx4JoQy9hY42UJkCQQD6hdKxmhD5zeBf
-lpYtjg7/ym3w4hvj2XApX+371VemphYfZCeEzPWZEO0qlJmQeVD5xXZMLm7Yb+SG
-HFAupFgzAkEAxcoPpYSh4KIB36YZHLpkE8SRjTzz0w+hb2KVkOTlbLju2YzFfXkr
-tErnBeP0UGon6KdrsOxVfn7XnW3clvSQnQJAEIV2yaOhbvf2zhb+PG7b6l6NNY+T
-y0jxrqjW5v7A0wqs9tECEi36HGgTW/WE0xRNFMvC6288fCWU6os/dnP8JQJAPixj
-OLt1i0BB6IS01iP9O32J52TmnE0IiRPrQg3B1KhZZIdsuSFyzIzTDDX44aJNA0RF
-hOr1gPrsWi9jrQwZvQJACGfFgsRY+W0mUhyBa4znyanuYbFZee0BfvBHe35IHa28
-KvIl4c6hO0HQ46z2ikPwJyTKRfcxt7WLa4kkGQQojQ==
+MIICXQIBAAKBgQDWRPMLSgEauW5aAZDiHTk3SBZdFv57aUfw4rvgW+kibMx8LIoN
+dG0w9fWDuLWHesEMCloXbtwhU5+LAoSwRZ9nMTBh/xpiwqmUtPlwVw0Dr6EAWb4V
+XAh14FZNMOoC0IrxLN36dMzzmBWuGuDAcmQKJrbiBBckXVhgrAGncwNx7wIDAQAB
+AoGAcVajYPNSRjqTvpRZeOGQZEeDXNZO4iS8YxTr4C990DHQsFY26AsPvvg7V+Oa
+UgGCn8XSBdckJZTALZ21ZjBNsiYy0TzdRMdBWAx7nqqZiUuCXULKu8hUNXy761Mv
+/Gdllg+7FrsUksQvr/qmKx4Vra68XLnLj4m68PVPan6+YyECQQDqg+DQyGP2ReMB
+cZINkJGm522GqOhmo44tMu/An49K6yTLMAkjthjYikvmFcYXCa67WLa+vlRO4HUx
+EhtVaCS5AkEA6eY+KMNiLbg5p+yh2Tx+hXiCFQdVFFnjbKXLTQa8bclKOQ4HmkrJ
+BOnc7HNhtkhxgvRVrEnP01AgLQ2mJzNH5wJBALobaEkoDjQ9p/XYVCjRptUGaePo
+nW3+s/DosF10ArpYu31IJKijdTo7Hhp9AxP7SiBBOd1LnApwlHAZx3lSyXkCQQCr
+Wm33Vww6CljS2NzJVTQre9lwpmqB+khOdDe4OlMY6vphShHvyxHxc5LR9sWC0Re3
+pGCPU5PZbz3jQ7iRx1PJAkBx31CeCRqUO8wFHTfxYQjZniel34gYXnTCFKOt1JDy
+CANlvHx3Wd6sSI9I6QcHlnIXEaoZ9GUOm7h46gA0tllw
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta7_reqpass_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta7_reqpass_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,18 +1,18 @@
 -----BEGIN RSA PRIVATE KEY-----
 Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,7BD624221BDD7236
+DEK-Info: DES-EDE3-CBC,80D66828DA255C89
 
-gNvIPXGF51x/X0fkeOqJiLQ+q18lZ3RdASIO/pLyi9pe7XTUzzmG7ZJbvuP57h1u
-e+yYSOGINEHZ7jaLHj3oAg/veNnB5jsJ0XXHOAV/E2HgmW24GEcLZpk73MBx9tdE
-Wp9v9yVgapjivwSKd8g28Pp/+yaeLIaghMtN02+M35X7q0vAdOlo3XX4iRiiGu7q
-EJGK+1TvVe+h+w5/Yo6n3I5OE8epRaFPk818s5FsHPBr1hAXgxv0GU3B9efZRaP8
-TVno7YRYfA+wKJQLbHv2y8TpkjvrwtUgeCF4qMrzOvtFECof5kXuBEzEntbSgAO3
-cCmoj87iUl1DFRgdWz0dacJk0XOOZD/1I2VhBBE5PLBBLMyiNNR+z4Sij21KkLa3
-5vrVWfHM9H8w6fQoCa6uOwt2DyeX5uukhGzqxu+JD2xDQ3oZjlEFaNqdNzIcacKd
-W2+yor1knPVKYAiOB/eqRAuGZ1XSlCyf7FVC+6JyBeSvrCxfGoZLo2tY9eKbJHxK
-BOWT55a1cXvkU8TizCd/5el2SDM11uFyGEEJcUiZoLhZL2nPXQtwbvtNQFJB9i7O
-mIF+ypcvVMynxSBroDDE9n/TTdHosLHNiCYEGRkexdwHen4d4KKpOANEmIMfneR3
-nvosZ7smOJzujtxu002rgay1Ud/RBbv/wwThi53/xmRCDtESAjdLdQSYZ0JQS9zq
-l5mvWFV5JoWRp5d18Wv9N9KqXizrCg2OFH2wwkUajwKykruNj4aFcIPrDr/d40wF
-fq5D7MKIXO/H8KIzWc0usYOlonRqJhMIyV8eyLK4RkU=
+6tZvi4N6BO7V1fNvYwtpKndYFJxod+VDyiQdDaXZ4UBrpRkEWyiRlh9uzO+y9ZPO
+RCPv62oect9XF1NZ2DFISF3euSjyJNxpSM74oEgmAogL3doRILuK0J0evUmz5Uqn
+M6xSTEaSJf0sF3+spnmnE8A0USienptId2WI8GVsW2eN7VgkSUqTCOxfXvssYY+w
+t8XrdZGeIxg+rDeEQs2wgXo/TPLtrblRT3921mmkMYII1z+fnw65egCtWc9ZCrw1
+3Rl82+H0Xg9APX7R8zZ96IZ1ONm7zZrv0oPfqFUmglYUu6JGmytuXJ9r4lKZ1yLG
+CCef2F1+RqY6pIHnEcD1zEL4r6zL7PpTWMb5OQmgl2x+h4rcjWS4GXY71NeJP22A
+IKb0azXB+Dz5BbVAualDl1XWzyKHU8PV+Mc6oxywmUbzBvTGXnhCq1Rkue31aOUq
+5U5/AxaHPkWDKGJk4cF9jxe/Xu3xulu7apky1H95LHhsTFdVmAYbUQkipTtnTiF3
+ihahSjoqpOIP+2Sqo/1TjQHu3DTr8UhDmgkwAXpG1I7Oyviu7g+8JgMrpsntsQ8w
+Mrfjgif9usvAFmzN71klyl7yA1PtlZK+wwJJ4NURpqwYLOBh3x04FH5JeX2edYQQ
+u5pi+2XCF+JBChrzoQGwawid83+Iq3K/amBx2VqLwuQnHuBJh/QB/TbOlf81DSi1
+kImZ+iSGnsNDy/KUAhY8dIiEXrcNDp59Ap0wLdIbGXW0ib9B7DtIx2JQGh9Wnclt
+5Q6+vVXWtk4ES+nZuJaL354U0TjYQpr83dgKbIUoLdtWD5Wwsbs1VA==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta8_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta8_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDnp90up4nDzNqii707urxmas1lAGBwVYzwt4nD/JdCXMss9Qoc
-Vcd5t7koMPSapOAx5VLf9ECFSY78CKUFRO23bgALpy2hLEeVGNxe0MQkPUyny3aR
-+wCJKj9/q/Fet8skbkIZTdinEoPBjLb7AvCcH1HDxUntp24JuxEvpT8A1QIDAQAB
-AoGAU3u5SBD0ou12dVGqtpXLQ5WFw7ppBtKt4ioiqdCjqjTKu77rD98R7hl5zrQl
-0n1Mlm6weSkK/33M26M55TY7/Ek8rKGbeuyRkipuhvmtffo1cD4PuCNzfHaTF5Zq
-c12YEMrHhQVu125xiVO9HxWNZ9BeL3Ohyw0gmB0r7TmSYAECQQD6zBg9CSwzPQnu
-XfE4V5FM/Ywyme1BBIGe1yjszS4ShADVSUltWnO+a7P5xqgQDUzM0ynEC1Y20vLi
-FfYi2JTVAkEA7HYdW/aqmsc5arKdSR6Zv7vtqoItau1w24OWOe1jsp3C/VFZQ6Ez
-o8XwE9rwse8nMrE+himvqpPg6hA/lbK8AQJAUmAzHekjYXkNCARHNPBeQ2GMaRpx
-+UcXpCqbwJvsJBzDgUrfGVH6bnNF3CbKEOutbCF3uHLY0I0dRfFctTlaOQJABXHO
-yUBLu1ac/tTwBC/9MEn+de+bZhvjflpwShMqOYGibLzDxmfezYWQOpTO9/neuC8W
-lnY9Qjs3cYxAOo0sAQJBANGpCsweW3ExlJJGiV3J9M8RIh6cS2uGd3CE93pus5YX
-7bNV7W4OWpzebjnm5hiDRj4C+5Q+b5ZehzEuOb0zcWE=
+MIICXgIBAAKBgQDrdt1nF4YtgsFJjR79NBJ0cFu9kVBkT1NIZYXPDaaLVMqkT1j8
+XrjpzmF8jgQMBuhKZp9301ztLrDXxmEU1DOMXnEaGgrJ5ZAjfZzF+ELhE0Br4iCr
+BMGAtBsD3m21mQM0KLLbyjIArLg2Tdo8M4uJqkt4xZtkqnR9Zf+GEa3NFQIDAQAB
+AoGAMbXqkDU7MqiEPg75F+PCcaq285KWMlc88e/dDBWJr6i7D21hEAa/az0S/8TL
+ve5HZE2+JQIOgFR3KVbMcCVMrFIj14goIGoIsExNOa38DpMLDTlVyoTt1IGWoyhy
+P7dW2GBd7STRwIa9tiTSJ4BBWa8V+a1NTV80ekShLsPWgJECQQD6bj+F88Jf2vKt
+FrSxZK2y1YiGgqDWuqGbeDaYaRV7yFpGs/cyf1EMS6Gx4MsPREicuAFNjqSVYlVW
+2qtZqzoHAkEA8LNpDCPlgwXkawctkC35EtM8rjsEbkLK+fAN5qrZOGsJaWQcRWtj
+wejArBpe0RNWXBtVqOpJSYJ55L8aIFcpAwJBAMY9lc2M69aDdM1uBvXSM+o4PM32
+BCpXLOzsWZOGw/nr3QLRHaL8xATOrh4oS7Y3IJ/mzSk+/KxAXjvV+ASQlesCQQDM
+28WSQZL7Gq63sNpElfwg24wPtcclmM9sPbV3Fv3dmKvf+QZexvGWfeROFfuQ8mZT
+6ifTpeNOHzBjUYqI7+XFAkEA5SHVPcCq/6b1AfLWaZo8ziiRoretX7cj9rKu3VsN
+GEHIfRt5eGS04bOPG68qTuWJteiEVO4ThIhByp2zG6SO3w==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs1_ta9_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs1_ta9_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQCmUeECBIQWmqkXY1H28rnUVFONcYsvmPgOqPtB9HrTdJ01W1jj
-yEYThmePqp2wwJ4NF0r0SHZDPs40ttOQbXdCrdxQqheCpA4XZ9e3ohHOI5CyJBwT
-TfH7M+bx51QJrq3LJ+iuC/zZFM3Fk9uVHxPLFsCnRqNmU44k3yaF8XInAwIDAQAB
-AoGAKam/JMM+1268xugRYzwggujw2TDFPhIiqYF5F2eH0SqYKwKL/NtxenijvqBt
-yhYmQX9BPnpcbbHw89GMo9RYGEuHAiKj1fPzIi/RqcX7wbshlfUg81ympTyH58lU
-I6wBvFgR2On+nGQ2OgANhsg/YLqZjk6scY/ZcHcnP3Ec4akCQQDVZYXdk0GAWtYf
-svJyj0r4O8MDP+M2CXeegxW9qULDKnl+qwRvjFWprUXd+yuLUF3L0OhWzEKUB95c
-GtgmC0HPAkEAx4ZQJSqo9wXyGSmYVA2MnugS544aZLDktpoq5CLs90+a7D5ZUniN
-uoUW/sC6kuc67P8La3xhmnVh9oVIthSYjQJBAJLfvGJD/xpL6wKIVMy6iVwPLern
-pwfDPlyQVn9ipzvS2SpwpK3uBeuyAduGC3NojhZBJBjRn6VpQQddxpVwvAsCQQCc
-pLovM7rLlQNo9dr9wlVwPEr7N/lIrAgjxA2AZlscHodGifyeXr8GfI59GtpfkuIU
-Rne0v0Xxec6bODDJoonRAkEArSCKAs5Q8BhzOSczjK0VrXrjOj3iTgnCxsTs0aNi
-1Agm/bwby4V993eNI0xOC/FoPnIbyYWzk++vxrZzBDCEPw==
+MIICXgIBAAKBgQCg8lul4IV5Jzg0mOEMdKzAUiTGjLsboxLM75cu5+2JB0cU5gRw
+A85yeTr25J0xlwx73p+ZqNR96mkDEoeJINliDbzJKcuKW2ElhqKlblBtjVaszAVB
+T8m6lKQ0DZXZgpi8sGxOOeoJIXq6aX/7lPU3k7WowbwbjH4AM6iwkA+c3wIDAQAB
+AoGBAJK4XZP5+bNYbYSFWaNhOZqZR6043dlz78+jGs9H3uLsH4CNr73tumXg3j/0
+aNisOlUxvYz2u7+N0e1bFvOLXp7yORWeYxRtFYpJs77QyJakwMb1IUpSfngZGwcY
+bKMbGUGCT6GjhcmqrL3qwFwknSYM3c2fzecMP4RwiwKKSQsBAkEA0+NgcHnii28v
++fYALl3xbRbusZKT/Cd4YcCFjsn9oD686WspYt0PSt4nBgNIprhxVJJz82kCXZ8T
+htZYrjq7pQJBAMJ0C4Ubr/haNMOq05OOxJq7gqMeoDc2cCtnLWIw7y9KYdYDmFlI
+BHaIYezjGMnK66MUjucphas1gwZuTV6yXzMCQQCphyu68hoKu3wkPumoL2uhf46c
+ro0OWzoa4+E3/G6bTnbxPtcPDZVVrmaEjg4LrlimdMKmxqao50TFRiwPwlgtAkEA
+mmyqEWVxlBufN5zcNZz1yaQMFRrnRbG31uAzjH0sFjROCjYEsTKeSLv6eLPJJcg+
+5d4XtsCk5Ni0W1ERpJinPQJAccqsclJZH/SW9OcfTzksJLEKtJN0zbQEV3hKvT8R
+RdONQFEyzfV7nzWSYHKU0yVdiektN2P6JuijDkJZd8dAqw==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs2_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs2_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDFtvgzx83pbdmqd2AjhnFW3CKjzzbXs1n3Xa6C7T8XEmIJPj7s
-+qaS3wXOmqJtk7l+FvnFs4MdmpZqGzXf9riCVUVbQwpxZk+83wATJSLfeXa2mEIl
-sqFcR3J7lp9lPzcClykWnHUie10xU4AK68xzE9qOYfXK96/8U825EZU8PwIDAQAB
-AoGBAKhpgmIY/7ymZZJevPWFv2VNffQqvXxeuXOLyOqdS/BLKFbXPqJ9nwXcEwY5
-kcHk40wUJg3RKw48b4NSSkHL1r0rpmHCGYBtBvippTLAiRqdxwk/WxsMisy1Bx/9
-m3AFdyDpG8ljB8Tc0HLQ4Ry1TZDuwG3At77AW/6u90hDdGeBAkEA/3IJ9Ao5sjYJ
-IXn/f5Oxwizoajt8u0F+IV7+Y1TEv+cPKneEVTtK9gqLuP9i2ksSilydlPqpb1pS
-+Dj5RfixGwJBAMYk2O/uOsFY2b61ICrTEj4kIfFmSpKt5QvwBtPHvVQ1lJ//MGdI
-661vC0sFZnFuRXqqDdnxX++rJWHKWh+2d60CQQCz4FTb8Rthv6U8WpEtAA7LYh4j
-OFKD9gFgdGkD/1wwmf9W8yRPdFo72X88PTIZ74VVwxQAJWaMj/ke69e0iwQDAkBI
-u9PqVv+4Y54idChnr+09ZFQVYeAz8aNne2d2LBbip3x0Mt+YulrQ4jc6BbRyJPFa
-Mrw86W628pMZT4c/puJNAkB8TFaqmEoERQp0l8fcTtFePcfbwDC0ltLVk2FsPO5S
-9VwKivuPZrFSkCSopBLT73TdbQCsfAmc7uNVJTEMiGAB
+MIICWwIBAAKBgQCYlzCSkE1FWgzib/slnnJ/VmT1ZPWyW4Unt636JNdUAB1cTcKS
+gXbxN0kUt52M+5ZpLREyahnr6+sno74fACnIutbKl9/gg2hRnIH1Y+BpORr+Xq/D
+r7YjuKq0Zcf0fmPb/xt+zu1gfb4v/QXu0M1yfpGTaYIpj6ioU7HX6oPfiQIDAQAB
+AoGAAUOnbF9ztHJlju68lvg0HKf7mCjo/DxT4xtbfqoVeqWxmJUwWoRmFuONYHWR
+AZ0IBwEPlmpYoqLGxQJPTfRzZCoZoQnwbTPFakLBptPFBqmJ5j0mUaIFEw4Ha2mG
+78ksElPMzmPSdUn+35BGvTmvs2lEFuLcN8bCCOfUmTnPXu0CQQDIJQD7WHCsgImT
+aWT9LMVNknnlq4Omc+RkQ8XdEX18RffWT9XykvqLSsPGh4Nk1zcgI1snMP5bzVTL
+MGsT5FVvAkEAwyzFkmi5w8GUGDlKbV8L2GkI7aype30k4SS4V4RX10gWMbCydw/b
+IBr/PHriBxr1m/SDPn8SOhMd2dRf6p1OhwJAVI6No6Lxt292sDjO2ceYc/V2Wnnj
+3OcJjvKzHXrOMTq+QmToVtuRzld/7thBwtDKEWHemOgyDkbplA6YrobBMQJARDpc
+fsf5WINNQAKXEBDP1UEyi9N2E+M1hzcM8hsjkfBzQb+hQ5nZYinN29ihNxankXMy
+hiBpwL96CfIB7cQ79QJATK054vPDaB6CkdPEQrRcVS5YO442q300G2YQHppfFuOp
+FrRrdwgZAO0GuRC9EsfVY1woD0pjq7GNt+D0lSQZvw==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs2_ch1_ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs2_ch1_ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQC/rJ0XBvsPBiuP4XACKIED9R/0SkGHxUzhTFudiS+i1F4aS7aT
-xxBB2eng1UNknzkdyCqTUiMIknijXzuYUOhyOnMST5lLTQ7oXZLzC1149ltLyDYj
-48qriqpSM9EeYdE+kV3uOLzEDu5U+aoAo1FVlXrAew6y2FWd+K4fMqeH6wIDAQAB
-AoGAC0WNX2NLtFB6k1WAjr/vBlqN7IHJZMCXitBAuvzsTjkK56T4MayNKjI0bMJd
-2jb61uOEjXFRGhny+jiJeqWXZbYijxJd22+nW/5vgDV3zVBIloshwVS1Z2cEe21d
-6+o9Uum83S7Ogfqo2ecE9Aa8MlTtF+uu/dbK3qZsBYWMq7ECQQDwQYaMjRjTA28U
-WgLR5qbaZeGdmNeiZDMnMIPvA5bdbt4Uw1nVj63+oLJb8VPWU5u9t73LHY6j2RyR
-C1Gk/evHAkEAzDwX/Sx+Ga0spVIBCC0rpMy1PqehHXtz+gBaKzTM/IfDhYT/OElU
-sNzPIQ1c+q0mCkhVqpFBlDkwJfbEak/avQJAdjG2MJUFXmH1Fo0FkB+pfA3dBXv4
-sVIb/C6Y6U/Zu0vcg1hrbG3HylliBWtetDTjjFzFSRRcZOzdadmoq8OjZwJBAL7m
-ZN3m2q+RaSvWLNTBtAvEtJ0t/rEaFdvWvHGqVvisxhtlp1GraZgvrQQOA5zkf6wY
-1MosIAo2MkUqFYnxvlkCQA0ouzbLD+HVZDpREo+vwijUfyOJ03aV5U8mbL60GnnN
-qT8pTnPDSvYbVm6ds7Rz2MqIB9pQ44hlrL8fnySZfCE=
+MIICXwIBAAKBgQCtlDqx/T6+HjNzq0ji6pnYHU3EgOb+tm6GRcSGgd/FYz23m1B1
+vAmdzZVsbEeIbQwMJHq5UPA5EktrDC6jfYAnYVOLY8Auop6xTQtapP1vMiAdLOoY
+xOXtYk3sp6sHbos/winHMJB/airMCJuCSySheaIGplx6YIPFumgs/wEf0QIDAQAB
+AoGBAIy3MxIh9CBaCWoG/JKAj3GE6AuaWCk7qcQOgTBtzwOM3XagYYzggIc+J5l6
++k6d4Htjg14CQIxzyVIh0RlW33E25iPFU4dhjeSKvsEjgzv5LA95uR5jjhzwglhQ
+7iMx+0ak3yyzq0EGUc5ni7wuRAc59oPsZlj5uRb5oFNpnjVxAkEA4C9BG4R/nKVM
+eWsDBejqrZGBm2bWX2Rr51gmPyVI47ElTgQvDGfdLQnO/pgUbp+XeGOTTKgUVQqq
+VCBK7vEdDQJBAMY2cp2BBdKbq2UPfYH3GAJI9WK0Diz0OeOyk972fG1+4c1ma0qx
+Mfm73pqhEjvKDmxl6000TEtsYgenh4E+xNUCQQDZEchH/b6WjZODyXMu6L06/LXz
+I9sUmKbGZZr6734pQeBuLyzjJTqKnoG4EMdP6eV/Y2NACUtOoLoWJQKJZBuNAkEA
+i35CB0qH+IIJiyPtpgtpYCJMX1xsJYLzQqWon19EjiKfcthDZdtyWli2/oegt2cp
+42uOv1Sw5Nuv2ccy++hayQJBALjUzaDQcH5YHPVIgaMdch402gtOVeaTa/w0Y7LO
+aSZ5V4Ge4nhajNMIbvke3UjBLWc99Tt6deHXOxG9Nxm+Ook=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs2_ch5_ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs2_ch5_ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDNyavuoYkBYIkAfJMf/kxUdVhSgbDLvkynpyMYhg6f4UGZ3f/n
-82YdQd2qnvcjLcQOJBbiTVSLOHJVtBEm+fwE/t6bgwIBmDaOQULyC6cHAPkOZpag
-5PMyBiadQfuRv36owMdi4cnON94Htd9Vh5qlO9TFtiRLKuSIUIXp2RMSRwIDAQAB
-AoGBAJU9NFsS+vDsuW6I6YnCOkjl8O+k7jpT//N12pXmYqTAD3su7G+irON66O7b
-6g6xGgXHVnE386Ajh4dv1yCVGpaXyi6O6EJZBbyzRi6UDrIHadcq/E/SLGyFmkAT
-wa6jpHA+RPLSf7q9FFCfzYsgraSmlRNl1ZHCKgaySVe7Ex6BAkEA7QK1jnRPuepU
-nFTsvu/qkbkQkdZDImO9R8lr1IUrwBaQRBQs/04TIrIGp5y1lo9EZ229eIH76ZDZ
-P0+ZYt4+/wJBAN5Gjk22wNBWBNpjsMmQFNxgiEwt4wv2qh8m01QzuYVxuhrFTXVH
-Tf66FeOnWrR0iH5BZ1NYq5ltJUi2XjoUdLkCQQDhRYjxjKXWrN6c9K9NUFYhCcix
-BPksb6aR2+XMyoLqAcg/nPmj9D6F5LYki/Og1i2LLShAqTOaLZ3/6hV9foZbAkEA
-mDR+S28CV2cfyaAMNenorwOXMXsWh2GwGsbOXVFSD7PRuXUz1kQuf2hThuFZdkp6
-EOKea29Dijs4FbNzkJfjWQJAOrDi5DycnrN+YB5LE/u19fCOdPJIJZ2igpBZeBoM
-LwiKycV71vjX3g9j6ODBmIspSnBREkORaIj1CKpL6iBT0w==
+MIICXgIBAAKBgQDMUaOGSKaBEQG6vkBt3Pe2CviaEXHqCUI67e5OD4cQmW/I70G9
+9tAXp9t7/lHd3jryO9fefZZxTn9O0M/dO9hrzsqDOn1uZc21+0symuYg+O2OTJn0
+At7F1DtuNag8tJ8/XjuFM0pNszWj0HZ4dNJymZ7BaR/RjyoR6zUye7qPmQIDAQAB
+AoGBAKZ2NPYopo8s3e3ZJwDbMG3+TkCnydlVJcKBKtAqUm4xtCNO2o78UNmVBnrk
+3qoWbowAOYWpaDJ0M8Bw24lxQoZMUf7fJ9ofJ6QPC7MLIxltaixlllOPREVfM4Si
+XDt2VUZAarHh9/fiCkkEcys8PYs280TdyCFnB+A3YOkhK1aJAkEA/Z2KttBipSxo
+Al+EE54WS9x5846bWGL3zQw0kTuq1HY4VuDWymLkZIuSwFbq51PLARiN0A0Kp+LK
+Te7fQGf/+wJBAM49cGkthicDk85xLkBK7OFZLkcjVS/jS/u7F6swmbn0K2lGA+6E
+4lc8dVA8KxXMygmWPrdcSnXQbTKUwHrZFnsCQGmuNTg6m3BykaCzhojaLjZMWDDq
+cscg7ltuQ5VlRKkl3hItvLM3BC71jiBB176vRv9c6PMSDCerNFvHNxZSf/MCQQCa
+cQ3d5XZhft9PqBffk3wiILt0EDR5wPekke1eh+2GgB+GHSVSl3Y7p42eQQBuucXO
+OhHLE7S61xL+3r/o/upDAkEA7/noNEwFbhk5ctzIPRr4PS7KrqR/x/ikHZ9YoDZc
+0J1o9lwIC3ye8J40Q/6gHw1owEmpuIFGreUcMgmTlwdg0A==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs3_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs3_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQC3YHsIRwoFwWyAmoTi3sYRZd+mxzC7N+munjed+fM6GDjuvuD7
-a4T7kyxbHp96eNomKMf7bp8uj/laHOgL4PFcRfagDlgBToYgvf99DEFLslBceIk8
-SoPPWZ/kFyfe6qr/yBn1t8NnvV54eY5GMxrvNkD48n68ylSFV1bl57hSTQIDAQAB
-AoGAAV79TICLeKOLliKRn8ienn6uf2a53Ix8eMvCCrJVuTd5JX/T2s1g/yiIil3e
-P2Ir72EarayUEBsPeDcDHSOfalfwRdkUDD5pZWO0ll5VdiYuQF0C/FaQFbbY8jb8
-DXFtrL48doq7DeylZTzpHDeKUlMpckItVsSBPnL52Q4YIRkCQQD0Bjd6bs4jIQkZ
-Mtvvm78dZy696+yngy34363ewCQDZPSEPN7pMQf3Dxdag5e6jum5eHLb8Lk29ewQ
-9CF3N3dvAkEAwGBS+VILOSqulBfSySTGPO4ecMRP32K0vnJVmnxnlTAC89I7zLFg
-+d2LzVuYMCrqlwZ5vv5ekDqS5AKe2nbUAwJBAMicy8M1kPZEVGyI6VME4YtUppKw
-gC/+oi62BQTZRUIdHwAP4tom2vt7RqG9CWHv16oIobS7JClQ56/QZCrUSLUCQQCG
-JaU2fmOdJYo/cq1l3eLusg1ADWS1HRt0gj33UDDa83PbmgphHn/FPRwzw19Il2Sm
-k7lp2e8PHAk6PimPpbUJAkEAonNbmJmyGdLyxj6gKb9vt37vMXmU0B/tQjHXGmT2
-OmBb/wT01cYRsOWqaPpb4d7yQWmSgZhXROZRzXwPQXBcCA==
+MIICXAIBAAKBgQDTAb5o5gdr1PEQnpmTy3lNFdE5+7LedBBXhMOrPiXM9H5mHvL6
+8jK0xWyA5zGAGpZ5loO1RFjxKps7wA1CACdJv24K1ou0IFynPRF0JZUIRbvFygdC
+o+gZNuFiQlO8Lx+oEDHuQH3stVQExGPoQxIJfR6ZYPbb7GXTE7s2vuLY7QIDAQAB
+AoGBAJcznrAodZTtqDiSjdZ8bdWxFpaIKGqDnNo6BsSE6i1t3c1rzA3K1E75UYEl
+KjFz2/QQyRxxd5KJR2ePfXCYD43Z9uzOvONUIqRPNL7vebVj3+40LBlhZPHuM/0+
+h/hPPTzUGUQ7ttulvsB1JIH89Tt0przV6+jmG2QNMY7l/rTBAkEA7U1v+A61xNpG
+fjo+iTkFmk1rhrCPZqUXKllFR5VkN9Gip87wKZ1TxAAD90em3gg44PyGimlb3BR0
+P+0Gdk3NeQJBAOOh51Gb00bAT+yBVIdj+bMARTLwlFsAdpb11pn3iH8/6broHALd
+jFja/vWTLxTduSM5XS2dkOLXnHduZjsvbhUCQG3k5KuNtGPbabXfJ0LJI20X2Wng
+rigs4BN+j/TcnDK1ZIwt6056S2aDU1La3c4JJL4cc/n5XM8IseVA0TNMSJECQBNQ
+tKknGMljHiUKYFrQr+pxdm25Hk2Of4GVwKz15R4vFS0n7uCLXhJYGtRJtfAGVGRZ
+xL9PJHErLHqx4njZMHUCQAt2UfaQSl//9Vjq+cF6n9oH4XWXV1jmDTkumc7j88Aj
+KJt47QGxDG3+U3zzuhDbX5VOUPjZvhTf8JGv2777HTQ=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs3_ch1_ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs3_ch1_ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDDDHXK96eUCEpy9CeImJ/XzHtB5FSGEdHC2KHOaLCPam54v/kI
-yaNEmSck2sJ26Fl2vrIERhz0Gnd2c8vdU7afx14ECjVD4V1dYptzEwbTlo9kTjQN
-vzEzPAUkJtdxpoNlH88BJcGHSTW5EqGcr0xP2iZZ5BPuwXJSGvVJhJIYOwIDAQAB
-AoGAb8picPREjem6kewyBG5Fnu/J7VgqwbTQ3rY+9wi1uV0s9/Q/jbPT6etFri/b
-qT8+l3pwmVZ+HcJVmgSAYdgrIKLDXgPwqb2r9PMYxxBUejme6kVnnqBa0930O2JV
-YEJ4mFAM0PZHN3sTI6cRQtmkgIZKVoLd9BpgUBzQOsy8R5ECQQD7K3zct7bMpwcS
-P6lWUJVZuKcSIShG6ETIJrEPHoVLfQJZaRRNUwWnwbGIdVzfXlC/cNBgtyGQ91Z4
-GRKeikV3AkEAxsyv4kxflDr844E+jyWyx8GSQSwnbfFdnry0SPAfuyg5y+I3r0dx
-MKB897eja4CbtAJCa5nR6sGL16LmSwcEXQJBAL/XyoonhGcyWJNWrrev2zNpd6rA
-SqxGMmsSKoEa1cL/27CBMzGQbSxiJIDO673sow5mU7LbjbbVRGV8+RzBDicCQQCr
-P0sLPwreX2nUeFLxcGHu3PollelpNY+V26vZYK+UwvP2gynAnWQNpVHA+bmWMzTs
-/T1F/zzqYksaN8L1QlgpAkA7i4L/XULip10VMWcxH+L0ACOlI+ZSUbLUda88eIQO
-ZPnvLqJXE3cyvanTWDTVEFOkLpFI38413VX5L2tSNJN9
+MIICXAIBAAKBgQDWC2UlSqvGl2DwChMCElgKJiZ/uhCCpGguWdyeY3FMA4VVe8Ag
+yDvzEiSM5U3UQRBfXb62dndB5VdIxwFCvhig9zn6PzAH6W8FFgBDmF76YkY2ebFq
+hCIVNhYrI+VvL8bKrtxylXpIm5uucr3w/9IL/oLsUzgjzW1lKLpTXHRvXwIDAQAB
+AoGAEJg3kkmUwcPQvyt4x8tWSgslJvfs+cP3U8ihwyHgkc0gFD2Q6rm7dB/u94F7
+pD4bH9mrxIewvUojlz/eiCcmz4enlCf0nRY7ylgqA6RO9xSJ8NvkLEhijpJ2IYL0
+hIeJi+zgPAq+YPK6UX6PdcVMJmqlcS3e6Tu+1fei4qTs/nECQQDz0YUZGHfF7AVh
+/kynstN7XerdXdNdFJqjbpzXlQNTXrhB3PF2dPNrxNoN76hjRBa6IG4E4zEOEpxe
+0VOaAEfHAkEA4L0Pv+zixpw2RWWvE5u1D0OFNTB21BQhsehM5UcgVTkXSq28Ur5o
+bZilFuot+IJIj9D+aorNocaevq6XElSLqQJADWxDf5YxQdw0j6iIX9MggXIyM+2u
+bTltKgI08Elr3XMhgb7ALF1T6WL0/j9rbcuZ1LVkWTCIytWLdkzf5WKOkQJAJm1t
+cf3JUPiI9xjJ9Opc7T04W73rs5u1nzv/WfztdGUMrIJEf0l7hbHiGKb2MVXlnmG3
+/vO48X6KykQEJOg78QJBANmC1XrEY0vj/bexDOYC7h4nYIMAB3y76/o5dTl8xX5c
+axsm5B311vJGDgH3ct3pALIf4KZhIqZkZNpk6QuTa14=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs4_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs4_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDXQkWm0PSpVG3ITULoBaQzJfG36yDfMyZuyjBjV9/TqQKwKfPL
-e2R3NH4dx6gsynMjIkNxbDOeiQ6Jzm3bK/Nar+Pc8xxIZGBdV+YXa+ZhS8vgqeMc
-qvZwNLSL2BnmJgZgJILG2F2H3pkrDXjbkvLCJGWL+Ae2/heNu0/HwK4kyQIDAQAB
-AoGBAKXdsBPpYQz1PJ6iQhLM/ghXjZk9eZfjLxMhgwWZmaPb0HFz8iJyEyjzbtZ9
-mS3iVbPV3AgS6veW/nfbc7T1ec6WI9ddCuP1EhzbCu7KNJ3GfcS+EylHFYVsV2Ky
-RsOJILsk92pfMy9KTOnuqJCSZxPb/39lZ/gz3uKu6YR0MHKNAkEA9ZqCT1NbT9oK
-X2morprP50aKvjS2FQLDdIZtcRSS6+wYOv56MbftPuCUldQur7CvWUYYvUq9vr58
-KCQYUJg1YwJBAOBe7pYBQy3fExhndMqmqQP7OoQmNEktPEBI+KHJwWVX5e6k6g2N
-k90qknwnC0ujk7p2hS+O64fLXFbrcvDmWuMCQDffT3e2UdaHlsZ/5eTaySMm9Bcz
-LJz5BPf0QN9xu7659gUtsSSwX+Nm+cZf/8LuIeXgQW6Gm0XSVbJYC8QB7FsCQQDa
-q6rbh19x1XdG0Y2B8+vFdZQSNym+J9gQzw2CoJ9bpc7yRsfVbaYuZs9dMLBRh5ry
-n5AuSZxDPG9CRzY+kkMBAkEAl+F+hF5cNS0QPoM+AKSOlmexMQmWa0R7+cxGYeZn
-kQBcY6tJuqjb2Q1OyiEwoZTDnLV8Hr2GbuNavry8SQQ7tQ==
+MIICXAIBAAKBgQDLLFp0WadgoaQbNiWSwao5P3wX3tA2wxy/xiUw4BB713Z93tZx
+bIHflSKk3YBVKl79gt+UoKr5jrHpIL4EJhgX6ASer2fKV472kixudgJLhNgreCsy
+dI5M6qs8YWLLla9cd3QZsg5PSWOKcqzBd2pC7ZFvvqTfyAsbtDIYRty59QIDAQAB
+AoGAKE+dhtY+8lo/4DJHFC4eowsoiOfpceQWcSpUOLVML/YZCXJMI+b+gajqXcGg
+88TbYfs0dx3FrowUWofni5UvVDxxvPebTPTcE2gdbDaEjR9VxSe1rOvRwAz2j8l6
+KfNzrQoviXEzxQYAAjnB+j9MZhK51OBXU2IEPwS3rEIpz4UCQQDkJsiWUDER104g
+bsVjvVElhnLgv8mF7zt4kz+cz9QQZrDqDfnqgTDMFiVypAEJTFVWzbr90XBNO35k
+jqvAe+NTAkEA4/kOcAcwDsm02AWr/H/Z/Psf50bHOg05R5hvbbt50mN0m0R3I6V8
+9LU+OEczf+vu+/ssoO2B66ESaiTpK99MlwJAOiXEU8MGbpSgPdXdiwkSKG021B8t
+Pmx1jMqCmPXDB5cUmeKMAn+Ar1Mpoik4dmU1DtWKRexeIeD62qgeEAXDLwJALLzK
+bYerkatZtu7eAm4gnDm32A4WuLixnfA3JcSdsoDb+EBmVPN74xXSQP8QBzGIs6Bl
+8KrLTS9NytC1hWuLvwJBANYdvObtm1sw1iXE8RIyRlBy8eUEtVHz2OgIDplQ37Os
+7lO/bq/Aur7WHgVG4M/rIn02G9HN75o6kgJ69k1g+0A=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs5_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs5_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDAvmbmVcue1tJ707I0+8l01TBPYhxovROXCLeMtk7df5il4i8u
-nHSSAUNijpxiIz625OIYKz+u+xfn2MQoJyfZPlzRj1G3EExE9rtrJHwuCbz7iq/6
-5M6ULyfNPee+k0tiN/XxqI5+dpJiewJBmML2/2iO0h37nvFF9WqcjSgjwQIDAQAB
-AoGAOnqKZeAqA2tSOVelfgXWvafhHHS8Ads8ElsGtZ6qlvGbstjJT+8QPyw68bAr
-KmtfH8aaApM8oy5ztlhCS5x1riC4PxUshCVhMX7/AsyN8GXyzTfE4gOuQmbOTRQi
-p6w+3uMo7Hdpl4iotuOu23SDiwPCWbGZ/s8c9t59WiCjRAECQQDypSwxLWoseJcc
-n7eKOQhpLtv+yqdCRKGOVS/xVtCpfwM/xNJy25pzcyr8iMklJn1+ZSsBeZk1mS56
-vS6y3mzRAkEAy1oge5qtyTx+UPXuDyeiaPJm4/und7A8aYEKwQITDtg6Ef7C0Rho
-fUYNd0svLVQS0xWnOjfsQlzN19XzXPlD8QJBANMAK0PAeFmfq9hqU1LRcaz14Lza
-QURxJgP9tCksE1uxZYPohhD3QoIunizoTfIOXIazNwibU022nSKCrL9CiGECQQDE
-uKPD75c/ni301HVAY+9R525yDvmrZ+qJhjSJEyCss7E5x2NgNGShDCvqw+kXyMWN
-Pt1QDNmaOX1I18leoCWBAkEAzfJZUAiRWIpkI6pnAXGbLSQRuC8VrxvMTY70Q6El
-0SrhKr9MgBSDiKLWpIYoA9E6InOyzr0wQEXiCSXbpirqcQ==
+MIICXwIBAAKBgQDqI5URLLUtScUQd3SCmNpfWB8rQG4bLthPMAdroq6f9+2NLbSz
+aEjsYHKi+4t+YhGQeZb57oJ4PwkiKwNFr57KfjyAT61Zd4XF52tKC6JrS8Xn+TiB
+ZAXqzXacv+tRqilswT6YxqxJoqwyYHjY/8Z5+KWmeGEkmicmLgY6GY5U0QIDAQAB
+AoGBAK5XJmUudA2v02PKft/Lrza1aCgNhq8I95onOi9EaGDG/IRWFypLqZkQy+te
+AGVv4oJAd1HM7itZTJS7kGkwNrxF+5vlCN93d8KdoGIjOElp9H3wB7o8Y3Px/VKD
+CfuG/HkO2zOEd2Jnjzhu003ytXwSltfLoLda7+bUZmxj2dfBAkEA+63F5SoF6zpH
+J2efJU2ZAcA0K4SWgXghQLczhaRLlB61PZDuWgJszCAppPn8K8NCpRmGWRp3ian3
+6eOHa9pK6QJBAO4otwYVqUFq3E4rsiQsn4m5nWPMUhAYmabC4ZsdvW3VdYnw1WrR
+RB8uEqhZWCa6t6i6LZzIvuRlGk8KaPh9OakCQQDMJeDoSnYSoGsnI36MG62JJgcr
+ZZlP28ndXL2GIgbMVzxcfDta96yYx14AXGaYeQKOOW4oyLc+C4j1R4KJkcBBAkEA
+5cO8B4/AUg+BaZ04aTPv2tSLZqvJhCPnoP4k4BzKE3u7wQ/rJfmsqhQuBeLka8D5
+zTuJI9h8aiasQhM+AHX3uQJBAOz4mqlT8ZHscyIg6SMyF3sKxNFxg9Qeuf11hsME
+U21JzVHzJsJ4qUewsvSPrvCfUwARl3LJAVh29Dqpjr0mjMk=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs6_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs6_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDHdzL2NVop3txhial+00+sodvxf1gc00ao62FigNDPQGukOaz7
-8+SiR1N41M1aX7HA6CyBLQCY1S9r6eeF5g4eRtYiufOn4GwY6kIzzcCc4JjsKWc5
-xKP3aYsEZvWiPAgbJOW61FdbFPHyyCsPIq5u0cqFAeZ1ggPfeu2WimQvXwIDAQAB
-AoGAKoihhlz0IA+U4Puw+AlpaP+O3h1wlZz76VNgDdg4LqmnCnr+BzAH5g7dntuJ
-+qaDSgZ4TwdgpDZ5iUJ0i1n2UmAa5UcZ+OUQSkTZvXR4lG3L6dzFB3pX1SxPNWF1
-D2A/c6cxdeFud0+RfD8y1XiOfRPp/W0wL1xPgdqD81INOVkCQQDiy8AALoAUWetu
-L2jaxy2kkOHkHBcSD/OOa1Q4Qtf5lCfRM+C/YCmVfraayja4vALuQ/n82xjoL7pQ
-ndT+cdm1AkEA4SaEB1Nl6g4MyKA993Y0AQ7hD120tPjimvvmUcnWdDotDgcWDvNn
-+emcs+z4FEpuCwAib8GeuKk422+dYtSBQwJBAKvnelno5SYH3j6/ar/hl0QUmVP4
-wrfrJVY/HjAi4meHmAKnSuRkNEDfMfPz8DRoNeR52+OAAsoDWzq913Mhwr0CQATC
-FJ43A/tbSqfewxB8vgKbtuPlPhFpBRjzY92sn0ybgiI+wheUy0i7yCUBSAjdvc+b
-tB6af+k1Ik9432GcThMCQFrYEoUHWhaD3SkSiuA7NRfwAKNSv2Us4nfwIXkzVW2i
-/3091BWmOmlM/lsIQe5rIG3d/mYEDnNh6FuquX05Ngc=
+MIICXAIBAAKBgQClLta9/C9bTLiRkI72P7tVKI1PnUdw7T6hvXBCR7BBCXuHT+sa
+RZ8JbQqMU3OjPfs/3Gf0A9N8URXzq2wsOdCnTsI/XNLYh/EDO+t1np5m1T3V5W0y
+kq0FuMI7SOVytJ3Jt0JP17SljKSIdt8RPrFcor19VvjIdgDEiGQPNn7LIwIDAQAB
+AoGAZddpAp13PR0iNm0gF2bXwvtLlKhtoYxEL0gy7EpyusZz6Ms3Mm12TkNyW24g
+P6c5PvhPBz1MqLr9g8xO1z2WDHN1quHV6C6GvvOlQcXIMT5XcAdfllt5HvrnzZE0
+AYoSM9ySyfoRY0BdFIBGFci8ehDcgMHEqpKAOhBLAxgVn5ECQQDS6cqVz/Idtjuc
+ESCVg3STIJJDpeC5PAUOxgiGoHLTEpiPXOa7L0ObavYv0Rz+rvn1lT7sinIekpRZ
+UdDTBKynAkEAyH52OZ53b6wkLHqDzI/FHpEXSiVOGsdEOkgsQ8YXRZx9J2XYIfYJ
+F5Q+CtLd9/IMBV8tO0wPG7fBNF+us2dRJQJAMsvr5rj2bwF8ydG2L0xBv02Q7In+
+3Z3++dfoJcRu4zcPVzfguiRf/AZ+1HVgrlYmDWesh/uwEHztDbYOvUPa8QJBAIbQ
+oma0K9OniNtvtlhDBGU9Ys+0rgRLoZEfHsSj2towE+f+D4smiY6VW/KjQCaNV4/1
+I9EPn8kfkobJIAv6mRECQCEqTVrHa/HRzgezDFL2UhjzHC+8Kb4J64Ua6e9mCI5j
+cFnAoT+Sok+93YpShXRL2bEMiQP5/VyefI9otSoo23E=
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs7_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs7_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDIlwZyd4LnA1NW93Fc9LWu4SII96dwRy+tb6+pOcNzyvXVVOk9
-RvikoRon1RrGkMlLwSEyBptW1yM8I9mqKhcVYQzMCOdgr1XmnuIkvR/pBOgJ7fSj
-2F4kkZU+n373ZGZgCH3PrLb0a3IoYYzcUU0APk1ncA6uPDeZKEfnYf6jcwIDAQAB
-AoGAFcI0I9SM8YwtzSA4PtIYpyiqrXhXxFkkddbIoj2u0u+wLPzx9ACv1gPXt3xp
-VCK+gyYm+Ks4zHm3y71Dzi6UpD6KGJ46zxX0JeYjewvoZF9CKUtfz9tuazxVJEqA
-9Hg1SlLdwlrZRfV2K0RlIJJRMcTD+67ubBU/STW3LtfzOukCQQD/DmcxQ+fw0CxU
-ypSSBIELL2/x6Hy/gbSvqjVnod58/fvHBWKj9zlaH7DN6tigI7eoL3BIb+V98wcS
-hhnMFMVvAkEAyVUHq8MdGwaB2bBix+r2MbwJ4vG2aTDk4+KWSOyCxP1+JEx8IwOe
-KR7foJUfsT3g6b4pLTvvLbUo3JgL6lHoPQJAMxRqXDZyTAsU5cJQcNHQGjJc5ACg
-gyXxzsByw5dqXHPtKZWNhLLtXHw+R28CBUhB7r/ZZ9hpCIlUYERVBEcgpwJBAKXF
-95z7+Nkp0H03+P33f2OQGuvcbn/KnIzvIyNEaqBcwSKOP6Bs+CuPmj6UyxWbh7eu
-tiTitpuCEPUh1J3Jd1kCQQDspev2/mMg5KNQFs8vrPoSZ5V/QKXmfss0QbXnqLW7
-cn8ZfkjzTN24/usQRbJ60ZiVXtojEubNxtECfjd5eZqt
+MIICXQIBAAKBgQC8UpPMa21ju/6iMz1ApLo/EkxyaaCHgDJQR5GPOW+KeHia9jSD
+LX1qGZA2n/t8HMgT+ROyanUaLDp2KxDS85AfZd9lBAyXovpDUzMy+I/zMKccSmec
+2oG4elXEMB1ZXfEKvLZSswlBJB8wa+2VupDPDa/rx/sxNcVb/2eaihs0CQIDAQAB
+AoGAZsQdOTkKSZmGG5cgfs0lgVOH+gtf+XFgg2R6rxClqIeTMOTXxRmmzaZDhzuI
+LbM7D4MlV4A2hODLyj44ARW+eCQnoJz8SJ510/fK6ZFGv+tOItHsoZOBlt7bXxI6
+f/yUxkgfxQde0VyJmNdLyIMJfn4W6dZsteyoz3EjaOa5Xc0CQQDdHJF8dsB+W3pN
+6e5mDegT+j0TI6mp1S8vxpFRznALbSWcVn0YEIIP9eVG8Ta8fMERz6m6ZgUhpCzQ
+OlivIwyzAkEA2gmNI2gSzwwo9xefd1rB8oF2p7QqggwwaVELVEPFi31EeZKgziH3
+J2Gnn1vKrqox4NYhL+q16jv/k0HUaYCSUwJBAKiJeBOo6LznuWfeIctEWluv6BHI
+ozBCwP7nmikC88Ch54MtIZjQLHNB+QuEHTa62OdcpIDh9pNX8pidgK+uRaUCQEDj
+ds2Cu5ZC2C4xKZQrvmydeuKOC9iIKCAvrl91i+Tncul7ab/u+88MkQYsGzXAEPgI
+wfewslLzaCw6+ywqx2ECQQDYBn+1Q+zJDscYg8exhL5lqCVuVZ5PzoRWvUXxKUo2
+3PGtaCSeKk8Dh0aWAkxqjhCJ14HSIiBKx3xhwLeGvp9A
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/cs8_ch1_ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/cs8_ch1_ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQDE2sTTcsJl7H+4QePHFIO7/J7VhxVf61Lay/TH2y9YZQEODtUn
-z8XlLM6Zfw9IjE9UR2tLXpA/lZZguI45H6nMOLafIW1OaS4UxXH+4eFEJNR0RUqf
-iGQ2lve6dB6I+W2s6SXwdFjGE7kFq/oOXHf8oT1InHiQ+GdBmXy/RWpn7wIDAQAB
-AoGAV3lnMRazr5rx/iy5TMOe7jAJXJUUOHVXcgZjlVOerEbluxt4OKKpK3dHrwm4
-/uHqdmbuFKXGr5qHIh+gg13Ak0kObYXDRtuk52e04MrNB5LY7oudDPLQU7aj7vh5
-MrBgc1Y6OqB0xfg+BDaR6WrLCPpf7dhiSYezGid6SzMGNfECQQDzad0Se1eKCgcw
-yNqoFQADalW+Khyovg061Eak0LYE3LcmSor7BQSje1g/7PItCUhBHrRq9ymDZozA
-6aZH6jtrAkEAzwiXMZc45gjmAAJTnCYV0pxxJ5yhL1De151LKI/0T4V7Y9Wayq5C
-i8Fx0Q3dv4qpJXFm60RzaZHFMQEP6CCKjQJAQcQpmfO/XCmHddPe2CkMXt/dGMsy
-ARmQY4O1LpTBiSDFT1A2qsnZTf5mgqcXa7mlTwrnvjrXeYw8nWbDqYyMzwJAQyec
-M1/D+wnj4RjgGgRYi8pnAdxShFCNGA9Tc8LOEoVPsuB0p03DFCYZTyBaT2kg2J5i
-Leo0LYg1GGIp0LfNeQJAKdPxQ1qY+jDe2y3a7FS/mR6DQvwGtqZLsdZ/akjPVIpr
-wQVD0Wa9QjW47ZvfD225x+xni870aXIivRJBJdDHIQ==
+MIICXgIBAAKBgQDeUGfWjqdTG3MD/sfvWYIM13TvrSEzaHhGJ3/xDHZnjb66+DYA
+xxvrgh9wWHEC22qeETeosCgntJ++HSr7Z0+hOs7icNLYgeuSWsY/l+wsSbVbiuHq
+YDUoaug3tnoegzYyUj/ApbJ0GbEyNGba+PzhkkKypodIVjdm4zxvWHMmoQIDAQAB
+AoGBAKLU/dl3TzNeDZZFjSfQxaKmRS4v/vtqb33i/KEP4cHjXmoP124maFrNSj29
+abkQAT2ZmszhiefbMo3LS2ost3MgiEMUaUDSKGPVypf3FaAG+j05b4h2jK8SfV7S
+p0Ghg+MpVvSV7qDv2ZlJMkZPFd3peVSffSMQbAvd2B+VvFmBAkEA+enzaXEOwly8
+ZswY3uqiZRB5sxhyft3ksjd+E9mM7J914lPWRmZeMGD0Q6lMRqcliyDGCJ2DhOGm
+uw26b73dqQJBAOO6Y2IQfoXFxwpqpjJIfANfPcmYzIFvTCxqnqZLxU38hS37elnR
+p3BS2WAAjfmH72DqBagh91iQ6iPJu4tN7DkCQQC107NXqfw1CUfB+wi1Vz0kDuKc
+nVLgXwz/ZUSDqKrRlgssyhaCTgSFamUNvWVTmlTEbunmZsPDsHGgcpKMrjVRAkEA
+tTw4LepMlzAAqTSZUflH4PMiXFejofsul0a/Pj+dJeSrJR43kFX/OLBm2TV3yDg7
+9Vgp6lYl4LFr9dFt1X7NWQJAB06/850+DD2XYSioGiELKFoFMFjYxvp/BdwM1bB/
+10BSg1Ra0DyPihv7S4e76oOUrHiFX4KRNKHvsedVPfYnRw==
 -----END RSA PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta10_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta10_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQC2UENzZBJAJlQM+Wfkau0fGOVziRMPyV9ubsYFrSy+5Gv9xk/q
-828N9Bo0fwOXsKTRbpjSNvozXVE33o9bPaAHUsi3cTBx+8On+mH2tCi+ntqLi3Dd
-jtClGgBwHDnhz2T47LSDuStn+k2uMIQvLJ1sd34JlUN3a+GdK8mJ2anljwIDAQAB
-AoGASKdByglWMJRVqHn3yhJGfr8IKXu1yfPBARxJ89coXsZettpB3Oq4FgJyMvtu
-7hNqC0AczKE2IiQNCsu5q22qiLNfwhlDoqckECZ48CuVpg31ZEuiX6o75duvEjNl
-RIo9Cwp7Vo22Uq/6R9rAJP09B84NdMSMTMij6BDIxiSInSECQQDxAwG9wyfI01eP
-ZzK71lB79RO0T6t9NPF2z8Ed0VbA2OKBAufh4LNqxvxc5ZyUNaqEU10MA8NT+PMk
-srew7FyxAkEAwabClJ8nVdY33ko5cUBoZWsgVlWEFhoRmp00AMGa7mGIvyAExXkQ
-qF/o2uH73ZQA7Vx/4MLF7wcNqyNCrH32PwJACt3y1yaUhaaZ3RpvHC8Wo/Ax+kBZ
-YCTh+lR1xa1ptvpQhDaoU/P4wwjD2kB0Je6hiKPlnyQQS5n/BJmWVMDjkQJATLat
-Goc54+0q0KqCuvSS5qpbcxgJbWACXUetVCdeItUMgPpEKZ5eFPV5n0wqpIp/G4ir
-N/SwyJH4vjUHsqFrrQJBAJsIRffGRMmMEC60E+KJTqWs18j2/igGt8W4KsRbzeSQ
-Ncw9f3QXgfNIXnmyW/L3i+8XxHzLlD+oT78Csuu8xCY=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKsI3kThfc+H5Q35
+tmZ5RUsYP8TDvDxOEBwjNgsXjlPpHVLA03jOdDAT2T6YjgiU/naUVXrZc4cBXt3H
+e15WlKZd5oqrIgPP4XocfvsWwnz0o2xGKAsVFemST1Cj4wQlkW3QcS9msyBk2/Fg
+jT9SlBPx8QCTCyC+85h9yFjj8OnFAgMBAAECgYB+XRr7AS6Wuex9mtUseMS9arkS
+gxr74yD76Pfw0gKR9FV54oVbaA1nyAJlwQiPRqWKrqVJEofMYzLX4J5BYO6JlulN
+i9YHRLyM9GBKqoKIFt0ZCWrBOpwNTJwyrtWHVgztd4ZYcnPzC8vIT+V7QQohe7nT
+Bb97T2/Ihi31LrCxMQJBANXbpQlNDFkch/tT5eGVj8khpPIatUkLNsDSQaCKp3cm
+Mz7HzWhKBr+pTW7GXNEnx+IQIX0cfnq5P4NItyUbQ0cCQQDMvPEm5i+j6/9tS6gB
+GiIN73REBdWsaxfG189G+exoRMM6EQJxDaWl9yDpTt9s/IlGyHOnlpvtgOtrheUk
+QHiTAkB+vptUJNbRpWguGu4eQR6jbI4ucofIj53Wr4X3mNVhd0Fdztq9GUpgov1i
+TqvJxdLf9wFx/cY0A8BRlXH9yueXAkAI/nfdjJklK1XiOEOeIMbEM/O4lUUIuP+n
+ZY2egZYoEnU9FMg1rTLMsqmIdkWMZR+ms2GZSB17doFhDNW/HPHvAkEAkhDKvrTE
+oFwinFGnW9RYDX5nlUFmDumlh0io3JzTf0wUS0iUMnzFbfKGEd9UBm1MBbeku94G
+gX2ZxuXkbXODaA==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta11_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta11_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQCjxdQj+OikAh84zVPcfOg8Sb0UwceitwB60tHIAXyb93hQlQdp
-kKB6JQ9VVfeyM66uZmRcTIZm4CjiY4wRX+6kr3eGwsAYDSQYXyb/Z8z0+X0M59cM
-AeiFV/So2Czx7C/HjDTUPdMbXC1EvdGmNdIhNvkxrCTL7HtwyBCXyI43GQIDAQAB
-AoGAID+vU1oLLWiBj2TXM56g+GYoxnKWBhN1E7p5tqGcUPX9ChkeeYoSH5s2lr4z
-5TJKHmtpLcef25geVN33UeCLFDAU6wIRCzFFV5gzssHsTIB+Gl3GR28BPvbQU6jZ
-1C+FIq0tbCDPXgOW5Mh06y5gilSehLNK+w6wsveWCUfMtcUCQQDRDSWbm9V3lptR
-oaTqL4phHXAy6VNZ8GSqxeoFdbKJ0CH8atsazrmYyyyQ95indnf5e4eZl9k3qmHx
-PeP4wrurAkEAyI2CcK1o7GPA58PIPOyoaYunV4qwhGhJxzQNajQQH/3ift2lTMPG
-f2wqFNCeGrtr4V6c2EFSSfAwf1Ierae0SwJBAIiDylRUrlDa8/CZ22TmyLnkjHli
-rwCjoEl41vrbwkyGszrv2McnykGCJEdCuNha37v2tDVT2RCl3jG4ld/D4uMCQQCx
-DQSn9t9XOaV2tkfTSVZQf2LHjP/SlML1YsWpCbdmlttbBs/Eml1l5par85Rwox9V
-QhKTc+9yqOIXtOayhghLAkEAtlEde/1Gatz3itdyAvNRt4XZ4TBiVnvnK1cAULG9
-s86415CqQeI9BRZHG+B4lpFcV6J4ssRr1byXrs3jftzQWg==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAPPVL7Q+Eu7lAWpB
+pAkbEl/z1aJ+PNhvb6cwr3I99PQxMJS5CdgvNroSYVaMh/lSb4u1KNEjk/Mg1LUt
+yikQ9RB7rdbu3kAi2RAyMJMnIm2H+e2FFsJt2iRR2xoAUytlSs4kD89X8cBRngys
+LxddcsH0jYMgQdMQX/LgLZ/s2pd9AgMBAAECgYBR0IiPK/ziV8jfxGKsA39o3sIi
+IcV8wfdu2/EinhNhFFg+rs/U0BLG4H/0sHa3e6ed8w1dD1kHTU7R9ClPGjd/xrPA
+BK7Xov8EBvAL4NSjPy7v8liQNXPBXprRNsfFFXAaOTMvJ0z9eFyJQwyD0ZpYXR4n
+qbhW0XajkUVh5ujU6QJBAPxfvhZmUJ34nixBLBCCUXb2QVZRZ7CHdvrHI6u8zsqT
+5gp2yI6B+84cfc1QX7hP4qtAZQiC4E85BzWpA7nT1/MCQQD3Vgc9BOOZkWjxd+FE
+3C3/J2Y5hZkpc3lGQ+eYxdCQgKkUh2WdOEw9WnhEbzQXzftNapXLMLo/ikggCoWo
+XZ7PAkEA6KJsu4MmzudNDmgo8TLfWzRWN/YkCZJld3c3h2gsionYpE6oQszIy05y
+HF75TRG+VLOwLi9OC1j7L1iTyajgRwJBAM6IGrE8VOWWQ6Bm70e15/7JIpZj1dqE
+Hz+qUkkC3b7cgNOwoAxhx1/wHL9gcIp0KSWjHAQ44z1Nth5zStqlmocCQQDQxu9i
+IjJcxhd31PaLs3B5yVpRhN8+GYjTlw8tXUHXvMXuc2d4IJvp5o5hMkvHGK6hKtqj
+sq6vLyVWjPizs2Em
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta1_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta1_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDgSjjGSBOrcavKbm7O6fwsaM3uefbCfh8Z7lt1GT26T4+jeflc
-690MMA/QdwUN/7ko5HQaZ7P/NuomYexRJeHAzZdY4GWNTFS8k5k3K/OH07jXhxXZ
-zxy2h/RtVL31ZVNgQ7IEcnmwv3ETEf28RTgUgtkFi/6fjn3RLLk2YcAKEQIDAQAB
-AoGANTiHdk1eFX14lSVVN9X/143a566bJhWFTcLogsXFhvMgE1t7F1iEcELrTb0g
-Pu0iQ5jKEAXxiSq/rvHngG3rvkFWnPkoF6rDqvzPRkMEKap+4siCGUcyY35haDgA
-OJmjJn1QjlmvZLt2VzUMgWR1VH0zmG4OMhJe5XcV8zpcbRECQQD/fth1Z3lCVNXz
-nKKTIjv9tAHQi/lrqLY6H8oCSq1qQ6Itsz1nDBs6b/kEtZLNYr+pDUT+V+3ZL61x
-80wxAnzVAkEA4LuaBSQoXze6PFJUY/e5Q6m2l+vYXdyOZBr0IIv/RUJ56MYBdtSD
-i6MkbtcYDUvK6D+EzVlBR7ftRhFBjIWGTQJBAKRAU8AGaXovN+yJQir80zxiwNfl
-ZM/FgoETdrbKc3nhSR3AITViHw8OdTSF1n6bgUOY+EXbGVmKwSKEmvLW+pECQQDM
-7SUQhR0vXpC7itObaPyOX8a6F/zv8jwBurZcq2x2Sp0CDvSs2DKv9W82h3tOPIvl
-Zm6CFl65uFVsLDYannONAkBN74frdwuxVHMwyT7t+EuEPe6oGzuc9tg8a7dd9bxD
-fszzNiA3q/mvM7Zd22ezuhUSOh+cbWuDGHVqSI/o/VKQ
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMERIJWbakn14LOA
+lzcC/G+ZbXBnoUdmz/ckWFXIiOTaiaj8l/Fs/ERga1xx14QiFqQJd/ujrxAkexMD
+trnI8AMAdKLKEJ+tFzLoy/pWwfoMP0NaNu5rlBKUSKnZHDdcdm3VrW83rZ+IeFCS
+WdZPKiK6pewpxz61QZ7Om56e2Fj3AgMBAAECgYBjO79oxjISg8uT17Nhdipz3gNv
+NASkY4be+5JfvSwHnQAGmJYsZB0htAFaybTBWJgUhj1iXNZ9UJLlyhHgWhRqQPw1
+9PgzYsGHYxd2euaVBOpu2urVQg2Co7b5KKd8x2KPCG2LRNrORHX+bf72ARb3AvY7
+XkyxufM8j/dGzxHfqQJBAPSSrwL6Yg2DIs3zgzMv0cRztL/GfJ1+2ztYb5uHcB+1
+m3PKRAtXYon8Tk5McWupVzSSuh2lQoS0M9B/iBP03tsCQQDKFmJFJspZflOKfPOb
+J1W5PenOWyIhHNlIX6wYqASJ195vkAtJ9d0uXH5DvN3LOsEY6rlT6Z/oYI9VW12q
+qIMVAkBjgl8U3h0RFF8P3tlt9THrNYzATpkbV6cJkWTvqf6T2EdkqFJhLu/X5sFR
+mEa5oE/sAxsYvsm+xrciSRFr1UDrAkEAyCalS9IghcSdX0NkTx4FREPy5sPSKLOW
+7Jx9Kap3XELmdt5Wn/kYCIvpLpPHpDpb95660UZJb3D7ZVHpklX2BQJAHU9gzIZL
+GA3CmA6s+HBd8nrdNs3BxJPxbCWnONrOZyAHLFbhru/9yeQtAfif5gCIFLktfRV4
+Yv6luWmrmJsWPg==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta2_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta2_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDjdeFEbWix3GRrowYKO5GtEM5FmfPqMjySvLGF1cVipv0+M2T7
-hG4J4cZ2NENjf3uTvGwOMViwwMjHtG6q20CGZ7AseYL7MR9xbBCkuQvd2Hjks6Ov
-3sYPIf1c5gG2h4KbBBZuQqVXOf6F41dYzf6Qx9M1fZETvwXyIaxC5w/k4wIDAQAB
-AoGBAN8qzPYCEnJPNgeVT1vCzk7q6jbHsdTZrSybDeGtt5fvFxBsBGvxprTzW3Cm
-HmgEsA5nE+1o5QemXlfx45Kmw0pBiAKyYZDJFsbc9ABSWfJq0axIMg/Ta5XTQ7lU
-AE/ZPSOqlgJIuBl391j84zb9QTarIybMRjcFH0fF7oIyiuNhAkEA+8eg7SZb5fXG
-KiWdvtDM0gwqrG/sSglYYnEZSF4lzTbCB+mlvPCyyXY9xS9U089PHwiPL5i3b5EY
-T3rM8nUO3wJBAOdF5grjPhczOXCp2wvFfJDhHNp5eBrYzRysVd4I1dJW8aeOj7zQ
-U+u2MNFtWuFK3xBpHXXX3BkYFQbVVQSGnn0CQGvbwgG1vAqQNfsaMDBtLEETOzix
-nay9wiIxxx3sTw9RVN+k5P5CsqSBRcbyFsnB9mgZ95TxPCvMIXjy51c6dEsCQE2h
-0gGPnDUPddWSvrup1BGR7yyLH7zrT5azZrN8hcHwe3fCTA+WYsU5yBNUwO/lQRFy
-J3h6OCCYS96aV8qIIcUCQDQ0QUOQ5HNbCiUd2VnT6hWOBm+5WqLOaCr30adUuuBW
-09QfAz6cUfxYnkSMugGuMqyguJ+38PpwbPTtaG0kX4U=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMo09hWc3n2gNzUL
+UOLYW3GqMCfD+7JUJLJ9zFKlPZAeHDjUtPD0tmPb3CXCq7JqtpCFhapf7Q9TU4Jc
+GWPVu/uz2Mw8m0uZ8VVYuzZdcWuWGi8RyY4eSb1mOT9OnTD5Xn1ABY8uMwR1AHvc
+VE23N2hy5vO3PSlYhAFrmCm6TCvBAgMBAAECgYA/OpJcrcHQzKGWv6QaWwc1Ir+O
+H7V7zN3wxm92xF7cyt2OU80Er7C8xwou8JGZ586QoH/sh7RsH2U0lTIHStVNz95K
+fF7Xl353iRy/vk37dvAUel2EIMmwnP7eKTuxhcLUuv/lgZtWokLMuNeXSYBO8pDc
+T1oqHg943HVfdRHNtQJBAPfbxBNG8c11iCPPZfS3znGjELyhCxNsZvn7Z5q33Zq6
+VyuHApkKKSR+iGgCzLz7uGtfDXV+1Md2NXjVrz+viV8CQQDQ2VAIVXaJ8AcGeNnz
+zX3Zzk7Vc67ZLGUXqgwEq919JHYOcLoCkSzK8xEgpH/ghFxiU1v97jtHpKOv7Jca
+8b7fAkEApp49uRfABPY1hp0tVM0bIpkT7znzUCNXNkUi6IchmZoab1BbFrYV4kqN
+OB5ps8EjwEotqgaQ02VLnOdI3+8I0QJBAJ+bhGtqDPZrxqKulzqYb7aV0W+VQinc
+oMGOBjNHuTRbOhHdGnq9wfK0AgHlVYka/pNyS1prx0gATcwzzmMcHxcCQQCoassK
+g7Ml+zChn2B6DD8RQPQS3v8RA1TBaU2l6jSyMv+HNDyVnFIf6SgpoI3VIYALZC/T
+pMt9JLH6iOWCDVg6
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta3_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta3_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDQsOfAJ5bW/xaJ9Exn1SNXpq/+877ZHihEpqMOZwkfsvxw/SxK
-nBOgzzeXLDl8QqT3ZH6+SWcFAbP3RjSb2L1LrNZAllptoDOuAzMifQY5bgpeOT/m
-68f54xqn3RYUbY63hNmvt0PbXQ8r6D3+ZteeOgahn8M1gdTNvBY8osHdiQIDAQAB
-AoGBAMjOgKEYNv93guOJq/95SkGsBctoFOrsJskwItPX9yKGYnwCUJ0WI5jn61DO
-YB4eLohSLdbB4JwjsFyuNC8F1dX/QKJBwJJXQIr5e+UOSaybcX1cpYgGwDOd3SJb
-OVJVBWBnFUszRs3ATLJblRu8C2L0pPFWrQIlDbFE6I23gKGBAkEA79wRX0yt9HIc
-zytWbhWGmxl8svvLvdDO7UOEHHGxQrTPUebA/RmyZ5OelIeG9uSH+M7h0gCDN+3V
-QYXfG5nNkQJBAN676apCvN/lySLB7xVhOdcojwJgGSHkNUqoZqowpJkW+z2VCawZ
-KZmTjsE84q2Y+hK6Y9ooMsklUfL1hNpKdHkCQHfY8+00OS8M3Yw+UT9MDiftQjuE
-SLcdYGd49sfnnvR/t59qtz8/2b6bKf95AFzYr4AIjxkJHIeTlJzasTHvVaECQE7S
-AOaXp280SfFa39iZB3b0i2czyrELqTA6V9pyTE1ArLgmPb4BSY9ngGUxvqXgNN7b
-xuo0v4QfCNkJuXHmV0ECQEJLPASsU1sG6PPPawxI63/d98m8Ro8RLE8cvf7ZKiuX
-EDjWYXyVIdrmZFG7z2EnHyDj1maqD7LWmNaZnRrByUQ=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMyZ046Io1Tx2qY5
+vmkoWocFCwRZQSE5QIpG/fUg1Wu2As1fYi6INIs98cD+OPf2H2UQ1wwDTJAX9yWk
+YuuAg0QfslOk3sXSF372lv7iGrxFl9wp+UZwEY1K9La3LWcgj9BqDyAJ/3wRHJSb
+XoNXZzUuN6JUlyr70Thk1eB5L64vAgMBAAECgYBXmdU2xdII4LSZT0fzhk+cV9Br
+wDtemkDD87lwZup5/6gbfqdu/OpiY9dKpo6FvF+cyiUJA7CYUWqEN2oTIycQE0ti
+67gwQCiu1Iy2z20eyKa7nz1DJLW9mSNvtLcuq40oDpAmOq5vgWdxpnCDKs7DLWxZ
+1Ntty/fmHuHiRC52wQJBAPicF5d/31l7yGFI4LQupN5p9mrULFC3dfFZS2ti/PMs
+kiJszhJPaP9nZ9UFJ28SpY32I2png+DrABZGgxJ/mGcCQQDSrtQ8teaBI5+LdMUi
+dsgyUsDMKjnRLOQ7ta/BhynQlkOu8cuS2dbbV6bBJbTZBaUCY/PBTV7anoc3YwPd
+SL75AkEApovrQhLoDYpfMs0fu5WD3XwfGHILPgepe4XWgJpP2piBTY6Wfq20KWWc
+qZhKUp6rSe8ayq2OK59C76lNJZdVAQJBAJzDMXCq+ISGeSRPEo/+SiAHqyU/Fh4q
+hPhYzBn39IkcBeiaSZtPM6upoI5++/2vUYRh0vG2HCoXYw03Q5zXkCECQQCCF9+h
+Y/RChb+X2G122dcgPWSWx775zsYj6/AlzTJWwmydJnLn4gIOh34S40FBrWuDyCkc
+oMSO26JEI4jO7DB+
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta4_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta4_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDPwCWn+t+k5AIzhE2gP04JxK4KWNNFFdNelFZatdo+J2hmPbGD
-FLwTlPOoOJzomkZOBngNKZVpoCwSGTtrpj1G61aK94Ut2ZzwMGsKA42u2M+e38ml
-19OxqxN06B6ivjE/F3giTIOLJO9PXcRuJviw2SutnrDE/MIAEJnpORdoBQIDAQAB
-AoGAc0AwY7kMOsh25CeAfObBny+qMXlHcysBgJWgNmBuO07XXujYwlRNZjua1Hbb
-rTpwyDZUgVDRX7CI4l13Fmg5006nKDVmg0JU3KKIDhPKrDzwSIwZZPRh80R95/aE
-ieUpFm+FgAZYipFiI3PyxxHdEdHilyNa97SxvKt/idWv3GECQQD2iHoj5vLVqW1D
-0JCyobYNde7C+Ky1vXRveDLnenmOPQZhE2NMl/ATRdhwvpJek3i3ApYfjH9tmgvT
-t/h0cNAJAkEA17pr6KU0LCKN8repq3ByRfh8kx/XnHVBuqayW3hleheAT56QthwO
-s5Xeq+rj6TTwfRpVRS1VWu2AdNEsQFjfHQJBAOpl0nNmNwZMw5WRrLIarMRZl7yK
-wXM+gYEmcIfD2+UQQotz6pq9b0ZzxxlTKEmBv2mJrQCsDdBAgfQ326OiSzkCQC6l
-jc3JYyWj9yOjmRmL//mnSHCbswiOxj6w6uIif3bN/B27QLlQCdHFN1ffO5birpmu
-hv+lVM6Lino3/KSRUvUCQFNknvds2O6qGKHSpFu9JTXeiOCjQe0zxY/3nXE4T/da
-n0NGzS56tMTIxvmGEMvMZd22uhSxVUorl5av38nuP+k=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKFjW/l4Khnf0U7V
+dSTGiy/paZmrgiS0D2bsTMF6vaRcEPFhx/4vU8EQjnyDS8VQyiCeqiVBORkOepka
+iiWb32e2Z2it8iIV6ObdOndKuW/hCnCSDt2o52Lnozr+ynW0LSxgza6H/LonwQ2F
+scx/2fMPfcs+FXBU4S6KiJ3nBVdHAgMBAAECgYB3FDz04XkPBloF9PIuZGCmxW6p
+eCbathD3PDuWNt5eu5+0uxU5s+n0dibsMGRj/qxlTSz1uB5NIqXK+g4cmdpIG/L9
+JEjKWFPGAeYoNWY5bmRCEqYR2ujlxLfMkfQDRNyW/eMfcm4AtZFxIkXOAxiZzAwB
+wdkUif3CPbr4JpSAYQJBANF5WXslw6SRBfm47Sp7M3kHznN26z35dU9HIC6Pa34r
+8cIzpGyNnEYXKyLEdhQ0WQo0MyDjiEx9fe6cql740G0CQQDFO9rwcVxMS3Txwbwg
+H9VA3hoL6lHq4hDYWKAAvg0Qq/lcwOQQ/IlVCrAdjypIzE6hMuekbsv1O+CTd0f+
+0r4DAkB1UA+z7xddb7a3/0AbfXn7O0r80Um3oKB5MK0uRjX+KGAx0bgw7zHo8wq+
+YuZ6NEL1evxzW9o2dEV1v5mOrKwVAkEAiN2+Unf32qHKJzGPgKNWcsstO/OAoQP7
+OIZXkexQWK9ePXVFTlxQWIkwKXL9nsLYFZijkkGomybP8sUlWrmXTQJBAKUN7kRu
+Uc528a8DPcN5eqG2kTuYhxEN1iR1Q/hzhfUO34SRw08Y3kB2WZO5iedQmPT/AkA+
+Se543GcgD6bkYP0=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta5_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta5_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDEZXB6DgOuhfPWA2/5oq9Ors3UmbZtFKQSYlQfi8bTjOh+hYKl
-9ckDZvbdSFhaeiDGHXtHeFJkPwpn0MwDqisAtYl7sVD7eeHVMozDSd+6KiFDy8U5
-ORK9Orp7KfJIMjeExq9m26KkAOxACMGoNgy2SMY5sf2+4mCkPca2sai+VQIDAQAB
-AoGADHB8Yk627vvvCNQo6H/kaLBruxaNVnVjOwLdXy4kRsv7AeCE+OwLclq4MiXd
-6sUnhETjxRAa79yKVS8FbQn/NSzcfThHZgoAaClHpZzRQ07rG+h3n3G1t6Pl+7WP
-BFxvhWCrS2MsZnynmOZki84um8dSVyXRBmjrCV5BnwDmmCECQQDpycFGHgPmRmX/
-H4CgI6SmZWyqjBrErezdKz15nzmjlXm4NMe28Itg8e4sdc//h5dLfRJV/ujPLPbO
-FnFxEjtpAkEA1w47Q//STVXbw0HpZSnKYxVmDLcevhTtX/zq9A6bJCIGHG/jI3mv
-9t5JWbWZgmmeKUAe5o/ATu80O6NddQiqDQJAfJGsEhhcK47HOjEm8C0Nxju0swsE
-GFg0JYSstOlKZQd4W9aDs85n9bfzGG2N7rHow6hY5Ml2cy2aNCVxPLZiQQJAcnGE
-YH93LuiN9q7QwaEnruroT8PzfDwuxnIVpqNPND9W+TMhsPNFDR7l8fOOKbSDEnio
-+RFuyZLKPSKGzY060QJBAJOnRcAqnpU4sg4TMecnsaaVHUJPjWUr6CMkSyCWZVi3
-jAkSrx2cv7F9yEhTWgDR/Klcvycip7Dg1D0IEOjtmCU=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALeoEz3zZGCH2b3Q
+kll0udwn+EAVOZowUg9zXUXYuaGaclbihRrAGIyQVkQU5VBwaeU2W6L7PL/5eHcn
+Ld48Xjx90kACi7wEm49lC3Q6mCNN4Q1Nw0LLYahCv7IcgxiJT7TPzzT988d+G1Q+
+7ekKE4zCVvYlh0JAo8qr/8y6xsINAgMBAAECgYEAia0Ep7dSsw6EC0hUvZzES6bm
+8ds3cD/y9EQuUtLx7ZRjTIDI+VGx1YXKNYVYlmF+8OY78cTXOK6iQOhs+SFWHku1
+K6g+BM1PLP93UMyLur2MKUbj8Znow1XvCXgDs+fpydoaH9GWEY5Ovf9H0zu5dXw5
+vBY38HetWCKBRzWvRR0CQQDafosa70JyRuRWaXNJrmlSeZblALrZUz1ydLOHXMC3
+1bWAq36F1aeHbD2rySFucY48Wj4lF431e+hoT+plxOKLAkEA1y6hT2FWba75dytx
+DTG+OjXIsTbqkLubO9S2ix4+9FfqNMHq3BzroT8fbCxZKatrX3J5sQjTDgTPpahn
+Jkz4xwJAHZ13V2BEvl6Tho7mfH8ycWZfqIyPxvM8ae4dg2R0Drbd0iHslVFfUsC+
+HzG04VZs9As7TyXBLRvtZW4nlEG6fwJBALxlfCAG5efkMVAv/awCqD1Ix6y4mwga
+6V+p7iTBV3cQ3eJRAbKzs22a2YUZEvuTtM99Z6QjSL3WYoL0fVMgQxMCQFDX59WS
+U/ebkqGN1BftuFf+6T42jAxNfrfuq6K//GWfRaRJihkSzE4gAqfTBeMPBg9KYS+p
+Jvwj2jHUmUm96Gk=
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta6_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta6_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDFQaI9AK/icSnmGMJzZfxKneP3Gm569QmBh83PqXSp5Efa4vq9
-DgquugboG2bjil67h5Be0Th9EpNyoEuId93OAmefxb5Jy7foDr3weDdVu8WRbsd7
-nLOUoiR9CSV0UiJtSjT4knGx6XSbjofUKkb4+o+GXLVrICTRN+qKhwfjrQIDAQAB
-AoGANRQjNu0PZwxybNMux+SijeWMqTp4jiePpkZH0GBV3z1pRHIdbG/x2fB+2Ug+
-WG4sbaPd6lW8MJOmD4soqBExIrwqOLQygoaiLlJrp1LAsJQ11wuwSyGi/q2qNVhp
-DB/1zF2cG80dEOq+TwImPB6qcIS2FuDZRNU3JUF3DRKm8oECQQDoqdRxtbD9nSnf
-Cm6JachsUx1xneB5YHTjQJQrM8sLOQOQD2mgHriS1V3lKEw+hm41N5kyQsDb6kqD
-x7803t+hAkEA2Qqln2LWBPs+GQbSa+CuFxolHNUx1e9Y0LfhdFvxpF7kGJWxa5VF
-UimD1AE95vuI6Rp/iZZlIao5d3AHd6u4jQJBALUWYizy7sQmzE02cFxxwjZV5qfk
-6q9uHOw3+ls538JnaNd6t4qR/rUCbyeKWvWbajHviURuYm+IhuDU2oTLJ6ECQAch
-U2mWDKPjQRn/YGBM5Es7/6Yf1uBJWaiZsd1pu9mDiIjKOibno3xcgskvNUJmVwwZ
-Y8E4YKAngHXNB2HGEW0CQDY8gCLeMukl6J1XTvvSH6IjoktNZ7Apf2r4vxzDi1xD
-/d4dVVIeV8lxkO1Mh6Z64FGH7c/lKR70ufy9l0WFyk4=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMVDZbngtb9o9tBn
+kUkfU8jrNle5dsnXLSZM8gg45l1WtiCvcuqsmN4UzTXt+bP748QfBtsEdyrNPj6Y
+n1Lxnifbkez03j5T1fy6XDeYi7dFTLup0My1+EWkDFigkmAFJgGWCMGNXxjohPHQ
+ovHjMmcgUqZvekc58fDAR287nnyBAgMBAAECgYAvFnOF91nrIwcnoFFR/yRk5aDH
+OAJfE/o3Fk8AH3T9+uDm1Hq+Ag1LlfOWWAQvLoWkHzPnvB0mHnApSQ1fI0X5Gl1x
+Jd7rY3FoleofYbLRxwA1Mx24MIBwx//Ckf6GYFgX/xJFxCwmDleJ3V0aZUS+PEe9
+hJtWhQB88nMos8PtMQJBAOgNi4+qG+w+M308qDNYs4QXGVP2k6VyMIziAzf6W4PO
+1V4GHZTYCmrfiDmUyh6iJrYC5eX3Z4hNU99JKhTn1AMCQQDZnsRxLlqHEHy7NqUh
+ODG9pHLTOBlIJsHB3edpwQ19w/So83Df8zg2E4G6jK+/V1AK6MJ+wyqSCzdwV04B
+ZKArAkBOrhEM9COllW2F4CQzzLaJaf+XfXqQVUhq7FMlDskqxt2HlNFA34OguwwI
+Yg+qFVbEzfS/ZYSALZ/rjHYtQnGbAkEAu7fslAT8Kg3aylM01hb3MTMtqW12wXpN
+IMId4GebD6V84lA8SbIwBtWEzjqVT2Qts3tcaqRHkHsEc2+b5i+6yQJAMvStoGb1
+16YRDyLdgMSqSjjvbt/LtaXgGloUT4xtP+50luzxQRAbxd3SEqeiIKLZX8BdYaO8
+wVIVuE2pJWn2Lg==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta7_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta7_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDI3lI2e25LbXqDc61Bza82AmI2PvdVBxEkQ8LrQ+RvHTzsc0uB
-WKIqfuDE8JquBNgqSTm/nuit8JZSXjxncX89QNc24xwl2gsp6YuBZhm8NDgaTstj
-9TDPgmz1FMzfu8ztcIbkum7bhc5g0Wk3SOgMwHaCD19lCWINcslas0ks/QIDAQAB
-AoGAXd+oxFWDAjUz4GMbQXmCvNb4VymuJUqcNDqGybR8+YDMjCSF0Pk/MGUDXoaj
-g1g4Peri1i7JxyB84BmyWRWtxHpqZAj2SIllnqupFCZpRAF274+DlTKX8YYOvnCu
-aZ0nECNafFNXcctRTtl4UefaOvEN9afAK/sGg8X1LDDKLYECQQDt4OvwNdZxMaLo
-rtAleu8MDka5rXqoocrZQWZp4nixbkzRiKR3YNVxSNXOd4kVIon+YjTKdkVNMG3d
-tkJYiDqFAkEA2Cuh0HosgflBUTz7ep2T3NAuzUrOd5yGO3B1oXrzGM6m9AalP8e8
-tD2kmSrj7akRqKEAKEa9af5Ysw52ntZ+GQJBAL5a6vNCYeQa8F565Z3Yjkp7ciVL
-qYggUI8iQq4gyKxTs61JRzMwjh0lR9L83PnItdyXAd+yXSqzwndVTipCeXECQAT+
-bQyN5f1SrsmbqQuaHFJblNk1QzPML+WroWwLlRYboAu/I44npRpc2jKXpRBWeYv1
-vDUx/So3sADi8qaUufECQE3cC815swdJZUYM0VrqsPHo1D50xrxWg2yxNAsB4EKe
-3HtXhk/wCM6b30mSiBt3Yh5TxEWe2yrBXWWi3Q09Qb0=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAPlTDeqrTS/Z+nU8
+9leA0ZIpRL7bfW1e906hdoOzMaVAPkTQji43+Ww+KE8eUmbr6UxS6X+U458s5GXD
+/CebLkKBPg0Tu1hS9lC29e8urJRSTkqpGucZDitKRllX3qRlVUNwV1JVleQXXc8N
+5Dv3QkvOJZ0hPkEpMMEisneFeoP9AgMBAAECgYB9mJ8sFfseHdqTcJBP6C6qSGu/
+EWaP0AUY8TF4iq55pnE3zS+yjLPzGSTJJmcwPasarbG+eUxpBP5RXXcKpJuaGmCL
+NmHfHOIlZhXGSt2f8hp8MQAJQhafG2OMYGS6FdH5wie4uOp81I7fF12w58Y9b8Oy
+2k30b+FYq4uWzGekqQJBAP8ioduFICamvUaXaRzHpQfhm2LgJu0NFawJLo734ca6
+A3rQSSuVvw54JWP/vCT8LzHkcsLM9krdEdFGBK86uDMCQQD6K2FdTMXWiebHvEUl
+Y6IrL9uWGMznSWRDExAsKcjZid41IdXnPgadRRrvuLtk2h2+Eef2EEfUfwLy6ZGu
++mMPAkEA2GNnI+gk/KMupVCFtgMd1TFjuNikKymN1/txoZBbzVC24tMFPBIlmQAN
+tmKQEE5TON2o988elSAqnHPmRThoQQJBAIfEaTfIRYoUFxII5AHRm54Sf/pqhTF0
+TBx2yQ0etCkTQGvXbA3uRIqviVnWCKVIFmIjt5574W+6anBIQE8VBhMCQQCXJWmG
+OMy6BeZJrQ2TUCdnsRHvlVaTGlF0SgoqYpksFPdluttT6r2d9LuyLJipIc1H7VXC
+UV+lwP69fl0s/azE
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta8_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta8_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDaXoXgFxQ1wej0tpcV0fXDNiZXhVwM6I7XKxBmsmGSo9+kT2FS
-QZw7Lw68vZKb4kzsaDR2LIZU5YuerC9+TwdS7H9RMe2elO1+FdpP+2XQB4XCYGnO
-rHRyikUx5Gw+XgW80y83VhTCLnh4a5MU5WEIIu9N+bsbHzEJEnqt5c8YWwIDAQAB
-AoGBAKkGkUmrk5Eoz1DcJIZXRowb1gHY0C+Ns0MJqmBTowMGpY1hhEtPTcbh3d5q
-Ppk6yaAT6MewHyqHo1LmpLx4H4m6OIfBsO/X7HDs3EWrAksSagjvsgJU+rdwKf30
-odr1hDeO5ngT6KEiBLiUMw6Fb4spxzOw7svGd9pBTseKBw2BAkEA8aMEW4vslpfD
-f5NsazVwZTCi2kVW+XOg7Gdf1ou1WDAajo4kK/KLKoBesDf2i7oxu4nBiXVIx/31
-ZZdTzAi2swJBAOdZcaVJGdOPIkGXGH6q6a7nIeWwRCYo2IF6Ra/kQGV6+QMdd3o6
-flb8NJMgfALcfTcPKjZd0b+0bPkGWbFhK7kCQQDOUZjo6eKK+u5sQd5y8+ASJqMG
-p+oJeJdRAzsrn4Kp1/j0+50bAS+ejJlM8ZvL1qGcNZVQ3xnT2Z3srndYYaBNAkBA
-T4Lh+YIuZzmUlhX/EC/JqQKpQOiQ2wXkaEL69C5ah2a1UPmnhp8cOxu6UmtmuDgu
-mA6Z8laePd+VEgjY4DQxAkEA3k9Ts4dilPVpMZn3su19okzQuXcESOW7Y4xVarel
-TGJ+UBsG/nL4v+IfwPPHaiXIamvRKJ3veW6kh2twH37RNw==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMZN9yR514+gk2E3
+0KRcYYHiGhwK/86LPUkVEhwbt5zdKPbFXS5j92dLyYyVWhzol4kWg4H/vBAmUXz5
+8QP1UfQBRdrUL8/ZNWgMrhEtMTdac3PAYBPIEHM6fcmWjAcAsUFS0rBfzQEGuNc/
+2A8X+Tg5XS0JFJkFfB8fb8ktfW5hAgMBAAECgYEAtU+5xQcGGZM2zW+r+2tf19J0
+Dunbo+xZV4XFbh/FjM4FU0N3BCBwp2h62mf/4WikjLoh+W1qdNWkMgGQ5Q6bI0M1
+50l1Be8Trc4bVb+cNwFE4yxwvxRhB+WGuCPSXAAcuixhCVn/IHNZl/nLpT6n0nuf
+wIlVVVAamanwlHU537ECQQDh45JTkEgBrj+7l0BfYWWd/R66tdsV9TMV9VuauMV7
+TK8URQ4LaIZND8ax7JK74BuUh/TqEohhohThb69mGNTFAkEA4L0UgdFt6J5oZdSb
+yhCtt/w+xmAjQKe/evIpZw2nl7fG9schurDDdpbqIcou3zXN06S05+Z8DnEGF2up
+mQ3k7QJAJVFeXDXK35Q07T3YoalKi2ZEzF282wzOKsOFJbN+1Jbfmb6qylGzVknT
+7pMBzs4AYHJxkLYNF+wZ/QBhfsF9bQJAbmjWG1UNfxvbxDNoeiQphFs7Z/AxQYFo
+E/nGl2dg76uM5w47puFSlf9cdU9EKcrgHNstOUTFq76hNH5jKttlnQJAVyA7I677
+xhr9vvyZpubOlc994nzerYn9B+QmOX94oXLN59y50SEWILXKL/FS7xvJnt7z43wI
+yAQIHdgGPHrBWg==
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/keys/ta9_key.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/keys/ta9_key.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,15 +1,16 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXgIBAAKBgQDoq++RygVKGKKYxNiT0M6ZqV4CjV1c4/OESWunbe84dy4ywpwJ
-Hfa+bMbEscjDMnIrhIf2ur/8z1wFwk9iI34CP85sxraVhoTXl58ch3ApYmopfAaj
-txgSZwc6iarwmf7fRgCxL6owHqIe+Cs3mSG4hVNCmEq9xfm0YWAKc7wO0QIDAQAB
-AoGBAMrWyb5BbqcQHwAr69vBl7tiafCzqQcIOw3CrDWEo56IWCAshLd2BdwxHH/x
-teJmIh5KJfY1DJard8AVi/s0ke5edIjAUT/PcVtcPfqYxa4Uyb2JX29B9JWk3wa+
-oR4xXVLcYpr6BCDth1dUVGbMqkIvesH9/gpvENhytHANol8hAkEA+Et6+2mNWAsf
-JKD/uztHlebzKh3fAAEYw3Zrp8YBzDNIDlK06ackVzO5/BnwDz7aRMiQTLpPcXui
-0ibg7bjhrQJBAO/kVycQxmbfi5A6RocKlJgrfNmdvagGv3R/WBd+Mh6jXKyOdANF
-f9uA56SmfY/itkbK6D1Hkq5zOjy6z+sRbjUCQQDxyTbyWmAMq4/hMHK3lcto+yQy
-EDKXI3pE5S2CjDw16H4zjHCl02B9Fl73Ux7FCdStBI4YWZmBDf+JG9kPRWllAkEA
-keZrhyvxrxGYvVBkIq+xrlcMqQICHlZ0TPNCbY9oBjBPJffB4Vd8qtDckcxco408
-VRQFaXfFY2pbaiIoYIyKXQJAGKbTNdkyNLZEqRXkV0g5rznU2y8almz01MPanoKp
-tlLYl5S/dkDVJYXJjABul6s/BOVsuuycPxdQ40G2LB5D/w==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMmKLQ1TBOgCu7wn
+3w64MyUHVGHQ2bYIM1vD60yhH59RzKmDBxYVnGkLSHRiNV+jlDg3Dz9fWCaaNgui
+D7ubV//9cAHWKKK2Z+2pyJAVtX+RYDL/lhOkPwkjcC84byRUQZUvkVpupap32mxQ
+7mLlhYpnY338BzC685aTbF1fni4HAgMBAAECgYEAlB4F8EX0VCM2IBlZeLLte6hA
+XsckSgEK5cU+WAoOeIOgm3AdtCBb3GObc1V+DnTlCM+GWDfVTEGHuNL5JxMK/10Z
+DMqRQwqfIkJgyCZyJSi3giVisNyI211nDObL9Lym9zpg0pzTpVbg+oum38mAHK8+
+uzQpG3tPoOV3TWysgYECQQDqATw6GpwrNbt9rv/+ms73MkD2mWBvMTYKAvMxfFTo
+nE2n+pHMFmvXD358oYf5pvL61Cm4WCZMJR5pUBjSCpNBAkEA3Hu/Hzbc/xslKz0U
+otXvsVrbw/uGKoww1ZqyqlxgC6Fuk9x4NZa42F2EJYR4OrKedvF8QAvtvsbANazI
+8NSXRwJBAM4lrnAllyS93mF3tNAQg3nkDLTyI7FxMgEZ3jLfLFILuKHeLWkU64X3
+gV+8UfTObcoo9GQRTBPSs3rldCg95sECQB1ThFdVh82Swb3fkPgbtpcDe8m0keLk
+5LX0rqEESm4hmcCnCYIvOwTkY2hOF2PPUE6HzjwCmivO6c/53HxT+o8CQQCLKq92
+nbz7wz+H2a4Sue197zjfQqC4bc8wy0hwySH9W2y2W266y/hFj/W47+Lk+UH6NjkR
+/mKDg1LuFywz1pOG
+-----END PRIVATE KEY-----
--- a/src/tests/ro_data/signing_certs/produced/ta1/ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta1/ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            a1:49:ea:78:5a:f4:55:8d
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta1/emailAddress=ta1
+        Serial Number: 17773656435948586063 (0xf6a8b65c108d044f)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta1/emailAddress=ta1
         Validity
-            Not Before: Apr 11 22:37:38 2011 GMT
-            Not After : Jan  5 22:37:38 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta1/emailAddress=ta1
+            Not Before: Dec 13 00:13:33 2013 GMT
+            Not After : Sep  8 00:13:33 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta1/emailAddress=ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e0:4a:38:c6:48:13:ab:71:ab:ca:6e:6e:ce:e9:
-                    fc:2c:68:cd:ee:79:f6:c2:7e:1f:19:ee:5b:75:19:
-                    3d:ba:4f:8f:a3:79:f9:5c:eb:dd:0c:30:0f:d0:77:
-                    05:0d:ff:b9:28:e4:74:1a:67:b3:ff:36:ea:26:61:
-                    ec:51:25:e1:c0:cd:97:58:e0:65:8d:4c:54:bc:93:
-                    99:37:2b:f3:87:d3:b8:d7:87:15:d9:cf:1c:b6:87:
-                    f4:6d:54:bd:f5:65:53:60:43:b2:04:72:79:b0:bf:
-                    71:13:11:fd:bc:45:38:14:82:d9:05:8b:fe:9f:8e:
-                    7d:d1:2c:b9:36:61:c0:0a:11
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c1:11:20:95:9b:6a:49:f5:e0:b3:80:97:37:02:
+                    fc:6f:99:6d:70:67:a1:47:66:cf:f7:24:58:55:c8:
+                    88:e4:da:89:a8:fc:97:f1:6c:fc:44:60:6b:5c:71:
+                    d7:84:22:16:a4:09:77:fb:a3:af:10:24:7b:13:03:
+                    b6:b9:c8:f0:03:00:74:a2:ca:10:9f:ad:17:32:e8:
+                    cb:fa:56:c1:fa:0c:3f:43:5a:36:ee:6b:94:12:94:
+                    48:a9:d9:1c:37:5c:76:6d:d5:ad:6f:37:ad:9f:88:
+                    78:50:92:59:d6:4f:2a:22:ba:a5:ec:29:c7:3e:b5:
+                    41:9e:ce:9b:9e:9e:d8:58:f7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                75:A9:2B:02:E8:FB:31:09:2A:F2:16:21:24:D8:B2:A5:D0:14:93:5B
+                81:54:6B:06:08:DD:44:4F:08:81:21:7A:7C:D5:96:EA:53:2B:E3:0A
             X509v3 Authority Key Identifier: 
-                keyid:75:A9:2B:02:E8:FB:31:09:2A:F2:16:21:24:D8:B2:A5:D0:14:93:5B
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta1/emailAddress=ta1
-                serial:A1:49:EA:78:5A:F4:55:8D
+                keyid:81:54:6B:06:08:DD:44:4F:08:81:21:7A:7C:D5:96:EA:53:2B:E3:0A
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        82:9d:88:f6:27:64:f1:c4:9f:18:10:ac:d3:6c:81:b9:25:34:
-        f8:74:1c:83:b3:94:65:1f:25:cd:5e:a7:e4:ad:d8:b2:6e:f1:
-        43:56:25:75:d5:db:02:d6:f2:7a:3f:12:a3:60:04:77:49:99:
-        37:d7:af:60:ff:d7:ee:d0:df:cd:4a:fb:75:ee:05:b0:af:00:
-        da:e2:80:6e:85:81:72:75:a5:3b:01:8c:00:3f:bb:8a:21:47:
-        0d:d4:bb:51:a5:4c:58:2a:d8:09:1f:fb:b1:e7:56:00:53:a8:
-        25:3e:ab:3d:f6:1b:28:7d:ef:76:68:62:be:28:a9:63:44:d1:
-        68:6a
+         94:f7:77:15:8b:2a:ab:eb:9a:7f:a2:7d:d9:5b:be:6d:bc:e2:
+         49:bf:7d:16:36:0a:72:24:be:72:af:59:2f:9a:cc:d2:da:74:
+         fc:03:f5:9e:c2:e8:a4:ea:99:90:30:7e:b2:b0:6f:b6:fe:af:
+         fd:d6:f0:51:50:52:99:d2:0c:dc:88:4a:54:3c:09:93:9b:83:
+         82:84:64:78:d7:d9:00:90:ee:01:9c:69:05:34:c1:2d:b3:46:
+         da:9b:3a:47:65:76:68:63:6c:3d:cb:47:cc:71:05:f2:22:6b:
+         bd:66:0b:6a:90:45:5f:60:11:4c:7e:11:32:8c:8b:ec:70:c6:
+         f6:b4
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAKFJ6nha9FWNMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEWA3Rh
-MTAeFw0xMTA0MTEyMjM3MzhaFw0xNDAxMDUyMjM3MzhaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEWA3RhMTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4Eo4xkgTq3Grym5uzun8LGjN7nn2wn4f
-Ge5bdRk9uk+Po3n5XOvdDDAP0HcFDf+5KOR0Gmez/zbqJmHsUSXhwM2XWOBljUxU
-vJOZNyvzh9O414cV2c8ctof0bVS99WVTYEOyBHJ5sL9xExH9vEU4FILZBYv+n459
-0Sy5NmHAChECAwEAAaOBzTCByjAdBgNVHQ4EFgQUdakrAuj7MQkq8hYhJNiypdAU
-k1swgZoGA1UdIwSBkjCBj4AUdakrAuj7MQkq8hYhJNiypdAUk1uhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEW
-A3RhMYIJAKFJ6nha9FWNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-gp2I9idk8cSfGBCs02yBuSU0+HQcg7OUZR8lzV6n5K3Ysm7xQ1YlddXbAtbyej8S
-o2AEd0mZN9evYP/X7tDfzUr7de4FsK8A2uKAboWBcnWlOwGMAD+7iiFHDdS7UaVM
-WCrYCR/7sedWAFOoJT6rPfYbKH3vdmhiviipY0TRaGo=
+MIICoDCCAgmgAwIBAgIJAPaotlwQjQRPMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGExMRIwEAYJKoZIhvcNAQkBFgN0
+YTEwHhcNMTMxMjEzMDAxMzMzWhcNMTYwOTA4MDAxMzMzWjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMTESMBAGCSqGSIb3DQEJARYDdGExMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBESCVm2pJ9eCzgJc3AvxvmW1wZ6FH
+Zs/3JFhVyIjk2omo/JfxbPxEYGtccdeEIhakCXf7o68QJHsTA7a5yPADAHSiyhCf
+rRcy6Mv6VsH6DD9DWjbua5QSlEip2Rw3XHZt1a1vN62fiHhQklnWTyoiuqXsKcc+
+tUGezpuenthY9wIDAQABo1AwTjAdBgNVHQ4EFgQUgVRrBgjdRE8IgSF6fNWW6lMr
+4wowHwYDVR0jBBgwFoAUgVRrBgjdRE8IgSF6fNWW6lMr4wowDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQCU93cViyqr65p/on3ZW75tvOJJv30WNgpyJL5y
+r1kvmszS2nT8A/Wewuik6pmQMH6ysG+2/q/91vBRUFKZ0gzciEpUPAmTm4OChGR4
+19kAkO4BnGkFNMEts0bamzpHZXZoY2w9y0fMcQXyImu9ZgtqkEVfYBFMfhEyjIvs
+cMb2tA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta10/ta10_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta10/ta10_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,65 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            86:f1:45:12:31:c7:2b:2a
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+        Serial Number: 9711796497956498587 (0x86c73b75a7946c9b)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b6:50:43:73:64:12:40:26:54:0c:f9:67:e4:6a:
-                    ed:1f:18:e5:73:89:13:0f:c9:5f:6e:6e:c6:05:ad:
-                    2c:be:e4:6b:fd:c6:4f:ea:f3:6f:0d:f4:1a:34:7f:
-                    03:97:b0:a4:d1:6e:98:d2:36:fa:33:5d:51:37:de:
-                    8f:5b:3d:a0:07:52:c8:b7:71:30:71:fb:c3:a7:fa:
-                    61:f6:b4:28:be:9e:da:8b:8b:70:dd:8e:d0:a5:1a:
-                    00:70:1c:39:e1:cf:64:f8:ec:b4:83:b9:2b:67:fa:
-                    4d:ae:30:84:2f:2c:9d:6c:77:7e:09:95:43:77:6b:
-                    e1:9d:2b:c9:89:d9:a9:e5:8f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ab:08:de:44:e1:7d:cf:87:e5:0d:f9:b6:66:79:
+                    45:4b:18:3f:c4:c3:bc:3c:4e:10:1c:23:36:0b:17:
+                    8e:53:e9:1d:52:c0:d3:78:ce:74:30:13:d9:3e:98:
+                    8e:08:94:fe:76:94:55:7a:d9:73:87:01:5e:dd:c7:
+                    7b:5e:56:94:a6:5d:e6:8a:ab:22:03:cf:e1:7a:1c:
+                    7e:fb:16:c2:7c:f4:a3:6c:46:28:0b:15:15:e9:92:
+                    4f:50:a3:e3:04:25:91:6d:d0:71:2f:66:b3:20:64:
+                    db:f1:60:8d:3f:52:94:13:f1:f1:00:93:0b:20:be:
+                    f3:98:7d:c8:58:e3:f0:e9:c5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B7:F0:DB:5F:BA:CC:10:6D:A6:64:62:10:84:A5:C9:39:4C:3C:27:86
+                61:D2:DF:69:D2:65:98:6E:36:8B:4E:A5:34:33:A7:EF:84:5D:DE:F4
             X509v3 Authority Key Identifier: 
-                keyid:B7:F0:DB:5F:BA:CC:10:6D:A6:64:62:10:84:A5:C9:39:4C:3C:27:86
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta10/CN=localhost/emailAddress=ta10
-                serial:86:F1:45:12:31:C7:2B:2A
+                keyid:61:D2:DF:69:D2:65:98:6E:36:8B:4E:A5:34:33:A7:EF:84:5D:DE:F4
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        5b:6d:71:b8:4e:e3:27:06:d9:2a:47:ab:21:a3:df:94:a9:d8:
-        62:f1:6a:97:33:cc:1c:52:55:9a:f8:ec:6d:b4:91:17:4d:2a:
-        0e:03:b4:4b:00:83:10:8e:12:c1:05:67:56:9a:30:90:91:ad:
-        8b:dc:0a:eb:3f:28:5d:f9:d4:87:0d:f7:3a:5a:f6:47:52:9e:
-        af:4e:21:d4:2f:b8:40:4f:7f:81:1f:93:ca:bc:e6:04:c5:18:
-        65:5e:b1:dd:0b:3c:5e:3a:6f:48:e3:fc:b2:c8:37:8d:9f:14:
-        1b:a7:12:79:bb:2d:b9:fc:7a:01:ef:66:c6:d4:c2:44:01:49:
-        23:a9
+         48:43:2e:21:5e:c5:85:b1:97:37:72:7a:4a:a3:c0:db:5f:c4:
+         42:51:d0:3e:f5:20:43:f6:72:61:b3:fb:8f:13:71:36:0e:8e:
+         33:8c:14:7d:c2:39:ed:36:a9:55:db:bd:24:de:96:2c:b2:61:
+         d5:95:36:97:e4:b6:17:d3:a5:6c:8c:96:1a:89:54:ab:43:f0:
+         76:b1:f6:f1:4a:0d:69:79:ea:95:38:76:c8:5b:cc:99:ca:ba:
+         0d:71:7d:0f:d0:31:8c:94:a9:2d:7b:91:56:98:a1:ea:75:08:
+         ea:fe:03:e0:23:09:32:00:88:1e:83:f6:fe:df:40:3c:78:25:
+         ae:e5
 -----BEGIN CERTIFICATE-----
-MIIDYDCCAsmgAwIBAgIJAIbxRRIxxysqMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQ0wCwYDVQQLEwR0YTEwMRIwEAYDVQQDEwlsb2NhbGhv
-c3QxEzARBgkqhkiG9w0BCQEWBHRhMTAwHhcNMTEwNDExMjIzNzU1WhcNMTQwMTA1
-MjIzNzU1WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEG
-A1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMDES
-MBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQC2UENzZBJAJlQM+Wfkau0fGOVziRMPyV9ubsYF
-rSy+5Gv9xk/q828N9Bo0fwOXsKTRbpjSNvozXVE33o9bPaAHUsi3cTBx+8On+mH2
-tCi+ntqLi3DdjtClGgBwHDnhz2T47LSDuStn+k2uMIQvLJ1sd34JlUN3a+GdK8mJ
-2anljwIDAQABo4HlMIHiMB0GA1UdDgQWBBS38NtfuswQbaZkYhCEpck5TDwnhjCB
-sgYDVR0jBIGqMIGngBS38NtfuswQbaZkYhCEpck5TDwnhqGBg6SBgDB+MQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFy
-azENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMDESMBAGA1UEAxMJbG9jYWxo
-b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwggkAhvFFEjHHKyowDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOBgQBbbXG4TuMnBtkqR6sho9+Uqdhi8WqXM8wcUlWa
-+OxttJEXTSoOA7RLAIMQjhLBBWdWmjCQka2L3ArrPyhd+dSHDfc6WvZHUp6vTiHU
-L7hAT3+BH5PKvOYExRhlXrHdCzxeOm9I4/yyyDeNnxQbpxJ5uy25/HoB72bG1MJE
-AUkjqQ==
+MIICzDCCAjWgAwIBAgIJAIbHO3WnlGybMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTENMAsGA1UECwwEdGExMDESMBAGA1UEAwwJbG9jYWxo
+b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwMB4XDTEzMTIxMzAwMTMzOVoXDTE2MDkw
+ODAwMTMzOVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQ0wCwYDVQQLDAR0YTEw
+MRIwEAYDVQQDDAlsb2NhbGhvc3QxEzARBgkqhkiG9w0BCQEWBHRhMTAwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAKsI3kThfc+H5Q35tmZ5RUsYP8TDvDxOEBwj
+NgsXjlPpHVLA03jOdDAT2T6YjgiU/naUVXrZc4cBXt3He15WlKZd5oqrIgPP4Xoc
+fvsWwnz0o2xGKAsVFemST1Cj4wQlkW3QcS9msyBk2/FgjT9SlBPx8QCTCyC+85h9
+yFjj8OnFAgMBAAGjUDBOMB0GA1UdDgQWBBRh0t9p0mWYbjaLTqU0M6fvhF3e9DAf
+BgNVHSMEGDAWgBRh0t9p0mWYbjaLTqU0M6fvhF3e9DAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4GBAEhDLiFexYWxlzdyekqjwNtfxEJR0D71IEP2cmGz+48T
+cTYOjjOMFH3COe02qVXbvSTeliyyYdWVNpfkthfTpWyMlhqJVKtD8Hax9vFKDWl5
+6pU4dshbzJnKug1xfQ/QMYyUqS17kVaYoep1COr+A+AjCTIAiB6D9v7fQDx4Ja7l
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta11/ta11_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta11/ta11_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,65 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            d7:f1:84:58:4b:42:ce:33
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+        Serial Number: 10111560406944601325 (0x8c537a9de4d654ed)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a3:c5:d4:23:f8:e8:a4:02:1f:38:cd:53:dc:7c:
-                    e8:3c:49:bd:14:c1:c7:a2:b7:00:7a:d2:d1:c8:01:
-                    7c:9b:f7:78:50:95:07:69:90:a0:7a:25:0f:55:55:
-                    f7:b2:33:ae:ae:66:64:5c:4c:86:66:e0:28:e2:63:
-                    8c:11:5f:ee:a4:af:77:86:c2:c0:18:0d:24:18:5f:
-                    26:ff:67:cc:f4:f9:7d:0c:e7:d7:0c:01:e8:85:57:
-                    f4:a8:d8:2c:f1:ec:2f:c7:8c:34:d4:3d:d3:1b:5c:
-                    2d:44:bd:d1:a6:35:d2:21:36:f9:31:ac:24:cb:ec:
-                    7b:70:c8:10:97:c8:8e:37:19
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:f3:d5:2f:b4:3e:12:ee:e5:01:6a:41:a4:09:1b:
+                    12:5f:f3:d5:a2:7e:3c:d8:6f:6f:a7:30:af:72:3d:
+                    f4:f4:31:30:94:b9:09:d8:2f:36:ba:12:61:56:8c:
+                    87:f9:52:6f:8b:b5:28:d1:23:93:f3:20:d4:b5:2d:
+                    ca:29:10:f5:10:7b:ad:d6:ee:de:40:22:d9:10:32:
+                    30:93:27:22:6d:87:f9:ed:85:16:c2:6d:da:24:51:
+                    db:1a:00:53:2b:65:4a:ce:24:0f:cf:57:f1:c0:51:
+                    9e:0c:ac:2f:17:5d:72:c1:f4:8d:83:20:41:d3:10:
+                    5f:f2:e0:2d:9f:ec:da:97:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CE:A0:CF:69:A4:17:A0:54:BE:C3:CB:28:70:86:6A:BD:3B:DE:E4:CC
+                BD:98:0D:A4:4D:61:87:11:83:C8:53:D1:C9:62:9D:ED:45:61:DD:42
             X509v3 Authority Key Identifier: 
-                keyid:CE:A0:CF:69:A4:17:A0:54:BE:C3:CB:28:70:86:6A:BD:3B:DE:E4:CC
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta11/CN=localhost/emailAddress=ta11
-                serial:D7:F1:84:58:4B:42:CE:33
+                keyid:BD:98:0D:A4:4D:61:87:11:83:C8:53:D1:C9:62:9D:ED:45:61:DD:42
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        89:34:9b:f9:55:53:63:83:82:0e:d0:f1:e5:0c:e3:4e:4b:2f:
-        54:20:2b:70:00:56:08:b4:18:88:59:e2:66:3e:5c:b6:0a:74:
-        16:bc:43:61:35:1e:df:e5:f6:f6:7e:de:87:18:61:b7:70:b0:
-        93:e8:5a:19:1d:01:a7:43:ca:38:ea:d2:e2:75:0e:3e:d2:b5:
-        91:57:1e:30:29:aa:2a:26:53:1b:9e:56:ad:61:41:3c:04:bb:
-        a5:af:da:75:63:5e:bb:31:21:f9:4c:dc:d0:c2:4c:90:07:45:
-        ed:32:0d:c0:c8:e9:6f:72:b5:ae:19:f2:88:9e:50:5c:5a:34:
-        47:a9
+         36:46:25:95:5e:65:37:e1:c4:14:31:7a:2a:a8:16:c0:bf:77:
+         ae:6a:17:f6:f2:dc:7c:0c:84:52:bb:07:4c:cb:1c:4e:80:b3:
+         55:74:15:69:40:a2:54:e9:e5:f8:2e:2f:b2:c9:37:ef:3d:7f:
+         87:64:02:e3:7c:f2:ec:97:77:b4:63:77:80:c1:61:25:fb:d5:
+         e0:26:c1:89:f0:0e:5d:65:d4:ba:d7:55:7b:ce:af:77:55:65:
+         96:7a:8d:7d:e5:79:a0:88:13:7a:cf:cf:4e:4d:a8:34:2d:3b:
+         f3:b2:44:f9:8b:c9:91:44:36:0f:94:eb:45:dd:2d:03:68:3e:
+         38:2e
 -----BEGIN CERTIFICATE-----
-MIIDYDCCAsmgAwIBAgIJANfxhFhLQs4zMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQ0wCwYDVQQLEwR0YTExMRIwEAYDVQQDEwlsb2NhbGhv
-c3QxEzARBgkqhkiG9w0BCQEWBHRhMTEwHhcNMTEwNDExMjIzNzU1WhcNMTQwMTA1
-MjIzNzU1WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEG
-A1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMTES
-MBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCjxdQj+OikAh84zVPcfOg8Sb0UwceitwB60tHI
-AXyb93hQlQdpkKB6JQ9VVfeyM66uZmRcTIZm4CjiY4wRX+6kr3eGwsAYDSQYXyb/
-Z8z0+X0M59cMAeiFV/So2Czx7C/HjDTUPdMbXC1EvdGmNdIhNvkxrCTL7HtwyBCX
-yI43GQIDAQABo4HlMIHiMB0GA1UdDgQWBBTOoM9ppBegVL7Dyyhwhmq9O97kzDCB
-sgYDVR0jBIGqMIGngBTOoM9ppBegVL7Dyyhwhmq9O97kzKGBg6SBgDB+MQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFy
-azENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMTESMBAGA1UEAxMJbG9jYWxo
-b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExggkA1/GEWEtCzjMwDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOBgQCJNJv5VVNjg4IO0PHlDONOSy9UICtwAFYItBiI
-WeJmPly2CnQWvENhNR7f5fb2ft6HGGG3cLCT6FoZHQGnQ8o46tLidQ4+0rWRVx4w
-KaoqJlMbnlatYUE8BLulr9p1Y167MSH5TNzQwkyQB0XtMg3AyOlvcrWuGfKInlBc
-WjRHqQ==
+MIICzDCCAjWgAwIBAgIJAIxTep3k1lTtMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTENMAsGA1UECwwEdGExMTESMBAGA1UEAwwJbG9jYWxo
+b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExMB4XDTEzMTIxMzAwMTMzOVoXDTE2MDkw
+ODAwMTMzOVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQ0wCwYDVQQLDAR0YTEx
+MRIwEAYDVQQDDAlsb2NhbGhvc3QxEzARBgkqhkiG9w0BCQEWBHRhMTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAPPVL7Q+Eu7lAWpBpAkbEl/z1aJ+PNhvb6cw
+r3I99PQxMJS5CdgvNroSYVaMh/lSb4u1KNEjk/Mg1LUtyikQ9RB7rdbu3kAi2RAy
+MJMnIm2H+e2FFsJt2iRR2xoAUytlSs4kD89X8cBRngysLxddcsH0jYMgQdMQX/Lg
+LZ/s2pd9AgMBAAGjUDBOMB0GA1UdDgQWBBS9mA2kTWGHEYPIU9HJYp3tRWHdQjAf
+BgNVHSMEGDAWgBS9mA2kTWGHEYPIU9HJYp3tRWHdQjAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4GBADZGJZVeZTfhxBQxeiqoFsC/d65qF/by3HwMhFK7B0zL
+HE6As1V0FWlAolTp5fguL7LJN+89f4dkAuN88uyXd7Rjd4DBYSX71eAmwYnwDl1l
+1LrXVXvOr3dVZZZ6jX3leaCIE3rPz05NqDQtO/OyRPmLyZFENg+U60XdLQNoPjgu
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta2/ta2_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta2/ta2_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            e4:2c:84:25:53:01:eb:e0
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta2/emailAddress=ta2
+        Serial Number: 17668597499765822237 (0xf53377d054e5931d)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta2/emailAddress=ta2
         Validity
-            Not Before: Apr 11 22:37:43 2011 GMT
-            Not After : Jan  5 22:37:43 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta2/emailAddress=ta2
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta2/emailAddress=ta2
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e3:75:e1:44:6d:68:b1:dc:64:6b:a3:06:0a:3b:
-                    91:ad:10:ce:45:99:f3:ea:32:3c:92:bc:b1:85:d5:
-                    c5:62:a6:fd:3e:33:64:fb:84:6e:09:e1:c6:76:34:
-                    43:63:7f:7b:93:bc:6c:0e:31:58:b0:c0:c8:c7:b4:
-                    6e:aa:db:40:86:67:b0:2c:79:82:fb:31:1f:71:6c:
-                    10:a4:b9:0b:dd:d8:78:e4:b3:a3:af:de:c6:0f:21:
-                    fd:5c:e6:01:b6:87:82:9b:04:16:6e:42:a5:57:39:
-                    fe:85:e3:57:58:cd:fe:90:c7:d3:35:7d:91:13:bf:
-                    05:f2:21:ac:42:e7:0f:e4:e3
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ca:34:f6:15:9c:de:7d:a0:37:35:0b:50:e2:d8:
+                    5b:71:aa:30:27:c3:fb:b2:54:24:b2:7d:cc:52:a5:
+                    3d:90:1e:1c:38:d4:b4:f0:f4:b6:63:db:dc:25:c2:
+                    ab:b2:6a:b6:90:85:85:aa:5f:ed:0f:53:53:82:5c:
+                    19:63:d5:bb:fb:b3:d8:cc:3c:9b:4b:99:f1:55:58:
+                    bb:36:5d:71:6b:96:1a:2f:11:c9:8e:1e:49:bd:66:
+                    39:3f:4e:9d:30:f9:5e:7d:40:05:8f:2e:33:04:75:
+                    00:7b:dc:54:4d:b7:37:68:72:e6:f3:b7:3d:29:58:
+                    84:01:6b:98:29:ba:4c:2b:c1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                41:D6:E0:DA:6C:87:A3:44:65:CC:AB:12:C8:6C:0C:72:3A:39:90:2E
+                D2:63:03:4B:B8:08:98:F2:25:62:95:57:75:A2:F1:AA:83:E9:0B:5F
             X509v3 Authority Key Identifier: 
-                keyid:41:D6:E0:DA:6C:87:A3:44:65:CC:AB:12:C8:6C:0C:72:3A:39:90:2E
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta2/emailAddress=ta2
-                serial:E4:2C:84:25:53:01:EB:E0
+                keyid:D2:63:03:4B:B8:08:98:F2:25:62:95:57:75:A2:F1:AA:83:E9:0B:5F
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        b1:c5:14:e7:5f:ca:f0:de:3b:c5:f6:10:7c:5c:8a:63:a1:f6:
-        07:4b:9d:9f:53:a9:c8:5c:d7:01:d1:df:6c:20:5c:f5:13:a2:
-        bc:5a:65:4a:b2:f9:25:7a:28:1b:4a:03:14:d5:e9:df:36:58:
-        e9:2e:d1:48:f9:89:7f:2c:04:a5:80:01:38:b5:b9:68:01:f8:
-        78:65:38:af:33:2f:fa:17:61:e4:fd:73:f8:a4:f7:b5:f5:f5:
-        d6:b9:94:3a:32:70:37:b1:e8:58:84:58:92:6c:6a:57:da:84:
-        a5:f5:a9:7e:c1:10:6d:54:fb:82:f9:59:8a:6b:23:5d:33:3a:
-        97:2d
+         40:4c:5f:92:42:4b:a1:21:e1:76:e1:87:1c:42:1f:15:bd:08:
+         4b:bd:ec:a8:8d:6f:d8:f4:2a:df:5d:f8:4c:df:6a:ea:5f:07:
+         ce:00:0a:06:88:60:9c:32:13:4f:e5:99:99:90:56:bc:91:7a:
+         5b:e2:2f:f6:90:e9:97:11:6c:ff:7c:aa:32:37:60:95:0b:b5:
+         b1:99:ec:1d:62:26:51:2f:b9:a2:f1:d2:ed:89:e4:52:c7:fa:
+         9b:62:d3:92:c4:33:c7:95:cb:4c:23:02:2d:af:bf:0e:58:26:
+         24:b7:b7:1c:f2:f4:88:3a:12:36:40:e5:58:5a:25:db:24:f0:
+         dd:9d
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAOQshCVTAevgMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTIxEjAQBgkqhkiG9w0BCQEWA3Rh
-MjAeFw0xMTA0MTEyMjM3NDNaFw0xNDAxMDUyMjM3NDNaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTIxEjAQBgkqhkiG9w0BCQEWA3RhMjCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA43XhRG1osdxka6MGCjuRrRDORZnz6jI8
-kryxhdXFYqb9PjNk+4RuCeHGdjRDY397k7xsDjFYsMDIx7RuqttAhmewLHmC+zEf
-cWwQpLkL3dh45LOjr97GDyH9XOYBtoeCmwQWbkKlVzn+heNXWM3+kMfTNX2RE78F
-8iGsQucP5OMCAwEAAaOBzTCByjAdBgNVHQ4EFgQUQdbg2myHo0RlzKsSyGwMcjo5
-kC4wgZoGA1UdIwSBkjCBj4AUQdbg2myHo0RlzKsSyGwMcjo5kC6hbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTIxEjAQBgkqhkiG9w0BCQEW
-A3RhMoIJAOQshCVTAevgMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-scUU51/K8N47xfYQfFyKY6H2B0udn1OpyFzXAdHfbCBc9ROivFplSrL5JXooG0oD
-FNXp3zZY6S7RSPmJfywEpYABOLW5aAH4eGU4rzMv+hdh5P1z+KT3tfX11rmUOjJw
-N7HoWIRYkmxqV9qEpfWpfsEQbVT7gvlZimsjXTM6ly0=
+MIICoDCCAgmgAwIBAgIJAPUzd9BU5ZMdMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEyMRIwEAYJKoZIhvcNAQkBFgN0
+YTIwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMjESMBAGCSqGSIb3DQEJARYDdGEyMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKNPYVnN59oDc1C1Di2FtxqjAnw/uy
+VCSyfcxSpT2QHhw41LTw9LZj29wlwquyaraQhYWqX+0PU1OCXBlj1bv7s9jMPJtL
+mfFVWLs2XXFrlhovEcmOHkm9Zjk/Tp0w+V59QAWPLjMEdQB73FRNtzdocubztz0p
+WIQBa5gpukwrwQIDAQABo1AwTjAdBgNVHQ4EFgQU0mMDS7gImPIlYpVXdaLxqoPp
+C18wHwYDVR0jBBgwFoAU0mMDS7gImPIlYpVXdaLxqoPpC18wDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQBATF+SQkuhIeF24YccQh8VvQhLveyojW/Y9Crf
+XfhM32rqXwfOAAoGiGCcMhNP5ZmZkFa8kXpb4i/2kOmXEWz/fKoyN2CVC7Wxmewd
+YiZRL7mi8dLtieRSx/qbYtOSxDPHlctMIwItr78OWCYkt7cc8vSIOhI2QOVYWiXb
+JPDdnQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta3/ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta3/ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            f4:58:54:6a:83:22:66:e9
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+        Serial Number: 13890425601977148222 (0xc0c4b47d88d6e33e)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
-            Not Before: Apr 11 22:37:43 2011 GMT
-            Not After : Jan  5 22:37:43 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d0:b0:e7:c0:27:96:d6:ff:16:89:f4:4c:67:d5:
-                    23:57:a6:af:fe:f3:be:d9:1e:28:44:a6:a3:0e:67:
-                    09:1f:b2:fc:70:fd:2c:4a:9c:13:a0:cf:37:97:2c:
-                    39:7c:42:a4:f7:64:7e:be:49:67:05:01:b3:f7:46:
-                    34:9b:d8:bd:4b:ac:d6:40:96:5a:6d:a0:33:ae:03:
-                    33:22:7d:06:39:6e:0a:5e:39:3f:e6:eb:c7:f9:e3:
-                    1a:a7:dd:16:14:6d:8e:b7:84:d9:af:b7:43:db:5d:
-                    0f:2b:e8:3d:fe:66:d7:9e:3a:06:a1:9f:c3:35:81:
-                    d4:cd:bc:16:3c:a2:c1:dd:89
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:99:d3:8e:88:a3:54:f1:da:a6:39:be:69:28:
+                    5a:87:05:0b:04:59:41:21:39:40:8a:46:fd:f5:20:
+                    d5:6b:b6:02:cd:5f:62:2e:88:34:8b:3d:f1:c0:fe:
+                    38:f7:f6:1f:65:10:d7:0c:03:4c:90:17:f7:25:a4:
+                    62:eb:80:83:44:1f:b2:53:a4:de:c5:d2:17:7e:f6:
+                    96:fe:e2:1a:bc:45:97:dc:29:f9:46:70:11:8d:4a:
+                    f4:b6:b7:2d:67:20:8f:d0:6a:0f:20:09:ff:7c:11:
+                    1c:94:9b:5e:83:57:67:35:2e:37:a2:54:97:2a:fb:
+                    d1:38:64:d5:e0:79:2f:ae:2f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
+                B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        26:1b:34:03:12:d5:13:94:0f:f8:57:6a:47:d8:d9:81:78:0b:
-        65:f1:51:b7:4e:b2:89:c2:6a:30:5d:37:ad:35:91:16:48:5f:
-        9b:b9:cd:30:1e:0e:f3:31:1e:7a:4e:72:13:c6:e4:66:0a:a9:
-        a4:66:5d:f6:fe:21:51:0f:ab:fd:d7:9d:5d:13:86:07:df:1d:
-        9d:d8:19:ce:6d:e9:7e:7a:19:06:20:07:cc:d1:a3:c2:04:28:
-        b8:9b:41:23:65:92:47:86:ee:ac:a5:7f:b7:2c:92:67:87:83:
-        5b:04:d0:e5:5d:3c:4c:a1:51:e0:9c:02:9a:d5:35:b4:7b:e0:
-        e4:c3
+         22:83:f2:64:c1:e3:e1:67:e4:55:ef:3b:0c:37:93:e9:c1:d7:
+         3f:0e:74:f1:03:59:1d:88:03:dd:d0:f5:38:40:c1:f3:da:93:
+         ff:c9:3f:6c:e8:14:ea:87:7f:25:34:3d:93:81:05:7d:89:70:
+         d2:18:50:17:a9:df:dd:c9:b2:88:80:7d:ed:3c:c5:8d:30:6d:
+         56:c8:f6:df:58:82:b5:76:0c:ab:e9:2d:78:be:1a:d2:e6:8e:
+         85:3f:00:6c:12:bf:d9:99:e1:dc:12:67:e0:57:9c:56:1e:2d:
+         e5:39:04:82:c2:a6:e0:ca:88:60:74:a2:1a:2a:2b:f4:a5:e9:
+         8e:07
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAPRYVGqDImbpMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEWA3Rh
-MzAeFw0xMTA0MTEyMjM3NDNaFw0xNDAxMDUyMjM3NDNaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEWA3RhMzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LDnwCeW1v8WifRMZ9UjV6av/vO+2R4o
-RKajDmcJH7L8cP0sSpwToM83lyw5fEKk92R+vklnBQGz90Y0m9i9S6zWQJZabaAz
-rgMzIn0GOW4KXjk/5uvH+eMap90WFG2Ot4TZr7dD210PK+g9/mbXnjoGoZ/DNYHU
-zbwWPKLB3YkCAwEAAaOBzTCByjAdBgNVHQ4EFgQUevZRen+bqzc9TpMDkG1qhAl8
-Ot0wgZoGA1UdIwSBkjCBj4AUevZRen+bqzc9TpMDkG1qhAl8Ot2hbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEW
-A3RhM4IJAPRYVGqDImbpMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-Jhs0AxLVE5QP+FdqR9jZgXgLZfFRt06yicJqMF03rTWRFkhfm7nNMB4O8zEeek5y
-E8bkZgqppGZd9v4hUQ+r/dedXROGB98dndgZzm3pfnoZBiAHzNGjwgQouJtBI2WS
-R4burKV/tyySZ4eDWwTQ5V08TKFR4JwCmtU1tHvg5MM=
+MIICoDCCAgmgAwIBAgIJAMDEtH2I1uM+MA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZIhvcNAQkBFgN0
+YTMwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMmdOOiKNU8dqmOb5pKFqHBQsEWUEh
+OUCKRv31INVrtgLNX2IuiDSLPfHA/jj39h9lENcMA0yQF/clpGLrgINEH7JTpN7F
+0hd+9pb+4hq8RZfcKflGcBGNSvS2ty1nII/Qag8gCf98ERyUm16DV2c1LjeiVJcq
++9E4ZNXgeS+uLwIDAQABo1AwTjAdBgNVHQ4EFgQUtNQ2n/jLol9Qidoh4yfEkfeE
+iEUwHwYDVR0jBBgwFoAUtNQ2n/jLol9Qidoh4yfEkfeEiEUwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQAig/JkwePhZ+RV7zsMN5Ppwdc/DnTxA1kdiAPd
+0PU4QMHz2pP/yT9s6BTqh38lND2TgQV9iXDSGFAXqd/dybKIgH3tPMWNMG1WyPbf
+WIK1dgyr6S14vhrS5o6FPwBsEr/ZmeHcEmfgV5xWHi3lOQSCwqbgyohgdKIaKiv0
+pemOBw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta4/ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta4/ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            ba:06:fd:ec:89:18:b5:7f
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+        Serial Number: 16787041411903739357 (0xe8f78d38fa4b55dd)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Validity
-            Not Before: Apr 11 22:37:49 2011 GMT
-            Not After : Jan  5 22:37:49 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cf:c0:25:a7:fa:df:a4:e4:02:33:84:4d:a0:3f:
-                    4e:09:c4:ae:0a:58:d3:45:15:d3:5e:94:56:5a:b5:
-                    da:3e:27:68:66:3d:b1:83:14:bc:13:94:f3:a8:38:
-                    9c:e8:9a:46:4e:06:78:0d:29:95:69:a0:2c:12:19:
-                    3b:6b:a6:3d:46:eb:56:8a:f7:85:2d:d9:9c:f0:30:
-                    6b:0a:03:8d:ae:d8:cf:9e:df:c9:a5:d7:d3:b1:ab:
-                    13:74:e8:1e:a2:be:31:3f:17:78:22:4c:83:8b:24:
-                    ef:4f:5d:c4:6e:26:f8:b0:d9:2b:ad:9e:b0:c4:fc:
-                    c2:00:10:99:e9:39:17:68:05
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a1:63:5b:f9:78:2a:19:df:d1:4e:d5:75:24:c6:
+                    8b:2f:e9:69:99:ab:82:24:b4:0f:66:ec:4c:c1:7a:
+                    bd:a4:5c:10:f1:61:c7:fe:2f:53:c1:10:8e:7c:83:
+                    4b:c5:50:ca:20:9e:aa:25:41:39:19:0e:7a:99:1a:
+                    8a:25:9b:df:67:b6:67:68:ad:f2:22:15:e8:e6:dd:
+                    3a:77:4a:b9:6f:e1:0a:70:92:0e:dd:a8:e7:62:e7:
+                    a3:3a:fe:ca:75:b4:2d:2c:60:cd:ae:87:fc:ba:27:
+                    c1:0d:85:b1:cc:7f:d9:f3:0f:7d:cb:3e:15:70:54:
+                    e1:2e:8a:88:9d:e7:05:57:47
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
+                84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
             X509v3 Authority Key Identifier: 
-                keyid:3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
-                serial:BA:06:FD:EC:89:18:B5:7F
+                keyid:84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        c2:01:c5:40:3c:24:aa:8a:f3:be:31:f8:82:12:df:b8:e7:b4:
-        92:b1:95:79:d4:f7:db:2a:81:a2:f6:5f:3a:1d:b1:e2:a1:bd:
-        f1:50:75:cc:d6:f7:ab:26:d6:eb:a8:c6:f8:44:25:53:94:ce:
-        6e:a4:6e:4f:40:c2:13:00:b7:cb:b1:82:99:e9:1f:68:54:d0:
-        69:ba:02:5f:07:be:c2:f8:e3:2c:40:73:61:c2:c3:ad:4c:91:
-        f0:ba:0a:61:df:95:d6:fc:d3:19:e3:98:8e:58:73:03:6f:04:
-        9e:b6:f7:8c:3c:1e:60:43:27:96:6d:f5:e7:31:43:bb:22:da:
-        07:9c
+         07:ae:c1:fc:3b:d3:b3:b5:02:32:28:cb:49:f5:dc:fe:2d:9f:
+         21:09:78:85:f7:97:e6:cc:03:b4:08:de:04:a1:64:75:fe:94:
+         a8:48:0f:b9:20:11:b8:ba:2e:f1:c4:7f:03:10:0b:1c:f1:ed:
+         1e:c8:04:b6:28:34:99:61:57:4d:f0:fc:6b:81:f7:a3:8b:74:
+         5a:5f:f7:1d:68:29:ef:5e:cd:b5:ee:2a:72:17:be:db:a4:26:
+         7d:ab:4b:09:85:66:bf:ff:94:56:b5:e1:67:f4:0f:dd:88:50:
+         10:d6:98:96:51:ac:2c:24:8c:83:21:5a:8a:12:0f:e2:58:8f:
+         ef:07
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJALoG/eyJGLV/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEWA3Rh
-NDAeFw0xMTA0MTEyMjM3NDlaFw0xNDAxMDUyMjM3NDlaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEWA3RhNDCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz8Alp/rfpOQCM4RNoD9OCcSuCljTRRXT
-XpRWWrXaPidoZj2xgxS8E5TzqDic6JpGTgZ4DSmVaaAsEhk7a6Y9RutWiveFLdmc
-8DBrCgONrtjPnt/JpdfTsasTdOgeor4xPxd4IkyDiyTvT13Ebib4sNkrrZ6wxPzC
-ABCZ6TkXaAUCAwEAAaOBzTCByjAdBgNVHQ4EFgQUPl9k6WPLnBDQkfRFYfLx6kJp
-7KUwgZoGA1UdIwSBkjCBj4AUPl9k6WPLnBDQkfRFYfLx6kJp7KWhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEW
-A3RhNIIJALoG/eyJGLV/MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-wgHFQDwkqorzvjH4ghLfuOe0krGVedT32yqBovZfOh2x4qG98VB1zNb3qybW66jG
-+EQlU5TObqRuT0DCEwC3y7GCmekfaFTQaboCXwe+wvjjLEBzYcLDrUyR8LoKYd+V
-1vzTGeOYjlhzA28Enrb3jDweYEMnlm315zFDuyLaB5w=
+MIICoDCCAgmgAwIBAgIJAOj3jTj6S1XdMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGE0MRIwEAYJKoZIhvcNAQkBFgN0
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhNDESMBAGCSqGSIb3DQEJARYDdGE0MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChY1v5eCoZ39FO1XUkxosv6WmZq4Ik
+tA9m7EzBer2kXBDxYcf+L1PBEI58g0vFUMognqolQTkZDnqZGoolm99ntmdorfIi
+Fejm3Tp3Srlv4Qpwkg7dqOdi56M6/sp1tC0sYM2uh/y6J8ENhbHMf9nzD33LPhVw
+VOEuioid5wVXRwIDAQABo1AwTjAdBgNVHQ4EFgQUhEYpiHQx76bMPONYKd6+/Rv0
+WZgwHwYDVR0jBBgwFoAUhEYpiHQx76bMPONYKd6+/Rv0WZgwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQAHrsH8O9OztQIyKMtJ9dz+LZ8hCXiF95fmzAO0
+CN4EoWR1/pSoSA+5IBG4ui7xxH8DEAsc8e0eyAS2KDSZYVdN8Pxrgfeji3RaX/cd
+aCnvXs217ipyF77bpCZ9q0sJhWa//5RWteFn9A/diFAQ1piWUawsJIyDIVqKEg/i
+WI/vBw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta5/ta5_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta5/ta5_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            9c:19:39:11:06:1a:55:91
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta5/emailAddress=ta5
+        Serial Number: 12074133414322946630 (0xa78ff05e6b64c246)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta5/emailAddress=ta5
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta5/emailAddress=ta5
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta5/emailAddress=ta5
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c4:65:70:7a:0e:03:ae:85:f3:d6:03:6f:f9:a2:
-                    af:4e:ae:cd:d4:99:b6:6d:14:a4:12:62:54:1f:8b:
-                    c6:d3:8c:e8:7e:85:82:a5:f5:c9:03:66:f6:dd:48:
-                    58:5a:7a:20:c6:1d:7b:47:78:52:64:3f:0a:67:d0:
-                    cc:03:aa:2b:00:b5:89:7b:b1:50:fb:79:e1:d5:32:
-                    8c:c3:49:df:ba:2a:21:43:cb:c5:39:39:12:bd:3a:
-                    ba:7b:29:f2:48:32:37:84:c6:af:66:db:a2:a4:00:
-                    ec:40:08:c1:a8:36:0c:b6:48:c6:39:b1:fd:be:e2:
-                    60:a4:3d:c6:b6:b1:a8:be:55
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b7:a8:13:3d:f3:64:60:87:d9:bd:d0:92:59:74:
+                    b9:dc:27:f8:40:15:39:9a:30:52:0f:73:5d:45:d8:
+                    b9:a1:9a:72:56:e2:85:1a:c0:18:8c:90:56:44:14:
+                    e5:50:70:69:e5:36:5b:a2:fb:3c:bf:f9:78:77:27:
+                    2d:de:3c:5e:3c:7d:d2:40:02:8b:bc:04:9b:8f:65:
+                    0b:74:3a:98:23:4d:e1:0d:4d:c3:42:cb:61:a8:42:
+                    bf:b2:1c:83:18:89:4f:b4:cf:cf:34:fd:f3:c7:7e:
+                    1b:54:3e:ed:e9:0a:13:8c:c2:56:f6:25:87:42:40:
+                    a3:ca:ab:ff:cc:ba:c6:c2:0d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E7:E6:72:5B:A0:5F:2C:A6:40:45:1A:66:E4:45:A5:0F:1D:67:5D:93
+                29:DA:B1:46:E3:61:51:AC:3C:3E:F6:78:5B:95:7B:6D:B2:F9:17:21
             X509v3 Authority Key Identifier: 
-                keyid:E7:E6:72:5B:A0:5F:2C:A6:40:45:1A:66:E4:45:A5:0F:1D:67:5D:93
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta5/emailAddress=ta5
-                serial:9C:19:39:11:06:1A:55:91
+                keyid:29:DA:B1:46:E3:61:51:AC:3C:3E:F6:78:5B:95:7B:6D:B2:F9:17:21
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        89:2d:87:d4:a5:2a:63:ce:4d:12:6f:ca:94:d3:e9:ac:3e:93:
-        30:f3:1a:20:05:9d:8c:72:7c:70:ea:00:c9:b6:39:d8:5a:d1:
-        87:1e:57:8f:2f:61:f1:ec:a8:f2:b9:2b:03:d5:0c:07:e4:f5:
-        01:8d:00:95:fd:9c:12:d0:86:3f:8d:cf:3a:5b:ae:2d:a2:6f:
-        2d:ee:a6:10:6f:f0:d0:5f:dd:78:02:3e:1f:0d:f3:ae:a2:fa:
-        c5:9d:96:ae:31:a8:a3:ba:a4:78:a8:ec:db:e7:61:de:d3:5c:
-        c4:c2:4d:5c:b4:cb:f8:27:6e:53:06:11:e0:e7:aa:41:7f:bd:
-        9a:8a
+         21:28:62:ac:b3:da:3a:66:ed:13:bc:72:15:0d:44:87:25:c9:
+         8e:0d:37:cf:b9:2b:3b:64:30:6f:67:6e:b7:6a:6e:c7:12:f9:
+         68:9c:78:cd:de:72:fe:05:bb:59:58:47:93:c3:f7:41:fe:30:
+         44:53:57:9a:6c:3e:6c:a4:c9:68:a1:5b:80:b1:3c:e7:e9:c1:
+         11:11:99:ad:60:24:0e:ca:17:56:d2:48:db:c5:9a:3f:f1:92:
+         01:a7:5a:2a:d0:6e:2e:6c:20:3d:97:ba:2e:b1:00:a1:6f:1b:
+         14:83:dd:32:3c:fd:18:c7:b2:85:b8:a6:03:98:fa:eb:d1:45:
+         4e:f9
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAJwZOREGGlWRMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTUxEjAQBgkqhkiG9w0BCQEWA3Rh
-NTAeFw0xMTA0MTEyMjM3NTJaFw0xNDAxMDUyMjM3NTJaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTUxEjAQBgkqhkiG9w0BCQEWA3RhNTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxGVweg4DroXz1gNv+aKvTq7N1Jm2bRSk
-EmJUH4vG04zofoWCpfXJA2b23UhYWnogxh17R3hSZD8KZ9DMA6orALWJe7FQ+3nh
-1TKMw0nfuiohQ8vFOTkSvTq6eynySDI3hMavZtuipADsQAjBqDYMtkjGObH9vuJg
-pD3GtrGovlUCAwEAAaOBzTCByjAdBgNVHQ4EFgQU5+ZyW6BfLKZARRpm5EWlDx1n
-XZMwgZoGA1UdIwSBkjCBj4AU5+ZyW6BfLKZARRpm5EWlDx1nXZOhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTUxEjAQBgkqhkiG9w0BCQEW
-A3RhNYIJAJwZOREGGlWRMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-iS2H1KUqY85NEm/KlNPprD6TMPMaIAWdjHJ8cOoAybY52FrRhx5Xjy9h8eyo8rkr
-A9UMB+T1AY0Alf2cEtCGP43POluuLaJvLe6mEG/w0F/deAI+Hw3zrqL6xZ2WrjGo
-o7qkeKjs2+dh3tNcxMJNXLTL+CduUwYR4OeqQX+9moo=
+MIICoDCCAgmgAwIBAgIJAKeP8F5rZMJGMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGE1MRIwEAYJKoZIhvcNAQkBFgN0
+YTUwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3DQEJARYDdGE1MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3qBM982Rgh9m90JJZdLncJ/hAFTma
+MFIPc11F2LmhmnJW4oUawBiMkFZEFOVQcGnlNlui+zy/+Xh3Jy3ePF48fdJAAou8
+BJuPZQt0OpgjTeENTcNCy2GoQr+yHIMYiU+0z880/fPHfhtUPu3pChOMwlb2JYdC
+QKPKq//MusbCDQIDAQABo1AwTjAdBgNVHQ4EFgQUKdqxRuNhUaw8PvZ4W5V7bbL5
+FyEwHwYDVR0jBBgwFoAUKdqxRuNhUaw8PvZ4W5V7bbL5FyEwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQAhKGKss9o6Zu0TvHIVDUSHJcmODTfPuSs7ZDBv
+Z263am7HEvlonHjN3nL+BbtZWEeTw/dB/jBEU1eabD5spMlooVuAsTzn6cEREZmt
+YCQOyhdW0kjbxZo/8ZIBp1oq0G4ubCA9l7ousQChbxsUg90yPP0Yx7KFuKYDmPrr
+0UVO+Q==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta6/ta6_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta6/ta6_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            93:ae:7e:2d:c9:61:8f:4b
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+        Serial Number: 14039479151502690113 (0xc2d63fe768d20741)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:41:a2:3d:00:af:e2:71:29:e6:18:c2:73:65:
-                    fc:4a:9d:e3:f7:1a:6e:7a:f5:09:81:87:cd:cf:a9:
-                    74:a9:e4:47:da:e2:fa:bd:0e:0a:ae:ba:06:e8:1b:
-                    66:e3:8a:5e:bb:87:90:5e:d1:38:7d:12:93:72:a0:
-                    4b:88:77:dd:ce:02:67:9f:c5:be:49:cb:b7:e8:0e:
-                    bd:f0:78:37:55:bb:c5:91:6e:c7:7b:9c:b3:94:a2:
-                    24:7d:09:25:74:52:22:6d:4a:34:f8:92:71:b1:e9:
-                    74:9b:8e:87:d4:2a:46:f8:fa:8f:86:5c:b5:6b:20:
-                    24:d1:37:ea:8a:87:07:e3:ad
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c5:43:65:b9:e0:b5:bf:68:f6:d0:67:91:49:1f:
+                    53:c8:eb:36:57:b9:76:c9:d7:2d:26:4c:f2:08:38:
+                    e6:5d:56:b6:20:af:72:ea:ac:98:de:14:cd:35:ed:
+                    f9:b3:fb:e3:c4:1f:06:db:04:77:2a:cd:3e:3e:98:
+                    9f:52:f1:9e:27:db:91:ec:f4:de:3e:53:d5:fc:ba:
+                    5c:37:98:8b:b7:45:4c:bb:a9:d0:cc:b5:f8:45:a4:
+                    0c:58:a0:92:60:05:26:01:96:08:c1:8d:5f:18:e8:
+                    84:f1:d0:a2:f1:e3:32:67:20:52:a6:6f:7a:47:39:
+                    f1:f0:c0:47:6f:3b:9e:7c:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0C:08:1A:2C:FA:77:26:CE:37:0F:A5:85:98:85:0F:4D:48:BA:83:B3
+                75:D7:5E:D6:65:E8:AA:54:31:F5:3A:5C:DA:C8:EE:5C:02:46:28:26
             X509v3 Authority Key Identifier: 
-                keyid:0C:08:1A:2C:FA:77:26:CE:37:0F:A5:85:98:85:0F:4D:48:BA:83:B3
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta6/CN=localhost/emailAddress=ta6
-                serial:93:AE:7E:2D:C9:61:8F:4B
+                keyid:75:D7:5E:D6:65:E8:AA:54:31:F5:3A:5C:DA:C8:EE:5C:02:46:28:26
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        10:2c:ed:b9:a4:aa:bd:9e:4d:47:dd:02:64:52:a9:7a:73:a7:
-        f3:58:45:cf:da:5c:1e:80:30:d9:10:a7:e4:79:d2:eb:85:8b:
-        70:4c:39:df:b6:40:fb:7f:11:cd:a8:85:d6:5c:d1:2f:29:9f:
-        8d:fa:53:bc:20:f3:c8:97:9b:11:f4:7d:39:9a:2c:a6:6e:1e:
-        a4:0d:81:e0:65:59:89:f6:a9:66:65:38:05:44:e7:47:a2:9e:
-        a2:e3:82:07:2c:cb:8e:dc:47:a2:e9:cb:01:6a:54:c1:26:14:
-        03:e9:c3:ac:fe:98:0e:76:52:f3:5b:67:ea:26:0d:98:6d:e4:
-        23:ac
+         c0:55:58:54:3d:b7:dd:d8:c4:3f:35:a4:d9:25:b3:45:08:f3:
+         5b:98:16:46:40:36:01:c9:60:d4:a6:2b:9e:29:6d:89:26:d7:
+         4e:69:35:ba:15:b2:d1:1a:5e:97:ad:b3:16:33:c5:5b:4f:4f:
+         0e:8d:8e:b3:28:50:00:ad:88:2a:2c:60:d3:66:7c:66:95:f9:
+         83:0a:ae:14:8b:d8:42:35:8d:50:7f:b2:23:1f:9b:28:ca:de:
+         61:b8:6d:c5:38:4a:e1:60:da:75:42:f3:18:4c:14:ae:b0:5d:
+         a9:ab:ae:10:89:09:cc:61:1e:ce:28:95:f0:44:98:33:04:9c:
+         db:8f
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAJOufi3JYY9LMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTYxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE2MB4XDTExMDQxMTIyMzc1MloXDTE0MDEwNTIy
-Mzc1MlowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNjESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTYwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAMVBoj0Ar+JxKeYYwnNl/Eqd4/cabnr1CYGHzc+pdKnk
-R9ri+r0OCq66BugbZuOKXruHkF7ROH0Sk3KgS4h33c4CZ5/FvknLt+gOvfB4N1W7
-xZFux3ucs5SiJH0JJXRSIm1KNPiScbHpdJuOh9QqRvj6j4ZctWsgJNE36oqHB+Ot
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFAwIGiz6dybONw+lhZiFD01IuoOzMIGvBgNV
-HSMEgacwgaSAFAwIGiz6dybONw+lhZiFD01IuoOzoYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNjESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTaCCQCTrn4tyWGPSzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBABAs7bmkqr2eTUfdAmRSqXpzp/NYRc/aXB6AMNkQp+R50uuF
-i3BMOd+2QPt/Ec2ohdZc0S8pn436U7wg88iXmxH0fTmaLKZuHqQNgeBlWYn2qWZl
-OAVE50einqLjggcsy47cR6LpywFqVMEmFAPpw6z+mA52UvNbZ+omDZht5COs
+MIICyDCCAjGgAwIBAgIJAMLWP+do0gdBMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE2MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhNjAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE2MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhNjCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAxUNlueC1v2j20GeRSR9TyOs2V7l2ydctJkzyCDjm
+XVa2IK9y6qyY3hTNNe35s/vjxB8G2wR3Ks0+PpifUvGeJ9uR7PTePlPV/LpcN5iL
+t0VMu6nQzLX4RaQMWKCSYAUmAZYIwY1fGOiE8dCi8eMyZyBSpm96Rznx8MBHbzue
+fIECAwEAAaNQME4wHQYDVR0OBBYEFHXXXtZl6KpUMfU6XNrI7lwCRigmMB8GA1Ud
+IwQYMBaAFHXXXtZl6KpUMfU6XNrI7lwCRigmMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAwFVYVD233djEPzWk2SWzRQjzW5gWRkA2Aclg1KYrniltiSbX
+Tmk1uhWy0Rpel62zFjPFW09PDo2OsyhQAK2IKixg02Z8ZpX5gwquFIvYQjWNUH+y
+Ix+bKMreYbhtxThK4WDadULzGEwUrrBdqauuEIkJzGEeziiV8ESYMwSc248=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta7/ta7_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta7/ta7_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            e2:68:f4:95:eb:49:89:87
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
+        Serial Number: 17133169234141367739 (0xedc53ea49da5cdbb)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c8:de:52:36:7b:6e:4b:6d:7a:83:73:ad:41:cd:
-                    af:36:02:62:36:3e:f7:55:07:11:24:43:c2:eb:43:
-                    e4:6f:1d:3c:ec:73:4b:81:58:a2:2a:7e:e0:c4:f0:
-                    9a:ae:04:d8:2a:49:39:bf:9e:e8:ad:f0:96:52:5e:
-                    3c:67:71:7f:3d:40:d7:36:e3:1c:25:da:0b:29:e9:
-                    8b:81:66:19:bc:34:38:1a:4e:cb:63:f5:30:cf:82:
-                    6c:f5:14:cc:df:bb:cc:ed:70:86:e4:ba:6e:db:85:
-                    ce:60:d1:69:37:48:e8:0c:c0:76:82:0f:5f:65:09:
-                    62:0d:72:c9:5a:b3:49:2c:fd
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:f9:53:0d:ea:ab:4d:2f:d9:fa:75:3c:f6:57:80:
+                    d1:92:29:44:be:db:7d:6d:5e:f7:4e:a1:76:83:b3:
+                    31:a5:40:3e:44:d0:8e:2e:37:f9:6c:3e:28:4f:1e:
+                    52:66:eb:e9:4c:52:e9:7f:94:e3:9f:2c:e4:65:c3:
+                    fc:27:9b:2e:42:81:3e:0d:13:bb:58:52:f6:50:b6:
+                    f5:ef:2e:ac:94:52:4e:4a:a9:1a:e7:19:0e:2b:4a:
+                    46:59:57:de:a4:65:55:43:70:57:52:55:95:e4:17:
+                    5d:cf:0d:e4:3b:f7:42:4b:ce:25:9d:21:3e:41:29:
+                    30:c1:22:b2:77:85:7a:83:fd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                78:FA:1D:E8:35:33:AD:40:EB:A9:B4:3E:87:7A:B0:65:17:CF:36:35
+                45:9D:B1:D7:6F:E2:FD:4F:9C:E9:10:78:EE:E7:33:1A:14:E1:AF:9D
             X509v3 Authority Key Identifier: 
-                keyid:78:FA:1D:E8:35:33:AD:40:EB:A9:B4:3E:87:7A:B0:65:17:CF:36:35
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta7/CN=localhost/emailAddress=ta7
-                serial:E2:68:F4:95:EB:49:89:87
+                keyid:45:9D:B1:D7:6F:E2:FD:4F:9C:E9:10:78:EE:E7:33:1A:14:E1:AF:9D
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        07:20:33:b6:af:9e:b1:49:90:57:19:86:e9:8b:18:8a:e9:7b:
-        b1:b4:ff:29:5e:de:df:c9:f9:c8:7d:de:61:0d:36:fc:55:dc:
-        e7:51:ff:89:b5:69:07:72:60:b6:19:4e:c4:90:e6:e7:c1:0e:
-        56:ba:d6:1c:c7:34:10:38:2d:c5:71:79:8a:de:a6:b2:d6:cf:
-        98:dc:9a:3e:df:d3:57:67:bd:15:83:95:00:1c:2d:45:9c:73:
-        6d:82:57:9d:ac:57:f1:d8:39:ae:92:3b:ff:36:a1:0e:08:46:
-        e6:00:a9:d6:3e:5b:fa:65:7f:8c:c6:ee:4e:84:e0:a8:81:b7:
-        3c:a5
+         b3:53:c9:a1:7f:13:e8:4b:ff:f0:81:84:9a:8c:1d:44:ef:3c:
+         fb:a8:e6:0d:62:9b:0f:f9:a9:c9:ca:4b:26:2e:51:6d:f3:ac:
+         b9:9e:2c:10:96:1c:f7:80:ff:5e:30:4f:a0:67:9b:84:3e:bc:
+         b5:6f:78:42:02:12:d9:e6:4f:a3:a0:82:eb:bf:00:44:b3:6f:
+         2f:56:c3:36:03:d1:b9:b9:e5:3c:53:3a:17:69:af:42:91:fa:
+         b5:91:b2:06:7f:07:88:e7:ac:7a:2b:b7:c3:41:e8:7d:9b:96:
+         c9:3d:38:4a:4c:39:45:35:c1:43:05:b2:32:00:99:22:72:2a:
+         7c:00
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAOJo9JXrSYmHMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTcxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE3MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNzESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTcwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAMjeUjZ7bktteoNzrUHNrzYCYjY+91UHESRDwutD5G8d
-POxzS4FYoip+4MTwmq4E2CpJOb+e6K3wllJePGdxfz1A1zbjHCXaCynpi4FmGbw0
-OBpOy2P1MM+CbPUUzN+7zO1whuS6btuFzmDRaTdI6AzAdoIPX2UJYg1yyVqzSSz9
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFHj6Heg1M61A66m0Pod6sGUXzzY1MIGvBgNV
-HSMEgacwgaSAFHj6Heg1M61A66m0Pod6sGUXzzY1oYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNzESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTeCCQDiaPSV60mJhzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAAcgM7avnrFJkFcZhumLGIrpe7G0/yle3t/J+ch93mENNvxV
-3OdR/4m1aQdyYLYZTsSQ5ufBDla61hzHNBA4LcVxeYreprLWz5jcmj7f01dnvRWD
-lQAcLUWcc22CV52sV/HYOa6SO/82oQ4IRuYAqdY+W/plf4zG7k6E4KiBtzyl
+MIICyDCCAjGgAwIBAgIJAO3FPqSdpc27MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE3MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhNzAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE3MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhNzCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEA+VMN6qtNL9n6dTz2V4DRkilEvtt9bV73TqF2g7Mx
+pUA+RNCOLjf5bD4oTx5SZuvpTFLpf5TjnyzkZcP8J5suQoE+DRO7WFL2ULb17y6s
+lFJOSqka5xkOK0pGWVfepGVVQ3BXUlWV5Bddzw3kO/dCS84lnSE+QSkwwSKyd4V6
+g/0CAwEAAaNQME4wHQYDVR0OBBYEFEWdsddv4v1PnOkQeO7nMxoU4a+dMB8GA1Ud
+IwQYMBaAFEWdsddv4v1PnOkQeO7nMxoU4a+dMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAs1PJoX8T6Ev/8IGEmowdRO88+6jmDWKbD/mpycpLJi5RbfOs
+uZ4sEJYc94D/XjBPoGebhD68tW94QgIS2eZPo6CC678ARLNvL1bDNgPRubnlPFM6
+F2mvQpH6tZGyBn8HiOeseiu3w0HofZuWyT04Skw5RTXBQwWyMgCZInIqfAA=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta8/ta8_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta8/ta8_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            b8:9a:b1:4d:fa:a9:68:23
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+        Serial Number: 16709229305513134148 (0xe7e31b8629a84844)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:da:5e:85:e0:17:14:35:c1:e8:f4:b6:97:15:d1:
-                    f5:c3:36:26:57:85:5c:0c:e8:8e:d7:2b:10:66:b2:
-                    61:92:a3:df:a4:4f:61:52:41:9c:3b:2f:0e:bc:bd:
-                    92:9b:e2:4c:ec:68:34:76:2c:86:54:e5:8b:9e:ac:
-                    2f:7e:4f:07:52:ec:7f:51:31:ed:9e:94:ed:7e:15:
-                    da:4f:fb:65:d0:07:85:c2:60:69:ce:ac:74:72:8a:
-                    45:31:e4:6c:3e:5e:05:bc:d3:2f:37:56:14:c2:2e:
-                    78:78:6b:93:14:e5:61:08:22:ef:4d:f9:bb:1b:1f:
-                    31:09:12:7a:ad:e5:cf:18:5b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c6:4d:f7:24:79:d7:8f:a0:93:61:37:d0:a4:5c:
+                    61:81:e2:1a:1c:0a:ff:ce:8b:3d:49:15:12:1c:1b:
+                    b7:9c:dd:28:f6:c5:5d:2e:63:f7:67:4b:c9:8c:95:
+                    5a:1c:e8:97:89:16:83:81:ff:bc:10:26:51:7c:f9:
+                    f1:03:f5:51:f4:01:45:da:d4:2f:cf:d9:35:68:0c:
+                    ae:11:2d:31:37:5a:73:73:c0:60:13:c8:10:73:3a:
+                    7d:c9:96:8c:07:00:b1:41:52:d2:b0:5f:cd:01:06:
+                    b8:d7:3f:d8:0f:17:f9:38:39:5d:2d:09:14:99:05:
+                    7c:1f:1f:6f:c9:2d:7d:6e:61
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                BB:CA:54:46:B9:0F:22:DB:69:82:15:BB:66:36:9D:50:1D:0B:1B:F5
+                9E:DE:D5:93:0F:57:31:37:6C:9A:F7:DA:A2:A0:D2:CE:F4:65:EC:86
             X509v3 Authority Key Identifier: 
-                keyid:BB:CA:54:46:B9:0F:22:DB:69:82:15:BB:66:36:9D:50:1D:0B:1B:F5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta8/CN=localhost/emailAddress=ta8
-                serial:B8:9A:B1:4D:FA:A9:68:23
+                keyid:9E:DE:D5:93:0F:57:31:37:6C:9A:F7:DA:A2:A0:D2:CE:F4:65:EC:86
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        7a:13:83:75:43:35:e1:4d:07:93:8d:1c:fd:4d:8f:5c:24:78:
-        f5:01:35:4c:a5:ad:5f:92:f3:23:21:0c:2d:dc:64:a5:7f:c2:
-        3c:c9:e3:b0:4e:d8:17:4e:76:4c:4d:71:fb:b9:3d:d9:51:b8:
-        fc:e0:91:a6:5c:18:c8:06:55:cc:a9:ba:9e:59:92:c4:5c:04:
-        11:e2:d9:99:1d:cb:bd:9d:6c:c2:0e:9e:f0:4c:20:69:6b:b1:
-        76:b6:d4:c0:e6:6c:4b:1e:18:cb:71:4a:9b:13:ca:db:c8:a4:
-        0e:35:c0:91:70:04:9c:32:bd:15:a2:36:72:97:d0:7b:d0:6c:
-        dc:03
+         81:1f:1d:b5:60:85:60:4f:9f:cc:9a:12:99:4a:dc:fb:49:2b:
+         70:9d:21:1e:d7:be:fe:a8:b8:eb:fd:49:e2:99:72:ae:0e:be:
+         cf:bc:c4:88:11:8e:5b:6c:d5:68:d0:cb:52:1a:7c:65:a2:c1:
+         1f:08:7e:31:6e:28:18:fa:04:90:70:d5:96:aa:89:97:9d:61:
+         08:47:f5:75:4c:9d:96:c7:37:8f:3e:f2:04:bc:48:a6:89:65:
+         25:27:13:70:5a:f7:97:ba:42:61:a5:d9:69:44:08:34:19:4d:
+         6e:1c:e7:23:25:1f:c0:f3:ad:fa:56:c2:02:75:ed:c2:51:ca:
+         cf:96
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJALiasU36qWgjMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTgxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE4MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhODESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTgwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBANpeheAXFDXB6PS2lxXR9cM2JleFXAzojtcrEGayYZKj
-36RPYVJBnDsvDry9kpviTOxoNHYshlTli56sL35PB1Lsf1Ex7Z6U7X4V2k/7ZdAH
-hcJgac6sdHKKRTHkbD5eBbzTLzdWFMIueHhrkxTlYQgi7035uxsfMQkSeq3lzxhb
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFLvKVEa5DyLbaYIVu2Y2nVAdCxv1MIGvBgNV
-HSMEgacwgaSAFLvKVEa5DyLbaYIVu2Y2nVAdCxv1oYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhODESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTiCCQC4mrFN+qloIzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAHoTg3VDNeFNB5ONHP1Nj1wkePUBNUylrV+S8yMhDC3cZKV/
-wjzJ47BO2BdOdkxNcfu5PdlRuPzgkaZcGMgGVcypup5ZksRcBBHi2Zkdy72dbMIO
-nvBMIGlrsXa21MDmbEseGMtxSpsTytvIpA41wJFwBJwyvRWiNnKX0HvQbNwD
+MIICyDCCAjGgAwIBAgIJAOfjG4YpqEhEMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE4MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhODAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE4MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhODCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAxk33JHnXj6CTYTfQpFxhgeIaHAr/zos9SRUSHBu3
+nN0o9sVdLmP3Z0vJjJVaHOiXiRaDgf+8ECZRfPnxA/VR9AFF2tQvz9k1aAyuES0x
+N1pzc8BgE8gQczp9yZaMBwCxQVLSsF/NAQa41z/YDxf5ODldLQkUmQV8Hx9vyS19
+bmECAwEAAaNQME4wHQYDVR0OBBYEFJ7e1ZMPVzE3bJr32qKg0s70ZeyGMB8GA1Ud
+IwQYMBaAFJ7e1ZMPVzE3bJr32qKg0s70ZeyGMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAgR8dtWCFYE+fzJoSmUrc+0krcJ0hHte+/qi46/1J4plyrg6+
+z7zEiBGOW2zVaNDLUhp8ZaLBHwh+MW4oGPoEkHDVlqqJl51hCEf1dUydlsc3jz7y
+BLxIpollJScTcFr3l7pCYaXZaUQINBlNbhznIyUfwPOt+lbCAnXtwlHKz5Y=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/ta9/ta9_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/ta9/ta9_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            a1:62:e1:e5:c0:a2:38:0d
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+        Serial Number: 16519569919148996401 (0xe5414d51291ab731)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e8:ab:ef:91:ca:05:4a:18:a2:98:c4:d8:93:d0:
-                    ce:99:a9:5e:02:8d:5d:5c:e3:f3:84:49:6b:a7:6d:
-                    ef:38:77:2e:32:c2:9c:09:1d:f6:be:6c:c6:c4:b1:
-                    c8:c3:32:72:2b:84:87:f6:ba:bf:fc:cf:5c:05:c2:
-                    4f:62:23:7e:02:3f:ce:6c:c6:b6:95:86:84:d7:97:
-                    9f:1c:87:70:29:62:6a:29:7c:06:a3:b7:18:12:67:
-                    07:3a:89:aa:f0:99:fe:df:46:00:b1:2f:aa:30:1e:
-                    a2:1e:f8:2b:37:99:21:b8:85:53:42:98:4a:bd:c5:
-                    f9:b4:61:60:0a:73:bc:0e:d1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c9:8a:2d:0d:53:04:e8:02:bb:bc:27:df:0e:b8:
+                    33:25:07:54:61:d0:d9:b6:08:33:5b:c3:eb:4c:a1:
+                    1f:9f:51:cc:a9:83:07:16:15:9c:69:0b:48:74:62:
+                    35:5f:a3:94:38:37:0f:3f:5f:58:26:9a:36:0b:a2:
+                    0f:bb:9b:57:ff:fd:70:01:d6:28:a2:b6:67:ed:a9:
+                    c8:90:15:b5:7f:91:60:32:ff:96:13:a4:3f:09:23:
+                    70:2f:38:6f:24:54:41:95:2f:91:5a:6e:a5:aa:77:
+                    da:6c:50:ee:62:e5:85:8a:67:63:7d:fc:07:30:ba:
+                    f3:96:93:6c:5d:5f:9e:2e:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A6:CF:35:00:96:15:AD:B4:24:DE:1D:5A:B9:56:A2:6E:B4:2D:46:C5
+                E8:5E:8E:77:D1:61:64:BB:48:AF:38:95:0C:57:16:4E:E3:77:3D:35
             X509v3 Authority Key Identifier: 
-                keyid:A6:CF:35:00:96:15:AD:B4:24:DE:1D:5A:B9:56:A2:6E:B4:2D:46:C5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta9/CN=localhost/emailAddress=ta9
-                serial:A1:62:E1:E5:C0:A2:38:0D
+                keyid:E8:5E:8E:77:D1:61:64:BB:48:AF:38:95:0C:57:16:4E:E3:77:3D:35
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        44:02:da:cf:c3:07:27:84:e4:06:22:ff:fc:7e:c9:47:7a:79:
-        e1:9f:6a:84:68:a8:fb:48:18:80:58:0f:b0:5e:ef:43:bf:3a:
-        69:23:b2:18:3e:78:3a:8e:ff:c5:d8:76:4c:99:d5:9f:be:8a:
-        fd:0e:79:b9:7e:62:c4:c2:4b:6f:78:01:e7:52:19:ff:08:86:
-        a7:b2:17:0c:11:03:ef:42:1f:b5:5b:40:0a:3a:9f:2a:4f:57:
-        31:3d:b1:dd:a8:51:e1:2f:b2:e4:5b:2e:1b:9f:a7:d6:b7:6b:
-        76:68:f9:2e:b1:38:6f:11:21:0e:81:a2:32:01:7b:bc:c3:1f:
-        82:4e
+         3e:20:dc:10:1b:b4:83:9a:0a:9a:41:d3:6f:ec:ef:5b:51:0f:
+         a7:4a:49:0e:b3:86:f6:0f:c2:84:ea:0f:b2:08:6d:a2:7c:e4:
+         24:10:ba:45:c2:c3:9e:07:b9:c3:74:10:f2:74:7f:c7:61:2e:
+         0e:45:33:00:c4:19:32:61:2b:58:0a:f4:51:7a:03:66:68:32:
+         27:c3:20:27:af:c4:93:64:45:0d:16:0e:ca:2b:86:f6:1c:22:
+         13:74:5a:d2:68:fc:45:11:b8:f1:13:26:e1:e4:c2:b7:b5:b8:
+         f8:fc:cc:6d:fb:87:3e:5d:53:31:ba:99:16:65:7b:b1:6c:e9:
+         78:8a
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAKFi4eXAojgNMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTkxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE5MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhOTESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTkwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAOir75HKBUoYopjE2JPQzpmpXgKNXVzj84RJa6dt7zh3
-LjLCnAkd9r5sxsSxyMMyciuEh/a6v/zPXAXCT2IjfgI/zmzGtpWGhNeXnxyHcCli
-ail8BqO3GBJnBzqJqvCZ/t9GALEvqjAeoh74KzeZIbiFU0KYSr3F+bRhYApzvA7R
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFKbPNQCWFa20JN4dWrlWom60LUbFMIGvBgNV
-HSMEgacwgaSAFKbPNQCWFa20JN4dWrlWom60LUbFoYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhOTESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTmCCQChYuHlwKI4DTAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAEQC2s/DByeE5AYi//x+yUd6eeGfaoRoqPtIGIBYD7Be70O/
-Omkjshg+eDqO/8XYdkyZ1Z++iv0Oebl+YsTCS294AedSGf8IhqeyFwwRA+9CH7Vb
-QAo6nypPVzE9sd2oUeEvsuRbLhufp9a3a3Zo+S6xOG8RIQ6BojIBe7zDH4JO
+MIICyDCCAjGgAwIBAgIJAOVBTVEpGrcxMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE5MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhOTAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE5MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhOTCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAyYotDVME6AK7vCffDrgzJQdUYdDZtggzW8PrTKEf
+n1HMqYMHFhWcaQtIdGI1X6OUODcPP19YJpo2C6IPu5tX//1wAdYoorZn7anIkBW1
+f5FgMv+WE6Q/CSNwLzhvJFRBlS+RWm6lqnfabFDuYuWFimdjffwHMLrzlpNsXV+e
+LgcCAwEAAaNQME4wHQYDVR0OBBYEFOhejnfRYWS7SK84lQxXFk7jdz01MB8GA1Ud
+IwQYMBaAFOhejnfRYWS7SK84lQxXFk7jdz01MAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAPiDcEBu0g5oKmkHTb+zvW1EPp0pJDrOG9g/ChOoPsghtonzk
+JBC6RcLDnge5w3QQ8nR/x2EuDkUzAMQZMmErWAr0UXoDZmgyJ8MgJ6/Ek2RFDRYO
+yiuG9hwiE3Ra0mj8RRG48RMm4eTCt7W4+PzMbfuHPl1TMbqZFmV7sWzpeIo=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta10_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta10_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,65 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            86:f1:45:12:31:c7:2b:2a
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+        Serial Number: 9711796497956498587 (0x86c73b75a7946c9b)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta10, CN=localhost/emailAddress=ta10
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:b6:50:43:73:64:12:40:26:54:0c:f9:67:e4:6a:
-                    ed:1f:18:e5:73:89:13:0f:c9:5f:6e:6e:c6:05:ad:
-                    2c:be:e4:6b:fd:c6:4f:ea:f3:6f:0d:f4:1a:34:7f:
-                    03:97:b0:a4:d1:6e:98:d2:36:fa:33:5d:51:37:de:
-                    8f:5b:3d:a0:07:52:c8:b7:71:30:71:fb:c3:a7:fa:
-                    61:f6:b4:28:be:9e:da:8b:8b:70:dd:8e:d0:a5:1a:
-                    00:70:1c:39:e1:cf:64:f8:ec:b4:83:b9:2b:67:fa:
-                    4d:ae:30:84:2f:2c:9d:6c:77:7e:09:95:43:77:6b:
-                    e1:9d:2b:c9:89:d9:a9:e5:8f
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ab:08:de:44:e1:7d:cf:87:e5:0d:f9:b6:66:79:
+                    45:4b:18:3f:c4:c3:bc:3c:4e:10:1c:23:36:0b:17:
+                    8e:53:e9:1d:52:c0:d3:78:ce:74:30:13:d9:3e:98:
+                    8e:08:94:fe:76:94:55:7a:d9:73:87:01:5e:dd:c7:
+                    7b:5e:56:94:a6:5d:e6:8a:ab:22:03:cf:e1:7a:1c:
+                    7e:fb:16:c2:7c:f4:a3:6c:46:28:0b:15:15:e9:92:
+                    4f:50:a3:e3:04:25:91:6d:d0:71:2f:66:b3:20:64:
+                    db:f1:60:8d:3f:52:94:13:f1:f1:00:93:0b:20:be:
+                    f3:98:7d:c8:58:e3:f0:e9:c5
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                B7:F0:DB:5F:BA:CC:10:6D:A6:64:62:10:84:A5:C9:39:4C:3C:27:86
+                61:D2:DF:69:D2:65:98:6E:36:8B:4E:A5:34:33:A7:EF:84:5D:DE:F4
             X509v3 Authority Key Identifier: 
-                keyid:B7:F0:DB:5F:BA:CC:10:6D:A6:64:62:10:84:A5:C9:39:4C:3C:27:86
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta10/CN=localhost/emailAddress=ta10
-                serial:86:F1:45:12:31:C7:2B:2A
+                keyid:61:D2:DF:69:D2:65:98:6E:36:8B:4E:A5:34:33:A7:EF:84:5D:DE:F4
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        5b:6d:71:b8:4e:e3:27:06:d9:2a:47:ab:21:a3:df:94:a9:d8:
-        62:f1:6a:97:33:cc:1c:52:55:9a:f8:ec:6d:b4:91:17:4d:2a:
-        0e:03:b4:4b:00:83:10:8e:12:c1:05:67:56:9a:30:90:91:ad:
-        8b:dc:0a:eb:3f:28:5d:f9:d4:87:0d:f7:3a:5a:f6:47:52:9e:
-        af:4e:21:d4:2f:b8:40:4f:7f:81:1f:93:ca:bc:e6:04:c5:18:
-        65:5e:b1:dd:0b:3c:5e:3a:6f:48:e3:fc:b2:c8:37:8d:9f:14:
-        1b:a7:12:79:bb:2d:b9:fc:7a:01:ef:66:c6:d4:c2:44:01:49:
-        23:a9
+         48:43:2e:21:5e:c5:85:b1:97:37:72:7a:4a:a3:c0:db:5f:c4:
+         42:51:d0:3e:f5:20:43:f6:72:61:b3:fb:8f:13:71:36:0e:8e:
+         33:8c:14:7d:c2:39:ed:36:a9:55:db:bd:24:de:96:2c:b2:61:
+         d5:95:36:97:e4:b6:17:d3:a5:6c:8c:96:1a:89:54:ab:43:f0:
+         76:b1:f6:f1:4a:0d:69:79:ea:95:38:76:c8:5b:cc:99:ca:ba:
+         0d:71:7d:0f:d0:31:8c:94:a9:2d:7b:91:56:98:a1:ea:75:08:
+         ea:fe:03:e0:23:09:32:00:88:1e:83:f6:fe:df:40:3c:78:25:
+         ae:e5
 -----BEGIN CERTIFICATE-----
-MIIDYDCCAsmgAwIBAgIJAIbxRRIxxysqMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQ0wCwYDVQQLEwR0YTEwMRIwEAYDVQQDEwlsb2NhbGhv
-c3QxEzARBgkqhkiG9w0BCQEWBHRhMTAwHhcNMTEwNDExMjIzNzU1WhcNMTQwMTA1
-MjIzNzU1WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEG
-A1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMDES
-MBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQC2UENzZBJAJlQM+Wfkau0fGOVziRMPyV9ubsYF
-rSy+5Gv9xk/q828N9Bo0fwOXsKTRbpjSNvozXVE33o9bPaAHUsi3cTBx+8On+mH2
-tCi+ntqLi3DdjtClGgBwHDnhz2T47LSDuStn+k2uMIQvLJ1sd34JlUN3a+GdK8mJ
-2anljwIDAQABo4HlMIHiMB0GA1UdDgQWBBS38NtfuswQbaZkYhCEpck5TDwnhjCB
-sgYDVR0jBIGqMIGngBS38NtfuswQbaZkYhCEpck5TDwnhqGBg6SBgDB+MQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFy
-azENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMDESMBAGA1UEAxMJbG9jYWxo
-b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwggkAhvFFEjHHKyowDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOBgQBbbXG4TuMnBtkqR6sho9+Uqdhi8WqXM8wcUlWa
-+OxttJEXTSoOA7RLAIMQjhLBBWdWmjCQka2L3ArrPyhd+dSHDfc6WvZHUp6vTiHU
-L7hAT3+BH5PKvOYExRhlXrHdCzxeOm9I4/yyyDeNnxQbpxJ5uy25/HoB72bG1MJE
-AUkjqQ==
+MIICzDCCAjWgAwIBAgIJAIbHO3WnlGybMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTENMAsGA1UECwwEdGExMDESMBAGA1UEAwwJbG9jYWxo
+b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTEwMB4XDTEzMTIxMzAwMTMzOVoXDTE2MDkw
+ODAwMTMzOVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQ0wCwYDVQQLDAR0YTEw
+MRIwEAYDVQQDDAlsb2NhbGhvc3QxEzARBgkqhkiG9w0BCQEWBHRhMTAwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAKsI3kThfc+H5Q35tmZ5RUsYP8TDvDxOEBwj
+NgsXjlPpHVLA03jOdDAT2T6YjgiU/naUVXrZc4cBXt3He15WlKZd5oqrIgPP4Xoc
+fvsWwnz0o2xGKAsVFemST1Cj4wQlkW3QcS9msyBk2/FgjT9SlBPx8QCTCyC+85h9
+yFjj8OnFAgMBAAGjUDBOMB0GA1UdDgQWBBRh0t9p0mWYbjaLTqU0M6fvhF3e9DAf
+BgNVHSMEGDAWgBRh0t9p0mWYbjaLTqU0M6fvhF3e9DAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4GBAEhDLiFexYWxlzdyekqjwNtfxEJR0D71IEP2cmGz+48T
+cTYOjjOMFH3COe02qVXbvSTeliyyYdWVNpfkthfTpWyMlhqJVKtD8Hax9vFKDWl5
+6pU4dshbzJnKug1xfQ/QMYyUqS17kVaYoep1COr+A+AjCTIAiB6D9v7fQDx4Ja7l
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta11_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta11_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,65 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            d7:f1:84:58:4b:42:ce:33
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+        Serial Number: 10111560406944601325 (0x8c537a9de4d654ed)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Validity
-            Not Before: Apr 11 22:37:55 2011 GMT
-            Not After : Jan  5 22:37:55 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
+            Not Before: Dec 13 00:13:39 2013 GMT
+            Not After : Sep  8 00:13:39 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta11, CN=localhost/emailAddress=ta11
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a3:c5:d4:23:f8:e8:a4:02:1f:38:cd:53:dc:7c:
-                    e8:3c:49:bd:14:c1:c7:a2:b7:00:7a:d2:d1:c8:01:
-                    7c:9b:f7:78:50:95:07:69:90:a0:7a:25:0f:55:55:
-                    f7:b2:33:ae:ae:66:64:5c:4c:86:66:e0:28:e2:63:
-                    8c:11:5f:ee:a4:af:77:86:c2:c0:18:0d:24:18:5f:
-                    26:ff:67:cc:f4:f9:7d:0c:e7:d7:0c:01:e8:85:57:
-                    f4:a8:d8:2c:f1:ec:2f:c7:8c:34:d4:3d:d3:1b:5c:
-                    2d:44:bd:d1:a6:35:d2:21:36:f9:31:ac:24:cb:ec:
-                    7b:70:c8:10:97:c8:8e:37:19
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:f3:d5:2f:b4:3e:12:ee:e5:01:6a:41:a4:09:1b:
+                    12:5f:f3:d5:a2:7e:3c:d8:6f:6f:a7:30:af:72:3d:
+                    f4:f4:31:30:94:b9:09:d8:2f:36:ba:12:61:56:8c:
+                    87:f9:52:6f:8b:b5:28:d1:23:93:f3:20:d4:b5:2d:
+                    ca:29:10:f5:10:7b:ad:d6:ee:de:40:22:d9:10:32:
+                    30:93:27:22:6d:87:f9:ed:85:16:c2:6d:da:24:51:
+                    db:1a:00:53:2b:65:4a:ce:24:0f:cf:57:f1:c0:51:
+                    9e:0c:ac:2f:17:5d:72:c1:f4:8d:83:20:41:d3:10:
+                    5f:f2:e0:2d:9f:ec:da:97:7d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                CE:A0:CF:69:A4:17:A0:54:BE:C3:CB:28:70:86:6A:BD:3B:DE:E4:CC
+                BD:98:0D:A4:4D:61:87:11:83:C8:53:D1:C9:62:9D:ED:45:61:DD:42
             X509v3 Authority Key Identifier: 
-                keyid:CE:A0:CF:69:A4:17:A0:54:BE:C3:CB:28:70:86:6A:BD:3B:DE:E4:CC
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta11/CN=localhost/emailAddress=ta11
-                serial:D7:F1:84:58:4B:42:CE:33
+                keyid:BD:98:0D:A4:4D:61:87:11:83:C8:53:D1:C9:62:9D:ED:45:61:DD:42
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        89:34:9b:f9:55:53:63:83:82:0e:d0:f1:e5:0c:e3:4e:4b:2f:
-        54:20:2b:70:00:56:08:b4:18:88:59:e2:66:3e:5c:b6:0a:74:
-        16:bc:43:61:35:1e:df:e5:f6:f6:7e:de:87:18:61:b7:70:b0:
-        93:e8:5a:19:1d:01:a7:43:ca:38:ea:d2:e2:75:0e:3e:d2:b5:
-        91:57:1e:30:29:aa:2a:26:53:1b:9e:56:ad:61:41:3c:04:bb:
-        a5:af:da:75:63:5e:bb:31:21:f9:4c:dc:d0:c2:4c:90:07:45:
-        ed:32:0d:c0:c8:e9:6f:72:b5:ae:19:f2:88:9e:50:5c:5a:34:
-        47:a9
+         36:46:25:95:5e:65:37:e1:c4:14:31:7a:2a:a8:16:c0:bf:77:
+         ae:6a:17:f6:f2:dc:7c:0c:84:52:bb:07:4c:cb:1c:4e:80:b3:
+         55:74:15:69:40:a2:54:e9:e5:f8:2e:2f:b2:c9:37:ef:3d:7f:
+         87:64:02:e3:7c:f2:ec:97:77:b4:63:77:80:c1:61:25:fb:d5:
+         e0:26:c1:89:f0:0e:5d:65:d4:ba:d7:55:7b:ce:af:77:55:65:
+         96:7a:8d:7d:e5:79:a0:88:13:7a:cf:cf:4e:4d:a8:34:2d:3b:
+         f3:b2:44:f9:8b:c9:91:44:36:0f:94:eb:45:dd:2d:03:68:3e:
+         38:2e
 -----BEGIN CERTIFICATE-----
-MIIDYDCCAsmgAwIBAgIJANfxhFhLQs4zMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQ0wCwYDVQQLEwR0YTExMRIwEAYDVQQDEwlsb2NhbGhv
-c3QxEzARBgkqhkiG9w0BCQEWBHRhMTEwHhcNMTEwNDExMjIzNzU1WhcNMTQwMTA1
-MjIzNzU1WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEG
-A1UEBxMKTWVubG8gUGFyazENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMTES
-MBAGA1UEAxMJbG9jYWxob3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCjxdQj+OikAh84zVPcfOg8Sb0UwceitwB60tHI
-AXyb93hQlQdpkKB6JQ9VVfeyM66uZmRcTIZm4CjiY4wRX+6kr3eGwsAYDSQYXyb/
-Z8z0+X0M59cMAeiFV/So2Czx7C/HjDTUPdMbXC1EvdGmNdIhNvkxrCTL7HtwyBCX
-yI43GQIDAQABo4HlMIHiMB0GA1UdDgQWBBTOoM9ppBegVL7Dyyhwhmq9O97kzDCB
-sgYDVR0jBIGqMIGngBTOoM9ppBegVL7Dyyhwhmq9O97kzKGBg6SBgDB+MQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFy
-azENMAsGA1UEChMEcGtnNTENMAsGA1UECxMEdGExMTESMBAGA1UEAxMJbG9jYWxo
-b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExggkA1/GEWEtCzjMwDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOBgQCJNJv5VVNjg4IO0PHlDONOSy9UICtwAFYItBiI
-WeJmPly2CnQWvENhNR7f5fb2ft6HGGG3cLCT6FoZHQGnQ8o46tLidQ4+0rWRVx4w
-KaoqJlMbnlatYUE8BLulr9p1Y167MSH5TNzQwkyQB0XtMg3AyOlvcrWuGfKInlBc
-WjRHqQ==
+MIICzDCCAjWgAwIBAgIJAIxTep3k1lTtMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTENMAsGA1UECwwEdGExMTESMBAGA1UEAwwJbG9jYWxo
+b3N0MRMwEQYJKoZIhvcNAQkBFgR0YTExMB4XDTEzMTIxMzAwMTMzOVoXDTE2MDkw
+ODAwMTMzOVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFDAS
+BgNVBAcMC1NhbnRhIENsYXJhMQ0wCwYDVQQKDARwa2c1MQ0wCwYDVQQLDAR0YTEx
+MRIwEAYDVQQDDAlsb2NhbGhvc3QxEzARBgkqhkiG9w0BCQEWBHRhMTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAPPVL7Q+Eu7lAWpBpAkbEl/z1aJ+PNhvb6cw
+r3I99PQxMJS5CdgvNroSYVaMh/lSb4u1KNEjk/Mg1LUtyikQ9RB7rdbu3kAi2RAy
+MJMnIm2H+e2FFsJt2iRR2xoAUytlSs4kD89X8cBRngysLxddcsH0jYMgQdMQX/Lg
+LZ/s2pd9AgMBAAGjUDBOMB0GA1UdDgQWBBS9mA2kTWGHEYPIU9HJYp3tRWHdQjAf
+BgNVHSMEGDAWgBS9mA2kTWGHEYPIU9HJYp3tRWHdQjAMBgNVHRMEBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4GBADZGJZVeZTfhxBQxeiqoFsC/d65qF/by3HwMhFK7B0zL
+HE6As1V0FWlAolTp5fguL7LJN+89f4dkAuN88uyXd7Rjd4DBYSX71eAmwYnwDl1l
+1LrXVXvOr3dVZZZ6jX3leaCIE3rPz05NqDQtO/OyRPmLyZFENg+U60XdLQNoPjgu
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta1_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta1_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            a1:49:ea:78:5a:f4:55:8d
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta1/emailAddress=ta1
+        Serial Number: 17773656435948586063 (0xf6a8b65c108d044f)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta1/emailAddress=ta1
         Validity
-            Not Before: Apr 11 22:37:38 2011 GMT
-            Not After : Jan  5 22:37:38 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta1/emailAddress=ta1
+            Not Before: Dec 13 00:13:33 2013 GMT
+            Not After : Sep  8 00:13:33 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta1/emailAddress=ta1
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e0:4a:38:c6:48:13:ab:71:ab:ca:6e:6e:ce:e9:
-                    fc:2c:68:cd:ee:79:f6:c2:7e:1f:19:ee:5b:75:19:
-                    3d:ba:4f:8f:a3:79:f9:5c:eb:dd:0c:30:0f:d0:77:
-                    05:0d:ff:b9:28:e4:74:1a:67:b3:ff:36:ea:26:61:
-                    ec:51:25:e1:c0:cd:97:58:e0:65:8d:4c:54:bc:93:
-                    99:37:2b:f3:87:d3:b8:d7:87:15:d9:cf:1c:b6:87:
-                    f4:6d:54:bd:f5:65:53:60:43:b2:04:72:79:b0:bf:
-                    71:13:11:fd:bc:45:38:14:82:d9:05:8b:fe:9f:8e:
-                    7d:d1:2c:b9:36:61:c0:0a:11
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c1:11:20:95:9b:6a:49:f5:e0:b3:80:97:37:02:
+                    fc:6f:99:6d:70:67:a1:47:66:cf:f7:24:58:55:c8:
+                    88:e4:da:89:a8:fc:97:f1:6c:fc:44:60:6b:5c:71:
+                    d7:84:22:16:a4:09:77:fb:a3:af:10:24:7b:13:03:
+                    b6:b9:c8:f0:03:00:74:a2:ca:10:9f:ad:17:32:e8:
+                    cb:fa:56:c1:fa:0c:3f:43:5a:36:ee:6b:94:12:94:
+                    48:a9:d9:1c:37:5c:76:6d:d5:ad:6f:37:ad:9f:88:
+                    78:50:92:59:d6:4f:2a:22:ba:a5:ec:29:c7:3e:b5:
+                    41:9e:ce:9b:9e:9e:d8:58:f7
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                75:A9:2B:02:E8:FB:31:09:2A:F2:16:21:24:D8:B2:A5:D0:14:93:5B
+                81:54:6B:06:08:DD:44:4F:08:81:21:7A:7C:D5:96:EA:53:2B:E3:0A
             X509v3 Authority Key Identifier: 
-                keyid:75:A9:2B:02:E8:FB:31:09:2A:F2:16:21:24:D8:B2:A5:D0:14:93:5B
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta1/emailAddress=ta1
-                serial:A1:49:EA:78:5A:F4:55:8D
+                keyid:81:54:6B:06:08:DD:44:4F:08:81:21:7A:7C:D5:96:EA:53:2B:E3:0A
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        82:9d:88:f6:27:64:f1:c4:9f:18:10:ac:d3:6c:81:b9:25:34:
-        f8:74:1c:83:b3:94:65:1f:25:cd:5e:a7:e4:ad:d8:b2:6e:f1:
-        43:56:25:75:d5:db:02:d6:f2:7a:3f:12:a3:60:04:77:49:99:
-        37:d7:af:60:ff:d7:ee:d0:df:cd:4a:fb:75:ee:05:b0:af:00:
-        da:e2:80:6e:85:81:72:75:a5:3b:01:8c:00:3f:bb:8a:21:47:
-        0d:d4:bb:51:a5:4c:58:2a:d8:09:1f:fb:b1:e7:56:00:53:a8:
-        25:3e:ab:3d:f6:1b:28:7d:ef:76:68:62:be:28:a9:63:44:d1:
-        68:6a
+         94:f7:77:15:8b:2a:ab:eb:9a:7f:a2:7d:d9:5b:be:6d:bc:e2:
+         49:bf:7d:16:36:0a:72:24:be:72:af:59:2f:9a:cc:d2:da:74:
+         fc:03:f5:9e:c2:e8:a4:ea:99:90:30:7e:b2:b0:6f:b6:fe:af:
+         fd:d6:f0:51:50:52:99:d2:0c:dc:88:4a:54:3c:09:93:9b:83:
+         82:84:64:78:d7:d9:00:90:ee:01:9c:69:05:34:c1:2d:b3:46:
+         da:9b:3a:47:65:76:68:63:6c:3d:cb:47:cc:71:05:f2:22:6b:
+         bd:66:0b:6a:90:45:5f:60:11:4c:7e:11:32:8c:8b:ec:70:c6:
+         f6:b4
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAKFJ6nha9FWNMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEWA3Rh
-MTAeFw0xMTA0MTEyMjM3MzhaFw0xNDAxMDUyMjM3MzhaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEWA3RhMTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4Eo4xkgTq3Grym5uzun8LGjN7nn2wn4f
-Ge5bdRk9uk+Po3n5XOvdDDAP0HcFDf+5KOR0Gmez/zbqJmHsUSXhwM2XWOBljUxU
-vJOZNyvzh9O414cV2c8ctof0bVS99WVTYEOyBHJ5sL9xExH9vEU4FILZBYv+n459
-0Sy5NmHAChECAwEAAaOBzTCByjAdBgNVHQ4EFgQUdakrAuj7MQkq8hYhJNiypdAU
-k1swgZoGA1UdIwSBkjCBj4AUdakrAuj7MQkq8hYhJNiypdAUk1uhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTExEjAQBgkqhkiG9w0BCQEW
-A3RhMYIJAKFJ6nha9FWNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-gp2I9idk8cSfGBCs02yBuSU0+HQcg7OUZR8lzV6n5K3Ysm7xQ1YlddXbAtbyej8S
-o2AEd0mZN9evYP/X7tDfzUr7de4FsK8A2uKAboWBcnWlOwGMAD+7iiFHDdS7UaVM
-WCrYCR/7sedWAFOoJT6rPfYbKH3vdmhiviipY0TRaGo=
+MIICoDCCAgmgAwIBAgIJAPaotlwQjQRPMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGExMRIwEAYJKoZIhvcNAQkBFgN0
+YTEwHhcNMTMxMjEzMDAxMzMzWhcNMTYwOTA4MDAxMzMzWjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMTESMBAGCSqGSIb3DQEJARYDdGExMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBESCVm2pJ9eCzgJc3AvxvmW1wZ6FH
+Zs/3JFhVyIjk2omo/JfxbPxEYGtccdeEIhakCXf7o68QJHsTA7a5yPADAHSiyhCf
+rRcy6Mv6VsH6DD9DWjbua5QSlEip2Rw3XHZt1a1vN62fiHhQklnWTyoiuqXsKcc+
+tUGezpuenthY9wIDAQABo1AwTjAdBgNVHQ4EFgQUgVRrBgjdRE8IgSF6fNWW6lMr
+4wowHwYDVR0jBBgwFoAUgVRrBgjdRE8IgSF6fNWW6lMr4wowDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQCU93cViyqr65p/on3ZW75tvOJJv30WNgpyJL5y
+r1kvmszS2nT8A/Wewuik6pmQMH6ysG+2/q/91vBRUFKZ0gzciEpUPAmTm4OChGR4
+19kAkO4BnGkFNMEts0bamzpHZXZoY2w9y0fMcQXyImu9ZgtqkEVfYBFMfhEyjIvs
+cMb2tA==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta2_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta2_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            e4:2c:84:25:53:01:eb:e0
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta2/emailAddress=ta2
+        Serial Number: 17668597499765822237 (0xf53377d054e5931d)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta2/emailAddress=ta2
         Validity
-            Not Before: Apr 11 22:37:43 2011 GMT
-            Not After : Jan  5 22:37:43 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta2/emailAddress=ta2
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta2/emailAddress=ta2
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e3:75:e1:44:6d:68:b1:dc:64:6b:a3:06:0a:3b:
-                    91:ad:10:ce:45:99:f3:ea:32:3c:92:bc:b1:85:d5:
-                    c5:62:a6:fd:3e:33:64:fb:84:6e:09:e1:c6:76:34:
-                    43:63:7f:7b:93:bc:6c:0e:31:58:b0:c0:c8:c7:b4:
-                    6e:aa:db:40:86:67:b0:2c:79:82:fb:31:1f:71:6c:
-                    10:a4:b9:0b:dd:d8:78:e4:b3:a3:af:de:c6:0f:21:
-                    fd:5c:e6:01:b6:87:82:9b:04:16:6e:42:a5:57:39:
-                    fe:85:e3:57:58:cd:fe:90:c7:d3:35:7d:91:13:bf:
-                    05:f2:21:ac:42:e7:0f:e4:e3
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:ca:34:f6:15:9c:de:7d:a0:37:35:0b:50:e2:d8:
+                    5b:71:aa:30:27:c3:fb:b2:54:24:b2:7d:cc:52:a5:
+                    3d:90:1e:1c:38:d4:b4:f0:f4:b6:63:db:dc:25:c2:
+                    ab:b2:6a:b6:90:85:85:aa:5f:ed:0f:53:53:82:5c:
+                    19:63:d5:bb:fb:b3:d8:cc:3c:9b:4b:99:f1:55:58:
+                    bb:36:5d:71:6b:96:1a:2f:11:c9:8e:1e:49:bd:66:
+                    39:3f:4e:9d:30:f9:5e:7d:40:05:8f:2e:33:04:75:
+                    00:7b:dc:54:4d:b7:37:68:72:e6:f3:b7:3d:29:58:
+                    84:01:6b:98:29:ba:4c:2b:c1
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                41:D6:E0:DA:6C:87:A3:44:65:CC:AB:12:C8:6C:0C:72:3A:39:90:2E
+                D2:63:03:4B:B8:08:98:F2:25:62:95:57:75:A2:F1:AA:83:E9:0B:5F
             X509v3 Authority Key Identifier: 
-                keyid:41:D6:E0:DA:6C:87:A3:44:65:CC:AB:12:C8:6C:0C:72:3A:39:90:2E
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta2/emailAddress=ta2
-                serial:E4:2C:84:25:53:01:EB:E0
+                keyid:D2:63:03:4B:B8:08:98:F2:25:62:95:57:75:A2:F1:AA:83:E9:0B:5F
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        b1:c5:14:e7:5f:ca:f0:de:3b:c5:f6:10:7c:5c:8a:63:a1:f6:
-        07:4b:9d:9f:53:a9:c8:5c:d7:01:d1:df:6c:20:5c:f5:13:a2:
-        bc:5a:65:4a:b2:f9:25:7a:28:1b:4a:03:14:d5:e9:df:36:58:
-        e9:2e:d1:48:f9:89:7f:2c:04:a5:80:01:38:b5:b9:68:01:f8:
-        78:65:38:af:33:2f:fa:17:61:e4:fd:73:f8:a4:f7:b5:f5:f5:
-        d6:b9:94:3a:32:70:37:b1:e8:58:84:58:92:6c:6a:57:da:84:
-        a5:f5:a9:7e:c1:10:6d:54:fb:82:f9:59:8a:6b:23:5d:33:3a:
-        97:2d
+         40:4c:5f:92:42:4b:a1:21:e1:76:e1:87:1c:42:1f:15:bd:08:
+         4b:bd:ec:a8:8d:6f:d8:f4:2a:df:5d:f8:4c:df:6a:ea:5f:07:
+         ce:00:0a:06:88:60:9c:32:13:4f:e5:99:99:90:56:bc:91:7a:
+         5b:e2:2f:f6:90:e9:97:11:6c:ff:7c:aa:32:37:60:95:0b:b5:
+         b1:99:ec:1d:62:26:51:2f:b9:a2:f1:d2:ed:89:e4:52:c7:fa:
+         9b:62:d3:92:c4:33:c7:95:cb:4c:23:02:2d:af:bf:0e:58:26:
+         24:b7:b7:1c:f2:f4:88:3a:12:36:40:e5:58:5a:25:db:24:f0:
+         dd:9d
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAOQshCVTAevgMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTIxEjAQBgkqhkiG9w0BCQEWA3Rh
-MjAeFw0xMTA0MTEyMjM3NDNaFw0xNDAxMDUyMjM3NDNaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTIxEjAQBgkqhkiG9w0BCQEWA3RhMjCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA43XhRG1osdxka6MGCjuRrRDORZnz6jI8
-kryxhdXFYqb9PjNk+4RuCeHGdjRDY397k7xsDjFYsMDIx7RuqttAhmewLHmC+zEf
-cWwQpLkL3dh45LOjr97GDyH9XOYBtoeCmwQWbkKlVzn+heNXWM3+kMfTNX2RE78F
-8iGsQucP5OMCAwEAAaOBzTCByjAdBgNVHQ4EFgQUQdbg2myHo0RlzKsSyGwMcjo5
-kC4wgZoGA1UdIwSBkjCBj4AUQdbg2myHo0RlzKsSyGwMcjo5kC6hbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTIxEjAQBgkqhkiG9w0BCQEW
-A3RhMoIJAOQshCVTAevgMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-scUU51/K8N47xfYQfFyKY6H2B0udn1OpyFzXAdHfbCBc9ROivFplSrL5JXooG0oD
-FNXp3zZY6S7RSPmJfywEpYABOLW5aAH4eGU4rzMv+hdh5P1z+KT3tfX11rmUOjJw
-N7HoWIRYkmxqV9qEpfWpfsEQbVT7gvlZimsjXTM6ly0=
+MIICoDCCAgmgAwIBAgIJAPUzd9BU5ZMdMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEyMRIwEAYJKoZIhvcNAQkBFgN0
+YTIwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMjESMBAGCSqGSIb3DQEJARYDdGEyMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKNPYVnN59oDc1C1Di2FtxqjAnw/uy
+VCSyfcxSpT2QHhw41LTw9LZj29wlwquyaraQhYWqX+0PU1OCXBlj1bv7s9jMPJtL
+mfFVWLs2XXFrlhovEcmOHkm9Zjk/Tp0w+V59QAWPLjMEdQB73FRNtzdocubztz0p
+WIQBa5gpukwrwQIDAQABo1AwTjAdBgNVHQ4EFgQU0mMDS7gImPIlYpVXdaLxqoPp
+C18wHwYDVR0jBBgwFoAU0mMDS7gImPIlYpVXdaLxqoPpC18wDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQBATF+SQkuhIeF24YccQh8VvQhLveyojW/Y9Crf
+XfhM32rqXwfOAAoGiGCcMhNP5ZmZkFa8kXpb4i/2kOmXEWz/fKoyN2CVC7Wxmewd
+YiZRL7mi8dLtieRSx/qbYtOSxDPHlctMIwItr78OWCYkt7cc8vSIOhI2QOVYWiXb
+JPDdnQ==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta3_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta3_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            f4:58:54:6a:83:22:66:e9
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+        Serial Number: 13890425601977148222 (0xc0c4b47d88d6e33e)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Validity
-            Not Before: Apr 11 22:37:43 2011 GMT
-            Not After : Jan  5 22:37:43 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta3/emailAddress=ta3
+            Not Before: Dec 13 00:13:35 2013 GMT
+            Not After : Sep  8 00:13:35 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta3/emailAddress=ta3
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:d0:b0:e7:c0:27:96:d6:ff:16:89:f4:4c:67:d5:
-                    23:57:a6:af:fe:f3:be:d9:1e:28:44:a6:a3:0e:67:
-                    09:1f:b2:fc:70:fd:2c:4a:9c:13:a0:cf:37:97:2c:
-                    39:7c:42:a4:f7:64:7e:be:49:67:05:01:b3:f7:46:
-                    34:9b:d8:bd:4b:ac:d6:40:96:5a:6d:a0:33:ae:03:
-                    33:22:7d:06:39:6e:0a:5e:39:3f:e6:eb:c7:f9:e3:
-                    1a:a7:dd:16:14:6d:8e:b7:84:d9:af:b7:43:db:5d:
-                    0f:2b:e8:3d:fe:66:d7:9e:3a:06:a1:9f:c3:35:81:
-                    d4:cd:bc:16:3c:a2:c1:dd:89
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:99:d3:8e:88:a3:54:f1:da:a6:39:be:69:28:
+                    5a:87:05:0b:04:59:41:21:39:40:8a:46:fd:f5:20:
+                    d5:6b:b6:02:cd:5f:62:2e:88:34:8b:3d:f1:c0:fe:
+                    38:f7:f6:1f:65:10:d7:0c:03:4c:90:17:f7:25:a4:
+                    62:eb:80:83:44:1f:b2:53:a4:de:c5:d2:17:7e:f6:
+                    96:fe:e2:1a:bc:45:97:dc:29:f9:46:70:11:8d:4a:
+                    f4:b6:b7:2d:67:20:8f:d0:6a:0f:20:09:ff:7c:11:
+                    1c:94:9b:5e:83:57:67:35:2e:37:a2:54:97:2a:fb:
+                    d1:38:64:d5:e0:79:2f:ae:2f
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
+                B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
             X509v3 Authority Key Identifier: 
-                keyid:7A:F6:51:7A:7F:9B:AB:37:3D:4E:93:03:90:6D:6A:84:09:7C:3A:DD
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta3/emailAddress=ta3
-                serial:F4:58:54:6A:83:22:66:E9
+                keyid:B4:D4:36:9F:F8:CB:A2:5F:50:89:DA:21:E3:27:C4:91:F7:84:88:45
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        26:1b:34:03:12:d5:13:94:0f:f8:57:6a:47:d8:d9:81:78:0b:
-        65:f1:51:b7:4e:b2:89:c2:6a:30:5d:37:ad:35:91:16:48:5f:
-        9b:b9:cd:30:1e:0e:f3:31:1e:7a:4e:72:13:c6:e4:66:0a:a9:
-        a4:66:5d:f6:fe:21:51:0f:ab:fd:d7:9d:5d:13:86:07:df:1d:
-        9d:d8:19:ce:6d:e9:7e:7a:19:06:20:07:cc:d1:a3:c2:04:28:
-        b8:9b:41:23:65:92:47:86:ee:ac:a5:7f:b7:2c:92:67:87:83:
-        5b:04:d0:e5:5d:3c:4c:a1:51:e0:9c:02:9a:d5:35:b4:7b:e0:
-        e4:c3
+         22:83:f2:64:c1:e3:e1:67:e4:55:ef:3b:0c:37:93:e9:c1:d7:
+         3f:0e:74:f1:03:59:1d:88:03:dd:d0:f5:38:40:c1:f3:da:93:
+         ff:c9:3f:6c:e8:14:ea:87:7f:25:34:3d:93:81:05:7d:89:70:
+         d2:18:50:17:a9:df:dd:c9:b2:88:80:7d:ed:3c:c5:8d:30:6d:
+         56:c8:f6:df:58:82:b5:76:0c:ab:e9:2d:78:be:1a:d2:e6:8e:
+         85:3f:00:6c:12:bf:d9:99:e1:dc:12:67:e0:57:9c:56:1e:2d:
+         e5:39:04:82:c2:a6:e0:ca:88:60:74:a2:1a:2a:2b:f4:a5:e9:
+         8e:07
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAPRYVGqDImbpMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEWA3Rh
-MzAeFw0xMTA0MTEyMjM3NDNaFw0xNDAxMDUyMjM3NDNaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEWA3RhMzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LDnwCeW1v8WifRMZ9UjV6av/vO+2R4o
-RKajDmcJH7L8cP0sSpwToM83lyw5fEKk92R+vklnBQGz90Y0m9i9S6zWQJZabaAz
-rgMzIn0GOW4KXjk/5uvH+eMap90WFG2Ot4TZr7dD210PK+g9/mbXnjoGoZ/DNYHU
-zbwWPKLB3YkCAwEAAaOBzTCByjAdBgNVHQ4EFgQUevZRen+bqzc9TpMDkG1qhAl8
-Ot0wgZoGA1UdIwSBkjCBj4AUevZRen+bqzc9TpMDkG1qhAl8Ot2hbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTMxEjAQBgkqhkiG9w0BCQEW
-A3RhM4IJAPRYVGqDImbpMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-Jhs0AxLVE5QP+FdqR9jZgXgLZfFRt06yicJqMF03rTWRFkhfm7nNMB4O8zEeek5y
-E8bkZgqppGZd9v4hUQ+r/dedXROGB98dndgZzm3pfnoZBiAHzNGjwgQouJtBI2WS
-R4burKV/tyySZ4eDWwTQ5V08TKFR4JwCmtU1tHvg5MM=
+MIICoDCCAgmgAwIBAgIJAMDEtH2I1uM+MA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGEzMRIwEAYJKoZIhvcNAQkBFgN0
+YTMwHhcNMTMxMjEzMDAxMzM1WhcNMTYwOTA4MDAxMzM1WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhMzESMBAGCSqGSIb3DQEJARYDdGEzMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMmdOOiKNU8dqmOb5pKFqHBQsEWUEh
+OUCKRv31INVrtgLNX2IuiDSLPfHA/jj39h9lENcMA0yQF/clpGLrgINEH7JTpN7F
+0hd+9pb+4hq8RZfcKflGcBGNSvS2ty1nII/Qag8gCf98ERyUm16DV2c1LjeiVJcq
++9E4ZNXgeS+uLwIDAQABo1AwTjAdBgNVHQ4EFgQUtNQ2n/jLol9Qidoh4yfEkfeE
+iEUwHwYDVR0jBBgwFoAUtNQ2n/jLol9Qidoh4yfEkfeEiEUwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQAig/JkwePhZ+RV7zsMN5Ppwdc/DnTxA1kdiAPd
+0PU4QMHz2pP/yT9s6BTqh38lND2TgQV9iXDSGFAXqd/dybKIgH3tPMWNMG1WyPbf
+WIK1dgyr6S14vhrS5o6FPwBsEr/ZmeHcEmfgV5xWHi3lOQSCwqbgyohgdKIaKiv0
+pemOBw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta4_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta4_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            ba:06:fd:ec:89:18:b5:7f
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+        Serial Number: 16787041411903739357 (0xe8f78d38fa4b55dd)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Validity
-            Not Before: Apr 11 22:37:49 2011 GMT
-            Not After : Jan  5 22:37:49 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta4/emailAddress=ta4
+            Not Before: Dec 13 00:13:37 2013 GMT
+            Not After : Sep  8 00:13:37 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta4/emailAddress=ta4
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:cf:c0:25:a7:fa:df:a4:e4:02:33:84:4d:a0:3f:
-                    4e:09:c4:ae:0a:58:d3:45:15:d3:5e:94:56:5a:b5:
-                    da:3e:27:68:66:3d:b1:83:14:bc:13:94:f3:a8:38:
-                    9c:e8:9a:46:4e:06:78:0d:29:95:69:a0:2c:12:19:
-                    3b:6b:a6:3d:46:eb:56:8a:f7:85:2d:d9:9c:f0:30:
-                    6b:0a:03:8d:ae:d8:cf:9e:df:c9:a5:d7:d3:b1:ab:
-                    13:74:e8:1e:a2:be:31:3f:17:78:22:4c:83:8b:24:
-                    ef:4f:5d:c4:6e:26:f8:b0:d9:2b:ad:9e:b0:c4:fc:
-                    c2:00:10:99:e9:39:17:68:05
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:a1:63:5b:f9:78:2a:19:df:d1:4e:d5:75:24:c6:
+                    8b:2f:e9:69:99:ab:82:24:b4:0f:66:ec:4c:c1:7a:
+                    bd:a4:5c:10:f1:61:c7:fe:2f:53:c1:10:8e:7c:83:
+                    4b:c5:50:ca:20:9e:aa:25:41:39:19:0e:7a:99:1a:
+                    8a:25:9b:df:67:b6:67:68:ad:f2:22:15:e8:e6:dd:
+                    3a:77:4a:b9:6f:e1:0a:70:92:0e:dd:a8:e7:62:e7:
+                    a3:3a:fe:ca:75:b4:2d:2c:60:cd:ae:87:fc:ba:27:
+                    c1:0d:85:b1:cc:7f:d9:f3:0f:7d:cb:3e:15:70:54:
+                    e1:2e:8a:88:9d:e7:05:57:47
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
+                84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
             X509v3 Authority Key Identifier: 
-                keyid:3E:5F:64:E9:63:CB:9C:10:D0:91:F4:45:61:F2:F1:EA:42:69:EC:A5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta4/emailAddress=ta4
-                serial:BA:06:FD:EC:89:18:B5:7F
+                keyid:84:46:29:88:74:31:EF:A6:CC:3C:E3:58:29:DE:BE:FD:1B:F4:59:98
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        c2:01:c5:40:3c:24:aa:8a:f3:be:31:f8:82:12:df:b8:e7:b4:
-        92:b1:95:79:d4:f7:db:2a:81:a2:f6:5f:3a:1d:b1:e2:a1:bd:
-        f1:50:75:cc:d6:f7:ab:26:d6:eb:a8:c6:f8:44:25:53:94:ce:
-        6e:a4:6e:4f:40:c2:13:00:b7:cb:b1:82:99:e9:1f:68:54:d0:
-        69:ba:02:5f:07:be:c2:f8:e3:2c:40:73:61:c2:c3:ad:4c:91:
-        f0:ba:0a:61:df:95:d6:fc:d3:19:e3:98:8e:58:73:03:6f:04:
-        9e:b6:f7:8c:3c:1e:60:43:27:96:6d:f5:e7:31:43:bb:22:da:
-        07:9c
+         07:ae:c1:fc:3b:d3:b3:b5:02:32:28:cb:49:f5:dc:fe:2d:9f:
+         21:09:78:85:f7:97:e6:cc:03:b4:08:de:04:a1:64:75:fe:94:
+         a8:48:0f:b9:20:11:b8:ba:2e:f1:c4:7f:03:10:0b:1c:f1:ed:
+         1e:c8:04:b6:28:34:99:61:57:4d:f0:fc:6b:81:f7:a3:8b:74:
+         5a:5f:f7:1d:68:29:ef:5e:cd:b5:ee:2a:72:17:be:db:a4:26:
+         7d:ab:4b:09:85:66:bf:ff:94:56:b5:e1:67:f4:0f:dd:88:50:
+         10:d6:98:96:51:ac:2c:24:8c:83:21:5a:8a:12:0f:e2:58:8f:
+         ef:07
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJALoG/eyJGLV/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEWA3Rh
-NDAeFw0xMTA0MTEyMjM3NDlaFw0xNDAxMDUyMjM3NDlaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEWA3RhNDCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz8Alp/rfpOQCM4RNoD9OCcSuCljTRRXT
-XpRWWrXaPidoZj2xgxS8E5TzqDic6JpGTgZ4DSmVaaAsEhk7a6Y9RutWiveFLdmc
-8DBrCgONrtjPnt/JpdfTsasTdOgeor4xPxd4IkyDiyTvT13Ebib4sNkrrZ6wxPzC
-ABCZ6TkXaAUCAwEAAaOBzTCByjAdBgNVHQ4EFgQUPl9k6WPLnBDQkfRFYfLx6kJp
-7KUwgZoGA1UdIwSBkjCBj4AUPl9k6WPLnBDQkfRFYfLx6kJp7KWhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTQxEjAQBgkqhkiG9w0BCQEW
-A3RhNIIJALoG/eyJGLV/MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-wgHFQDwkqorzvjH4ghLfuOe0krGVedT32yqBovZfOh2x4qG98VB1zNb3qybW66jG
-+EQlU5TObqRuT0DCEwC3y7GCmekfaFTQaboCXwe+wvjjLEBzYcLDrUyR8LoKYd+V
-1vzTGeOYjlhzA28Enrb3jDweYEMnlm315zFDuyLaB5w=
+MIICoDCCAgmgAwIBAgIJAOj3jTj6S1XdMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGE0MRIwEAYJKoZIhvcNAQkBFgN0
+YTQwHhcNMTMxMjEzMDAxMzM3WhcNMTYwOTA4MDAxMzM3WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhNDESMBAGCSqGSIb3DQEJARYDdGE0MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChY1v5eCoZ39FO1XUkxosv6WmZq4Ik
+tA9m7EzBer2kXBDxYcf+L1PBEI58g0vFUMognqolQTkZDnqZGoolm99ntmdorfIi
+Fejm3Tp3Srlv4Qpwkg7dqOdi56M6/sp1tC0sYM2uh/y6J8ENhbHMf9nzD33LPhVw
+VOEuioid5wVXRwIDAQABo1AwTjAdBgNVHQ4EFgQUhEYpiHQx76bMPONYKd6+/Rv0
+WZgwHwYDVR0jBBgwFoAUhEYpiHQx76bMPONYKd6+/Rv0WZgwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQAHrsH8O9OztQIyKMtJ9dz+LZ8hCXiF95fmzAO0
+CN4EoWR1/pSoSA+5IBG4ui7xxH8DEAsc8e0eyAS2KDSZYVdN8Pxrgfeji3RaX/cd
+aCnvXs217ipyF77bpCZ9q0sJhWa//5RWteFn9A/diFAQ1piWUawsJIyDIVqKEg/i
+WI/vBw==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta5_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta5_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,63 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            9c:19:39:11:06:1a:55:91
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta5/emailAddress=ta5
+        Serial Number: 12074133414322946630 (0xa78ff05e6b64c246)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta5/emailAddress=ta5
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, CN=ta5/emailAddress=ta5
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, CN=ta5/emailAddress=ta5
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c4:65:70:7a:0e:03:ae:85:f3:d6:03:6f:f9:a2:
-                    af:4e:ae:cd:d4:99:b6:6d:14:a4:12:62:54:1f:8b:
-                    c6:d3:8c:e8:7e:85:82:a5:f5:c9:03:66:f6:dd:48:
-                    58:5a:7a:20:c6:1d:7b:47:78:52:64:3f:0a:67:d0:
-                    cc:03:aa:2b:00:b5:89:7b:b1:50:fb:79:e1:d5:32:
-                    8c:c3:49:df:ba:2a:21:43:cb:c5:39:39:12:bd:3a:
-                    ba:7b:29:f2:48:32:37:84:c6:af:66:db:a2:a4:00:
-                    ec:40:08:c1:a8:36:0c:b6:48:c6:39:b1:fd:be:e2:
-                    60:a4:3d:c6:b6:b1:a8:be:55
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:b7:a8:13:3d:f3:64:60:87:d9:bd:d0:92:59:74:
+                    b9:dc:27:f8:40:15:39:9a:30:52:0f:73:5d:45:d8:
+                    b9:a1:9a:72:56:e2:85:1a:c0:18:8c:90:56:44:14:
+                    e5:50:70:69:e5:36:5b:a2:fb:3c:bf:f9:78:77:27:
+                    2d:de:3c:5e:3c:7d:d2:40:02:8b:bc:04:9b:8f:65:
+                    0b:74:3a:98:23:4d:e1:0d:4d:c3:42:cb:61:a8:42:
+                    bf:b2:1c:83:18:89:4f:b4:cf:cf:34:fd:f3:c7:7e:
+                    1b:54:3e:ed:e9:0a:13:8c:c2:56:f6:25:87:42:40:
+                    a3:ca:ab:ff:cc:ba:c6:c2:0d
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                E7:E6:72:5B:A0:5F:2C:A6:40:45:1A:66:E4:45:A5:0F:1D:67:5D:93
+                29:DA:B1:46:E3:61:51:AC:3C:3E:F6:78:5B:95:7B:6D:B2:F9:17:21
             X509v3 Authority Key Identifier: 
-                keyid:E7:E6:72:5B:A0:5F:2C:A6:40:45:1A:66:E4:45:A5:0F:1D:67:5D:93
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/CN=ta5/emailAddress=ta5
-                serial:9C:19:39:11:06:1A:55:91
+                keyid:29:DA:B1:46:E3:61:51:AC:3C:3E:F6:78:5B:95:7B:6D:B2:F9:17:21
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        89:2d:87:d4:a5:2a:63:ce:4d:12:6f:ca:94:d3:e9:ac:3e:93:
-        30:f3:1a:20:05:9d:8c:72:7c:70:ea:00:c9:b6:39:d8:5a:d1:
-        87:1e:57:8f:2f:61:f1:ec:a8:f2:b9:2b:03:d5:0c:07:e4:f5:
-        01:8d:00:95:fd:9c:12:d0:86:3f:8d:cf:3a:5b:ae:2d:a2:6f:
-        2d:ee:a6:10:6f:f0:d0:5f:dd:78:02:3e:1f:0d:f3:ae:a2:fa:
-        c5:9d:96:ae:31:a8:a3:ba:a4:78:a8:ec:db:e7:61:de:d3:5c:
-        c4:c2:4d:5c:b4:cb:f8:27:6e:53:06:11:e0:e7:aa:41:7f:bd:
-        9a:8a
+         21:28:62:ac:b3:da:3a:66:ed:13:bc:72:15:0d:44:87:25:c9:
+         8e:0d:37:cf:b9:2b:3b:64:30:6f:67:6e:b7:6a:6e:c7:12:f9:
+         68:9c:78:cd:de:72:fe:05:bb:59:58:47:93:c3:f7:41:fe:30:
+         44:53:57:9a:6c:3e:6c:a4:c9:68:a1:5b:80:b1:3c:e7:e9:c1:
+         11:11:99:ad:60:24:0e:ca:17:56:d2:48:db:c5:9a:3f:f1:92:
+         01:a7:5a:2a:d0:6e:2e:6c:20:3d:97:ba:2e:b1:00:a1:6f:1b:
+         14:83:dd:32:3c:fd:18:c7:b2:85:b8:a6:03:98:fa:eb:d1:45:
+         4e:f9
 -----BEGIN CERTIFICATE-----
-MIIDHDCCAoWgAwIBAgIJAJwZOREGGlWRMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTUxEjAQBgkqhkiG9w0BCQEWA3Rh
-NTAeFw0xMTA0MTEyMjM3NTJaFw0xNDAxMDUyMjM3NTJaMGgxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJrMQ0wCwYD
-VQQKEwRwa2c1MQwwCgYDVQQDEwN0YTUxEjAQBgkqhkiG9w0BCQEWA3RhNTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxGVweg4DroXz1gNv+aKvTq7N1Jm2bRSk
-EmJUH4vG04zofoWCpfXJA2b23UhYWnogxh17R3hSZD8KZ9DMA6orALWJe7FQ+3nh
-1TKMw0nfuiohQ8vFOTkSvTq6eynySDI3hMavZtuipADsQAjBqDYMtkjGObH9vuJg
-pD3GtrGovlUCAwEAAaOBzTCByjAdBgNVHQ4EFgQU5+ZyW6BfLKZARRpm5EWlDx1n
-XZMwgZoGA1UdIwSBkjCBj4AU5+ZyW6BfLKZARRpm5EWlDx1nXZOhbKRqMGgxCzAJ
-BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQ
-YXJrMQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQDEwN0YTUxEjAQBgkqhkiG9w0BCQEW
-A3RhNYIJAJwZOREGGlWRMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEA
-iS2H1KUqY85NEm/KlNPprD6TMPMaIAWdjHJ8cOoAybY52FrRhx5Xjy9h8eyo8rkr
-A9UMB+T1AY0Alf2cEtCGP43POluuLaJvLe6mEG/w0F/deAI+Hw3zrqL6xZ2WrjGo
-o7qkeKjs2+dh3tNcxMJNXLTL+CduUwYR4OeqQX+9moo=
+MIICoDCCAgmgAwIBAgIJAKeP8F5rZMJGMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UEAwwDdGE1MRIwEAYJKoZIhvcNAQkBFgN0
+YTUwHhcNMTMxMjEzMDAxMzM4WhcNMTYwOTA4MDAxMzM4WjBpMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExDTAL
+BgNVBAoMBHBrZzUxDDAKBgNVBAMMA3RhNTESMBAGCSqGSIb3DQEJARYDdGE1MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3qBM982Rgh9m90JJZdLncJ/hAFTma
+MFIPc11F2LmhmnJW4oUawBiMkFZEFOVQcGnlNlui+zy/+Xh3Jy3ePF48fdJAAou8
+BJuPZQt0OpgjTeENTcNCy2GoQr+yHIMYiU+0z880/fPHfhtUPu3pChOMwlb2JYdC
+QKPKq//MusbCDQIDAQABo1AwTjAdBgNVHQ4EFgQUKdqxRuNhUaw8PvZ4W5V7bbL5
+FyEwHwYDVR0jBBgwFoAUKdqxRuNhUaw8PvZ4W5V7bbL5FyEwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOBgQAhKGKss9o6Zu0TvHIVDUSHJcmODTfPuSs7ZDBv
+Z263am7HEvlonHjN3nL+BbtZWEeTw/dB/jBEU1eabD5spMlooVuAsTzn6cEREZmt
+YCQOyhdW0kjbxZo/8ZIBp1oq0G4ubCA9l7ousQChbxsUg90yPP0Yx7KFuKYDmPrr
+0UVO+Q==
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta6_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta6_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            93:ae:7e:2d:c9:61:8f:4b
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+        Serial Number: 14039479151502690113 (0xc2d63fe768d20741)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Validity
-            Not Before: Apr 11 22:37:52 2011 GMT
-            Not After : Jan  5 22:37:52 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta6, CN=localhost/emailAddress=ta6
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c5:41:a2:3d:00:af:e2:71:29:e6:18:c2:73:65:
-                    fc:4a:9d:e3:f7:1a:6e:7a:f5:09:81:87:cd:cf:a9:
-                    74:a9:e4:47:da:e2:fa:bd:0e:0a:ae:ba:06:e8:1b:
-                    66:e3:8a:5e:bb:87:90:5e:d1:38:7d:12:93:72:a0:
-                    4b:88:77:dd:ce:02:67:9f:c5:be:49:cb:b7:e8:0e:
-                    bd:f0:78:37:55:bb:c5:91:6e:c7:7b:9c:b3:94:a2:
-                    24:7d:09:25:74:52:22:6d:4a:34:f8:92:71:b1:e9:
-                    74:9b:8e:87:d4:2a:46:f8:fa:8f:86:5c:b5:6b:20:
-                    24:d1:37:ea:8a:87:07:e3:ad
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c5:43:65:b9:e0:b5:bf:68:f6:d0:67:91:49:1f:
+                    53:c8:eb:36:57:b9:76:c9:d7:2d:26:4c:f2:08:38:
+                    e6:5d:56:b6:20:af:72:ea:ac:98:de:14:cd:35:ed:
+                    f9:b3:fb:e3:c4:1f:06:db:04:77:2a:cd:3e:3e:98:
+                    9f:52:f1:9e:27:db:91:ec:f4:de:3e:53:d5:fc:ba:
+                    5c:37:98:8b:b7:45:4c:bb:a9:d0:cc:b5:f8:45:a4:
+                    0c:58:a0:92:60:05:26:01:96:08:c1:8d:5f:18:e8:
+                    84:f1:d0:a2:f1:e3:32:67:20:52:a6:6f:7a:47:39:
+                    f1:f0:c0:47:6f:3b:9e:7c:81
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                0C:08:1A:2C:FA:77:26:CE:37:0F:A5:85:98:85:0F:4D:48:BA:83:B3
+                75:D7:5E:D6:65:E8:AA:54:31:F5:3A:5C:DA:C8:EE:5C:02:46:28:26
             X509v3 Authority Key Identifier: 
-                keyid:0C:08:1A:2C:FA:77:26:CE:37:0F:A5:85:98:85:0F:4D:48:BA:83:B3
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta6/CN=localhost/emailAddress=ta6
-                serial:93:AE:7E:2D:C9:61:8F:4B
+                keyid:75:D7:5E:D6:65:E8:AA:54:31:F5:3A:5C:DA:C8:EE:5C:02:46:28:26
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        10:2c:ed:b9:a4:aa:bd:9e:4d:47:dd:02:64:52:a9:7a:73:a7:
-        f3:58:45:cf:da:5c:1e:80:30:d9:10:a7:e4:79:d2:eb:85:8b:
-        70:4c:39:df:b6:40:fb:7f:11:cd:a8:85:d6:5c:d1:2f:29:9f:
-        8d:fa:53:bc:20:f3:c8:97:9b:11:f4:7d:39:9a:2c:a6:6e:1e:
-        a4:0d:81:e0:65:59:89:f6:a9:66:65:38:05:44:e7:47:a2:9e:
-        a2:e3:82:07:2c:cb:8e:dc:47:a2:e9:cb:01:6a:54:c1:26:14:
-        03:e9:c3:ac:fe:98:0e:76:52:f3:5b:67:ea:26:0d:98:6d:e4:
-        23:ac
+         c0:55:58:54:3d:b7:dd:d8:c4:3f:35:a4:d9:25:b3:45:08:f3:
+         5b:98:16:46:40:36:01:c9:60:d4:a6:2b:9e:29:6d:89:26:d7:
+         4e:69:35:ba:15:b2:d1:1a:5e:97:ad:b3:16:33:c5:5b:4f:4f:
+         0e:8d:8e:b3:28:50:00:ad:88:2a:2c:60:d3:66:7c:66:95:f9:
+         83:0a:ae:14:8b:d8:42:35:8d:50:7f:b2:23:1f:9b:28:ca:de:
+         61:b8:6d:c5:38:4a:e1:60:da:75:42:f3:18:4c:14:ae:b0:5d:
+         a9:ab:ae:10:89:09:cc:61:1e:ce:28:95:f0:44:98:33:04:9c:
+         db:8f
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAJOufi3JYY9LMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTYxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE2MB4XDTExMDQxMTIyMzc1MloXDTE0MDEwNTIy
-Mzc1MlowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNjESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTYwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAMVBoj0Ar+JxKeYYwnNl/Eqd4/cabnr1CYGHzc+pdKnk
-R9ri+r0OCq66BugbZuOKXruHkF7ROH0Sk3KgS4h33c4CZ5/FvknLt+gOvfB4N1W7
-xZFux3ucs5SiJH0JJXRSIm1KNPiScbHpdJuOh9QqRvj6j4ZctWsgJNE36oqHB+Ot
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFAwIGiz6dybONw+lhZiFD01IuoOzMIGvBgNV
-HSMEgacwgaSAFAwIGiz6dybONw+lhZiFD01IuoOzoYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNjESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTaCCQCTrn4tyWGPSzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBABAs7bmkqr2eTUfdAmRSqXpzp/NYRc/aXB6AMNkQp+R50uuF
-i3BMOd+2QPt/Ec2ohdZc0S8pn436U7wg88iXmxH0fTmaLKZuHqQNgeBlWYn2qWZl
-OAVE50einqLjggcsy47cR6LpywFqVMEmFAPpw6z+mA52UvNbZ+omDZht5COs
+MIICyDCCAjGgAwIBAgIJAMLWP+do0gdBMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE2MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhNjAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE2MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhNjCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAxUNlueC1v2j20GeRSR9TyOs2V7l2ydctJkzyCDjm
+XVa2IK9y6qyY3hTNNe35s/vjxB8G2wR3Ks0+PpifUvGeJ9uR7PTePlPV/LpcN5iL
+t0VMu6nQzLX4RaQMWKCSYAUmAZYIwY1fGOiE8dCi8eMyZyBSpm96Rznx8MBHbzue
+fIECAwEAAaNQME4wHQYDVR0OBBYEFHXXXtZl6KpUMfU6XNrI7lwCRigmMB8GA1Ud
+IwQYMBaAFHXXXtZl6KpUMfU6XNrI7lwCRigmMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAwFVYVD233djEPzWk2SWzRQjzW5gWRkA2Aclg1KYrniltiSbX
+Tmk1uhWy0Rpel62zFjPFW09PDo2OsyhQAK2IKixg02Z8ZpX5gwquFIvYQjWNUH+y
+Ix+bKMreYbhtxThK4WDadULzGEwUrrBdqauuEIkJzGEeziiV8ESYMwSc248=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta7_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta7_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            e2:68:f4:95:eb:49:89:87
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
+        Serial Number: 17133169234141367739 (0xedc53ea49da5cdbb)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta7, CN=localhost/emailAddress=ta7
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:c8:de:52:36:7b:6e:4b:6d:7a:83:73:ad:41:cd:
-                    af:36:02:62:36:3e:f7:55:07:11:24:43:c2:eb:43:
-                    e4:6f:1d:3c:ec:73:4b:81:58:a2:2a:7e:e0:c4:f0:
-                    9a:ae:04:d8:2a:49:39:bf:9e:e8:ad:f0:96:52:5e:
-                    3c:67:71:7f:3d:40:d7:36:e3:1c:25:da:0b:29:e9:
-                    8b:81:66:19:bc:34:38:1a:4e:cb:63:f5:30:cf:82:
-                    6c:f5:14:cc:df:bb:cc:ed:70:86:e4:ba:6e:db:85:
-                    ce:60:d1:69:37:48:e8:0c:c0:76:82:0f:5f:65:09:
-                    62:0d:72:c9:5a:b3:49:2c:fd
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:f9:53:0d:ea:ab:4d:2f:d9:fa:75:3c:f6:57:80:
+                    d1:92:29:44:be:db:7d:6d:5e:f7:4e:a1:76:83:b3:
+                    31:a5:40:3e:44:d0:8e:2e:37:f9:6c:3e:28:4f:1e:
+                    52:66:eb:e9:4c:52:e9:7f:94:e3:9f:2c:e4:65:c3:
+                    fc:27:9b:2e:42:81:3e:0d:13:bb:58:52:f6:50:b6:
+                    f5:ef:2e:ac:94:52:4e:4a:a9:1a:e7:19:0e:2b:4a:
+                    46:59:57:de:a4:65:55:43:70:57:52:55:95:e4:17:
+                    5d:cf:0d:e4:3b:f7:42:4b:ce:25:9d:21:3e:41:29:
+                    30:c1:22:b2:77:85:7a:83:fd
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                78:FA:1D:E8:35:33:AD:40:EB:A9:B4:3E:87:7A:B0:65:17:CF:36:35
+                45:9D:B1:D7:6F:E2:FD:4F:9C:E9:10:78:EE:E7:33:1A:14:E1:AF:9D
             X509v3 Authority Key Identifier: 
-                keyid:78:FA:1D:E8:35:33:AD:40:EB:A9:B4:3E:87:7A:B0:65:17:CF:36:35
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta7/CN=localhost/emailAddress=ta7
-                serial:E2:68:F4:95:EB:49:89:87
+                keyid:45:9D:B1:D7:6F:E2:FD:4F:9C:E9:10:78:EE:E7:33:1A:14:E1:AF:9D
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        07:20:33:b6:af:9e:b1:49:90:57:19:86:e9:8b:18:8a:e9:7b:
-        b1:b4:ff:29:5e:de:df:c9:f9:c8:7d:de:61:0d:36:fc:55:dc:
-        e7:51:ff:89:b5:69:07:72:60:b6:19:4e:c4:90:e6:e7:c1:0e:
-        56:ba:d6:1c:c7:34:10:38:2d:c5:71:79:8a:de:a6:b2:d6:cf:
-        98:dc:9a:3e:df:d3:57:67:bd:15:83:95:00:1c:2d:45:9c:73:
-        6d:82:57:9d:ac:57:f1:d8:39:ae:92:3b:ff:36:a1:0e:08:46:
-        e6:00:a9:d6:3e:5b:fa:65:7f:8c:c6:ee:4e:84:e0:a8:81:b7:
-        3c:a5
+         b3:53:c9:a1:7f:13:e8:4b:ff:f0:81:84:9a:8c:1d:44:ef:3c:
+         fb:a8:e6:0d:62:9b:0f:f9:a9:c9:ca:4b:26:2e:51:6d:f3:ac:
+         b9:9e:2c:10:96:1c:f7:80:ff:5e:30:4f:a0:67:9b:84:3e:bc:
+         b5:6f:78:42:02:12:d9:e6:4f:a3:a0:82:eb:bf:00:44:b3:6f:
+         2f:56:c3:36:03:d1:b9:b9:e5:3c:53:3a:17:69:af:42:91:fa:
+         b5:91:b2:06:7f:07:88:e7:ac:7a:2b:b7:c3:41:e8:7d:9b:96:
+         c9:3d:38:4a:4c:39:45:35:c1:43:05:b2:32:00:99:22:72:2a:
+         7c:00
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAOJo9JXrSYmHMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTcxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE3MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNzESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTcwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAMjeUjZ7bktteoNzrUHNrzYCYjY+91UHESRDwutD5G8d
-POxzS4FYoip+4MTwmq4E2CpJOb+e6K3wllJePGdxfz1A1zbjHCXaCynpi4FmGbw0
-OBpOy2P1MM+CbPUUzN+7zO1whuS6btuFzmDRaTdI6AzAdoIPX2UJYg1yyVqzSSz9
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFHj6Heg1M61A66m0Pod6sGUXzzY1MIGvBgNV
-HSMEgacwgaSAFHj6Heg1M61A66m0Pod6sGUXzzY1oYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhNzESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTeCCQDiaPSV60mJhzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAAcgM7avnrFJkFcZhumLGIrpe7G0/yle3t/J+ch93mENNvxV
-3OdR/4m1aQdyYLYZTsSQ5ufBDla61hzHNBA4LcVxeYreprLWz5jcmj7f01dnvRWD
-lQAcLUWcc22CV52sV/HYOa6SO/82oQ4IRuYAqdY+W/plf4zG7k6E4KiBtzyl
+MIICyDCCAjGgAwIBAgIJAO3FPqSdpc27MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE3MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhNzAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE3MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhNzCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEA+VMN6qtNL9n6dTz2V4DRkilEvtt9bV73TqF2g7Mx
+pUA+RNCOLjf5bD4oTx5SZuvpTFLpf5TjnyzkZcP8J5suQoE+DRO7WFL2ULb17y6s
+lFJOSqka5xkOK0pGWVfepGVVQ3BXUlWV5Bddzw3kO/dCS84lnSE+QSkwwSKyd4V6
+g/0CAwEAAaNQME4wHQYDVR0OBBYEFEWdsddv4v1PnOkQeO7nMxoU4a+dMB8GA1Ud
+IwQYMBaAFEWdsddv4v1PnOkQeO7nMxoU4a+dMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAs1PJoX8T6Ev/8IGEmowdRO88+6jmDWKbD/mpycpLJi5RbfOs
+uZ4sEJYc94D/XjBPoGebhD68tW94QgIS2eZPo6CC678ARLNvL1bDNgPRubnlPFM6
+F2mvQpH6tZGyBn8HiOeseiu3w0HofZuWyT04Skw5RTXBQwWyMgCZInIqfAA=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta8_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta8_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            b8:9a:b1:4d:fa:a9:68:23
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+        Serial Number: 16709229305513134148 (0xe7e31b8629a84844)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta8, CN=localhost/emailAddress=ta8
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:da:5e:85:e0:17:14:35:c1:e8:f4:b6:97:15:d1:
-                    f5:c3:36:26:57:85:5c:0c:e8:8e:d7:2b:10:66:b2:
-                    61:92:a3:df:a4:4f:61:52:41:9c:3b:2f:0e:bc:bd:
-                    92:9b:e2:4c:ec:68:34:76:2c:86:54:e5:8b:9e:ac:
-                    2f:7e:4f:07:52:ec:7f:51:31:ed:9e:94:ed:7e:15:
-                    da:4f:fb:65:d0:07:85:c2:60:69:ce:ac:74:72:8a:
-                    45:31:e4:6c:3e:5e:05:bc:d3:2f:37:56:14:c2:2e:
-                    78:78:6b:93:14:e5:61:08:22:ef:4d:f9:bb:1b:1f:
-                    31:09:12:7a:ad:e5:cf:18:5b
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c6:4d:f7:24:79:d7:8f:a0:93:61:37:d0:a4:5c:
+                    61:81:e2:1a:1c:0a:ff:ce:8b:3d:49:15:12:1c:1b:
+                    b7:9c:dd:28:f6:c5:5d:2e:63:f7:67:4b:c9:8c:95:
+                    5a:1c:e8:97:89:16:83:81:ff:bc:10:26:51:7c:f9:
+                    f1:03:f5:51:f4:01:45:da:d4:2f:cf:d9:35:68:0c:
+                    ae:11:2d:31:37:5a:73:73:c0:60:13:c8:10:73:3a:
+                    7d:c9:96:8c:07:00:b1:41:52:d2:b0:5f:cd:01:06:
+                    b8:d7:3f:d8:0f:17:f9:38:39:5d:2d:09:14:99:05:
+                    7c:1f:1f:6f:c9:2d:7d:6e:61
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                BB:CA:54:46:B9:0F:22:DB:69:82:15:BB:66:36:9D:50:1D:0B:1B:F5
+                9E:DE:D5:93:0F:57:31:37:6C:9A:F7:DA:A2:A0:D2:CE:F4:65:EC:86
             X509v3 Authority Key Identifier: 
-                keyid:BB:CA:54:46:B9:0F:22:DB:69:82:15:BB:66:36:9D:50:1D:0B:1B:F5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta8/CN=localhost/emailAddress=ta8
-                serial:B8:9A:B1:4D:FA:A9:68:23
+                keyid:9E:DE:D5:93:0F:57:31:37:6C:9A:F7:DA:A2:A0:D2:CE:F4:65:EC:86
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        7a:13:83:75:43:35:e1:4d:07:93:8d:1c:fd:4d:8f:5c:24:78:
-        f5:01:35:4c:a5:ad:5f:92:f3:23:21:0c:2d:dc:64:a5:7f:c2:
-        3c:c9:e3:b0:4e:d8:17:4e:76:4c:4d:71:fb:b9:3d:d9:51:b8:
-        fc:e0:91:a6:5c:18:c8:06:55:cc:a9:ba:9e:59:92:c4:5c:04:
-        11:e2:d9:99:1d:cb:bd:9d:6c:c2:0e:9e:f0:4c:20:69:6b:b1:
-        76:b6:d4:c0:e6:6c:4b:1e:18:cb:71:4a:9b:13:ca:db:c8:a4:
-        0e:35:c0:91:70:04:9c:32:bd:15:a2:36:72:97:d0:7b:d0:6c:
-        dc:03
+         81:1f:1d:b5:60:85:60:4f:9f:cc:9a:12:99:4a:dc:fb:49:2b:
+         70:9d:21:1e:d7:be:fe:a8:b8:eb:fd:49:e2:99:72:ae:0e:be:
+         cf:bc:c4:88:11:8e:5b:6c:d5:68:d0:cb:52:1a:7c:65:a2:c1:
+         1f:08:7e:31:6e:28:18:fa:04:90:70:d5:96:aa:89:97:9d:61:
+         08:47:f5:75:4c:9d:96:c7:37:8f:3e:f2:04:bc:48:a6:89:65:
+         25:27:13:70:5a:f7:97:ba:42:61:a5:d9:69:44:08:34:19:4d:
+         6e:1c:e7:23:25:1f:c0:f3:ad:fa:56:c2:02:75:ed:c2:51:ca:
+         cf:96
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJALiasU36qWgjMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTgxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE4MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhODESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTgwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBANpeheAXFDXB6PS2lxXR9cM2JleFXAzojtcrEGayYZKj
-36RPYVJBnDsvDry9kpviTOxoNHYshlTli56sL35PB1Lsf1Ex7Z6U7X4V2k/7ZdAH
-hcJgac6sdHKKRTHkbD5eBbzTLzdWFMIueHhrkxTlYQgi7035uxsfMQkSeq3lzxhb
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFLvKVEa5DyLbaYIVu2Y2nVAdCxv1MIGvBgNV
-HSMEgacwgaSAFLvKVEa5DyLbaYIVu2Y2nVAdCxv1oYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhODESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTiCCQC4mrFN+qloIzAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAHoTg3VDNeFNB5ONHP1Nj1wkePUBNUylrV+S8yMhDC3cZKV/
-wjzJ47BO2BdOdkxNcfu5PdlRuPzgkaZcGMgGVcypup5ZksRcBBHi2Zkdy72dbMIO
-nvBMIGlrsXa21MDmbEseGMtxSpsTytvIpA41wJFwBJwyvRWiNnKX0HvQbNwD
+MIICyDCCAjGgAwIBAgIJAOfjG4YpqEhEMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE4MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhODAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE4MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhODCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAxk33JHnXj6CTYTfQpFxhgeIaHAr/zos9SRUSHBu3
+nN0o9sVdLmP3Z0vJjJVaHOiXiRaDgf+8ECZRfPnxA/VR9AFF2tQvz9k1aAyuES0x
+N1pzc8BgE8gQczp9yZaMBwCxQVLSsF/NAQa41z/YDxf5ODldLQkUmQV8Hx9vyS19
+bmECAwEAAaNQME4wHQYDVR0OBBYEFJ7e1ZMPVzE3bJr32qKg0s70ZeyGMB8GA1Ud
+IwQYMBaAFJ7e1ZMPVzE3bJr32qKg0s70ZeyGMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAgR8dtWCFYE+fzJoSmUrc+0krcJ0hHte+/qi46/1J4plyrg6+
+z7zEiBGOW2zVaNDLUhp8ZaLBHwh+MW4oGPoEkHDVlqqJl51hCEf1dUydlsc3jz7y
+BLxIpollJScTcFr3l7pCYaXZaUQINBlNbhznIyUfwPOt+lbCAnXtwlHKz5Y=
 -----END CERTIFICATE-----
--- a/src/tests/ro_data/signing_certs/produced/trust_anchors/ta9_cert.pem	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/tests/ro_data/signing_certs/produced/trust_anchors/ta9_cert.pem	Thu Mar 27 22:03:22 2014 +0530
@@ -1,64 +1,58 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            a1:62:e1:e5:c0:a2:38:0d
-        Signature Algorithm: sha256WithRSAEncryption
-        Issuer: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+        Serial Number: 16519569919148996401 (0xe5414d51291ab731)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Validity
-            Not Before: Apr 11 22:37:54 2011 GMT
-            Not After : Jan  5 22:37:54 2014 GMT
-        Subject: C=US, ST=California, L=Menlo Park, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
+            Not Before: Dec 13 00:13:38 2013 GMT
+            Not After : Sep  8 00:13:38 2016 GMT
+        Subject: C=US, ST=California, L=Santa Clara, O=pkg5, OU=ta9, CN=localhost/emailAddress=ta9
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:e8:ab:ef:91:ca:05:4a:18:a2:98:c4:d8:93:d0:
-                    ce:99:a9:5e:02:8d:5d:5c:e3:f3:84:49:6b:a7:6d:
-                    ef:38:77:2e:32:c2:9c:09:1d:f6:be:6c:c6:c4:b1:
-                    c8:c3:32:72:2b:84:87:f6:ba:bf:fc:cf:5c:05:c2:
-                    4f:62:23:7e:02:3f:ce:6c:c6:b6:95:86:84:d7:97:
-                    9f:1c:87:70:29:62:6a:29:7c:06:a3:b7:18:12:67:
-                    07:3a:89:aa:f0:99:fe:df:46:00:b1:2f:aa:30:1e:
-                    a2:1e:f8:2b:37:99:21:b8:85:53:42:98:4a:bd:c5:
-                    f9:b4:61:60:0a:73:bc:0e:d1
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:c9:8a:2d:0d:53:04:e8:02:bb:bc:27:df:0e:b8:
+                    33:25:07:54:61:d0:d9:b6:08:33:5b:c3:eb:4c:a1:
+                    1f:9f:51:cc:a9:83:07:16:15:9c:69:0b:48:74:62:
+                    35:5f:a3:94:38:37:0f:3f:5f:58:26:9a:36:0b:a2:
+                    0f:bb:9b:57:ff:fd:70:01:d6:28:a2:b6:67:ed:a9:
+                    c8:90:15:b5:7f:91:60:32:ff:96:13:a4:3f:09:23:
+                    70:2f:38:6f:24:54:41:95:2f:91:5a:6e:a5:aa:77:
+                    da:6c:50:ee:62:e5:85:8a:67:63:7d:fc:07:30:ba:
+                    f3:96:93:6c:5d:5f:9e:2e:07
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Key Identifier: 
-                A6:CF:35:00:96:15:AD:B4:24:DE:1D:5A:B9:56:A2:6E:B4:2D:46:C5
+                E8:5E:8E:77:D1:61:64:BB:48:AF:38:95:0C:57:16:4E:E3:77:3D:35
             X509v3 Authority Key Identifier: 
-                keyid:A6:CF:35:00:96:15:AD:B4:24:DE:1D:5A:B9:56:A2:6E:B4:2D:46:C5
-                DirName:/C=US/ST=California/L=Menlo Park/O=pkg5/OU=ta9/CN=localhost/emailAddress=ta9
-                serial:A1:62:E1:E5:C0:A2:38:0D
+                keyid:E8:5E:8E:77:D1:61:64:BB:48:AF:38:95:0C:57:16:4E:E3:77:3D:35
 
             X509v3 Basic Constraints: 
                 CA:TRUE
     Signature Algorithm: sha256WithRSAEncryption
-        44:02:da:cf:c3:07:27:84:e4:06:22:ff:fc:7e:c9:47:7a:79:
-        e1:9f:6a:84:68:a8:fb:48:18:80:58:0f:b0:5e:ef:43:bf:3a:
-        69:23:b2:18:3e:78:3a:8e:ff:c5:d8:76:4c:99:d5:9f:be:8a:
-        fd:0e:79:b9:7e:62:c4:c2:4b:6f:78:01:e7:52:19:ff:08:86:
-        a7:b2:17:0c:11:03:ef:42:1f:b5:5b:40:0a:3a:9f:2a:4f:57:
-        31:3d:b1:dd:a8:51:e1:2f:b2:e4:5b:2e:1b:9f:a7:d6:b7:6b:
-        76:68:f9:2e:b1:38:6f:11:21:0e:81:a2:32:01:7b:bc:c3:1f:
-        82:4e
+         3e:20:dc:10:1b:b4:83:9a:0a:9a:41:d3:6f:ec:ef:5b:51:0f:
+         a7:4a:49:0e:b3:86:f6:0f:c2:84:ea:0f:b2:08:6d:a2:7c:e4:
+         24:10:ba:45:c2:c3:9e:07:b9:c3:74:10:f2:74:7f:c7:61:2e:
+         0e:45:33:00:c4:19:32:61:2b:58:0a:f4:51:7a:03:66:68:32:
+         27:c3:20:27:af:c4:93:64:45:0d:16:0e:ca:2b:86:f6:1c:22:
+         13:74:5a:d2:68:fc:45:11:b8:f1:13:26:e1:e4:c2:b7:b5:b8:
+         f8:fc:cc:6d:fb:87:3e:5d:53:31:ba:99:16:65:7b:b1:6c:e9:
+         78:8a
 -----BEGIN CERTIFICATE-----
-MIIDWTCCAsKgAwIBAgIJAKFi4eXAojgNMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpNZW5sbyBQYXJr
-MQ0wCwYDVQQKEwRwa2c1MQwwCgYDVQQLEwN0YTkxEjAQBgNVBAMTCWxvY2FsaG9z
-dDESMBAGCSqGSIb3DQEJARYDdGE5MB4XDTExMDQxMTIyMzc1NFoXDTE0MDEwNTIy
-Mzc1NFowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNV
-BAcTCk1lbmxvIFBhcmsxDTALBgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhOTESMBAG
-A1UEAxMJbG9jYWxob3N0MRIwEAYJKoZIhvcNAQkBFgN0YTkwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAOir75HKBUoYopjE2JPQzpmpXgKNXVzj84RJa6dt7zh3
-LjLCnAkd9r5sxsSxyMMyciuEh/a6v/zPXAXCT2IjfgI/zmzGtpWGhNeXnxyHcCli
-ail8BqO3GBJnBzqJqvCZ/t9GALEvqjAeoh74KzeZIbiFU0KYSr3F+bRhYApzvA7R
-AgMBAAGjgeIwgd8wHQYDVR0OBBYEFKbPNQCWFa20JN4dWrlWom60LUbFMIGvBgNV
-HSMEgacwgaSAFKbPNQCWFa20JN4dWrlWom60LUbFoYGApH4wfDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzARBgNVBAcTCk1lbmxvIFBhcmsxDTAL
-BgNVBAoTBHBrZzUxDDAKBgNVBAsTA3RhOTESMBAGA1UEAxMJbG9jYWxob3N0MRIw
-EAYJKoZIhvcNAQkBFgN0YTmCCQChYuHlwKI4DTAMBgNVHRMEBTADAQH/MA0GCSqG
-SIb3DQEBCwUAA4GBAEQC2s/DByeE5AYi//x+yUd6eeGfaoRoqPtIGIBYD7Be70O/
-Omkjshg+eDqO/8XYdkyZ1Z++iv0Oebl+YsTCS294AedSGf8IhqeyFwwRA+9CH7Vb
-QAo6nypPVzE9sd2oUeEvsuRbLhufp9a3a3Zo+S6xOG8RIQ6BojIBe7zDH4JO
+MIICyDCCAjGgAwIBAgIJAOVBTVEpGrcxMA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtTYW50YSBDbGFy
+YTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE5MRIwEAYDVQQDDAlsb2NhbGhv
+c3QxEjAQBgkqhkiG9w0BCQEWA3RhOTAeFw0xMzEyMTMwMDEzMzhaFw0xNjA5MDgw
+MDEzMzhaMH0xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYD
+VQQHDAtTYW50YSBDbGFyYTENMAsGA1UECgwEcGtnNTEMMAoGA1UECwwDdGE5MRIw
+EAYDVQQDDAlsb2NhbGhvc3QxEjAQBgkqhkiG9w0BCQEWA3RhOTCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAyYotDVME6AK7vCffDrgzJQdUYdDZtggzW8PrTKEf
+n1HMqYMHFhWcaQtIdGI1X6OUODcPP19YJpo2C6IPu5tX//1wAdYoorZn7anIkBW1
+f5FgMv+WE6Q/CSNwLzhvJFRBlS+RWm6lqnfabFDuYuWFimdjffwHMLrzlpNsXV+e
+LgcCAwEAAaNQME4wHQYDVR0OBBYEFOhejnfRYWS7SK84lQxXFk7jdz01MB8GA1Ud
+IwQYMBaAFOhejnfRYWS7SK84lQxXFk7jdz01MAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADgYEAPiDcEBu0g5oKmkHTb+zvW1EPp0pJDrOG9g/ChOoPsghtonzk
+JBC6RcLDnge5w3QQ8nR/x2EuDkUzAMQZMmErWAr0UXoDZmgyJ8MgJ6/Ek2RFDRYO
+yiuG9hwiE3Ra0mj8RRG48RMm4eTCt7W4+PzMbfuHPl1TMbqZFmV7sWzpeIo=
 -----END CERTIFICATE-----
--- a/src/util/apache2/depot/depot.conf.mako	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/util/apache2/depot/depot.conf.mako	Thu Mar 27 22:03:22 2014 +0530
@@ -56,9 +56,9 @@
 root = context.get("sroot")
 runtime_dir = context.get("runtime_dir")
 
-for pub, repo_path, repo_prefix in pubs:
+for pub, repo_path, repo_prefix, writable_root in pubs:
         repo_prefixes.add(repo_prefix)
-context.write("# per-repository versions and publishers responses\n")
+context.write("# per-repository versions, publishers and status responses\n")
 
 for repo_prefix in repo_prefixes:
         context.write(
@@ -67,6 +67,9 @@
         context.write("RewriteRule ^/%(root)s%(repo_prefix)spublisher/0 "
             "/%(root)s%(repo_prefix)spublisher/1/index.html [PT,NE]\n" %
             locals())
+        context.write(
+            "RewriteRule ^/%(root)s%(repo_prefix)sstatus/0 "
+            "/%(root)s%(repo_prefix)sstatus/0/index.html [PT,NE]\n" % locals())
 %>
 
 <%doc>
@@ -116,7 +119,7 @@
 %>
 
 # Write per-publisher rules for publisher, version, file and manifest responses
-% for pub, repo_path, repo_prefix in pubs:
+% for pub, repo_path, repo_prefix, writable_root in pubs:
         <%doc>
         # Point to our local versions/0 response or
         # publisher-specific publisher/1, response, then stop.
@@ -196,7 +199,7 @@
 <%
 paths = set()
 root = context.get("sroot")
-for pub, repo_path, repo_prefix in pubs:
+for pub, repo_path, repo_prefix, writable_root in pubs:
         paths.add((repo_path, repo_prefix))
         context.write(
             "Alias /%(root)s%(repo_prefix)s%(pub)s %(repo_path)s\n" %
--- a/src/util/apache2/depot/depot_httpd.conf.mako	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/util/apache2/depot/depot_httpd.conf.mako	Thu Mar 27 22:03:22 2014 +0530
@@ -115,7 +115,6 @@
 LimitRequestBody 102400
 # Set environment variables used by our wsgi application
 SetEnv PKG5_RUNTIME_DIR ${runtime_dir}
-SetEnv PKG5_CACHE_DIR ${cache_dir}
 
 #
 # If you wish httpd to run as a different user or group, you must run
@@ -345,12 +344,17 @@
         path_info = set()
         root = context.get("sroot")
         context.write("# the repositories our search app should index.\n")
-        for pub, repo_path, repo_prefix in pubs:
-                path_info.add((repo_path, repo_prefix.rstrip("/")))
-        for repo_path, repo_prefix in path_info:
+        for pub, repo_path, repo_prefix, writable_root in pubs:
+                path_info.add(
+                    (repo_path, repo_prefix.rstrip("/"), writable_root))
+        for repo_path, repo_prefix, writable_root in path_info:
                 context.write(
                     "SetEnv PKG5_REPOSITORY_%(repo_prefix)s %(repo_path)s\n" %
                     locals())
+                if writable_root:
+                        context.write(
+                            "SetEnv PKG5_WRITABLE_ROOT_%(repo_prefix)s "
+                            "%(writable_root)s\n" % locals())
                 context.write("RewriteRule ^/%(root)s%(repo_prefix)s/[/]?$ "
                     "%(root)s/depot/%(repo_prefix)s/ [NE,PT]\n" %
                     locals())
@@ -358,7 +362,7 @@
                     "%(root)s/depot/%(repo_prefix)s/$1 [NE,PT]\n" %
                     locals())
 %>
-% for pub, repo_path, repo_prefix in pubs:
+% for pub, repo_path, repo_prefix, writable_root in pubs:
 % if int(cache_size) > 0:
 CacheEnable disk /${root}${repo_prefix}${pub}/file
 CacheEnable disk /${root}${repo_prefix}${pub}/manifest
--- a/src/util/apache2/depot/depot_index.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/util/apache2/depot/depot_index.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,20 +21,22 @@
 #
 # Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
 
+import atexit
 import cherrypy
 import httplib
 import logging
 import mako
 import os
 import re
+import shutil
 import sys
+import tempfile
 import threading
 import time
 import traceback
 import urllib
 import Queue
 
-import pkg.digest as digest
 import pkg.p5i
 import pkg.server.api
 import pkg.server.repository as sr
@@ -44,14 +46,18 @@
 # redirecting stdout for proper WSGI portability
 sys.stdout = sys.stderr
 
-# a global dictionary containing lists of sr.Repository objects, keyed by
+# a global dictionary containing sr.Repository objects, keyed by
 # repository prefix (not publisher prefix).
 repositories = {}
 
-# a global dictionary containing lists of DepotBUI objects, keyed by repository
+# a global dictionary containing DepotBUI objects, keyed by repository
 # prefix.
 depot_buis = {}
 
+# a global dictionary containing sd.DepotHTTP objects, keyed by repository
+# prefix
+depot_https = {}
+
 # a lock used during server startup to ensure we don't try to index the same
 # repository at once.
 repository_lock = threading.Lock()
@@ -59,10 +65,10 @@
 import gettext
 gettext.install("/")
 
-# How often we ping the depot while long-running background tasks are running
-# this should be set to less than the mod_wsgi inactivity-timeout (since
+# How often we ping the depot while long-running background tasks are running.
+# This should be set to less than the mod_wsgi inactivity-timeout (since
 # pinging the depot causes activity, preventing mod_wsgi from shutting down the
-# Python interpreter.
+# Python interpreter.)
 KEEP_BUSY_INTERVAL = 120
 
 class DepotException(Exception):
@@ -75,6 +81,7 @@
         def __str__(self):
                 return "%s: %s" % (self.message, self.request)
 
+
 class AdminOpsDisabledException(DepotException):
         """An exception thrown when this wsgi application hasn't been configured
         to allow admin/0 pkg(5) depot responses."""
@@ -105,6 +112,22 @@
                     "type": self.cmd}
 
 
+class IndexOpDisabledException(DepotException):
+        """An exception thrown when we've been asked to refresh an index for
+        a repository that doesn't have a writable_root property set."""
+
+        def __init__(self, request):
+                self.request = request
+                self.http_status = httplib.FORBIDDEN
+
+        def __str__(self):
+                return "admin/0 operations to refresh indexes are not " \
+                    "allowed on this repository because it is read-only and " \
+                    "the svc:/application/pkg/server instance does not have " \
+                    "a config/writable_root SMF property set. " \
+                    "Request was: %s" % self.request
+
+
 class BackgroundTask(object):
         """Allow us to process a limited set of threads in the background."""
 
@@ -199,10 +222,17 @@
         web resources (css, html, etc)
         """
 
-        def __init__(self, repo, dconf, tmp_root, pkg5_test_proto=""):
+        def __init__(self, repo, dconf, writable_root, pkg5_test_proto=""):
                 self.repo = repo
                 self.cfg = dconf
-                self.tmp_root = tmp_root
+                if writable_root:
+                        self.tmp_root = writable_root
+                else:
+                        self.tmp_root = tempfile.mkdtemp(prefix="pkg-depot.")
+                        # try to clean up the temporary area on exit
+                        atexit.register(shutil.rmtree, self.tmp_root,
+                            ignore_errors=True)
+
                 # we hardcode these for the depot.
                 self.content_root = "%s/usr/share/lib/pkg" % pkg5_test_proto
                 self.web_root = "%s/usr/share/lib/pkg/web/" % pkg5_test_proto
@@ -211,6 +241,7 @@
                 # creating DepotHTTP objects.
                 self.cfg.set_property("pkg", "content_root", self.content_root)
                 self.cfg.set_property("pkg", "pkg_root", self.repo.root)
+                self.cfg.set_property("pkg", "writable_root", self.tmp_root)
                 face.init(self)
 
 
@@ -226,15 +257,18 @@
         PKG5_RUNTIME_DIR  A directory that contains runtime state, notably
                           a htdocs/ directory.
 
-        PKG5_CACHE_DIR    Where we can store search indices for the repositories
-                          we're managing.
+        PKG5_REPOSITORY_<repo_prefix> A path to the repository root for the
+                          given <repo_prefix>.  <repo_prefix> is a unique
+                          alphanumeric prefix for the depot, each corresponding
+                          to a given <repo_root>.  Many PKG5_REPOSITORY_*
+                          variables can be configured, possibly containing
+                          pkg5 publishers of the same name.
 
-        PKG5_REPOSITORY_* A colon-separated pair of values, in the form
-                          <repo_prefix>:<repo_root>.  <repo_prefix> is a unique
-                          alphanumeric prefix that maps to the given
-                          <repo_root>.  Many PKG5_REPOSITORY_* variables can be
-                          configured, possibly containing identical pkg5
-                          publishers.
+        PKG5_WRITABLE_ROOT_<repo_prefix> A path to the writable root for the
+                          given <repo_prefix>. If a writable root is not set,
+                          and a search index does not already exist in the
+                          repository root, search functionality is not
+                          available.
 
         PKG5_ALLOW_REFRESH Set to 'true', this determines whether we process
                           admin/0 requests that have the query 'cmd=refresh' or
@@ -254,7 +288,6 @@
         """
 
         def __init__(self):
-                self.cache_dir = None
                 self.bgtask = None
 
         def setup(self, request):
@@ -262,6 +295,9 @@
                 repository prefix, and ensures our search indexes exist."""
 
                 def get_repo_paths():
+                        """Return a dictionary of repository paths, and writable
+                        root directories for the repositories we're serving."""
+
                         repo_paths = {}
                         for key in request.wsgi_environ:
                                 if key.startswith("PKG5_REPOSITORY"):
@@ -269,6 +305,12 @@
                                             "")
                                         repo_paths[prefix] = \
                                             request.wsgi_environ[key]
+                                        writable_root = \
+                                            request.wsgi_environ.get(
+                                            "PKG5_WRITABLE_ROOT_%s" % prefix)
+                                        repo_paths[prefix] = \
+                                            (request.wsgi_environ[key],
+                                            writable_root)
                         return repo_paths
 
                 if repositories:
@@ -280,8 +322,6 @@
 
                 repository_lock.acquire()
                 repo_paths = get_repo_paths()
-                self.cache_dir = request.wsgi_environ.get("PKG5_CACHE_DIR",
-                    "/var/cache/pkg/depot")
 
                 # We must ensure our BackgroundTask object has at least as many
                 # slots available as we have repositories, to allow the indexes
@@ -294,28 +334,20 @@
                 self.bgtask.start()
 
                 for prefix in repo_paths:
-                        path = repo_paths[prefix]
-                        repo_hash = digest.DEFAULT_HASH_FUNC(path).hexdigest()
-                        index_dir = os.path.sep.join(
-                            [self.cache_dir, "indexes", repo_hash])
-
-                        # if the index dir exists for this repository, we do not
-                        # automatically attempt a refresh.
-                        refresh_index = not os.path.exists(index_dir)
+                        path, writable_root = repo_paths[prefix]
                         try:
-                                repo = sr.Repository(root=path,
-                                    read_only=True, writable_root=index_dir)
+                                repo = sr.Repository(root=path, read_only=True,
+                                    writable_root=writable_root)
                         except sr.RepositoryError, e:
-                                print("Error initializing repository at %s: "
-                                    "%s" % (path, e))
+                                print "Unable to load repository: %s" % e
                                 continue
 
                         repositories[prefix] = repo
                         dconf = sd.DepotConfig()
-                        if refresh_index:
+                        if writable_root is not None:
                                 self.bgtask.put(repo.refresh_index)
 
-                        depot = DepotBUI(repo, dconf, index_dir,
+                        depot = DepotBUI(repo, dconf, writable_root,
                             pkg5_test_proto=pkg5_test_proto)
                         depot_buis[prefix] = depot
 
@@ -493,6 +525,9 @@
 
                 repo = repositories[repo_prefix]
                 depot_bui = depot_buis[repo_prefix]
+                if repo_prefix in depot_https:
+                        return depot_https[repo_prefix]
+
                 def request_pub_func(path_info):
                         """A function that can be called to determine the
                         publisher for a given request. We always want None
@@ -502,8 +537,9 @@
                         """
                         return None
 
-                return sd.DepotHTTP(repo, depot_bui.cfg,
+                depot_https[repo_prefix] = sd.DepotHTTP(repo, depot_bui.cfg,
                     request_pub_func=request_pub_func)
+                return depot_https[repo_prefix]
 
         def __strip_pub(self, tokens, repo):
                 """Attempt to strip at most one publisher from the path
@@ -532,7 +568,7 @@
                 return dh.info_0(*tokens[3:])
 
         def p5i(self, *tokens):
-                """Use a into DepotHTTP to return a p5i response."""
+                """Use a DepotHTTP to return a p5i response."""
 
                 dh = self.__build_depot_http()
                 tokens = self.__strip_pub(tokens, dh.repo)
@@ -597,6 +633,12 @@
                         if pub_prefix not in repo.publishers:
                                 raise cherrypy.NotFound()
 
+                        # Since the repository is read-only, we only honour
+                        # index refresh requests if we have a writable root.
+                        if not repo.writable_root:
+                                raise IndexOpDisabledException(
+                                    request.wsgi_environ["REQUEST_URI"])
+
                         # we need to reload the repository in order to get
                         # any new catalog contents before refreshing the
                         # index.
@@ -746,6 +788,10 @@
                         elif isinstance(e, AdminOpNotSupportedException):
                                 raise cherrypy.HTTPError(e.http_status,
                                     "This operation is not supported.")
+                        elif isinstance(e, IndexOpDisabledException):
+                                raise cherrypy.HTTPError(e.http_status,
+                                    "This operation has been disabled by the "
+                                    "server administrator.")
                         else:
                                 # we leave this as a 500 for now. It will be
                                 # converted and logged by our error handler
--- a/src/util/publish/pkglint.py	Thu Feb 06 12:42:30 2014 +0900
+++ b/src/util/publish/pkglint.py	Thu Mar 27 22:03:22 2014 +0530
@@ -21,7 +21,7 @@
 #
     
 #
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
 #
 
 import codecs
@@ -41,6 +41,8 @@
 import pkg.fmri as fmri
 import pkg.manifest
 import pkg.misc as misc
+import pkg.client.api_errors as apx
+import pkg.client.transport.exception as tx
 
 logger = None
 
@@ -321,15 +323,19 @@
 
 if __name__ == "__main__":
         try:
-                value = main_func()
-                sys.exit(value)
+                __ret = main_func()
         except (PipeError, KeyboardInterrupt):
                 # We don't want to display any messages here to prevent
                 # possible further broken pipe (EPIPE) errors.
-                __ret = 1
-        except SystemExit, _e:
-                raise _e
+                __ret = 2
+        except SystemExit, __e:
+                __ret = __e.code
+        except (apx.InvalidDepotResponseException, tx.TransportFailures), __e:
+                error(__e)
+                __ret = 2
         except:
                 traceback.print_exc()
                 error(misc.get_traceback_message())
-                sys.exit(99)
+                __ret = 99
+
+        sys.exit(__ret)