diff options
Diffstat (limited to 'java/com/google/security/wycheproof/testcases/RsaKeyTest.java')
-rw-r--r-- | java/com/google/security/wycheproof/testcases/RsaKeyTest.java | 1513 |
1 files changed, 1513 insertions, 0 deletions
diff --git a/java/com/google/security/wycheproof/testcases/RsaKeyTest.java b/java/com/google/security/wycheproof/testcases/RsaKeyTest.java new file mode 100644 index 0000000..b761dae --- /dev/null +++ b/java/com/google/security/wycheproof/testcases/RsaKeyTest.java @@ -0,0 +1,1513 @@ +/** + * @license + * Copyright 2016 Google Inc. All rights reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.security.wycheproof; + +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.interfaces.RSAPrivateCrtKey; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import junit.framework.TestCase; + +/** + * Tests RSA keys. Signatures and encryption are tested in different tests. + * + * @author bleichen@google.com (Daniel Bleichenbacher) + */ +// TODO(bleichen): +// - Add checks for bad random numbers +// - expect keys with e=1 to be rejected +// - expect keys with e=0 to be rejected +// - document stuff +// - Maybe also check encodings of private keys. +// - Test multi prime RSA +// - Tests for alternative representations: +// many libraries sort the primes as: p > q (but not all) +// some libraries compute d mod lambda(n) +// paramaters p,q,... are not really required +// - checks for bad random number generation +public class RsaKeyTest extends TestCase { + + public static final String ENCODED_PUBLIC_KEY = + "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001"; + + /** + * Encodings of the public key from ENCODED_PUBLIC_KEY with modifications. + * This list so far has just a simple purpose: it is used to check whether parsing the key + * leads to some unexpected exceptions. I.e. it should not be possible to crash an + * application with an modified public key. + */ + public static final String[] MODIFIED_PUBLIC_KEY = { + // length contains leading 0 + "3082009f300d06092a864886f70d010101050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "3081a13082000d06092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f068200092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f06092a864886f70d0101010582000003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a0300d06092a864886f70d01010105000382008d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "30819f300d06092a864886f70d010101050003818d3082008902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101050003818d30818a0282008100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02820003" + + "010001", + // wrong length + "30a0300d06092a864886f70d010101050003818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "309e300d06092a864886f70d010101050003818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819f300e06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300c06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d060a2a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06082a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101050103818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819e300d06092a864886f70d0101010500038e0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d0101010500038c0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819d300d06092a864886f70d010101050003818b308a02818100ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "30819d300d06092a864886f70d010101050003818b308802818100ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "30819d300d06092a864886f70d010101050003818b308188028200ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "30819d300d06092a864886f70d010101050003818b308188028000ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02040100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02020100" + + "01", + // uint32 overflow in length + "3085010000009f300d06092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a43085010000000d06092a864886f70d010101050003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a43012068501000000092a864886f70d010101050003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a4301206092a864886f70d0101010585010000000003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a3300d06092a864886f70d01010105000385010000008d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a2300d06092a864886f70d01010105000381903085010000008902818100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "0203010001", + "3081a2300d06092a864886f70d010101050003819030818d0285010000008100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "0203010001", + "3081a3300d06092a864886f70d010101050003819130818e02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02850100" + + "000003010001", + // uint64 overflow in length + "308901000000000000009f300d06092a864886f70d010101050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a8308901000000000000000d06092a864886f70d010101050003818d0030" + + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410" + + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4" + + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984" + + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac" + + "f9a0b351a23f0203010001", + "3081a8301606890100000000000000092a864886f70d010101050003818d0030" + + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410" + + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4" + + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984" + + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac" + + "f9a0b351a23f0203010001", + "3081a8301606092a864886f70d010101058901000000000000000003818d0030" + + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410" + + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4" + + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984" + + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac" + + "f9a0b351a23f0203010001", + "3081a7300d06092a864886f70d0101010500038901000000000000008d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a6300d06092a864886f70d01010105000381943089010000000000000089" + + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6" + + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1" + + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562" + + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0" + + "b351a23f0203010001", + "3081a6300d06092a864886f70d01010105000381943081910289010000000000" + + "00008100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6" + + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1" + + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562" + + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0" + + "b351a23f0203010001", + "3081a7300d06092a864886f70d010101050003819530819202818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02890100" + + "00000000000003010001", + // length = 2**32 - 1 + "3084ffffffff300d06092a864886f70d010101050003818d0030818902818100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "0203010001", + "3081a33084ffffffff06092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a330110684ffffffff2a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a3301106092a864886f70d0101010584ffffffff03818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a2300d06092a864886f70d01010105000384ffffffff0030818902818100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "0203010001", + "3081a1300d06092a864886f70d010101050003818f3084ffffffff02818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300d06092a864886f70d010101050003818f30818c0284ffffffff00ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0284ffff" + + "ffff010001", + // length = 2**64 - 1 + "3088ffffffffffffffff300d06092a864886f70d010101050003818d00308189" + + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6" + + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1" + + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562" + + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0" + + "b351a23f0203010001", + "3081a73088ffffffffffffffff06092a864886f70d010101050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a730150688ffffffffffffffff2a864886f70d010101050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a7301506092a864886f70d0101010588ffffffffffffffff03818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a6300d06092a864886f70d01010105000388ffffffffffffffff00308189" + + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6" + + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1" + + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562" + + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0" + + "b351a23f0203010001", + "3081a5300d06092a864886f70d01010105000381933088ffffffffffffffff02" + + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a5300d06092a864886f70d01010105000381933081900288ffffffffffff" + + "ffff00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a6300d06092a864886f70d010101050003819430819102818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0288ffff" + + "ffffffffffff010001", + // removing sequence + "", + "30819003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd" + + "9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb1" + + "67d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e" + + "043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31" + + "dad83563f3a315acf9a0b351a23f0203010001", + // appending 0's to sequence + "3081a1300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00010000", + "3081a1300f06092a864886f70d0101010500000003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "010000", + // prepending 0's to sequence + "3081a10000300d06092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f000006092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a0300d06092a864886f70d010101050003818e30818b000002818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + // appending unused 0's + "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00010000", + "3081a1300d06092a864886f70d0101010500000003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f06092a864886f70d0101010000050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a0300d06092a864886f70d010101050003818e30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "010000", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00000203" + + "010001", + // appending null value + "3081a1300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00010500", + "3081a1300f06092a864886f70d0101010500050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f060b2a864886f70d0101010500050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f06092a864886f70d0101010502050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300d06092a864886f70d010101050003818f0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00010500", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "010500", + "3081a0300d06092a864886f70d010101050003818e30818b02818300ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f05000203" + + "010001", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02050100" + + "010500", + // including garbage + "3081a4498030819f300d06092a864886f70d010101050003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a4250030819f300d06092a864886f70d010101050003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a230819f300d06092a864886f70d010101050003818d0030818902818100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "02030100010004deadbeef", + "3081a330114980300d06092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a330112500300d06092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a7300f300d06092a864886f70d01010105000004deadbeef03818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a33011260d498006092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a33011260d250006092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a73015260b06092a864886f70d0101010004deadbeef050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a3301106092a864886f70d01010125044980050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a3301106092a864886f70d01010125042500050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a7301506092a864886f70d010101250205000004deadbeef03818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a4300d06092a864886f70d0101010500238192498003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a4300d06092a864886f70d0101010500238192250003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a8300d06092a864886f70d010101050023819003818d0030818902818100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "02030100010004deadbeef", + "3081a3300d06092a864886f70d010101050003819130818e4980308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a3300d06092a864886f70d010101050003819130818e2500308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a7300d06092a864886f70d010101050003819530818c30818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "030100010004deadbeef", + "3081a3300d06092a864886f70d010101050003819130818e2281864980028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a3300d06092a864886f70d010101050003819130818e2281862500028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a7300d06092a864886f70d010101050003819530819222818402818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00" + + "04deadbeef0203010001", + "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22074980" + + "0203010001", + "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22072500" + + "0203010001", + "3081a6300d06092a864886f70d010101050003819430819102818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22050203" + + "0100010004deadbeef", + // including undefined tags + "3081a8aa00bb00cd0030819f300d06092a864886f70d010101050003818d0030" + + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410" + + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4" + + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984" + + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac" + + "f9a0b351a23f0203010001", + "3081a6aa02aabb30819f300d06092a864886f70d010101050003818d00308189" + + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6" + + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1" + + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562" + + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0" + + "b351a23f0203010001", + "3081a73015aa00bb00cd00300d06092a864886f70d010101050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a53013aa02aabb300d06092a864886f70d010101050003818d0030818902" + + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a730152611aa00bb00cd0006092a864886f70d010101050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a53013260faa02aabb06092a864886f70d010101050003818d0030818902" + + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a7301506092a864886f70d0101012508aa00bb00cd00050003818d003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a5301306092a864886f70d0101012506aa02aabb050003818d0030818902" + + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a8300d06092a864886f70d0101010500238196aa00bb00cd0003818d0030" + + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410" + + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4" + + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984" + + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac" + + "f9a0b351a23f0203010001", + "3081a6300d06092a864886f70d0101010500238194aa02aabb03818d00308189" + + "02818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6" + + "e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f1" + + "09fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562" + + "517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0" + + "b351a23f0203010001", + "3081a7300d06092a864886f70d0101010500038195308192aa00bb00cd003081" + + "8902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a5300d06092a864886f70d0101010500038193308190aa02aabb30818902" + + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a7300d06092a864886f70d010101050003819530819222818aaa00bb00cd" + + "0002818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100c" + + "b6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0" + + "f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b5" + + "62517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9" + + "a0b351a23f0203010001", + "3081a5300d06092a864886f70d0101010500038193308190228188aa02aabb02" + + "818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1" + + "d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109" + + "fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b56251" + + "7e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b3" + + "51a23f0203010001", + "3081a6300d06092a864886f70d010101050003819430819102818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f220baa00" + + "bb00cd000203010001", + "3081a4300d06092a864886f70d010101050003819230818f02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f2209aa02" + + "aabb0203010001", + // changing tag value + "2e819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "32819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "ff819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f2e0d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f320d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819fff0d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d04092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d08092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300dff092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101030003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101070003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101ff0003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101050001818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101050005818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d0101010500ff818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819e300d06092a864886f70d010101050003818c2e818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c32818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818cff818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818900818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818904818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c308189ff818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f04030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23fff030100" + + "01", + // dropping value of sequence + "3000", + "308192300003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab0220" + + "42fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b" + + "2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfa" + + "e42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa7551556" + + "3f31dad83563f3a315acf9a0b351a23f0203010001", + // using composition + "3081a430013030819e0d06092a864886f70d010101050003818d003081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a33011300106300c092a864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a33011260d06012a0608864886f70d010101050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a4300d06092a864886f70d010101050023819203010003818c3081890281" + + "8100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4" + + "edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb" + + "5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e" + + "6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351" + + "a23f0203010001", + "3081a3300d06092a864886f70d010101050003819130818e3001023081888181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a3300d06092a864886f70d010101050003819130818e2281860201000281" + + "80ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + "3081a2300d06092a864886f70d010101050003819030818d02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f22070201" + + "0102020001", + // truncate sequence + "30819e300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00", + "30819e0d06092a864886f70d010101050003818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300c06092a864886f70d0101010503818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300c092a864886f70d010101050003818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819d300d06092a864886f70d010101050003818b30818802818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100", + "30819d300d06092a864886f70d010101050003818b308188818100ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + // prepend empty sequence + "3081a13000300d06092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300f300006092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a0300d06092a864886f70d010101050003818e30818b300002818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + // append empty sequence + "3081a1300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00013000", + "3081a1300f06092a864886f70d0101010500300003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "013000", + // sequence of sequence + "3081a230819f300d06092a864886f70d010101050003818d0030818902818100" + + "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9" + + "8590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26" + + "c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6feb" + + "e1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f" + + "0203010001", + "3081a1300f300d06092a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + "3081a1300d06092a864886f70d010101050003818f30818c30818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + // truncated sequence + "300f300d06092a864886f70d0101010500", + "30819d300b06092a864886f70d01010103818d0030818902818100ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "308199300d06092a864886f70d010101050003818730818402818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f", + // repeat element in sequence + "3082012f300d06092a864886f70d010101050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "01000103818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd" + + "9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb1" + + "67d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e" + + "043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31" + + "dad83563f3a315acf9a0b351a23f0203010001", + "3081a3300d06092a864886f70d010101050003819130818e02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "010203010001", + // long form encoding of length + "3081a030810d06092a864886f70d010101050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "3081a0300e0681092a864886f70d010101050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "3081a0300e06092a864886f70d01010105810003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "30819f300d06092a864886f70d010101050003818d30818a02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02810301" + + "0001", + // removing oid + "3081943002050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab" + + "022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5ef" + + "b40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e17367" + + "9cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa755" + + "15563f31dad83563f3a315acf9a0b351a23f0203010001", + // appending 0's to oid + "3081a1300f060b2a864886f70d0101010000050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + // prepending 0's to oid + "3081a1300f060b00002a864886f70d010101050003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + // dropping value of oid + "30819630040600050003818d0030818902818100ab9014dc47d44b6d260fc1fe" + + "f9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00a" + + "c5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e1" + + "73679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240a" + + "a75515563f31dad83563f3a315acf9a0b351a23f0203010001", + // modify first byte of oid + "30819f300d06092b864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + // modify last byte of oid + "30819f300d06092a864886f70d010100050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + // truncate oid + "30819e300c06082a864886f70d0101050003818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300c0608864886f70d010101050003818d0030818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + // wrong oid + "30819b300906052b0e03021a050003818d0030818902818100ab9014dc47d44b" + + "6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c1" + + "7fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff51" + + "7cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fd" + + "fc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "30819f300d0609608648016503040201050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + // longer oid + "3081a0300e060a2a864886f70d01010101050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + // oid with modified node + "30819f300d06092a864886f70d010111050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "3081a33011060d2a864886f70d01018880808001050003818d00308189028181" + + "00ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4ed" + + "c98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a" + + "26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6f" + + "ebe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a2" + + "3f0203010001", + // large integer in oid + "3081a8301606122a864886f70d010182808080808080808001050003818d0030" + + "818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c5410" + + "0cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4" + + "d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984" + + "b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315ac" + + "f9a0b351a23f0203010001", + // oid with invalid node + "3081a0300e060a2a864886f70d010101e0050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "3081a0300e060a2a80864886f70d010101050003818d0030818902818100ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + // appending 0's to null + "3081a1300f06092a864886f70d0101010502000003818d0030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + // appending 0's to bit string + "3081a1300d06092a864886f70d010101050003818f0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00010000", + // prepending 0's to bit string + "3081a1300d06092a864886f70d010101050003818f00000030818902818100ab" + + "9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc985" + + "90467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2" + + "f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1" + + "f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02" + + "03010001", + // modify first byte of bit string + "30819f300d06092a864886f70d010101050003818d0130818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + // modify last byte of bit string + "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0000", + // truncate bit string + "30819e300d06092a864886f70d010101050003818c0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "00", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + // removing integer + "3018300d06092a864886f70d0101010500030730050203010001", + // appending 0's to integer + "3081a0300d06092a864886f70d010101050003818e30818b02818300ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f00000203" + + "010001", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02050100" + + "010000", + // prepending 0's to integer + "3081a0300d06092a864886f70d010101050003818e30818b028183000000ab90" + + "14dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590" + + "467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8" + + "823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f7" + + "2295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203" + + "010001", + "3081a0300d06092a864886f70d010101050003818e30818b02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02050000" + + "010001", + // dropping value of integer + "301a300d06092a864886f70d01010105000309300702000203010001", + "30819b300d06092a864886f70d010101050003818930818602818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0200", + // modify first byte of integer + "30819e300d06092a864886f70d010101050003818c30818902818101ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030000" + + "01", + // modify last byte of integer + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23e02030100" + + "01", + "30819e300d06092a864886f70d010101050003818c30818902818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02030100" + + "00", + // truncate integer + "30819d300d06092a864886f70d010101050003818b30818802818000ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a20203010001", + "30819d300d06092a864886f70d010101050003818b308188028180ab9014dc47" + + "d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d05" + + "02c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236" + + "ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295db" + + "c3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", + "30819d300d06092a864886f70d010101050003818b30818802818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02020100", + "30819d300d06092a864886f70d010101050003818b30818802818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f02020001", + // leading ff in integer + "30819f300d06092a864886f70d010101050003818d30818a028182ff00ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020301" + + "0001", + "30819f300d06092a864886f70d010101050003818d30818a02818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0204ff01" + + "0001", + // infinity + "301b300d06092a864886f70d0101010500030a30080901800203010001", + "30819c300d06092a864886f70d010101050003818a30818702818100ab9014dc" + + "47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d" + + "0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f88232" + + "36ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295" + + "dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f090180", + // n=0 + "301c300d06092a864886f70d0101010500030b0030080201000203010001", + // negative n + "30819f300d06092a864886f70d010101050003818d00308189028181ff546feb" + + "23b82bb492d9f03e010654fddfbd026a99162849f3abeff3491e2b12367a6fb9" + + "82fafd3e8031962ff53a104bf4d34e98275bb546c28c3b2f0ef604a5d93d077d" + + "cdc900ae8307bbed1e8c9863051bd1fbc490137e06267b4a9dae8190141e08dd" + + "6a243c0203e62cdbf558aaeaa9c0ce2527ca9c0c5cea53065f4cae5dc1020301" + + "0001", + // e=0 + "30819d300d06092a864886f70d010101050003818b0030818702818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020100", + // e=1 + "30819d300d06092a864886f70d010101050003818b0030818702818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020101", + // e=2 + "30819d300d06092a864886f70d010101050003818b0030818702818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f020102", + // negative e + "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014" + + "dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc9859046" + + "7d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f882" + + "3236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f722" + + "95dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203fe" + + "ffff", + }; + + private void checkPrivateCrtKey(RSAPrivateCrtKey key, int expectedKeySize) throws Exception { + BigInteger p = key.getPrimeP(); + BigInteger q = key.getPrimeQ(); + BigInteger n = key.getModulus(); + BigInteger e = key.getPublicExponent(); + BigInteger d = key.getPrivateExponent(); + BigInteger dp = key.getPrimeExponentP(); + BigInteger dq = key.getPrimeExponentQ(); + BigInteger crtCoeff = key.getCrtCoefficient(); + + // Simple test that (n,d,e) is a valid RSA key. + assertEquals(n, p.multiply(q)); + assertEquals(expectedKeySize, n.bitLength()); + int certainty = 80; + assertTrue(p.isProbablePrime(certainty)); + assertTrue(q.isProbablePrime(certainty)); + // Very simple checks for weak random number generators. + RandomUtil.checkPrime(p); + RandomUtil.checkPrime(q); + assertTrue(d.bitLength() > expectedKeySize / 2); + // TODO(bleichen): Keys that are very imbalanced can be broken with elliptic curve factoring. + // Add other checks. E.g. for the size of dp and dq + assertTrue(p.bitLength() > 256); + assertTrue(q.bitLength() > 256); + BigInteger p1 = p.subtract(BigInteger.ONE); + BigInteger q1 = q.subtract(BigInteger.ONE); + BigInteger phi = p1.multiply(q1); + BigInteger order = phi.divide(p1.gcd(q1)); // maximal order of elements + assertEquals(BigInteger.ONE, d.multiply(e).mod(order)); + assertEquals(d.mod(p1), dp.mod(p1)); + assertEquals(d.mod(q1), dq.mod(q1)); + assertEquals(q.multiply(crtCoeff).mod(p), BigInteger.ONE); + } + + private void checkPublicKey(RSAPublicKey pub, RSAPrivateKey priv) { + assertEquals(pub.getModulus(), priv.getModulus()); + BigInteger e = pub.getPublicExponent(); + // Checks that e > 1. [CVE-1999-1444] + assertEquals(e.compareTo(BigInteger.ONE), 1); + } + + private void checkKeyPair(KeyPair keypair, int keySizeInBits) throws Exception { + RSAPublicKey pub = (RSAPublicKey) keypair.getPublic(); + RSAPrivateKey priv = (RSAPrivateKey) keypair.getPrivate(); + if (priv instanceof RSAPrivateCrtKey) { + checkPrivateCrtKey((RSAPrivateCrtKey) priv, keySizeInBits); + } else { + // Using a CRT key leads to 6-7 times better performance than not using the CRT. + // Such a perfomance loss makes a library almost useless. Thus we consider this + // a bug. + fail("Expecting an RSAPrivateCrtKey instead of " + priv.getClass().getName()); + } + checkPublicKey(pub, priv); + } + + public void testKeyGenerationSize(int keySizeInBits) throws Exception { + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(keySizeInBits); + KeyPair keypair = keyGen.genKeyPair(); + checkKeyPair(keypair, keySizeInBits); + } + + public void testKeyGeneration() throws Exception { + testKeyGenerationSize(1024); + testKeyGenerationSize(2048); + } + + /** + * Checks whether decoding and again encoding an RSA public key results + * in the same encoding. + * This is a regression test. Failing this test implies that the encoding has changed. + * Such a failure does not need to be a bug, since several encoding for the same key are + * possible. + */ + public void testEncodeDecodePublic() throws Exception { + KeyFactory kf = KeyFactory.getInstance("RSA"); + byte[] encoded = TestUtil.hexToBytes(ENCODED_PUBLIC_KEY); + X509EncodedKeySpec spec = new X509EncodedKeySpec(encoded); + RSAPublicKey pub = (RSAPublicKey) kf.generatePublic(spec); + assertEquals("The test assumes that the public key is in X.509 format", + "X.509", pub.getFormat()); + assertEquals(ENCODED_PUBLIC_KEY, TestUtil.bytesToHex(pub.getEncoded())); + } + + /** + * Parses a list of modified encodings of an RSA public key. + * Expects that any modification either results in an InvalidKeySpecException + * or an altered PublicKey. + * This test has mostly "defense in depth" characteristic, since applications should + * never accept unauthenticated public keys. + */ + public void testModifiedPublicKeyDecoding() throws Exception { + KeyFactory kf = KeyFactory.getInstance("RSA"); + int cnt = 0; + for (String encoded : MODIFIED_PUBLIC_KEY) { + X509EncodedKeySpec spec = new X509EncodedKeySpec(TestUtil.hexToBytes(encoded)); + try { + RSAPublicKey unusedKey = (RSAPublicKey) kf.generatePublic(spec); + // TODO(bleichen): check the keys that are accepted. + // To decide whether a key should have been rejected or not the test vectors must be + // divided into several categories: + // - keys that use BER encoding: these are OK + // - keys that include additional fields or garbage: might be OK + // - keys where the modification does not change the values: are probably OK + // - keys with missing parameters: should be rejected + // - keys with impossible values (negative n, negative e): should be rejected. + } catch (InvalidKeySpecException ex) { + // expected + } catch (Exception ex) { + System.out.println("generatePublic throws:" + ex.getMessage() + " for " + encoded); + cnt++; + } + } + assertEquals(0, cnt); + } + + // TODO(bleichen): This test is only needed as long as there are open issues. + +} |