From 4e95643a4642db56acdf4176d4cc960105f98023 Mon Sep 17 00:00:00 2001 From: Guillermo Rauch Date: Sat, 5 Feb 2011 11:35:33 -0800 Subject: [PATCH] Updated Flash websocke transport --- lib/vendor/web-socket-js/.gitignore | 1 + lib/vendor/web-socket-js/FABridge.js | 604 +++ lib/vendor/web-socket-js/README.txt | 109 + lib/vendor/web-socket-js/WebSocketMain.swf | Bin 0 -> 180028 bytes .../web-socket-js/WebSocketMainInsecure.zip | Bin 0 -> 172823 bytes .../web-socket-js/flash-src/WebSocket.as | 452 +++ .../web-socket-js/flash-src/WebSocketMain.as | 88 + .../flash-src/WebSocketMainInsecure.as | 19 + .../flash-src/bridge/FABridge.as | 943 +++++ lib/vendor/web-socket-js/flash-src/build.sh | 10 + .../com/adobe/net/proxies/RFC2817Socket.as | 204 ++ .../flash-src/com/gsolo/encryption/MD5.as | 375 ++ .../flash-src/com/hurlant/crypto/Crypto.as | 287 ++ .../crypto/cert/MozillaRootCertificates.as | 3235 +++++++++++++++++ .../hurlant/crypto/cert/X509Certificate.as | 218 ++ .../crypto/cert/X509CertificateCollection.as | 57 + .../flash-src/com/hurlant/crypto/hash/HMAC.as | 82 + .../com/hurlant/crypto/hash/IHMAC.as | 27 + .../com/hurlant/crypto/hash/IHash.as | 21 + .../flash-src/com/hurlant/crypto/hash/MAC.as | 137 + .../flash-src/com/hurlant/crypto/hash/MD2.as | 124 + .../flash-src/com/hurlant/crypto/hash/MD5.as | 204 ++ .../flash-src/com/hurlant/crypto/hash/SHA1.as | 106 + .../com/hurlant/crypto/hash/SHA224.as | 28 + .../com/hurlant/crypto/hash/SHA256.as | 115 + .../com/hurlant/crypto/hash/SHABase.as | 71 + .../flash-src/com/hurlant/crypto/prng/ARC4.as | 90 + .../com/hurlant/crypto/prng/IPRNG.as | 20 + .../com/hurlant/crypto/prng/Random.as | 119 + .../com/hurlant/crypto/prng/TLSPRF.as | 142 + .../com/hurlant/crypto/rsa/RSAKey.as | 339 ++ .../com/hurlant/crypto/symmetric/AESKey.as | 2797 ++++++++++++++ .../hurlant/crypto/symmetric/BlowFishKey.as | 375 ++ .../com/hurlant/crypto/symmetric/CBCMode.as | 55 + .../com/hurlant/crypto/symmetric/CFB8Mode.as | 61 + .../com/hurlant/crypto/symmetric/CFBMode.as | 64 + .../com/hurlant/crypto/symmetric/CTRMode.as | 58 + .../com/hurlant/crypto/symmetric/DESKey.as | 365 ++ .../com/hurlant/crypto/symmetric/ECBMode.as | 86 + .../com/hurlant/crypto/symmetric/ICipher.as | 21 + .../com/hurlant/crypto/symmetric/IMode.as | 15 + .../com/hurlant/crypto/symmetric/IPad.as | 32 + .../hurlant/crypto/symmetric/IStreamCipher.as | 21 + .../hurlant/crypto/symmetric/ISymmetricKey.as | 35 + .../com/hurlant/crypto/symmetric/IVMode.as | 110 + .../com/hurlant/crypto/symmetric/NullPad.as | 34 + .../com/hurlant/crypto/symmetric/OFBMode.as | 52 + .../com/hurlant/crypto/symmetric/PKCS5.as | 44 + .../com/hurlant/crypto/symmetric/SSLPad.as | 44 + .../hurlant/crypto/symmetric/SimpleIVMode.as | 60 + .../com/hurlant/crypto/symmetric/TLSPad.as | 42 + .../hurlant/crypto/symmetric/TripleDESKey.as | 88 + .../com/hurlant/crypto/symmetric/XTeaKey.as | 94 + .../com/hurlant/crypto/symmetric/aeskey.pl | 29 + .../com/hurlant/crypto/symmetric/dump.txt | 2304 ++++++++++++ .../com/hurlant/crypto/tests/AESKeyTest.as | 1220 +++++++ .../com/hurlant/crypto/tests/ARC4Test.as | 58 + .../hurlant/crypto/tests/BigIntegerTest.as | 39 + .../hurlant/crypto/tests/BlowFishKeyTest.as | 148 + .../com/hurlant/crypto/tests/CBCModeTest.as | 160 + .../com/hurlant/crypto/tests/CFB8ModeTest.as | 71 + .../com/hurlant/crypto/tests/CFBModeTest.as | 98 + .../com/hurlant/crypto/tests/CTRModeTest.as | 109 + .../com/hurlant/crypto/tests/DESKeyTest.as | 112 + .../com/hurlant/crypto/tests/ECBModeTest.as | 151 + .../com/hurlant/crypto/tests/HMACTest.as | 184 + .../com/hurlant/crypto/tests/ITestHarness.as | 20 + .../com/hurlant/crypto/tests/MD2Test.as | 56 + .../com/hurlant/crypto/tests/MD5Test.as | 58 + .../com/hurlant/crypto/tests/OFBModeTest.as | 101 + .../com/hurlant/crypto/tests/RSAKeyTest.as | 92 + .../com/hurlant/crypto/tests/SHA1Test.as | 198 + .../com/hurlant/crypto/tests/SHA224Test.as | 58 + .../com/hurlant/crypto/tests/SHA256Test.as | 60 + .../com/hurlant/crypto/tests/TLSPRFTest.as | 51 + .../com/hurlant/crypto/tests/TestCase.as | 42 + .../hurlant/crypto/tests/TripleDESKeyTest.as | 59 + .../com/hurlant/crypto/tests/XTeaKeyTest.as | 66 + .../com/hurlant/crypto/tls/BulkCiphers.as | 102 + .../com/hurlant/crypto/tls/CipherSuites.as | 117 + .../hurlant/crypto/tls/IConnectionState.as | 14 + .../hurlant/crypto/tls/ISecurityParameters.as | 29 + .../com/hurlant/crypto/tls/KeyExchanges.as | 24 + .../flash-src/com/hurlant/crypto/tls/MACs.as | 38 + .../hurlant/crypto/tls/SSLConnectionState.as | 171 + .../com/hurlant/crypto/tls/SSLEvent.as | 26 + .../crypto/tls/SSLSecurityParameters.as | 340 ++ .../com/hurlant/crypto/tls/TLSConfig.as | 70 + .../hurlant/crypto/tls/TLSConnectionState.as | 151 + .../com/hurlant/crypto/tls/TLSEngine.as | 895 +++++ .../com/hurlant/crypto/tls/TLSError.as | 39 + .../com/hurlant/crypto/tls/TLSEvent.as | 27 + .../crypto/tls/TLSSecurityParameters.as | 197 + .../com/hurlant/crypto/tls/TLSSocket.as | 370 ++ .../com/hurlant/crypto/tls/TLSSocketEvent.as | 26 + .../com/hurlant/crypto/tls/TLSTest.as | 180 + .../com/hurlant/math/BarrettReduction.as | 90 + .../flash-src/com/hurlant/math/BigInteger.as | 1543 ++++++++ .../com/hurlant/math/ClassicReduction.as | 35 + .../flash-src/com/hurlant/math/IReduction.as | 11 + .../com/hurlant/math/MontgomeryReduction.as | 85 + .../com/hurlant/math/NullReduction.as | 34 + .../flash-src/com/hurlant/math/bi_internal.as | 11 + .../flash-src/com/hurlant/util/ArrayUtil.as | 25 + .../flash-src/com/hurlant/util/Base64.as | 189 + .../flash-src/com/hurlant/util/Hex.as | 66 + .../flash-src/com/hurlant/util/Memory.as | 28 + .../com/hurlant/util/der/ByteString.as | 43 + .../flash-src/com/hurlant/util/der/DER.as | 210 ++ .../com/hurlant/util/der/IAsn1Type.as | 21 + .../flash-src/com/hurlant/util/der/Integer.as | 44 + .../flash-src/com/hurlant/util/der/OID.as | 35 + .../com/hurlant/util/der/ObjectIdentifier.as | 112 + .../flash-src/com/hurlant/util/der/PEM.as | 118 + .../com/hurlant/util/der/PrintableString.as | 49 + .../com/hurlant/util/der/Sequence.as | 90 + .../flash-src/com/hurlant/util/der/Set.as | 27 + .../flash-src/com/hurlant/util/der/Type.as | 94 + .../flash-src/com/hurlant/util/der/UTCTime.as | 60 + lib/vendor/web-socket-js/sample.html | 76 + lib/vendor/web-socket-js/swfobject.js | 4 + lib/vendor/web-socket-js/web_socket.js | 376 ++ 122 files changed, 24616 insertions(+) create mode 100644 lib/vendor/web-socket-js/.gitignore create mode 100644 lib/vendor/web-socket-js/FABridge.js create mode 100644 lib/vendor/web-socket-js/README.txt create mode 100644 lib/vendor/web-socket-js/WebSocketMain.swf create mode 100644 lib/vendor/web-socket-js/WebSocketMainInsecure.zip create mode 100644 lib/vendor/web-socket-js/flash-src/WebSocket.as create mode 100644 lib/vendor/web-socket-js/flash-src/WebSocketMain.as create mode 100644 lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as create mode 100644 lib/vendor/web-socket-js/flash-src/bridge/FABridge.as create mode 100755 lib/vendor/web-socket-js/flash-src/build.sh create mode 100644 lib/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as create mode 100644 lib/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as create mode 100755 lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as create mode 100644 lib/vendor/web-socket-js/sample.html create mode 100644 lib/vendor/web-socket-js/swfobject.js create mode 100644 lib/vendor/web-socket-js/web_socket.js diff --git a/lib/vendor/web-socket-js/.gitignore b/lib/vendor/web-socket-js/.gitignore new file mode 100644 index 00000000..80e8f7ad --- /dev/null +++ b/lib/vendor/web-socket-js/.gitignore @@ -0,0 +1 @@ +test.html diff --git a/lib/vendor/web-socket-js/FABridge.js b/lib/vendor/web-socket-js/FABridge.js new file mode 100644 index 00000000..df7e355c --- /dev/null +++ b/lib/vendor/web-socket-js/FABridge.js @@ -0,0 +1,604 @@ +/* +/* +Copyright 2006 Adobe Systems Incorporated + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +/* + * The Bridge class, responsible for navigating AS instances + */ +function FABridge(target,bridgeName) +{ + this.target = target; + this.remoteTypeCache = {}; + this.remoteInstanceCache = {}; + this.remoteFunctionCache = {}; + this.localFunctionCache = {}; + this.bridgeID = FABridge.nextBridgeID++; + this.name = bridgeName; + this.nextLocalFuncID = 0; + FABridge.instances[this.name] = this; + FABridge.idMap[this.bridgeID] = this; + + return this; +} + +// type codes for packed values +FABridge.TYPE_ASINSTANCE = 1; +FABridge.TYPE_ASFUNCTION = 2; + +FABridge.TYPE_JSFUNCTION = 3; +FABridge.TYPE_ANONYMOUS = 4; + +FABridge.initCallbacks = {}; +FABridge.userTypes = {}; + +FABridge.addToUserTypes = function() +{ + for (var i = 0; i < arguments.length; i++) + { + FABridge.userTypes[arguments[i]] = { + 'typeName': arguments[i], + 'enriched': false + }; + } +} + +FABridge.argsToArray = function(args) +{ + var result = []; + for (var i = 0; i < args.length; i++) + { + result[i] = args[i]; + } + return result; +} + +function instanceFactory(objID) +{ + this.fb_instance_id = objID; + return this; +} + +function FABridge__invokeJSFunction(args) +{ + var funcID = args[0]; + var throughArgs = args.concat();//FABridge.argsToArray(arguments); + throughArgs.shift(); + + var bridge = FABridge.extractBridgeFromID(funcID); + return bridge.invokeLocalFunction(funcID, throughArgs); +} + +FABridge.addInitializationCallback = function(bridgeName, callback) +{ + var inst = FABridge.instances[bridgeName]; + if (inst != undefined) + { + callback.call(inst); + return; + } + + var callbackList = FABridge.initCallbacks[bridgeName]; + if(callbackList == null) + { + FABridge.initCallbacks[bridgeName] = callbackList = []; + } + + callbackList.push(callback); +} + +// updated for changes to SWFObject2 +function FABridge__bridgeInitialized(bridgeName) { + var objects = document.getElementsByTagName("object"); + var ol = objects.length; + var activeObjects = []; + if (ol > 0) { + for (var i = 0; i < ol; i++) { + if (typeof objects[i].SetVariable != "undefined") { + activeObjects[activeObjects.length] = objects[i]; + } + } + } + var embeds = document.getElementsByTagName("embed"); + var el = embeds.length; + var activeEmbeds = []; + if (el > 0) { + for (var j = 0; j < el; j++) { + if (typeof embeds[j].SetVariable != "undefined") { + activeEmbeds[activeEmbeds.length] = embeds[j]; + } + } + } + var aol = activeObjects.length; + var ael = activeEmbeds.length; + var searchStr = "bridgeName="+ bridgeName; + if ((aol == 1 && !ael) || (aol == 1 && ael == 1)) { + FABridge.attachBridge(activeObjects[0], bridgeName); + } + else if (ael == 1 && !aol) { + FABridge.attachBridge(activeEmbeds[0], bridgeName); + } + else { + var flash_found = false; + if (aol > 1) { + for (var k = 0; k < aol; k++) { + var params = activeObjects[k].childNodes; + for (var l = 0; l < params.length; l++) { + var param = params[l]; + if (param.nodeType == 1 && param.tagName.toLowerCase() == "param" && param["name"].toLowerCase() == "flashvars" && param["value"].indexOf(searchStr) >= 0) { + FABridge.attachBridge(activeObjects[k], bridgeName); + flash_found = true; + break; + } + } + if (flash_found) { + break; + } + } + } + if (!flash_found && ael > 1) { + for (var m = 0; m < ael; m++) { + var flashVars = activeEmbeds[m].attributes.getNamedItem("flashVars").nodeValue; + if (flashVars.indexOf(searchStr) >= 0) { + FABridge.attachBridge(activeEmbeds[m], bridgeName); + break; + } + } + } + } + return true; +} + +// used to track multiple bridge instances, since callbacks from AS are global across the page. + +FABridge.nextBridgeID = 0; +FABridge.instances = {}; +FABridge.idMap = {}; +FABridge.refCount = 0; + +FABridge.extractBridgeFromID = function(id) +{ + var bridgeID = (id >> 16); + return FABridge.idMap[bridgeID]; +} + +FABridge.attachBridge = function(instance, bridgeName) +{ + var newBridgeInstance = new FABridge(instance, bridgeName); + + FABridge[bridgeName] = newBridgeInstance; + +/* FABridge[bridgeName] = function() { + return newBridgeInstance.root(); + } +*/ + var callbacks = FABridge.initCallbacks[bridgeName]; + if (callbacks == null) + { + return; + } + for (var i = 0; i < callbacks.length; i++) + { + callbacks[i].call(newBridgeInstance); + } + delete FABridge.initCallbacks[bridgeName] +} + +// some methods can't be proxied. You can use the explicit get,set, and call methods if necessary. + +FABridge.blockedMethods = +{ + toString: true, + get: true, + set: true, + call: true +}; + +FABridge.prototype = +{ + + +// bootstrapping + + root: function() + { + return this.deserialize(this.target.getRoot()); + }, +//clears all of the AS objects in the cache maps + releaseASObjects: function() + { + return this.target.releaseASObjects(); + }, +//clears a specific object in AS from the type maps + releaseNamedASObject: function(value) + { + if(typeof(value) != "object") + { + return false; + } + else + { + var ret = this.target.releaseNamedASObject(value.fb_instance_id); + return ret; + } + }, +//create a new AS Object + create: function(className) + { + return this.deserialize(this.target.create(className)); + }, + + + // utilities + + makeID: function(token) + { + return (this.bridgeID << 16) + token; + }, + + + // low level access to the flash object + +//get a named property from an AS object + getPropertyFromAS: function(objRef, propName) + { + if (FABridge.refCount > 0) + { + throw new Error("You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround."); + } + else + { + FABridge.refCount++; + retVal = this.target.getPropFromAS(objRef, propName); + retVal = this.handleError(retVal); + FABridge.refCount--; + return retVal; + } + }, +//set a named property on an AS object + setPropertyInAS: function(objRef,propName, value) + { + if (FABridge.refCount > 0) + { + throw new Error("You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround."); + } + else + { + FABridge.refCount++; + retVal = this.target.setPropInAS(objRef,propName, this.serialize(value)); + retVal = this.handleError(retVal); + FABridge.refCount--; + return retVal; + } + }, + +//call an AS function + callASFunction: function(funcID, args) + { + if (FABridge.refCount > 0) + { + throw new Error("You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround."); + } + else + { + FABridge.refCount++; + retVal = this.target.invokeASFunction(funcID, this.serialize(args)); + retVal = this.handleError(retVal); + FABridge.refCount--; + return retVal; + } + }, +//call a method on an AS object + callASMethod: function(objID, funcName, args) + { + if (FABridge.refCount > 0) + { + throw new Error("You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround."); + } + else + { + FABridge.refCount++; + args = this.serialize(args); + retVal = this.target.invokeASMethod(objID, funcName, args); + retVal = this.handleError(retVal); + FABridge.refCount--; + return retVal; + } + }, + + // responders to remote calls from flash + + //callback from flash that executes a local JS function + //used mostly when setting js functions as callbacks on events + invokeLocalFunction: function(funcID, args) + { + var result; + var func = this.localFunctionCache[funcID]; + + if(func != undefined) + { + result = this.serialize(func.apply(null, this.deserialize(args))); + } + + return result; + }, + + // Object Types and Proxies + + // accepts an object reference, returns a type object matching the obj reference. + getTypeFromName: function(objTypeName) + { + return this.remoteTypeCache[objTypeName]; + }, + //create an AS proxy for the given object ID and type + createProxy: function(objID, typeName) + { + var objType = this.getTypeFromName(typeName); + instanceFactory.prototype = objType; + var instance = new instanceFactory(objID); + this.remoteInstanceCache[objID] = instance; + return instance; + }, + //return the proxy associated with the given object ID + getProxy: function(objID) + { + return this.remoteInstanceCache[objID]; + }, + + // accepts a type structure, returns a constructed type + addTypeDataToCache: function(typeData) + { + var newType = new ASProxy(this, typeData.name); + var accessors = typeData.accessors; + for (var i = 0; i < accessors.length; i++) + { + this.addPropertyToType(newType, accessors[i]); + } + + var methods = typeData.methods; + for (var i = 0; i < methods.length; i++) + { + if (FABridge.blockedMethods[methods[i]] == undefined) + { + this.addMethodToType(newType, methods[i]); + } + } + + + this.remoteTypeCache[newType.typeName] = newType; + return newType; + }, + + //add a property to a typename; used to define the properties that can be called on an AS proxied object + addPropertyToType: function(ty, propName) + { + var c = propName.charAt(0); + var setterName; + var getterName; + if(c >= "a" && c <= "z") + { + getterName = "get" + c.toUpperCase() + propName.substr(1); + setterName = "set" + c.toUpperCase() + propName.substr(1); + } + else + { + getterName = "get" + propName; + setterName = "set" + propName; + } + ty[setterName] = function(val) + { + this.bridge.setPropertyInAS(this.fb_instance_id, propName, val); + } + ty[getterName] = function() + { + return this.bridge.deserialize(this.bridge.getPropertyFromAS(this.fb_instance_id, propName)); + } + }, + + //add a method to a typename; used to define the methods that can be callefd on an AS proxied object + addMethodToType: function(ty, methodName) + { + ty[methodName] = function() + { + return this.bridge.deserialize(this.bridge.callASMethod(this.fb_instance_id, methodName, FABridge.argsToArray(arguments))); + } + }, + + // Function Proxies + + //returns the AS proxy for the specified function ID + getFunctionProxy: function(funcID) + { + var bridge = this; + if (this.remoteFunctionCache[funcID] == null) + { + this.remoteFunctionCache[funcID] = function() + { + bridge.callASFunction(funcID, FABridge.argsToArray(arguments)); + } + } + return this.remoteFunctionCache[funcID]; + }, + + //reutrns the ID of the given function; if it doesnt exist it is created and added to the local cache + getFunctionID: function(func) + { + if (func.__bridge_id__ == undefined) + { + func.__bridge_id__ = this.makeID(this.nextLocalFuncID++); + this.localFunctionCache[func.__bridge_id__] = func; + } + return func.__bridge_id__; + }, + + // serialization / deserialization + + serialize: function(value) + { + var result = {}; + + var t = typeof(value); + //primitives are kept as such + if (t == "number" || t == "string" || t == "boolean" || t == null || t == undefined) + { + result = value; + } + else if (value instanceof Array) + { + //arrays are serializesd recursively + result = []; + for (var i = 0; i < value.length; i++) + { + result[i] = this.serialize(value[i]); + } + } + else if (t == "function") + { + //js functions are assigned an ID and stored in the local cache + result.type = FABridge.TYPE_JSFUNCTION; + result.value = this.getFunctionID(value); + } + else if (value instanceof ASProxy) + { + result.type = FABridge.TYPE_ASINSTANCE; + result.value = value.fb_instance_id; + } + else + { + result.type = FABridge.TYPE_ANONYMOUS; + result.value = value; + } + + return result; + }, + + //on deserialization we always check the return for the specific error code that is used to marshall NPE's into JS errors + // the unpacking is done by returning the value on each pachet for objects/arrays + deserialize: function(packedValue) + { + + var result; + + var t = typeof(packedValue); + if (t == "number" || t == "string" || t == "boolean" || packedValue == null || packedValue == undefined) + { + result = this.handleError(packedValue); + } + else if (packedValue instanceof Array) + { + result = []; + for (var i = 0; i < packedValue.length; i++) + { + result[i] = this.deserialize(packedValue[i]); + } + } + else if (t == "object") + { + for(var i = 0; i < packedValue.newTypes.length; i++) + { + this.addTypeDataToCache(packedValue.newTypes[i]); + } + for (var aRefID in packedValue.newRefs) + { + this.createProxy(aRefID, packedValue.newRefs[aRefID]); + } + if (packedValue.type == FABridge.TYPE_PRIMITIVE) + { + result = packedValue.value; + } + else if (packedValue.type == FABridge.TYPE_ASFUNCTION) + { + result = this.getFunctionProxy(packedValue.value); + } + else if (packedValue.type == FABridge.TYPE_ASINSTANCE) + { + result = this.getProxy(packedValue.value); + } + else if (packedValue.type == FABridge.TYPE_ANONYMOUS) + { + result = packedValue.value; + } + } + return result; + }, + //increases the reference count for the given object + addRef: function(obj) + { + this.target.incRef(obj.fb_instance_id); + }, + //decrease the reference count for the given object and release it if needed + release:function(obj) + { + this.target.releaseRef(obj.fb_instance_id); + }, + + // check the given value for the components of the hard-coded error code : __FLASHERROR + // used to marshall NPE's into flash + + handleError: function(value) + { + if (typeof(value)=="string" && value.indexOf("__FLASHERROR")==0) + { + var myErrorMessage = value.split("||"); + if(FABridge.refCount > 0 ) + { + FABridge.refCount--; + } + throw new Error(myErrorMessage[1]); + return value; + } + else + { + return value; + } + } +}; + +// The root ASProxy class that facades a flash object + +ASProxy = function(bridge, typeName) +{ + this.bridge = bridge; + this.typeName = typeName; + return this; +}; +//methods available on each ASProxy object +ASProxy.prototype = +{ + get: function(propName) + { + return this.bridge.deserialize(this.bridge.getPropertyFromAS(this.fb_instance_id, propName)); + }, + + set: function(propName, value) + { + this.bridge.setPropertyInAS(this.fb_instance_id, propName, value); + }, + + call: function(funcName, args) + { + this.bridge.callASMethod(this.fb_instance_id, funcName, args); + }, + + addRef: function() { + this.bridge.addRef(this); + }, + + release: function() { + this.bridge.release(this); + } +}; diff --git a/lib/vendor/web-socket-js/README.txt b/lib/vendor/web-socket-js/README.txt new file mode 100644 index 00000000..2e32ea7f --- /dev/null +++ b/lib/vendor/web-socket-js/README.txt @@ -0,0 +1,109 @@ +* How to try + +Assuming you have Web server (e.g. Apache) running at http://example.com/ . + +- Download web_socket.rb from: + http://github.com/gimite/web-socket-ruby/tree/master +- Run sample Web Socket server (echo server) in example.com with: (#1) + $ ruby web-socket-ruby/samples/echo_server.rb example.com 10081 +- If your server already provides socket policy file at port 843, modify the file to allow access to port 10081. Otherwise you can skip this step. See below for details. +- Publish the web-socket-js directory with your Web server (e.g. put it in ~/public_html). +- Change ws://localhost:10081 to ws://example.com:10081 in sample.html. +- Open sample.html in your browser. +- After "onopen" is shown, input something, click [Send] and confirm echo back. + +#1: First argument of echo_server.rb means that it accepts Web Socket connection from HTML pages in example.com. + + +* Troubleshooting + +If it doesn't work, try these: + +1. Try Chrome and Firefox 3.x. +- It doesn't work on Chrome: +-- It's likely an issue of your code or the server. Debug your code as usual e.g. using console.log. +- It works on Chrome but it doesn't work on Firefox: +-- It's likely an issue of web-socket-js specific configuration (e.g. 3 and 4 below). +- It works on both Chrome and Firefox, but it doesn't work on your browser: +-- Check "Supported environment" section below. Your browser may not be supported by web-socket-js. + +2. Add this line before your code: + WEB_SOCKET_DEBUG = true; +and use Developer Tools (Chrome/Safari) or Firebug (Firefox) to see if console.log outputs any errors. + +3. Make sure you do NOT open your HTML page as local file e.g. file:///.../sample.html. web-socket-js doesn't work on local file. Open it via Web server e.g. http:///.../sample.html. + +4. If you are NOT using web-socket-ruby as your WebSocket server, you need to place Flash socket policy file on your server. See "Flash socket policy file" section below for details. + +5. Check if sample.html bundled with web-socket-js works. + +6. Make sure the port used for WebSocket (10081 in example above) is not blocked by your server/client's firewall. + +7. Install debugger version of Flash Player available here to see Flash errors: +http://www.adobe.com/support/flashplayer/downloads.html + + +* Supported environments + +It should work on: +- Google Chrome 4 or later (just uses native implementation) +- Firefox 3.x, Internet Explorer 8 + Flash Player 9 or later + +It may or may not work on other browsers such as Safari, Opera or IE 6. Patch for these browsers are appreciated, but I will not work on fixing issues specific to these browsers by myself. + + +* Flash socket policy file + +This implementation uses Flash's socket, which means that your server must provide Flash socket policy file to declare the server accepts connections from Flash. + +If you use web-socket-ruby available at +http://github.com/gimite/web-socket-ruby/tree/master +, you don't need anything special, because web-socket-ruby handles Flash socket policy file request. But if you already provide socket policy file at port 843, you need to modify the file to allow access to Web Socket port, because it precedes what web-socket-ruby provides. + +If you use other Web Socket server implementation, you need to provide socket policy file yourself. See +http://www.lightsphere.com/dev/articles/flash_socket_policy.html +for details and sample script to run socket policy file server. node.js implementation is available here: +http://github.com/LearnBoost/Socket.IO-node/blob/master/lib/socket.io/transports/flashsocket.js + +Actually, it's still better to provide socket policy file at port 843 even if you use web-socket-ruby. Flash always try to connect to port 843 first, so providing the file at port 843 makes startup faster. + + +* Cookie considerations + +Cookie is sent if Web Socket host is the same as the origin of JavaScript. Otherwise it is not sent, because I don't know way to send right Cookie (which is Cookie of the host of Web Socket, I heard). + +Note that it's technically possible that client sends arbitrary string as Cookie and any other headers (by modifying this library for example) once you place Flash socket policy file in your server. So don't trust Cookie and other headers if you allow connection from untrusted origin. + + +* Proxy considerations + +The WebSocket spec (http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol) specifies instructions for User Agents to support proxied connections by implementing the HTTP CONNECT method. + +The AS3 Socket class doesn't implement this mechanism, which renders it useless for the scenarios where the user trying to open a socket is behind a proxy. + +The class RFC2817Socket (by Christian Cantrell) effectively lets us implement this, as long as the proxy settings are known and provided by the interface that instantiates the WebSocket. As such, if you want to support proxied conncetions, you'll have to supply this information to the WebSocket constructor when Flash is being used. One way to go about it would be to ask the user for proxy settings information if the initial connection fails. + + +* How to host HTML file and SWF file in different domains + +By default, HTML file and SWF file must be in the same domain. You can follow steps below to allow hosting them in different domain. + +WARNING: If you use the method below, HTML files in ANY domains can send arbitrary TCP data to your WebSocket server, regardless of configuration in Flash socket policy file. Arbitrary TCP data means that they can even fake request headers including Origin and Cookie. + +- Unzip WebSocketMainInsecure.zip to extract WebSocketMainInsecure.swf. +- Put WebSocketMainInsecure.swf on your server, instead of WebSocketMain.swf. +- In JavaScript, set WEB_SOCKET_SWF_LOCATION to URL of your WebSocketMainInsecure.swf. + + +* How to build WebSocketMain.swf + +Install Flex 4 SDK: +http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4 + +$ cd flash-src +$ ./build.sh + + +* License + +New BSD License. diff --git a/lib/vendor/web-socket-js/WebSocketMain.swf b/lib/vendor/web-socket-js/WebSocketMain.swf new file mode 100644 index 0000000000000000000000000000000000000000..694f9dcb56adbbd29d693a945a6415ec3c807d9c GIT binary patch literal 180028 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 r{C|)JZbhFCT*@i`b+$q&K{%Ev;F@EBms%3 literal 0 HcmV?d00001 diff --git a/lib/vendor/web-socket-js/WebSocketMainInsecure.zip b/lib/vendor/web-socket-js/WebSocketMainInsecure.zip new file mode 100644 index 0000000000000000000000000000000000000000..ad3c9b99be198b4606b2f761dac1c219bf8d27c2 GIT binary patch literal 172823 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

FL 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�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 literal 0 HcmV?d00001 diff --git a/lib/vendor/web-socket-js/flash-src/WebSocket.as b/lib/vendor/web-socket-js/flash-src/WebSocket.as new file mode 100644 index 00000000..0733570c --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/WebSocket.as @@ -0,0 +1,452 @@ +// Copyright: Hiroshi Ichikawa +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 + +package { + +import flash.display.*; +import flash.events.*; +import flash.external.*; +import flash.net.*; +import flash.system.*; +import flash.utils.*; +import mx.core.*; +import mx.controls.*; +import mx.events.*; +import mx.utils.*; +import com.adobe.net.proxies.RFC2817Socket; +import com.hurlant.crypto.tls.TLSSocket; +import com.hurlant.crypto.tls.TLSConfig; +import com.hurlant.crypto.tls.TLSEngine; +import com.hurlant.crypto.tls.TLSSecurityParameters; +import com.gsolo.encryption.MD5; + +[Event(name="event", type="flash.events.Event")] +public class WebSocket extends EventDispatcher { + + private static var CONNECTING:int = 0; + private static var OPEN:int = 1; + private static var CLOSING:int = 2; + private static var CLOSED:int = 3; + + private var rawSocket:Socket; + private var tlsSocket:TLSSocket; + private var tlsConfig:TLSConfig; + private var socket:Socket; + private var main:WebSocketMain; + private var url:String; + private var scheme:String; + private var host:String; + private var port:uint; + private var path:String; + private var origin:String; + private var protocol:String; + private var buffer:ByteArray = new ByteArray(); + private var eventQueue:Array = []; + private var headerState:int = 0; + private var readyState:int = CONNECTING; + private var headers:String; + private var noiseChars:Array; + private var expectedDigest:String; + + public function WebSocket( + main:WebSocketMain, url:String, protocol:String, + proxyHost:String = null, proxyPort:int = 0, + headers:String = null) { + this.main = main; + initNoiseChars(); + this.url = url; + var m:Array = url.match(/^(\w+):\/\/([^\/:]+)(:(\d+))?(\/.*)?$/); + if (!m) main.fatal("SYNTAX_ERR: invalid url: " + url); + this.scheme = m[1]; + this.host = m[2]; + this.port = parseInt(m[4] || "80"); + this.path = m[5] || "/"; + this.origin = main.getOrigin(); + this.protocol = protocol; + // if present and not the empty string, headers MUST end with \r\n + // headers should be zero or more complete lines, for example + // "Header1: xxx\r\nHeader2: yyyy\r\n" + this.headers = headers; + + if (proxyHost != null && proxyPort != 0){ + if (scheme == "wss") { + main.fatal("wss with proxy is not supported"); + } + var proxySocket:RFC2817Socket = new RFC2817Socket(); + proxySocket.setProxyInfo(proxyHost, proxyPort); + proxySocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); + rawSocket = socket = proxySocket; + } else { + rawSocket = new Socket(); + if (scheme == "wss") { + tlsConfig= new TLSConfig(TLSEngine.CLIENT, + null, null, null, null, null, + TLSSecurityParameters.PROTOCOL_VERSION); + tlsConfig.trustAllCertificates = true; + tlsConfig.ignoreCommonNameMismatch = true; + tlsSocket = new TLSSocket(); + tlsSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); + socket = tlsSocket; + } else { + rawSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); + socket = rawSocket; + } + } + rawSocket.addEventListener(Event.CLOSE, onSocketClose); + rawSocket.addEventListener(Event.CONNECT, onSocketConnect); + rawSocket.addEventListener(IOErrorEvent.IO_ERROR, onSocketIoError); + rawSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSocketSecurityError); + rawSocket.connect(host, port); + } + + public function send(encData:String):int { + var data:String = decodeURIComponent(encData); + if (readyState == OPEN) { + socket.writeByte(0x00); + socket.writeUTFBytes(data); + socket.writeByte(0xff); + socket.flush(); + main.log("sent: " + data); + return -1; + } else if (readyState == CLOSING || readyState == CLOSED) { + var bytes:ByteArray = new ByteArray(); + bytes.writeUTFBytes(data); + return bytes.length; // not sure whether it should include \x00 and \xff + } else { + main.fatal("invalid state"); + return 0; + } + } + + public function close():void { + main.log("close"); + eventQueue = []; + try { + if (readyState == OPEN) { + socket.writeByte(0xff); + socket.writeByte(0x00); + socket.flush(); + } + socket.close(); + } catch (ex:Error) { } + readyState = CLOSED; + // We don't fire any events here because it causes weird error: + // > You are trying to call recursively into the Flash Player which is not allowed. + // We do something equivalent in JavaScript WebSocket#close instead. + } + + private function onSocketConnect(event:Event):void { + main.log("connected"); + + if (scheme == "wss") { + main.log("starting SSL/TLS"); + tlsSocket.startTLS(rawSocket, host, tlsConfig); + } + + var hostValue:String = host + (port == 80 ? "" : ":" + port); + var cookie:String = ""; + if (main.getCallerHost() == host) { + cookie = ExternalInterface.call("function(){return document.cookie}"); + } + var key1:String = generateKey(); + var key2:String = generateKey(); + var key3:String = generateKey3(); + expectedDigest = getSecurityDigest(key1, key2, key3); + var opt:String = ""; + if (protocol) opt += "WebSocket-Protocol: " + protocol + "\r\n"; + // if caller passes additional headers they must end with "\r\n" + if (headers) opt += headers; + + var req:String = StringUtil.substitute( + "GET {0} HTTP/1.1\r\n" + + "Upgrade: WebSocket\r\n" + + "Connection: Upgrade\r\n" + + "Host: {1}\r\n" + + "Origin: {2}\r\n" + + "Cookie: {3}\r\n" + + "Sec-WebSocket-Key1: {4}\r\n" + + "Sec-WebSocket-Key2: {5}\r\n" + + "{6}" + + "\r\n", + path, hostValue, origin, cookie, key1, key2, opt); + main.log("request header:\n" + req); + socket.writeUTFBytes(req); + main.log("sent key3: " + key3); + writeBytes(key3); + socket.flush(); + } + + private function onSocketClose(event:Event):void { + main.log("closed"); + readyState = CLOSED; + fireEvent({type: "close"}, true); + } + + private function onSocketIoError(event:IOErrorEvent):void { + var message:String; + if (readyState == CONNECTING) { + message = "cannot connect to Web Socket server at " + url + " (IoError)"; + } else { + message = "error communicating with Web Socket server at " + url + " (IoError)"; + } + onError(message); + } + + private function onSocketSecurityError(event:SecurityErrorEvent):void { + var message:String; + if (readyState == CONNECTING) { + message = + "cannot connect to Web Socket server at " + url + " (SecurityError)\n" + + "make sure the server is running and Flash socket policy file is correctly placed"; + } else { + message = "error communicating with Web Socket server at " + url + " (SecurityError)"; + } + onError(message); + } + + private function onError(message:String):void { + var state:int = readyState; + if (state == CLOSED) return; + main.error(message); + close(); + fireEvent({type: state == CONNECTING ? "close" : "error"}, true); + } + + private function onSocketData(event:ProgressEvent):void { + var pos:int = buffer.length; + socket.readBytes(buffer, pos); + for (; pos < buffer.length; ++pos) { + if (headerState < 4) { + // try to find "\r\n\r\n" + if ((headerState == 0 || headerState == 2) && buffer[pos] == 0x0d) { + ++headerState; + } else if ((headerState == 1 || headerState == 3) && buffer[pos] == 0x0a) { + ++headerState; + } else { + headerState = 0; + } + if (headerState == 4) { + var headerStr:String = readUTFBytes(buffer, 0, pos + 1); + main.log("response header:\n" + headerStr); + if (!validateHeader(headerStr)) return; + removeBufferBefore(pos + 1); + pos = -1; + } + } else if (headerState == 4) { + if (pos == 15) { + var replyDigest:String = readBytes(buffer, 0, 16); + main.log("reply digest: " + replyDigest); + if (replyDigest != expectedDigest) { + onError("digest doesn't match: " + replyDigest + " != " + expectedDigest); + return; + } + headerState = 5; + removeBufferBefore(pos + 1); + pos = -1; + readyState = OPEN; + fireEvent({type: "open"}, true); + } + } else { + if (buffer[pos] == 0xff && pos > 0) { + if (buffer[0] != 0x00) { + onError("data must start with \\x00"); + return; + } + var data:String = readUTFBytes(buffer, 1, pos - 1); + main.log("received: " + data); + fireEvent({type: "message", data: encodeURIComponent(data)}, false); + removeBufferBefore(pos + 1); + pos = -1; + } else if (pos == 1 && buffer[0] == 0xff && buffer[1] == 0x00) { // closing + main.log("received closing packet"); + removeBufferBefore(pos + 1); + pos = -1; + close(); + fireEvent({type: "close"}, true); + } + } + } + } + + public function receiveEvents():Array { + var q:Array = eventQueue; + eventQueue = []; + return q; + } + + private function validateHeader(headerStr:String):Boolean { + var lines:Array = headerStr.split(/\r\n/); + if (!lines[0].match(/^HTTP\/1.1 101 /)) { + onError("bad response: " + lines[0]); + return false; + } + var header:Object = {}; + var lowerHeader:Object = {}; + for (var i:int = 1; i < lines.length; ++i) { + if (lines[i].length == 0) continue; + var m:Array = lines[i].match(/^(\S+): (.*)$/); + if (!m) { + onError("failed to parse response header line: " + lines[i]); + return false; + } + header[m[1].toLowerCase()] = m[2]; + lowerHeader[m[1].toLowerCase()] = m[2].toLowerCase(); + } + if (lowerHeader["upgrade"] != "websocket") { + onError("invalid Upgrade: " + header["Upgrade"]); + return false; + } + if (lowerHeader["connection"] != "upgrade") { + onError("invalid Connection: " + header["Connection"]); + return false; + } + if (!lowerHeader["sec-websocket-origin"]) { + if (lowerHeader["websocket-origin"]) { + onError( + "The WebSocket server speaks old WebSocket protocol, " + + "which is not supported by web-socket-js. " + + "It requires WebSocket protocol 76 or later. " + + "Try newer version of the server if available."); + } else { + onError("header Sec-WebSocket-Origin is missing"); + } + return false; + } + var resOrigin:String = lowerHeader["sec-websocket-origin"]; + if (resOrigin != origin) { + onError("origin doesn't match: '" + resOrigin + "' != '" + origin + "'"); + return false; + } + if (protocol && header["sec-websocket-protocol"] != protocol) { + onError("protocol doesn't match: '" + + header["websocket-protocol"] + "' != '" + protocol + "'"); + return false; + } + return true; + } + + private function removeBufferBefore(pos:int):void { + if (pos == 0) return; + var nextBuffer:ByteArray = new ByteArray(); + buffer.position = pos; + buffer.readBytes(nextBuffer); + buffer = nextBuffer; + } + + private function fireEvent(event:Object, stateChanged:Boolean):void { + if (stateChanged) { + event.readyState = readyState; + } + eventQueue.push(event); + dispatchEvent(new Event("event")); + } + + private function initNoiseChars():void { + noiseChars = new Array(); + for (var i:int = 0x21; i <= 0x2f; ++i) { + noiseChars.push(String.fromCharCode(i)); + } + for (var j:int = 0x3a; j <= 0x7a; ++j) { + noiseChars.push(String.fromCharCode(j)); + } + } + + private function generateKey():String { + var spaces:uint = randomInt(1, 12); + var max:uint = uint.MAX_VALUE / spaces; + var number:uint = randomInt(0, max); + var key:String = (number * spaces).toString(); + var noises:int = randomInt(1, 12); + var pos:int; + for (var i:int = 0; i < noises; ++i) { + var char:String = noiseChars[randomInt(0, noiseChars.length - 1)]; + pos = randomInt(0, key.length); + key = key.substr(0, pos) + char + key.substr(pos); + } + for (var j:int = 0; j < spaces; ++j) { + pos = randomInt(1, key.length - 1); + key = key.substr(0, pos) + " " + key.substr(pos); + } + return key; + } + + private function generateKey3():String { + var key3:String = ""; + for (var i:int = 0; i < 8; ++i) { + key3 += String.fromCharCode(randomInt(0, 255)); + } + return key3; + } + + private function getSecurityDigest(key1:String, key2:String, key3:String):String { + var bytes1:String = keyToBytes(key1); + var bytes2:String = keyToBytes(key2); + return MD5.rstr_md5(bytes1 + bytes2 + key3); + } + + private function keyToBytes(key:String):String { + var keyNum:uint = parseInt(key.replace(/[^\d]/g, "")); + var spaces:uint = 0; + for (var i:int = 0; i < key.length; ++i) { + if (key.charAt(i) == " ") ++spaces; + } + var resultNum:uint = keyNum / spaces; + var bytes:String = ""; + for (var j:int = 3; j >= 0; --j) { + bytes += String.fromCharCode((resultNum >> (j * 8)) & 0xff); + } + return bytes; + } + + // Writes byte sequence to socket. + // bytes is String in special format where bytes[i] is i-th byte, not i-th character. + private function writeBytes(bytes:String):void { + for (var i:int = 0; i < bytes.length; ++i) { + socket.writeByte(bytes.charCodeAt(i)); + } + } + + // Reads specified number of bytes from buffer, and returns it as special format String + // where bytes[i] is i-th byte (not i-th character). + private function readBytes(buffer:ByteArray, start:int, numBytes:int):String { + buffer.position = start; + var bytes:String = ""; + for (var i:int = 0; i < numBytes; ++i) { + // & 0xff is to make \x80-\xff positive number. + bytes += String.fromCharCode(buffer.readByte() & 0xff); + } + return bytes; + } + + private function readUTFBytes(buffer:ByteArray, start:int, numBytes:int):String { + buffer.position = start; + var data:String = ""; + for(var i:int = start; i < start + numBytes; ++i) { + // Workaround of a bug of ByteArray#readUTFBytes() that bytes after "\x00" is discarded. + if (buffer[i] == 0x00) { + data += buffer.readUTFBytes(i - buffer.position) + "\x00"; + buffer.position = i + 1; + } + } + data += buffer.readUTFBytes(start + numBytes - buffer.position); + return data; + } + + private function randomInt(min:uint, max:uint):uint { + return min + Math.floor(Math.random() * (Number(max) - min + 1)); + } + + // for debug + private function dumpBytes(bytes:String):void { + var output:String = ""; + for (var i:int = 0; i < bytes.length; ++i) { + output += bytes.charCodeAt(i).toString() + ", "; + } + main.log(output); + } + +} + +} diff --git a/lib/vendor/web-socket-js/flash-src/WebSocketMain.as b/lib/vendor/web-socket-js/flash-src/WebSocketMain.as new file mode 100644 index 00000000..9d6ff900 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/WebSocketMain.as @@ -0,0 +1,88 @@ +// Copyright: Hiroshi Ichikawa +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 + +package { + +import flash.display.*; +import flash.events.*; +import flash.external.*; +import flash.net.*; +import flash.system.*; +import flash.utils.*; +import mx.core.*; +import mx.controls.*; +import mx.events.*; +import mx.utils.*; +import bridge.FABridge; + +public class WebSocketMain extends Sprite { + + private var callerUrl:String; + private var debug:Boolean = false; + private var manualPolicyFileLoaded:Boolean = false; + + public function WebSocketMain() { + var fab:FABridge = new FABridge(); + fab.rootObject = this; + //log("Flash initialized"); + } + + public function setCallerUrl(url:String):void { + callerUrl = url; + } + + public function setDebug(val:Boolean):void { + debug = val; + } + + public function create( + url:String, protocol:String, + proxyHost:String = null, proxyPort:int = 0, + headers:String = null):WebSocket { + if (!manualPolicyFileLoaded) { + loadDefaultPolicyFile(url); + } + return new WebSocket(this, url, protocol, proxyHost, proxyPort, headers); + } + + public function getOrigin():String { + return (URLUtil.getProtocol(this.callerUrl) + "://" + + URLUtil.getServerNameWithPort(this.callerUrl)).toLowerCase(); + } + + public function getCallerHost():String { + return URLUtil.getServerName(this.callerUrl); + } + + private function loadDefaultPolicyFile(wsUrl:String):void { + var policyUrl:String = "xmlsocket://" + URLUtil.getServerName(wsUrl) + ":843"; + log("policy file: " + policyUrl); + Security.loadPolicyFile(policyUrl); + } + + public function loadManualPolicyFile(policyUrl:String):void { + log("policy file: " + policyUrl); + Security.loadPolicyFile(policyUrl); + manualPolicyFileLoaded = true; + } + + public function log(message:String):void { + if (debug) { + ExternalInterface.call("webSocketLog", encodeURIComponent("[WebSocket] " + message)); + } + } + + public function error(message:String):void { + ExternalInterface.call("webSocketError", encodeURIComponent("[WebSocket] " + message)); + } + + public function fatal(message:String):void { + ExternalInterface.call("webSocketError", encodeURIComponent("[WebSocket] " + message)); + throw message; + } + +} + +} diff --git a/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as b/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as new file mode 100644 index 00000000..ea377be1 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as @@ -0,0 +1,19 @@ +// Copyright: Hiroshi Ichikawa +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 + +package { + +import flash.system.*; + +public class WebSocketMainInsecure extends WebSocketMain { + + public function WebSocketMainInsecure() { + Security.allowDomain("*"); + super(); + } + +} + +} diff --git a/lib/vendor/web-socket-js/flash-src/bridge/FABridge.as b/lib/vendor/web-socket-js/flash-src/bridge/FABridge.as new file mode 100644 index 00000000..d03dba01 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/bridge/FABridge.as @@ -0,0 +1,943 @@ +/* +Copyright � 2006 Adobe Systems Incorporated + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +/* + * The Bridge class, responsible for navigating JS instances + */ +package bridge +{ + +/* + * imports + */ +import flash.external.ExternalInterface; +import flash.utils.Timer; +import flash.events.*; +import flash.display.DisplayObject; +import flash.system.ApplicationDomain; +import flash.utils.Dictionary; +import flash.utils.setTimeout; + +import mx.collections.errors.ItemPendingError; +import mx.core.IMXMLObject; + +import flash.utils.getQualifiedClassName; +import flash.utils.describeType; +import flash.events.TimerEvent; + +/** + * The FABridge class, responsible for proxying AS objects into javascript + */ +public class FABridge extends EventDispatcher implements IMXMLObject +{ + + //holds a list of stuff to call later, to break the recurrence of the js <> as calls + //you must use the full class name, as returned by the getQualifiedClassName() function + public static const MethodsToCallLater:Object = new Object(); + MethodsToCallLater["mx.collections::ArrayCollection"]="refresh,removeItemAt"; + + public static const EventsToCallLater:Object = new Object(); + EventsToCallLater["mx.data.events::UnresolvedConflictsEvent"]="true"; + EventsToCallLater["mx.events::PropertyChangeEvent"]="true"; + + public static const INITIALIZED:String = "bridgeInitialized"; + + // constructor + public function FABridge() + { + super(); + initializeCallbacks(); + } + + // private vars + + /** + * stores a cache of descriptions of AS types suitable for sending to JS + */ + private var localTypeMap:Dictionary = new Dictionary(); + + /** + * stores an id-referenced dictionary of objects exported to JS + */ + private var localInstanceMap:Dictionary = new Dictionary(); + + /** + * stores an id-referenced dictionary of functions exported to JS + */ + private var localFunctionMap:Dictionary = new Dictionary(); + + /** + * stores an id-referenced dictionary of proxy functions imported from JS + */ + private var remoteFunctionCache:Dictionary = new Dictionary(); + + /** + * stores a list of custom serialization functions + */ + private var customSerializersMap:Dictionary = new Dictionary(); + + /** + * stores a map of object ID's and their reference count + */ + private var refMap:Dictionary = new Dictionary(); + /** + * a local counter for generating unique IDs + */ + private var nextID:Number = 0; + + private var lastRef:int; + + /* values that can't be serialized natively across the bridge are packed and identified by type. + These constants represent different serialization types */ + public static const TYPE_ASINSTANCE:uint = 1; + public static const TYPE_ASFUNCTION:uint = 2; + public static const TYPE_JSFUNCTION:uint = 3; + public static const TYPE_ANONYMOUS:uint = 4; + + private var _initChecked:Boolean = false; + + // properties + + //getters and setters for the main component in the swf - the root + public function get rootObject():DisplayObject {return _rootObject;} + public function set rootObject(value:DisplayObject):void + { + _rootObject = value; + checkInitialized(); + } + + /** + * the bridge name + */ + public var bridgeName:String; + private var _registerComplete:Boolean = false; + + /** + * increment the reference count for an object being passed over the bridge + */ + public function incRef(objId:int):void + { + if(refMap[objId] == null) { + //the object is being created; we now add it to the map and set its refCount = 1 + refMap[objId] = 1; + } else { + refMap[objId] = refMap[objId] +1; + } + } + + /** + * when an object has been completely passed to JS its reference count is decreased with 1 + */ + public function releaseRef(objId:int):void + { + if(refMap[objId] != null) + { + var newRefVal:int = refMap[objId] - 1; + // if the object exists in the referenceMap and its count equals or has dropped under 0 we clean it up + if(refMap[objId] != null && newRefVal <= 0) + { + delete refMap[objId]; + delete localInstanceMap[objId]; + } + else + { + refMap[objId] = newRefVal; + } + } + } + + /** + * attaches the callbacks to external interface + */ + public function initializeCallbacks():void + { + if (ExternalInterface.available == false) + { + return; + } + + ExternalInterface.addCallback("getRoot", js_getRoot); + ExternalInterface.addCallback("getPropFromAS", js_getPropFromAS); + ExternalInterface.addCallback("setPropInAS", js_setPropertyInAS); + ExternalInterface.addCallback("invokeASMethod", js_invokeMethod); + ExternalInterface.addCallback("invokeASFunction", js_invokeFunction); + ExternalInterface.addCallback("releaseASObjects", js_releaseASObjects); + ExternalInterface.addCallback("create", js_create); + ExternalInterface.addCallback("releaseNamedASObject",js_releaseNamedASObject); + ExternalInterface.addCallback("incRef", incRef); + ExternalInterface.addCallback("releaseRef", releaseRef); + } + + private var _rootObject:DisplayObject; + + private var _document:DisplayObject; + + /** + * called to check whether the bridge has been initialized for the specified document/id pairs + */ + public function initialized(document:Object, id:String):void + { + _document = (document as DisplayObject); + + if (_document != null) + { + checkInitialized(); + } + } + + private function get baseObject():DisplayObject + { + return (rootObject == null)? _document:rootObject; + } + + + private function checkInitialized():void + { + if(_initChecked== true) + { + return; + } + _initChecked = true; + + // oops! timing error. Player team is working on it. + var t:Timer = new Timer(200,1); + t.addEventListener(TimerEvent.TIMER,auxCheckInitialized); + t.start(); + } + + /** + * auxiliary initialization check that is called after the timing has occurred + */ + private function auxCheckInitialized(e:Event):void + { + + var bCanGetParams:Boolean = true; + + try + { + var params:Object = baseObject.root.loaderInfo.parameters; + } + catch (e:Error) + { + bCanGetParams = false; + } + + if (bCanGetParams == false) + { + var t:Timer = new Timer(100); + var timerFunc:Function = function(e:TimerEvent):void + { + if(baseObject.root != null) + { + try + { + bCanGetParams = true; + var params:Object = baseObject.root.loaderInfo.parameters; + } + catch (err:Error) + { + bCanGetParams = false; + } + if (bCanGetParams) + { + t.removeEventListener(TimerEvent.TIMER, timerFunc); + t.stop(); + dispatchInit(); + } + } + } + t.addEventListener(TimerEvent.TIMER, timerFunc); + t.start(); + } + else + { + dispatchInit(); + } + } + + /** + * call into JS to annunce that the bridge is ready to be used + */ + private function dispatchInit(e:Event = null):void + { + if(_registerComplete == true) + { + return; + } + + if (ExternalInterface.available == false) + { + return; + } + + if (bridgeName == null) + { + bridgeName = baseObject.root.loaderInfo.parameters["bridgeName"]; + + if(bridgeName == null) + { + bridgeName = "flash"; + } + } + + _registerComplete = ExternalInterface.call("FABridge__bridgeInitialized", [bridgeName]); + dispatchEvent(new Event(FABridge.INITIALIZED)); + } + + // serialization/deserialization + + /** serializes a value for transfer across the bridge. primitive types are left as is. Arrays are left as arrays, but individual + * values in the array are serialized according to their type. Functions and class instances are inserted into a hash table and sent + * across as keys into the table. + * + * For class instances, if the instance has been sent before, only its id is passed. If This is the first time the instance has been sent, + * a ref descriptor is sent associating the id with a type string. If this is the first time any instance of that type has been sent + * across, a descriptor indicating methods, properties, and variables of the type is also sent across + */ + public function serialize(value:*, keep_refs:Boolean=false):* + { + var result:* = {}; + result.newTypes = []; + result.newRefs = {}; + + if (value is Number || value is Boolean || value is String || value == null || value == undefined || value is int || value is uint) + { + result = value; + } + else if (value is Array) + { + result = []; + for(var i:int = 0; i < value.length; i++) + { + result[i] = serialize(value[i], keep_refs); + } + } + else if (value is Function) + { + // serialize a class + result.type = TYPE_ASFUNCTION; + result.value = getFunctionID(value, true); + } + else if (getQualifiedClassName(value) == "Object") + { + result.type = TYPE_ANONYMOUS; + result.value = value; + } + else + { + // serialize a class + result.type = TYPE_ASINSTANCE; + // make sure the type info is available + var className:String = getQualifiedClassName(value); + + var serializer:Function = customSerializersMap[className]; + + // try looking up the serializer under an alternate name + if (serializer == null) + { + if (className.indexOf('$') > 0) + { + var split:int = className.lastIndexOf(':'); + if (split > 0) + { + var alternate:String = className.substring(split+1); + serializer = customSerializersMap[alternate]; + } + } + } + + if (serializer != null) + { + return serializer.apply(null, [value, keep_refs]); + } + else + { + if (retrieveCachedTypeDescription(className, false) == null) + { + try + { + result.newTypes.push(retrieveCachedTypeDescription(className, true)); + } + catch(err:Error) + { + var interfaceInfo:XMLList = describeType(value).implementsInterface; + for each (var interf:XML in interfaceInfo) + { + className = interf.@type.toString(); + if (retrieveCachedTypeDescription(className, false) == null){ + result.newTypes.push(retrieveCachedTypeDescription(className, true)); + } //end if push new data type + + } //end for going through interfaces + var baseClass:String = describeType(value).@base.toString(); + if (retrieveCachedTypeDescription(baseClass, false) == null){ + result.newTypes.push(retrieveCachedTypeDescription(baseClass, true)); + } //end if push new data type + } + } + + // make sure the reference is known + var objRef:Number = getRef(value, false); + var should_keep_ref:Boolean = false; + if (isNaN(objRef)) + { + //create the reference if necessary + objRef = getRef(value, true); + should_keep_ref = true; + } + + result.newRefs[objRef] = className; + //trace("serializing new reference: " + className + " with value" + value); + + //the result is a getProperty / invokeMethod call. How can we know how much you will need the object ? + if (keep_refs && should_keep_ref) { + incRef(objRef); + } + result.value = objRef; + } + } + return result; + } + + /** + * deserializes a value passed in from javascript. See serialize for details on how values are packed and + * unpacked for transfer across the bridge. + */ + public function deserialize(valuePackage:*):* + { + var result:*; + if (valuePackage is Number || valuePackage is Boolean || valuePackage is String || valuePackage === null || valuePackage === undefined || valuePackage is int || valuePackage is uint) + { + result = valuePackage; + } + else if(valuePackage is Array) + { + result = []; + for (var i:int = 0; i < valuePackage.length; i++) + { + result[i] = deserialize(valuePackage[i]); + } + } + else if (valuePackage.type == FABridge.TYPE_JSFUNCTION) + { + result = getRemoteFunctionProxy(valuePackage.value, true); + } + else if (valuePackage.type == FABridge.TYPE_ASFUNCTION) + { + throw new Error("as functions can't be passed back to as yet"); + } + else if (valuePackage.type == FABridge.TYPE_ASINSTANCE) + { + result = resolveRef(valuePackage.value); + } + else if (valuePackage.type == FABridge.TYPE_ANONYMOUS) + { + result = valuePackage.value; + } + return result; + } + + public function addCustomSerialization(className:String, serializationFunction:Function):void + { + customSerializersMap[className] = serializationFunction; + } + + + // type management + + /** + * retrieves a type description for the type indicated by className, building one and caching it if necessary + */ + public function retrieveCachedTypeDescription(className:String, createifNecessary:Boolean):Object + { + if(localTypeMap[className] == null && createifNecessary == true) + { + localTypeMap[className] = buildTypeDescription(className); + } + return localTypeMap[className]; + } + + public function addCachedTypeDescription(className:String, desc:Object):Object + { + if (localTypeMap[className] == null) + { + localTypeMap[className] = desc; + } + return localTypeMap[className]; + } + + /** + * builds a type description for the type indiciated by className + */ + public function buildTypeDescription(className:String):Object + { + var desc:Object = {}; + + className = className.replace(/::/,"."); + + var objClass:Class = Class(ApplicationDomain.currentDomain.getDefinition(className)); + + var xData:XML = describeType(objClass); + + desc.name = xData.@name.toString(); + + var methods:Array = []; + var xMethods:XMLList = xData.factory.method; + for (var i:int = 0; i < xMethods.length(); i++) + { + methods.push(xMethods[i].@name.toString()); + } + desc.methods = methods; + + var accessors:Array = []; + var xAcc:XMLList = xData.factory.accessor; + for (i = 0; i < xAcc.length(); i++) + { + accessors.push(xAcc[i].@name.toString()); + } + xAcc = xData.factory.variable; + for (i = 0; i < xAcc.length(); i++) + { + accessors.push(xAcc[i].@name.toString()); + } + desc.accessors = accessors; + + return desc; + } + +// instance mgmt + + /** + * resolves an instance id passed from JS to an instance previously cached for representing in JS + */ + private function resolveRef(objRef:Number):Object + { + try + { + return (objRef == -1)? baseObject : localInstanceMap[objRef]; + } + catch(e:Error) + { + return serialize("__FLASHERROR__"+"||"+e.message); + } + + return (objRef == -1)? baseObject : localInstanceMap[objRef]; + } + + /** + * returns an id associated with the object provided for passing across the bridge to JS + */ + public function getRef(obj:Object, createIfNecessary:Boolean):Number + { + try + { + var ref:Number; + + if (createIfNecessary) + { + var newRef:Number = nextID++; + localInstanceMap[newRef] = obj; + ref = newRef; + } + else + { + for (var key:* in localInstanceMap) + { + if (localInstanceMap[key] === obj) + { + ref = key; + break; + } + } + } + } + catch(e:Error) + { + return serialize("__FLASHERROR__"+"||"+e.message) + } + + return ref; + } + + + // function management + + /** + * resolves a function ID passed from JS to a local function previously cached for representation in JS + */ + private function resolveFunctionID(funcID:Number):Function + { + return localFunctionMap[funcID]; + } + + /** + * associates a unique ID with a local function suitable for passing across the bridge to proxy in Javascript + */ + public function getFunctionID(f:Function, createIfNecessary:Boolean):Number + { + var ref:Number; + + if (createIfNecessary) + { + var newID:Number = nextID++; + localFunctionMap[newID] = f; + ref = newID; + } + else + { + for (var key:* in localFunctionMap) + { + if (localFunctionMap[key] === f) { + ref = key; + } + break; + } + } + + return ref; + } + + /** + * returns a proxy function that represents a function defined in javascript. This function can be called syncrhonously, and will + * return any values returned by the JS function + */ + public function getRemoteFunctionProxy(functionID:Number, createIfNecessary:Boolean):Function + { + try + { + if (remoteFunctionCache[functionID] == null) + { + remoteFunctionCache[functionID] = function(...args):* + { + var externalArgs:Array = args.concat(); + externalArgs.unshift(functionID); + var serializedArgs:* = serialize(externalArgs, true); + + if(checkToThrowLater(serializedArgs[1])) + { + setTimeout(function a():* { + try { + var retVal:* = ExternalInterface.call("FABridge__invokeJSFunction", serializedArgs); + for(var i:int = 0; i 0) + { + this.dispatchEvent(event); + } + } + this.buffer = null; + } + + private function redirectConnectEvent():void + { + super.removeEventListener(Event.CONNECT, onConnect); + var deferredEventHandler:Object = this.deferredEventHandlers[Event.CONNECT]; + if (deferredEventHandler != null) + { + super.addEventListener(Event.CONNECT, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference); + } + } + + private function redirectSocketDataEvent():void + { + super.removeEventListener(ProgressEvent.SOCKET_DATA, onSocketData); + var deferredEventHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA]; + if (deferredEventHandler != null) + { + super.addEventListener(ProgressEvent.SOCKET_DATA, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference); + } + } + + public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int=0.0, useWeakReference:Boolean=false):void + { + if (type == Event.CONNECT || type == ProgressEvent.SOCKET_DATA) + { + this.deferredEventHandlers[type] = {listener:listener,useCapture:useCapture, priority:priority, useWeakReference:useWeakReference}; + } + else + { + super.addEventListener(type, listener, useCapture, priority, useWeakReference); + } + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as b/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as new file mode 100644 index 00000000..e5d9c4a4 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as @@ -0,0 +1,375 @@ +package com.gsolo.encryption { + public class MD5 { + /* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + * + * Converted to AS3 By Geoffrey Williams + */ + + /* + * Configurable variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + */ + + public static const HEX_FORMAT_LOWERCASE:uint = 0; + public static const HEX_FORMAT_UPPERCASE:uint = 1; + + public static const BASE64_PAD_CHARACTER_DEFAULT_COMPLIANCE:String = ""; + public static const BASE64_PAD_CHARACTER_RFC_COMPLIANCE:String = "="; + + public static var hexcase:uint = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ + public static var b64pad:String = ""; /* base-64 pad character. "=" for strict RFC compliance */ + + public static function encrypt (string:String):String { + return hex_md5 (string); + } + + /* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ + public static function hex_md5 (string:String):String { + return rstr2hex (rstr_md5 (str2rstr_utf8 (string))); + } + + public static function b64_md5 (string:String):String { + return rstr2b64 (rstr_md5 (str2rstr_utf8 (string))); + } + + public static function any_md5 (string:String, encoding:String):String { + return rstr2any (rstr_md5 (str2rstr_utf8 (string)), encoding); + } + public static function hex_hmac_md5 (key:String, data:String):String { + return rstr2hex (rstr_hmac_md5 (str2rstr_utf8 (key), str2rstr_utf8 (data))); + } + public static function b64_hmac_md5 (key:String, data:String):String { + return rstr2b64 (rstr_hmac_md5 (str2rstr_utf8 (key), str2rstr_utf8 (data))); + } + public static function any_hmac_md5 (key:String, data:String, encoding:String):String { + return rstr2any(rstr_hmac_md5(str2rstr_utf8(key), str2rstr_utf8(data)), encoding); + } + + /* + * Perform a simple self-test to see if the VM is working + */ + public static function md5_vm_test ():Boolean { + return hex_md5 ("abc") == "900150983cd24fb0d6963f7d28e17f72"; + } + + /* + * Calculate the MD5 of a raw string + */ + public static function rstr_md5 (string:String):String { + return binl2rstr (binl_md5 (rstr2binl (string), string.length * 8)); + } + + /* + * Calculate the HMAC-MD5, of a key and some data (raw strings) + */ + public static function rstr_hmac_md5 (key:String, data:String):String { + var bkey:Array = rstr2binl (key); + if (bkey.length > 16) bkey = binl_md5 (bkey, key.length * 8); + + var ipad:Array = new Array(16), opad:Array = new Array(16); + for(var i:Number = 0; i < 16; i++) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + + var hash:Array = binl_md5 (ipad.concat (rstr2binl (data)), 512 + data.length * 8); + return binl2rstr (binl_md5 (opad.concat (hash), 512 + 128)); + } + + /* + * Convert a raw string to a hex string + */ + public static function rstr2hex (input:String):String { + var hex_tab:String = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + var output:String = ""; + var x:Number; + for(var i:Number = 0; i < input.length; i++) { + x = input.charCodeAt(i); + output += hex_tab.charAt((x >>> 4) & 0x0F) + + hex_tab.charAt( x & 0x0F); + } + return output; + } + + /* + * Convert a raw string to a base-64 string + */ + public static function rstr2b64 (input:String):String { + var tab:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var output:String = ""; + var len:Number = input.length; + for(var i:Number = 0; i < len; i += 3) { + var triplet:Number = (input.charCodeAt(i) << 16) + | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) + | (i + 2 < len ? input.charCodeAt(i+2) : 0); + for(var j:Number = 0; j < 4; j++) { + if(i * 8 + j * 6 > input.length * 8) output += b64pad; + else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); + } + } + return output; + } + + /* + * Convert a raw string to an arbitrary string encoding + */ + public static function rstr2any(input:String, encoding:String):String { + var divisor:Number = encoding.length; + var remainders:Array = []; + var i:Number, q:Number, x:Number, quotient:Array; + + /* Convert to an array of 16-bit big-endian values, forming the dividend */ + var dividend:Array = new Array(input.length / 2); + for(i = 0; i < dividend.length; i++) { + dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); + } + + /* + * Repeatedly perform a long division. The binary array forms the dividend, + * the length of the encoding is the divisor. Once computed, the quotient + * forms the dividend for the next step. We stop when the dividend is zero. + * All remainders are stored for later use. + */ + while(dividend.length > 0) { + quotient = []; + x = 0; + for(i = 0; i < dividend.length; i++) { + x = (x << 16) + dividend[i]; + q = Math.floor(x / divisor); + x -= q * divisor; + if(quotient.length > 0 || q > 0) + quotient[quotient.length] = q; + } + remainders[remainders.length] = x; + dividend = quotient; + } + + /* Convert the remainders to the output string */ + var output:String = ""; + for(i = remainders.length - 1; i >= 0; i--) + output += encoding.charAt (remainders[i]); + + return output; + } + + /* + * Encode a string as utf-8. + * For efficiency, this assumes the input is valid utf-16. + */ + public static function str2rstr_utf8 (input:String):String { + var output:String = ""; + var i:Number = -1; + var x:Number, y:Number; + + while(++i < input.length) { + /* Decode utf-16 surrogate pairs */ + x = input.charCodeAt(i); + y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0; + if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { + x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); + i++; + } + + /* Encode output as utf-8 */ + if(x <= 0x7F) + output += String.fromCharCode(x); + else if(x <= 0x7FF) + output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), + 0x80 | ( x & 0x3F)); + else if(x <= 0xFFFF) + output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), + 0x80 | ((x >>> 6 ) & 0x3F), + 0x80 | ( x & 0x3F)); + else if(x <= 0x1FFFFF) + output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), + 0x80 | ((x >>> 12) & 0x3F), + 0x80 | ((x >>> 6 ) & 0x3F), + 0x80 | ( x & 0x3F)); + } + return output; + } + + /* + * Encode a string as utf-16 + */ + public static function str2rstr_utf16le (input:String):String { + var output:String = ""; + for(var i:Number = 0; i < input.length; i++) + output += String.fromCharCode( input.charCodeAt(i) & 0xFF, + (input.charCodeAt(i) >>> 8) & 0xFF); + return output; + } + + public static function str2rstr_utf16be (input:String):String { + var output:String = ""; + for(var i:Number = 0; i < input.length; i++) + output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, + input.charCodeAt(i) & 0xFF); + return output; + } + + /* + * Convert a raw string to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + public static function rstr2binl (input:String):Array { + var output:Array = new Array(input.length >> 2); + for(var i:Number = 0; i < output.length; i++) + output[i] = 0; + for(i = 0; i < input.length * 8; i += 8) + output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); + return output; + } + + /* + * Convert an array of little-endian words to a string + */ + public static function binl2rstr (input:Array):String { + var output:String = ""; + for(var i:Number = 0; i < input.length * 32; i += 8) + output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); + return output; + } + + /* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + public static function binl_md5 (x:Array, len:Number):Array { + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a:Number = 1732584193; + var b:Number = -271733879; + var c:Number = -1732584194; + var d:Number = 271733878; + + for(var i:Number = 0; i < x.length; i += 16) { + var olda:Number = a; + var oldb:Number = b; + var oldc:Number = c; + var oldd:Number = d; + + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return [a, b, c, d]; + } + + /* + * These functions implement the four basic operations the algorithm uses. + */ + public static function md5_cmn (q:Number, a:Number, b:Number, x:Number, s:Number, t:Number):Number { + return safe_add (bit_rol (safe_add (safe_add (a, q), safe_add(x, t)), s), b); + } + public static function md5_ff (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number { + return md5_cmn ((b & c) | ((~b) & d), a, b, x, s, t); + } + public static function md5_gg (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number { + return md5_cmn ((b & d) | (c & (~d)), a, b, x, s, t); + } + public static function md5_hh (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number { + return md5_cmn (b ^ c ^ d, a, b, x, s, t); + } + public static function md5_ii (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number { + return md5_cmn (c ^ (b | (~d)), a, b, x, s, t); + } + + /* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + public static function safe_add (x:Number, y:Number):Number { + var lsw:Number = (x & 0xFFFF) + (y & 0xFFFF); + var msw:Number = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } + + /* + * Bitwise rotate a 32-bit number to the left. + */ + public static function bit_rol (num:Number, cnt:Number):Number { + return (num << cnt) | (num >>> (32 - cnt)); + } + + } +} diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as new file mode 100644 index 00000000..32ec97a2 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as @@ -0,0 +1,287 @@ +/** + * Crypto + * + * An abstraction layer to instanciate our crypto algorithms + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto +{ + import com.hurlant.crypto.hash.HMAC; + import com.hurlant.crypto.hash.MAC; + import com.hurlant.crypto.hash.IHash; + import com.hurlant.crypto.hash.MD2; + import com.hurlant.crypto.hash.MD5; + import com.hurlant.crypto.hash.SHA1; + import com.hurlant.crypto.hash.SHA224; + import com.hurlant.crypto.hash.SHA256; + import com.hurlant.crypto.prng.ARC4; + import com.hurlant.crypto.rsa.RSAKey; + import com.hurlant.crypto.symmetric.AESKey; + import com.hurlant.crypto.symmetric.BlowFishKey; + import com.hurlant.crypto.symmetric.CBCMode; + import com.hurlant.crypto.symmetric.CFB8Mode; + import com.hurlant.crypto.symmetric.CFBMode; + import com.hurlant.crypto.symmetric.CTRMode; + import com.hurlant.crypto.symmetric.DESKey; + import com.hurlant.crypto.symmetric.ECBMode; + import com.hurlant.crypto.symmetric.ICipher; + import com.hurlant.crypto.symmetric.IMode; + import com.hurlant.crypto.symmetric.IPad; + import com.hurlant.crypto.symmetric.ISymmetricKey; + import com.hurlant.crypto.symmetric.IVMode; + import com.hurlant.crypto.symmetric.NullPad; + import com.hurlant.crypto.symmetric.OFBMode; + import com.hurlant.crypto.symmetric.PKCS5; + import com.hurlant.crypto.symmetric.SimpleIVMode; + import com.hurlant.crypto.symmetric.TripleDESKey; + import com.hurlant.crypto.symmetric.XTeaKey; + import com.hurlant.util.Base64; + + import flash.utils.ByteArray; + + /** + * A class to make it easy to use the rest of the framework. + * As a side-effect, using this class will cause most of the framework + * to be linked into your application, which is not always what you want. + * + * If you want to optimize your download size, don't use this class. + * (But feel free to read it to get ideas on how to get the algorithm you want.) + */ + public class Crypto + { + private var b64:Base64; // we don't use it, but we want the swc to include it, so cheap trick. + + public function Crypto(){ + } + + /** + * Things that should work, among others: + * "aes" + * "aes-128-ecb" + * "aes-128-cbc" + * "aes-128-cfb" + * "aes-128-cfb8" + * "aes-128-ofb" + * "aes-192-cfb" + * "aes-256-ofb" + * "blowfish-cbc" + * "des-ecb" + * "xtea" + * "xtea-ecb" + * "xtea-cbc" + * "xtea-cfb" + * "xtea-cfb8" + * "xtea-ofb" + * "rc4" + * "simple-aes-cbc" + */ + public static function getCipher(name:String, key:ByteArray, pad:IPad=null):ICipher { + // split name into an array. + var keys:Array = name.split("-"); + switch (keys[0]) { + /** + * "simple" is a special case. It means: + * "If using an IV mode, prepend the IV to the ciphertext" + */ + case "simple": + keys.shift(); + name = keys.join("-"); + var cipher:ICipher = getCipher(name, key, pad); + if (cipher is IVMode) { + return new SimpleIVMode(cipher as IVMode); + } else { + return cipher; + } + /** + * we support both "aes-128" and "aes128" + * Technically, you could use "aes192-128", but you'd + * only be hurting yourself. + */ + case "aes": + case "aes128": + case "aes192": + case "aes256": + keys.shift(); + if (key.length*8==keys[0]) { + // support for "aes-128-..." and such. + keys.shift(); + } + return getMode(keys[0], new AESKey(key), pad); + break; + case "bf": + case "blowfish": + keys.shift(); + return getMode(keys[0], new BlowFishKey(key), pad); + /** + * des-ede and des-ede3 are both equivalent to des3. + * the choice between 2tdes and 3tdes is made based + * on the length of the key provided. + */ + case "des": + keys.shift(); + if (keys[0]!="ede" && keys[0]!="ede3") { + return getMode(keys[0], new DESKey(key), pad); + } + if (keys.length==1) { + keys.push("ecb"); // default mode for 2tdes and 3tdes with openssl enc + } + // fall-through to triple des + case "3des": + case "des3": + keys.shift(); + return getMode(keys[0], new TripleDESKey(key), pad); + case "xtea": + keys.shift(); + return getMode(keys[0], new XTeaKey(key), pad); + break; + /** + * Technically, you could say "rc4-128" or whatever, + * but really, the length of the key is what counts here. + */ + case "rc4": + keys.shift(); + return new ARC4(key); + break; + } + return null; + } + + /** + * Returns the size of a key for a given cipher identifier. + */ + public static function getKeySize(name:String):uint { + var keys:Array = name.split("-"); + switch (keys[0]) { + case "simple": + keys.shift(); + return getKeySize(keys.join("-")); + case "aes128": + return 16; + case "aes192": + return 24; + case "aes256": + return 32; + case "aes": + keys.shift(); + return parseInt(keys[0])/8; + case "bf": + case "blowfish": + return 16; + case "des": + keys.shift(); + switch (keys[0]) { + case "ede": + return 16; + case "ede3": + return 24; + default: + return 8; + } + case "3des": + case "des3": + return 24; + case "xtea": + return 8; + case "rc4": + if (parseInt(keys[1])>0) { + return parseInt(keys[1])/8; + } + return 16; // why not. + } + return 0; // unknown; + } + + private static function getMode(name:String, alg:ISymmetricKey, padding:IPad=null):IMode { + switch (name) { + case "ecb": + return new ECBMode(alg, padding); + case "cfb": + return new CFBMode(alg, padding); + case "cfb8": + return new CFB8Mode(alg, padding); + case "ofb": + return new OFBMode(alg, padding); + case "ctr": + return new CTRMode(alg, padding); + case "cbc": + default: + return new CBCMode(alg, padding); + } + } + + /** + * Things that should work: + * "md5" + * "sha" + * "sha1" + * "sha224" + * "sha256" + */ + public static function getHash(name:String):IHash { + switch(name) { + case "md2": + return new MD2; + case "md5": + return new MD5; + case "sha": // let's hope you didn't mean sha-0 + case "sha1": + return new SHA1; + case "sha224": + return new SHA224; + case "sha256": + return new SHA256; + } + return null; + } + + /** + * Things that should work: + * "sha1" + * "md5-64" + * "hmac-md5-96" + * "hmac-sha1-128" + * "hmac-sha256-192" + * etc. + */ + public static function getHMAC(name:String):HMAC { + var keys:Array = name.split("-"); + if (keys[0]=="hmac") keys.shift(); + var bits:uint = 0; + if (keys.length>1) { + bits = parseInt(keys[1]); + } + return new HMAC(getHash(keys[0]), bits); + } + + + public static function getMAC(name:String):MAC { + + var keys:Array = name.split("-"); + if (keys[0]=="mac") keys.shift(); + var bits:uint = 0; + if (keys.length > 1) { + bits = parseInt(keys[1]); + } + return new MAC(getHash(keys[0]), bits); + } + + + public static function getPad(name:String):IPad { + switch(name) { + case "null": + return new NullPad; + case "pkcs5": + default: + return new PKCS5; + } + } + + /** mostly useless. + */ + public static function getRSA(E:String, M:String):RSAKey { + return RSAKey.parsePublicKey(M,E); + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as new file mode 100755 index 00000000..cc2e2697 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as @@ -0,0 +1,3235 @@ +/* THIS IS A GENERATED FILE */ +/** + * MozillaRootCertificates + * + * A list of built-in Certificate Authorities, + * pilfered from Mozilla. + * + * See certs/tool/grabRootCAs.pl for details. + * + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.cert { + public class MozillaRootCertificates extends X509CertificateCollection { + public function MozillaRootCertificates() { + super.addPEMCertificate("Verisign/RSA Secure Server CA", + // X500 Subject, for lookups. + "MF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UE"+ + "CxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG\n"+ + "A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD\n"+ + "VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0\n"+ + "MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV\n"+ + "BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy\n"+ + "dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ\n"+ + "ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII\n"+ + "0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI\n"+ + "uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI\n"+ + "hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3\n"+ + "YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc\n"+ + "1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GTE CyberTrust Root CA", + // X500 Subject, for lookups. + "MEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBD"+ + "eWJlclRydXN0IFJvb3Q=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD\n"+ + "VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv\n"+ + "b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV\n"+ + "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU\n"+ + "cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv\n"+ + "RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M\n"+ + "ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5\n"+ + "1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz\n"+ + "dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl\n"+ + "IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy\n"+ + "bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GTE CyberTrust Global Root", + // X500 Subject, for lookups. + "MHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBD"+ + "eWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFs"+ + "IFJvb3Q=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD\n"+ + "VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv\n"+ + "bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv\n"+ + "b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV\n"+ + "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n"+ + "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n"+ + "b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH\n"+ + "iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS\n"+ + "r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4\n"+ + "04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r\n"+ + "GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9\n"+ + "3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P\n"+ + "lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Thawte Personal Basic CA", + // X500 Subject, for lookups. + "MIHLMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+ + "d24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl"+ + "cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUGVyc29uYWwgQmFzaWMgQ0ExKDAmBgkq"+ + "hkiG9w0BCQEWGXBlcnNvbmFsLWJhc2ljQHRoYXd0ZS5jb20=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx\n"+ + "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD\n"+ + "VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT\n"+ + "ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj\n"+ + "IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X\n"+ + "DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw\n"+ + "EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE\n"+ + "ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy\n"+ + "dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD\n"+ + "QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN\n"+ + "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53\n"+ + "dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK\n"+ + "wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7\n"+ + "G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF\n"+ + "AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7\n"+ + "c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P\n"+ + "9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Thawte Personal Premium CA", + // X500 Subject, for lookups. + "MIHPMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+ + "d24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl"+ + "cnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgG"+ + "CSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29t", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx\n"+ + "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD\n"+ + "VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT\n"+ + "ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p\n"+ + "dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv\n"+ + "bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa\n"+ + "QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY\n"+ + "BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u\n"+ + "IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl\n"+ + "bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu\n"+ + "Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs\n"+ + "Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI\n"+ + "Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD\n"+ + "ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG\n"+ + "SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH\n"+ + "b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh\n"+ + "KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Thawte Personal Freemail CA", + // X500 Subject, for lookups. + "MIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+ + "d24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl"+ + "cnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzAp"+ + "BgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx\n"+ + "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD\n"+ + "VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT\n"+ + "ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt\n"+ + "YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu\n"+ + "Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT\n"+ + "AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa\n"+ + "MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp\n"+ + "b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG\n"+ + "cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh\n"+ + "d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY\n"+ + "DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E\n"+ + "rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq\n"+ + "uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN\n"+ + "BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP\n"+ + "MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa\n"+ + "/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei\n"+ + "gQ==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Thawte Server CA", + // X500 Subject, for lookups. + "MIHEMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+ + "d24xHTAbBgNVBAoTFFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u"+ + "IFNlcnZpY2VzIERpdmlzaW9uMRkwFwYDVQQDExBUaGF3dGUgU2VydmVyIENBMSYwJAYJKoZIhvcN"+ + "AQkBFhdzZXJ2ZXItY2VydHNAdGhhd3RlLmNvbQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx\n"+ + "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD\n"+ + "VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv\n"+ + "biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm\n"+ + "MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx\n"+ + "MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT\n"+ + "DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3\n"+ + "dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl\n"+ + "cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3\n"+ + "DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD\n"+ + "gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91\n"+ + "yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX\n"+ + "L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj\n"+ + "EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG\n"+ + "7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e\n"+ + "QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ\n"+ + "qdq5snUb9kLy78fyGPmJvKP/iiMucEc=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Thawte Premium Server CA", + // X500 Subject, for lookups. + "MIHOMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+ + "d24xHTAbBgNVBAoTFFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u"+ + "IFNlcnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIgQ0ExKDAm"+ + "BgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx\n"+ + "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD\n"+ + "VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv\n"+ + "biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy\n"+ + "dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t\n"+ + "MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB\n"+ + "MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG\n"+ + "A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp\n"+ + "b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl\n"+ + "cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv\n"+ + "bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE\n"+ + "VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ\n"+ + "ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR\n"+ + "uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG\n"+ + "9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI\n"+ + "hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM\n"+ + "pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Equifax Secure CA", + // X500 Subject, for lookups. + "ME4xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3Vy"+ + "ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHk=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV\n"+ + "UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy\n"+ + "dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1\n"+ + "MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx\n"+ + "dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B\n"+ + "AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f\n"+ + "BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A\n"+ + "cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC\n"+ + "AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ\n"+ + "MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm\n"+ + "aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw\n"+ + "ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj\n"+ + "IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF\n"+ + "MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA\n"+ + "A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y\n"+ + "7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh\n"+ + "1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("ABAecom (sub., Am. Bankers Assn.) Root CA", + // X500 Subject, for lookups. + "MIGJMQswCQYDVQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNV"+ + "BAoTDkFCQS5FQ09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcN"+ + "AQkBFhVhZG1pbkBkaWdzaWd0cnVzdC5jb20=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw\n"+ + "gYkxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3Rv\n"+ + "bjEXMBUGA1UEChMOQUJBLkVDT00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJv\n"+ + "b3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWluQGRpZ3NpZ3RydXN0LmNvbTAeFw05\n"+ + "OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYDVQQGEwJVUzELMAkG\n"+ + "A1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5FQ09N\n"+ + "LCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkB\n"+ + "FhVhZG1pbkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n"+ + "ggEKAoIBAQCx0xHgeVVDBwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM\n"+ + "0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1jVv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFG\n"+ + "PR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNfWiKX7BmbwQVo/ea3qZGU\n"+ + "LOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtxA6k4ShZs\n"+ + "iSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU\n"+ + "+/94Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYB\n"+ + "Af8CAQgwDQYJKoZIhvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0k\n"+ + "qS8Kfv2kRLD4VAe9G52dyntQJHsRW0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOir\n"+ + "vRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJhkoHWG9YA8A6eKHegTYjHInYZ\n"+ + "w8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm/lowdiT/QHI8\n"+ + "eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/\n"+ + "O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Digital Signature Trust Co. Global CA 1", + // X500 Subject, for lookups. + "MEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xETAP"+ + "BgNVBAsTCERTVENBIEUx", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV\n"+ + "UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL\n"+ + "EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ\n"+ + "BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x\n"+ + "ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg\n"+ + "bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ\n"+ + "j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV\n"+ + "Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG\n"+ + "SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx\n"+ + "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI\n"+ + "RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw\n"+ + "MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5\n"+ + "fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i\n"+ + "+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG\n"+ + "SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN\n"+ + "QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+\n"+ + "gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Digital Signature Trust Co. Global CA 3", + // X500 Subject, for lookups. + "MEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xETAP"+ + "BgNVBAsTCERTVENBIEUy", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV\n"+ + "UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL\n"+ + "EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ\n"+ + "BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x\n"+ + "ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/\n"+ + "k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso\n"+ + "LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o\n"+ + "TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG\n"+ + "SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx\n"+ + "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI\n"+ + "RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3\n"+ + "MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C\n"+ + "TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5\n"+ + "WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG\n"+ + "SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR\n"+ + "xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL\n"+ + "B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Digital Signature Trust Co. Global CA 2", + // X500 Subject, for lookups. + "MIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx"+ + "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDEx"+ + "FjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNv"+ + "bQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw\n"+ + "CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp\n"+ + "dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE\n"+ + "CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B\n"+ + "CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx\n"+ + "ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO\n"+ + "U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0\n"+ + "IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx\n"+ + "ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN\n"+ + "AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf\n"+ + "WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK\n"+ + "xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE\n"+ + "zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F\n"+ + "5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv\n"+ + "OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG\n"+ + "9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz\n"+ + "ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME\n"+ + "lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG\n"+ + "Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q\n"+ + "gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k\n"+ + "Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Digital Signature Trust Co. Global CA 4", + // X500 Subject, for lookups. + "MIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx"+ + "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIx"+ + "FjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNv"+ + "bQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw\n"+ + "CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp\n"+ + "dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE\n"+ + "CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B\n"+ + "CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy\n"+ + "MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO\n"+ + "U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0\n"+ + "IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx\n"+ + "ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN\n"+ + "AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV\n"+ + "p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw\n"+ + "BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl\n"+ + "5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi\n"+ + "3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+\n"+ + "QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG\n"+ + "9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ\n"+ + "2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN\n"+ + "I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL\n"+ + "553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q\n"+ + "10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN\n"+ + "uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 1 Public Primary Certification Authority", + // X500 Subject, for lookups. + "MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg"+ + "MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ\n"+ + "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh\n"+ + "c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05\n"+ + "NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD\n"+ + "VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp\n"+ + "bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB\n"+ + "jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N\n"+ + "H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR\n"+ + "4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN\n"+ + "BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo\n"+ + "EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5\n"+ + "FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx\n"+ + "lA==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 2 Public Primary Certification Authority", + // X500 Subject, for lookups. + "MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg"+ + "MiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG\n"+ + "A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz\n"+ + "cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2\n"+ + "MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV\n"+ + "BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt\n"+ + "YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN\n"+ + "ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh\n"+ + "YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7\n"+ + "FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G\n"+ + "CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg\n"+ + "J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc\n"+ + "r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 3 Public Primary Certification Authority", + // X500 Subject, for lookups. + "MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg"+ + "MyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG\n"+ + "A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz\n"+ + "cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2\n"+ + "MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV\n"+ + "BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt\n"+ + "YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN\n"+ + "ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE\n"+ + "BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is\n"+ + "I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G\n"+ + "CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do\n"+ + "lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc\n"+ + "AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 1 Public Primary Certification Authority - G2", + // X500 Subject, for lookups. + "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+ + "IDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+ + "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+ + "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ\n"+ + "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh\n"+ + "c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy\n"+ + "MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp\n"+ + "emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X\n"+ + "DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw\n"+ + "FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg\n"+ + "UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo\n"+ + "YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5\n"+ + "MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB\n"+ + "AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK\n"+ + "VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm\n"+ + "Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID\n"+ + "AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J\n"+ + "h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul\n"+ + "uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68\n"+ + "DzFc6PLZ\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 2 Public Primary Certification Authority - G2", + // X500 Subject, for lookups. + "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+ + "IDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+ + "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+ + "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw\n"+ + "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns\n"+ + "YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH\n"+ + "MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y\n"+ + "aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe\n"+ + "Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX\n"+ + "MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj\n"+ + "IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx\n"+ + "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s\n"+ + "eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B\n"+ + "AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM\n"+ + "HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw\n"+ + "DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC\n"+ + "AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji\n"+ + "nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX\n"+ + "rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn\n"+ + "jBJ7xUS0rg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 3 Public Primary Certification Authority - G2", + // X500 Subject, for lookups. + "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+ + "IDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+ + "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+ + "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ\n"+ + "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh\n"+ + "c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy\n"+ + "MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp\n"+ + "emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X\n"+ + "DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw\n"+ + "FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg\n"+ + "UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo\n"+ + "YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5\n"+ + "MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB\n"+ + "AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4\n"+ + "pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0\n"+ + "13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID\n"+ + "AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk\n"+ + "U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i\n"+ + "F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY\n"+ + "oJ2daZH9\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 4 Public Primary Certification Authority - G2", + // X500 Subject, for lookups. + "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+ + "IDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+ + "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+ + "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ\n"+ + "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh\n"+ + "c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy\n"+ + "MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp\n"+ + "emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X\n"+ + "DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw\n"+ + "FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg\n"+ + "UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo\n"+ + "YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5\n"+ + "MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB\n"+ + "AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM\n"+ + "HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK\n"+ + "qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID\n"+ + "AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj\n"+ + "cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y\n"+ + "cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP\n"+ + "T8qAkbYp\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GlobalSign Root CA", + // X500 Subject, for lookups. + "MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290"+ + "IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG\n"+ + "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n"+ + "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\n"+ + "MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n"+ + "YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\n"+ + "aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\n"+ + "jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\n"+ + "xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\n"+ + "1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\n"+ + "snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\n"+ + "U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\n"+ + "9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU\n"+ + "YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B\n"+ + "AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7\n"+ + "5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q\n"+ + "gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR\n"+ + "rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7\n"+ + "ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o\n"+ + "Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GlobalSign Root CA - R2", + // X500 Subject, for lookups. + "MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWdu"+ + "MRMwEQYDVQQDEwpHbG9iYWxTaWdu", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G\n"+ + "A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp\n"+ + "Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1\n"+ + "MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG\n"+ + "A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\n"+ + "hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL\n"+ + "v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8\n"+ + "eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq\n"+ + "tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\n"+ + "C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa\n"+ + "zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB\n"+ + "mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH\n"+ + "V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n\n"+ + "bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG\n"+ + "3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs\n"+ + "J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO\n"+ + "291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS\n"+ + "ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\n"+ + "AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n"+ + "TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("ValiCert Class 1 VA", + // X500 Subject, for lookups. + "MIG7MSQwIgYDVQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD"+ + "ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAxIFBvbGljeSBWYWxpZGF0aW9uIEF1"+ + "dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5jb20vMSAwHgYJKoZIhvcNAQkB"+ + "FhFpbmZvQHZhbGljZXJ0LmNvbQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\n"+ + "IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\n"+ + "BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\n"+ + "aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\n"+ + "9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy\n"+ + "NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\n"+ + "azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\n"+ + "YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\n"+ + "Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\n"+ + "cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y\n"+ + "LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+\n"+ + "TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y\n"+ + "TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0\n"+ + "LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW\n"+ + "I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw\n"+ + "nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("ValiCert Class 2 VA", + // X500 Subject, for lookups. + "MIG7MSQwIgYDVQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD"+ + "ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAyIFBvbGljeSBWYWxpZGF0aW9uIEF1"+ + "dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5jb20vMSAwHgYJKoZIhvcNAQkB"+ + "FhFpbmZvQHZhbGljZXJ0LmNvbQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\n"+ + "IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\n"+ + "BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\n"+ + "aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\n"+ + "9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy\n"+ + "NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\n"+ + "azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\n"+ + "YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\n"+ + "Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\n"+ + "cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY\n"+ + "dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9\n"+ + "WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS\n"+ + "v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v\n"+ + "UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu\n"+ + "IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC\n"+ + "W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("RSA Root Certificate 1", + // X500 Subject, for lookups. + "MIG7MSQwIgYDVQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD"+ + "ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAzIFBvbGljeSBWYWxpZGF0aW9uIEF1"+ + "dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5jb20vMSAwHgYJKoZIhvcNAQkB"+ + "FhFpbmZvQHZhbGljZXJ0LmNvbQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\n"+ + "IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\n"+ + "BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\n"+ + "aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\n"+ + "9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy\n"+ + "NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\n"+ + "azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\n"+ + "YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\n"+ + "Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\n"+ + "cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD\n"+ + "cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs\n"+ + "2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY\n"+ + "JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE\n"+ + "Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ\n"+ + "n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A\n"+ + "PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 1 Public Primary Certification Authority - G3", + // X500 Subject, for lookups. + "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+ + "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFBy"+ + "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw\n"+ + "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl\n"+ + "cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu\n"+ + "LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT\n"+ + "aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+ + "dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD\n"+ + "VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT\n"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ\n"+ + "bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu\n"+ + "IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n"+ + "LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4\n"+ + "nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO\n"+ + "8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV\n"+ + "ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb\n"+ + "PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2\n"+ + "6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr\n"+ + "n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a\n"+ + "qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4\n"+ + "wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3\n"+ + "ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs\n"+ + "pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4\n"+ + "E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 2 Public Primary Certification Authority - G3", + // X500 Subject, for lookups. + "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+ + "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFBy"+ + "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ\n"+ + "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy\n"+ + "aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s\n"+ + "IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp\n"+ + "Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0\n"+ + "eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV\n"+ + "BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp\n"+ + "Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu\n"+ + "Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g\n"+ + "Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt\n"+ + "IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU\n"+ + "J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO\n"+ + "JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY\n"+ + "wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o\n"+ + "koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN\n"+ + "qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E\n"+ + "Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe\n"+ + "xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u\n"+ + "7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU\n"+ + "sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI\n"+ + "sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP\n"+ + "cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 3 Public Primary Certification Authority - G3", + // X500 Subject, for lookups. + "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+ + "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFBy"+ + "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw\n"+ + "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl\n"+ + "cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu\n"+ + "LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT\n"+ + "aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+ + "dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD\n"+ + "VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT\n"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ\n"+ + "bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu\n"+ + "IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n"+ + "LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b\n"+ + "N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t\n"+ + "KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu\n"+ + "kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm\n"+ + "CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ\n"+ + "Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu\n"+ + "imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te\n"+ + "2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe\n"+ + "DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC\n"+ + "/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p\n"+ + "F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt\n"+ + "TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Class 4 Public Primary Certification Authority - G3", + // X500 Subject, for lookups. + "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+ + "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFBy"+ + "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw\n"+ + "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl\n"+ + "cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu\n"+ + "LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT\n"+ + "aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+ + "dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD\n"+ + "VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT\n"+ + "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ\n"+ + "bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu\n"+ + "IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n"+ + "LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1\n"+ + "GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ\n"+ + "+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd\n"+ + "U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm\n"+ + "NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY\n"+ + "ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/\n"+ + "ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1\n"+ + "CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq\n"+ + "g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm\n"+ + "fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c\n"+ + "2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/\n"+ + "bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Entrust.net Secure Server CA", + // X500 Subject, for lookups. + "MIHDMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRy"+ + "dXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykg"+ + "MTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2Vy"+ + "dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"+ + "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"+ + "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"+ + "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"+ + "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n"+ + "MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n"+ + "ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n"+ + "b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n"+ + "bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n"+ + "U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n"+ + "A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n"+ + "I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n"+ + "wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n"+ + "AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n"+ + "oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n"+ + "BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"+ + "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n"+ + "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"+ + "b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n"+ + "dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n"+ + "MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n"+ + "E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n"+ + "MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n"+ + "hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n"+ + "95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n"+ + "2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Entrust.net Secure Personal CA", + // X500 Subject, for lookups. + "MIHJMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRy"+ + "dXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl"+ + "MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u"+ + "ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC\n"+ + "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u\n"+ + "ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh\n"+ + "Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV\n"+ + "BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe\n"+ + "Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU\n"+ + "MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D\n"+ + "bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl\n"+ + "MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq\n"+ + "RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G\n"+ + "CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo\n"+ + "6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux\n"+ + "5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm\n"+ + "AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC\n"+ + "ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50\n"+ + "cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m\n"+ + "by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp\n"+ + "IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg\n"+ + "Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg\n"+ + "KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV\n"+ + "HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E\n"+ + "BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE\n"+ + "FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA\n"+ + "BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7\n"+ + "pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz\n"+ + "wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a\n"+ + "EkP/TOYGJqibGapEPHayXOw=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Entrust.net Premium 2048 Secure Server CA", + // X500 Subject, for lookups. + "MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18y"+ + "MDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50"+ + "cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRo"+ + "b3JpdHkgKDIwNDgp", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML\n"+ + "RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp\n"+ + "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5\n"+ + "IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp\n"+ + "ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy\n"+ + "MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3\n"+ + "LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp\n"+ + "YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG\n"+ + "A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp\n"+ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq\n"+ + "K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe\n"+ + "sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX\n"+ + "MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT\n"+ + "XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/\n"+ + "HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH\n"+ + "4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA\n"+ + "vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G\n"+ + "CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA\n"+ + "WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo\n"+ + "oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ\n"+ + "h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18\n"+ + "f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN\n"+ + "B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy\n"+ + "vUxFnmG6v4SBkgPR0ml8xQ==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Baltimore CyberTrust Root", + // X500 Subject, for lookups. + "MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3Qx"+ + "IjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n"+ + "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n"+ + "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n"+ + "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n"+ + "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n"+ + "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n"+ + "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n"+ + "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n"+ + "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n"+ + "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n"+ + "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n"+ + "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n"+ + "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n"+ + "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n"+ + "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n"+ + "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n"+ + "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n"+ + "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n"+ + "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Equifax Secure Global eBusiness CA", + // X500 Subject, for lookups. + "MFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRF"+ + "cXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTE=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc\n"+ + "MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT\n"+ + "ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw\n"+ + "MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj\n"+ + "dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l\n"+ + "c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC\n"+ + "UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc\n"+ + "58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/\n"+ + "o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH\n"+ + "MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr\n"+ + "aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA\n"+ + "A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA\n"+ + "Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv\n"+ + "8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Equifax Secure eBusiness CA 1", + // X500 Subject, for lookups. + "MFMxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMSYwJAYDVQQDEx1F"+ + "cXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc\n"+ + "MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT\n"+ + "ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw\n"+ + "MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j\n"+ + "LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ\n"+ + "KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo\n"+ + "RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu\n"+ + "WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw\n"+ + "Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD\n"+ + "AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK\n"+ + "eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM\n"+ + "zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+\n"+ + "WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN\n"+ + "/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Equifax Secure eBusiness CA 2", + // X500 Subject, for lookups. + "ME4xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5FcXVpZmF4IFNlY3VyZTEmMCQGA1UECxMdRXF1aWZh"+ + "eCBTZWN1cmUgZUJ1c2luZXNzIENBLTI=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV\n"+ + "UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj\n"+ + "dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0\n"+ + "NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD\n"+ + "VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B\n"+ + "AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G\n"+ + "vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/\n"+ + "BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C\n"+ + "AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX\n"+ + "MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl\n"+ + "IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw\n"+ + "NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq\n"+ + "y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF\n"+ + "MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA\n"+ + "A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy\n"+ + "0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1\n"+ + "E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Visa International Global Root 2", + // X500 Subject, for lookups. + "MGExCzAJBgNVBAYTAlVTMQ0wCwYDVQQKEwRWSVNBMS8wLQYDVQQLEyZWaXNhIEludGVybmF0aW9u"+ + "YWwgU2VydmljZSBBc3NvY2lhdGlvbjESMBAGA1UEAxMJR1AgUm9vdCAy", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx\n"+ + "DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2\n"+ + "aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1\n"+ + "MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT\n"+ + "QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp\n"+ + "b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\n"+ + "AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX\n"+ + "ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i\n"+ + "/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU\n"+ + "58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g\n"+ + "halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E\n"+ + "1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/\n"+ + "ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG\n"+ + "MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb\n"+ + "mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ\n"+ + "kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN\n"+ + "dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ\n"+ + "ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn\n"+ + "B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("beTRUSTed Root CA", + // X500 Subject, for lookups. + "MFoxCzAJBgNVBAYTAldXMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAMTEmJlVFJVU1RlZCBS"+ + "b290IENBczEaMBgGA1UEAxMRYmVUUlVTVGVkIFJvb3QgQ0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX\n"+ + "VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD\n"+ + "QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX\n"+ + "DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl\n"+ + "ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU\n"+ + "ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT\n"+ + "CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P\n"+ + "6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM\n"+ + "jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX\n"+ + "2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N\n"+ + "R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j\n"+ + "rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV\n"+ + "HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa\n"+ + "gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1\n"+ + "bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0\n"+ + "ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy\n"+ + "YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl\n"+ + "ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl\n"+ + "cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0\n"+ + "L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx\n"+ + "CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV\n"+ + "HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ\n"+ + "KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo\n"+ + "Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2\n"+ + "jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe\n"+ + "1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5\n"+ + "mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc\n"+ + "tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("AddTrust Low-Value Services Root", + // X500 Subject, for lookups. + "MGUxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg"+ + "VFRQIE5ldHdvcmsxITAfBgNVBAMTGEFkZFRydXN0IENsYXNzIDEgQ0EgUm9vdA==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU\n"+ + "MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3\n"+ + "b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw\n"+ + "MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML\n"+ + "QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD\n"+ + "VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA\n"+ + "A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul\n"+ + "CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n\n"+ + "tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl\n"+ + "dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch\n"+ + "PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC\n"+ + "+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O\n"+ + "BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E\n"+ + "BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl\n"+ + "MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk\n"+ + "ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB\n"+ + "IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X\n"+ + "7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz\n"+ + "43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY\n"+ + "eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl\n"+ + "pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA\n"+ + "WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("AddTrust External Root", + // X500 Subject, for lookups. + "MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3Qg"+ + "RXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU\n"+ + "MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs\n"+ + "IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290\n"+ + "MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux\n"+ + "FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h\n"+ + "bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v\n"+ + "dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt\n"+ + "H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9\n"+ + "uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX\n"+ + "mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX\n"+ + "a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN\n"+ + "E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0\n"+ + "WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD\n"+ + "VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0\n"+ + "Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU\n"+ + "cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx\n"+ + "IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN\n"+ + "AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH\n"+ + "YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5\n"+ + "6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC\n"+ + "Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX\n"+ + "c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a\n"+ + "mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("AddTrust Public Services Root", + // X500 Subject, for lookups. + "MGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg"+ + "VFRQIE5ldHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU\n"+ + "MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3\n"+ + "b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx\n"+ + "MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB\n"+ + "ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV\n"+ + "BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC\n"+ + "AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV\n"+ + "6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX\n"+ + "GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP\n"+ + "dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH\n"+ + "1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF\n"+ + "62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW\n"+ + "BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw\n"+ + "AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL\n"+ + "MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU\n"+ + "cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv\n"+ + "b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6\n"+ + "IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/\n"+ + "iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao\n"+ + "GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh\n"+ + "4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm\n"+ + "XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("AddTrust Qualified Certificates Root", + // X500 Subject, for lookups. + "MGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg"+ + "VFRQIE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU\n"+ + "MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3\n"+ + "b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1\n"+ + "MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK\n"+ + "EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh\n"+ + "BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B\n"+ + "AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq\n"+ + "xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G\n"+ + "87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i\n"+ + "2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U\n"+ + "WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1\n"+ + "0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G\n"+ + "A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T\n"+ + "AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr\n"+ + "pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL\n"+ + "ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm\n"+ + "aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv\n"+ + "hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm\n"+ + "hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X\n"+ + "dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3\n"+ + "P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y\n"+ + "iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no\n"+ + "xqE=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Verisign Time Stamping Authority CA", + // X500 Subject, for lookups. + "MIGlMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0"+ + "d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9y"+ + "cGEgKGMpMDAxLDAqBgNVBAMTI1ZlcmlTaWduIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5IENB", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCB\n"+ + "wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL\n"+ + "EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n"+ + "IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1\n"+ + "dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv\n"+ + "cmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UEChMO\n"+ + "VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx\n"+ + "OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5j\n"+ + "b20vcnBhIChjKTAwMSwwKgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1\n"+ + "dGhvcml0eSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVli\n"+ + "zrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhjzCx9abQzNvQ3B5rB3UBU\n"+ + "/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6ov8uQjI11\n"+ + "S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/\n"+ + "AgEAMEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0\n"+ + "dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0\n"+ + "cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsG\n"+ + "AQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJpc2lnbi5j\n"+ + "b20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2DcIBcBlK0lRW\n"+ + "HqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea\n"+ + "w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU\n"+ + "58dzq6wf7iWbwBbtt8pb8BQ=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Thawte Time Stamping CA", + // X500 Subject, for lookups. + "MIGLMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRQwEgYDVQQHEwtEdXJiYW52"+ + "aWxsZTEPMA0GA1UEChMGVGhhd3RlMR0wGwYDVQQLExRUaGF3dGUgQ2VydGlmaWNhdGlvbjEfMB0G"+ + "A1UEAxMWVGhhd3RlIFRpbWVzdGFtcGluZyBDQQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx\n"+ + "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN\n"+ + "BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd\n"+ + "BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN\n"+ + "MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g\n"+ + "Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG\n"+ + "A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l\n"+ + "c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT\n"+ + "6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa\n"+ + "Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL\n"+ + "8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB\n"+ + "Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC\n"+ + "9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ\n"+ + "pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ\n"+ + "CayJSdM=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Entrust.net Global Secure Server CA", + // X500 Subject, for lookups. + "MIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9D"+ + "UFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRy"+ + "dXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRp"+ + "ZmljYXRpb24gQXV0aG9yaXR5", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML\n"+ + "RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu\n"+ + "Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg\n"+ + "RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl\n"+ + "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa\n"+ + "Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE\n"+ + "CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"+ + "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk\n"+ + "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"+ + "b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO\n"+ + "8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB\n"+ + "bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2\n"+ + "dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4\n"+ + "QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT\n"+ + "C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp\n"+ + "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw\n"+ + "IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy\n"+ + "ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw\n"+ + "KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD\n"+ + "VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud\n"+ + "DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2\n"+ + "fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia\n"+ + "d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF\n"+ + "JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U\n"+ + "yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Entrust.net Global Secure Personal CA", + // X500 Subject, for lookups. + "MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0dDQ0Ff"+ + "Q1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50"+ + "cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRp"+ + "b24gQXV0aG9yaXR5", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML\n"+ + "RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp\n"+ + "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw\n"+ + "IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu\n"+ + "dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy\n"+ + "MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3\n"+ + "LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp\n"+ + "YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG\n"+ + "A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n"+ + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny\n"+ + "Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0\n"+ + "iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn\n"+ + "5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd\n"+ + "BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0\n"+ + "MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy\n"+ + "ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l\n"+ + "dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh\n"+ + "dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy\n"+ + "MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY\n"+ + "MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF\n"+ + "fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w\n"+ + "AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS\n"+ + "hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/\n"+ + "GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd\n"+ + "zmVml64mXg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("AOL Time Warner Root Certification Authority 1", + // X500 Subject, for lookups. + "MIGDMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUQU9MIFRpbWUgV2FybmVyIEluYy4xHDAaBgNVBAsT"+ + "E0FtZXJpY2EgT25saW5lIEluYy4xNzA1BgNVBAMTLkFPTCBUaW1lIFdhcm5lciBSb290IENlcnRp"+ + "ZmljYXRpb24gQXV0aG9yaXR5IDE=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx\n"+ + "HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh\n"+ + "IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0\n"+ + "aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1\n"+ + "MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg\n"+ + "SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M\n"+ + "IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw\n"+ + "DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U\n"+ + "0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI\n"+ + "TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf\n"+ + "RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF\n"+ + "zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh\n"+ + "BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA\n"+ + "AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY\n"+ + "PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/\n"+ + "BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn\n"+ + "9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT\n"+ + "Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF\n"+ + "Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX\n"+ + "n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW\n"+ + "H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("AOL Time Warner Root Certification Authority 2", + // X500 Subject, for lookups. + "MIGDMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUQU9MIFRpbWUgV2FybmVyIEluYy4xHDAaBgNVBAsT"+ + "E0FtZXJpY2EgT25saW5lIEluYy4xNzA1BgNVBAMTLkFPTCBUaW1lIFdhcm5lciBSb290IENlcnRp"+ + "ZmljYXRpb24gQXV0aG9yaXR5IDI=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx\n"+ + "HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh\n"+ + "IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0\n"+ + "aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz\n"+ + "NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg\n"+ + "SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M\n"+ + "IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw\n"+ + "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ\n"+ + "7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb\n"+ + "m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY\n"+ + "xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ\n"+ + "YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq\n"+ + "JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx\n"+ + "I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz\n"+ + "kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh\n"+ + "EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S\n"+ + "Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM\n"+ + "gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu\n"+ + "rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n"+ + "FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO\n"+ + "1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu\n"+ + "h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP\n"+ + "yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q\n"+ + "7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT\n"+ + "RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/\n"+ + "ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB\n"+ + "M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ\n"+ + "my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO\n"+ + "AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT\n"+ + "9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H\n"+ + "hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5\n"+ + "fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("beTRUSTed Root CA-Baltimore Implementation", + // X500 Subject, for lookups. + "MGYxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYD"+ + "VQQDEypiZVRSVVNUZWQgUm9vdCBDQS1CYWx0aW1vcmUgSW1wbGVtZW50YXRpb24=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli\n"+ + "ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq\n"+ + "YmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAy\n"+ + "MDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UEChMJYmVUUlVTVGVk\n"+ + "MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl\n"+ + "ZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN\n"+ + "AQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i\n"+ + "805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6\n"+ + "l2Qijvj/YaOcGx6Sj8CoCd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92B\n"+ + "FODEPM2dMPgwqZfT7syj0B9fHBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+Ymp\n"+ + "kbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7\n"+ + "eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIa\n"+ + "MA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4A\n"+ + "AAEJKIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3Ig\n"+ + "dXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu\n"+ + "dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJk\n"+ + "IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmljYXRpb24g\n"+ + "UHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1l\n"+ + "bnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl\n"+ + "LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5k\n"+ + "ZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3By\n"+ + "b2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgc\n"+ + "cxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR3D8kVpgccxiIav+DR+22MA4GA1Ud\n"+ + "DwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCA\n"+ + "WXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu6\n"+ + "7RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AY\n"+ + "gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb\n"+ + "4cV97yHgjQ5dUX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9\n"+ + "CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("beTRUSTed Root CA - Entrust Implementation", + // X500 Subject, for lookups. + "MGYxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYD"+ + "VQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1wbGVtZW50YXRpb24=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli\n"+ + "ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq\n"+ + "YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy\n"+ + "MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk\n"+ + "MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl\n"+ + "ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN\n"+ + "AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO\n"+ + "K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD\n"+ + "d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj\n"+ + "DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe\n"+ + "yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt\n"+ + "VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB\n"+ + "MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI\n"+ + "KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp\n"+ + "ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug\n"+ + "b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0\n"+ + "aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu\n"+ + "dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg\n"+ + "Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0\n"+ + "cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF\n"+ + "BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz\n"+ + "L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug\n"+ + "eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv\n"+ + "b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w\n"+ + "bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw\n"+ + "ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA\n"+ + "FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw\n"+ + "qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE\n"+ + "kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ\n"+ + "5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB\n"+ + "evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz\n"+ + "ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k\n"+ + "XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh\n"+ + "xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("beTRUSTed Root CA - RSA Implementation", + // X500 Subject, for lookups. + "MGIxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMS8wLQYD"+ + "VQQDEyZiZVRSVVNUZWQgUm9vdCBDQSAtIFJTQSBJbXBsZW1lbnRhdGlvbg==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi\n"+ + "MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB\n"+ + "czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp\n"+ + "b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli\n"+ + "ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm\n"+ + "YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG\n"+ + "SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn\n"+ + "HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I\n"+ + "1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk\n"+ + "tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU\n"+ + "GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er\n"+ + "cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY\n"+ + "MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+\n"+ + "AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j\n"+ + "b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB\n"+ + "OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh\n"+ + "dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu\n"+ + "IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl\n"+ + "LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS\n"+ + "ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo\n"+ + "ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w\n"+ + "cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME\n"+ + "GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt\n"+ + "z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g\n"+ + "6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK\n"+ + "mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd\n"+ + "LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb\n"+ + "J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3\n"+ + "SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("RSA Security 2048 v3", + // X500 Subject, for lookups. + "MDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4"+ + "IFYz", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6\n"+ + "MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp\n"+ + "dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX\n"+ + "BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy\n"+ + "MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp\n"+ + "eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg\n"+ + "/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl\n"+ + "wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh\n"+ + "AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2\n"+ + "PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu\n"+ + "AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\n"+ + "BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR\n"+ + "MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc\n"+ + "HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/\n"+ + "Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+\n"+ + "f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO\n"+ + "rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch\n"+ + "6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3\n"+ + "7CAFYd4=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("RSA Security 1024 v3", + // X500 Subject, for lookups. + "MDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0"+ + "IFYz", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6\n"+ + "MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp\n"+ + "dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX\n"+ + "BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx\n"+ + "MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O\n"+ + "isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY\n"+ + "78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9\n"+ + "zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G\n"+ + "A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd\n"+ + "BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA\n"+ + "Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN\n"+ + "T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD\n"+ + "mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GeoTrust Global CA", + // X500 Subject, for lookups. + "MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVz"+ + "dCBHbG9iYWwgQ0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT\n"+ + "MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i\n"+ + "YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG\n"+ + "EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg\n"+ + "R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9\n"+ + "9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq\n"+ + "fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv\n"+ + "iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU\n"+ + "1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+\n"+ + "bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW\n"+ + "MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA\n"+ + "ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l\n"+ + "uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn\n"+ + "Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS\n"+ + "tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF\n"+ + "PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un\n"+ + "hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV\n"+ + "5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GeoTrust Global CA 2", + // X500 Subject, for lookups. + "MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVz"+ + "dCBHbG9iYWwgQ0EgMg==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW\n"+ + "MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs\n"+ + "IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG\n"+ + "EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg\n"+ + "R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A\n"+ + "PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8\n"+ + "Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL\n"+ + "TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL\n"+ + "5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7\n"+ + "S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe\n"+ + "2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n"+ + "FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap\n"+ + "EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td\n"+ + "EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv\n"+ + "/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN\n"+ + "A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0\n"+ + "abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF\n"+ + "I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz\n"+ + "4iIprn2DQKi6bA==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GeoTrust Universal CA", + // X500 Subject, for lookups. + "MEUxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR4wHAYDVQQDExVHZW9UcnVz"+ + "dCBVbml2ZXJzYWwgQ0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "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\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("GeoTrust Universal CA 2", + // X500 Subject, for lookups. + "MEcxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMSAwHgYDVQQDExdHZW9UcnVz"+ + "dCBVbml2ZXJzYWwgQ0EgMg==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW\n"+ + "MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy\n"+ + "c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD\n"+ + "VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1\n"+ + "c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\n"+ + "AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81\n"+ + "WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG\n"+ + "FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq\n"+ + "XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL\n"+ + "se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb\n"+ + "KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd\n"+ + "IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73\n"+ + "y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt\n"+ + "hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc\n"+ + "QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4\n"+ + "Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV\n"+ + "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV\n"+ + "HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ\n"+ + "KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z\n"+ + "dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ\n"+ + "L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr\n"+ + "Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo\n"+ + "ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY\n"+ + "T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz\n"+ + "GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m\n"+ + "1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV\n"+ + "OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH\n"+ + "6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX\n"+ + "QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("UTN-USER First-Network Applications", + // X500 Subject, for lookups. + "MIGjMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+ + "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+ + "dXN0LmNvbTErMCkGA1UEAxMiVVROLVVTRVJGaXJzdC1OZXR3b3JrIEFwcGxpY2F0aW9ucw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB\n"+ + "ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+ + "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+ + "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt\n"+ + "TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1\n"+ + "NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0\n"+ + "IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD\n"+ + "VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS\n"+ + "Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n"+ + "DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2\n"+ + "N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH\n"+ + "iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe\n"+ + "YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1\n"+ + "axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g\n"+ + "yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD\n"+ + "AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh\n"+ + "ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V\n"+ + "VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB\n"+ + "BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y\n"+ + "IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs\n"+ + "QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4\n"+ + "ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM\n"+ + "YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb\n"+ + "QErNaLly7HF27FSOH4UMAWr6pjisH8SE\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("America Online Root Certification Authority 1", + // X500 Subject, for lookups. + "MGMxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNBbWVyaWNhIE9ubGluZSBJbmMuMTYwNAYDVQQDEy1B"+ + "bWVyaWNhIE9ubGluZSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IDE=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc\n"+ + "MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP\n"+ + "bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2\n"+ + "MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft\n"+ + "ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg\n"+ + "Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n"+ + "ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk\n"+ + "hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym\n"+ + "1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW\n"+ + "OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb\n"+ + "2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko\n"+ + "O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw\n"+ + "AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU\n"+ + "AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n"+ + "BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF\n"+ + "Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb\n"+ + "LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir\n"+ + "oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C\n"+ + "MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds\n"+ + "sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("America Online Root Certification Authority 2", + // X500 Subject, for lookups. + "MGMxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNBbWVyaWNhIE9ubGluZSBJbmMuMTYwNAYDVQQDEy1B"+ + "bWVyaWNhIE9ubGluZSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IDI=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc\n"+ + "MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP\n"+ + "bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2\n"+ + "MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft\n"+ + "ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg\n"+ + "Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n"+ + "ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC\n"+ + "206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci\n"+ + "KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2\n"+ + "JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9\n"+ + "BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e\n"+ + "Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B\n"+ + "PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67\n"+ + "Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq\n"+ + "Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ\n"+ + "o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3\n"+ + "+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj\n"+ + "YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj\n"+ + "FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE\n"+ + "AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn\n"+ + "xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2\n"+ + "LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc\n"+ + "obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8\n"+ + "CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe\n"+ + "IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA\n"+ + "DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F\n"+ + "AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX\n"+ + "Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb\n"+ + "AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl\n"+ + "Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw\n"+ + "RY8mkaKO/qk=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Visa eCommerce Root", + // X500 Subject, for lookups. + "MGsxCzAJBgNVBAYTAlVTMQ0wCwYDVQQKEwRWSVNBMS8wLQYDVQQLEyZWaXNhIEludGVybmF0aW9u"+ + "YWwgU2VydmljZSBBc3NvY2lhdGlvbjEcMBoGA1UEAxMTVmlzYSBlQ29tbWVyY2UgUm9vdA==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr\n"+ + "MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl\n"+ + "cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv\n"+ + "bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw\n"+ + "CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h\n"+ + "dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l\n"+ + "cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h\n"+ + "2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E\n"+ + "lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV\n"+ + "ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq\n"+ + "299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t\n"+ + "vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL\n"+ + "dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD\n"+ + "AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF\n"+ + "AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR\n"+ + "zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3\n"+ + "LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd\n"+ + "7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw\n"+ + "++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt\n"+ + "398znM/jra6O1I7mT1GvFpLgXPYHDw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("TC TrustCenter, Germany, Class 2 CA", + // X500 Subject, for lookups. + "MIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgG"+ + "A1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEi"+ + "MCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlm"+ + "aWNhdGVAdHJ1c3RjZW50ZXIuZGU=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF\n"+ + "MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU\n"+ + "QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI\n"+ + "MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN\n"+ + "AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla\n"+ + "Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy\n"+ + "ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y\n"+ + "IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1\n"+ + "c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA\n"+ + "dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y\n"+ + "AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw\n"+ + "TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8\n"+ + "/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF\n"+ + "MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3\n"+ + "LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G\n"+ + "CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/\n"+ + "jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms\n"+ + "Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("TC TrustCenter, Germany, Class 3 CA", + // X500 Subject, for lookups. + "MIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgG"+ + "A1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEi"+ + "MCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlm"+ + "aWNhdGVAdHJ1c3RjZW50ZXIuZGU=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF\n"+ + "MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU\n"+ + "QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI\n"+ + "MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN\n"+ + "AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla\n"+ + "Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy\n"+ + "ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y\n"+ + "IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1\n"+ + "c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA\n"+ + "dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF\n"+ + "Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw\n"+ + "Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW\n"+ + "w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF\n"+ + "MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3\n"+ + "LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G\n"+ + "CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE\n"+ + "Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD\n"+ + "2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Certum Root CA", + // X500 Subject, for lookups. + "MD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNl"+ + "cnR1bSBDQQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM\n"+ + "MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\n"+ + "QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM\n"+ + "MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\n"+ + "QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E\n"+ + "jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo\n"+ + "ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI\n"+ + "ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu\n"+ + "Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg\n"+ + "AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7\n"+ + "HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA\n"+ + "uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa\n"+ + "TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg\n"+ + "xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q\n"+ + "CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x\n"+ + "O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs\n"+ + "6GAqm4VKQPNriiTsBhYscw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Comodo AAA Services root", + // X500 Subject, for lookups. + "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1Nh"+ + "bGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNh"+ + "dGUgU2VydmljZXM=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb\n"+ + "MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n"+ + "GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj\n"+ + "YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL\n"+ + "MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\n"+ + "BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM\n"+ + "GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP\n"+ + "ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua\n"+ + "BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe\n"+ + "3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4\n"+ + "YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR\n"+ + "rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm\n"+ + "ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU\n"+ + "oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\n"+ + "MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v\n"+ + "QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t\n"+ + "b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF\n"+ + "AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q\n"+ + "GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz\n"+ + "Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2\n"+ + "G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi\n"+ + "l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3\n"+ + "smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Comodo Secure Services root", + // X500 Subject, for lookups. + "MH4xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1Nh"+ + "bGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSQwIgYDVQQDDBtTZWN1cmUgQ2VydGlm"+ + "aWNhdGUgU2VydmljZXM=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb\n"+ + "MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n"+ + "GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp\n"+ + "ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow\n"+ + "fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G\n"+ + "A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV\n"+ + "BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB\n"+ + "BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM\n"+ + "cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S\n"+ + "HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996\n"+ + "CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk\n"+ + "3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz\n"+ + "6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV\n"+ + "HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud\n"+ + "EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv\n"+ + "Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw\n"+ + "Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww\n"+ + "DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0\n"+ + "5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj\n"+ + "Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI\n"+ + "gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ\n"+ + "aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl\n"+ + "izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Comodo Trusted Services root", + // X500 Subject, for lookups. + "MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1Nh"+ + "bGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYDVQQDDBxUcnVzdGVkIENlcnRp"+ + "ZmljYXRlIFNlcnZpY2Vz", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb\n"+ + "MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n"+ + "GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0\n"+ + "aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla\n"+ + "MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO\n"+ + "BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD\n"+ + "VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B\n"+ + "AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW\n"+ + "fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt\n"+ + "TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL\n"+ + "fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW\n"+ + "1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7\n"+ + "kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G\n"+ + "A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD\n"+ + "VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v\n"+ + "ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo\n"+ + "dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu\n"+ + "Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/\n"+ + "HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32\n"+ + "pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS\n"+ + "jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+\n"+ + "xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn\n"+ + "dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS Chained CAs root", + // X500 Subject, for lookups. + "MIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+ + "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+ + "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hh"+ + "aW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFpbmVk"+ + "IENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBz"+ + "LmVz", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+ + "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+ + "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq\n"+ + "SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD\n"+ + "VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx\n"+ + "HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNTha\n"+ + "Fw0yNTEyMjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl\n"+ + "bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg\n"+ + "cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu\n"+ + "ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD\n"+ + "QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp\n"+ + "bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP\n"+ + "aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJ\n"+ + "spQgvJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB\n"+ + "hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nB\n"+ + "Bt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8wHQYDVR0O\n"+ + "BBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCCAUGAFKGtMbH5\n"+ + "PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE\n"+ + "CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ\n"+ + "bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt\n"+ + "YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD\n"+ + "aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT\n"+ + "IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI\n"+ + "hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E\n"+ + "BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG\n"+ + "CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB\n"+ + "BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw\n"+ + "EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC\n"+ + "BglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg\n"+ + "aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlw\n"+ + "cy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMv\n"+ + "aXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3\n"+ + "dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIB\n"+ + "BwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8w\n"+ + "NwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5\n"+ + "Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5pcHMuZXMvaXBz\n"+ + "MjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz\n"+ + "L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\n"+ + "BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1W\n"+ + "WKJBGyi3leGmGpVfp3hAK+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfN\n"+ + "HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN\n"+ + "b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS CLASE1 root", + // X500 Subject, for lookups. + "MIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+ + "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+ + "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xB"+ + "U0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRp"+ + "ZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXM=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+ + "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+ + "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl\n"+ + "SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl\n"+ + "SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3\n"+ + "DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw\n"+ + "NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD\n"+ + "VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n\n"+ + "IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g\n"+ + "IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv\n"+ + "biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv\n"+ + "biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN\n"+ + "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS\n"+ + "zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS\n"+ + "YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ\n"+ + "KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb\n"+ + "adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk\n"+ + "ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE\n"+ + "BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT\n"+ + "ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC\n"+ + "LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g\n"+ + "QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g\n"+ + "QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD\n"+ + "VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr\n"+ + "BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB\n"+ + "FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC\n"+ + "AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB\n"+ + "D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp\n"+ + "ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC\n"+ + "BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito\n"+ + "dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG\n"+ + "SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D\n"+ + "TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw\n"+ + "czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov\n"+ + "L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq\n"+ + "MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu\n"+ + "Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy\n"+ + "Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v\n"+ + "Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK\n"+ + "Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj\n"+ + "V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+\n"+ + "hjM+5i9Ibq9UkE6tsSU=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS CLASE3 root", + // X500 Subject, for lookups. + "MIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+ + "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+ + "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xB"+ + "U0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRp"+ + "ZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXM=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+ + "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+ + "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl\n"+ + "SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl\n"+ + "SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3\n"+ + "DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx\n"+ + "MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD\n"+ + "VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n\n"+ + "IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g\n"+ + "IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv\n"+ + "biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv\n"+ + "biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN\n"+ + "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ\n"+ + "H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY\n"+ + "8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr\n"+ + "SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj\n"+ + "mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk\n"+ + "ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE\n"+ + "BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT\n"+ + "ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC\n"+ + "LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g\n"+ + "QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g\n"+ + "QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD\n"+ + "VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr\n"+ + "BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB\n"+ + "FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC\n"+ + "AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB\n"+ + "D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp\n"+ + "ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC\n"+ + "BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito\n"+ + "dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG\n"+ + "SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D\n"+ + "TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw\n"+ + "czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov\n"+ + "L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq\n"+ + "MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu\n"+ + "Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy\n"+ + "Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v\n"+ + "Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD\n"+ + "qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9\n"+ + "D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy\n"+ + "r33I6unUVtkOE7LFRVA=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS CLASEA1 root", + // X500 Subject, for lookups. + "MIIBFDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+ + "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+ + "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS8wLQYDVQQLEyZJUFMgQ0EgQ0xB"+ + "U0VBMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmSVBTIENBIENMQVNFQTEgQ2Vy"+ + "dGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lcw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+ + "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+ + "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm\n"+ + "SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT\n"+ + "JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI\n"+ + "hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3\n"+ + "MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+ + "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+ + "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+ + "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh\n"+ + "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj\n"+ + "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw\n"+ + "gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8\n"+ + "m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd\n"+ + "ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8\n"+ + "eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47\n"+ + "3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh\n"+ + "ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+ + "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+ + "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+ + "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh\n"+ + "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj\n"+ + "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC\n"+ + "AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF\n"+ + "BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB\n"+ + "BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg\n"+ + "hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud\n"+ + "EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD\n"+ + "QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG\n"+ + "SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC\n"+ + "AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j\n"+ + "cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2\n"+ + "b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu\n"+ + "aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI\n"+ + "BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s\n"+ + "MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz\n"+ + "MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz\n"+ + "MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\n"+ + "BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA\n"+ + "AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF\n"+ + "aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL\n"+ + "H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS CLASEA3 root", + // X500 Subject, for lookups. + "MIIBFDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+ + "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+ + "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS8wLQYDVQQLEyZJUFMgQ0EgQ0xB"+ + "U0VBMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmSVBTIENBIENMQVNFQTMgQ2Vy"+ + "dGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lcw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+ + "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+ + "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm\n"+ + "SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT\n"+ + "JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI\n"+ + "hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3\n"+ + "MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+ + "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+ + "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+ + "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh\n"+ + "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj\n"+ + "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw\n"+ + "gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN\n"+ + "G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU\n"+ + "VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn\n"+ + "6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8\n"+ + "2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh\n"+ + "ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+ + "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+ + "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+ + "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh\n"+ + "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj\n"+ + "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC\n"+ + "AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF\n"+ + "BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB\n"+ + "BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg\n"+ + "hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud\n"+ + "EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD\n"+ + "QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG\n"+ + "SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC\n"+ + "AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j\n"+ + "cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2\n"+ + "b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu\n"+ + "aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI\n"+ + "BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s\n"+ + "MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz\n"+ + "MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz\n"+ + "MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\n"+ + "BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca\n"+ + "2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI\n"+ + "3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS\n"+ + "AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS Servidores root", + // X500 Subject, for lookups. + "MIGjMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQkFSQ0VMT05BMRIwEAYDVQQHEwlCQVJDRUxPTkEx"+ + "GTAXBgNVBAoTEElQUyBTZWd1cmlkYWQgQ0ExGDAWBgNVBAsTD0NlcnRpZmljYWNpb25lczEXMBUG"+ + "A1UEAxMOSVBTIFNFUlZJRE9SRVMxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lcw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD\n"+ + "VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT\n"+ + "IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD\n"+ + "Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz\n"+ + "MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE\n"+ + "ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw\n"+ + "FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu\n"+ + "aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY\n"+ + "XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1\n"+ + "gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4\n"+ + "Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY\n"+ + "JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU\n"+ + "dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14\n"+ + "cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("IPS Timestamping root", + // X500 Subject, for lookups. + "MIIBHjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+ + "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+ + "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGlt"+ + "ZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0"+ + "YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p"+ + "cHMuZXM=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT\n"+ + "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+ + "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+ + "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr\n"+ + "SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG\n"+ + "A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0\n"+ + "eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAx\n"+ + "OFoXDTI1MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy\n"+ + "Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l\n"+ + "dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw\n"+ + "cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh\n"+ + "bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU\n"+ + "aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B\n"+ + "CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA\n"+ + "vLjuVqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4\n"+ + "Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFY\n"+ + "q6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAwggR8MB0G\n"+ + "A1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSCAUcwggFDgBSL\n"+ + "0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ\n"+ + "BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ\n"+ + "UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp\n"+ + "cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg\n"+ + "Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD\n"+ + "EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w\n"+ + "HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM\n"+ + "BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB\n"+ + "BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB\n"+ + "FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD\n"+ + "VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw\n"+ + "cy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl\n"+ + "IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwWGmh0\n"+ + "dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8v\n"+ + "d3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCG\n"+ + "SAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25U\n"+ + "aW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBz\n"+ + "LmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGluZy5odG1sPzBABglghkgBhvhC\n"+ + "AQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1lc3RhbXBp\n"+ + "bmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy\n"+ + "MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFj\n"+ + "ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEF\n"+ + "BQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI\n"+ + "hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3\n"+ + "6MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I\n"+ + "3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("QuoVadis Root CA", + // X500 Subject, for lookups. + "MH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290"+ + "IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmlj"+ + "YXRpb24gQXV0aG9yaXR5", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC\n"+ + "TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0\n"+ + "aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0\n"+ + "aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz\n"+ + "MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw\n"+ + "IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR\n"+ + "dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG\n"+ + "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp\n"+ + "li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D\n"+ + "rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ\n"+ + "WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug\n"+ + "F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU\n"+ + "xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC\n"+ + "Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv\n"+ + "dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw\n"+ + "ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl\n"+ + "IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh\n"+ + "c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy\n"+ + "ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh\n"+ + "Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI\n"+ + "KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T\n"+ + "KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq\n"+ + "y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p\n"+ + "dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD\n"+ + "VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL\n"+ + "MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk\n"+ + "fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8\n"+ + "7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R\n"+ + "cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y\n"+ + "mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW\n"+ + "xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK\n"+ + "SnQ2+Q==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("QuoVadis Root CA 2", + // X500 Subject, for lookups. + "MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W"+ + "YWRpcyBSb290IENBIDI=", + "-----BEGIN CERTIFICATE-----\n"+ + "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\n"+ + "8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("QuoVadis Root CA 3", + // X500 Subject, for lookups. + "MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W"+ + "YWRpcyBSb290IENBIDM=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x\n"+ + "GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv\n"+ + "b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV\n"+ + "BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W\n"+ + "YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM\n"+ + "V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB\n"+ + "4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr\n"+ + "H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd\n"+ + "8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv\n"+ + "vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT\n"+ + "mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe\n"+ + "btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc\n"+ + "T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt\n"+ + "WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ\n"+ + "c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A\n"+ + "4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD\n"+ + "VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG\n"+ + "CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0\n"+ + "aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0\n"+ + "aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu\n"+ + "dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw\n"+ + "czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G\n"+ + "A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC\n"+ + "TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg\n"+ + "Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0\n"+ + "7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem\n"+ + "d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd\n"+ + "+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B\n"+ + "4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN\n"+ + "t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x\n"+ + "DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57\n"+ + "k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s\n"+ + "zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j\n"+ + "Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT\n"+ + "mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK\n"+ + "4SVhM7JZG+Ju1zdXtg2pEto=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Security Communication Root CA", + // X500 Subject, for lookups. + "MFAxCzAJBgNVBAYTAkpQMRgwFgYDVQQKEw9TRUNPTSBUcnVzdC5uZXQxJzAlBgNVBAsTHlNlY3Vy"+ + "aXR5IENvbW11bmljYXRpb24gUm9vdENBMQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY\n"+ + "MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t\n"+ + "dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5\n"+ + "WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD\n"+ + "VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3\n"+ + "DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8\n"+ + "9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ\n"+ + "DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9\n"+ + "Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N\n"+ + "QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ\n"+ + "xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G\n"+ + "A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T\n"+ + "AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG\n"+ + "kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr\n"+ + "Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5\n"+ + "Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU\n"+ + "JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot\n"+ + "RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Sonera Class 1 Root CA", + // X500 Subject, for lookups. + "MDkxCzAJBgNVBAYTAkZJMQ8wDQYDVQQKEwZTb25lcmExGTAXBgNVBAMTEFNvbmVyYSBDbGFzczEg"+ + "Q0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP\n"+ + "MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx\n"+ + "MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV\n"+ + "BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI\n"+ + "hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG\n"+ + "29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk\n"+ + "oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk\n"+ + "3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL\n"+ + "qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN\n"+ + "nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw\n"+ + "DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG\n"+ + "MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX\n"+ + "ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H\n"+ + "DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO\n"+ + "TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv\n"+ + "kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w\n"+ + "zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Sonera Class 2 Root CA", + // X500 Subject, for lookups. + "MDkxCzAJBgNVBAYTAkZJMQ8wDQYDVQQKEwZTb25lcmExGTAXBgNVBAMTEFNvbmVyYSBDbGFzczIg"+ + "Q0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP\n"+ + "MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx\n"+ + "MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV\n"+ + "BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI\n"+ + "hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o\n"+ + "Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt\n"+ + "5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s\n"+ + "3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej\n"+ + "vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu\n"+ + "8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw\n"+ + "DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG\n"+ + "MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil\n"+ + "zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/\n"+ + "3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD\n"+ + "FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6\n"+ + "Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2\n"+ + "ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Staat der Nederlanden Root CA", + // X500 Subject, for lookups. + "MFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMT"+ + "HVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO\n"+ + "TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh\n"+ + "dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy\n"+ + "MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk\n"+ + "ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB\n"+ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn\n"+ + "ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71\n"+ + "9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO\n"+ + "hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U\n"+ + "tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o\n"+ + "BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh\n"+ + "SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww\n"+ + "OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv\n"+ + "cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA\n"+ + "7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k\n"+ + "/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm\n"+ + "eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6\n"+ + "u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy\n"+ + "7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR\n"+ + "iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("TDC Internet Root CA", + // X500 Subject, for lookups. + "MEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl"+ + "cm5ldCBSb290IENB", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE\n"+ + "SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg\n"+ + "Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV\n"+ + "BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl\n"+ + "cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA\n"+ + "vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu\n"+ + "Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a\n"+ + "0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1\n"+ + "4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN\n"+ + "eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD\n"+ + "R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG\n"+ + "A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu\n"+ + "dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME\n"+ + "Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3\n"+ + "WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw\n"+ + "HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ\n"+ + "KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO\n"+ + "Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX\n"+ + "wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+\n"+ + "2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89\n"+ + "9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0\n"+ + "jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38\n"+ + "aQNiuJkFBT1reBK9sG9l\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("TDC OCES Root CA", + // X500 Subject, for lookups. + "MDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENB", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE\n"+ + "SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw\n"+ + "ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU\n"+ + "REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n"+ + "MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr\n"+ + "2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s\n"+ + "2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU\n"+ + "GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj\n"+ + "dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r\n"+ + "TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/\n"+ + "BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB\n"+ + "AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv\n"+ + "c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl\n"+ + "ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu\n"+ + "MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg\n"+ + "T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud\n"+ + "HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD\n"+ + "VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny\n"+ + "bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy\n"+ + "MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ\n"+ + "J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG\n"+ + "SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom\n"+ + "JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO\n"+ + "inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y\n"+ + "caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB\n"+ + "mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ\n"+ + "YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9\n"+ + "BKNDLdr8C2LqL19iUw==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("UTN DATACorp SGC Root CA", + // X500 Subject, for lookups. + "MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+ + "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+ + "dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dD", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB\n"+ + "kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+ + "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+ + "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw\n"+ + "IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG\n"+ + "EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD\n"+ + "VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu\n"+ + "dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN\n"+ + "BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6\n"+ + "E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ\n"+ + "D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK\n"+ + "4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq\n"+ + "lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW\n"+ + "bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB\n"+ + "o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT\n"+ + "MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js\n"+ + "LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr\n"+ + "BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB\n"+ + "AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft\n"+ + "Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj\n"+ + "j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH\n"+ + "KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv\n"+ + "2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3\n"+ + "mfnGV/TJVTl4uix5yaaIK/QI\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("UTN USERFirst Email Root CA", + // X500 Subject, for lookups. + "MIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+ + "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+ + "dXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5k"+ + "IEVtYWls", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB\n"+ + "rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+ + "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+ + "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt\n"+ + "Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa\n"+ + "Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV\n"+ + "BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l\n"+ + "dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE\n"+ + "AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls\n"+ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B\n"+ + "YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9\n"+ + "hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l\n"+ + "L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm\n"+ + "SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM\n"+ + "1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws\n"+ + "6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n"+ + "DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw\n"+ + "Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50\n"+ + "aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH\n"+ + "AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u\n"+ + "7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0\n"+ + "xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ\n"+ + "rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim\n"+ + "eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk\n"+ + "USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("UTN USERFirst Hardware Root CA", + // X500 Subject, for lookups. + "MIGXMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+ + "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+ + "dXN0LmNvbTEfMB0GA1UEAxMWVVROLVVTRVJGaXJzdC1IYXJkd2FyZQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB\n"+ + "lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+ + "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+ + "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt\n"+ + "SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG\n"+ + "A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe\n"+ + "MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v\n"+ + "d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh\n"+ + "cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn\n"+ + "0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ\n"+ + "M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a\n"+ + "MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd\n"+ + "oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI\n"+ + "DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy\n"+ + "oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n"+ + "VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0\n"+ + "dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy\n"+ + "bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF\n"+ + "BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM\n"+ + "//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli\n"+ + "CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE\n"+ + "CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t\n"+ + "3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS\n"+ + "KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("UTN USERFirst Object Root CA", + // X500 Subject, for lookups. + "MIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+ + "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+ + "dXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3Q=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB\n"+ + "lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+ + "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+ + "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt\n"+ + "T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV\n"+ + "BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc\n"+ + "BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3\n"+ + "dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC\n"+ + "ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP\n"+ + "HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO\n"+ + "KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo\n"+ + "5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+\n"+ + "pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb\n"+ + "kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC\n"+ + "AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E\n"+ + "FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov\n"+ + "L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV\n"+ + "HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN\n"+ + "AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw\n"+ + "NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB\n"+ + "mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU\n"+ + "4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5\n"+ + "81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR\n"+ + "Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Camerfirma Chambers of Commerce Root", + // X500 Subject, for lookups. + "MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcx"+ + "IzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIwIAYDVQQDExlDaGFtYmVycyBv"+ + "ZiBDb21tZXJjZSBSb290", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn\n"+ + "MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL\n"+ + "ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg\n"+ + "b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa\n"+ + "MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB\n"+ + "ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw\n"+ + "IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B\n"+ + "AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb\n"+ + "unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d\n"+ + "BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq\n"+ + "7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3\n"+ + "0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX\n"+ + "roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG\n"+ + "A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j\n"+ + "aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p\n"+ + "26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA\n"+ + "BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud\n"+ + "EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN\n"+ + "BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz\n"+ + "aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB\n"+ + "AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd\n"+ + "p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi\n"+ + "1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc\n"+ + "XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0\n"+ + "eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu\n"+ + "tGWaIZDgqtCYvDi1czyL+Nw=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Camerfirma Global Chambersign Root", + // X500 Subject, for lookups. + "MH0xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcx"+ + "IzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSAwHgYDVQQDExdHbG9iYWwgQ2hh"+ + "bWJlcnNpZ24gUm9vdA==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn\n"+ + "MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL\n"+ + "ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo\n"+ + "YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9\n"+ + "MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy\n"+ + "NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G\n"+ + "A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA\n"+ + "A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0\n"+ + "Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s\n"+ + "QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV\n"+ + "eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795\n"+ + "B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh\n"+ + "z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T\n"+ + "AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i\n"+ + "ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w\n"+ + "TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH\n"+ + "MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD\n"+ + "VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE\n"+ + "VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh\n"+ + "bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B\n"+ + "AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM\n"+ + "bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi\n"+ + "ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG\n"+ + "VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c\n"+ + "ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/\n"+ + "AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("NetLock Qualified (Class QA) Root", + // X500 Subject, for lookups. + "MIHJMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFs"+ + "b3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMT"+ + "OU5ldExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFk"+ + "bzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx\n"+ + "ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0\n"+ + "b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD\n"+ + "EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz\n"+ + "aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w\n"+ + "MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G\n"+ + "A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh\n"+ + "Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l\n"+ + "dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh\n"+ + "bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq\n"+ + "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq\n"+ + "eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe\n"+ + "r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5\n"+ + "3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd\n"+ + "vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l\n"+ + "mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC\n"+ + "wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg\n"+ + "hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0\n"+ + "TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh\n"+ + "biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg\n"+ + "ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg\n"+ + "dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6\n"+ + "b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl\n"+ + "c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0\n"+ + "ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3\n"+ + "dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu\n"+ + "ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh\n"+ + "bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo\n"+ + "ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3\n"+ + "Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u\n"+ + "ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA\n"+ + "A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ\n"+ + "MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+\n"+ + "NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR\n"+ + "VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY\n"+ + "83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3\n"+ + "macqaJVmlaut74nLYKkGEsaUR+ko\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("NetLock Notary (Class A) Root", + // X500 Subject, for lookups. + "MIGvMQswCQYDVQQGEwJIVTEQMA4GA1UECBMHSHVuZ2FyeTERMA8GA1UEBxMIQnVkYXBlc3QxJzAl"+ + "BgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZh"+ + "bnlraWFkb2sxNjA0BgNVBAMTLU5ldExvY2sgS296amVneXpvaSAoQ2xhc3MgQSkgVGFudXNpdHZh"+ + "bnlraWFkbw==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV\n"+ + "MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe\n"+ + "TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0\n"+ + "dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB\n"+ + "KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0\n"+ + "N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC\n"+ + "dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu\n"+ + "MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL\n"+ + "b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG\n"+ + "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD\n"+ + "zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi\n"+ + "3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8\n"+ + "WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY\n"+ + "Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi\n"+ + "NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC\n"+ + "ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4\n"+ + "QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0\n"+ + "YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz\n"+ + "aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu\n"+ + "IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm\n"+ + "ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg\n"+ + "ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs\n"+ + "amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv\n"+ + "IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3\n"+ + "Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6\n"+ + "ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1\n"+ + "YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg\n"+ + "dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs\n"+ + "b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G\n"+ + "CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO\n"+ + "xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP\n"+ + "0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ\n"+ + "QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk\n"+ + "f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK\n"+ + "8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("NetLock Business (Class B) Root", + // X500 Subject, for lookups. + "MIGZMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFs"+ + "b3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMT"+ + "KU5ldExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRv", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx\n"+ + "ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0\n"+ + "b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD\n"+ + "EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05\n"+ + "OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G\n"+ + "A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh\n"+ + "Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l\n"+ + "dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG\n"+ + "SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK\n"+ + "gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX\n"+ + "iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc\n"+ + "Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E\n"+ + "BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G\n"+ + "SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu\n"+ + "b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh\n"+ + "bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv\n"+ + "Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln\n"+ + "aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0\n"+ + "IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh\n"+ + "c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph\n"+ + "biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo\n"+ + "ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP\n"+ + "UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj\n"+ + "YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo\n"+ + "dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA\n"+ + "bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06\n"+ + "sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa\n"+ + "n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS\n"+ + "NitjrFgBazMpUIaD8QFI\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("NetLock Express (Class C) Root", + // X500 Subject, for lookups. + "MIGbMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFs"+ + "b3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxNDAyBgNVBAMT"+ + "K05ldExvY2sgRXhwcmVzc3ogKENsYXNzIEMpIFRhbnVzaXR2YW55a2lhZG8=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx\n"+ + "ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0\n"+ + "b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD\n"+ + "EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X\n"+ + "DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw\n"+ + "DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u\n"+ + "c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr\n"+ + "TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN\n"+ + "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA\n"+ + "OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC\n"+ + "2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW\n"+ + "RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P\n"+ + "AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW\n"+ + "ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0\n"+ + "YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz\n"+ + "b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO\n"+ + "ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB\n"+ + "IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs\n"+ + "b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs\n"+ + "ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s\n"+ + "YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg\n"+ + "a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g\n"+ + "SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0\n"+ + "aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg\n"+ + "YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg\n"+ + "Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY\n"+ + "ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g\n"+ + "pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4\n"+ + "Fp1hBWeAyNDYpQcCNJgEjTME1A==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("XRamp Global CA Root", + // X500 Subject, for lookups. + "MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQK"+ + "ExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0"+ + "aWZpY2F0aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB\n"+ + "gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk\n"+ + "MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY\n"+ + "UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx\n"+ + "NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3\n"+ + "dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy\n"+ + "dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB\n"+ + "dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6\n"+ + "38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP\n"+ + "KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q\n"+ + "DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4\n"+ + "qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa\n"+ + "JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi\n"+ + "PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P\n"+ + "BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs\n"+ + "jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0\n"+ + "eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD\n"+ + "ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR\n"+ + "vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt\n"+ + "qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa\n"+ + "IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy\n"+ + "i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ\n"+ + "O+7ETPTsJ3xCwnR8gooJybQDJbw=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Go Daddy Class 2 CA", + // X500 Subject, for lookups. + "MGMxCzAJBgNVBAYTAlVTMSEwHwYDVQQKExhUaGUgR28gRGFkZHkgR3JvdXAsIEluYy4xMTAvBgNV"+ + "BAsTKEdvIERhZGR5IENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh\n"+ + "MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE\n"+ + "YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3\n"+ + "MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo\n"+ + "ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg\n"+ + "MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN\n"+ + "ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA\n"+ + "PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w\n"+ + "wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi\n"+ + "EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY\n"+ + "avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+\n"+ + "YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE\n"+ + "sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h\n"+ + "/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5\n"+ + "IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj\n"+ + "YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD\n"+ + "ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy\n"+ + "OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P\n"+ + "TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ\n"+ + "HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER\n"+ + "dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf\n"+ + "ReYNnyicsbkqWletNw+vHX/bvZ8=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Starfield Class 2 CA", + // X500 Subject, for lookups. + "MGgxCzAJBgNVBAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw"+ + "MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl\n"+ + "MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp\n"+ + "U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw\n"+ + "NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE\n"+ + "ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp\n"+ + "ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3\n"+ + "DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf\n"+ + "8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN\n"+ + "+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0\n"+ + "X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa\n"+ + "K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA\n"+ + "1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G\n"+ + "A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR\n"+ + "zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0\n"+ + "YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD\n"+ + "bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w\n"+ + "DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3\n"+ + "L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D\n"+ + "eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl\n"+ + "xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp\n"+ + "VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY\n"+ + "WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("StartCom Ltd.", + // X500 Subject, for lookups. + "MIGwMQswCQYDVQQGEwJJTDEPMA0GA1UECBMGSXNyYWVsMQ4wDAYDVQQHEwVFaWxhdDEWMBQGA1UE"+ + "ChMNU3RhcnRDb20gTHRkLjEaMBgGA1UECxMRQ0EgQXV0aG9yaXR5IERlcC4xKTAnBgNVBAMTIEZy"+ + "ZWUgU1NMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJhZG1pbkBzdGFy"+ + "dGNvbS5vcmc=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx\n"+ + "DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0\n"+ + "Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG\n"+ + "cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS\n"+ + "YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0\n"+ + "OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp\n"+ + "bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp\n"+ + "dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+ + "dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG\n"+ + "9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x\n"+ + "18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5\n"+ + "yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI\n"+ + "LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G\n"+ + "A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW\n"+ + "zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT\n"+ + "BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x\n"+ + "GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD\n"+ + "ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh\n"+ + "cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV\n"+ + "HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G\n"+ + "CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy\n"+ + "BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j\n"+ + "cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ\n"+ + "YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/\n"+ + "YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1\n"+ + "ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p\n"+ + "00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb\n"+ + "cCOxgN8aIDjnfg==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("StartCom Certification Authority", + // X500 Subject, for lookups. + "MH0xCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUg"+ + "RGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0"+ + "aW9uIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW\n"+ + "MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg\n"+ + "Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh\n"+ + "dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9\n"+ + "MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi\n"+ + "U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh\n"+ + "cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\n"+ + "A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk\n"+ + "pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf\n"+ + "OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C\n"+ + "Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT\n"+ + "Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi\n"+ + "HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM\n"+ + "Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w\n"+ + "+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+\n"+ + "Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3\n"+ + "Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B\n"+ + "26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID\n"+ + "AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE\n"+ + "FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j\n"+ + "ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js\n"+ + "LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM\n"+ + "BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0\n"+ + "Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy\n"+ + "dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh\n"+ + "cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh\n"+ + "YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg\n"+ + "dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp\n"+ + "bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ\n"+ + "YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT\n"+ + "TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ\n"+ + "9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8\n"+ + "jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW\n"+ + "FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz\n"+ + "ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1\n"+ + "ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L\n"+ + "EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu\n"+ + "L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq\n"+ + "yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC\n"+ + "O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V\n"+ + "um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh\n"+ + "NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Taiwan GRCA", + // X500 Subject, for lookups. + "MD8xCzAJBgNVBAYTAlRXMTAwLgYDVQQKDCdHb3Zlcm5tZW50IFJvb3QgQ2VydGlmaWNhdGlvbiBB"+ + "dXRob3JpdHk=", + "-----BEGIN CERTIFICATE-----\n"+ + "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\n"+ + "pYYsfPQS\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Firmaprofesional Root CA", + // X500 Subject, for lookups. + "MIGdMQswCQYDVQQGEwJFUzEiMCAGA1UEBxMZQy8gTXVudGFuZXIgMjQ0IEJhcmNlbG9uYTFCMEAG"+ + "A1UEAxM5QXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24gRmlybWFwcm9mZXNpb25hbCBDSUYgQTYy"+ + "NjM0MDY4MSYwJAYJKoZIhvcNAQkBFhdjYUBmaXJtYXByb2Zlc2lvbmFsLmNvbQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx\n"+ + "IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1\n"+ + "dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2\n"+ + "MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w\n"+ + "HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx\n"+ + "IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1\n"+ + "dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2\n"+ + "MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w\n"+ + "ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u\n"+ + "Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY\n"+ + "rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z\n"+ + "hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay\n"+ + "BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL\n"+ + "iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb\n"+ + "AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv\n"+ + "bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0\n"+ + "MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E\n"+ + "FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n\n"+ + "VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq\n"+ + "u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m\n"+ + "hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl\n"+ + "ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp\n"+ + "QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5\n"+ + "quGnM/b9Sh/22WA=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Wells Fargo Root CA", + // X500 Subject, for lookups. + "MIGCMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLV2VsbHMgRmFyZ28xLDAqBgNVBAsTI1dlbGxzIEZh"+ + "cmdvIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS8wLQYDVQQDEyZXZWxscyBGYXJnbyBSb290IENl"+ + "cnRpZmljYXRlIEF1dGhvcml0eQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC\n"+ + "VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD\n"+ + "ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v\n"+ + "dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0\n"+ + "MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww\n"+ + "KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G\n"+ + "A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi\n"+ + "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13\n"+ + "5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE\n"+ + "SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O\n"+ + "JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu\n"+ + "ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE\n"+ + "AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB\n"+ + "AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB\n"+ + "CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw\n"+ + "b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo\n"+ + "7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/\n"+ + "0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7\n"+ + "nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx\n"+ + "x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ\n"+ + "33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Swisscom Root CA 1", + // X500 Subject, for lookups. + "MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0"+ + "aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk\n"+ + "MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0\n"+ + "YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg\n"+ + "Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT\n"+ + "AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp\n"+ + "Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN\n"+ + "BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9\n"+ + "m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih\n"+ + "FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/\n"+ + "TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F\n"+ + "EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco\n"+ + "kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu\n"+ + "HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF\n"+ + "vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo\n"+ + "19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC\n"+ + "L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW\n"+ + "bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX\n"+ + "JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw\n"+ + "FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j\n"+ + "BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc\n"+ + "K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf\n"+ + "ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik\n"+ + "Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB\n"+ + "sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e\n"+ + "3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR\n"+ + "ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip\n"+ + "mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH\n"+ + "b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf\n"+ + "rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms\n"+ + "hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y\n"+ + "zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6\n"+ + "MBr1mmz0DlP5OlvRHA==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("DigiCert Assured ID Root CA", + // X500 Subject, for lookups. + "MGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp"+ + "Y2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQQ==", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl\n"+ + "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"+ + "d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv\n"+ + "b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG\n"+ + "EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl\n"+ + "cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi\n"+ + "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c\n"+ + "JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP\n"+ + "mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+\n"+ + "wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4\n"+ + "VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/\n"+ + "AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB\n"+ + "AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\n"+ + "BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun\n"+ + "pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC\n"+ + "dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf\n"+ + "fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm\n"+ + "NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx\n"+ + "H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe\n"+ + "+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("DigiCert Global Root CA", + // X500 Subject, for lookups. + "MGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp"+ + "Y2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENB", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"+ + "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"+ + "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"+ + "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"+ + "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"+ + "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"+ + "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"+ + "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"+ + "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"+ + "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"+ + "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"+ + "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"+ + "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"+ + "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"+ + "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"+ + "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"+ + "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"+ + "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"+ + "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"+ + "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("DigiCert High Assurance EV Root CA", + // X500 Subject, for lookups. + "MGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp"+ + "Y2VydC5jb20xKzApBgNVBAMTIkRpZ2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0E=", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs\n"+ + "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"+ + "d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"+ + "ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL\n"+ + "MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"+ + "LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug\n"+ + "RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm\n"+ + "+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW\n"+ + "PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM\n"+ + "xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB\n"+ + "Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3\n"+ + "hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg\n"+ + "EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF\n"+ + "MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA\n"+ + "FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec\n"+ + "nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z\n"+ + "eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF\n"+ + "hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2\n"+ + "Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\n"+ + "vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep\n"+ + "+OkuE6N36B9K\n"+ + "-----END CERTIFICATE-----"); + super.addPEMCertificate("Certplus Class 2 Primary CA", + // X500 Subject, for lookups. + "MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmlt"+ + "YXJ5IENB", + "-----BEGIN CERTIFICATE-----\n"+ + "MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw\n"+ + "PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz\n"+ + "cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9\n"+ + "MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz\n"+ + "IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ\n"+ + "ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR\n"+ + "VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL\n"+ + "kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd\n"+ + "EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas\n"+ + "H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0\n"+ + "HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud\n"+ + "DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4\n"+ + "QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu\n"+ + "Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/\n"+ + "AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8\n"+ + "yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR\n"+ + "FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA\n"+ + "ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB\n"+ + "kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7\n"+ + "l7+ijrRU\n"+ + "-----END CERTIFICATE-----"); + } + override public function addPEMCertificate(name:String,subject:String,pem:String):void { + throw new Error("Cannot add certificates to the Root CA store."); + } + override public function addCertificate(cert:X509Certificate):void { + throw new Error("Cannot add certificates to the Root CA store."); + } + } +} diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as new file mode 100755 index 00000000..db4ea1c4 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as @@ -0,0 +1,218 @@ +/** + * X509Certificate + * + * A representation for a X509 Certificate, with + * methods to parse, verify and sign it. + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.cert { + import com.hurlant.crypto.hash.IHash; + import com.hurlant.crypto.hash.MD2; + import com.hurlant.crypto.hash.MD5; + import com.hurlant.crypto.hash.SHA1; + import com.hurlant.crypto.rsa.RSAKey; + import com.hurlant.util.ArrayUtil; + import com.hurlant.util.Base64; + import com.hurlant.util.der.ByteString; + import com.hurlant.util.der.DER; + import com.hurlant.util.der.OID; + import com.hurlant.util.der.ObjectIdentifier; + import com.hurlant.util.der.PEM; + import com.hurlant.util.der.PrintableString; + import com.hurlant.util.der.Sequence; + import com.hurlant.util.der.Type; + + import flash.utils.ByteArray; + + public class X509Certificate { + private var _loaded:Boolean; + private var _param:*; + private var _obj:Object; + public function X509Certificate(p:*) { + _loaded = false; + _param = p; + // lazy initialization, to avoid unnecessary parsing of every builtin CA at start-up. + } + private function load():void { + if (_loaded) return; + var p:* = _param; + var b:ByteArray; + if (p is String) { + b = PEM.readCertIntoArray(p as String); + } else if (p is ByteArray) { + b = p; + } + if (b!=null) { + _obj = DER.parse(b, Type.TLS_CERT); + _loaded = true; + } else { + throw new Error("Invalid x509 Certificate parameter: "+p); + } + } + public function isSigned(store:X509CertificateCollection, CAs:X509CertificateCollection, time:Date=null):Boolean { + load(); + // check timestamps first. cheapest. + if (time==null) { + time = new Date; + } + var notBefore:Date = getNotBefore(); + var notAfter:Date = getNotAfter(); + if (time.getTime()notAfter.getTime()) return false; // cert died of old age. + // check signature. + var subject:String = getIssuerPrincipal(); + // try from CA first, since they're treated better. + var parent:X509Certificate = CAs.getCertificate(subject); + var parentIsAuthoritative:Boolean = false; + if (parent == null) { + parent = store.getCertificate(subject); + if (parent == null) { + return false; // issuer not found + } + } else { + parentIsAuthoritative = true; + } + if (parent == this) { // pathological case. avoid infinite loop + return false; // isSigned() returns false if we're self-signed. + } + if (!(parentIsAuthoritative&&parent.isSelfSigned(time)) && + !parent.isSigned(store, CAs, time)) { + return false; + } + var key:RSAKey = parent.getPublicKey(); + return verifyCertificate(key); + } + public function isSelfSigned(time:Date):Boolean { + load(); + + var key:RSAKey = getPublicKey(); + return verifyCertificate(key); + } + private function verifyCertificate(key:RSAKey):Boolean { + var algo:String = getAlgorithmIdentifier(); + var hash:IHash; + var oid:String; + switch (algo) { + case OID.SHA1_WITH_RSA_ENCRYPTION: + hash = new SHA1; + oid = OID.SHA1_ALGORITHM; + break; + case OID.MD2_WITH_RSA_ENCRYPTION: + hash = new MD2; + oid = OID.MD2_ALGORITHM; + break; + case OID.MD5_WITH_RSA_ENCRYPTION: + hash = new MD5; + oid = OID.MD5_ALGORITHM; + break; + default: + return false; + } + var data:ByteArray = _obj.signedCertificate_bin; + var buf:ByteArray = new ByteArray; + key.verify(_obj.encrypted, buf, _obj.encrypted.length); + buf.position=0; + data = hash.hash(data); + var obj:Object = DER.parse(buf, Type.RSA_SIGNATURE); + if (obj.algorithm.algorithmId.toString() != oid) { + return false; // wrong algorithm + } + if (!ArrayUtil.equals(obj.hash, data)) { + return false; // hashes don't match + } + return true; + } + + /** + * This isn't used anywhere so far. + * It would become useful if we started to offer facilities + * to generate and sign X509 certificates. + * + * @param key + * @param algo + * @return + * + */ + private function signCertificate(key:RSAKey, algo:String):ByteArray { + var hash:IHash; + var oid:String; + switch (algo) { + case OID.SHA1_WITH_RSA_ENCRYPTION: + hash = new SHA1; + oid = OID.SHA1_ALGORITHM; + break; + case OID.MD2_WITH_RSA_ENCRYPTION: + hash = new MD2; + oid = OID.MD2_ALGORITHM; + break; + case OID.MD5_WITH_RSA_ENCRYPTION: + hash = new MD5; + oid = OID.MD5_ALGORITHM; + break; + default: + return null + } + var data:ByteArray = _obj.signedCertificate_bin; + data = hash.hash(data); + var seq1:Sequence = new Sequence; + seq1[0] = new Sequence; + seq1[0][0] = new ObjectIdentifier(0,0, oid); + seq1[0][1] = null; + seq1[1] = new ByteString; + seq1[1].writeBytes(data); + data = seq1.toDER(); + var buf:ByteArray = new ByteArray; + key.sign(data, buf, data.length); + return buf; + } + + public function getPublicKey():RSAKey { + load(); + var pk:ByteArray = _obj.signedCertificate.subjectPublicKeyInfo.subjectPublicKey as ByteArray; + pk.position = 0; + var rsaKey:Object = DER.parse(pk, [{name:"N"},{name:"E"}]); + return new RSAKey(rsaKey.N, rsaKey.E.valueOf()); + } + + /** + * Returns a subject principal, as an opaque base64 string. + * This is only used as a hash key for known certificates. + * + * Note that this assumes X509 DER-encoded certificates are uniquely encoded, + * as we look for exact matches between Issuer and Subject fields. + * + */ + public function getSubjectPrincipal():String { + load(); + return Base64.encodeByteArray(_obj.signedCertificate.subject_bin); + } + /** + * Returns an issuer principal, as an opaque base64 string. + * This is only used to quickly find matching parent certificates. + * + * Note that this assumes X509 DER-encoded certificates are uniquely encoded, + * as we look for exact matches between Issuer and Subject fields. + * + */ + public function getIssuerPrincipal():String { + load(); + return Base64.encodeByteArray(_obj.signedCertificate.issuer_bin); + } + public function getAlgorithmIdentifier():String { + return _obj.algorithmIdentifier.algorithmId.toString(); + } + public function getNotBefore():Date { + return _obj.signedCertificate.validity.notBefore.date; + } + public function getNotAfter():Date { + return _obj.signedCertificate.validity.notAfter.date; + } + + public function getCommonName():String { + var subject:Sequence = _obj.signedCertificate.subject; + return (subject.findAttributeValue(OID.COMMON_NAME) as PrintableString).getString(); + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as new file mode 100755 index 00000000..db11e409 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as @@ -0,0 +1,57 @@ +/** + * X509CertificateCollection + * + * A class to store and index X509 Certificates by Subject. + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.cert { + + public class X509CertificateCollection { + + private var _map:Object; + + public function X509CertificateCollection() { + _map = {}; + } + + /** + * Mostly meant for built-in CA loading. + * This entry-point allows to index CAs without parsing them. + * + * @param name A friendly name. not currently used + * @param subject base64 DER encoded Subject principal for the Cert + * @param pem PEM encoded certificate data + * + */ + public function addPEMCertificate(name:String, subject:String, pem:String):void { + _map[subject] = new X509Certificate(pem); + } + + /** + * Adds a X509 certificate to the collection. + * This call will force the certificate to be parsed. + * + * @param cert A X509 certificate + * + */ + public function addCertificate(cert:X509Certificate):void { + var subject:String = cert.getSubjectPrincipal(); + _map[subject] = cert; + } + + /** + * Returns a X509 Certificate present in the collection, given + * a base64 DER encoded X500 Subject principal + * + * @param subject A Base64 DER-encoded Subject principal + * @return A matching certificate, or null. + * + */ + public function getCertificate(subject:String):X509Certificate { + return _map[subject]; + } + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as new file mode 100644 index 00000000..8215afcf --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as @@ -0,0 +1,82 @@ +/** + * HMAC + * + * An ActionScript 3 implementation of HMAC, Keyed-Hashing for Message + * Authentication, as defined by RFC-2104 + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + import flash.utils.ByteArray; + import com.hurlant.util.Hex; + + public class HMAC implements IHMAC + { + private var hash:IHash; + private var bits:uint; + + /** + * Create a HMAC object, using a Hash function, and + * optionally a number of bits to return. + * The HMAC will be truncated to that size if needed. + */ + public function HMAC(hash:IHash, bits:uint=0) { + this.hash = hash; + this.bits = bits; + } + + + public function getHashSize():uint { + if (bits!=0) { + return bits/8; + } else { + return hash.getHashSize(); + } + } + + /** + * Compute a HMAC using a key and some data. + * It doesn't modify either, and returns a new ByteArray with the HMAC value. + */ + public function compute(key:ByteArray, data:ByteArray):ByteArray { + var hashKey:ByteArray; + if (key.length>hash.getInputSize()) { + hashKey = hash.hash(key); + } else { + hashKey = new ByteArray; + hashKey.writeBytes(key); + } + while (hashKey.length0 && bits<8*outerHash.length) { + outerHash.length = bits/8; + } + return outerHash; + } + public function dispose():void { + hash = null; + bits = 0; + } + public function toString():String { + return "hmac-"+(bits>0?bits+"-":"")+hash.toString(); + } + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as new file mode 100755 index 00000000..f0ee0639 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as @@ -0,0 +1,27 @@ +/** + * HMAC + * + * An ActionScript 3 interface for HMAC & MAC + * implementations. + * + * Loosely copyrighted by Bobby Parker + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + import flash.utils.ByteArray; + + public interface IHMAC + { + function getHashSize():uint; + /** + * Compute a HMAC using a key and some data. + * It doesn't modify either, and returns a new ByteArray with the HMAC value. + */ + function compute(key:ByteArray, data:ByteArray):ByteArray; + function dispose():void; + function toString():String; + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as new file mode 100644 index 00000000..32c5321a --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as @@ -0,0 +1,21 @@ +/** + * IHash + * + * An interface for each hash function to implement + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + import flash.utils.ByteArray; + + public interface IHash + { + function getInputSize():uint; + function getHashSize():uint; + function hash(src:ByteArray):ByteArray; + function toString():String; + function getPadSize():int; + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as new file mode 100755 index 00000000..0815d6c5 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as @@ -0,0 +1,137 @@ +/** + * MAC + * + * An ActionScript 3 implementation of MAC, Message Authentication Code + * for use with SSL 3.0. + * Loosely copyrighted by Bobby Parker. + * As3crypto copyrighted by Henri Torgemane. + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + import flash.utils.ByteArray; + import com.hurlant.util.Hex; + + public class MAC implements IHMAC + { + private var hash:IHash; + private var bits:uint; + private var pad_1:ByteArray; + private var pad_2:ByteArray; + private var innerHash:ByteArray; + private var outerHash:ByteArray; + private var outerKey:ByteArray; + private var innerKey:ByteArray; + /** + * Create a MAC object (for SSL 3.0 ) and + * optionally a number of bits to return. + * The MAC will be truncated to that size if needed. + */ + public function MAC(hash:IHash, bits:uint=0) { + this.hash = hash; + this.bits = bits; + innerHash = new ByteArray(); + outerHash = new ByteArray(); + innerKey = new ByteArray(); + outerKey = new ByteArray(); + + + if (hash != null) { + var pad_size:int = hash.getPadSize(); + pad_1 = new ByteArray(); + pad_2 = new ByteArray(); + + for (var x:int = 0; x < pad_size; x++) { + pad_1.writeByte(0x36); + pad_2.writeByte(0x5c); + } + } + } + + public function setPadSize(pad_size:int) : void { } + + public function getHashSize():uint { + if (bits!=0) { + return bits/8; + } else { + return hash.getHashSize(); + } + } + + + /** + * Compute a MAC using a key and some data. + * + */ + public function compute(key:ByteArray, data:ByteArray):ByteArray { + // take that incoming key and do hash(key + pad_2 + hash(key + pad_1 + sequence + length + record) + // note that data = (sequence + type + length + record) + + if (pad_1 == null) { + var pad_size:int = hash.getPadSize(); + pad_1 = new ByteArray(); + pad_2 = new ByteArray(); + + for (var x:int = 0; x < pad_size; x++) { + pad_1.writeByte(0x36); + pad_2.writeByte(0x5c); + } + } + + // Do some preliminary checking on stuff + /* + if (key.length > hash.getInputSize()) { + hashKey = hash.hash(key); + } else { + hashKey = new ByteArray; + hashKey.writeBytes(key); + } + + while (hashKey.length < hash.getInputSize() ) { + hashKey[hashKey.length] = 0; + } */ + // Henri's conventions work just fine here.. + + innerKey.length = 0; + outerKey.length = 0; + // trace("MAC Key: " + Hex.fromArray(key)); + // trace("Key Length: " + key.length); + // trace("Pad_1 : " + Hex.fromArray(pad_1)); + // inner hash calc + innerKey.writeBytes(key); + innerKey.writeBytes(pad_1); + innerKey.writeBytes(data); + // trace("MAC Inner Key: " + Hex.fromArray(innerKey)); + + innerHash = hash.hash(innerKey); + // trace("MAC Inner Hash: " + Hex.fromArray(innerHash)); + + // outer hash calc + outerKey.writeBytes(key); + outerKey.writeBytes(pad_2); + outerKey.writeBytes(innerHash); + + // trace("MAC Outer Key: " + Hex.fromArray(outerKey)); + outerHash = hash.hash(outerKey); + + + if (bits > 0 && bits < 8*outerHash.length) { + outerHash.length = bits/8; + } + + // trace("MAC for record: " + Hex.fromArray(outerHash)); + return outerHash; + + } + + public function dispose():void { + hash = null; + bits = 0; + } + public function toString():String { + return "mac-"+(bits>0?bits+"-":"")+hash.toString(); + } + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as new file mode 100644 index 00000000..e104f0dd --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as @@ -0,0 +1,124 @@ +/** + * MD2 + * + * An ActionScript 3 implementation of the RSA Data Security, Inc MD2 Message + * Digest Algorithm, as defined in RFC 1319 + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + * + * Excerpt from http://en.wikipedia.org/wiki/MD2: + * > + * > Rogier and Chauvaud (1997) described collisions of MD2's compression function, + * > although they were unable to extend the attack to the full MD2. + * > + * > In 2004, MD2 was shown to be vulnerable to a preimage attack with time + * > complexity equivalent to 2104 applications of the compression function + * > (Muller, 2004). + * > The author concludes, "MD2 can no longer be considered a secure one-way + * > hash function". + * + * also, this implementaton is quite slow. + */ + +package com.hurlant.crypto.hash +{ + import flash.utils.ByteArray; + + public class MD2 implements IHash + { + public static const HASH_SIZE:int = 16; + public var pad_size:int = 48; // probably will never get used, only here for SSL 3.0 support + + private static const S:Array = [ // PI Digits + 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19, + 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202, + 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18, +190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122, +169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33, +128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3, +255, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, + 79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, + 69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, + 27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, + 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38, + 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129, 77, 82, +106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189, 177, 74, +120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0, 29, 57, +242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117, 75, 10, + 49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 ]; + + + public function MD2() { } + + public function getInputSize():uint + { + return 16; + } + + public function getPadSize():int { + return pad_size; + } + + public function getHashSize():uint + { + return HASH_SIZE; + } + + public function hash(src:ByteArray):ByteArray + { + var savedLength:uint = src.length; + + // 3.1 Step 1. Padding + var i:uint = (16-src.length%16) || 16; + do { + src[src.length]=i; + } while (src.length%16!=0); + + // 3.2 Step 2. Checksum + var len:uint = src.length; + var checksum:ByteArray = new ByteArray; + var L:uint = 0; + for (i = 0;i> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a:uint = 0x67452301; // 1732584193; + var b:uint = 0xEFCDAB89; //-271733879; + var c:uint = 0x98BADCFE; //-1732584194; + var d:uint = 0x10325476; // 271733878; + + for(var i:uint = 0; i < x.length; i += 16) + { + x[i]||=0; x[i+1]||=0; x[i+2]||=0; x[i+3]||=0; + x[i+4]||=0; x[i+5]||=0; x[i+6]||=0; x[i+7]||=0; + x[i+8]||=0; x[i+9]||=0; x[i+10]||=0; x[i+11]||=0; + x[i+12]||=0; x[i+13]||=0; x[i+14]||=0; x[i+15]||=0; + + var olda:uint = a; + var oldb:uint = b; + var oldc:uint = c; + var oldd:uint = d; + + a = ff(a, b, c, d, x[i+ 0], 7 , 0xD76AA478); + d = ff(d, a, b, c, x[i+ 1], 12, 0xE8C7B756); + c = ff(c, d, a, b, x[i+ 2], 17, 0x242070DB); + b = ff(b, c, d, a, x[i+ 3], 22, 0xC1BDCEEE); + a = ff(a, b, c, d, x[i+ 4], 7 , 0xF57C0FAF); + d = ff(d, a, b, c, x[i+ 5], 12, 0x4787C62A); + c = ff(c, d, a, b, x[i+ 6], 17, 0xA8304613); + b = ff(b, c, d, a, x[i+ 7], 22, 0xFD469501); + a = ff(a, b, c, d, x[i+ 8], 7 , 0x698098D8); + d = ff(d, a, b, c, x[i+ 9], 12, 0x8B44F7AF); + c = ff(c, d, a, b, x[i+10], 17, 0xFFFF5BB1); + b = ff(b, c, d, a, x[i+11], 22, 0x895CD7BE); + a = ff(a, b, c, d, x[i+12], 7 , 0x6B901122); + d = ff(d, a, b, c, x[i+13], 12, 0xFD987193); + c = ff(c, d, a, b, x[i+14], 17, 0xA679438E); + b = ff(b, c, d, a, x[i+15], 22, 0x49B40821); + + a = gg(a, b, c, d, x[i+ 1], 5 , 0xf61e2562); + d = gg(d, a, b, c, x[i+ 6], 9 , 0xc040b340); + c = gg(c, d, a, b, x[i+11], 14, 0x265e5a51); + b = gg(b, c, d, a, x[i+ 0], 20, 0xe9b6c7aa); + a = gg(a, b, c, d, x[i+ 5], 5 , 0xd62f105d); + d = gg(d, a, b, c, x[i+10], 9 , 0x2441453); + c = gg(c, d, a, b, x[i+15], 14, 0xd8a1e681); + b = gg(b, c, d, a, x[i+ 4], 20, 0xe7d3fbc8); + a = gg(a, b, c, d, x[i+ 9], 5 , 0x21e1cde6); + d = gg(d, a, b, c, x[i+14], 9 , 0xc33707d6); + c = gg(c, d, a, b, x[i+ 3], 14, 0xf4d50d87); + b = gg(b, c, d, a, x[i+ 8], 20, 0x455a14ed); + a = gg(a, b, c, d, x[i+13], 5 , 0xa9e3e905); + d = gg(d, a, b, c, x[i+ 2], 9 , 0xfcefa3f8); + c = gg(c, d, a, b, x[i+ 7], 14, 0x676f02d9); + b = gg(b, c, d, a, x[i+12], 20, 0x8d2a4c8a); + + a = hh(a, b, c, d, x[i+ 5], 4 , 0xfffa3942); + d = hh(d, a, b, c, x[i+ 8], 11, 0x8771f681); + c = hh(c, d, a, b, x[i+11], 16, 0x6d9d6122); + b = hh(b, c, d, a, x[i+14], 23, 0xfde5380c); + a = hh(a, b, c, d, x[i+ 1], 4 , 0xa4beea44); + d = hh(d, a, b, c, x[i+ 4], 11, 0x4bdecfa9); + c = hh(c, d, a, b, x[i+ 7], 16, 0xf6bb4b60); + b = hh(b, c, d, a, x[i+10], 23, 0xbebfbc70); + a = hh(a, b, c, d, x[i+13], 4 , 0x289b7ec6); + d = hh(d, a, b, c, x[i+ 0], 11, 0xeaa127fa); + c = hh(c, d, a, b, x[i+ 3], 16, 0xd4ef3085); + b = hh(b, c, d, a, x[i+ 6], 23, 0x4881d05); + a = hh(a, b, c, d, x[i+ 9], 4 , 0xd9d4d039); + d = hh(d, a, b, c, x[i+12], 11, 0xe6db99e5); + c = hh(c, d, a, b, x[i+15], 16, 0x1fa27cf8); + b = hh(b, c, d, a, x[i+ 2], 23, 0xc4ac5665); + + a = ii(a, b, c, d, x[i+ 0], 6 , 0xf4292244); + d = ii(d, a, b, c, x[i+ 7], 10, 0x432aff97); + c = ii(c, d, a, b, x[i+14], 15, 0xab9423a7); + b = ii(b, c, d, a, x[i+ 5], 21, 0xfc93a039); + a = ii(a, b, c, d, x[i+12], 6 , 0x655b59c3); + d = ii(d, a, b, c, x[i+ 3], 10, 0x8f0ccc92); + c = ii(c, d, a, b, x[i+10], 15, 0xffeff47d); + b = ii(b, c, d, a, x[i+ 1], 21, 0x85845dd1); + a = ii(a, b, c, d, x[i+ 8], 6 , 0x6fa87e4f); + d = ii(d, a, b, c, x[i+15], 10, 0xfe2ce6e0); + c = ii(c, d, a, b, x[i+ 6], 15, 0xa3014314); + b = ii(b, c, d, a, x[i+13], 21, 0x4e0811a1); + a = ii(a, b, c, d, x[i+ 4], 6 , 0xf7537e82); + d = ii(d, a, b, c, x[i+11], 10, 0xbd3af235); + c = ii(c, d, a, b, x[i+ 2], 15, 0x2ad7d2bb); + b = ii(b, c, d, a, x[i+ 9], 21, 0xeb86d391); + + a += olda; + b += oldb; + c += oldc; + d += oldd; + + } + return [ a, b, c, d ]; + } + + /* + * Bitwise rotate a 32-bit number to the left. + */ + private function rol(num:uint, cnt:uint):uint + { + return (num << cnt) | (num >>> (32 - cnt)); + } + + /* + * These functions implement the four basic operations the algorithm uses. + */ + private function cmn(q:uint, a:uint, b:uint, x:uint, s:uint, t:uint):uint { + return rol(a + q + x + t, s) + b; + } + private function ff(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); + } + private function gg(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); + } + private function hh(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint { + return cmn(b ^ c ^ d, a, b, x, s, t); + } + private function ii(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint { + return cmn(c ^ (b | (~d)), a, b, x, s, t); + } + + public function toString():String { + return "md5"; + } + } +} diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as new file mode 100644 index 00000000..5b186f3c --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as @@ -0,0 +1,106 @@ +/** + * SHA1 + * + * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Copyright (c) 2007 Henri Torgemane + * + * Derived from: + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + + + public class SHA1 extends SHABase implements IHash + { + public static const HASH_SIZE:int = 20; + + public override function getHashSize():uint { + return HASH_SIZE; + } + + protected override function core(x:Array, len:uint):Array + { + /* append padding */ + x[len >> 5] |= 0x80 << (24 - len % 32); + x[((len + 64 >> 9) << 4) + 15] = len; + + var w:Array = []; + var a:uint = 0x67452301; //1732584193; + var b:uint = 0xEFCDAB89; //-271733879; + var c:uint = 0x98BADCFE; //-1732584194; + var d:uint = 0x10325476; //271733878; + var e:uint = 0xC3D2E1F0; //-1009589776; + + for(var i:uint = 0; i < x.length; i += 16) + { + + var olda:uint = a; + var oldb:uint = b; + var oldc:uint = c; + var oldd:uint = d; + var olde:uint = e; + + for(var j:uint = 0; j < 80; j++) + { + if (j < 16) { + w[j] = x[i + j] || 0; + } else { + w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); + } + var t:uint = rol(a,5) + ft(j,b,c,d) + e + w[j] + kt(j); + e = d; + d = c; + c = rol(b, 30); + b = a; + a = t; + } + a += olda; + b += oldb; + c += oldc; + d += oldd; + e += olde; + } + return [ a, b, c, d, e ]; + + } + + /* + * Bitwise rotate a 32-bit number to the left. + */ + private function rol(num:uint, cnt:uint):uint + { + return (num << cnt) | (num >>> (32 - cnt)); + } + + /* + * Perform the appropriate triplet combination function for the current + * iteration + */ + private function ft(t:uint, b:uint, c:uint, d:uint):uint + { + if(t < 20) return (b & c) | ((~b) & d); + if(t < 40) return b ^ c ^ d; + if(t < 60) return (b & c) | (b & d) | (c & d); + return b ^ c ^ d; + } + + /* + * Determine the appropriate additive constant for the current iteration + */ + private function kt(t:uint):uint + { + return (t < 20) ? 0x5A827999 : (t < 40) ? 0x6ED9EBA1 : + (t < 60) ? 0x8F1BBCDC : 0xCA62C1D6; + } + public override function toString():String { + return "sha1"; + } + } +} diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as new file mode 100644 index 00000000..345aa3df --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as @@ -0,0 +1,28 @@ +/** + * SHA224 + * + * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-224, as defined + * in FIPS PUB 180-2 + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + public class SHA224 extends SHA256 + { + function SHA224() { + h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + ]; + } + + public override function getHashSize():uint { + return 28; + } + public override function toString():String { + return "sha224"; + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as new file mode 100644 index 00000000..67bdbb46 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as @@ -0,0 +1,115 @@ +/** + * SHA256 + * + * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-256, as defined + * in FIPS PUB 180-2 + * Copyright (c) 2007 Henri Torgemane + * + * Derived from: + * A JavaScript implementation of the Secure Hash Standard + * Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/ + * Derived from: + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + + + public class SHA256 extends SHABase implements IHash + { + + protected static const k:Array = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; + protected var h:Array = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + + public function SHA256(){ + } + + public override function getHashSize():uint + { + return 32; + } + + protected override function core(x:Array, len:uint):Array { + /* append padding */ + x[len >> 5] |= 0x80 << (24 - len % 32); + x[((len + 64 >> 9) << 4) + 15] = len; + + var w:Array = []; + var a:uint = h[0]; + var b:uint = h[1]; + var c:uint = h[2]; + var d:uint = h[3]; + var e:uint = h[4]; + var f:uint = h[5]; + var g:uint = h[6]; + var h:uint = h[7]; + + for (var i:uint=0; i>>3); + var s1:uint = rrol(w[j-2], 17)^rrol(w[j-2],19)^(w[j-2]>>>10); + w[j] = w[j-16] + s0 + w[j-7] + s1; + } + var t2:uint = (rrol(a,2) ^ rrol(a,13) ^ rrol(a,22)) + ((a&b) ^ (a&c) ^ (b&c)); + var t1:uint = h + (rrol(e,6) ^ rrol(e,11) ^ rrol(e,25)) + ((e&f)^(g&~e)) + k[j] + w[j] + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + + } + a += olda; + b += oldb; + c += oldc; + d += oldd; + e += olde; + f += oldf; + g += oldg; + h += oldh; + } + return [ a,b,c,d,e,f,g,h ]; + } + + /* + * Bitwise rotate a 32-bit number to the right. + */ + protected function rrol(num:uint, cnt:uint):uint { + return (num << (32-cnt)) | (num >>> cnt); + } + + public override function toString():String { + return "sha256"; + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as new file mode 100644 index 00000000..dc9bafea --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as @@ -0,0 +1,71 @@ +/** + * SHABase + * + * An ActionScript 3 abstract class for the SHA family of hash functions + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.hash +{ + import flash.utils.ByteArray; + import flash.utils.Endian; + + public class SHABase implements IHash + { + + public function SHABase() { } + + public var pad_size:int = 40; + public function getInputSize():uint + { + return 64; + } + + public function getHashSize():uint + { + return 0; + } + + public function getPadSize():int + { + return pad_size; + } + + public function hash(src:ByteArray):ByteArray + { + var savedLength:uint = src.length; + var savedEndian:String = src.endian; + + src.endian = Endian.BIG_ENDIAN; + var len:uint = savedLength *8; + // pad to nearest int. + while (src.length%4!=0) { + src[src.length]=0; + } + // convert ByteArray to an array of uint + src.position=0; + var a:Array = []; + for (var i:uint=0;i>> 8; + pool[pptr++] = t&255; + } + pptr=0; + seed(); + } + + public function seed(x:int = 0):void { + if (x==0) { + x = new Date().getTime(); + } + pool[pptr++] ^= x & 255; + pool[pptr++] ^= (x>>8)&255; + pool[pptr++] ^= (x>>16)&255; + pool[pptr++] ^= (x>>24)&255; + pptr %= psize; + seeded = true; + } + + /** + * Gather anything we have that isn't entirely predictable: + * - memory used + * - system capabilities + * - timing stuff + * - installed fonts + */ + public function autoSeed():void { + var b:ByteArray = new ByteArray; + b.writeUnsignedInt(System.totalMemory); + b.writeUTF(Capabilities.serverString); + b.writeUnsignedInt(getTimer()); + b.writeUnsignedInt((new Date).getTime()); + var a:Array = Font.enumerateFonts(true); + for each (var f:Font in a) { + b.writeUTF(f.fontName); + b.writeUTF(f.fontStyle); + b.writeUTF(f.fontType); + } + b.position=0; + while (b.bytesAvailable>=4) { + seed(b.readUnsignedInt()); + } + } + + + public function nextBytes(buffer:ByteArray, length:int):void { + while (length--) { + buffer.writeByte(nextByte()); + } + } + public function nextByte():int { + if (!ready) { + if (!seeded) { + autoSeed(); + } + state.init(pool); + pool.length = 0; + pptr = 0; + ready = true; + } + return state.next(); + } + public function dispose():void { + for (var i:uint=0;i= src.length) { + src.position = 0; + } + var bl:uint = getBlockSize(); + var end:int = src.position + length; + while (src.position= src.length) { + src.position = 0; + } + var bl:uint = getBlockSize(); + var end:int = src.position + length; + while (src.position=p && n>11) { + out[--n] = src[i--]; + } + out[--n] = 0; + if (type==0x02) { // type 2 + var rng:Random = new Random; + var x:int = 0; + while (n>2) { + do { + x = rng.nextByte(); + } while (x==0); + out[--n] = x; + } + } else { // type 1 + while (n>2) { + out[--n] = 0xFF; + } + } + out[--n] = type; + out[--n] = 0; + return out; + } + + /** + * + * @param src + * @param n + * @param type Not used. + * @return + * + */ + private function pkcs1unpad(src:BigInteger, n:uint, type:uint = 0x02):ByteArray { + var b:ByteArray = src.toByteArray(); + var out:ByteArray = new ByteArray; + + b.position = 0; + var i:int = 0; + while (i>1; + var key:RSAKey = new RSAKey(null,0,null); + key.e = parseInt(E, 16); + var ee:BigInteger = new BigInteger(E,16, true); + for (;;) { + for (;;) { + key.p = bigRandom(B-qs, rng); + if (key.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE)==0 && + key.p.isProbablePrime(10)) break; + } + for (;;) { + key.q = bigRandom(qs, rng); + if (key.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE)==0 && + key.q.isProbablePrime(10)) break; + } + if (key.p.compareTo(key.q)<=0) { + var t:BigInteger = key.p; + key.p = key.q; + key.q = t; + } + var p1:BigInteger = key.p.subtract(BigInteger.ONE); + var q1:BigInteger = key.q.subtract(BigInteger.ONE); + var phi:BigInteger = p1.multiply(q1); + if (phi.gcd(ee).compareTo(BigInteger.ONE)==0) { + key.n = key.p.multiply(key.q); + key.d = ee.modInverse(phi); + key.dmp1 = key.d.mod(p1); + key.dmq1 = key.d.mod(q1); + key.coeff = key.q.modInverse(key.p); + break; + } + } + return key; + } + + protected static function bigRandom(bits:int, rnd:Random):BigInteger { + if (bits<2) return BigInteger.nbv(1); + var x:ByteArray = new ByteArray; + rnd.nextBytes(x, (bits>>3)); + x.position = 0; + var b:BigInteger = new BigInteger(x,0,true); + b.primify(bits, 1); + return b; + } + + protected function doPublic(x:BigInteger):BigInteger { + return x.modPowInt(e, n); + } + + protected function doPrivate2(x:BigInteger):BigInteger { + if (p==null && q==null) { + return x.modPow(d,n); + } + + var xp:BigInteger = x.mod(p).modPow(dmp1, p); + var xq:BigInteger = x.mod(q).modPow(dmq1, q); + + while (xp.compareTo(xq)<0) { + xp = xp.add(p); + } + var r:BigInteger = xp.subtract(xq).multiply(coeff).mod(p).multiply(q).add(xq); + + return r; + } + + protected function doPrivate(x:BigInteger):BigInteger { + if (p==null || q==null) { + return x.modPow(d, n); + } + // TODO: re-calculate any missing CRT params + var xp:BigInteger = x.mod(p).modPow(dmp1, p); + var xq:BigInteger = x.mod(q).modPow(dmq1, q); + + while (xp.compareTo(xq)<0) { + xp = xp.add(p); + } + return xp.subtract(xq).multiply(coeff).mod(p).multiply(q).add(xq); + } + + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as new file mode 100644 index 00000000..a2280b7b --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as @@ -0,0 +1,2797 @@ +/** + * AESKey + * + * An ActionScript 3 implementation of the Advanced Encryption Standard, as + * defined in FIPS PUB 197 + * Copyright (c) 2007 Henri Torgemane + * + * Derived from: + * A public domain implementation from Karl Malbrain, malbrain@yahoo.com + * (http://www.geocities.com/malbrain/aestable_c.html) + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric +{ + import com.hurlant.crypto.prng.Random; + import com.hurlant.util.Hex; + import com.hurlant.util.Memory; + + import flash.utils.ByteArray; + + public class AESKey implements ISymmetricKey + { + // AES only supports Nb=4 + private static const Nb:uint = 4; // number of columns in the state & expanded key + + // TODO: + // - move those tables in binary files, then + // - [Embed()] them as ByteArray directly. + // (should result in smaller .swf, and faster initialization time.) + + private static const _Sbox:Array = [ // forward s-box + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; + private static const _InvSbox:Array = [ // inverse s-box + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; + private static const _Xtime2Sbox:Array = [ // combined Xtimes2[Sbox[]] + 0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec, + 0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b, + 0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a, + 0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea, + 0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13, + 0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85, + 0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b, + 0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf, + 0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6, + 0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad, + 0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2, + 0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10, + 0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f, + 0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27, + 0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5, + 0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c]; + private static const _Xtime3Sbox:Array = [ // combined Xtimes3[Sbox[]] + 0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a, + 0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b, + 0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f, + 0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f, + 0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97, + 0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a, + 0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3, + 0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d, + 0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95, + 0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76, + 0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b, + 0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18, + 0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85, + 0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9, + 0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a, + 0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a]; + // modular multiplication tables + // based on: + + // Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x) + // Xtime3[x] = x^Xtime2[x]; + private static const _Xtime2:Array = [ + 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, + 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, + 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, + 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, + 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, + 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, + 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, + 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, + 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, + 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, + 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, + 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, + 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, + 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, + 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, + 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5]; + private static const _Xtime9:Array = [ + 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, + 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, + 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, + 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, + 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, + 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, + 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, + 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, + 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, + 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, + 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, + 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, + 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, + 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, + 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, + 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46]; + private static const _XtimeB:Array = [ + 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, + 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, + 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, + 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, + 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, + 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, + 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, + 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, + 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, + 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, + 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, + 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, + 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, + 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, + 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, + 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3]; + private static const _XtimeD:Array = [ + 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, + 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, + 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, + 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, + 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, + 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, + 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, + 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, + 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, + 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, + 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, + 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, + 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, + 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, + 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, + 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97]; + private static const _XtimeE:Array = [ + 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, + 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, + 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, + 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, + 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, + 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, + 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, + 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, + 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, + 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, + 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, + 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, + 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, + 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, + 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d]; + static private var _Rcon:Array = [ + 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + static private var Sbox:ByteArray; + static private var InvSbox:ByteArray; + static private var Xtime2Sbox:ByteArray + static private var Xtime3Sbox:ByteArray + static private var Xtime2:ByteArray; + static private var Xtime9:ByteArray; + static private var XtimeB:ByteArray; + static private var XtimeD:ByteArray; + static private var XtimeE:ByteArray; + static private var Rcon:ByteArray; + // static initializer + { + static private var i:uint; + Sbox = new ByteArray; + InvSbox = new ByteArray; + Xtime2Sbox = new ByteArray; + Xtime3Sbox = new ByteArray; + Xtime2 = new ByteArray; + Xtime9 = new ByteArray; + XtimeB = new ByteArray; + XtimeD = new ByteArray; + XtimeE = new ByteArray; + /* + for (i=0;i<256;i++) { + Sbox[i] = _Sbox[i]; + InvSbox[i] = _InvSbox[i]; + Xtime2Sbox[i] = _Xtime2Sbox[i]; + Xtime3Sbox[i] = _Xtime3Sbox[i]; + Xtime2[i] = _Xtime2[i]; + Xtime9[i] = _Xtime9[i]; + XtimeB[i] = _XtimeB[i]; + XtimeD[i] = _XtimeD[i]; + XtimeE[i] = _XtimeE[i]; + } + */ + Sbox[0] = _Sbox[0] + InvSbox[0] = _InvSbox[0] + Xtime2Sbox[0] = _Xtime2Sbox[0] + Xtime3Sbox[0] = _Xtime3Sbox[0] + Xtime2[0] = _Xtime2[0] + Xtime9[0] = _Xtime9[0] + XtimeB[0] = _XtimeB[0] + XtimeD[0] = _XtimeD[0] + XtimeE[0] = _XtimeE[0] + Sbox[1] = _Sbox[1] + InvSbox[1] = _InvSbox[1] + Xtime2Sbox[1] = _Xtime2Sbox[1] + Xtime3Sbox[1] = _Xtime3Sbox[1] + Xtime2[1] = _Xtime2[1] + Xtime9[1] = _Xtime9[1] + XtimeB[1] = _XtimeB[1] + XtimeD[1] = _XtimeD[1] + XtimeE[1] = _XtimeE[1] + Sbox[2] = _Sbox[2] + InvSbox[2] = _InvSbox[2] + Xtime2Sbox[2] = _Xtime2Sbox[2] + Xtime3Sbox[2] = _Xtime3Sbox[2] + Xtime2[2] = _Xtime2[2] + Xtime9[2] = _Xtime9[2] + XtimeB[2] = _XtimeB[2] + XtimeD[2] = _XtimeD[2] + XtimeE[2] = _XtimeE[2] + Sbox[3] = _Sbox[3] + InvSbox[3] = _InvSbox[3] + Xtime2Sbox[3] = _Xtime2Sbox[3] + Xtime3Sbox[3] = _Xtime3Sbox[3] + Xtime2[3] = _Xtime2[3] + Xtime9[3] = _Xtime9[3] + XtimeB[3] = _XtimeB[3] + XtimeD[3] = _XtimeD[3] + XtimeE[3] = _XtimeE[3] + Sbox[4] = _Sbox[4] + InvSbox[4] = _InvSbox[4] + Xtime2Sbox[4] = _Xtime2Sbox[4] + Xtime3Sbox[4] = _Xtime3Sbox[4] + Xtime2[4] = _Xtime2[4] + Xtime9[4] = _Xtime9[4] + XtimeB[4] = _XtimeB[4] + XtimeD[4] = _XtimeD[4] + XtimeE[4] = _XtimeE[4] + Sbox[5] = _Sbox[5] + InvSbox[5] = _InvSbox[5] + Xtime2Sbox[5] = _Xtime2Sbox[5] + Xtime3Sbox[5] = _Xtime3Sbox[5] + Xtime2[5] = _Xtime2[5] + Xtime9[5] = _Xtime9[5] + XtimeB[5] = _XtimeB[5] + XtimeD[5] = _XtimeD[5] + XtimeE[5] = _XtimeE[5] + Sbox[6] = _Sbox[6] + InvSbox[6] = _InvSbox[6] + Xtime2Sbox[6] = _Xtime2Sbox[6] + Xtime3Sbox[6] = _Xtime3Sbox[6] + Xtime2[6] = _Xtime2[6] + Xtime9[6] = _Xtime9[6] + XtimeB[6] = _XtimeB[6] + XtimeD[6] = _XtimeD[6] + XtimeE[6] = _XtimeE[6] + Sbox[7] = _Sbox[7] + InvSbox[7] = _InvSbox[7] + Xtime2Sbox[7] = _Xtime2Sbox[7] + Xtime3Sbox[7] = _Xtime3Sbox[7] + Xtime2[7] = _Xtime2[7] + Xtime9[7] = _Xtime9[7] + XtimeB[7] = _XtimeB[7] + XtimeD[7] = _XtimeD[7] + XtimeE[7] = _XtimeE[7] + Sbox[8] = _Sbox[8] + InvSbox[8] = _InvSbox[8] + Xtime2Sbox[8] = _Xtime2Sbox[8] + Xtime3Sbox[8] = _Xtime3Sbox[8] + Xtime2[8] = _Xtime2[8] + Xtime9[8] = _Xtime9[8] + XtimeB[8] = _XtimeB[8] + XtimeD[8] = _XtimeD[8] + XtimeE[8] = _XtimeE[8] + Sbox[9] = _Sbox[9] + InvSbox[9] = _InvSbox[9] + Xtime2Sbox[9] = _Xtime2Sbox[9] + Xtime3Sbox[9] = _Xtime3Sbox[9] + Xtime2[9] = _Xtime2[9] + Xtime9[9] = _Xtime9[9] + XtimeB[9] = _XtimeB[9] + XtimeD[9] = _XtimeD[9] + XtimeE[9] = _XtimeE[9] + Sbox[10] = _Sbox[10] + InvSbox[10] = _InvSbox[10] + Xtime2Sbox[10] = _Xtime2Sbox[10] + Xtime3Sbox[10] = _Xtime3Sbox[10] + Xtime2[10] = _Xtime2[10] + Xtime9[10] = _Xtime9[10] + XtimeB[10] = _XtimeB[10] + XtimeD[10] = _XtimeD[10] + XtimeE[10] = _XtimeE[10] + Sbox[11] = _Sbox[11] + InvSbox[11] = _InvSbox[11] + Xtime2Sbox[11] = _Xtime2Sbox[11] + Xtime3Sbox[11] = _Xtime3Sbox[11] + Xtime2[11] = _Xtime2[11] + Xtime9[11] = _Xtime9[11] + XtimeB[11] = _XtimeB[11] + XtimeD[11] = _XtimeD[11] + XtimeE[11] = _XtimeE[11] + Sbox[12] = _Sbox[12] + InvSbox[12] = _InvSbox[12] + Xtime2Sbox[12] = _Xtime2Sbox[12] + Xtime3Sbox[12] = _Xtime3Sbox[12] + Xtime2[12] = _Xtime2[12] + Xtime9[12] = _Xtime9[12] + XtimeB[12] = _XtimeB[12] + XtimeD[12] = _XtimeD[12] + XtimeE[12] = _XtimeE[12] + Sbox[13] = _Sbox[13] + InvSbox[13] = _InvSbox[13] + Xtime2Sbox[13] = _Xtime2Sbox[13] + Xtime3Sbox[13] = _Xtime3Sbox[13] + Xtime2[13] = _Xtime2[13] + Xtime9[13] = _Xtime9[13] + XtimeB[13] = _XtimeB[13] + XtimeD[13] = _XtimeD[13] + XtimeE[13] = _XtimeE[13] + Sbox[14] = _Sbox[14] + InvSbox[14] = _InvSbox[14] + Xtime2Sbox[14] = _Xtime2Sbox[14] + Xtime3Sbox[14] = _Xtime3Sbox[14] + Xtime2[14] = _Xtime2[14] + Xtime9[14] = _Xtime9[14] + XtimeB[14] = _XtimeB[14] + XtimeD[14] = _XtimeD[14] + XtimeE[14] = _XtimeE[14] + Sbox[15] = _Sbox[15] + InvSbox[15] = _InvSbox[15] + Xtime2Sbox[15] = _Xtime2Sbox[15] + Xtime3Sbox[15] = _Xtime3Sbox[15] + Xtime2[15] = _Xtime2[15] + Xtime9[15] = _Xtime9[15] + XtimeB[15] = _XtimeB[15] + XtimeD[15] = _XtimeD[15] + XtimeE[15] = _XtimeE[15] + Sbox[16] = _Sbox[16] + InvSbox[16] = _InvSbox[16] + Xtime2Sbox[16] = _Xtime2Sbox[16] + Xtime3Sbox[16] = _Xtime3Sbox[16] + Xtime2[16] = _Xtime2[16] + Xtime9[16] = _Xtime9[16] + XtimeB[16] = _XtimeB[16] + XtimeD[16] = _XtimeD[16] + XtimeE[16] = _XtimeE[16] + Sbox[17] = _Sbox[17] + InvSbox[17] = _InvSbox[17] + Xtime2Sbox[17] = _Xtime2Sbox[17] + Xtime3Sbox[17] = _Xtime3Sbox[17] + Xtime2[17] = _Xtime2[17] + Xtime9[17] = _Xtime9[17] + XtimeB[17] = _XtimeB[17] + XtimeD[17] = _XtimeD[17] + XtimeE[17] = _XtimeE[17] + Sbox[18] = _Sbox[18] + InvSbox[18] = _InvSbox[18] + Xtime2Sbox[18] = _Xtime2Sbox[18] + Xtime3Sbox[18] = _Xtime3Sbox[18] + Xtime2[18] = _Xtime2[18] + Xtime9[18] = _Xtime9[18] + XtimeB[18] = _XtimeB[18] + XtimeD[18] = _XtimeD[18] + XtimeE[18] = _XtimeE[18] + Sbox[19] = _Sbox[19] + InvSbox[19] = _InvSbox[19] + Xtime2Sbox[19] = _Xtime2Sbox[19] + Xtime3Sbox[19] = _Xtime3Sbox[19] + Xtime2[19] = _Xtime2[19] + Xtime9[19] = _Xtime9[19] + XtimeB[19] = _XtimeB[19] + XtimeD[19] = _XtimeD[19] + XtimeE[19] = _XtimeE[19] + Sbox[20] = _Sbox[20] + InvSbox[20] = _InvSbox[20] + Xtime2Sbox[20] = _Xtime2Sbox[20] + Xtime3Sbox[20] = _Xtime3Sbox[20] + Xtime2[20] = _Xtime2[20] + Xtime9[20] = _Xtime9[20] + XtimeB[20] = _XtimeB[20] + XtimeD[20] = _XtimeD[20] + XtimeE[20] = _XtimeE[20] + Sbox[21] = _Sbox[21] + InvSbox[21] = _InvSbox[21] + Xtime2Sbox[21] = _Xtime2Sbox[21] + Xtime3Sbox[21] = _Xtime3Sbox[21] + Xtime2[21] = _Xtime2[21] + Xtime9[21] = _Xtime9[21] + XtimeB[21] = _XtimeB[21] + XtimeD[21] = _XtimeD[21] + XtimeE[21] = _XtimeE[21] + Sbox[22] = _Sbox[22] + InvSbox[22] = _InvSbox[22] + Xtime2Sbox[22] = _Xtime2Sbox[22] + Xtime3Sbox[22] = _Xtime3Sbox[22] + Xtime2[22] = _Xtime2[22] + Xtime9[22] = _Xtime9[22] + XtimeB[22] = _XtimeB[22] + XtimeD[22] = _XtimeD[22] + XtimeE[22] = _XtimeE[22] + Sbox[23] = _Sbox[23] + InvSbox[23] = _InvSbox[23] + Xtime2Sbox[23] = _Xtime2Sbox[23] + Xtime3Sbox[23] = _Xtime3Sbox[23] + Xtime2[23] = _Xtime2[23] + Xtime9[23] = _Xtime9[23] + XtimeB[23] = _XtimeB[23] + XtimeD[23] = _XtimeD[23] + XtimeE[23] = _XtimeE[23] + Sbox[24] = _Sbox[24] + InvSbox[24] = _InvSbox[24] + Xtime2Sbox[24] = _Xtime2Sbox[24] + Xtime3Sbox[24] = _Xtime3Sbox[24] + Xtime2[24] = _Xtime2[24] + Xtime9[24] = _Xtime9[24] + XtimeB[24] = _XtimeB[24] + XtimeD[24] = _XtimeD[24] + XtimeE[24] = _XtimeE[24] + Sbox[25] = _Sbox[25] + InvSbox[25] = _InvSbox[25] + Xtime2Sbox[25] = _Xtime2Sbox[25] + Xtime3Sbox[25] = _Xtime3Sbox[25] + Xtime2[25] = _Xtime2[25] + Xtime9[25] = _Xtime9[25] + XtimeB[25] = _XtimeB[25] + XtimeD[25] = _XtimeD[25] + XtimeE[25] = _XtimeE[25] + Sbox[26] = _Sbox[26] + InvSbox[26] = _InvSbox[26] + Xtime2Sbox[26] = _Xtime2Sbox[26] + Xtime3Sbox[26] = _Xtime3Sbox[26] + Xtime2[26] = _Xtime2[26] + Xtime9[26] = _Xtime9[26] + XtimeB[26] = _XtimeB[26] + XtimeD[26] = _XtimeD[26] + XtimeE[26] = _XtimeE[26] + Sbox[27] = _Sbox[27] + InvSbox[27] = _InvSbox[27] + Xtime2Sbox[27] = _Xtime2Sbox[27] + Xtime3Sbox[27] = _Xtime3Sbox[27] + Xtime2[27] = _Xtime2[27] + Xtime9[27] = _Xtime9[27] + XtimeB[27] = _XtimeB[27] + XtimeD[27] = _XtimeD[27] + XtimeE[27] = _XtimeE[27] + Sbox[28] = _Sbox[28] + InvSbox[28] = _InvSbox[28] + Xtime2Sbox[28] = _Xtime2Sbox[28] + Xtime3Sbox[28] = _Xtime3Sbox[28] + Xtime2[28] = _Xtime2[28] + Xtime9[28] = _Xtime9[28] + XtimeB[28] = _XtimeB[28] + XtimeD[28] = _XtimeD[28] + XtimeE[28] = _XtimeE[28] + Sbox[29] = _Sbox[29] + InvSbox[29] = _InvSbox[29] + Xtime2Sbox[29] = _Xtime2Sbox[29] + Xtime3Sbox[29] = _Xtime3Sbox[29] + Xtime2[29] = _Xtime2[29] + Xtime9[29] = _Xtime9[29] + XtimeB[29] = _XtimeB[29] + XtimeD[29] = _XtimeD[29] + XtimeE[29] = _XtimeE[29] + Sbox[30] = _Sbox[30] + InvSbox[30] = _InvSbox[30] + Xtime2Sbox[30] = _Xtime2Sbox[30] + Xtime3Sbox[30] = _Xtime3Sbox[30] + Xtime2[30] = _Xtime2[30] + Xtime9[30] = _Xtime9[30] + XtimeB[30] = _XtimeB[30] + XtimeD[30] = _XtimeD[30] + XtimeE[30] = _XtimeE[30] + Sbox[31] = _Sbox[31] + InvSbox[31] = _InvSbox[31] + Xtime2Sbox[31] = _Xtime2Sbox[31] + Xtime3Sbox[31] = _Xtime3Sbox[31] + Xtime2[31] = _Xtime2[31] + Xtime9[31] = _Xtime9[31] + XtimeB[31] = _XtimeB[31] + XtimeD[31] = _XtimeD[31] + XtimeE[31] = _XtimeE[31] + Sbox[32] = _Sbox[32] + InvSbox[32] = _InvSbox[32] + Xtime2Sbox[32] = _Xtime2Sbox[32] + Xtime3Sbox[32] = _Xtime3Sbox[32] + Xtime2[32] = _Xtime2[32] + Xtime9[32] = _Xtime9[32] + XtimeB[32] = _XtimeB[32] + XtimeD[32] = _XtimeD[32] + XtimeE[32] = _XtimeE[32] + Sbox[33] = _Sbox[33] + InvSbox[33] = _InvSbox[33] + Xtime2Sbox[33] = _Xtime2Sbox[33] + Xtime3Sbox[33] = _Xtime3Sbox[33] + Xtime2[33] = _Xtime2[33] + Xtime9[33] = _Xtime9[33] + XtimeB[33] = _XtimeB[33] + XtimeD[33] = _XtimeD[33] + XtimeE[33] = _XtimeE[33] + Sbox[34] = _Sbox[34] + InvSbox[34] = _InvSbox[34] + Xtime2Sbox[34] = _Xtime2Sbox[34] + Xtime3Sbox[34] = _Xtime3Sbox[34] + Xtime2[34] = _Xtime2[34] + Xtime9[34] = _Xtime9[34] + XtimeB[34] = _XtimeB[34] + XtimeD[34] = _XtimeD[34] + XtimeE[34] = _XtimeE[34] + Sbox[35] = _Sbox[35] + InvSbox[35] = _InvSbox[35] + Xtime2Sbox[35] = _Xtime2Sbox[35] + Xtime3Sbox[35] = _Xtime3Sbox[35] + Xtime2[35] = _Xtime2[35] + Xtime9[35] = _Xtime9[35] + XtimeB[35] = _XtimeB[35] + XtimeD[35] = _XtimeD[35] + XtimeE[35] = _XtimeE[35] + Sbox[36] = _Sbox[36] + InvSbox[36] = _InvSbox[36] + Xtime2Sbox[36] = _Xtime2Sbox[36] + Xtime3Sbox[36] = _Xtime3Sbox[36] + Xtime2[36] = _Xtime2[36] + Xtime9[36] = _Xtime9[36] + XtimeB[36] = _XtimeB[36] + XtimeD[36] = _XtimeD[36] + XtimeE[36] = _XtimeE[36] + Sbox[37] = _Sbox[37] + InvSbox[37] = _InvSbox[37] + Xtime2Sbox[37] = _Xtime2Sbox[37] + Xtime3Sbox[37] = _Xtime3Sbox[37] + Xtime2[37] = _Xtime2[37] + Xtime9[37] = _Xtime9[37] + XtimeB[37] = _XtimeB[37] + XtimeD[37] = _XtimeD[37] + XtimeE[37] = _XtimeE[37] + Sbox[38] = _Sbox[38] + InvSbox[38] = _InvSbox[38] + Xtime2Sbox[38] = _Xtime2Sbox[38] + Xtime3Sbox[38] = _Xtime3Sbox[38] + Xtime2[38] = _Xtime2[38] + Xtime9[38] = _Xtime9[38] + XtimeB[38] = _XtimeB[38] + XtimeD[38] = _XtimeD[38] + XtimeE[38] = _XtimeE[38] + Sbox[39] = _Sbox[39] + InvSbox[39] = _InvSbox[39] + Xtime2Sbox[39] = _Xtime2Sbox[39] + Xtime3Sbox[39] = _Xtime3Sbox[39] + Xtime2[39] = _Xtime2[39] + Xtime9[39] = _Xtime9[39] + XtimeB[39] = _XtimeB[39] + XtimeD[39] = _XtimeD[39] + XtimeE[39] = _XtimeE[39] + Sbox[40] = _Sbox[40] + InvSbox[40] = _InvSbox[40] + Xtime2Sbox[40] = _Xtime2Sbox[40] + Xtime3Sbox[40] = _Xtime3Sbox[40] + Xtime2[40] = _Xtime2[40] + Xtime9[40] = _Xtime9[40] + XtimeB[40] = _XtimeB[40] + XtimeD[40] = _XtimeD[40] + XtimeE[40] = _XtimeE[40] + Sbox[41] = _Sbox[41] + InvSbox[41] = _InvSbox[41] + Xtime2Sbox[41] = _Xtime2Sbox[41] + Xtime3Sbox[41] = _Xtime3Sbox[41] + Xtime2[41] = _Xtime2[41] + Xtime9[41] = _Xtime9[41] + XtimeB[41] = _XtimeB[41] + XtimeD[41] = _XtimeD[41] + XtimeE[41] = _XtimeE[41] + Sbox[42] = _Sbox[42] + InvSbox[42] = _InvSbox[42] + Xtime2Sbox[42] = _Xtime2Sbox[42] + Xtime3Sbox[42] = _Xtime3Sbox[42] + Xtime2[42] = _Xtime2[42] + Xtime9[42] = _Xtime9[42] + XtimeB[42] = _XtimeB[42] + XtimeD[42] = _XtimeD[42] + XtimeE[42] = _XtimeE[42] + Sbox[43] = _Sbox[43] + InvSbox[43] = _InvSbox[43] + Xtime2Sbox[43] = _Xtime2Sbox[43] + Xtime3Sbox[43] = _Xtime3Sbox[43] + Xtime2[43] = _Xtime2[43] + Xtime9[43] = _Xtime9[43] + XtimeB[43] = _XtimeB[43] + XtimeD[43] = _XtimeD[43] + XtimeE[43] = _XtimeE[43] + Sbox[44] = _Sbox[44] + InvSbox[44] = _InvSbox[44] + Xtime2Sbox[44] = _Xtime2Sbox[44] + Xtime3Sbox[44] = _Xtime3Sbox[44] + Xtime2[44] = _Xtime2[44] + Xtime9[44] = _Xtime9[44] + XtimeB[44] = _XtimeB[44] + XtimeD[44] = _XtimeD[44] + XtimeE[44] = _XtimeE[44] + Sbox[45] = _Sbox[45] + InvSbox[45] = _InvSbox[45] + Xtime2Sbox[45] = _Xtime2Sbox[45] + Xtime3Sbox[45] = _Xtime3Sbox[45] + Xtime2[45] = _Xtime2[45] + Xtime9[45] = _Xtime9[45] + XtimeB[45] = _XtimeB[45] + XtimeD[45] = _XtimeD[45] + XtimeE[45] = _XtimeE[45] + Sbox[46] = _Sbox[46] + InvSbox[46] = _InvSbox[46] + Xtime2Sbox[46] = _Xtime2Sbox[46] + Xtime3Sbox[46] = _Xtime3Sbox[46] + Xtime2[46] = _Xtime2[46] + Xtime9[46] = _Xtime9[46] + XtimeB[46] = _XtimeB[46] + XtimeD[46] = _XtimeD[46] + XtimeE[46] = _XtimeE[46] + Sbox[47] = _Sbox[47] + InvSbox[47] = _InvSbox[47] + Xtime2Sbox[47] = _Xtime2Sbox[47] + Xtime3Sbox[47] = _Xtime3Sbox[47] + Xtime2[47] = _Xtime2[47] + Xtime9[47] = _Xtime9[47] + XtimeB[47] = _XtimeB[47] + XtimeD[47] = _XtimeD[47] + XtimeE[47] = _XtimeE[47] + Sbox[48] = _Sbox[48] + InvSbox[48] = _InvSbox[48] + Xtime2Sbox[48] = _Xtime2Sbox[48] + Xtime3Sbox[48] = _Xtime3Sbox[48] + Xtime2[48] = _Xtime2[48] + Xtime9[48] = _Xtime9[48] + XtimeB[48] = _XtimeB[48] + XtimeD[48] = _XtimeD[48] + XtimeE[48] = _XtimeE[48] + Sbox[49] = _Sbox[49] + InvSbox[49] = _InvSbox[49] + Xtime2Sbox[49] = _Xtime2Sbox[49] + Xtime3Sbox[49] = _Xtime3Sbox[49] + Xtime2[49] = _Xtime2[49] + Xtime9[49] = _Xtime9[49] + XtimeB[49] = _XtimeB[49] + XtimeD[49] = _XtimeD[49] + XtimeE[49] = _XtimeE[49] + Sbox[50] = _Sbox[50] + InvSbox[50] = _InvSbox[50] + Xtime2Sbox[50] = _Xtime2Sbox[50] + Xtime3Sbox[50] = _Xtime3Sbox[50] + Xtime2[50] = _Xtime2[50] + Xtime9[50] = _Xtime9[50] + XtimeB[50] = _XtimeB[50] + XtimeD[50] = _XtimeD[50] + XtimeE[50] = _XtimeE[50] + Sbox[51] = _Sbox[51] + InvSbox[51] = _InvSbox[51] + Xtime2Sbox[51] = _Xtime2Sbox[51] + Xtime3Sbox[51] = _Xtime3Sbox[51] + Xtime2[51] = _Xtime2[51] + Xtime9[51] = _Xtime9[51] + XtimeB[51] = _XtimeB[51] + XtimeD[51] = _XtimeD[51] + XtimeE[51] = _XtimeE[51] + Sbox[52] = _Sbox[52] + InvSbox[52] = _InvSbox[52] + Xtime2Sbox[52] = _Xtime2Sbox[52] + Xtime3Sbox[52] = _Xtime3Sbox[52] + Xtime2[52] = _Xtime2[52] + Xtime9[52] = _Xtime9[52] + XtimeB[52] = _XtimeB[52] + XtimeD[52] = _XtimeD[52] + XtimeE[52] = _XtimeE[52] + Sbox[53] = _Sbox[53] + InvSbox[53] = _InvSbox[53] + Xtime2Sbox[53] = _Xtime2Sbox[53] + Xtime3Sbox[53] = _Xtime3Sbox[53] + Xtime2[53] = _Xtime2[53] + Xtime9[53] = _Xtime9[53] + XtimeB[53] = _XtimeB[53] + XtimeD[53] = _XtimeD[53] + XtimeE[53] = _XtimeE[53] + Sbox[54] = _Sbox[54] + InvSbox[54] = _InvSbox[54] + Xtime2Sbox[54] = _Xtime2Sbox[54] + Xtime3Sbox[54] = _Xtime3Sbox[54] + Xtime2[54] = _Xtime2[54] + Xtime9[54] = _Xtime9[54] + XtimeB[54] = _XtimeB[54] + XtimeD[54] = _XtimeD[54] + XtimeE[54] = _XtimeE[54] + Sbox[55] = _Sbox[55] + InvSbox[55] = _InvSbox[55] + Xtime2Sbox[55] = _Xtime2Sbox[55] + Xtime3Sbox[55] = _Xtime3Sbox[55] + Xtime2[55] = _Xtime2[55] + Xtime9[55] = _Xtime9[55] + XtimeB[55] = _XtimeB[55] + XtimeD[55] = _XtimeD[55] + XtimeE[55] = _XtimeE[55] + Sbox[56] = _Sbox[56] + InvSbox[56] = _InvSbox[56] + Xtime2Sbox[56] = _Xtime2Sbox[56] + Xtime3Sbox[56] = _Xtime3Sbox[56] + Xtime2[56] = _Xtime2[56] + Xtime9[56] = _Xtime9[56] + XtimeB[56] = _XtimeB[56] + XtimeD[56] = _XtimeD[56] + XtimeE[56] = _XtimeE[56] + Sbox[57] = _Sbox[57] + InvSbox[57] = _InvSbox[57] + Xtime2Sbox[57] = _Xtime2Sbox[57] + Xtime3Sbox[57] = _Xtime3Sbox[57] + Xtime2[57] = _Xtime2[57] + Xtime9[57] = _Xtime9[57] + XtimeB[57] = _XtimeB[57] + XtimeD[57] = _XtimeD[57] + XtimeE[57] = _XtimeE[57] + Sbox[58] = _Sbox[58] + InvSbox[58] = _InvSbox[58] + Xtime2Sbox[58] = _Xtime2Sbox[58] + Xtime3Sbox[58] = _Xtime3Sbox[58] + Xtime2[58] = _Xtime2[58] + Xtime9[58] = _Xtime9[58] + XtimeB[58] = _XtimeB[58] + XtimeD[58] = _XtimeD[58] + XtimeE[58] = _XtimeE[58] + Sbox[59] = _Sbox[59] + InvSbox[59] = _InvSbox[59] + Xtime2Sbox[59] = _Xtime2Sbox[59] + Xtime3Sbox[59] = _Xtime3Sbox[59] + Xtime2[59] = _Xtime2[59] + Xtime9[59] = _Xtime9[59] + XtimeB[59] = _XtimeB[59] + XtimeD[59] = _XtimeD[59] + XtimeE[59] = _XtimeE[59] + Sbox[60] = _Sbox[60] + InvSbox[60] = _InvSbox[60] + Xtime2Sbox[60] = _Xtime2Sbox[60] + Xtime3Sbox[60] = _Xtime3Sbox[60] + Xtime2[60] = _Xtime2[60] + Xtime9[60] = _Xtime9[60] + XtimeB[60] = _XtimeB[60] + XtimeD[60] = _XtimeD[60] + XtimeE[60] = _XtimeE[60] + Sbox[61] = _Sbox[61] + InvSbox[61] = _InvSbox[61] + Xtime2Sbox[61] = _Xtime2Sbox[61] + Xtime3Sbox[61] = _Xtime3Sbox[61] + Xtime2[61] = _Xtime2[61] + Xtime9[61] = _Xtime9[61] + XtimeB[61] = _XtimeB[61] + XtimeD[61] = _XtimeD[61] + XtimeE[61] = _XtimeE[61] + Sbox[62] = _Sbox[62] + InvSbox[62] = _InvSbox[62] + Xtime2Sbox[62] = _Xtime2Sbox[62] + Xtime3Sbox[62] = _Xtime3Sbox[62] + Xtime2[62] = _Xtime2[62] + Xtime9[62] = _Xtime9[62] + XtimeB[62] = _XtimeB[62] + XtimeD[62] = _XtimeD[62] + XtimeE[62] = _XtimeE[62] + Sbox[63] = _Sbox[63] + InvSbox[63] = _InvSbox[63] + Xtime2Sbox[63] = _Xtime2Sbox[63] + Xtime3Sbox[63] = _Xtime3Sbox[63] + Xtime2[63] = _Xtime2[63] + Xtime9[63] = _Xtime9[63] + XtimeB[63] = _XtimeB[63] + XtimeD[63] = _XtimeD[63] + XtimeE[63] = _XtimeE[63] + Sbox[64] = _Sbox[64] + InvSbox[64] = _InvSbox[64] + Xtime2Sbox[64] = _Xtime2Sbox[64] + Xtime3Sbox[64] = _Xtime3Sbox[64] + Xtime2[64] = _Xtime2[64] + Xtime9[64] = _Xtime9[64] + XtimeB[64] = _XtimeB[64] + XtimeD[64] = _XtimeD[64] + XtimeE[64] = _XtimeE[64] + Sbox[65] = _Sbox[65] + InvSbox[65] = _InvSbox[65] + Xtime2Sbox[65] = _Xtime2Sbox[65] + Xtime3Sbox[65] = _Xtime3Sbox[65] + Xtime2[65] = _Xtime2[65] + Xtime9[65] = _Xtime9[65] + XtimeB[65] = _XtimeB[65] + XtimeD[65] = _XtimeD[65] + XtimeE[65] = _XtimeE[65] + Sbox[66] = _Sbox[66] + InvSbox[66] = _InvSbox[66] + Xtime2Sbox[66] = _Xtime2Sbox[66] + Xtime3Sbox[66] = _Xtime3Sbox[66] + Xtime2[66] = _Xtime2[66] + Xtime9[66] = _Xtime9[66] + XtimeB[66] = _XtimeB[66] + XtimeD[66] = _XtimeD[66] + XtimeE[66] = _XtimeE[66] + Sbox[67] = _Sbox[67] + InvSbox[67] = _InvSbox[67] + Xtime2Sbox[67] = _Xtime2Sbox[67] + Xtime3Sbox[67] = _Xtime3Sbox[67] + Xtime2[67] = _Xtime2[67] + Xtime9[67] = _Xtime9[67] + XtimeB[67] = _XtimeB[67] + XtimeD[67] = _XtimeD[67] + XtimeE[67] = _XtimeE[67] + Sbox[68] = _Sbox[68] + InvSbox[68] = _InvSbox[68] + Xtime2Sbox[68] = _Xtime2Sbox[68] + Xtime3Sbox[68] = _Xtime3Sbox[68] + Xtime2[68] = _Xtime2[68] + Xtime9[68] = _Xtime9[68] + XtimeB[68] = _XtimeB[68] + XtimeD[68] = _XtimeD[68] + XtimeE[68] = _XtimeE[68] + Sbox[69] = _Sbox[69] + InvSbox[69] = _InvSbox[69] + Xtime2Sbox[69] = _Xtime2Sbox[69] + Xtime3Sbox[69] = _Xtime3Sbox[69] + Xtime2[69] = _Xtime2[69] + Xtime9[69] = _Xtime9[69] + XtimeB[69] = _XtimeB[69] + XtimeD[69] = _XtimeD[69] + XtimeE[69] = _XtimeE[69] + Sbox[70] = _Sbox[70] + InvSbox[70] = _InvSbox[70] + Xtime2Sbox[70] = _Xtime2Sbox[70] + Xtime3Sbox[70] = _Xtime3Sbox[70] + Xtime2[70] = _Xtime2[70] + Xtime9[70] = _Xtime9[70] + XtimeB[70] = _XtimeB[70] + XtimeD[70] = _XtimeD[70] + XtimeE[70] = _XtimeE[70] + Sbox[71] = _Sbox[71] + InvSbox[71] = _InvSbox[71] + Xtime2Sbox[71] = _Xtime2Sbox[71] + Xtime3Sbox[71] = _Xtime3Sbox[71] + Xtime2[71] = _Xtime2[71] + Xtime9[71] = _Xtime9[71] + XtimeB[71] = _XtimeB[71] + XtimeD[71] = _XtimeD[71] + XtimeE[71] = _XtimeE[71] + Sbox[72] = _Sbox[72] + InvSbox[72] = _InvSbox[72] + Xtime2Sbox[72] = _Xtime2Sbox[72] + Xtime3Sbox[72] = _Xtime3Sbox[72] + Xtime2[72] = _Xtime2[72] + Xtime9[72] = _Xtime9[72] + XtimeB[72] = _XtimeB[72] + XtimeD[72] = _XtimeD[72] + XtimeE[72] = _XtimeE[72] + Sbox[73] = _Sbox[73] + InvSbox[73] = _InvSbox[73] + Xtime2Sbox[73] = _Xtime2Sbox[73] + Xtime3Sbox[73] = _Xtime3Sbox[73] + Xtime2[73] = _Xtime2[73] + Xtime9[73] = _Xtime9[73] + XtimeB[73] = _XtimeB[73] + XtimeD[73] = _XtimeD[73] + XtimeE[73] = _XtimeE[73] + Sbox[74] = _Sbox[74] + InvSbox[74] = _InvSbox[74] + Xtime2Sbox[74] = _Xtime2Sbox[74] + Xtime3Sbox[74] = _Xtime3Sbox[74] + Xtime2[74] = _Xtime2[74] + Xtime9[74] = _Xtime9[74] + XtimeB[74] = _XtimeB[74] + XtimeD[74] = _XtimeD[74] + XtimeE[74] = _XtimeE[74] + Sbox[75] = _Sbox[75] + InvSbox[75] = _InvSbox[75] + Xtime2Sbox[75] = _Xtime2Sbox[75] + Xtime3Sbox[75] = _Xtime3Sbox[75] + Xtime2[75] = _Xtime2[75] + Xtime9[75] = _Xtime9[75] + XtimeB[75] = _XtimeB[75] + XtimeD[75] = _XtimeD[75] + XtimeE[75] = _XtimeE[75] + Sbox[76] = _Sbox[76] + InvSbox[76] = _InvSbox[76] + Xtime2Sbox[76] = _Xtime2Sbox[76] + Xtime3Sbox[76] = _Xtime3Sbox[76] + Xtime2[76] = _Xtime2[76] + Xtime9[76] = _Xtime9[76] + XtimeB[76] = _XtimeB[76] + XtimeD[76] = _XtimeD[76] + XtimeE[76] = _XtimeE[76] + Sbox[77] = _Sbox[77] + InvSbox[77] = _InvSbox[77] + Xtime2Sbox[77] = _Xtime2Sbox[77] + Xtime3Sbox[77] = _Xtime3Sbox[77] + Xtime2[77] = _Xtime2[77] + Xtime9[77] = _Xtime9[77] + XtimeB[77] = _XtimeB[77] + XtimeD[77] = _XtimeD[77] + XtimeE[77] = _XtimeE[77] + Sbox[78] = _Sbox[78] + InvSbox[78] = _InvSbox[78] + Xtime2Sbox[78] = _Xtime2Sbox[78] + Xtime3Sbox[78] = _Xtime3Sbox[78] + Xtime2[78] = _Xtime2[78] + Xtime9[78] = _Xtime9[78] + XtimeB[78] = _XtimeB[78] + XtimeD[78] = _XtimeD[78] + XtimeE[78] = _XtimeE[78] + Sbox[79] = _Sbox[79] + InvSbox[79] = _InvSbox[79] + Xtime2Sbox[79] = _Xtime2Sbox[79] + Xtime3Sbox[79] = _Xtime3Sbox[79] + Xtime2[79] = _Xtime2[79] + Xtime9[79] = _Xtime9[79] + XtimeB[79] = _XtimeB[79] + XtimeD[79] = _XtimeD[79] + XtimeE[79] = _XtimeE[79] + Sbox[80] = _Sbox[80] + InvSbox[80] = _InvSbox[80] + Xtime2Sbox[80] = _Xtime2Sbox[80] + Xtime3Sbox[80] = _Xtime3Sbox[80] + Xtime2[80] = _Xtime2[80] + Xtime9[80] = _Xtime9[80] + XtimeB[80] = _XtimeB[80] + XtimeD[80] = _XtimeD[80] + XtimeE[80] = _XtimeE[80] + Sbox[81] = _Sbox[81] + InvSbox[81] = _InvSbox[81] + Xtime2Sbox[81] = _Xtime2Sbox[81] + Xtime3Sbox[81] = _Xtime3Sbox[81] + Xtime2[81] = _Xtime2[81] + Xtime9[81] = _Xtime9[81] + XtimeB[81] = _XtimeB[81] + XtimeD[81] = _XtimeD[81] + XtimeE[81] = _XtimeE[81] + Sbox[82] = _Sbox[82] + InvSbox[82] = _InvSbox[82] + Xtime2Sbox[82] = _Xtime2Sbox[82] + Xtime3Sbox[82] = _Xtime3Sbox[82] + Xtime2[82] = _Xtime2[82] + Xtime9[82] = _Xtime9[82] + XtimeB[82] = _XtimeB[82] + XtimeD[82] = _XtimeD[82] + XtimeE[82] = _XtimeE[82] + Sbox[83] = _Sbox[83] + InvSbox[83] = _InvSbox[83] + Xtime2Sbox[83] = _Xtime2Sbox[83] + Xtime3Sbox[83] = _Xtime3Sbox[83] + Xtime2[83] = _Xtime2[83] + Xtime9[83] = _Xtime9[83] + XtimeB[83] = _XtimeB[83] + XtimeD[83] = _XtimeD[83] + XtimeE[83] = _XtimeE[83] + Sbox[84] = _Sbox[84] + InvSbox[84] = _InvSbox[84] + Xtime2Sbox[84] = _Xtime2Sbox[84] + Xtime3Sbox[84] = _Xtime3Sbox[84] + Xtime2[84] = _Xtime2[84] + Xtime9[84] = _Xtime9[84] + XtimeB[84] = _XtimeB[84] + XtimeD[84] = _XtimeD[84] + XtimeE[84] = _XtimeE[84] + Sbox[85] = _Sbox[85] + InvSbox[85] = _InvSbox[85] + Xtime2Sbox[85] = _Xtime2Sbox[85] + Xtime3Sbox[85] = _Xtime3Sbox[85] + Xtime2[85] = _Xtime2[85] + Xtime9[85] = _Xtime9[85] + XtimeB[85] = _XtimeB[85] + XtimeD[85] = _XtimeD[85] + XtimeE[85] = _XtimeE[85] + Sbox[86] = _Sbox[86] + InvSbox[86] = _InvSbox[86] + Xtime2Sbox[86] = _Xtime2Sbox[86] + Xtime3Sbox[86] = _Xtime3Sbox[86] + Xtime2[86] = _Xtime2[86] + Xtime9[86] = _Xtime9[86] + XtimeB[86] = _XtimeB[86] + XtimeD[86] = _XtimeD[86] + XtimeE[86] = _XtimeE[86] + Sbox[87] = _Sbox[87] + InvSbox[87] = _InvSbox[87] + Xtime2Sbox[87] = _Xtime2Sbox[87] + Xtime3Sbox[87] = _Xtime3Sbox[87] + Xtime2[87] = _Xtime2[87] + Xtime9[87] = _Xtime9[87] + XtimeB[87] = _XtimeB[87] + XtimeD[87] = _XtimeD[87] + XtimeE[87] = _XtimeE[87] + Sbox[88] = _Sbox[88] + InvSbox[88] = _InvSbox[88] + Xtime2Sbox[88] = _Xtime2Sbox[88] + Xtime3Sbox[88] = _Xtime3Sbox[88] + Xtime2[88] = _Xtime2[88] + Xtime9[88] = _Xtime9[88] + XtimeB[88] = _XtimeB[88] + XtimeD[88] = _XtimeD[88] + XtimeE[88] = _XtimeE[88] + Sbox[89] = _Sbox[89] + InvSbox[89] = _InvSbox[89] + Xtime2Sbox[89] = _Xtime2Sbox[89] + Xtime3Sbox[89] = _Xtime3Sbox[89] + Xtime2[89] = _Xtime2[89] + Xtime9[89] = _Xtime9[89] + XtimeB[89] = _XtimeB[89] + XtimeD[89] = _XtimeD[89] + XtimeE[89] = _XtimeE[89] + Sbox[90] = _Sbox[90] + InvSbox[90] = _InvSbox[90] + Xtime2Sbox[90] = _Xtime2Sbox[90] + Xtime3Sbox[90] = _Xtime3Sbox[90] + Xtime2[90] = _Xtime2[90] + Xtime9[90] = _Xtime9[90] + XtimeB[90] = _XtimeB[90] + XtimeD[90] = _XtimeD[90] + XtimeE[90] = _XtimeE[90] + Sbox[91] = _Sbox[91] + InvSbox[91] = _InvSbox[91] + Xtime2Sbox[91] = _Xtime2Sbox[91] + Xtime3Sbox[91] = _Xtime3Sbox[91] + Xtime2[91] = _Xtime2[91] + Xtime9[91] = _Xtime9[91] + XtimeB[91] = _XtimeB[91] + XtimeD[91] = _XtimeD[91] + XtimeE[91] = _XtimeE[91] + Sbox[92] = _Sbox[92] + InvSbox[92] = _InvSbox[92] + Xtime2Sbox[92] = _Xtime2Sbox[92] + Xtime3Sbox[92] = _Xtime3Sbox[92] + Xtime2[92] = _Xtime2[92] + Xtime9[92] = _Xtime9[92] + XtimeB[92] = _XtimeB[92] + XtimeD[92] = _XtimeD[92] + XtimeE[92] = _XtimeE[92] + Sbox[93] = _Sbox[93] + InvSbox[93] = _InvSbox[93] + Xtime2Sbox[93] = _Xtime2Sbox[93] + Xtime3Sbox[93] = _Xtime3Sbox[93] + Xtime2[93] = _Xtime2[93] + Xtime9[93] = _Xtime9[93] + XtimeB[93] = _XtimeB[93] + XtimeD[93] = _XtimeD[93] + XtimeE[93] = _XtimeE[93] + Sbox[94] = _Sbox[94] + InvSbox[94] = _InvSbox[94] + Xtime2Sbox[94] = _Xtime2Sbox[94] + Xtime3Sbox[94] = _Xtime3Sbox[94] + Xtime2[94] = _Xtime2[94] + Xtime9[94] = _Xtime9[94] + XtimeB[94] = _XtimeB[94] + XtimeD[94] = _XtimeD[94] + XtimeE[94] = _XtimeE[94] + Sbox[95] = _Sbox[95] + InvSbox[95] = _InvSbox[95] + Xtime2Sbox[95] = _Xtime2Sbox[95] + Xtime3Sbox[95] = _Xtime3Sbox[95] + Xtime2[95] = _Xtime2[95] + Xtime9[95] = _Xtime9[95] + XtimeB[95] = _XtimeB[95] + XtimeD[95] = _XtimeD[95] + XtimeE[95] = _XtimeE[95] + Sbox[96] = _Sbox[96] + InvSbox[96] = _InvSbox[96] + Xtime2Sbox[96] = _Xtime2Sbox[96] + Xtime3Sbox[96] = _Xtime3Sbox[96] + Xtime2[96] = _Xtime2[96] + Xtime9[96] = _Xtime9[96] + XtimeB[96] = _XtimeB[96] + XtimeD[96] = _XtimeD[96] + XtimeE[96] = _XtimeE[96] + Sbox[97] = _Sbox[97] + InvSbox[97] = _InvSbox[97] + Xtime2Sbox[97] = _Xtime2Sbox[97] + Xtime3Sbox[97] = _Xtime3Sbox[97] + Xtime2[97] = _Xtime2[97] + Xtime9[97] = _Xtime9[97] + XtimeB[97] = _XtimeB[97] + XtimeD[97] = _XtimeD[97] + XtimeE[97] = _XtimeE[97] + Sbox[98] = _Sbox[98] + InvSbox[98] = _InvSbox[98] + Xtime2Sbox[98] = _Xtime2Sbox[98] + Xtime3Sbox[98] = _Xtime3Sbox[98] + Xtime2[98] = _Xtime2[98] + Xtime9[98] = _Xtime9[98] + XtimeB[98] = _XtimeB[98] + XtimeD[98] = _XtimeD[98] + XtimeE[98] = _XtimeE[98] + Sbox[99] = _Sbox[99] + InvSbox[99] = _InvSbox[99] + Xtime2Sbox[99] = _Xtime2Sbox[99] + Xtime3Sbox[99] = _Xtime3Sbox[99] + Xtime2[99] = _Xtime2[99] + Xtime9[99] = _Xtime9[99] + XtimeB[99] = _XtimeB[99] + XtimeD[99] = _XtimeD[99] + XtimeE[99] = _XtimeE[99] + Sbox[100] = _Sbox[100] + InvSbox[100] = _InvSbox[100] + Xtime2Sbox[100] = _Xtime2Sbox[100] + Xtime3Sbox[100] = _Xtime3Sbox[100] + Xtime2[100] = _Xtime2[100] + Xtime9[100] = _Xtime9[100] + XtimeB[100] = _XtimeB[100] + XtimeD[100] = _XtimeD[100] + XtimeE[100] = _XtimeE[100] + Sbox[101] = _Sbox[101] + InvSbox[101] = _InvSbox[101] + Xtime2Sbox[101] = _Xtime2Sbox[101] + Xtime3Sbox[101] = _Xtime3Sbox[101] + Xtime2[101] = _Xtime2[101] + Xtime9[101] = _Xtime9[101] + XtimeB[101] = _XtimeB[101] + XtimeD[101] = _XtimeD[101] + XtimeE[101] = _XtimeE[101] + Sbox[102] = _Sbox[102] + InvSbox[102] = _InvSbox[102] + Xtime2Sbox[102] = _Xtime2Sbox[102] + Xtime3Sbox[102] = _Xtime3Sbox[102] + Xtime2[102] = _Xtime2[102] + Xtime9[102] = _Xtime9[102] + XtimeB[102] = _XtimeB[102] + XtimeD[102] = _XtimeD[102] + XtimeE[102] = _XtimeE[102] + Sbox[103] = _Sbox[103] + InvSbox[103] = _InvSbox[103] + Xtime2Sbox[103] = _Xtime2Sbox[103] + Xtime3Sbox[103] = _Xtime3Sbox[103] + Xtime2[103] = _Xtime2[103] + Xtime9[103] = _Xtime9[103] + XtimeB[103] = _XtimeB[103] + XtimeD[103] = _XtimeD[103] + XtimeE[103] = _XtimeE[103] + Sbox[104] = _Sbox[104] + InvSbox[104] = _InvSbox[104] + Xtime2Sbox[104] = _Xtime2Sbox[104] + Xtime3Sbox[104] = _Xtime3Sbox[104] + Xtime2[104] = _Xtime2[104] + Xtime9[104] = _Xtime9[104] + XtimeB[104] = _XtimeB[104] + XtimeD[104] = _XtimeD[104] + XtimeE[104] = _XtimeE[104] + Sbox[105] = _Sbox[105] + InvSbox[105] = _InvSbox[105] + Xtime2Sbox[105] = _Xtime2Sbox[105] + Xtime3Sbox[105] = _Xtime3Sbox[105] + Xtime2[105] = _Xtime2[105] + Xtime9[105] = _Xtime9[105] + XtimeB[105] = _XtimeB[105] + XtimeD[105] = _XtimeD[105] + XtimeE[105] = _XtimeE[105] + Sbox[106] = _Sbox[106] + InvSbox[106] = _InvSbox[106] + Xtime2Sbox[106] = _Xtime2Sbox[106] + Xtime3Sbox[106] = _Xtime3Sbox[106] + Xtime2[106] = _Xtime2[106] + Xtime9[106] = _Xtime9[106] + XtimeB[106] = _XtimeB[106] + XtimeD[106] = _XtimeD[106] + XtimeE[106] = _XtimeE[106] + Sbox[107] = _Sbox[107] + InvSbox[107] = _InvSbox[107] + Xtime2Sbox[107] = _Xtime2Sbox[107] + Xtime3Sbox[107] = _Xtime3Sbox[107] + Xtime2[107] = _Xtime2[107] + Xtime9[107] = _Xtime9[107] + XtimeB[107] = _XtimeB[107] + XtimeD[107] = _XtimeD[107] + XtimeE[107] = _XtimeE[107] + Sbox[108] = _Sbox[108] + InvSbox[108] = _InvSbox[108] + Xtime2Sbox[108] = _Xtime2Sbox[108] + Xtime3Sbox[108] = _Xtime3Sbox[108] + Xtime2[108] = _Xtime2[108] + Xtime9[108] = _Xtime9[108] + XtimeB[108] = _XtimeB[108] + XtimeD[108] = _XtimeD[108] + XtimeE[108] = _XtimeE[108] + Sbox[109] = _Sbox[109] + InvSbox[109] = _InvSbox[109] + Xtime2Sbox[109] = _Xtime2Sbox[109] + Xtime3Sbox[109] = _Xtime3Sbox[109] + Xtime2[109] = _Xtime2[109] + Xtime9[109] = _Xtime9[109] + XtimeB[109] = _XtimeB[109] + XtimeD[109] = _XtimeD[109] + XtimeE[109] = _XtimeE[109] + Sbox[110] = _Sbox[110] + InvSbox[110] = _InvSbox[110] + Xtime2Sbox[110] = _Xtime2Sbox[110] + Xtime3Sbox[110] = _Xtime3Sbox[110] + Xtime2[110] = _Xtime2[110] + Xtime9[110] = _Xtime9[110] + XtimeB[110] = _XtimeB[110] + XtimeD[110] = _XtimeD[110] + XtimeE[110] = _XtimeE[110] + Sbox[111] = _Sbox[111] + InvSbox[111] = _InvSbox[111] + Xtime2Sbox[111] = _Xtime2Sbox[111] + Xtime3Sbox[111] = _Xtime3Sbox[111] + Xtime2[111] = _Xtime2[111] + Xtime9[111] = _Xtime9[111] + XtimeB[111] = _XtimeB[111] + XtimeD[111] = _XtimeD[111] + XtimeE[111] = _XtimeE[111] + Sbox[112] = _Sbox[112] + InvSbox[112] = _InvSbox[112] + Xtime2Sbox[112] = _Xtime2Sbox[112] + Xtime3Sbox[112] = _Xtime3Sbox[112] + Xtime2[112] = _Xtime2[112] + Xtime9[112] = _Xtime9[112] + XtimeB[112] = _XtimeB[112] + XtimeD[112] = _XtimeD[112] + XtimeE[112] = _XtimeE[112] + Sbox[113] = _Sbox[113] + InvSbox[113] = _InvSbox[113] + Xtime2Sbox[113] = _Xtime2Sbox[113] + Xtime3Sbox[113] = _Xtime3Sbox[113] + Xtime2[113] = _Xtime2[113] + Xtime9[113] = _Xtime9[113] + XtimeB[113] = _XtimeB[113] + XtimeD[113] = _XtimeD[113] + XtimeE[113] = _XtimeE[113] + Sbox[114] = _Sbox[114] + InvSbox[114] = _InvSbox[114] + Xtime2Sbox[114] = _Xtime2Sbox[114] + Xtime3Sbox[114] = _Xtime3Sbox[114] + Xtime2[114] = _Xtime2[114] + Xtime9[114] = _Xtime9[114] + XtimeB[114] = _XtimeB[114] + XtimeD[114] = _XtimeD[114] + XtimeE[114] = _XtimeE[114] + Sbox[115] = _Sbox[115] + InvSbox[115] = _InvSbox[115] + Xtime2Sbox[115] = _Xtime2Sbox[115] + Xtime3Sbox[115] = _Xtime3Sbox[115] + Xtime2[115] = _Xtime2[115] + Xtime9[115] = _Xtime9[115] + XtimeB[115] = _XtimeB[115] + XtimeD[115] = _XtimeD[115] + XtimeE[115] = _XtimeE[115] + Sbox[116] = _Sbox[116] + InvSbox[116] = _InvSbox[116] + Xtime2Sbox[116] = _Xtime2Sbox[116] + Xtime3Sbox[116] = _Xtime3Sbox[116] + Xtime2[116] = _Xtime2[116] + Xtime9[116] = _Xtime9[116] + XtimeB[116] = _XtimeB[116] + XtimeD[116] = _XtimeD[116] + XtimeE[116] = _XtimeE[116] + Sbox[117] = _Sbox[117] + InvSbox[117] = _InvSbox[117] + Xtime2Sbox[117] = _Xtime2Sbox[117] + Xtime3Sbox[117] = _Xtime3Sbox[117] + Xtime2[117] = _Xtime2[117] + Xtime9[117] = _Xtime9[117] + XtimeB[117] = _XtimeB[117] + XtimeD[117] = _XtimeD[117] + XtimeE[117] = _XtimeE[117] + Sbox[118] = _Sbox[118] + InvSbox[118] = _InvSbox[118] + Xtime2Sbox[118] = _Xtime2Sbox[118] + Xtime3Sbox[118] = _Xtime3Sbox[118] + Xtime2[118] = _Xtime2[118] + Xtime9[118] = _Xtime9[118] + XtimeB[118] = _XtimeB[118] + XtimeD[118] = _XtimeD[118] + XtimeE[118] = _XtimeE[118] + Sbox[119] = _Sbox[119] + InvSbox[119] = _InvSbox[119] + Xtime2Sbox[119] = _Xtime2Sbox[119] + Xtime3Sbox[119] = _Xtime3Sbox[119] + Xtime2[119] = _Xtime2[119] + Xtime9[119] = _Xtime9[119] + XtimeB[119] = _XtimeB[119] + XtimeD[119] = _XtimeD[119] + XtimeE[119] = _XtimeE[119] + Sbox[120] = _Sbox[120] + InvSbox[120] = _InvSbox[120] + Xtime2Sbox[120] = _Xtime2Sbox[120] + Xtime3Sbox[120] = _Xtime3Sbox[120] + Xtime2[120] = _Xtime2[120] + Xtime9[120] = _Xtime9[120] + XtimeB[120] = _XtimeB[120] + XtimeD[120] = _XtimeD[120] + XtimeE[120] = _XtimeE[120] + Sbox[121] = _Sbox[121] + InvSbox[121] = _InvSbox[121] + Xtime2Sbox[121] = _Xtime2Sbox[121] + Xtime3Sbox[121] = _Xtime3Sbox[121] + Xtime2[121] = _Xtime2[121] + Xtime9[121] = _Xtime9[121] + XtimeB[121] = _XtimeB[121] + XtimeD[121] = _XtimeD[121] + XtimeE[121] = _XtimeE[121] + Sbox[122] = _Sbox[122] + InvSbox[122] = _InvSbox[122] + Xtime2Sbox[122] = _Xtime2Sbox[122] + Xtime3Sbox[122] = _Xtime3Sbox[122] + Xtime2[122] = _Xtime2[122] + Xtime9[122] = _Xtime9[122] + XtimeB[122] = _XtimeB[122] + XtimeD[122] = _XtimeD[122] + XtimeE[122] = _XtimeE[122] + Sbox[123] = _Sbox[123] + InvSbox[123] = _InvSbox[123] + Xtime2Sbox[123] = _Xtime2Sbox[123] + Xtime3Sbox[123] = _Xtime3Sbox[123] + Xtime2[123] = _Xtime2[123] + Xtime9[123] = _Xtime9[123] + XtimeB[123] = _XtimeB[123] + XtimeD[123] = _XtimeD[123] + XtimeE[123] = _XtimeE[123] + Sbox[124] = _Sbox[124] + InvSbox[124] = _InvSbox[124] + Xtime2Sbox[124] = _Xtime2Sbox[124] + Xtime3Sbox[124] = _Xtime3Sbox[124] + Xtime2[124] = _Xtime2[124] + Xtime9[124] = _Xtime9[124] + XtimeB[124] = _XtimeB[124] + XtimeD[124] = _XtimeD[124] + XtimeE[124] = _XtimeE[124] + Sbox[125] = _Sbox[125] + InvSbox[125] = _InvSbox[125] + Xtime2Sbox[125] = _Xtime2Sbox[125] + Xtime3Sbox[125] = _Xtime3Sbox[125] + Xtime2[125] = _Xtime2[125] + Xtime9[125] = _Xtime9[125] + XtimeB[125] = _XtimeB[125] + XtimeD[125] = _XtimeD[125] + XtimeE[125] = _XtimeE[125] + Sbox[126] = _Sbox[126] + InvSbox[126] = _InvSbox[126] + Xtime2Sbox[126] = _Xtime2Sbox[126] + Xtime3Sbox[126] = _Xtime3Sbox[126] + Xtime2[126] = _Xtime2[126] + Xtime9[126] = _Xtime9[126] + XtimeB[126] = _XtimeB[126] + XtimeD[126] = _XtimeD[126] + XtimeE[126] = _XtimeE[126] + Sbox[127] = _Sbox[127] + InvSbox[127] = _InvSbox[127] + Xtime2Sbox[127] = _Xtime2Sbox[127] + Xtime3Sbox[127] = _Xtime3Sbox[127] + Xtime2[127] = _Xtime2[127] + Xtime9[127] = _Xtime9[127] + XtimeB[127] = _XtimeB[127] + XtimeD[127] = _XtimeD[127] + XtimeE[127] = _XtimeE[127] + Sbox[128] = _Sbox[128] + InvSbox[128] = _InvSbox[128] + Xtime2Sbox[128] = _Xtime2Sbox[128] + Xtime3Sbox[128] = _Xtime3Sbox[128] + Xtime2[128] = _Xtime2[128] + Xtime9[128] = _Xtime9[128] + XtimeB[128] = _XtimeB[128] + XtimeD[128] = _XtimeD[128] + XtimeE[128] = _XtimeE[128] + Sbox[129] = _Sbox[129] + InvSbox[129] = _InvSbox[129] + Xtime2Sbox[129] = _Xtime2Sbox[129] + Xtime3Sbox[129] = _Xtime3Sbox[129] + Xtime2[129] = _Xtime2[129] + Xtime9[129] = _Xtime9[129] + XtimeB[129] = _XtimeB[129] + XtimeD[129] = _XtimeD[129] + XtimeE[129] = _XtimeE[129] + Sbox[130] = _Sbox[130] + InvSbox[130] = _InvSbox[130] + Xtime2Sbox[130] = _Xtime2Sbox[130] + Xtime3Sbox[130] = _Xtime3Sbox[130] + Xtime2[130] = _Xtime2[130] + Xtime9[130] = _Xtime9[130] + XtimeB[130] = _XtimeB[130] + XtimeD[130] = _XtimeD[130] + XtimeE[130] = _XtimeE[130] + Sbox[131] = _Sbox[131] + InvSbox[131] = _InvSbox[131] + Xtime2Sbox[131] = _Xtime2Sbox[131] + Xtime3Sbox[131] = _Xtime3Sbox[131] + Xtime2[131] = _Xtime2[131] + Xtime9[131] = _Xtime9[131] + XtimeB[131] = _XtimeB[131] + XtimeD[131] = _XtimeD[131] + XtimeE[131] = _XtimeE[131] + Sbox[132] = _Sbox[132] + InvSbox[132] = _InvSbox[132] + Xtime2Sbox[132] = _Xtime2Sbox[132] + Xtime3Sbox[132] = _Xtime3Sbox[132] + Xtime2[132] = _Xtime2[132] + Xtime9[132] = _Xtime9[132] + XtimeB[132] = _XtimeB[132] + XtimeD[132] = _XtimeD[132] + XtimeE[132] = _XtimeE[132] + Sbox[133] = _Sbox[133] + InvSbox[133] = _InvSbox[133] + Xtime2Sbox[133] = _Xtime2Sbox[133] + Xtime3Sbox[133] = _Xtime3Sbox[133] + Xtime2[133] = _Xtime2[133] + Xtime9[133] = _Xtime9[133] + XtimeB[133] = _XtimeB[133] + XtimeD[133] = _XtimeD[133] + XtimeE[133] = _XtimeE[133] + Sbox[134] = _Sbox[134] + InvSbox[134] = _InvSbox[134] + Xtime2Sbox[134] = _Xtime2Sbox[134] + Xtime3Sbox[134] = _Xtime3Sbox[134] + Xtime2[134] = _Xtime2[134] + Xtime9[134] = _Xtime9[134] + XtimeB[134] = _XtimeB[134] + XtimeD[134] = _XtimeD[134] + XtimeE[134] = _XtimeE[134] + Sbox[135] = _Sbox[135] + InvSbox[135] = _InvSbox[135] + Xtime2Sbox[135] = _Xtime2Sbox[135] + Xtime3Sbox[135] = _Xtime3Sbox[135] + Xtime2[135] = _Xtime2[135] + Xtime9[135] = _Xtime9[135] + XtimeB[135] = _XtimeB[135] + XtimeD[135] = _XtimeD[135] + XtimeE[135] = _XtimeE[135] + Sbox[136] = _Sbox[136] + InvSbox[136] = _InvSbox[136] + Xtime2Sbox[136] = _Xtime2Sbox[136] + Xtime3Sbox[136] = _Xtime3Sbox[136] + Xtime2[136] = _Xtime2[136] + Xtime9[136] = _Xtime9[136] + XtimeB[136] = _XtimeB[136] + XtimeD[136] = _XtimeD[136] + XtimeE[136] = _XtimeE[136] + Sbox[137] = _Sbox[137] + InvSbox[137] = _InvSbox[137] + Xtime2Sbox[137] = _Xtime2Sbox[137] + Xtime3Sbox[137] = _Xtime3Sbox[137] + Xtime2[137] = _Xtime2[137] + Xtime9[137] = _Xtime9[137] + XtimeB[137] = _XtimeB[137] + XtimeD[137] = _XtimeD[137] + XtimeE[137] = _XtimeE[137] + Sbox[138] = _Sbox[138] + InvSbox[138] = _InvSbox[138] + Xtime2Sbox[138] = _Xtime2Sbox[138] + Xtime3Sbox[138] = _Xtime3Sbox[138] + Xtime2[138] = _Xtime2[138] + Xtime9[138] = _Xtime9[138] + XtimeB[138] = _XtimeB[138] + XtimeD[138] = _XtimeD[138] + XtimeE[138] = _XtimeE[138] + Sbox[139] = _Sbox[139] + InvSbox[139] = _InvSbox[139] + Xtime2Sbox[139] = _Xtime2Sbox[139] + Xtime3Sbox[139] = _Xtime3Sbox[139] + Xtime2[139] = _Xtime2[139] + Xtime9[139] = _Xtime9[139] + XtimeB[139] = _XtimeB[139] + XtimeD[139] = _XtimeD[139] + XtimeE[139] = _XtimeE[139] + Sbox[140] = _Sbox[140] + InvSbox[140] = _InvSbox[140] + Xtime2Sbox[140] = _Xtime2Sbox[140] + Xtime3Sbox[140] = _Xtime3Sbox[140] + Xtime2[140] = _Xtime2[140] + Xtime9[140] = _Xtime9[140] + XtimeB[140] = _XtimeB[140] + XtimeD[140] = _XtimeD[140] + XtimeE[140] = _XtimeE[140] + Sbox[141] = _Sbox[141] + InvSbox[141] = _InvSbox[141] + Xtime2Sbox[141] = _Xtime2Sbox[141] + Xtime3Sbox[141] = _Xtime3Sbox[141] + Xtime2[141] = _Xtime2[141] + Xtime9[141] = _Xtime9[141] + XtimeB[141] = _XtimeB[141] + XtimeD[141] = _XtimeD[141] + XtimeE[141] = _XtimeE[141] + Sbox[142] = _Sbox[142] + InvSbox[142] = _InvSbox[142] + Xtime2Sbox[142] = _Xtime2Sbox[142] + Xtime3Sbox[142] = _Xtime3Sbox[142] + Xtime2[142] = _Xtime2[142] + Xtime9[142] = _Xtime9[142] + XtimeB[142] = _XtimeB[142] + XtimeD[142] = _XtimeD[142] + XtimeE[142] = _XtimeE[142] + Sbox[143] = _Sbox[143] + InvSbox[143] = _InvSbox[143] + Xtime2Sbox[143] = _Xtime2Sbox[143] + Xtime3Sbox[143] = _Xtime3Sbox[143] + Xtime2[143] = _Xtime2[143] + Xtime9[143] = _Xtime9[143] + XtimeB[143] = _XtimeB[143] + XtimeD[143] = _XtimeD[143] + XtimeE[143] = _XtimeE[143] + Sbox[144] = _Sbox[144] + InvSbox[144] = _InvSbox[144] + Xtime2Sbox[144] = _Xtime2Sbox[144] + Xtime3Sbox[144] = _Xtime3Sbox[144] + Xtime2[144] = _Xtime2[144] + Xtime9[144] = _Xtime9[144] + XtimeB[144] = _XtimeB[144] + XtimeD[144] = _XtimeD[144] + XtimeE[144] = _XtimeE[144] + Sbox[145] = _Sbox[145] + InvSbox[145] = _InvSbox[145] + Xtime2Sbox[145] = _Xtime2Sbox[145] + Xtime3Sbox[145] = _Xtime3Sbox[145] + Xtime2[145] = _Xtime2[145] + Xtime9[145] = _Xtime9[145] + XtimeB[145] = _XtimeB[145] + XtimeD[145] = _XtimeD[145] + XtimeE[145] = _XtimeE[145] + Sbox[146] = _Sbox[146] + InvSbox[146] = _InvSbox[146] + Xtime2Sbox[146] = _Xtime2Sbox[146] + Xtime3Sbox[146] = _Xtime3Sbox[146] + Xtime2[146] = _Xtime2[146] + Xtime9[146] = _Xtime9[146] + XtimeB[146] = _XtimeB[146] + XtimeD[146] = _XtimeD[146] + XtimeE[146] = _XtimeE[146] + Sbox[147] = _Sbox[147] + InvSbox[147] = _InvSbox[147] + Xtime2Sbox[147] = _Xtime2Sbox[147] + Xtime3Sbox[147] = _Xtime3Sbox[147] + Xtime2[147] = _Xtime2[147] + Xtime9[147] = _Xtime9[147] + XtimeB[147] = _XtimeB[147] + XtimeD[147] = _XtimeD[147] + XtimeE[147] = _XtimeE[147] + Sbox[148] = _Sbox[148] + InvSbox[148] = _InvSbox[148] + Xtime2Sbox[148] = _Xtime2Sbox[148] + Xtime3Sbox[148] = _Xtime3Sbox[148] + Xtime2[148] = _Xtime2[148] + Xtime9[148] = _Xtime9[148] + XtimeB[148] = _XtimeB[148] + XtimeD[148] = _XtimeD[148] + XtimeE[148] = _XtimeE[148] + Sbox[149] = _Sbox[149] + InvSbox[149] = _InvSbox[149] + Xtime2Sbox[149] = _Xtime2Sbox[149] + Xtime3Sbox[149] = _Xtime3Sbox[149] + Xtime2[149] = _Xtime2[149] + Xtime9[149] = _Xtime9[149] + XtimeB[149] = _XtimeB[149] + XtimeD[149] = _XtimeD[149] + XtimeE[149] = _XtimeE[149] + Sbox[150] = _Sbox[150] + InvSbox[150] = _InvSbox[150] + Xtime2Sbox[150] = _Xtime2Sbox[150] + Xtime3Sbox[150] = _Xtime3Sbox[150] + Xtime2[150] = _Xtime2[150] + Xtime9[150] = _Xtime9[150] + XtimeB[150] = _XtimeB[150] + XtimeD[150] = _XtimeD[150] + XtimeE[150] = _XtimeE[150] + Sbox[151] = _Sbox[151] + InvSbox[151] = _InvSbox[151] + Xtime2Sbox[151] = _Xtime2Sbox[151] + Xtime3Sbox[151] = _Xtime3Sbox[151] + Xtime2[151] = _Xtime2[151] + Xtime9[151] = _Xtime9[151] + XtimeB[151] = _XtimeB[151] + XtimeD[151] = _XtimeD[151] + XtimeE[151] = _XtimeE[151] + Sbox[152] = _Sbox[152] + InvSbox[152] = _InvSbox[152] + Xtime2Sbox[152] = _Xtime2Sbox[152] + Xtime3Sbox[152] = _Xtime3Sbox[152] + Xtime2[152] = _Xtime2[152] + Xtime9[152] = _Xtime9[152] + XtimeB[152] = _XtimeB[152] + XtimeD[152] = _XtimeD[152] + XtimeE[152] = _XtimeE[152] + Sbox[153] = _Sbox[153] + InvSbox[153] = _InvSbox[153] + Xtime2Sbox[153] = _Xtime2Sbox[153] + Xtime3Sbox[153] = _Xtime3Sbox[153] + Xtime2[153] = _Xtime2[153] + Xtime9[153] = _Xtime9[153] + XtimeB[153] = _XtimeB[153] + XtimeD[153] = _XtimeD[153] + XtimeE[153] = _XtimeE[153] + Sbox[154] = _Sbox[154] + InvSbox[154] = _InvSbox[154] + Xtime2Sbox[154] = _Xtime2Sbox[154] + Xtime3Sbox[154] = _Xtime3Sbox[154] + Xtime2[154] = _Xtime2[154] + Xtime9[154] = _Xtime9[154] + XtimeB[154] = _XtimeB[154] + XtimeD[154] = _XtimeD[154] + XtimeE[154] = _XtimeE[154] + Sbox[155] = _Sbox[155] + InvSbox[155] = _InvSbox[155] + Xtime2Sbox[155] = _Xtime2Sbox[155] + Xtime3Sbox[155] = _Xtime3Sbox[155] + Xtime2[155] = _Xtime2[155] + Xtime9[155] = _Xtime9[155] + XtimeB[155] = _XtimeB[155] + XtimeD[155] = _XtimeD[155] + XtimeE[155] = _XtimeE[155] + Sbox[156] = _Sbox[156] + InvSbox[156] = _InvSbox[156] + Xtime2Sbox[156] = _Xtime2Sbox[156] + Xtime3Sbox[156] = _Xtime3Sbox[156] + Xtime2[156] = _Xtime2[156] + Xtime9[156] = _Xtime9[156] + XtimeB[156] = _XtimeB[156] + XtimeD[156] = _XtimeD[156] + XtimeE[156] = _XtimeE[156] + Sbox[157] = _Sbox[157] + InvSbox[157] = _InvSbox[157] + Xtime2Sbox[157] = _Xtime2Sbox[157] + Xtime3Sbox[157] = _Xtime3Sbox[157] + Xtime2[157] = _Xtime2[157] + Xtime9[157] = _Xtime9[157] + XtimeB[157] = _XtimeB[157] + XtimeD[157] = _XtimeD[157] + XtimeE[157] = _XtimeE[157] + Sbox[158] = _Sbox[158] + InvSbox[158] = _InvSbox[158] + Xtime2Sbox[158] = _Xtime2Sbox[158] + Xtime3Sbox[158] = _Xtime3Sbox[158] + Xtime2[158] = _Xtime2[158] + Xtime9[158] = _Xtime9[158] + XtimeB[158] = _XtimeB[158] + XtimeD[158] = _XtimeD[158] + XtimeE[158] = _XtimeE[158] + Sbox[159] = _Sbox[159] + InvSbox[159] = _InvSbox[159] + Xtime2Sbox[159] = _Xtime2Sbox[159] + Xtime3Sbox[159] = _Xtime3Sbox[159] + Xtime2[159] = _Xtime2[159] + Xtime9[159] = _Xtime9[159] + XtimeB[159] = _XtimeB[159] + XtimeD[159] = _XtimeD[159] + XtimeE[159] = _XtimeE[159] + Sbox[160] = _Sbox[160] + InvSbox[160] = _InvSbox[160] + Xtime2Sbox[160] = _Xtime2Sbox[160] + Xtime3Sbox[160] = _Xtime3Sbox[160] + Xtime2[160] = _Xtime2[160] + Xtime9[160] = _Xtime9[160] + XtimeB[160] = _XtimeB[160] + XtimeD[160] = _XtimeD[160] + XtimeE[160] = _XtimeE[160] + Sbox[161] = _Sbox[161] + InvSbox[161] = _InvSbox[161] + Xtime2Sbox[161] = _Xtime2Sbox[161] + Xtime3Sbox[161] = _Xtime3Sbox[161] + Xtime2[161] = _Xtime2[161] + Xtime9[161] = _Xtime9[161] + XtimeB[161] = _XtimeB[161] + XtimeD[161] = _XtimeD[161] + XtimeE[161] = _XtimeE[161] + Sbox[162] = _Sbox[162] + InvSbox[162] = _InvSbox[162] + Xtime2Sbox[162] = _Xtime2Sbox[162] + Xtime3Sbox[162] = _Xtime3Sbox[162] + Xtime2[162] = _Xtime2[162] + Xtime9[162] = _Xtime9[162] + XtimeB[162] = _XtimeB[162] + XtimeD[162] = _XtimeD[162] + XtimeE[162] = _XtimeE[162] + Sbox[163] = _Sbox[163] + InvSbox[163] = _InvSbox[163] + Xtime2Sbox[163] = _Xtime2Sbox[163] + Xtime3Sbox[163] = _Xtime3Sbox[163] + Xtime2[163] = _Xtime2[163] + Xtime9[163] = _Xtime9[163] + XtimeB[163] = _XtimeB[163] + XtimeD[163] = _XtimeD[163] + XtimeE[163] = _XtimeE[163] + Sbox[164] = _Sbox[164] + InvSbox[164] = _InvSbox[164] + Xtime2Sbox[164] = _Xtime2Sbox[164] + Xtime3Sbox[164] = _Xtime3Sbox[164] + Xtime2[164] = _Xtime2[164] + Xtime9[164] = _Xtime9[164] + XtimeB[164] = _XtimeB[164] + XtimeD[164] = _XtimeD[164] + XtimeE[164] = _XtimeE[164] + Sbox[165] = _Sbox[165] + InvSbox[165] = _InvSbox[165] + Xtime2Sbox[165] = _Xtime2Sbox[165] + Xtime3Sbox[165] = _Xtime3Sbox[165] + Xtime2[165] = _Xtime2[165] + Xtime9[165] = _Xtime9[165] + XtimeB[165] = _XtimeB[165] + XtimeD[165] = _XtimeD[165] + XtimeE[165] = _XtimeE[165] + Sbox[166] = _Sbox[166] + InvSbox[166] = _InvSbox[166] + Xtime2Sbox[166] = _Xtime2Sbox[166] + Xtime3Sbox[166] = _Xtime3Sbox[166] + Xtime2[166] = _Xtime2[166] + Xtime9[166] = _Xtime9[166] + XtimeB[166] = _XtimeB[166] + XtimeD[166] = _XtimeD[166] + XtimeE[166] = _XtimeE[166] + Sbox[167] = _Sbox[167] + InvSbox[167] = _InvSbox[167] + Xtime2Sbox[167] = _Xtime2Sbox[167] + Xtime3Sbox[167] = _Xtime3Sbox[167] + Xtime2[167] = _Xtime2[167] + Xtime9[167] = _Xtime9[167] + XtimeB[167] = _XtimeB[167] + XtimeD[167] = _XtimeD[167] + XtimeE[167] = _XtimeE[167] + Sbox[168] = _Sbox[168] + InvSbox[168] = _InvSbox[168] + Xtime2Sbox[168] = _Xtime2Sbox[168] + Xtime3Sbox[168] = _Xtime3Sbox[168] + Xtime2[168] = _Xtime2[168] + Xtime9[168] = _Xtime9[168] + XtimeB[168] = _XtimeB[168] + XtimeD[168] = _XtimeD[168] + XtimeE[168] = _XtimeE[168] + Sbox[169] = _Sbox[169] + InvSbox[169] = _InvSbox[169] + Xtime2Sbox[169] = _Xtime2Sbox[169] + Xtime3Sbox[169] = _Xtime3Sbox[169] + Xtime2[169] = _Xtime2[169] + Xtime9[169] = _Xtime9[169] + XtimeB[169] = _XtimeB[169] + XtimeD[169] = _XtimeD[169] + XtimeE[169] = _XtimeE[169] + Sbox[170] = _Sbox[170] + InvSbox[170] = _InvSbox[170] + Xtime2Sbox[170] = _Xtime2Sbox[170] + Xtime3Sbox[170] = _Xtime3Sbox[170] + Xtime2[170] = _Xtime2[170] + Xtime9[170] = _Xtime9[170] + XtimeB[170] = _XtimeB[170] + XtimeD[170] = _XtimeD[170] + XtimeE[170] = _XtimeE[170] + Sbox[171] = _Sbox[171] + InvSbox[171] = _InvSbox[171] + Xtime2Sbox[171] = _Xtime2Sbox[171] + Xtime3Sbox[171] = _Xtime3Sbox[171] + Xtime2[171] = _Xtime2[171] + Xtime9[171] = _Xtime9[171] + XtimeB[171] = _XtimeB[171] + XtimeD[171] = _XtimeD[171] + XtimeE[171] = _XtimeE[171] + Sbox[172] = _Sbox[172] + InvSbox[172] = _InvSbox[172] + Xtime2Sbox[172] = _Xtime2Sbox[172] + Xtime3Sbox[172] = _Xtime3Sbox[172] + Xtime2[172] = _Xtime2[172] + Xtime9[172] = _Xtime9[172] + XtimeB[172] = _XtimeB[172] + XtimeD[172] = _XtimeD[172] + XtimeE[172] = _XtimeE[172] + Sbox[173] = _Sbox[173] + InvSbox[173] = _InvSbox[173] + Xtime2Sbox[173] = _Xtime2Sbox[173] + Xtime3Sbox[173] = _Xtime3Sbox[173] + Xtime2[173] = _Xtime2[173] + Xtime9[173] = _Xtime9[173] + XtimeB[173] = _XtimeB[173] + XtimeD[173] = _XtimeD[173] + XtimeE[173] = _XtimeE[173] + Sbox[174] = _Sbox[174] + InvSbox[174] = _InvSbox[174] + Xtime2Sbox[174] = _Xtime2Sbox[174] + Xtime3Sbox[174] = _Xtime3Sbox[174] + Xtime2[174] = _Xtime2[174] + Xtime9[174] = _Xtime9[174] + XtimeB[174] = _XtimeB[174] + XtimeD[174] = _XtimeD[174] + XtimeE[174] = _XtimeE[174] + Sbox[175] = _Sbox[175] + InvSbox[175] = _InvSbox[175] + Xtime2Sbox[175] = _Xtime2Sbox[175] + Xtime3Sbox[175] = _Xtime3Sbox[175] + Xtime2[175] = _Xtime2[175] + Xtime9[175] = _Xtime9[175] + XtimeB[175] = _XtimeB[175] + XtimeD[175] = _XtimeD[175] + XtimeE[175] = _XtimeE[175] + Sbox[176] = _Sbox[176] + InvSbox[176] = _InvSbox[176] + Xtime2Sbox[176] = _Xtime2Sbox[176] + Xtime3Sbox[176] = _Xtime3Sbox[176] + Xtime2[176] = _Xtime2[176] + Xtime9[176] = _Xtime9[176] + XtimeB[176] = _XtimeB[176] + XtimeD[176] = _XtimeD[176] + XtimeE[176] = _XtimeE[176] + Sbox[177] = _Sbox[177] + InvSbox[177] = _InvSbox[177] + Xtime2Sbox[177] = _Xtime2Sbox[177] + Xtime3Sbox[177] = _Xtime3Sbox[177] + Xtime2[177] = _Xtime2[177] + Xtime9[177] = _Xtime9[177] + XtimeB[177] = _XtimeB[177] + XtimeD[177] = _XtimeD[177] + XtimeE[177] = _XtimeE[177] + Sbox[178] = _Sbox[178] + InvSbox[178] = _InvSbox[178] + Xtime2Sbox[178] = _Xtime2Sbox[178] + Xtime3Sbox[178] = _Xtime3Sbox[178] + Xtime2[178] = _Xtime2[178] + Xtime9[178] = _Xtime9[178] + XtimeB[178] = _XtimeB[178] + XtimeD[178] = _XtimeD[178] + XtimeE[178] = _XtimeE[178] + Sbox[179] = _Sbox[179] + InvSbox[179] = _InvSbox[179] + Xtime2Sbox[179] = _Xtime2Sbox[179] + Xtime3Sbox[179] = _Xtime3Sbox[179] + Xtime2[179] = _Xtime2[179] + Xtime9[179] = _Xtime9[179] + XtimeB[179] = _XtimeB[179] + XtimeD[179] = _XtimeD[179] + XtimeE[179] = _XtimeE[179] + Sbox[180] = _Sbox[180] + InvSbox[180] = _InvSbox[180] + Xtime2Sbox[180] = _Xtime2Sbox[180] + Xtime3Sbox[180] = _Xtime3Sbox[180] + Xtime2[180] = _Xtime2[180] + Xtime9[180] = _Xtime9[180] + XtimeB[180] = _XtimeB[180] + XtimeD[180] = _XtimeD[180] + XtimeE[180] = _XtimeE[180] + Sbox[181] = _Sbox[181] + InvSbox[181] = _InvSbox[181] + Xtime2Sbox[181] = _Xtime2Sbox[181] + Xtime3Sbox[181] = _Xtime3Sbox[181] + Xtime2[181] = _Xtime2[181] + Xtime9[181] = _Xtime9[181] + XtimeB[181] = _XtimeB[181] + XtimeD[181] = _XtimeD[181] + XtimeE[181] = _XtimeE[181] + Sbox[182] = _Sbox[182] + InvSbox[182] = _InvSbox[182] + Xtime2Sbox[182] = _Xtime2Sbox[182] + Xtime3Sbox[182] = _Xtime3Sbox[182] + Xtime2[182] = _Xtime2[182] + Xtime9[182] = _Xtime9[182] + XtimeB[182] = _XtimeB[182] + XtimeD[182] = _XtimeD[182] + XtimeE[182] = _XtimeE[182] + Sbox[183] = _Sbox[183] + InvSbox[183] = _InvSbox[183] + Xtime2Sbox[183] = _Xtime2Sbox[183] + Xtime3Sbox[183] = _Xtime3Sbox[183] + Xtime2[183] = _Xtime2[183] + Xtime9[183] = _Xtime9[183] + XtimeB[183] = _XtimeB[183] + XtimeD[183] = _XtimeD[183] + XtimeE[183] = _XtimeE[183] + Sbox[184] = _Sbox[184] + InvSbox[184] = _InvSbox[184] + Xtime2Sbox[184] = _Xtime2Sbox[184] + Xtime3Sbox[184] = _Xtime3Sbox[184] + Xtime2[184] = _Xtime2[184] + Xtime9[184] = _Xtime9[184] + XtimeB[184] = _XtimeB[184] + XtimeD[184] = _XtimeD[184] + XtimeE[184] = _XtimeE[184] + Sbox[185] = _Sbox[185] + InvSbox[185] = _InvSbox[185] + Xtime2Sbox[185] = _Xtime2Sbox[185] + Xtime3Sbox[185] = _Xtime3Sbox[185] + Xtime2[185] = _Xtime2[185] + Xtime9[185] = _Xtime9[185] + XtimeB[185] = _XtimeB[185] + XtimeD[185] = _XtimeD[185] + XtimeE[185] = _XtimeE[185] + Sbox[186] = _Sbox[186] + InvSbox[186] = _InvSbox[186] + Xtime2Sbox[186] = _Xtime2Sbox[186] + Xtime3Sbox[186] = _Xtime3Sbox[186] + Xtime2[186] = _Xtime2[186] + Xtime9[186] = _Xtime9[186] + XtimeB[186] = _XtimeB[186] + XtimeD[186] = _XtimeD[186] + XtimeE[186] = _XtimeE[186] + Sbox[187] = _Sbox[187] + InvSbox[187] = _InvSbox[187] + Xtime2Sbox[187] = _Xtime2Sbox[187] + Xtime3Sbox[187] = _Xtime3Sbox[187] + Xtime2[187] = _Xtime2[187] + Xtime9[187] = _Xtime9[187] + XtimeB[187] = _XtimeB[187] + XtimeD[187] = _XtimeD[187] + XtimeE[187] = _XtimeE[187] + Sbox[188] = _Sbox[188] + InvSbox[188] = _InvSbox[188] + Xtime2Sbox[188] = _Xtime2Sbox[188] + Xtime3Sbox[188] = _Xtime3Sbox[188] + Xtime2[188] = _Xtime2[188] + Xtime9[188] = _Xtime9[188] + XtimeB[188] = _XtimeB[188] + XtimeD[188] = _XtimeD[188] + XtimeE[188] = _XtimeE[188] + Sbox[189] = _Sbox[189] + InvSbox[189] = _InvSbox[189] + Xtime2Sbox[189] = _Xtime2Sbox[189] + Xtime3Sbox[189] = _Xtime3Sbox[189] + Xtime2[189] = _Xtime2[189] + Xtime9[189] = _Xtime9[189] + XtimeB[189] = _XtimeB[189] + XtimeD[189] = _XtimeD[189] + XtimeE[189] = _XtimeE[189] + Sbox[190] = _Sbox[190] + InvSbox[190] = _InvSbox[190] + Xtime2Sbox[190] = _Xtime2Sbox[190] + Xtime3Sbox[190] = _Xtime3Sbox[190] + Xtime2[190] = _Xtime2[190] + Xtime9[190] = _Xtime9[190] + XtimeB[190] = _XtimeB[190] + XtimeD[190] = _XtimeD[190] + XtimeE[190] = _XtimeE[190] + Sbox[191] = _Sbox[191] + InvSbox[191] = _InvSbox[191] + Xtime2Sbox[191] = _Xtime2Sbox[191] + Xtime3Sbox[191] = _Xtime3Sbox[191] + Xtime2[191] = _Xtime2[191] + Xtime9[191] = _Xtime9[191] + XtimeB[191] = _XtimeB[191] + XtimeD[191] = _XtimeD[191] + XtimeE[191] = _XtimeE[191] + Sbox[192] = _Sbox[192] + InvSbox[192] = _InvSbox[192] + Xtime2Sbox[192] = _Xtime2Sbox[192] + Xtime3Sbox[192] = _Xtime3Sbox[192] + Xtime2[192] = _Xtime2[192] + Xtime9[192] = _Xtime9[192] + XtimeB[192] = _XtimeB[192] + XtimeD[192] = _XtimeD[192] + XtimeE[192] = _XtimeE[192] + Sbox[193] = _Sbox[193] + InvSbox[193] = _InvSbox[193] + Xtime2Sbox[193] = _Xtime2Sbox[193] + Xtime3Sbox[193] = _Xtime3Sbox[193] + Xtime2[193] = _Xtime2[193] + Xtime9[193] = _Xtime9[193] + XtimeB[193] = _XtimeB[193] + XtimeD[193] = _XtimeD[193] + XtimeE[193] = _XtimeE[193] + Sbox[194] = _Sbox[194] + InvSbox[194] = _InvSbox[194] + Xtime2Sbox[194] = _Xtime2Sbox[194] + Xtime3Sbox[194] = _Xtime3Sbox[194] + Xtime2[194] = _Xtime2[194] + Xtime9[194] = _Xtime9[194] + XtimeB[194] = _XtimeB[194] + XtimeD[194] = _XtimeD[194] + XtimeE[194] = _XtimeE[194] + Sbox[195] = _Sbox[195] + InvSbox[195] = _InvSbox[195] + Xtime2Sbox[195] = _Xtime2Sbox[195] + Xtime3Sbox[195] = _Xtime3Sbox[195] + Xtime2[195] = _Xtime2[195] + Xtime9[195] = _Xtime9[195] + XtimeB[195] = _XtimeB[195] + XtimeD[195] = _XtimeD[195] + XtimeE[195] = _XtimeE[195] + Sbox[196] = _Sbox[196] + InvSbox[196] = _InvSbox[196] + Xtime2Sbox[196] = _Xtime2Sbox[196] + Xtime3Sbox[196] = _Xtime3Sbox[196] + Xtime2[196] = _Xtime2[196] + Xtime9[196] = _Xtime9[196] + XtimeB[196] = _XtimeB[196] + XtimeD[196] = _XtimeD[196] + XtimeE[196] = _XtimeE[196] + Sbox[197] = _Sbox[197] + InvSbox[197] = _InvSbox[197] + Xtime2Sbox[197] = _Xtime2Sbox[197] + Xtime3Sbox[197] = _Xtime3Sbox[197] + Xtime2[197] = _Xtime2[197] + Xtime9[197] = _Xtime9[197] + XtimeB[197] = _XtimeB[197] + XtimeD[197] = _XtimeD[197] + XtimeE[197] = _XtimeE[197] + Sbox[198] = _Sbox[198] + InvSbox[198] = _InvSbox[198] + Xtime2Sbox[198] = _Xtime2Sbox[198] + Xtime3Sbox[198] = _Xtime3Sbox[198] + Xtime2[198] = _Xtime2[198] + Xtime9[198] = _Xtime9[198] + XtimeB[198] = _XtimeB[198] + XtimeD[198] = _XtimeD[198] + XtimeE[198] = _XtimeE[198] + Sbox[199] = _Sbox[199] + InvSbox[199] = _InvSbox[199] + Xtime2Sbox[199] = _Xtime2Sbox[199] + Xtime3Sbox[199] = _Xtime3Sbox[199] + Xtime2[199] = _Xtime2[199] + Xtime9[199] = _Xtime9[199] + XtimeB[199] = _XtimeB[199] + XtimeD[199] = _XtimeD[199] + XtimeE[199] = _XtimeE[199] + Sbox[200] = _Sbox[200] + InvSbox[200] = _InvSbox[200] + Xtime2Sbox[200] = _Xtime2Sbox[200] + Xtime3Sbox[200] = _Xtime3Sbox[200] + Xtime2[200] = _Xtime2[200] + Xtime9[200] = _Xtime9[200] + XtimeB[200] = _XtimeB[200] + XtimeD[200] = _XtimeD[200] + XtimeE[200] = _XtimeE[200] + Sbox[201] = _Sbox[201] + InvSbox[201] = _InvSbox[201] + Xtime2Sbox[201] = _Xtime2Sbox[201] + Xtime3Sbox[201] = _Xtime3Sbox[201] + Xtime2[201] = _Xtime2[201] + Xtime9[201] = _Xtime9[201] + XtimeB[201] = _XtimeB[201] + XtimeD[201] = _XtimeD[201] + XtimeE[201] = _XtimeE[201] + Sbox[202] = _Sbox[202] + InvSbox[202] = _InvSbox[202] + Xtime2Sbox[202] = _Xtime2Sbox[202] + Xtime3Sbox[202] = _Xtime3Sbox[202] + Xtime2[202] = _Xtime2[202] + Xtime9[202] = _Xtime9[202] + XtimeB[202] = _XtimeB[202] + XtimeD[202] = _XtimeD[202] + XtimeE[202] = _XtimeE[202] + Sbox[203] = _Sbox[203] + InvSbox[203] = _InvSbox[203] + Xtime2Sbox[203] = _Xtime2Sbox[203] + Xtime3Sbox[203] = _Xtime3Sbox[203] + Xtime2[203] = _Xtime2[203] + Xtime9[203] = _Xtime9[203] + XtimeB[203] = _XtimeB[203] + XtimeD[203] = _XtimeD[203] + XtimeE[203] = _XtimeE[203] + Sbox[204] = _Sbox[204] + InvSbox[204] = _InvSbox[204] + Xtime2Sbox[204] = _Xtime2Sbox[204] + Xtime3Sbox[204] = _Xtime3Sbox[204] + Xtime2[204] = _Xtime2[204] + Xtime9[204] = _Xtime9[204] + XtimeB[204] = _XtimeB[204] + XtimeD[204] = _XtimeD[204] + XtimeE[204] = _XtimeE[204] + Sbox[205] = _Sbox[205] + InvSbox[205] = _InvSbox[205] + Xtime2Sbox[205] = _Xtime2Sbox[205] + Xtime3Sbox[205] = _Xtime3Sbox[205] + Xtime2[205] = _Xtime2[205] + Xtime9[205] = _Xtime9[205] + XtimeB[205] = _XtimeB[205] + XtimeD[205] = _XtimeD[205] + XtimeE[205] = _XtimeE[205] + Sbox[206] = _Sbox[206] + InvSbox[206] = _InvSbox[206] + Xtime2Sbox[206] = _Xtime2Sbox[206] + Xtime3Sbox[206] = _Xtime3Sbox[206] + Xtime2[206] = _Xtime2[206] + Xtime9[206] = _Xtime9[206] + XtimeB[206] = _XtimeB[206] + XtimeD[206] = _XtimeD[206] + XtimeE[206] = _XtimeE[206] + Sbox[207] = _Sbox[207] + InvSbox[207] = _InvSbox[207] + Xtime2Sbox[207] = _Xtime2Sbox[207] + Xtime3Sbox[207] = _Xtime3Sbox[207] + Xtime2[207] = _Xtime2[207] + Xtime9[207] = _Xtime9[207] + XtimeB[207] = _XtimeB[207] + XtimeD[207] = _XtimeD[207] + XtimeE[207] = _XtimeE[207] + Sbox[208] = _Sbox[208] + InvSbox[208] = _InvSbox[208] + Xtime2Sbox[208] = _Xtime2Sbox[208] + Xtime3Sbox[208] = _Xtime3Sbox[208] + Xtime2[208] = _Xtime2[208] + Xtime9[208] = _Xtime9[208] + XtimeB[208] = _XtimeB[208] + XtimeD[208] = _XtimeD[208] + XtimeE[208] = _XtimeE[208] + Sbox[209] = _Sbox[209] + InvSbox[209] = _InvSbox[209] + Xtime2Sbox[209] = _Xtime2Sbox[209] + Xtime3Sbox[209] = _Xtime3Sbox[209] + Xtime2[209] = _Xtime2[209] + Xtime9[209] = _Xtime9[209] + XtimeB[209] = _XtimeB[209] + XtimeD[209] = _XtimeD[209] + XtimeE[209] = _XtimeE[209] + Sbox[210] = _Sbox[210] + InvSbox[210] = _InvSbox[210] + Xtime2Sbox[210] = _Xtime2Sbox[210] + Xtime3Sbox[210] = _Xtime3Sbox[210] + Xtime2[210] = _Xtime2[210] + Xtime9[210] = _Xtime9[210] + XtimeB[210] = _XtimeB[210] + XtimeD[210] = _XtimeD[210] + XtimeE[210] = _XtimeE[210] + Sbox[211] = _Sbox[211] + InvSbox[211] = _InvSbox[211] + Xtime2Sbox[211] = _Xtime2Sbox[211] + Xtime3Sbox[211] = _Xtime3Sbox[211] + Xtime2[211] = _Xtime2[211] + Xtime9[211] = _Xtime9[211] + XtimeB[211] = _XtimeB[211] + XtimeD[211] = _XtimeD[211] + XtimeE[211] = _XtimeE[211] + Sbox[212] = _Sbox[212] + InvSbox[212] = _InvSbox[212] + Xtime2Sbox[212] = _Xtime2Sbox[212] + Xtime3Sbox[212] = _Xtime3Sbox[212] + Xtime2[212] = _Xtime2[212] + Xtime9[212] = _Xtime9[212] + XtimeB[212] = _XtimeB[212] + XtimeD[212] = _XtimeD[212] + XtimeE[212] = _XtimeE[212] + Sbox[213] = _Sbox[213] + InvSbox[213] = _InvSbox[213] + Xtime2Sbox[213] = _Xtime2Sbox[213] + Xtime3Sbox[213] = _Xtime3Sbox[213] + Xtime2[213] = _Xtime2[213] + Xtime9[213] = _Xtime9[213] + XtimeB[213] = _XtimeB[213] + XtimeD[213] = _XtimeD[213] + XtimeE[213] = _XtimeE[213] + Sbox[214] = _Sbox[214] + InvSbox[214] = _InvSbox[214] + Xtime2Sbox[214] = _Xtime2Sbox[214] + Xtime3Sbox[214] = _Xtime3Sbox[214] + Xtime2[214] = _Xtime2[214] + Xtime9[214] = _Xtime9[214] + XtimeB[214] = _XtimeB[214] + XtimeD[214] = _XtimeD[214] + XtimeE[214] = _XtimeE[214] + Sbox[215] = _Sbox[215] + InvSbox[215] = _InvSbox[215] + Xtime2Sbox[215] = _Xtime2Sbox[215] + Xtime3Sbox[215] = _Xtime3Sbox[215] + Xtime2[215] = _Xtime2[215] + Xtime9[215] = _Xtime9[215] + XtimeB[215] = _XtimeB[215] + XtimeD[215] = _XtimeD[215] + XtimeE[215] = _XtimeE[215] + Sbox[216] = _Sbox[216] + InvSbox[216] = _InvSbox[216] + Xtime2Sbox[216] = _Xtime2Sbox[216] + Xtime3Sbox[216] = _Xtime3Sbox[216] + Xtime2[216] = _Xtime2[216] + Xtime9[216] = _Xtime9[216] + XtimeB[216] = _XtimeB[216] + XtimeD[216] = _XtimeD[216] + XtimeE[216] = _XtimeE[216] + Sbox[217] = _Sbox[217] + InvSbox[217] = _InvSbox[217] + Xtime2Sbox[217] = _Xtime2Sbox[217] + Xtime3Sbox[217] = _Xtime3Sbox[217] + Xtime2[217] = _Xtime2[217] + Xtime9[217] = _Xtime9[217] + XtimeB[217] = _XtimeB[217] + XtimeD[217] = _XtimeD[217] + XtimeE[217] = _XtimeE[217] + Sbox[218] = _Sbox[218] + InvSbox[218] = _InvSbox[218] + Xtime2Sbox[218] = _Xtime2Sbox[218] + Xtime3Sbox[218] = _Xtime3Sbox[218] + Xtime2[218] = _Xtime2[218] + Xtime9[218] = _Xtime9[218] + XtimeB[218] = _XtimeB[218] + XtimeD[218] = _XtimeD[218] + XtimeE[218] = _XtimeE[218] + Sbox[219] = _Sbox[219] + InvSbox[219] = _InvSbox[219] + Xtime2Sbox[219] = _Xtime2Sbox[219] + Xtime3Sbox[219] = _Xtime3Sbox[219] + Xtime2[219] = _Xtime2[219] + Xtime9[219] = _Xtime9[219] + XtimeB[219] = _XtimeB[219] + XtimeD[219] = _XtimeD[219] + XtimeE[219] = _XtimeE[219] + Sbox[220] = _Sbox[220] + InvSbox[220] = _InvSbox[220] + Xtime2Sbox[220] = _Xtime2Sbox[220] + Xtime3Sbox[220] = _Xtime3Sbox[220] + Xtime2[220] = _Xtime2[220] + Xtime9[220] = _Xtime9[220] + XtimeB[220] = _XtimeB[220] + XtimeD[220] = _XtimeD[220] + XtimeE[220] = _XtimeE[220] + Sbox[221] = _Sbox[221] + InvSbox[221] = _InvSbox[221] + Xtime2Sbox[221] = _Xtime2Sbox[221] + Xtime3Sbox[221] = _Xtime3Sbox[221] + Xtime2[221] = _Xtime2[221] + Xtime9[221] = _Xtime9[221] + XtimeB[221] = _XtimeB[221] + XtimeD[221] = _XtimeD[221] + XtimeE[221] = _XtimeE[221] + Sbox[222] = _Sbox[222] + InvSbox[222] = _InvSbox[222] + Xtime2Sbox[222] = _Xtime2Sbox[222] + Xtime3Sbox[222] = _Xtime3Sbox[222] + Xtime2[222] = _Xtime2[222] + Xtime9[222] = _Xtime9[222] + XtimeB[222] = _XtimeB[222] + XtimeD[222] = _XtimeD[222] + XtimeE[222] = _XtimeE[222] + Sbox[223] = _Sbox[223] + InvSbox[223] = _InvSbox[223] + Xtime2Sbox[223] = _Xtime2Sbox[223] + Xtime3Sbox[223] = _Xtime3Sbox[223] + Xtime2[223] = _Xtime2[223] + Xtime9[223] = _Xtime9[223] + XtimeB[223] = _XtimeB[223] + XtimeD[223] = _XtimeD[223] + XtimeE[223] = _XtimeE[223] + Sbox[224] = _Sbox[224] + InvSbox[224] = _InvSbox[224] + Xtime2Sbox[224] = _Xtime2Sbox[224] + Xtime3Sbox[224] = _Xtime3Sbox[224] + Xtime2[224] = _Xtime2[224] + Xtime9[224] = _Xtime9[224] + XtimeB[224] = _XtimeB[224] + XtimeD[224] = _XtimeD[224] + XtimeE[224] = _XtimeE[224] + Sbox[225] = _Sbox[225] + InvSbox[225] = _InvSbox[225] + Xtime2Sbox[225] = _Xtime2Sbox[225] + Xtime3Sbox[225] = _Xtime3Sbox[225] + Xtime2[225] = _Xtime2[225] + Xtime9[225] = _Xtime9[225] + XtimeB[225] = _XtimeB[225] + XtimeD[225] = _XtimeD[225] + XtimeE[225] = _XtimeE[225] + Sbox[226] = _Sbox[226] + InvSbox[226] = _InvSbox[226] + Xtime2Sbox[226] = _Xtime2Sbox[226] + Xtime3Sbox[226] = _Xtime3Sbox[226] + Xtime2[226] = _Xtime2[226] + Xtime9[226] = _Xtime9[226] + XtimeB[226] = _XtimeB[226] + XtimeD[226] = _XtimeD[226] + XtimeE[226] = _XtimeE[226] + Sbox[227] = _Sbox[227] + InvSbox[227] = _InvSbox[227] + Xtime2Sbox[227] = _Xtime2Sbox[227] + Xtime3Sbox[227] = _Xtime3Sbox[227] + Xtime2[227] = _Xtime2[227] + Xtime9[227] = _Xtime9[227] + XtimeB[227] = _XtimeB[227] + XtimeD[227] = _XtimeD[227] + XtimeE[227] = _XtimeE[227] + Sbox[228] = _Sbox[228] + InvSbox[228] = _InvSbox[228] + Xtime2Sbox[228] = _Xtime2Sbox[228] + Xtime3Sbox[228] = _Xtime3Sbox[228] + Xtime2[228] = _Xtime2[228] + Xtime9[228] = _Xtime9[228] + XtimeB[228] = _XtimeB[228] + XtimeD[228] = _XtimeD[228] + XtimeE[228] = _XtimeE[228] + Sbox[229] = _Sbox[229] + InvSbox[229] = _InvSbox[229] + Xtime2Sbox[229] = _Xtime2Sbox[229] + Xtime3Sbox[229] = _Xtime3Sbox[229] + Xtime2[229] = _Xtime2[229] + Xtime9[229] = _Xtime9[229] + XtimeB[229] = _XtimeB[229] + XtimeD[229] = _XtimeD[229] + XtimeE[229] = _XtimeE[229] + Sbox[230] = _Sbox[230] + InvSbox[230] = _InvSbox[230] + Xtime2Sbox[230] = _Xtime2Sbox[230] + Xtime3Sbox[230] = _Xtime3Sbox[230] + Xtime2[230] = _Xtime2[230] + Xtime9[230] = _Xtime9[230] + XtimeB[230] = _XtimeB[230] + XtimeD[230] = _XtimeD[230] + XtimeE[230] = _XtimeE[230] + Sbox[231] = _Sbox[231] + InvSbox[231] = _InvSbox[231] + Xtime2Sbox[231] = _Xtime2Sbox[231] + Xtime3Sbox[231] = _Xtime3Sbox[231] + Xtime2[231] = _Xtime2[231] + Xtime9[231] = _Xtime9[231] + XtimeB[231] = _XtimeB[231] + XtimeD[231] = _XtimeD[231] + XtimeE[231] = _XtimeE[231] + Sbox[232] = _Sbox[232] + InvSbox[232] = _InvSbox[232] + Xtime2Sbox[232] = _Xtime2Sbox[232] + Xtime3Sbox[232] = _Xtime3Sbox[232] + Xtime2[232] = _Xtime2[232] + Xtime9[232] = _Xtime9[232] + XtimeB[232] = _XtimeB[232] + XtimeD[232] = _XtimeD[232] + XtimeE[232] = _XtimeE[232] + Sbox[233] = _Sbox[233] + InvSbox[233] = _InvSbox[233] + Xtime2Sbox[233] = _Xtime2Sbox[233] + Xtime3Sbox[233] = _Xtime3Sbox[233] + Xtime2[233] = _Xtime2[233] + Xtime9[233] = _Xtime9[233] + XtimeB[233] = _XtimeB[233] + XtimeD[233] = _XtimeD[233] + XtimeE[233] = _XtimeE[233] + Sbox[234] = _Sbox[234] + InvSbox[234] = _InvSbox[234] + Xtime2Sbox[234] = _Xtime2Sbox[234] + Xtime3Sbox[234] = _Xtime3Sbox[234] + Xtime2[234] = _Xtime2[234] + Xtime9[234] = _Xtime9[234] + XtimeB[234] = _XtimeB[234] + XtimeD[234] = _XtimeD[234] + XtimeE[234] = _XtimeE[234] + Sbox[235] = _Sbox[235] + InvSbox[235] = _InvSbox[235] + Xtime2Sbox[235] = _Xtime2Sbox[235] + Xtime3Sbox[235] = _Xtime3Sbox[235] + Xtime2[235] = _Xtime2[235] + Xtime9[235] = _Xtime9[235] + XtimeB[235] = _XtimeB[235] + XtimeD[235] = _XtimeD[235] + XtimeE[235] = _XtimeE[235] + Sbox[236] = _Sbox[236] + InvSbox[236] = _InvSbox[236] + Xtime2Sbox[236] = _Xtime2Sbox[236] + Xtime3Sbox[236] = _Xtime3Sbox[236] + Xtime2[236] = _Xtime2[236] + Xtime9[236] = _Xtime9[236] + XtimeB[236] = _XtimeB[236] + XtimeD[236] = _XtimeD[236] + XtimeE[236] = _XtimeE[236] + Sbox[237] = _Sbox[237] + InvSbox[237] = _InvSbox[237] + Xtime2Sbox[237] = _Xtime2Sbox[237] + Xtime3Sbox[237] = _Xtime3Sbox[237] + Xtime2[237] = _Xtime2[237] + Xtime9[237] = _Xtime9[237] + XtimeB[237] = _XtimeB[237] + XtimeD[237] = _XtimeD[237] + XtimeE[237] = _XtimeE[237] + Sbox[238] = _Sbox[238] + InvSbox[238] = _InvSbox[238] + Xtime2Sbox[238] = _Xtime2Sbox[238] + Xtime3Sbox[238] = _Xtime3Sbox[238] + Xtime2[238] = _Xtime2[238] + Xtime9[238] = _Xtime9[238] + XtimeB[238] = _XtimeB[238] + XtimeD[238] = _XtimeD[238] + XtimeE[238] = _XtimeE[238] + Sbox[239] = _Sbox[239] + InvSbox[239] = _InvSbox[239] + Xtime2Sbox[239] = _Xtime2Sbox[239] + Xtime3Sbox[239] = _Xtime3Sbox[239] + Xtime2[239] = _Xtime2[239] + Xtime9[239] = _Xtime9[239] + XtimeB[239] = _XtimeB[239] + XtimeD[239] = _XtimeD[239] + XtimeE[239] = _XtimeE[239] + Sbox[240] = _Sbox[240] + InvSbox[240] = _InvSbox[240] + Xtime2Sbox[240] = _Xtime2Sbox[240] + Xtime3Sbox[240] = _Xtime3Sbox[240] + Xtime2[240] = _Xtime2[240] + Xtime9[240] = _Xtime9[240] + XtimeB[240] = _XtimeB[240] + XtimeD[240] = _XtimeD[240] + XtimeE[240] = _XtimeE[240] + Sbox[241] = _Sbox[241] + InvSbox[241] = _InvSbox[241] + Xtime2Sbox[241] = _Xtime2Sbox[241] + Xtime3Sbox[241] = _Xtime3Sbox[241] + Xtime2[241] = _Xtime2[241] + Xtime9[241] = _Xtime9[241] + XtimeB[241] = _XtimeB[241] + XtimeD[241] = _XtimeD[241] + XtimeE[241] = _XtimeE[241] + Sbox[242] = _Sbox[242] + InvSbox[242] = _InvSbox[242] + Xtime2Sbox[242] = _Xtime2Sbox[242] + Xtime3Sbox[242] = _Xtime3Sbox[242] + Xtime2[242] = _Xtime2[242] + Xtime9[242] = _Xtime9[242] + XtimeB[242] = _XtimeB[242] + XtimeD[242] = _XtimeD[242] + XtimeE[242] = _XtimeE[242] + Sbox[243] = _Sbox[243] + InvSbox[243] = _InvSbox[243] + Xtime2Sbox[243] = _Xtime2Sbox[243] + Xtime3Sbox[243] = _Xtime3Sbox[243] + Xtime2[243] = _Xtime2[243] + Xtime9[243] = _Xtime9[243] + XtimeB[243] = _XtimeB[243] + XtimeD[243] = _XtimeD[243] + XtimeE[243] = _XtimeE[243] + Sbox[244] = _Sbox[244] + InvSbox[244] = _InvSbox[244] + Xtime2Sbox[244] = _Xtime2Sbox[244] + Xtime3Sbox[244] = _Xtime3Sbox[244] + Xtime2[244] = _Xtime2[244] + Xtime9[244] = _Xtime9[244] + XtimeB[244] = _XtimeB[244] + XtimeD[244] = _XtimeD[244] + XtimeE[244] = _XtimeE[244] + Sbox[245] = _Sbox[245] + InvSbox[245] = _InvSbox[245] + Xtime2Sbox[245] = _Xtime2Sbox[245] + Xtime3Sbox[245] = _Xtime3Sbox[245] + Xtime2[245] = _Xtime2[245] + Xtime9[245] = _Xtime9[245] + XtimeB[245] = _XtimeB[245] + XtimeD[245] = _XtimeD[245] + XtimeE[245] = _XtimeE[245] + Sbox[246] = _Sbox[246] + InvSbox[246] = _InvSbox[246] + Xtime2Sbox[246] = _Xtime2Sbox[246] + Xtime3Sbox[246] = _Xtime3Sbox[246] + Xtime2[246] = _Xtime2[246] + Xtime9[246] = _Xtime9[246] + XtimeB[246] = _XtimeB[246] + XtimeD[246] = _XtimeD[246] + XtimeE[246] = _XtimeE[246] + Sbox[247] = _Sbox[247] + InvSbox[247] = _InvSbox[247] + Xtime2Sbox[247] = _Xtime2Sbox[247] + Xtime3Sbox[247] = _Xtime3Sbox[247] + Xtime2[247] = _Xtime2[247] + Xtime9[247] = _Xtime9[247] + XtimeB[247] = _XtimeB[247] + XtimeD[247] = _XtimeD[247] + XtimeE[247] = _XtimeE[247] + Sbox[248] = _Sbox[248] + InvSbox[248] = _InvSbox[248] + Xtime2Sbox[248] = _Xtime2Sbox[248] + Xtime3Sbox[248] = _Xtime3Sbox[248] + Xtime2[248] = _Xtime2[248] + Xtime9[248] = _Xtime9[248] + XtimeB[248] = _XtimeB[248] + XtimeD[248] = _XtimeD[248] + XtimeE[248] = _XtimeE[248] + Sbox[249] = _Sbox[249] + InvSbox[249] = _InvSbox[249] + Xtime2Sbox[249] = _Xtime2Sbox[249] + Xtime3Sbox[249] = _Xtime3Sbox[249] + Xtime2[249] = _Xtime2[249] + Xtime9[249] = _Xtime9[249] + XtimeB[249] = _XtimeB[249] + XtimeD[249] = _XtimeD[249] + XtimeE[249] = _XtimeE[249] + Sbox[250] = _Sbox[250] + InvSbox[250] = _InvSbox[250] + Xtime2Sbox[250] = _Xtime2Sbox[250] + Xtime3Sbox[250] = _Xtime3Sbox[250] + Xtime2[250] = _Xtime2[250] + Xtime9[250] = _Xtime9[250] + XtimeB[250] = _XtimeB[250] + XtimeD[250] = _XtimeD[250] + XtimeE[250] = _XtimeE[250] + Sbox[251] = _Sbox[251] + InvSbox[251] = _InvSbox[251] + Xtime2Sbox[251] = _Xtime2Sbox[251] + Xtime3Sbox[251] = _Xtime3Sbox[251] + Xtime2[251] = _Xtime2[251] + Xtime9[251] = _Xtime9[251] + XtimeB[251] = _XtimeB[251] + XtimeD[251] = _XtimeD[251] + XtimeE[251] = _XtimeE[251] + Sbox[252] = _Sbox[252] + InvSbox[252] = _InvSbox[252] + Xtime2Sbox[252] = _Xtime2Sbox[252] + Xtime3Sbox[252] = _Xtime3Sbox[252] + Xtime2[252] = _Xtime2[252] + Xtime9[252] = _Xtime9[252] + XtimeB[252] = _XtimeB[252] + XtimeD[252] = _XtimeD[252] + XtimeE[252] = _XtimeE[252] + Sbox[253] = _Sbox[253] + InvSbox[253] = _InvSbox[253] + Xtime2Sbox[253] = _Xtime2Sbox[253] + Xtime3Sbox[253] = _Xtime3Sbox[253] + Xtime2[253] = _Xtime2[253] + Xtime9[253] = _Xtime9[253] + XtimeB[253] = _XtimeB[253] + XtimeD[253] = _XtimeD[253] + XtimeE[253] = _XtimeE[253] + Sbox[254] = _Sbox[254] + InvSbox[254] = _InvSbox[254] + Xtime2Sbox[254] = _Xtime2Sbox[254] + Xtime3Sbox[254] = _Xtime3Sbox[254] + Xtime2[254] = _Xtime2[254] + Xtime9[254] = _Xtime9[254] + XtimeB[254] = _XtimeB[254] + XtimeD[254] = _XtimeD[254] + XtimeE[254] = _XtimeE[254] + Sbox[255] = _Sbox[255] + InvSbox[255] = _InvSbox[255] + Xtime2Sbox[255] = _Xtime2Sbox[255] + Xtime3Sbox[255] = _Xtime3Sbox[255] + Xtime2[255] = _Xtime2[255] + Xtime9[255] = _Xtime9[255] + XtimeB[255] = _XtimeB[255] + XtimeD[255] = _XtimeD[255] + XtimeE[255] = _XtimeE[255] + Rcon = new ByteArray; + /* + for (i=0;i<_Rcon.length;i++) { + Rcon[i] = _Rcon[i]; + } + */ + Rcon[0] = _Rcon[0]; + Rcon[1] = _Rcon[1]; + Rcon[2] = _Rcon[2]; + Rcon[3] = _Rcon[3]; + Rcon[4] = _Rcon[4]; + Rcon[5] = _Rcon[5]; + Rcon[6] = _Rcon[6]; + Rcon[7] = _Rcon[7]; + Rcon[8] = _Rcon[8]; + Rcon[9] = _Rcon[9]; + Rcon[10] = _Rcon[10]; + Rcon[11] = _Rcon[11]; + } + + private var key:ByteArray; + private var keyLength:uint; + private var Nr:uint; + private var state:ByteArray; + private var tmp:ByteArray; + + public function AESKey(key:ByteArray) { + tmp = new ByteArray; + state = new ByteArray; + keyLength = key.length; + this.key = new ByteArray; + this.key.writeBytes(key); + expandKey(); + } + + // produce Nb bytes for each round + private function expandKey():void { + var tmp0:uint, tmp1:uint, tmp2:uint, tmp3:uint, tmp4:uint; + var idx:uint; + var Nk:uint = key.length/4; + Nr = Nk+6; + + for( idx = Nk; idx < Nb * (Nr + 1); idx++ ) { + tmp0 = key[4*idx - 4]; + tmp1 = key[4*idx - 3]; + tmp2 = key[4*idx - 2]; + tmp3 = key[4*idx - 1]; + if( !(idx % Nk) ) { + tmp4 = tmp3; + tmp3 = Sbox[tmp0]; + tmp0 = Sbox[tmp1] ^ Rcon[idx/Nk]; + tmp1 = Sbox[tmp2]; + tmp2 = Sbox[tmp4]; + } else if( Nk > 6 && idx % Nk == 4 ) { + tmp0 = Sbox[tmp0]; + tmp1 = Sbox[tmp1]; + tmp2 = Sbox[tmp2]; + tmp3 = Sbox[tmp3]; + } + + key[4*idx+0] = key[4*idx - 4*Nk + 0] ^ tmp0; + key[4*idx+1] = key[4*idx - 4*Nk + 1] ^ tmp1; + key[4*idx+2] = key[4*idx - 4*Nk + 2] ^ tmp2; + key[4*idx+3] = key[4*idx - 4*Nk + 3] ^ tmp3; + } + } + + + public function getBlockSize():uint + { + return 16; + } + + // encrypt one 128 bit block + public function encrypt(block:ByteArray, index:uint=0):void + { + var round:uint; + state.position=0; + state.writeBytes(block, index, Nb*4); + + addRoundKey(key, 0); + for ( round = 1; round < Nr + 1; round++ ) { + if (round < Nr) { + mixSubColumns(); + } else { + shiftRows(); + } + addRoundKey(key, round * Nb * 4); + } + + block.position=index; + block.writeBytes(state); + } + + public function decrypt(block:ByteArray, index:uint=0):void + { + var round:uint; + state.position=0; + state.writeBytes(block, index, Nb*4); + + addRoundKey(key, Nr*Nb*4); + invShiftRows(); + for( round = Nr; round--; ) + { + addRoundKey( key, round*Nb*4); + if (round) { + invMixSubColumns(); + } + } + + block.position=index; + block.writeBytes(state); + } + + public function dispose():void { + var i:uint; + var r:Random = new Random; + for (i=0;i>> 24)] + S1[(x >>> 16) & 0xff]) ^ S2[(x >>> 8) & 0xff]) + S3[x & 0xff]); + } + + /** + * apply the encryption cycle to each value pair in the table. + */ + private function processTable(xl:uint, xr:uint, table:Array):void + { + var size:uint = table.length; + + for (var s:uint = 0; s < size; s += 2) + { + xl ^= P[0]; + + for (var i:uint = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + table[s] = xr; + table[s + 1] = xl; + + xr = xl; // end of cycle swap + xl = table[s]; + } + } + + private function setKey(key:ByteArray):void + { + /* + * - comments are from _Applied Crypto_, Schneier, p338 please be + * careful comparing the two, AC numbers the arrays from 1, the enclosed + * code from 0. + * + * (1) Initialise the S-boxes and the P-array, with a fixed string This + * string contains the hexadecimal digits of pi (3.141...) + */ + S0 = KS0.concat(); + S1 = KS1.concat(); + S2 = KS2.concat(); + S3 = KS3.concat(); + P = KP.concat(); + + /* + * (2) Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with + * the second 32-bits of the key, and so on for all bits of the key (up + * to P[17]). Repeatedly cycle through the key bits until the entire + * P-array has been XOR-ed with the key bits + */ + var keyLength:uint= key.length; + var keyIndex:uint = 0; + + for (var i:uint = 0; i < P_SZ; i++) + { + // get the 32 bits of the key, in 4 * 8 bit chunks + var data:uint = 0x0000000; + for (var j:uint = 0; j < 4; j++) + { + // create a 32 bit block + data = (data << 8) | (key[keyIndex++] & 0xff); + + // wrap when we get to the end of the key + if (keyIndex >= keyLength) + { + keyIndex = 0; + } + } + // XOR the newly created 32 bit chunk onto the P-array + P[i] ^= data; + } + + /* + * (3) Encrypt the all-zero string with the Blowfish algorithm, using + * the subkeys described in (1) and (2) + * + * (4) Replace P1 and P2 with the output of step (3) + * + * (5) Encrypt the output of step(3) using the Blowfish algorithm, with + * the modified subkeys. + * + * (6) Replace P3 and P4 with the output of step (5) + * + * (7) Continue the process, replacing all elements of the P-array and + * then all four S-boxes in order, with the output of the continuously + * changing Blowfish algorithm + */ + + processTable(0, 0, P); + processTable(P[P_SZ - 2], P[P_SZ - 1], S0); + processTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1); + processTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2); + processTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3); + } + + /** + * Encrypt the given input starting at the given offset and place the result + * in the provided buffer starting at the given offset. The input will be an + * exact multiple of our blocksize. + */ + private function encryptBlock(src:ByteArray, srcIndex:uint, dst:ByteArray, dstIndex:uint):void + { + var xl:uint = BytesTo32bits(src, srcIndex); + var xr:uint = BytesTo32bits(src, srcIndex + 4); + + xl ^= P[0]; + + for (var i:uint = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + Bits32ToBytes(xr, dst, dstIndex); + Bits32ToBytes(xl, dst, dstIndex + 4); + } + + /** + * Decrypt the given input starting at the given offset and place the result + * in the provided buffer starting at the given offset. The input will be an + * exact multiple of our blocksize. + */ + private function decryptBlock(src:ByteArray, srcIndex:uint, dst:ByteArray, dstIndex:uint):void + { + var xl:uint = BytesTo32bits(src, srcIndex); + var xr:uint = BytesTo32bits(src, srcIndex + 4); + + xl ^= P[ROUNDS + 1]; + + for (var i:uint = ROUNDS; i > 0; i -= 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i - 1]; + } + + xr ^= P[0]; + + Bits32ToBytes(xr, dst, dstIndex); + Bits32ToBytes(xl, dst, dstIndex + 4); + } + + private function BytesTo32bits(b:ByteArray, i:uint):uint + { + return ((b[i] & 0xff) << 24) | ((b[i + 1] & 0xff) << 16) | ((b[i + 2] & 0xff) << 8) | ((b[i + 3] & 0xff)); + } + + private function Bits32ToBytes(i:uint, b:ByteArray, offset:uint):void + { + b[offset + 3] = i; + b[offset + 2] = (i >> 8); + b[offset + 1] = (i >> 16); + b[offset] = (i >> 24); + } + + public function toString():String { + return "blowfish"; + } + + } + +} diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as new file mode 100644 index 00000000..e3781bee --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as @@ -0,0 +1,55 @@ +/** + * CBCMode + * + * An ActionScript 3 implementation of the CBC confidentiality mode + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric +{ + import flash.utils.ByteArray; + + /** + * CBC confidentiality mode. why not. + */ + public class CBCMode extends IVMode implements IMode + { + + public function CBCMode(key:ISymmetricKey, padding:IPad = null) { + super(key, padding); + } + + public function encrypt(src:ByteArray):void { + padding.pad(src); + var vector:ByteArray = getIV4e(); + for (var i:uint=0;i=0;--j) { + X[j]++; + if (X[j]!=0) + break; + } + } + } + public function toString():String { + return key.toString()+"-ctr"; + } + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as new file mode 100644 index 00000000..4a0b7558 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as @@ -0,0 +1,365 @@ +/** + * DESKey + * + * An Actionscript 3 implementation of the Data Encryption Standard (DES) + * Copyright (c) 2007 Henri Torgemane + * + * Derived from: + * The Bouncy Castle Crypto package, + * Copyright (c) 2000-2004 The Legion Of The Bouncy Castle + * (http://www.bouncycastle.org) + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric +{ + import flash.utils.ByteArray; + import com.hurlant.util.Hex; + import com.hurlant.util.Memory; + + public class DESKey implements ISymmetricKey + { + /** + * what follows is mainly taken from "Applied Cryptography", by Bruce + * Schneier, however it also bears great resemblance to Richard + * Outerbridge's D3DES... + */ + + private static const Df_Key:Array = [ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, + 0x10, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67 ]; + + private static const bytebit:Array = [ 128, 64, 32, 16, 8, 4, 2, 1 ]; + + private static const bigbyte:Array = [ 0x800000, 0x400000, 0x200000, 0x100000, 0x80000, 0x40000, 0x20000, 0x10000, 0x8000, + 0x4000, 0x2000, 0x1000, 0x800, 0x400, 0x200, 0x100, 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 ]; + + /* + * Use the key schedule specified in the Standard (ANSI X3.92-1981). + */ + + private static const pc1:Array = [ 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, + 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 60, 52, 44, 36, 28, 20, 12, + 4, 27, 19, 11, 3 ]; + + private static const totrot:Array = [ 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 ]; + + private static const pc2:Array = [ 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, + 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 ]; + + private static const SP1:Array = [ 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, + 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, 0x00010004, + 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, 0x00010000, 0x01010404, + 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, 0x00010400, + 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, 0x01010404, 0x00010004, 0x01010000, 0x01000404, + 0x01000004, 0x00000404, 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, + 0x00010400, 0x00000000, 0x01010004 ]; + + private static const SP2:Array = [ 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, + 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, 0x00100020, + 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, 0x00000000, 0x00108020, + 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, 0x00000020, + 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, 0x00008020, 0x80108000, 0x00100000, 0x80000020, + 0x00100020, 0x80008020, 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, + 0x80100020, 0x80108020, 0x00108000 ]; + + private static const SP3:Array = [ 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, + 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, 0x08000208, + 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, 0x08020200, 0x08000000, + 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, 0x08020208, + 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, 0x08000208, 0x00020000, 0x08000000, 0x08020208, + 0x00000008, 0x00020208, 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, + 0x00000008, 0x08020008, 0x00020200 ]; + + private static const SP4:Array = [ 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, + 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, 0x00800081, + 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, 0x00800080, 0x00800001, + 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, 0x00800081, + 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802081, 0x00000081, 0x00000001, 0x00002000, + 0x00800001, 0x00002001, 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, + 0x00800000, 0x00002000, 0x00802080 ]; + + private static const SP5:Array = [ 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, + 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, 0x42080000, + 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, 0x00080000, 0x42000100, + 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, 0x42080000, + 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, 0x42080100, 0x00080100, 0x42000000, 0x42080100, + 0x02080000, 0x00000000, 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, + 0x40080000, 0x02080100, 0x40000100 ]; + + private static const SP6:Array = [ 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, + 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, 0x20400010, + 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, 0x20004000, 0x00000010, + 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, 0x20000000, + 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, 0x00404010, 0x20404000, 0x00000000, 0x20400010, + 0x00000010, 0x00004000, 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, + 0x20000000, 0x00400010, 0x20004010 ]; + + private static const SP7:Array = [ 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, + 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, 0x04200000, + 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, 0x04000000, 0x00200800, + 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, 0x04000800, + 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, 0x00000802, 0x04000002, 0x04200802, 0x04200000, + 0x00200800, 0x00000000, 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, + 0x04000800, 0x00000800, 0x00200002 ]; + + private static const SP8:Array = [ 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, + 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, 0x00001040, + 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, 0x00041040, 0x00040000, + 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, 0x10000040, + 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, 0x00000000, 0x10041040, 0x00040040, 0x10000040, + 0x10040000, 0x10001000, 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, + 0x00040040, 0x10000000, 0x10041000 ]; + + + protected var key:ByteArray; + protected var encKey:Array; + protected var decKey:Array; + + + public function DESKey(key:ByteArray) { + this.key = key; + this.encKey = generateWorkingKey(true, key, 0); + this.decKey = generateWorkingKey(false, key, 0); + } + + public function getBlockSize():uint + { + return 8; + } + + public function decrypt(block:ByteArray, index:uint=0):void + { + desFunc(decKey, block, index, block, index); + } + + public function dispose():void + { + var i:uint=0; + for (i=0;i>> 3)] & bytebit[l & 07]) != 0); + } + + for (var i:uint = 0; i < 16; i++) + { + var m:uint; + var n:uint; + + if (encrypting) + { + m = i << 1; + } + else + { + m = (15 - i) << 1; + } + + n = m + 1; + newKey[m] = newKey[n] = 0; + + for (j = 0; j < 28; j++) + { + l = j + totrot[i]; + if (l < 28) + { + pcr[j] = pc1m[l]; + } + else + { + pcr[j] = pc1m[l - 28]; + } + } + + for (j = 28; j < 56; j++) + { + l = j + totrot[i]; + if (l < 56) + { + pcr[j] = pc1m[l]; + } + else + { + pcr[j] = pc1m[l - 28]; + } + } + + for (j = 0; j < 24; j++) + { + if (pcr[pc2[j]]) + { + newKey[m] |= bigbyte[j]; + } + + if (pcr[pc2[j + 24]]) + { + newKey[n] |= bigbyte[j]; + } + } + } + + // + // store the processed key + // + for (i = 0; i != 32; i += 2) + { + var i1:uint; + var i2:uint; + + i1 = newKey[i]; + i2 = newKey[i + 1]; + + newKey[i] = ((i1 & 0x00fc0000) << 6) | ((i1 & 0x00000fc0) << 10) | ((i2 & 0x00fc0000) >>> 10) + | ((i2 & 0x00000fc0) >>> 6); + + newKey[i + 1] = ((i1 & 0x0003f000) << 12) | ((i1 & 0x0000003f) << 16) | ((i2 & 0x0003f000) >>> 4) + | (i2 & 0x0000003f); + } + return newKey; + } + + /** + * the DES engine. + */ + protected function desFunc(wKey:Array, inp:ByteArray, inOff:uint, out:ByteArray, outOff:uint):void + { + var work:uint; + var right:uint; + var left:uint; + + left = (inp[inOff + 0] & 0xff) << 24; + left |= (inp[inOff + 1] & 0xff) << 16; + left |= (inp[inOff + 2] & 0xff) << 8; + left |= (inp[inOff + 3] & 0xff); + + right = (inp[inOff + 4] & 0xff) << 24; + right |= (inp[inOff + 5] & 0xff) << 16; + right |= (inp[inOff + 6] & 0xff) << 8; + right |= (inp[inOff + 7] & 0xff); + + work = ((left >>> 4) ^ right) & 0x0f0f0f0f; + right ^= work; + left ^= (work << 4); + work = ((left >>> 16) ^ right) & 0x0000ffff; + right ^= work; + left ^= (work << 16); + work = ((right >>> 2) ^ left) & 0x33333333; + left ^= work; + right ^= (work << 2); + work = ((right >>> 8) ^ left) & 0x00ff00ff; + left ^= work; + right ^= (work << 8); + right = ((right << 1) | ((right >>> 31) & 1)) & 0xffffffff; + work = (left ^ right) & 0xaaaaaaaa; + left ^= work; + right ^= work; + left = ((left << 1) | ((left >>> 31) & 1)) & 0xffffffff; + + for (var round:uint = 0; round < 8; round++) + { + var fval:uint; + + work = (right << 28) | (right >>> 4); + work ^= wKey[round * 4 + 0]; + fval = SP7[work & 0x3f]; + fval |= SP5[(work >>> 8) & 0x3f]; + fval |= SP3[(work >>> 16) & 0x3f]; + fval |= SP1[(work >>> 24) & 0x3f]; + work = right ^ wKey[round * 4 + 1]; + fval |= SP8[work & 0x3f]; + fval |= SP6[(work >>> 8) & 0x3f]; + fval |= SP4[(work >>> 16) & 0x3f]; + fval |= SP2[(work >>> 24) & 0x3f]; + left ^= fval; + work = (left << 28) | (left >>> 4); + work ^= wKey[round * 4 + 2]; + fval = SP7[work & 0x3f]; + fval |= SP5[(work >>> 8) & 0x3f]; + fval |= SP3[(work >>> 16) & 0x3f]; + fval |= SP1[(work >>> 24) & 0x3f]; + work = left ^ wKey[round * 4 + 3]; + fval |= SP8[work & 0x3f]; + fval |= SP6[(work >>> 8) & 0x3f]; + fval |= SP4[(work >>> 16) & 0x3f]; + fval |= SP2[(work >>> 24) & 0x3f]; + right ^= fval; + } + + right = (right << 31) | (right >>> 1); + work = (left ^ right) & 0xaaaaaaaa; + left ^= work; + right ^= work; + left = (left << 31) | (left >>> 1); + work = ((left >>> 8) ^ right) & 0x00ff00ff; + right ^= work; + left ^= (work << 8); + work = ((left >>> 2) ^ right) & 0x33333333; + right ^= work; + left ^= (work << 2); + work = ((right >>> 16) ^ left) & 0x0000ffff; + left ^= work; + right ^= (work << 16); + work = ((right >>> 4) ^ left) & 0x0f0f0f0f; + left ^= work; + right ^= (work << 4); + + out[outOff + 0] = ((right >>> 24) & 0xff); + out[outOff + 1] = ((right >>> 16) & 0xff); + out[outOff + 2] = ((right >>> 8) & 0xff); + out[outOff + 3] = (right & 0xff); + out[outOff + 4] = ((left >>> 24) & 0xff); + out[outOff + 5] = ((left >>> 16) & 0xff); + out[outOff + 6] = ((left >>> 8) & 0xff); + out[outOff + 7] = (left & 0xff); + } + + + public function toString():String { + return "des"; + } + + + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as new file mode 100644 index 00000000..b2a7b777 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as @@ -0,0 +1,86 @@ +/** + * ECBMode + * + * An ActionScript 3 implementation of the ECB confidentiality mode + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric +{ + import flash.utils.ByteArray; + import com.hurlant.util.Memory; + import com.hurlant.util.Hex; + + /** + * ECB mode. + * This uses a padding and a symmetric key. + * If no padding is given, PKCS#5 is used. + */ + public class ECBMode implements IMode, ICipher + { + private var key:ISymmetricKey; + private var padding:IPad; + + public function ECBMode(key:ISymmetricKey, padding:IPad = null) { + this.key = key; + if (padding == null) { + padding = new PKCS5(key.getBlockSize()); + } else { + padding.setBlockSize(key.getBlockSize()); + } + this.padding = padding; + } + + public function getBlockSize():uint { + return key.getBlockSize(); + } + + public function encrypt(src:ByteArray):void { + padding.pad(src); + src.position = 0; + var blockSize:uint = key.getBlockSize(); + var tmp:ByteArray = new ByteArray; + var dst:ByteArray = new ByteArray; + for (var i:uint=0;i0;i--) { + var v:uint = a[a.length-1]; + a.length--; + if (c!=v) throw new Error("PKCS#5:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]"); + } + // that is all. + } + + public function setBlockSize(bs:uint):void { + blockSize = bs; + } + + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as new file mode 100755 index 00000000..8dd13246 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as @@ -0,0 +1,44 @@ +/** + * TLSPad + * + * A padding implementation used by TLS + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric { + import flash.utils.ByteArray; + import com.hurlant.util.Hex; + import com.hurlant.crypto.tls.TLSError; + + public class SSLPad implements IPad { + private var blockSize:uint; + + public function SSLPad(blockSize:uint=0) { + this.blockSize = blockSize; + } + public function pad(a:ByteArray):void { + var c:uint = blockSize - (a.length+1)%blockSize; + for (var i:uint=0;i<=c;i++) { + a[a.length] = c; + } + + } + public function unpad(a:ByteArray):void { + var c:uint = a.length%blockSize; + if (c!=0) throw new TLSError("SSLPad::unpad: ByteArray.length isn't a multiple of the blockSize", TLSError.bad_record_mac); + c = a[a.length-1]; + for (var i:uint=c;i>0;i--) { + var v:uint = a[a.length-1]; + a.length--; + // But LOOK! SSL 3.0 doesn't care about this, bytes are arbitrary! + // if (c!=v) throw new TLSError("SSLPad:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]", TLSError.bad_record_mac); + } + a.length--; + + } + public function setBlockSize(bs:uint):void { + blockSize = bs; + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as new file mode 100644 index 00000000..590f0dfe --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as @@ -0,0 +1,60 @@ +/** + * SimpleIVMode + * + * A convenience class that automatically places the IV + * at the beginning of the encrypted stream, so it doesn't have to + * be handled explicitely. + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric +{ + import flash.utils.ByteArray; + import com.hurlant.util.Memory; + + public class SimpleIVMode implements IMode, ICipher + { + protected var mode:IVMode; + protected var cipher:ICipher; + + public function SimpleIVMode(mode:IVMode) { + this.mode = mode; + cipher = mode as ICipher; + } + + public function getBlockSize():uint { + return mode.getBlockSize(); + } + + public function dispose():void { + mode.dispose(); + mode = null; + cipher = null; + Memory.gc(); + } + + public function encrypt(src:ByteArray):void { + cipher.encrypt(src); + var tmp:ByteArray = new ByteArray; + tmp.writeBytes(mode.IV); + tmp.writeBytes(src); + src.position=0; + src.writeBytes(tmp); + } + + public function decrypt(src:ByteArray):void { + var tmp:ByteArray = new ByteArray; + tmp.writeBytes(src, 0, getBlockSize()); + mode.IV = tmp; + tmp = new ByteArray; + tmp.writeBytes(src, getBlockSize()); + cipher.decrypt(tmp); + src.length=0; + src.writeBytes(tmp); + } + public function toString():String { + return "simple-"+cipher.toString(); + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as new file mode 100644 index 00000000..f3b6182c --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as @@ -0,0 +1,42 @@ +/** + * TLSPad + * + * A padding implementation used by TLS + * Copyright (c) 2007 Henri Torgemane + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric { + import flash.utils.ByteArray; + import com.hurlant.util.Hex; + import com.hurlant.crypto.tls.TLSError; + + public class TLSPad implements IPad { + private var blockSize:uint; + + public function TLSPad(blockSize:uint=0) { + this.blockSize = blockSize; + } + public function pad(a:ByteArray):void { + var c:uint = blockSize - (a.length+1)%blockSize; + for (var i:uint=0;i<=c;i++) { + a[a.length] = c; + } + } + public function unpad(a:ByteArray):void { + var c:uint = a.length%blockSize; + if (c!=0) throw new TLSError("TLSPad::unpad: ByteArray.length isn't a multiple of the blockSize", TLSError.bad_record_mac); + c = a[a.length-1]; + for (var i:uint=c;i>0;i--) { + var v:uint = a[a.length-1]; + a.length--; + if (c!=v) throw new TLSError("TLSPad:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]", TLSError.bad_record_mac); + } + a.length--; + // mostly ripped off from PKCS5.as, but with subtle differences + } + public function setBlockSize(bs:uint):void { + blockSize = bs; + } + } +} \ No newline at end of file diff --git a/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as new file mode 100644 index 00000000..1e750117 --- /dev/null +++ b/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as @@ -0,0 +1,88 @@ +/** + * TripleDESKey + * + * An Actionscript 3 implementation of Triple DES + * Copyright (c) 2007 Henri Torgemane + * + * Derived from: + * The Bouncy Castle Crypto package, + * Copyright (c) 2000-2004 The Legion Of The Bouncy Castle + * (http://www.bouncycastle.org) + * + * See LICENSE.txt for full license information. + */ +package com.hurlant.crypto.symmetric +{ + import flash.utils.ByteArray; + import com.hurlant.util.Memory; + import com.hurlant.util.Hex; + + public class TripleDESKey extends DESKey + { + protected var encKey2:Array; + protected var encKey3:Array; + protected var decKey2:Array; + protected var decKey3:Array; + + /** + * This supports 2TDES and 3TDES. + * If the key passed is 128 bits, 2TDES is used. + * If the key has 192 bits, 3TDES is used. + * Other key lengths give "undefined" results. + */ + public function TripleDESKey(key:ByteArray) + { + super(key); + encKey2 = generateWorkingKey(false, key, 8); + decKey2 = generateWorkingKey(true, key, 8); + if (key.length>16) { + encKey3 = generateWorkingKey(true, key, 16); + decKey3 = generateWorkingKey(false, key, 16); + } else { + encKey3 = encKey; + decKey3 = decKey; + } + } + + public override function dispose():void + { + super.dispose(); + var i:uint = 0; + if (encKey2!=null) { + for (i=0;i> 5)) + v1) ^ (sum + k[sum & 3]); + sum += delta; + v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); + } + block.position-=8; + block.writeUnsignedInt(v0); + block.writeUnsignedInt(v1); + } + + public function decrypt(block:ByteArray, index:uint=0):void { + block.position = index; + var v0:uint = block.readUnsignedInt(); + var v1:uint = block.readUnsignedInt(); + var i:uint; + var delta:uint = 0x9E3779B9; + var sum:uint = delta*NUM_ROUNDS; + for (i=0; i> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); + sum -= delta; + v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); + } + block.position-=8; + block.writeUnsignedInt(v0); + block.writeUnsignedInt(v1); + } + + public function dispose():void { + //private var k:Array; + var r:Random = new Random; + for (var i:uint=0;i

+ + + + +
+ diff --git a/lib/vendor/web-socket-js/swfobject.js b/lib/vendor/web-socket-js/swfobject.js new file mode 100644 index 00000000..8eafe9dd --- /dev/null +++ b/lib/vendor/web-socket-js/swfobject.js @@ -0,0 +1,4 @@ +/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab +// License: New BSD License +// Reference: http://dev.w3.org/html5/websockets/ +// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol + +(function() { + + if (window.WebSocket) return; + + var console = window.console; + if (!console || !console.log || !console.error) { + console = {log: function(){ }, error: function(){ }}; + } + + if (!swfobject.hasFlashPlayerVersion("9.0.0")) { + console.error("Flash Player is not installed."); + return; + } + if (location.protocol == "file:") { + console.error( + "WARNING: web-socket-js doesn't work in file:///... URL " + + "unless you set Flash Security Settings properly. " + + "Open the page via Web server i.e. http://..."); + } + + WebSocket = function(url, protocol, proxyHost, proxyPort, headers) { + var self = this; + self.readyState = WebSocket.CONNECTING; + self.bufferedAmount = 0; + // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc. + // Otherwise, when onopen fires immediately, onopen is called before it is set. + setTimeout(function() { + WebSocket.__addTask(function() { + self.__createFlash(url, protocol, proxyHost, proxyPort, headers); + }); + }, 0); + }; + + WebSocket.prototype.__createFlash = function(url, protocol, proxyHost, proxyPort, headers) { + var self = this; + self.__flash = + WebSocket.__flash.create(url, protocol, proxyHost || null, proxyPort || 0, headers || null); + self.__flash.addEventListener("event", function(fe) { + // Uses setTimeout() to workaround the error: + // > You are trying to call recursively into the Flash Player which is not allowed. + setTimeout(function() { self.__handleEvents(); }, 0); + }); + //console.log("[WebSocket] Flash object is ready"); + }; + + WebSocket.prototype.send = function(data) { + if (!this.__flash || this.readyState == WebSocket.CONNECTING) { + throw "INVALID_STATE_ERR: Web Socket connection has not been established"; + } + // We use encodeURIComponent() here, because FABridge doesn't work if + // the argument includes some characters. We don't use escape() here + // because of this: + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions + // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't + // preserve all Unicode characters either e.g. "\uffff" in Firefox. + var result = this.__flash.send(encodeURIComponent(data)); + if (result < 0) { // success + return true; + } else { + this.bufferedAmount += result; + return false; + } + }; + + WebSocket.prototype.close = function() { + var self = this; + if (!self.__flash) return; + if (self.readyState == WebSocket.CLOSED || self.readyState == WebSocket.CLOSING) return; + self.__flash.close(); + // Sets/calls them manually here because Flash WebSocketConnection.close cannot fire events + // which causes weird error: + // > You are trying to call recursively into the Flash Player which is not allowed. + self.readyState = WebSocket.CLOSED; + if (self.__timer) clearInterval(self.__timer); + if (self.onclose) { + // Make it asynchronous so that it looks more like an actual + // close event + setTimeout(self.onclose, 0); + } + }; + + /** + * Implementation of {@link
DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture !NB Not implemented yet + * @return void + */ + WebSocket.prototype.addEventListener = function(type, listener, useCapture) { + if (!('__events' in this)) { + this.__events = {}; + } + if (!(type in this.__events)) { + this.__events[type] = []; + if ('function' == typeof this['on' + type]) { + this.__events[type].defaultHandler = this['on' + type]; + this['on' + type] = this.__createEventHandler(this, type); + } + } + this.__events[type].push(listener); + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {string} type + * @param {function} listener + * @param {boolean} useCapture NB! Not implemented yet + * @return void + */ + WebSocket.prototype.removeEventListener = function(type, listener, useCapture) { + if (!('__events' in this)) { + this.__events = {}; + } + if (!(type in this.__events)) return; + for (var i = this.__events.length; i > -1; --i) { + if (listener === this.__events[type][i]) { + this.__events[type].splice(i, 1); + break; + } + } + }; + + /** + * Implementation of {@link DOM 2 EventTarget Interface} + * + * @param {WebSocketEvent} event + * @return void + */ + WebSocket.prototype.dispatchEvent = function(event) { + if (!('__events' in this)) throw 'UNSPECIFIED_EVENT_TYPE_ERR'; + if (!(event.type in this.__events)) throw 'UNSPECIFIED_EVENT_TYPE_ERR'; + + for (var i = 0, l = this.__events[event.type].length; i < l; ++ i) { + this.__events[event.type][i](event); + if (event.cancelBubble) break; + } + + if (false !== event.returnValue && + 'function' == typeof this.__events[event.type].defaultHandler) + { + this.__events[event.type].defaultHandler(event); + } + }; + + WebSocket.prototype.__handleEvents = function() { + // Gets events using receiveEvents() instead of getting it from event object + // of Flash event. This is to make sure to keep message order. + // It seems sometimes Flash events don't arrive in the same order as they are sent. + var events = this.__flash.receiveEvents(); + for (var i = 0; i < events.length; i++) { + try { + var event = events[i]; + if ("readyState" in event) { + this.readyState = event.readyState; + } + if (event.type == "open") { + + if (this.__timer) clearInterval(this.__timer); + if (window.opera) { + // Workaround for weird behavior of Opera which sometimes drops events. + this.__timer = setInterval(function () { + this.__handleEvents(); + }, 500); + } + if (this.onopen) this.onopen(); + + } else if (event.type == "close") { + + if (this.__timer) clearInterval(this.__timer); + if (this.onclose) this.onclose(); + + } else if (event.type == "message") { + + if (this.onmessage) { + var data = decodeURIComponent(event.data); + var e; + if (window.MessageEvent && !window.opera) { + e = document.createEvent("MessageEvent"); + e.initMessageEvent("message", false, false, data, null, null, window, null); + } else { + // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes. + e = {data: data}; + } + this.onmessage(e); + } + + } else if (event.type == "error") { + + if (this.__timer) clearInterval(this.__timer); + if (this.onerror) this.onerror(); + + } else { + throw "unknown event type: " + event.type; + } + } catch (e) { + console.error(e.toString()); + } + } + }; + + /** + * @param {object} object + * @param {string} type + */ + WebSocket.prototype.__createEventHandler = function(object, type) { + return function(data) { + var event = new WebSocketEvent(); + event.initEvent(type, true, true); + event.target = event.currentTarget = object; + for (var key in data) { + event[key] = data[key]; + } + object.dispatchEvent(event, arguments); + }; + }; + + /** + * Basic implementation of {@link DOM 2 EventInterface} + * + * @class + * @constructor + */ + function WebSocketEvent(){} + + /** + * + * @type boolean + */ + WebSocketEvent.prototype.cancelable = true; + + /** + * + * @type boolean + */ + WebSocketEvent.prototype.cancelBubble = false; + + /** + * + * @return void + */ + WebSocketEvent.prototype.preventDefault = function() { + if (this.cancelable) { + this.returnValue = false; + } + }; + + /** + * + * @return void + */ + WebSocketEvent.prototype.stopPropagation = function() { + this.cancelBubble = true; + }; + + /** + * + * @param {string} eventTypeArg + * @param {boolean} canBubbleArg + * @param {boolean} cancelableArg + * @return void + */ + WebSocketEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) { + this.type = eventTypeArg; + this.cancelable = cancelableArg; + this.timeStamp = new Date(); + }; + + + WebSocket.CONNECTING = 0; + WebSocket.OPEN = 1; + WebSocket.CLOSING = 2; + WebSocket.CLOSED = 3; + + WebSocket.__tasks = []; + + WebSocket.loadFlashPolicyFile = function(url) { + WebSocket.__addTask(function() { + WebSocket.__flash.loadManualPolicyFile(url); + }); + } + + WebSocket.__initialize = function() { + if (WebSocket.__swfLocation) { + // For backword compatibility. + window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation; + } + if (!window.WEB_SOCKET_SWF_LOCATION) { + console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "webSocketContainer"; + // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents + // Flash from loading at least in IE. So we move it out of the screen at (-100, -100). + // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash + // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is + // the best we can do as far as we know now. + container.style.position = "absolute"; + if (WebSocket.__isFlashLite()) { + container.style.left = "0px"; + container.style.top = "0px"; + } else { + container.style.left = "-100px"; + container.style.top = "-100px"; + } + var holder = document.createElement("div"); + holder.id = "webSocketFlash"; + container.appendChild(holder); + document.body.appendChild(container); + // See this article for hasPriority: + // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html + swfobject.embedSWF( + WEB_SOCKET_SWF_LOCATION, "webSocketFlash", + "1" /* width */, "1" /* height */, "9.0.0" /* SWF version */, + null, {bridgeName: "webSocket"}, {hasPriority: true, allowScriptAccess: "always"}, null, + function(e) { + if (!e.success) console.error("[WebSocket] swfobject.embedSWF failed"); + } + ); + FABridge.addInitializationCallback("webSocket", function() { + try { + //console.log("[WebSocket] FABridge initializad"); + WebSocket.__flash = FABridge.webSocket.root(); + WebSocket.__flash.setCallerUrl(location.href); + WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG); + for (var i = 0; i < WebSocket.__tasks.length; ++i) { + WebSocket.__tasks[i](); + } + WebSocket.__tasks = []; + } catch (e) { + console.error("[WebSocket] " + e.toString()); + } + }); + }; + + WebSocket.__addTask = function(task) { + if (WebSocket.__flash) { + task(); + } else { + WebSocket.__tasks.push(task); + } + }; + + WebSocket.__isFlashLite = function() { + if (!window.navigator || !window.navigator.mimeTypes) return false; + var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"]; + if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) return false; + return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false; + }; + + // called from Flash + window.webSocketLog = function(message) { + console.log(decodeURIComponent(message)); + }; + + // called from Flash + window.webSocketError = function(message) { + console.error(decodeURIComponent(message)); + }; + + if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) { + if (window.addEventListener) { + window.addEventListener("load", WebSocket.__initialize, false); + } else { + window.attachEvent("onload", WebSocket.__initialize); + } + } + +})();