157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom/*
257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * Copyright (C) 2010 The Android Open Source Project
357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom *
457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * you may not use this file except in compliance with the License.
657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * You may obtain a copy of the License at
757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom *
857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom *
1057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * Unless required by applicable law or agreed to in writing, software
1157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
1257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * See the License for the specific language governing permissions and
1457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom * limitations under the License.
1557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom */
1657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
1757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrompackage libcore.java.security;
1857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
1918d5ad8501ee2091ffe67da23376323fa734617aKenny Rootimport static org.mockito.Mockito.doReturn;
2018d5ad8501ee2091ffe67da23376323fa734617aKenny Rootimport static org.mockito.Mockito.mock;
2118d5ad8501ee2091ffe67da23376323fa734617aKenny Rootimport static org.mockito.Mockito.spy;
2218d5ad8501ee2091ffe67da23376323fa734617aKenny Rootimport static org.mockito.Mockito.verify;
2318d5ad8501ee2091ffe67da23376323fa734617aKenny Root
24b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Rootimport java.lang.reflect.Method;
255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.math.BigInteger;
26b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Rootimport java.security.AlgorithmParameters;
275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.InvalidKeyException;
28c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Rootimport java.security.InvalidParameterException;
293b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstromimport java.security.KeyFactory;
3057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.security.KeyPair;
3157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.security.KeyPairGenerator;
325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.PrivateKey;
3357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.security.Provider;
343b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstromimport java.security.PublicKey;
3557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.security.Security;
363b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstromimport java.security.Signature;
377501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Rootimport java.security.SignatureException;
38b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Rootimport java.security.SignatureSpi;
395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.spec.DSAPrivateKeySpec;
405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.spec.DSAPublicKeySpec;
41740ce7567788129602de81396af56c03b838c157Adam Langleyimport java.security.spec.ECFieldFp;
42740ce7567788129602de81396af56c03b838c157Adam Langleyimport java.security.spec.ECParameterSpec;
43740ce7567788129602de81396af56c03b838c157Adam Langleyimport java.security.spec.ECPoint;
44740ce7567788129602de81396af56c03b838c157Adam Langleyimport java.security.spec.ECPublicKeySpec;
45740ce7567788129602de81396af56c03b838c157Adam Langleyimport java.security.spec.EllipticCurve;
46746a236e2be5dee62c482e27f4c682496d071d8bKenny Rootimport java.security.spec.InvalidKeySpecException;
470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubinimport java.security.spec.InvalidParameterSpecException;
480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubinimport java.security.spec.MGF1ParameterSpec;
490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubinimport java.security.spec.PSSParameterSpec;
505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.spec.RSAPrivateCrtKeySpec;
515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.spec.RSAPrivateKeySpec;
525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.security.spec.RSAPublicKeySpec;
533b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstromimport java.security.spec.X509EncodedKeySpec;
54b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Rootimport java.util.ArrayList;
555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Rootimport java.util.Arrays;
56b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Rootimport java.util.Collections;
5757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.util.HashMap;
58b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Rootimport java.util.List;
5928c28002abcb486abc808b3a05ba856d16440af8Alex Klyubinimport java.util.Locale;
6057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.util.Map;
6157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport java.util.Set;
6278f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Rootimport java.util.concurrent.Callable;
6378f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Rootimport java.util.concurrent.CountDownLatch;
6478f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Rootimport java.util.concurrent.ExecutorService;
6578f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Rootimport java.util.concurrent.Executors;
6678f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Rootimport java.util.concurrent.TimeUnit;
6757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstromimport junit.framework.TestCase;
6857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
6957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrompublic class SignatureTest extends TestCase {
70c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    private static abstract class MockProvider extends Provider {
71c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        public MockProvider(String name) {
72c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            super(name, 1.0, "Mock provider used for testing");
73c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            setup();
74c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
75c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
76c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        public abstract void setup();
77c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    }
78c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
79c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    public void testSignature_getInstance_SuppliedProviderNotRegistered_Success() throws Exception {
80c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Provider mockProvider = new MockProvider("MockProvider") {
81c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            public void setup() {
82c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                put("Signature.FOO", MockSignatureSpi.AllKeyTypes.class.getName());
83c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
84c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        };
85c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
86c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        {
87c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            Signature s = Signature.getInstance("FOO", mockProvider);
88c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            s.initSign(new MockPrivateKey());
89c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            assertEquals(mockProvider, s.getProvider());
90c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
91c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    }
92c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
9320e310656f03cd83355eae5cd25237f71b80341aKenny Root    public void testSignature_getInstance_DoesNotSupportKeyClass_Success() throws Exception {
9420e310656f03cd83355eae5cd25237f71b80341aKenny Root        Provider mockProvider = new MockProvider("MockProvider") {
9520e310656f03cd83355eae5cd25237f71b80341aKenny Root            public void setup() {
9620e310656f03cd83355eae5cd25237f71b80341aKenny Root                put("Signature.FOO", MockSignatureSpi.AllKeyTypes.class.getName());
9720e310656f03cd83355eae5cd25237f71b80341aKenny Root                put("Signature.FOO SupportedKeyClasses", "None");
9820e310656f03cd83355eae5cd25237f71b80341aKenny Root            }
9920e310656f03cd83355eae5cd25237f71b80341aKenny Root        };
10020e310656f03cd83355eae5cd25237f71b80341aKenny Root
10120e310656f03cd83355eae5cd25237f71b80341aKenny Root        Security.addProvider(mockProvider);
10220e310656f03cd83355eae5cd25237f71b80341aKenny Root        try {
10320e310656f03cd83355eae5cd25237f71b80341aKenny Root            Signature s = Signature.getInstance("FOO", mockProvider);
10420e310656f03cd83355eae5cd25237f71b80341aKenny Root            s.initSign(new MockPrivateKey());
10520e310656f03cd83355eae5cd25237f71b80341aKenny Root            assertEquals(mockProvider, s.getProvider());
10620e310656f03cd83355eae5cd25237f71b80341aKenny Root        } finally {
10720e310656f03cd83355eae5cd25237f71b80341aKenny Root            Security.removeProvider(mockProvider.getName());
10820e310656f03cd83355eae5cd25237f71b80341aKenny Root        }
10920e310656f03cd83355eae5cd25237f71b80341aKenny Root    }
11020e310656f03cd83355eae5cd25237f71b80341aKenny Root
111e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro    /**
112e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro     * Several exceptions can be thrown by init. Check that in this case we throw the right one,
113e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro     * as the error could fall under the umbrella of other exceptions.
114e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro     * http://b/18987633
115e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro     */
116e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro    public void testSignature_init_DoesNotSupportKeyClass_throwsInvalidKeyException()
117e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            throws Exception {
118e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        Provider mockProvider = new MockProvider("MockProvider") {
119e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            public void setup() {
120e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro                put("Signature.FOO", MockSignatureSpi.AllKeyTypes.class.getName());
121e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro                put("Signature.FOO SupportedKeyClasses", "None");
122e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            }
123e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        };
124e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro
125e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        Security.addProvider(mockProvider);
126e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        try {
127e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            Signature s = Signature.getInstance("FOO");
128e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            s.initSign(new MockPrivateKey());
129e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            fail("Expected InvalidKeyException");
130e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        } catch (InvalidKeyException expected) {
131e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        } finally {
132e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro            Security.removeProvider(mockProvider.getName());
133e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro        }
134e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro    }
135e38b83dd96281d178b01476b67d354655bf2de62Sergio Giro
136c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    public void testSignature_getInstance_OnlyUsesSpecifiedProvider_SameNameAndClass_Success()
137c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throws Exception {
138c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Provider mockProvider = new MockProvider("MockProvider") {
139c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            public void setup() {
140c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                put("Signature.FOO", MockSignatureSpi.AllKeyTypes.class.getName());
141c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
142c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        };
143c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
144c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Security.addProvider(mockProvider);
145c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        try {
146c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            {
147c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                Provider mockProvider2 = new MockProvider("MockProvider") {
148c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    public void setup() {
149c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                        put("Signature.FOO", MockSignatureSpi.AllKeyTypes.class.getName());
150c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    }
151c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                };
152c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                Signature s = Signature.getInstance("FOO", mockProvider2);
153c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                assertEquals(mockProvider2, s.getProvider());
154c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
155c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        } finally {
156c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            Security.removeProvider(mockProvider.getName());
157c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
158c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    }
159c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
160c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    public void testSignature_getInstance_DelayedInitialization_KeyType() throws Exception {
161c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Provider mockProviderSpecific = new MockProvider("MockProviderSpecific") {
162c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            public void setup() {
163c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                put("Signature.FOO", MockSignatureSpi.SpecificKeyTypes.class.getName());
164beff0f1375b635c692d48190aa69a06986b5111fKenny Root                put("Signature.FOO SupportedKeyClasses", MockPrivateKey.class.getName());
165beff0f1375b635c692d48190aa69a06986b5111fKenny Root            }
166beff0f1375b635c692d48190aa69a06986b5111fKenny Root        };
167beff0f1375b635c692d48190aa69a06986b5111fKenny Root        Provider mockProviderSpecific2 = new MockProvider("MockProviderSpecific2") {
168beff0f1375b635c692d48190aa69a06986b5111fKenny Root            public void setup() {
169beff0f1375b635c692d48190aa69a06986b5111fKenny Root                put("Signature.FOO", MockSignatureSpi.SpecificKeyTypes2.class.getName());
170beff0f1375b635c692d48190aa69a06986b5111fKenny Root                put("Signature.FOO SupportedKeyClasses", MockPrivateKey2.class.getName());
171c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
172c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        };
173c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Provider mockProviderAll = new MockProvider("MockProviderAll") {
174c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            public void setup() {
175c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                put("Signature.FOO", MockSignatureSpi.AllKeyTypes.class.getName());
176c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
177c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        };
178c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
179c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Security.addProvider(mockProviderSpecific);
180beff0f1375b635c692d48190aa69a06986b5111fKenny Root        Security.addProvider(mockProviderSpecific2);
181c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Security.addProvider(mockProviderAll);
182c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
183c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        try {
184c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            {
185c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                Signature s = Signature.getInstance("FOO");
186c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                s.initSign(new MockPrivateKey());
187c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                assertEquals(mockProviderSpecific, s.getProvider());
188beff0f1375b635c692d48190aa69a06986b5111fKenny Root
189beff0f1375b635c692d48190aa69a06986b5111fKenny Root                try {
190beff0f1375b635c692d48190aa69a06986b5111fKenny Root                    s.initSign(new MockPrivateKey2());
191beff0f1375b635c692d48190aa69a06986b5111fKenny Root                    assertEquals(mockProviderSpecific2, s.getProvider());
192beff0f1375b635c692d48190aa69a06986b5111fKenny Root                    if (StandardNames.IS_RI) {
193beff0f1375b635c692d48190aa69a06986b5111fKenny Root                        fail("RI was broken before; fix tests now that it works!");
194beff0f1375b635c692d48190aa69a06986b5111fKenny Root                    }
195beff0f1375b635c692d48190aa69a06986b5111fKenny Root                } catch (InvalidKeyException e) {
196beff0f1375b635c692d48190aa69a06986b5111fKenny Root                    if (!StandardNames.IS_RI) {
197beff0f1375b635c692d48190aa69a06986b5111fKenny Root                        fail("Non-RI should select the right provider");
198beff0f1375b635c692d48190aa69a06986b5111fKenny Root                    }
199beff0f1375b635c692d48190aa69a06986b5111fKenny Root                }
200c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
201c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
202c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            {
203c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                Signature s = Signature.getInstance("FOO");
204c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                s.initSign(new PrivateKey() {
205c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    @Override
206c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    public String getAlgorithm() {
207c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                        throw new UnsupportedOperationException("not implemented");
208c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    }
209c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
210c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    @Override
211c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    public String getFormat() {
212c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                        throw new UnsupportedOperationException("not implemented");
213c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    }
214c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
215c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    @Override
216c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    public byte[] getEncoded() {
217c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                        throw new UnsupportedOperationException("not implemented");
218c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                    }
219c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                });
220c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                assertEquals(mockProviderAll, s.getProvider());
221c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
222c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
223c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            {
224c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                Signature s = Signature.getInstance("FOO");
225c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                assertEquals(mockProviderSpecific, s.getProvider());
226c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
227c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        } finally {
228c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            Security.removeProvider(mockProviderSpecific.getName());
229beff0f1375b635c692d48190aa69a06986b5111fKenny Root            Security.removeProvider(mockProviderSpecific2.getName());
230c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            Security.removeProvider(mockProviderAll.getName());
231c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
232c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    }
233c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
234c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    private static class MySignature extends Signature {
235c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected MySignature(String algorithm) {
236c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            super(algorithm);
237c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
238c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
239c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
240c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected void engineInitVerify(PublicKey publicKey) throws InvalidKeyException {
241c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
242c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
243c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
244c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
245c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected void engineInitSign(PrivateKey privateKey) throws InvalidKeyException {
246c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
247c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
248c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
249c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
250c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected void engineUpdate(byte b) throws SignatureException {
251c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
252c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
253c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
254c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
255c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected void engineUpdate(byte[] b, int off, int len) throws SignatureException {
256c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
257c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
258c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
259c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
260c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected byte[] engineSign() throws SignatureException {
261c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
262c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
263c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
264c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
265c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected boolean engineVerify(byte[] sigBytes) throws SignatureException {
266c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
267c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
268c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
269c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
270c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected void engineSetParameter(String param, Object value) {
271c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
272c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
273c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
274c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        @Override
275c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        protected Object engineGetParameter(String param) throws InvalidParameterException {
276c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            throw new UnsupportedOperationException();
277c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
278c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    }
279c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
280c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    public void testSignature_getProvider_Subclass() throws Exception {
281c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Provider mockProviderNonSpi = new MockProvider("MockProviderNonSpi") {
282c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            public void setup() {
283c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root                put("Signature.FOO", MySignature.class.getName());
284c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            }
285c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        };
286c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
287c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        Security.addProvider(mockProviderNonSpi);
288c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root
289c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        try {
290c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            Signature s = new MySignature("FOO");
291c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            assertNull(s.getProvider());
292c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        } finally {
293c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root            Security.removeProvider(mockProviderNonSpi.getName());
294c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root        }
295c539bff0ece3ed8a7546336cdf3b205a518a2a26Kenny Root    }
29657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
29757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    // 20 bytes for DSA
29857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    private final byte[] DATA = new byte[20];
29957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
30057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    public void test_getInstance() throws Exception {
30157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        Provider[] providers = Security.getProviders();
30257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        for (Provider provider : providers) {
303f1df19634a4bf146590e4c6f310465cad175cbc2Alex Klyubin            // Do not test AndroidKeyStore's Signature. It needs an AndroidKeyStore-specific key.
304f1df19634a4bf146590e4c6f310465cad175cbc2Alex Klyubin            // It's OKish not to test AndroidKeyStore's Signature here because it's tested
305f1df19634a4bf146590e4c6f310465cad175cbc2Alex Klyubin            // by cts/tests/test/keystore.
306f1df19634a4bf146590e4c6f310465cad175cbc2Alex Klyubin            if (provider.getName().startsWith("AndroidKeyStore")) {
307f1df19634a4bf146590e4c6f310465cad175cbc2Alex Klyubin                continue;
308f1df19634a4bf146590e4c6f310465cad175cbc2Alex Klyubin            }
30957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            Set<Provider.Service> services = provider.getServices();
31057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            for (Provider.Service service : services) {
31157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                String type = service.getType();
31257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                if (!type.equals("Signature")) {
31357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    continue;
31457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                }
31557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                String algorithm = service.getAlgorithm();
31657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                try {
3179d2fb535e5d43ad34af09195d490da18a7694a48Kenny Root                    KeyPair kp = keyPair(algorithm, provider.getName());
31857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    // Signature.getInstance(String)
31957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    Signature sig1 = Signature.getInstance(algorithm);
32057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    assertEquals(algorithm, sig1.getAlgorithm());
32157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    test_Signature(sig1, kp);
32257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
32357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    // Signature.getInstance(String, Provider)
32457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    Signature sig2 = Signature.getInstance(algorithm, provider);
32557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    assertEquals(algorithm, sig2.getAlgorithm());
32657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    assertEquals(provider, sig2.getProvider());
32757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    test_Signature(sig2, kp);
32857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
32957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    // Signature.getInstance(String, String)
33057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    Signature sig3 = Signature.getInstance(algorithm, provider.getName());
33157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    assertEquals(algorithm, sig3.getAlgorithm());
33257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    assertEquals(provider, sig3.getProvider());
33357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    test_Signature(sig3, kp);
33457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                } catch (Exception e) {
33557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                    throw new Exception("Problem testing Signature." + algorithm, e);
33657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                }
33757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            }
33857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        }
33957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    }
34057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
34157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    private final Map<String, KeyPair> keypairAlgorithmToInstance
34257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            = new HashMap<String, KeyPair>();
34357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
3449d2fb535e5d43ad34af09195d490da18a7694a48Kenny Root    private KeyPair keyPair(String sigAlgorithm, String providerName) throws Exception {
34528c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin        String sigAlgorithmUpperCase = sigAlgorithm.toUpperCase(Locale.US);
34628c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin        if (sigAlgorithmUpperCase.endsWith("ENCRYPTION")) {
34728c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin            sigAlgorithm = sigAlgorithm.substring(0, sigAlgorithm.length()-"ENCRYPTION".length());
34828c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin            sigAlgorithmUpperCase = sigAlgorithm.toUpperCase(Locale.US);
34957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        }
35057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
35157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        String kpAlgorithm;
35257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        // note ECDSA must be before DSA
35328c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin        if (sigAlgorithmUpperCase.endsWith("ECDSA")) {
35457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            kpAlgorithm = "EC";
35528c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin        } else if (sigAlgorithmUpperCase.endsWith("DSA")) {
35657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            kpAlgorithm = "DSA";
35728c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin        } else if ((sigAlgorithmUpperCase.endsWith("RSA"))
35828c28002abcb486abc808b3a05ba856d16440af8Alex Klyubin                || (sigAlgorithmUpperCase.endsWith("RSA/PSS"))) {
35957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            kpAlgorithm = "RSA";
36057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        } else {
36157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            throw new Exception("Unknown KeyPair algorithm for Signature algorithm "
36257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom                                + sigAlgorithm);
36357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        }
36457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
36557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        KeyPair kp = keypairAlgorithmToInstance.get(kpAlgorithm);
36657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        if (kp == null) {
36757f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom            kp = KeyPairGenerator.getInstance(kpAlgorithm).generateKeyPair();
3680c07deb9bdff055e09ec1f1e89738d0f6befa0d4Alex Klyubin            keypairAlgorithmToInstance.put(kpAlgorithm, kp);
36957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        }
37057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        return kp;
37157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    }
37257f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
37357f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    private void test_Signature(Signature sig, KeyPair keyPair) throws Exception {
37457f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        sig.initSign(keyPair.getPrivate());
37557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        sig.update(DATA);
37657f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        byte[] signature = sig.sign();
37752ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom        assertNotNull(sig.getAlgorithm(), signature);
37852ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom        assertTrue(sig.getAlgorithm(), signature.length > 0);
37957f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom
38057f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        sig.initVerify(keyPair.getPublic());
38157f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom        sig.update(DATA);
38252ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom        assertTrue(sig.getAlgorithm(), sig.verify(signature));
38352ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom
38452ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom        // After verify, should be reusable as if we are after initVerify
38552ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom        sig.update(DATA);
38652ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom        assertTrue(sig.getAlgorithm(), sig.verify(signature));
38752ec5bcc7d5d042d7ba6d0244d98ee72007a95e4Brian Carlstrom
3887501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        /*
3897501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root         * The RI appears to clear out the input data in RawDSA while calling
3907501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root         * verify a second time.
3917501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root         */
3927501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        if (StandardNames.IS_RI && "NONEwithDSA".equalsIgnoreCase(sig.getAlgorithm())) {
3937501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            try {
3947501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                sig.verify(signature);
3957501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                fail("Expected RI to have a NONEwithDSA bug");
3967501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            } catch (SignatureException bug) {
3977501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            }
3987501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        } else {
3997501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            // Calling Signature.verify a second time should not throw
4007501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            // http://code.google.com/p/android/issues/detail?id=34933
4017501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.verify(signature);
4027501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
40378f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
40478f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        testSignature_MultipleThreads_Misuse(sig);
40557f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom    }
4063b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom
4073b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom    private static final byte[] PK_BYTES = hexToBytes(
4083b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            "30819f300d06092a864886f70d010101050003818d0030818902818100cd769d178f61475fce3001"
4093b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "2604218320c77a427121d3b41dd76756c8fc0c428cd15cb754adc85466f47547b1c85623d9c17fc6"
4103b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "4f202fca21099caf99460c824ad657caa8c2db34996838d32623c4f23c8b6a4e6698603901262619"
4113b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "4840e0896b1a6ec4f6652484aad04569bb6a885b822a10d700224359c632dc7324520cbb3d020301"
4123b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "0001");
4133b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom    private static final byte[] CONTENT = hexToBytes(
4143b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            "f2fa9d73656e00fa01edc12e73656e2e7670632e6432004867268c46dd95030b93ce7260423e5c00"
4153b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "fabd4d656d6265727300fa018dc12e73656e2e7670632e643100d7c258dc00fabd44657669636573"
4163b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "00faa54b65797300fa02b5c12e4d2e4b009471968cc68835f8a68dde10f53d19693d480de767e5fb"
4173b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "976f3562324006372300fabdfd04e1f51ef3aa00fa8d00000001a203e202859471968cc68835f8a6"
4183b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "8dde10f53d19693d480de767e5fb976f356232400637230002bab504e1f51ef5810002c29d28463f"
4193b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "0003da8d000001e201eaf2fa9d73656e00fa01edc12e73656e2e7670632e6432004867268c46dd95"
4203b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "030b93ce7260423e5c00fabd4d656d6265727300fa018dc12e73656e2e7670632e643100d7c258dc"
4213b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "00fabd4465766963657300faa54b65797300fa02b5c12e4d2e4b009471968cc68835f8a68dde10f5"
4223b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "3d19693d480de767e5fb976f3562324006372300fabdfd04e1f51ef3aa000003e202859471968cc6"
4233b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "8835f8a68dde10f53d19693d480de767e5fb976f3562324006372300000000019a0a9530819f300d"
4243b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "06092a864886f70d010101050003818d0030818902818100cd769d178f61475fce30012604218320"
4253b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "c77a427121d3b41dd76756c8fc0c428cd15cb754adc85466f47547b1c85623d9c17fc64f202fca21"
4263b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "099caf99460c824ad657caa8c2db34996838d32623c4f23c8b6a4e66986039012626194840e0896b"
4273b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "1a6ec4f6652484aad04569bb6a885b822a10d700224359c632dc7324520cbb3d020301000100");
4283b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom    private static final byte[] SIGNATURE = hexToBytes(
4293b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            "b4016456148cd2e9f580470aad63d19c1fee52b38c9dcb5b4d61a7ca369a7277497775d106d86394"
4303b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "a69229184333b5a3e6261d5bcebdb02530ca9909f4d790199eae7c140f7db39dee2232191bdf0bfb"
4313b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "34fdadc44326b9b3f3fa828652bab07f0362ac141c8c3784ebdec44e0b156a5e7bccdc81a56fe954"
4323b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            + "56ac8c0e4ae12d97");
4333b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom
43498d0c2e60af002dd0a2355ad2b639452be4b7a6dAlex Klyubin    public static byte[] hexToBytes(String s) {
4353b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        int len = s.length();
4363b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        byte[] data = new byte[len / 2];
4373b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        for (int i = 0; i < len; i += 2) {
4383b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
4393b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom                                  + Character.digit(s.charAt(i+1), 16));
4403b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        }
4413b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        return data;
4423b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom    }
4433b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom
4446c384ac7ee074f2e54f04be94846d528430abc26Kenny Root    /**
4456c384ac7ee074f2e54f04be94846d528430abc26Kenny Root     * This should actually fail because the ASN.1 encoding is incorrect. It is
4466c384ac7ee074f2e54f04be94846d528430abc26Kenny Root     * missing the NULL in the AlgorithmIdentifier field.
4476c384ac7ee074f2e54f04be94846d528430abc26Kenny Root     * <p>
4486c384ac7ee074f2e54f04be94846d528430abc26Kenny Root     * http://code.google.com/p/android/issues/detail?id=18566 <br/>
4496c384ac7ee074f2e54f04be94846d528430abc26Kenny Root     * http://b/5038554
4506c384ac7ee074f2e54f04be94846d528430abc26Kenny Root     */
4516c384ac7ee074f2e54f04be94846d528430abc26Kenny Root    public void test18566_AlgorithmOid_MissingNull_Failure() throws Exception {
4523b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(PK_BYTES);
4533b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
4543b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        PublicKey pk = keyFactory.generatePublic(keySpec);
4553b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom
4563b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        Signature sig = Signature.getInstance("SHA256withRSA");
4573b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        sig.initVerify(pk);
4583b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom        sig.update(CONTENT);
4596c384ac7ee074f2e54f04be94846d528430abc26Kenny Root        assertFalse(sig.verify(SIGNATURE));
4603b7d489ac5cfa5226179dd9a8b2ee6bd72fadf43Brian Carlstrom    }
4615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
4625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    /*
4635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * Test vectors generated with this private key:
4645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     *
4655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * -----BEGIN RSA PRIVATE KEY-----
4665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * MIIEpAIBAAKCAQEA4Ec+irjyKE/rnnQv+XSPoRjtmGM8kvUq63ouvg075gMpvnZq
4675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * 0Q62pRXQ0s/ZvqeTDwwwZTeJn3lYzT6FsB+IGFJNMSWEqUslHjYltUFB7b/uGYgI
4685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * 4buX/Hy0m56qr2jpyY19DtxTu8D6ADQ1bWMF+7zDxwAUBThqu8hzyw8+90JfPTPf
4695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * ezFa4DbSoLZq/UdQOxab8247UWJRW3Ff2oPeryxYrrmr+zCXw8yd2dvl7ylsF2E5
4705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * Ao6KZx5jBW1F9AGI0sQTNJCEXeUsJTTpxrJHjAe9rpKII7YtBmx3cPn2Pz26JH9T
4715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * CER0e+eqqF2FO4vSRKzsPePImrRkU6tNJMOsaQIDAQABAoIBADd4R3al8XaY9ayW
4725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * DfuDobZ1ZOZIvQWXz4q4CHGG8macJ6nsvdSA8Bl6gNBzCebGqW+SUzHlf4tKxvTU
4735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * XtpFojJpwJ/EKMB6Tm7fc4oV3sl/q9Lyu0ehTyDqcvz+TDbgGtp3vRN82NTaELsW
4745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * LpSkZilx8XX5hfoYjwVsuX7igW9Dq503R2Ekhs2owWGWwwgYqZXshdOEZ3kSZ7O/
4755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * IfJzcQppJYYldoQcW2cSwS1L0govMpmtt8E12l6VFavadufK8qO+gFUdBzt4vxFi
4765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * xIrSt/R0OgI47k0lL31efmUzzK5kzLOTYAdaL9HgNOw65c6cQIzL8OJeQRQCFoez
4775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * 3UdUroECgYEA9UGIS8Nzeyki1BGe9F4t7izUy7dfRVBaFXqlAJ+Zxzot8HJKxGAk
4785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * MGMy6omBd2NFRl3G3x4KbxQK/ztzluaomUrF2qloc0cv43dJ0U6z4HXmKdvrNYMz
4795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * im82SdCiZUp6Qv2atr+krE1IHTkLsimwZL3DEcwb4bYxidp8QM3s8rECgYEA6hp0
4805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * LduIHO23KIyH442GjdekCdFaQ/RF1Td6C1cx3b/KLa8oqOE81cCvzsM0fXSjniNa
4815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * PNljPydN4rlPkt9DgzkR2enxz1jyfeLgj/RZZMcg0+whOdx8r8kSlTzeyy81Wi4s
4825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * NaUPrXVMs7IxZkJLo7bjESoriYw4xcFe2yOGkzkCgYBRgo8exv2ZYCmQG68dfjN7
4835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * pfCvJ+mE6tiVrOYr199O5FoiQInyzBUa880XP84EdLywTzhqLNzA4ANrokGfVFeS
4845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * YtRxAL6TGYSj76Bb7PFBV03AebOpXEqD5sQ/MhTW3zLVEt4ZgIXlMeYWuD/X3Z0f
4855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * TiYHwzM9B8VdEH0dOJNYcQKBgQDbT7UPUN6O21P/NMgJMYigUShn2izKBIl3WeWH
4865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * wkQBDa+GZNWegIPRbBZHiTAfZ6nweAYNg0oq29NnV1toqKhCwrAqibPzH8zsiiL+
4875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * OVeVxcbHQitOXXSh6ajzDndZufwtY5wfFWc+hOk6XvFQb0MVODw41Fy9GxQEj0ch
4885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * 3IIyYQKBgQDYEUWTr0FfthLb8ZI3ENVNB0hiBadqO0MZSWjA3/HxHvD2GkozfV/T
4895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * dBu8lkDkR7i2tsR8OsEgQ1fTsMVbqShr2nP2KSlvX6kUbYl2NX08dR51FIaWpAt0
4905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * aFyCzjCQLWOdck/yTV4ulAfuNO3tLjtN9lqpvP623yjQe6aQPxZXaA==
4915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * -----END RSA PRIVATE KEY-----
4925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     *
4935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     */
4945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
4955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger RSA_2048_modulus = new BigInteger(new byte[] {
4965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x00, (byte) 0xe0, (byte) 0x47, (byte) 0x3e, (byte) 0x8a, (byte) 0xb8, (byte) 0xf2, (byte) 0x28,
4975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4f, (byte) 0xeb, (byte) 0x9e, (byte) 0x74, (byte) 0x2f, (byte) 0xf9, (byte) 0x74, (byte) 0x8f,
4985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa1, (byte) 0x18, (byte) 0xed, (byte) 0x98, (byte) 0x63, (byte) 0x3c, (byte) 0x92, (byte) 0xf5,
4995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2a, (byte) 0xeb, (byte) 0x7a, (byte) 0x2e, (byte) 0xbe, (byte) 0x0d, (byte) 0x3b, (byte) 0xe6,
5005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x03, (byte) 0x29, (byte) 0xbe, (byte) 0x76, (byte) 0x6a, (byte) 0xd1, (byte) 0x0e, (byte) 0xb6,
5015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa5, (byte) 0x15, (byte) 0xd0, (byte) 0xd2, (byte) 0xcf, (byte) 0xd9, (byte) 0xbe, (byte) 0xa7,
5025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x93, (byte) 0x0f, (byte) 0x0c, (byte) 0x30, (byte) 0x65, (byte) 0x37, (byte) 0x89, (byte) 0x9f,
5035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x79, (byte) 0x58, (byte) 0xcd, (byte) 0x3e, (byte) 0x85, (byte) 0xb0, (byte) 0x1f, (byte) 0x88,
5045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x18, (byte) 0x52, (byte) 0x4d, (byte) 0x31, (byte) 0x25, (byte) 0x84, (byte) 0xa9, (byte) 0x4b,
5055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x25, (byte) 0x1e, (byte) 0x36, (byte) 0x25, (byte) 0xb5, (byte) 0x41, (byte) 0x41, (byte) 0xed,
5065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbf, (byte) 0xee, (byte) 0x19, (byte) 0x88, (byte) 0x08, (byte) 0xe1, (byte) 0xbb, (byte) 0x97,
5075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xfc, (byte) 0x7c, (byte) 0xb4, (byte) 0x9b, (byte) 0x9e, (byte) 0xaa, (byte) 0xaf, (byte) 0x68,
5085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe9, (byte) 0xc9, (byte) 0x8d, (byte) 0x7d, (byte) 0x0e, (byte) 0xdc, (byte) 0x53, (byte) 0xbb,
5095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0xfa, (byte) 0x00, (byte) 0x34, (byte) 0x35, (byte) 0x6d, (byte) 0x63, (byte) 0x05,
5105b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xfb, (byte) 0xbc, (byte) 0xc3, (byte) 0xc7, (byte) 0x00, (byte) 0x14, (byte) 0x05, (byte) 0x38,
5115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6a, (byte) 0xbb, (byte) 0xc8, (byte) 0x73, (byte) 0xcb, (byte) 0x0f, (byte) 0x3e, (byte) 0xf7,
5125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x42, (byte) 0x5f, (byte) 0x3d, (byte) 0x33, (byte) 0xdf, (byte) 0x7b, (byte) 0x31, (byte) 0x5a,
5135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe0, (byte) 0x36, (byte) 0xd2, (byte) 0xa0, (byte) 0xb6, (byte) 0x6a, (byte) 0xfd, (byte) 0x47,
5145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x50, (byte) 0x3b, (byte) 0x16, (byte) 0x9b, (byte) 0xf3, (byte) 0x6e, (byte) 0x3b, (byte) 0x51,
5155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x62, (byte) 0x51, (byte) 0x5b, (byte) 0x71, (byte) 0x5f, (byte) 0xda, (byte) 0x83, (byte) 0xde,
5165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xaf, (byte) 0x2c, (byte) 0x58, (byte) 0xae, (byte) 0xb9, (byte) 0xab, (byte) 0xfb, (byte) 0x30,
5175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x97, (byte) 0xc3, (byte) 0xcc, (byte) 0x9d, (byte) 0xd9, (byte) 0xdb, (byte) 0xe5, (byte) 0xef,
5185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x29, (byte) 0x6c, (byte) 0x17, (byte) 0x61, (byte) 0x39, (byte) 0x02, (byte) 0x8e, (byte) 0x8a,
5195b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x67, (byte) 0x1e, (byte) 0x63, (byte) 0x05, (byte) 0x6d, (byte) 0x45, (byte) 0xf4, (byte) 0x01,
5205b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x88, (byte) 0xd2, (byte) 0xc4, (byte) 0x13, (byte) 0x34, (byte) 0x90, (byte) 0x84, (byte) 0x5d,
5215b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe5, (byte) 0x2c, (byte) 0x25, (byte) 0x34, (byte) 0xe9, (byte) 0xc6, (byte) 0xb2, (byte) 0x47,
5225b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8c, (byte) 0x07, (byte) 0xbd, (byte) 0xae, (byte) 0x92, (byte) 0x88, (byte) 0x23, (byte) 0xb6,
5235b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2d, (byte) 0x06, (byte) 0x6c, (byte) 0x77, (byte) 0x70, (byte) 0xf9, (byte) 0xf6, (byte) 0x3f,
5245b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3d, (byte) 0xba, (byte) 0x24, (byte) 0x7f, (byte) 0x53, (byte) 0x08, (byte) 0x44, (byte) 0x74,
5255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7b, (byte) 0xe7, (byte) 0xaa, (byte) 0xa8, (byte) 0x5d, (byte) 0x85, (byte) 0x3b, (byte) 0x8b,
5265b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd2, (byte) 0x44, (byte) 0xac, (byte) 0xec, (byte) 0x3d, (byte) 0xe3, (byte) 0xc8, (byte) 0x9a,
5275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb4, (byte) 0x64, (byte) 0x53, (byte) 0xab, (byte) 0x4d, (byte) 0x24, (byte) 0xc3, (byte) 0xac,
5285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x69,
5295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
5305b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
5315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger RSA_2048_privateExponent = new BigInteger(new byte[] {
5325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x37, (byte) 0x78, (byte) 0x47, (byte) 0x76, (byte) 0xa5, (byte) 0xf1, (byte) 0x76, (byte) 0x98,
5335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf5, (byte) 0xac, (byte) 0x96, (byte) 0x0d, (byte) 0xfb, (byte) 0x83, (byte) 0xa1, (byte) 0xb6,
5345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x75, (byte) 0x64, (byte) 0xe6, (byte) 0x48, (byte) 0xbd, (byte) 0x05, (byte) 0x97, (byte) 0xcf,
5355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8a, (byte) 0xb8, (byte) 0x08, (byte) 0x71, (byte) 0x86, (byte) 0xf2, (byte) 0x66, (byte) 0x9c,
5365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x27, (byte) 0xa9, (byte) 0xec, (byte) 0xbd, (byte) 0xd4, (byte) 0x80, (byte) 0xf0, (byte) 0x19,
5375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7a, (byte) 0x80, (byte) 0xd0, (byte) 0x73, (byte) 0x09, (byte) 0xe6, (byte) 0xc6, (byte) 0xa9,
5385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6f, (byte) 0x92, (byte) 0x53, (byte) 0x31, (byte) 0xe5, (byte) 0x7f, (byte) 0x8b, (byte) 0x4a,
5395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc6, (byte) 0xf4, (byte) 0xd4, (byte) 0x5e, (byte) 0xda, (byte) 0x45, (byte) 0xa2, (byte) 0x32,
5405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x69, (byte) 0xc0, (byte) 0x9f, (byte) 0xc4, (byte) 0x28, (byte) 0xc0, (byte) 0x7a, (byte) 0x4e,
5415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6e, (byte) 0xdf, (byte) 0x73, (byte) 0x8a, (byte) 0x15, (byte) 0xde, (byte) 0xc9, (byte) 0x7f,
5425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xab, (byte) 0xd2, (byte) 0xf2, (byte) 0xbb, (byte) 0x47, (byte) 0xa1, (byte) 0x4f, (byte) 0x20,
5435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xea, (byte) 0x72, (byte) 0xfc, (byte) 0xfe, (byte) 0x4c, (byte) 0x36, (byte) 0xe0, (byte) 0x1a,
5445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xda, (byte) 0x77, (byte) 0xbd, (byte) 0x13, (byte) 0x7c, (byte) 0xd8, (byte) 0xd4, (byte) 0xda,
5455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x10, (byte) 0xbb, (byte) 0x16, (byte) 0x2e, (byte) 0x94, (byte) 0xa4, (byte) 0x66, (byte) 0x29,
5465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x71, (byte) 0xf1, (byte) 0x75, (byte) 0xf9, (byte) 0x85, (byte) 0xfa, (byte) 0x18, (byte) 0x8f,
5475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x05, (byte) 0x6c, (byte) 0xb9, (byte) 0x7e, (byte) 0xe2, (byte) 0x81, (byte) 0x6f, (byte) 0x43,
5485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xab, (byte) 0x9d, (byte) 0x37, (byte) 0x47, (byte) 0x61, (byte) 0x24, (byte) 0x86, (byte) 0xcd,
5495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa8, (byte) 0xc1, (byte) 0x61, (byte) 0x96, (byte) 0xc3, (byte) 0x08, (byte) 0x18, (byte) 0xa9,
5505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x95, (byte) 0xec, (byte) 0x85, (byte) 0xd3, (byte) 0x84, (byte) 0x67, (byte) 0x79, (byte) 0x12,
5515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x67, (byte) 0xb3, (byte) 0xbf, (byte) 0x21, (byte) 0xf2, (byte) 0x73, (byte) 0x71, (byte) 0x0a,
5525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x69, (byte) 0x25, (byte) 0x86, (byte) 0x25, (byte) 0x76, (byte) 0x84, (byte) 0x1c, (byte) 0x5b,
5535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x67, (byte) 0x12, (byte) 0xc1, (byte) 0x2d, (byte) 0x4b, (byte) 0xd2, (byte) 0x0a, (byte) 0x2f,
5545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x32, (byte) 0x99, (byte) 0xad, (byte) 0xb7, (byte) 0xc1, (byte) 0x35, (byte) 0xda, (byte) 0x5e,
5555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x95, (byte) 0x15, (byte) 0xab, (byte) 0xda, (byte) 0x76, (byte) 0xe7, (byte) 0xca, (byte) 0xf2,
5565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa3, (byte) 0xbe, (byte) 0x80, (byte) 0x55, (byte) 0x1d, (byte) 0x07, (byte) 0x3b, (byte) 0x78,
5575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbf, (byte) 0x11, (byte) 0x62, (byte) 0xc4, (byte) 0x8a, (byte) 0xd2, (byte) 0xb7, (byte) 0xf4,
5585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x74, (byte) 0x3a, (byte) 0x02, (byte) 0x38, (byte) 0xee, (byte) 0x4d, (byte) 0x25, (byte) 0x2f,
5595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7d, (byte) 0x5e, (byte) 0x7e, (byte) 0x65, (byte) 0x33, (byte) 0xcc, (byte) 0xae, (byte) 0x64,
5605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xcc, (byte) 0xb3, (byte) 0x93, (byte) 0x60, (byte) 0x07, (byte) 0x5a, (byte) 0x2f, (byte) 0xd1,
5615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe0, (byte) 0x34, (byte) 0xec, (byte) 0x3a, (byte) 0xe5, (byte) 0xce, (byte) 0x9c, (byte) 0x40,
5625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8c, (byte) 0xcb, (byte) 0xf0, (byte) 0xe2, (byte) 0x5e, (byte) 0x41, (byte) 0x14, (byte) 0x02,
5635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x16, (byte) 0x87, (byte) 0xb3, (byte) 0xdd, (byte) 0x47, (byte) 0x54, (byte) 0xae, (byte) 0x81,
5645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
5655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
5665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger RSA_2048_publicExponent = new BigInteger(new byte[] {
5675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x01, (byte) 0x00, (byte) 0x01,
5685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
5695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
5705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger RSA_2048_primeP = new BigInteger(new byte[] {
5715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x00, (byte) 0xf5, (byte) 0x41, (byte) 0x88, (byte) 0x4b, (byte) 0xc3, (byte) 0x73, (byte) 0x7b,
5725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x29, (byte) 0x22, (byte) 0xd4, (byte) 0x11, (byte) 0x9e, (byte) 0xf4, (byte) 0x5e, (byte) 0x2d,
5735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xee, (byte) 0x2c, (byte) 0xd4, (byte) 0xcb, (byte) 0xb7, (byte) 0x5f, (byte) 0x45, (byte) 0x50,
5745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x5a, (byte) 0x15, (byte) 0x7a, (byte) 0xa5, (byte) 0x00, (byte) 0x9f, (byte) 0x99, (byte) 0xc7,
5755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3a, (byte) 0x2d, (byte) 0xf0, (byte) 0x72, (byte) 0x4a, (byte) 0xc4, (byte) 0x60, (byte) 0x24,
5765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x30, (byte) 0x63, (byte) 0x32, (byte) 0xea, (byte) 0x89, (byte) 0x81, (byte) 0x77, (byte) 0x63,
5775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x45, (byte) 0x46, (byte) 0x5d, (byte) 0xc6, (byte) 0xdf, (byte) 0x1e, (byte) 0x0a, (byte) 0x6f,
5785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x14, (byte) 0x0a, (byte) 0xff, (byte) 0x3b, (byte) 0x73, (byte) 0x96, (byte) 0xe6, (byte) 0xa8,
5795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x99, (byte) 0x4a, (byte) 0xc5, (byte) 0xda, (byte) 0xa9, (byte) 0x68, (byte) 0x73, (byte) 0x47,
5805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2f, (byte) 0xe3, (byte) 0x77, (byte) 0x49, (byte) 0xd1, (byte) 0x4e, (byte) 0xb3, (byte) 0xe0,
5815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x75, (byte) 0xe6, (byte) 0x29, (byte) 0xdb, (byte) 0xeb, (byte) 0x35, (byte) 0x83, (byte) 0x33,
5825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8a, (byte) 0x6f, (byte) 0x36, (byte) 0x49, (byte) 0xd0, (byte) 0xa2, (byte) 0x65, (byte) 0x4a,
5835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7a, (byte) 0x42, (byte) 0xfd, (byte) 0x9a, (byte) 0xb6, (byte) 0xbf, (byte) 0xa4, (byte) 0xac,
5845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4d, (byte) 0x48, (byte) 0x1d, (byte) 0x39, (byte) 0x0b, (byte) 0xb2, (byte) 0x29, (byte) 0xb0,
5855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x64, (byte) 0xbd, (byte) 0xc3, (byte) 0x11, (byte) 0xcc, (byte) 0x1b, (byte) 0xe1, (byte) 0xb6,
5865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x31, (byte) 0x89, (byte) 0xda, (byte) 0x7c, (byte) 0x40, (byte) 0xcd, (byte) 0xec, (byte) 0xf2,
5875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb1,
5885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
5895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
5905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger RSA_2048_primeQ = new BigInteger(new byte[] {
5915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x00, (byte) 0xea, (byte) 0x1a, (byte) 0x74, (byte) 0x2d, (byte) 0xdb, (byte) 0x88, (byte) 0x1c,
5925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xed, (byte) 0xb7, (byte) 0x28, (byte) 0x8c, (byte) 0x87, (byte) 0xe3, (byte) 0x8d, (byte) 0x86,
5935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8d, (byte) 0xd7, (byte) 0xa4, (byte) 0x09, (byte) 0xd1, (byte) 0x5a, (byte) 0x43, (byte) 0xf4,
5945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x45, (byte) 0xd5, (byte) 0x37, (byte) 0x7a, (byte) 0x0b, (byte) 0x57, (byte) 0x31, (byte) 0xdd,
5955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbf, (byte) 0xca, (byte) 0x2d, (byte) 0xaf, (byte) 0x28, (byte) 0xa8, (byte) 0xe1, (byte) 0x3c,
5965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd5, (byte) 0xc0, (byte) 0xaf, (byte) 0xce, (byte) 0xc3, (byte) 0x34, (byte) 0x7d, (byte) 0x74,
5975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa3, (byte) 0x9e, (byte) 0x23, (byte) 0x5a, (byte) 0x3c, (byte) 0xd9, (byte) 0x63, (byte) 0x3f,
5985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x27, (byte) 0x4d, (byte) 0xe2, (byte) 0xb9, (byte) 0x4f, (byte) 0x92, (byte) 0xdf, (byte) 0x43,
5995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x83, (byte) 0x39, (byte) 0x11, (byte) 0xd9, (byte) 0xe9, (byte) 0xf1, (byte) 0xcf, (byte) 0x58,
6005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf2, (byte) 0x7d, (byte) 0xe2, (byte) 0xe0, (byte) 0x8f, (byte) 0xf4, (byte) 0x59, (byte) 0x64,
6015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc7, (byte) 0x20, (byte) 0xd3, (byte) 0xec, (byte) 0x21, (byte) 0x39, (byte) 0xdc, (byte) 0x7c,
6025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xaf, (byte) 0xc9, (byte) 0x12, (byte) 0x95, (byte) 0x3c, (byte) 0xde, (byte) 0xcb, (byte) 0x2f,
6035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x35, (byte) 0x5a, (byte) 0x2e, (byte) 0x2c, (byte) 0x35, (byte) 0xa5, (byte) 0x0f, (byte) 0xad,
6045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x75, (byte) 0x4c, (byte) 0xb3, (byte) 0xb2, (byte) 0x31, (byte) 0x66, (byte) 0x42, (byte) 0x4b,
6055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa3, (byte) 0xb6, (byte) 0xe3, (byte) 0x11, (byte) 0x2a, (byte) 0x2b, (byte) 0x89, (byte) 0x8c,
6065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x38, (byte) 0xc5, (byte) 0xc1, (byte) 0x5e, (byte) 0xdb, (byte) 0x23, (byte) 0x86, (byte) 0x93,
6075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x39,
6085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
6095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
6107501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    /* Test data is: "Android.\n" */
6115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] Vector1Data = new byte[] {
6125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x41, (byte) 0x6e, (byte) 0x64, (byte) 0x72, (byte) 0x6f, (byte) 0x69, (byte) 0x64, (byte) 0x2e,
6135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x0a,
6145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
6155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
6165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] SHA1withRSA_Vector1Signature = {
6175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6d, (byte) 0x5b, (byte) 0xff, (byte) 0x68, (byte) 0xda, (byte) 0x18, (byte) 0x98, (byte) 0x72,
6185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x5c, (byte) 0x1f, (byte) 0x46, (byte) 0x51, (byte) 0x77, (byte) 0x15, (byte) 0x11, (byte) 0xcb,
6195b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe0, (byte) 0xb9, (byte) 0x3b, (byte) 0x7d, (byte) 0xf5, (byte) 0x96, (byte) 0x98, (byte) 0x24,
6205b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x85, (byte) 0x9d, (byte) 0x3e, (byte) 0xed, (byte) 0x9b, (byte) 0xb2, (byte) 0x8a, (byte) 0x91,
6215b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xfb, (byte) 0xf6, (byte) 0x85, (byte) 0x64, (byte) 0x74, (byte) 0x18, (byte) 0xb5, (byte) 0x1c,
6225b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb3, (byte) 0x8d, (byte) 0x99, (byte) 0x0d, (byte) 0xdf, (byte) 0xaa, (byte) 0xa6, (byte) 0xa1,
6235b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc3, (byte) 0xb6, (byte) 0x25, (byte) 0xb3, (byte) 0x06, (byte) 0xe0, (byte) 0xef, (byte) 0x28,
6245b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb0, (byte) 0x4d, (byte) 0x50, (byte) 0xc7, (byte) 0x75, (byte) 0x39, (byte) 0xb9, (byte) 0x2c,
6255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x47, (byte) 0xb5, (byte) 0xe2, (byte) 0x96, (byte) 0xf8, (byte) 0xf6, (byte) 0xcb, (byte) 0xa0,
6265b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x58, (byte) 0xc9, (byte) 0x3e, (byte) 0xd5, (byte) 0xfc, (byte) 0x26, (byte) 0xd9, (byte) 0x55,
6275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x73, (byte) 0x39, (byte) 0x75, (byte) 0xb3, (byte) 0xb0, (byte) 0x0a, (byte) 0x5f, (byte) 0x5e,
6285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3b, (byte) 0x4a, (byte) 0x2e, (byte) 0xb1, (byte) 0x0e, (byte) 0x7d, (byte) 0xe5, (byte) 0xcc,
6295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x04, (byte) 0x2c, (byte) 0xd1, (byte) 0x0a, (byte) 0x32, (byte) 0xaa, (byte) 0xd9, (byte) 0x8d,
6305b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1f, (byte) 0xcb, (byte) 0xe3, (byte) 0x7f, (byte) 0x63, (byte) 0x12, (byte) 0xb1, (byte) 0x98,
6315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x46, (byte) 0x46, (byte) 0x07, (byte) 0xd9, (byte) 0x49, (byte) 0xd2, (byte) 0xbf, (byte) 0xb5,
6325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbc, (byte) 0xbb, (byte) 0xfd, (byte) 0x1c, (byte) 0xd7, (byte) 0x11, (byte) 0x94, (byte) 0xaa,
6335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x5f, (byte) 0x7b, (byte) 0xb2, (byte) 0x0c, (byte) 0x5d, (byte) 0x94, (byte) 0x53, (byte) 0x5e,
6345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x81, (byte) 0x5c, (byte) 0xbb, (byte) 0x1d, (byte) 0x4f, (byte) 0x30, (byte) 0xcd, (byte) 0xf8,
6355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd7, (byte) 0xa5, (byte) 0xfa, (byte) 0x5e, (byte) 0xe0, (byte) 0x19, (byte) 0x3f, (byte) 0xa4,
6365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xaa, (byte) 0x56, (byte) 0x4e, (byte) 0xec, (byte) 0xeb, (byte) 0xee, (byte) 0xa2, (byte) 0x6c,
6375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc9, (byte) 0x4f, (byte) 0xc2, (byte) 0xcc, (byte) 0x2a, (byte) 0xbc, (byte) 0x5b, (byte) 0x09,
6385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x10, (byte) 0x73, (byte) 0x61, (byte) 0x0c, (byte) 0x04, (byte) 0xb6, (byte) 0xb7, (byte) 0x2c,
6395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x37, (byte) 0xd2, (byte) 0xca, (byte) 0x2d, (byte) 0x54, (byte) 0xf2, (byte) 0xf7, (byte) 0x77,
6405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe1, (byte) 0xba, (byte) 0x9f, (byte) 0x29, (byte) 0x07, (byte) 0xa2, (byte) 0x74, (byte) 0xc6,
6415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe9, (byte) 0x1e, (byte) 0xde, (byte) 0xd7, (byte) 0x9c, (byte) 0x4b, (byte) 0xb7, (byte) 0x66,
6425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x52, (byte) 0xe8, (byte) 0xac, (byte) 0xf6, (byte) 0x76, (byte) 0xab, (byte) 0x16, (byte) 0x82,
6435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x96, (byte) 0x87, (byte) 0x40, (byte) 0x0f, (byte) 0xad, (byte) 0x2d, (byte) 0x46, (byte) 0xa6,
6445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x28, (byte) 0x04, (byte) 0x13, (byte) 0xc2, (byte) 0xce, (byte) 0x50, (byte) 0x56, (byte) 0x6d,
6455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbe, (byte) 0x0c, (byte) 0x91, (byte) 0xd0, (byte) 0x8e, (byte) 0x80, (byte) 0x9e, (byte) 0x91,
6465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8f, (byte) 0x62, (byte) 0xb3, (byte) 0x57, (byte) 0xd6, (byte) 0xae, (byte) 0x53, (byte) 0x91,
6475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x83, (byte) 0xe9, (byte) 0x38, (byte) 0x77, (byte) 0x8f, (byte) 0x20, (byte) 0xdd, (byte) 0x13,
6485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7d, (byte) 0x15, (byte) 0x44, (byte) 0x7e, (byte) 0xb5, (byte) 0x00, (byte) 0xd6, (byte) 0x45,
6495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
6505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
6515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] Vector2Data = new byte[] {
6525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x54, (byte) 0x68, (byte) 0x69, (byte) 0x73, (byte) 0x20, (byte) 0x69, (byte) 0x73, (byte) 0x20,
6535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x61, (byte) 0x20, (byte) 0x73, (byte) 0x69, (byte) 0x67, (byte) 0x6e, (byte) 0x65, (byte) 0x64,
6545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x20, (byte) 0x6d, (byte) 0x65, (byte) 0x73, (byte) 0x73, (byte) 0x61, (byte) 0x67, (byte) 0x65,
6555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x20, (byte) 0x66, (byte) 0x72, (byte) 0x6f, (byte) 0x6d, (byte) 0x20, (byte) 0x4b, (byte) 0x65,
6565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6e, (byte) 0x6e, (byte) 0x79, (byte) 0x20, (byte) 0x52, (byte) 0x6f, (byte) 0x6f, (byte) 0x74,
6575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2e, (byte) 0x0a,
6585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
6595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
6605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] SHA1withRSA_Vector2Signature = new byte[] {
6615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2e, (byte) 0xa6, (byte) 0x33, (byte) 0xd1, (byte) 0x9d, (byte) 0xfc, (byte) 0x4e, (byte) 0x27,
6625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb3, (byte) 0xa8, (byte) 0x9a, (byte) 0xf2, (byte) 0x48, (byte) 0x62, (byte) 0x15, (byte) 0xa2,
6635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xce, (byte) 0x5f, (byte) 0x2b, (byte) 0x0e, (byte) 0xc5, (byte) 0x26, (byte) 0xba, (byte) 0xd9,
6645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x0f, (byte) 0x60, (byte) 0xeb, (byte) 0xf0, (byte) 0xd5, (byte) 0x5c, (byte) 0x6b, (byte) 0x23,
6655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x11, (byte) 0x95, (byte) 0xa4, (byte) 0xbd, (byte) 0x11, (byte) 0x68, (byte) 0xe7, (byte) 0x3a,
6665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x37, (byte) 0x3d, (byte) 0x79, (byte) 0xb8, (byte) 0x4f, (byte) 0xe9, (byte) 0xa1, (byte) 0x88,
6675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xfb, (byte) 0xa9, (byte) 0x8b, (byte) 0x34, (byte) 0xa1, (byte) 0xe0, (byte) 0xca, (byte) 0x11,
6685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xdd, (byte) 0xd0, (byte) 0x83, (byte) 0x7f, (byte) 0xc1, (byte) 0x0b, (byte) 0x16, (byte) 0x61,
6695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xac, (byte) 0x09, (byte) 0xa2, (byte) 0xdd, (byte) 0x40, (byte) 0x5b, (byte) 0x8c, (byte) 0x7a,
6705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb2, (byte) 0xb4, (byte) 0x02, (byte) 0x7c, (byte) 0xd4, (byte) 0x9a, (byte) 0xe6, (byte) 0xa5,
6715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1a, (byte) 0x27, (byte) 0x77, (byte) 0x70, (byte) 0xe3, (byte) 0xe3, (byte) 0x71, (byte) 0xc7,
6725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x59, (byte) 0xc7, (byte) 0x9f, (byte) 0xb8, (byte) 0xef, (byte) 0xe7, (byte) 0x15, (byte) 0x02,
6735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x0d, (byte) 0x70, (byte) 0xdc, (byte) 0x2c, (byte) 0xe9, (byte) 0xf7, (byte) 0x63, (byte) 0x2a,
6745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb5, (byte) 0xee, (byte) 0x9f, (byte) 0x29, (byte) 0x56, (byte) 0x86, (byte) 0x99, (byte) 0xb3,
6755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x0f, (byte) 0xe5, (byte) 0x1f, (byte) 0x76, (byte) 0x22, (byte) 0x3b, (byte) 0x7f, (byte) 0xa9,
6765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x9e, (byte) 0xd4, (byte) 0xc4, (byte) 0x83, (byte) 0x5d, (byte) 0x57, (byte) 0xcc, (byte) 0x37,
6775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xcb, (byte) 0x9a, (byte) 0x9e, (byte) 0x73, (byte) 0x44, (byte) 0x93, (byte) 0xb4, (byte) 0xf1,
6785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6b, (byte) 0x98, (byte) 0xa0, (byte) 0x57, (byte) 0xbb, (byte) 0x5e, (byte) 0x8f, (byte) 0x89,
6795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x5b, (byte) 0x97, (byte) 0x26, (byte) 0xe4, (byte) 0xd0, (byte) 0x51, (byte) 0x0a, (byte) 0x5a,
6805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb7, (byte) 0x12, (byte) 0x1a, (byte) 0x6d, (byte) 0xb0, (byte) 0x79, (byte) 0x30, (byte) 0x51,
6815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x83, (byte) 0x2e, (byte) 0xe2, (byte) 0x7a, (byte) 0x67, (byte) 0x66, (byte) 0xd3, (byte) 0x95,
6825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xca, (byte) 0xfc, (byte) 0xcb, (byte) 0x92, (byte) 0x79, (byte) 0x32, (byte) 0x26, (byte) 0x86,
6835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe1, (byte) 0x0d, (byte) 0xd8, (byte) 0x19, (byte) 0xfa, (byte) 0x65, (byte) 0x37, (byte) 0xc9,
6845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4c, (byte) 0x2a, (byte) 0xe1, (byte) 0x42, (byte) 0xc7, (byte) 0xd4, (byte) 0xb7, (byte) 0xeb,
6855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1f, (byte) 0xc3, (byte) 0x53, (byte) 0x64, (byte) 0x6f, (byte) 0x2b, (byte) 0x78, (byte) 0x18,
6865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x03, (byte) 0xda, (byte) 0x8d, (byte) 0x62, (byte) 0x24, (byte) 0x70, (byte) 0xab, (byte) 0xe6,
6875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x16, (byte) 0x13, (byte) 0x24, (byte) 0x6b, (byte) 0x5f, (byte) 0xd3, (byte) 0xec, (byte) 0xc1,
6885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x58, (byte) 0x64, (byte) 0xbd, (byte) 0x30, (byte) 0x98, (byte) 0x5e, (byte) 0x33, (byte) 0xce,
6895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x87, (byte) 0x64, (byte) 0x14, (byte) 0x07, (byte) 0x85, (byte) 0x43, (byte) 0x3e, (byte) 0x9f,
6905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x27, (byte) 0x9f, (byte) 0x63, (byte) 0x66, (byte) 0x9d, (byte) 0x26, (byte) 0x19, (byte) 0xc0,
6915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x02, (byte) 0x08, (byte) 0x15, (byte) 0xcb, (byte) 0xb4, (byte) 0xaa, (byte) 0x4a, (byte) 0xc8,
6925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0x09, (byte) 0x15, (byte) 0x7d, (byte) 0x8a, (byte) 0x21, (byte) 0xbc, (byte) 0xa3,
6935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
6945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
6959d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    /*
6969d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * echo 'Android.' | openssl dgst -sha224 -binary -sign privkey.pem  | recode ../x1 | sed 's/0x/(byte) 0x/g'
6979d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     */
6989d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    private static final byte[] SHA224withRSA_Vector2Signature = new byte[] {
6999d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xBD, (byte) 0x3F, (byte) 0xD4, (byte) 0x20, (byte) 0x5B, (byte) 0xC0, (byte) 0x89, (byte) 0x4F,
7009d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x99, (byte) 0x6C, (byte) 0xF4, (byte) 0xA4, (byte) 0x70, (byte) 0xE3, (byte) 0x5B, (byte) 0x33,
7019d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xB3, (byte) 0xCA, (byte) 0xFE, (byte) 0x1F, (byte) 0xB9, (byte) 0x3A, (byte) 0xD6, (byte) 0x9B,
7029d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x1E, (byte) 0xDA, (byte) 0x65, (byte) 0x06, (byte) 0xBD, (byte) 0xC3, (byte) 0x2B, (byte) 0xF8,
7039d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x0E, (byte) 0xA0, (byte) 0xB5, (byte) 0x33, (byte) 0x7F, (byte) 0x15, (byte) 0xDC, (byte) 0xBB,
7049d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xDC, (byte) 0x98, (byte) 0x96, (byte) 0xF5, (byte) 0xF8, (byte) 0xE5, (byte) 0x55, (byte) 0x7D,
7059d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x48, (byte) 0x51, (byte) 0xC5, (byte) 0xAE, (byte) 0x12, (byte) 0xA2, (byte) 0x61, (byte) 0xC7,
7069d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xA2, (byte) 0x00, (byte) 0x0F, (byte) 0x35, (byte) 0x54, (byte) 0x3C, (byte) 0x7E, (byte) 0x97,
7079d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x19, (byte) 0x2D, (byte) 0x8F, (byte) 0xFD, (byte) 0x51, (byte) 0x04, (byte) 0x72, (byte) 0x23,
7089d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x65, (byte) 0x16, (byte) 0x41, (byte) 0x12, (byte) 0x46, (byte) 0xD6, (byte) 0x20, (byte) 0xB6,
7099d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x4E, (byte) 0xD6, (byte) 0xE8, (byte) 0x60, (byte) 0x91, (byte) 0x05, (byte) 0xCA, (byte) 0x57,
7109d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x6F, (byte) 0x53, (byte) 0xA4, (byte) 0x05, (byte) 0x2A, (byte) 0x37, (byte) 0xDD, (byte) 0x2E,
7119d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xA4, (byte) 0xC7, (byte) 0xBF, (byte) 0x9E, (byte) 0xF6, (byte) 0xD5, (byte) 0xD4, (byte) 0x34,
7129d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xB8, (byte) 0xB3, (byte) 0x8B, (byte) 0x66, (byte) 0x2C, (byte) 0xB6, (byte) 0x5F, (byte) 0xA4,
7139d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xB7, (byte) 0x77, (byte) 0xF8, (byte) 0x9A, (byte) 0x9C, (byte) 0x44, (byte) 0x9F, (byte) 0xF0,
7149d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xCA, (byte) 0x53, (byte) 0x56, (byte) 0x2F, (byte) 0x99, (byte) 0x2E, (byte) 0x4B, (byte) 0xA2,
7159d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x26, (byte) 0x50, (byte) 0x30, (byte) 0x97, (byte) 0x2B, (byte) 0x4B, (byte) 0x0C, (byte) 0x3E,
7169d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x28, (byte) 0x0B, (byte) 0x88, (byte) 0x87, (byte) 0x9E, (byte) 0xCE, (byte) 0xCB, (byte) 0x57,
7179d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x72, (byte) 0x6B, (byte) 0xF6, (byte) 0xD6, (byte) 0xAA, (byte) 0x4D, (byte) 0x5F, (byte) 0x19,
7189d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x7A, (byte) 0xAD, (byte) 0x44, (byte) 0x09, (byte) 0x33, (byte) 0x62, (byte) 0xC8, (byte) 0x56,
7199d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x82, (byte) 0x84, (byte) 0xBF, (byte) 0x52, (byte) 0xC6, (byte) 0xA2, (byte) 0x2B, (byte) 0xE3,
7209d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xC2, (byte) 0x7F, (byte) 0xE3, (byte) 0x06, (byte) 0xC3, (byte) 0x30, (byte) 0xB8, (byte) 0xD4,
7219d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x01, (byte) 0xE6, (byte) 0x3D, (byte) 0xDB, (byte) 0xCA, (byte) 0xE4, (byte) 0xFB, (byte) 0xA8,
7229d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x7B, (byte) 0x2D, (byte) 0x8F, (byte) 0x39, (byte) 0x7A, (byte) 0x63, (byte) 0x9F, (byte) 0x02,
7239d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xE8, (byte) 0x91, (byte) 0xD1, (byte) 0xEE, (byte) 0x60, (byte) 0xEE, (byte) 0xCA, (byte) 0xF2,
7249d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x33, (byte) 0x7D, (byte) 0xF2, (byte) 0x41, (byte) 0x52, (byte) 0x0B, (byte) 0x9B, (byte) 0x1B,
7259d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x2D, (byte) 0x89, (byte) 0x38, (byte) 0xEC, (byte) 0x24, (byte) 0x60, (byte) 0x40, (byte) 0x40,
7269d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x6F, (byte) 0xB6, (byte) 0x6F, (byte) 0x86, (byte) 0xB5, (byte) 0x0A, (byte) 0x3D, (byte) 0x98,
7279d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x77, (byte) 0x3F, (byte) 0x59, (byte) 0x41, (byte) 0x3E, (byte) 0x4D, (byte) 0xE4, (byte) 0x4E,
7289d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x91, (byte) 0xCD, (byte) 0x8E, (byte) 0x33, (byte) 0x60, (byte) 0x16, (byte) 0x8D, (byte) 0xAB,
7299d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x04, (byte) 0x14, (byte) 0xE8, (byte) 0x76, (byte) 0xF1, (byte) 0x06, (byte) 0xCD, (byte) 0x4A,
7309d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x88, (byte) 0xC7, (byte) 0x69, (byte) 0x6B, (byte) 0xC6, (byte) 0xDA, (byte) 0x9E, (byte) 0x09
7319d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    };
7329d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
7335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] SHA256withRSA_Vector2Signature = new byte[] {
7345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x18, (byte) 0x6e, (byte) 0x31, (byte) 0x1f, (byte) 0x1d, (byte) 0x44, (byte) 0x09, (byte) 0x3e,
7355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa0, (byte) 0xc4, (byte) 0x3d, (byte) 0xb4, (byte) 0x1b, (byte) 0xf2, (byte) 0xd8, (byte) 0xa4,
7365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x59, (byte) 0xab, (byte) 0xb5, (byte) 0x37, (byte) 0x28, (byte) 0xb8, (byte) 0x94, (byte) 0x6b,
7375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6f, (byte) 0x13, (byte) 0x54, (byte) 0xff, (byte) 0xac, (byte) 0x15, (byte) 0x84, (byte) 0xd0,
7385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc9, (byte) 0x15, (byte) 0x5b, (byte) 0x69, (byte) 0x05, (byte) 0xf1, (byte) 0x44, (byte) 0xfd,
7395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xde, (byte) 0xe8, (byte) 0xb4, (byte) 0x12, (byte) 0x59, (byte) 0x9e, (byte) 0x4c, (byte) 0x0b,
7405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd5, (byte) 0x49, (byte) 0x33, (byte) 0x28, (byte) 0xe0, (byte) 0xcb, (byte) 0x87, (byte) 0x85,
7415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd8, (byte) 0x18, (byte) 0x6f, (byte) 0xfe, (byte) 0xa2, (byte) 0x23, (byte) 0x82, (byte) 0xf0,
7425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe5, (byte) 0x39, (byte) 0x1b, (byte) 0x8c, (byte) 0x93, (byte) 0x11, (byte) 0x49, (byte) 0x72,
7435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2a, (byte) 0x5b, (byte) 0x25, (byte) 0xff, (byte) 0x4e, (byte) 0x88, (byte) 0x70, (byte) 0x9d,
7445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x9d, (byte) 0xff, (byte) 0xe2, (byte) 0xc0, (byte) 0x7e, (byte) 0xc8, (byte) 0x03, (byte) 0x40,
7455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbe, (byte) 0x44, (byte) 0x09, (byte) 0xeb, (byte) 0x9e, (byte) 0x8e, (byte) 0x88, (byte) 0xe4,
7465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x98, (byte) 0x82, (byte) 0x06, (byte) 0xa4, (byte) 0x9d, (byte) 0x63, (byte) 0x88, (byte) 0x65,
7475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa3, (byte) 0x8e, (byte) 0x0d, (byte) 0x22, (byte) 0xf3, (byte) 0x33, (byte) 0xf2, (byte) 0x40,
7485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe8, (byte) 0x91, (byte) 0x67, (byte) 0x72, (byte) 0x29, (byte) 0x1c, (byte) 0x08, (byte) 0xff,
7495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x54, (byte) 0xa0, (byte) 0xcc, (byte) 0xad, (byte) 0x84, (byte) 0x88, (byte) 0x4b, (byte) 0x3b,
7505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xef, (byte) 0xf9, (byte) 0x5e, (byte) 0xb3, (byte) 0x41, (byte) 0x6a, (byte) 0xbd, (byte) 0x94,
7515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x16, (byte) 0x7d, (byte) 0x9d, (byte) 0x53, (byte) 0x77, (byte) 0xf1, (byte) 0x6a, (byte) 0x95,
7525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x57, (byte) 0xad, (byte) 0x65, (byte) 0x9d, (byte) 0x75, (byte) 0x95, (byte) 0xf6, (byte) 0x6a,
7535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd2, (byte) 0x88, (byte) 0xea, (byte) 0x5b, (byte) 0xa2, (byte) 0x94, (byte) 0x8f, (byte) 0x5e,
7545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x84, (byte) 0x18, (byte) 0x19, (byte) 0x46, (byte) 0x83, (byte) 0x0b, (byte) 0x6d, (byte) 0x5b,
7555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb9, (byte) 0xdb, (byte) 0xa4, (byte) 0xe5, (byte) 0x17, (byte) 0x02, (byte) 0x9e, (byte) 0x11,
7565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xed, (byte) 0xd9, (byte) 0x7b, (byte) 0x83, (byte) 0x87, (byte) 0x89, (byte) 0xf3, (byte) 0xe4,
7575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbf, (byte) 0x0e, (byte) 0xe8, (byte) 0xdc, (byte) 0x55, (byte) 0x9c, (byte) 0xf7, (byte) 0xc9,
7585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc3, (byte) 0xe2, (byte) 0x2c, (byte) 0xf7, (byte) 0x8c, (byte) 0xaa, (byte) 0x17, (byte) 0x1f,
7595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd1, (byte) 0xc7, (byte) 0x74, (byte) 0xc7, (byte) 0x8e, (byte) 0x1c, (byte) 0x5b, (byte) 0xd2,
7605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x31, (byte) 0x74, (byte) 0x43, (byte) 0x9a, (byte) 0x52, (byte) 0xbf, (byte) 0x89, (byte) 0xc5,
7615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb4, (byte) 0x80, (byte) 0x6a, (byte) 0x9e, (byte) 0x05, (byte) 0xdb, (byte) 0xbb, (byte) 0x07,
7625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8c, (byte) 0x08, (byte) 0x61, (byte) 0xba, (byte) 0xa4, (byte) 0xbc, (byte) 0x80, (byte) 0x3a,
7635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xdd, (byte) 0x3b, (byte) 0x1a, (byte) 0x8c, (byte) 0x21, (byte) 0xd8, (byte) 0xa3, (byte) 0xc0,
7645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc7, (byte) 0xd1, (byte) 0x08, (byte) 0xe1, (byte) 0x34, (byte) 0x99, (byte) 0xc0, (byte) 0xcf,
7655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x80, (byte) 0xff, (byte) 0xfa, (byte) 0x07, (byte) 0xef, (byte) 0x5c, (byte) 0x45, (byte) 0xe5,
7665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
7675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
7685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] SHA384withRSA_Vector2Signature = new byte[] {
7695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xaf, (byte) 0xf7, (byte) 0x7a, (byte) 0xc2, (byte) 0xbb, (byte) 0xb8, (byte) 0xbd, (byte) 0xe3,
7705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x42, (byte) 0xaa, (byte) 0x16, (byte) 0x8a, (byte) 0x52, (byte) 0x6c, (byte) 0x99, (byte) 0x66,
7715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x08, (byte) 0xbe, (byte) 0x15, (byte) 0xd9, (byte) 0x7c, (byte) 0x60, (byte) 0x2c, (byte) 0xac,
7725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4d, (byte) 0x4c, (byte) 0xf4, (byte) 0xdf, (byte) 0xbc, (byte) 0x16, (byte) 0x58, (byte) 0x0a,
7735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4e, (byte) 0xde, (byte) 0x8d, (byte) 0xb3, (byte) 0xbd, (byte) 0x03, (byte) 0x4e, (byte) 0x23,
7745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x40, (byte) 0xa5, (byte) 0x80, (byte) 0xae, (byte) 0x83, (byte) 0xb4, (byte) 0x0f, (byte) 0x99,
7755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x44, (byte) 0xc3, (byte) 0x5e, (byte) 0xdb, (byte) 0x59, (byte) 0x1d, (byte) 0xea, (byte) 0x7b,
7765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4d, (byte) 0xf3, (byte) 0xd2, (byte) 0xad, (byte) 0xbd, (byte) 0x21, (byte) 0x9f, (byte) 0x8e,
7775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x87, (byte) 0x8f, (byte) 0x12, (byte) 0x13, (byte) 0x33, (byte) 0xf1, (byte) 0xc0, (byte) 0x9d,
7785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe7, (byte) 0xec, (byte) 0x6e, (byte) 0xad, (byte) 0xea, (byte) 0x5d, (byte) 0x69, (byte) 0xbb,
7795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xab, (byte) 0x5b, (byte) 0xd8, (byte) 0x55, (byte) 0x56, (byte) 0xc8, (byte) 0xda, (byte) 0x81,
7805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x41, (byte) 0xfb, (byte) 0xd3, (byte) 0x11, (byte) 0x6c, (byte) 0x97, (byte) 0xa7, (byte) 0xc3,
7815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf1, (byte) 0x31, (byte) 0xbf, (byte) 0xbe, (byte) 0x3f, (byte) 0xdb, (byte) 0x35, (byte) 0x85,
7825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb7, (byte) 0xb0, (byte) 0x75, (byte) 0x7f, (byte) 0xaf, (byte) 0xfb, (byte) 0x65, (byte) 0x61,
7835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc7, (byte) 0x0e, (byte) 0x63, (byte) 0xb5, (byte) 0x7d, (byte) 0x95, (byte) 0xe9, (byte) 0x16,
7845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x9d, (byte) 0x6a, (byte) 0x00, (byte) 0x9f, (byte) 0x5e, (byte) 0xcd, (byte) 0xff, (byte) 0xa6,
7855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbc, (byte) 0x71, (byte) 0xf2, (byte) 0x2c, (byte) 0xd3, (byte) 0x68, (byte) 0xb9, (byte) 0x3f,
7865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xaa, (byte) 0x06, (byte) 0xf1, (byte) 0x9c, (byte) 0x7e, (byte) 0xca, (byte) 0x4a, (byte) 0xfe,
7875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb1, (byte) 0x73, (byte) 0x19, (byte) 0x80, (byte) 0x05, (byte) 0xa6, (byte) 0x85, (byte) 0x14,
7885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xda, (byte) 0x7a, (byte) 0x16, (byte) 0x7a, (byte) 0xc2, (byte) 0x46, (byte) 0x57, (byte) 0xa7,
7895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0xbf, (byte) 0xcd, (byte) 0xdc, (byte) 0x2f, (byte) 0x64, (byte) 0xf6, (byte) 0x6d,
7905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xdc, (byte) 0xcb, (byte) 0x5a, (byte) 0x29, (byte) 0x95, (byte) 0x1c, (byte) 0xfe, (byte) 0xf2,
7915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xda, (byte) 0x7e, (byte) 0xcb, (byte) 0x26, (byte) 0x12, (byte) 0xc6, (byte) 0xb0, (byte) 0xba,
7925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x84, (byte) 0x9b, (byte) 0x4f, (byte) 0xba, (byte) 0x1b, (byte) 0x78, (byte) 0x25, (byte) 0xb8,
7935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8f, (byte) 0x2e, (byte) 0x51, (byte) 0x5f, (byte) 0x9e, (byte) 0xfc, (byte) 0x40, (byte) 0xbc,
7945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x85, (byte) 0xcd, (byte) 0x86, (byte) 0x7f, (byte) 0x88, (byte) 0xc5, (byte) 0xaa, (byte) 0x2b,
7955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x78, (byte) 0xb1, (byte) 0x9c, (byte) 0x51, (byte) 0x9a, (byte) 0xe1, (byte) 0xe1, (byte) 0xc0,
7965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x40, (byte) 0x47, (byte) 0xcb, (byte) 0xa4, (byte) 0xb7, (byte) 0x6c, (byte) 0x31, (byte) 0xf2,
7975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc8, (byte) 0x9a, (byte) 0xad, (byte) 0x0b, (byte) 0xd3, (byte) 0xf6, (byte) 0x85, (byte) 0x9a,
7985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8f, (byte) 0x4f, (byte) 0xc9, (byte) 0xd8, (byte) 0x33, (byte) 0x7c, (byte) 0x45, (byte) 0x30,
7995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xea, (byte) 0x17, (byte) 0xd3, (byte) 0xe3, (byte) 0x90, (byte) 0x2c, (byte) 0xda, (byte) 0xde,
8005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x41, (byte) 0x17, (byte) 0x3f, (byte) 0x08, (byte) 0xb9, (byte) 0x34, (byte) 0xc0, (byte) 0xd1,
8015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
8025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
8035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] SHA512withRSA_Vector2Signature = new byte[] {
8045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x19, (byte) 0xe2, (byte) 0xe5, (byte) 0xf3, (byte) 0x18, (byte) 0x83, (byte) 0xec, (byte) 0xf0,
8055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xab, (byte) 0x50, (byte) 0x05, (byte) 0x4b, (byte) 0x5f, (byte) 0x22, (byte) 0xfc, (byte) 0x82,
8065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6d, (byte) 0xca, (byte) 0xe7, (byte) 0xbe, (byte) 0x23, (byte) 0x94, (byte) 0xfa, (byte) 0xf9,
8075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa4, (byte) 0x8a, (byte) 0x95, (byte) 0x4d, (byte) 0x14, (byte) 0x08, (byte) 0x8b, (byte) 0x5e,
8085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x03, (byte) 0x1b, (byte) 0x74, (byte) 0xde, (byte) 0xc1, (byte) 0x45, (byte) 0x9c, (byte) 0xce,
8095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1d, (byte) 0xac, (byte) 0xab, (byte) 0xd3, (byte) 0xa8, (byte) 0xc3, (byte) 0xca, (byte) 0x67,
8105b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x80, (byte) 0xf6, (byte) 0x03, (byte) 0x46, (byte) 0x65, (byte) 0x77, (byte) 0x59, (byte) 0xbb,
8115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb8, (byte) 0x83, (byte) 0xee, (byte) 0xc2, (byte) 0x3e, (byte) 0x78, (byte) 0xdd, (byte) 0x89,
8125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xcd, (byte) 0x9b, (byte) 0x78, (byte) 0x35, (byte) 0xa9, (byte) 0x09, (byte) 0xc8, (byte) 0x77,
8135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xdd, (byte) 0xd3, (byte) 0xa0, (byte) 0x64, (byte) 0xb0, (byte) 0x74, (byte) 0x48, (byte) 0x51,
8145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4f, (byte) 0xa0, (byte) 0xae, (byte) 0x33, (byte) 0xb3, (byte) 0x28, (byte) 0xb0, (byte) 0xa8,
8155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x78, (byte) 0x8f, (byte) 0xa2, (byte) 0x32, (byte) 0xa6, (byte) 0x0a, (byte) 0xaa, (byte) 0x09,
8165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb5, (byte) 0x8d, (byte) 0x4c, (byte) 0x44, (byte) 0x46, (byte) 0xb4, (byte) 0xd2, (byte) 0x06,
8175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6b, (byte) 0x8c, (byte) 0x51, (byte) 0x6e, (byte) 0x9c, (byte) 0xfa, (byte) 0x1f, (byte) 0x94,
8185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3e, (byte) 0x19, (byte) 0x9c, (byte) 0x63, (byte) 0xfe, (byte) 0xa9, (byte) 0x9a, (byte) 0xe3,
8195b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6c, (byte) 0x82, (byte) 0x64, (byte) 0x5f, (byte) 0xca, (byte) 0xc2, (byte) 0x8d, (byte) 0x66,
8205b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbe, (byte) 0x12, (byte) 0x6e, (byte) 0xb6, (byte) 0x35, (byte) 0x6d, (byte) 0xaa, (byte) 0xed,
8215b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4b, (byte) 0x50, (byte) 0x08, (byte) 0x1c, (byte) 0xbf, (byte) 0x07, (byte) 0x70, (byte) 0x78,
8225b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0xbb, (byte) 0xc5, (byte) 0x8d, (byte) 0x6c, (byte) 0x8d, (byte) 0x35, (byte) 0xff,
8235b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x04, (byte) 0x81, (byte) 0xd8, (byte) 0xf4, (byte) 0xd2, (byte) 0x4a, (byte) 0xc3, (byte) 0x05,
8245b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x23, (byte) 0xcb, (byte) 0xeb, (byte) 0x20, (byte) 0xb1, (byte) 0xd4, (byte) 0x2d, (byte) 0xd8,
8255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7a, (byte) 0xd4, (byte) 0x7e, (byte) 0xf6, (byte) 0xa9, (byte) 0xe8, (byte) 0x72, (byte) 0x69,
8265b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xfe, (byte) 0xab, (byte) 0x54, (byte) 0x4d, (byte) 0xd1, (byte) 0xf4, (byte) 0x6b, (byte) 0x83,
8275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x31, (byte) 0x17, (byte) 0xed, (byte) 0x26, (byte) 0xe9, (byte) 0xd2, (byte) 0x5b, (byte) 0xad,
8285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x42, (byte) 0x42, (byte) 0xa5, (byte) 0x8f, (byte) 0x98, (byte) 0x7c, (byte) 0x1b, (byte) 0x5c,
8295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x8e, (byte) 0x88, (byte) 0x56, (byte) 0x20, (byte) 0x8e, (byte) 0x48, (byte) 0xf9, (byte) 0x4d,
8305b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x82, (byte) 0x91, (byte) 0xcb, (byte) 0xc8, (byte) 0x1c, (byte) 0x7c, (byte) 0xa5, (byte) 0x69,
8315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1b, (byte) 0x40, (byte) 0xc2, (byte) 0x4c, (byte) 0x25, (byte) 0x16, (byte) 0x4f, (byte) 0xfa,
8325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x09, (byte) 0xeb, (byte) 0xf5, (byte) 0x6c, (byte) 0x55, (byte) 0x3c, (byte) 0x6e, (byte) 0xf7,
8335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0xc1, (byte) 0x34, (byte) 0xd1, (byte) 0x53, (byte) 0xa3, (byte) 0x69, (byte) 0x64,
8345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xee, (byte) 0xf4, (byte) 0xf9, (byte) 0xc7, (byte) 0x96, (byte) 0x60, (byte) 0x84, (byte) 0x87,
8355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb4, (byte) 0xc7, (byte) 0x3c, (byte) 0x26, (byte) 0xa7, (byte) 0x3a, (byte) 0xbf, (byte) 0x95,
8365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
8375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
8385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final byte[] MD5withRSA_Vector2Signature = new byte[] {
8395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x04, (byte) 0x17, (byte) 0x83, (byte) 0x10, (byte) 0xe2, (byte) 0x6e, (byte) 0xdf, (byte) 0xa9,
8405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xae, (byte) 0xd2, (byte) 0xdc, (byte) 0x5f, (byte) 0x70, (byte) 0x1d, (byte) 0xaf, (byte) 0x54,
8415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0x5f, (byte) 0x0b, (byte) 0x2c, (byte) 0xe6, (byte) 0xd0, (byte) 0x00, (byte) 0x18,
8425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4c, (byte) 0xf6, (byte) 0x8f, (byte) 0x18, (byte) 0x10, (byte) 0x74, (byte) 0x90, (byte) 0x99,
8435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa9, (byte) 0x90, (byte) 0x3c, (byte) 0x5a, (byte) 0x38, (byte) 0xd3, (byte) 0x3d, (byte) 0x48,
8445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xcf, (byte) 0x31, (byte) 0xaf, (byte) 0x12, (byte) 0x98, (byte) 0xfb, (byte) 0x66, (byte) 0xe8,
8455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x58, (byte) 0xec, (byte) 0xca, (byte) 0xe1, (byte) 0x42, (byte) 0xf9, (byte) 0x84, (byte) 0x17,
8465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x6f, (byte) 0x4c, (byte) 0x3e, (byte) 0xc4, (byte) 0x40, (byte) 0xc6, (byte) 0x70, (byte) 0xb0,
8475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x38, (byte) 0xf3, (byte) 0x47, (byte) 0xeb, (byte) 0x6f, (byte) 0xcb, (byte) 0xea, (byte) 0x21,
8485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x41, (byte) 0xf3, (byte) 0xa0, (byte) 0x3e, (byte) 0x42, (byte) 0xad, (byte) 0xa5, (byte) 0xad,
8495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x5d, (byte) 0x2c, (byte) 0x1a, (byte) 0x8e, (byte) 0x3e, (byte) 0xb3, (byte) 0xa5, (byte) 0x78,
8505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3d, (byte) 0x56, (byte) 0x09, (byte) 0x93, (byte) 0xc9, (byte) 0x93, (byte) 0xd3, (byte) 0xd2,
8515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x9a, (byte) 0xc5, (byte) 0xa5, (byte) 0x2e, (byte) 0xb2, (byte) 0xd8, (byte) 0x37, (byte) 0xc7,
8525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x13, (byte) 0x1a, (byte) 0x0b, (byte) 0xda, (byte) 0x50, (byte) 0x28, (byte) 0x6d, (byte) 0x47,
8535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x65, (byte) 0x52, (byte) 0xcd, (byte) 0xe7, (byte) 0xec, (byte) 0x57, (byte) 0x00, (byte) 0x41,
8545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x34, (byte) 0x28, (byte) 0xb9, (byte) 0x8b, (byte) 0x03, (byte) 0x41, (byte) 0xb6, (byte) 0xd5,
8555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xa8, (byte) 0xef, (byte) 0xd3, (byte) 0xdd, (byte) 0x80, (byte) 0xd5, (byte) 0x69, (byte) 0xe4,
8565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf0, (byte) 0x4d, (byte) 0xa4, (byte) 0x7d, (byte) 0x60, (byte) 0x2f, (byte) 0xef, (byte) 0x79,
8575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x07, (byte) 0x75, (byte) 0xeb, (byte) 0xf7, (byte) 0x4b, (byte) 0x43, (byte) 0x41, (byte) 0xdb,
8585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x33, (byte) 0xad, (byte) 0x9c, (byte) 0x7b, (byte) 0x78, (byte) 0x83, (byte) 0x34, (byte) 0x77,
8595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe4, (byte) 0x80, (byte) 0xbe, (byte) 0xe6, (byte) 0x6f, (byte) 0xdd, (byte) 0xac, (byte) 0xa5,
8605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x37, (byte) 0xcf, (byte) 0xb5, (byte) 0x44, (byte) 0x11, (byte) 0x77, (byte) 0x96, (byte) 0x45,
8615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf9, (byte) 0xae, (byte) 0x48, (byte) 0xa6, (byte) 0xbe, (byte) 0x30, (byte) 0x32, (byte) 0xeb,
8625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x43, (byte) 0x6f, (byte) 0x66, (byte) 0x39, (byte) 0x57, (byte) 0xf8, (byte) 0xe6, (byte) 0x60,
8635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x31, (byte) 0xd0, (byte) 0xfc, (byte) 0xcf, (byte) 0x9f, (byte) 0xe5, (byte) 0x3d, (byte) 0xcf,
8645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xbd, (byte) 0x7b, (byte) 0x13, (byte) 0x20, (byte) 0xce, (byte) 0x11, (byte) 0xfd, (byte) 0xe5,
8655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xff, (byte) 0x90, (byte) 0x85, (byte) 0xdf, (byte) 0xca, (byte) 0x3d, (byte) 0xd9, (byte) 0x44,
8665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x16, (byte) 0xc2, (byte) 0x32, (byte) 0x28, (byte) 0xc7, (byte) 0x01, (byte) 0x6d, (byte) 0xea,
8675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xcb, (byte) 0x0d, (byte) 0x85, (byte) 0x08, (byte) 0x6f, (byte) 0xcb, (byte) 0x41, (byte) 0x6a,
8685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3c, (byte) 0x0f, (byte) 0x3d, (byte) 0x38, (byte) 0xb5, (byte) 0x61, (byte) 0xc5, (byte) 0x64,
8695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x64, (byte) 0x81, (byte) 0x4c, (byte) 0xcd, (byte) 0xd1, (byte) 0x6a, (byte) 0x87, (byte) 0x28,
8705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x02, (byte) 0xaf, (byte) 0x8f, (byte) 0x59, (byte) 0xe5, (byte) 0x67, (byte) 0x25, (byte) 0x00,
8715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
8725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
8737501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    /*
8747501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root     * openssl rsautl -raw -sign -inkey rsa.key | recode ../x1 | sed 's/0x/(byte) 0x/g'
8757501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root     */
8767501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    private static final byte[] NONEwithRSA_Vector1Signature = new byte[] {
8777501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x35, (byte) 0x43, (byte) 0x38, (byte) 0x44, (byte) 0xAD, (byte) 0x3F,
8787501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x97, (byte) 0x02, (byte) 0xFB, (byte) 0x59, (byte) 0x1F, (byte) 0x4A,
8797501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x2B, (byte) 0xB9, (byte) 0x06, (byte) 0xEC, (byte) 0x66, (byte) 0xE6,
8807501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xD2, (byte) 0xC5, (byte) 0x8B, (byte) 0x7B, (byte) 0xE3, (byte) 0x18,
8817501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xBF, (byte) 0x07, (byte) 0xD6, (byte) 0x01, (byte) 0xF9, (byte) 0xD9,
8827501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x89, (byte) 0xC4, (byte) 0xDB, (byte) 0x00, (byte) 0x68, (byte) 0xFF,
8837501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x9B, (byte) 0x43, (byte) 0x90, (byte) 0xF2, (byte) 0xDB, (byte) 0x83,
8847501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xF4, (byte) 0x7E, (byte) 0xC6, (byte) 0x81, (byte) 0x01, (byte) 0x3A,
8857501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x0B, (byte) 0xE5, (byte) 0xED, (byte) 0x08, (byte) 0x73, (byte) 0x3E,
8867501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xE1, (byte) 0x3F, (byte) 0xDF, (byte) 0x1F, (byte) 0x07, (byte) 0x6D,
8877501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x22, (byte) 0x8D, (byte) 0xCC, (byte) 0x4E, (byte) 0xE3, (byte) 0x9A,
8887501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xBC, (byte) 0xCC, (byte) 0x8F, (byte) 0x9E, (byte) 0x9B, (byte) 0x02,
8897501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x48, (byte) 0x00, (byte) 0xAC, (byte) 0x9F, (byte) 0xA4, (byte) 0x8F,
8907501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x87, (byte) 0xA1, (byte) 0xA8, (byte) 0xE6, (byte) 0x9D, (byte) 0xCD,
8917501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x8B, (byte) 0x05, (byte) 0xE9, (byte) 0xD2, (byte) 0x05, (byte) 0x8D,
8927501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xC9, (byte) 0x95, (byte) 0x16, (byte) 0xD0, (byte) 0xCD, (byte) 0x43,
8937501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x25, (byte) 0x8A, (byte) 0x11, (byte) 0x46, (byte) 0xD7, (byte) 0x74,
8947501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x4C, (byte) 0xCF, (byte) 0x58, (byte) 0xF9, (byte) 0xA1, (byte) 0x30,
8957501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x84, (byte) 0x52, (byte) 0xC9, (byte) 0x01, (byte) 0x5F, (byte) 0x24,
8967501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x4C, (byte) 0xB1, (byte) 0x9F, (byte) 0x7D, (byte) 0x12, (byte) 0x38,
8977501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x27, (byte) 0x0F, (byte) 0x5E, (byte) 0xFF, (byte) 0xE0, (byte) 0x55,
8987501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x8B, (byte) 0xA3, (byte) 0xAD, (byte) 0x60, (byte) 0x35, (byte) 0x83,
8997501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x58, (byte) 0xAF, (byte) 0x99, (byte) 0xDE, (byte) 0x3F, (byte) 0x5D,
9007501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x80, (byte) 0x80, (byte) 0xFF, (byte) 0x9B, (byte) 0xDE, (byte) 0x5C,
9017501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xAB, (byte) 0x97, (byte) 0x43, (byte) 0x64, (byte) 0xD9, (byte) 0x9F,
9027501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xFB, (byte) 0x67, (byte) 0x65, (byte) 0xA5, (byte) 0x99, (byte) 0xE7,
9037501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xE6, (byte) 0xEB, (byte) 0x05, (byte) 0x95, (byte) 0xFC, (byte) 0x46,
9047501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x28, (byte) 0x4B, (byte) 0xD8, (byte) 0x8C, (byte) 0xF5, (byte) 0x0A,
9057501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xEB, (byte) 0x1F, (byte) 0x30, (byte) 0xEA, (byte) 0xE7, (byte) 0x67,
9067501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x11, (byte) 0x25, (byte) 0xF0, (byte) 0x44, (byte) 0x75, (byte) 0x74,
9077501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x94, (byte) 0x06, (byte) 0x78, (byte) 0xD0, (byte) 0x21, (byte) 0xF4,
9087501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x3F, (byte) 0xC8, (byte) 0xC4, (byte) 0x4A, (byte) 0x57, (byte) 0xBE,
9097501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x02, (byte) 0x3C, (byte) 0x93, (byte) 0xF6, (byte) 0x95, (byte) 0xFB,
9107501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xD1, (byte) 0x77, (byte) 0x8B, (byte) 0x43, (byte) 0xF0, (byte) 0xB9,
9117501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x7D, (byte) 0xE0, (byte) 0x32, (byte) 0xE1, (byte) 0x72, (byte) 0xB5,
9127501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x62, (byte) 0x3F, (byte) 0x86, (byte) 0xC3, (byte) 0xD4, (byte) 0x5F,
9137501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x5E, (byte) 0x54, (byte) 0x1B, (byte) 0x5B, (byte) 0xE6, (byte) 0x74,
9147501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xA1, (byte) 0x0B, (byte) 0xE5, (byte) 0x18, (byte) 0xD2, (byte) 0x4F,
9157501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x93, (byte) 0xF3, (byte) 0x09, (byte) 0x58, (byte) 0xCE, (byte) 0xF0,
9167501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xA3, (byte) 0x61, (byte) 0xE4, (byte) 0x6E, (byte) 0x46, (byte) 0x45,
9177501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0x89, (byte) 0x50, (byte) 0xBD, (byte) 0x03, (byte) 0x3F, (byte) 0x38,
9187501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xDA, (byte) 0x5D, (byte) 0xD0, (byte) 0x1B, (byte) 0x1F, (byte) 0xB1,
9197501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        (byte) 0xEE, (byte) 0x89, (byte) 0x59, (byte) 0xC5,
9207501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    };
9217501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
922906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    /*
923906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha1 -binary -out digest.bin \
924906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
925906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha1 -pkeyopt rsa_pss_saltlen:20 \
926906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
927906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     */
928906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    private static final byte[] SHA1withRSAPSS_Vector2Signature = new byte[] {
929906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x66, (byte) 0xE3, (byte) 0xA5, (byte) 0x20, (byte) 0xE9, (byte) 0x5D,
930906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xDF, (byte) 0x99, (byte) 0xA6, (byte) 0x04, (byte) 0x77, (byte) 0xF8,
931906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x39, (byte) 0x78, (byte) 0x74, (byte) 0xF5, (byte) 0xC2, (byte) 0x4E,
932906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9E, (byte) 0xEB, (byte) 0x24, (byte) 0xDE, (byte) 0xB4, (byte) 0x36,
933906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x69, (byte) 0x1F, (byte) 0xAC, (byte) 0x01, (byte) 0xFF, (byte) 0x5A,
934906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE3, (byte) 0x89, (byte) 0x8A, (byte) 0xE9, (byte) 0x92, (byte) 0x32,
935906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA7, (byte) 0xA4, (byte) 0xC0, (byte) 0x25, (byte) 0x00, (byte) 0x14,
936906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xFF, (byte) 0x38, (byte) 0x19, (byte) 0x37, (byte) 0x84, (byte) 0x1A,
937906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x3D, (byte) 0xCA, (byte) 0xEE, (byte) 0xF3, (byte) 0xC6, (byte) 0x91,
938906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xED, (byte) 0x02, (byte) 0xE6, (byte) 0x1D, (byte) 0x73, (byte) 0xDA,
939906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD4, (byte) 0x55, (byte) 0x93, (byte) 0x54, (byte) 0x9A, (byte) 0xE6,
940906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x2E, (byte) 0x7D, (byte) 0x5C, (byte) 0x41, (byte) 0xAF, (byte) 0xED,
941906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAD, (byte) 0x8E, (byte) 0x7F, (byte) 0x47, (byte) 0x3B, (byte) 0x23,
942906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC3, (byte) 0xB8, (byte) 0xBB, (byte) 0xCD, (byte) 0x87, (byte) 0xC4,
943906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA3, (byte) 0x32, (byte) 0x16, (byte) 0x57, (byte) 0xCC, (byte) 0xB8,
944906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB6, (byte) 0x96, (byte) 0x84, (byte) 0x1A, (byte) 0xBC, (byte) 0xF8,
945906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x09, (byte) 0x53, (byte) 0xB0, (byte) 0x9D, (byte) 0xE1, (byte) 0x6F,
946906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB2, (byte) 0xEB, (byte) 0x83, (byte) 0xDC, (byte) 0x61, (byte) 0x31,
947906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD7, (byte) 0x02, (byte) 0xB4, (byte) 0xD1, (byte) 0xBA, (byte) 0xBD,
948906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF0, (byte) 0x78, (byte) 0xC6, (byte) 0xBE, (byte) 0x1F, (byte) 0xB0,
949906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE1, (byte) 0xCA, (byte) 0x32, (byte) 0x57, (byte) 0x9F, (byte) 0x8C,
950906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD3, (byte) 0xBB, (byte) 0x04, (byte) 0x1B, (byte) 0x30, (byte) 0x74,
951906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x5D, (byte) 0xEA, (byte) 0xD3, (byte) 0x6B, (byte) 0x74, (byte) 0x31,
952906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6F, (byte) 0x33, (byte) 0x5A, (byte) 0x70, (byte) 0x96, (byte) 0x8B,
953906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCB, (byte) 0x22, (byte) 0xF3, (byte) 0xAA, (byte) 0x74, (byte) 0x82,
954906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB2, (byte) 0x82, (byte) 0x71, (byte) 0x4D, (byte) 0x42, (byte) 0x13,
955906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x3F, (byte) 0xEA, (byte) 0xE3, (byte) 0x39, (byte) 0xC5, (byte) 0x03,
956906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x27, (byte) 0xFF, (byte) 0x78, (byte) 0xB2, (byte) 0xA6, (byte) 0x71,
957906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x07, (byte) 0x1C, (byte) 0xB3, (byte) 0x97, (byte) 0xFB, (byte) 0xE8,
958906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x85, (byte) 0x6D, (byte) 0x14, (byte) 0xDF, (byte) 0xF9, (byte) 0x7D,
959906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0D, (byte) 0x0C, (byte) 0x9F, (byte) 0xC3, (byte) 0xE2, (byte) 0xDB,
960906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE0, (byte) 0xA5, (byte) 0x05, (byte) 0xBC, (byte) 0x47, (byte) 0x36,
961906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xEB, (byte) 0x1E, (byte) 0xBA, (byte) 0x60, (byte) 0x12, (byte) 0x19,
962906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA5, (byte) 0x7E, (byte) 0x55, (byte) 0x0C, (byte) 0x9B, (byte) 0xD4,
963906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9A, (byte) 0xE9, (byte) 0x72, (byte) 0x5C, (byte) 0x5B, (byte) 0xF4,
964906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAA, (byte) 0x4A, (byte) 0x12, (byte) 0x8B, (byte) 0xC2, (byte) 0x8E,
965906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC2, (byte) 0x9A, (byte) 0x3E, (byte) 0x0C, (byte) 0x40, (byte) 0xA4,
966906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0A, (byte) 0xFF, (byte) 0xF8, (byte) 0xC1, (byte) 0x85, (byte) 0x59,
967906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xDA, (byte) 0xC6, (byte) 0x8C, (byte) 0x83, (byte) 0x2A, (byte) 0x68,
968906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x84, (byte) 0x53, (byte) 0x17, (byte) 0x28, (byte) 0x78, (byte) 0x3F,
969906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x5A, (byte) 0xA4, (byte) 0x04, (byte) 0xE6, (byte) 0x23, (byte) 0x8D,
970906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x2A, (byte) 0x71, (byte) 0xC1, (byte) 0xBC, (byte) 0x1C, (byte) 0xFD,
971906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x75, (byte) 0x16, (byte) 0x6E, (byte) 0x85,
972906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    };
9730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA1withRSAPSS_Vector2Signature_ParameterSpec =
9740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-1", "MGF1", MGF1ParameterSpec.SHA1, 20, 1);
9750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
9760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
9770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha1 -binary -out digest.bin \
9780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
9790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha1 -pkeyopt rsa_pss_saltlen:0 \
9800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
9810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
9820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA1withRSAPSS_NoSalt_Vector2Signature = new byte[] {
9830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x31, (byte) 0x61, (byte) 0xA5, (byte) 0x47, (byte) 0x28, (byte) 0x44,
9840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x48, (byte) 0x5A, (byte) 0xDA, (byte) 0x78, (byte) 0xA7, (byte) 0x85,
9850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE9, (byte) 0x64, (byte) 0x69, (byte) 0xCF, (byte) 0x14, (byte) 0x07,
9860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3F, (byte) 0xA8, (byte) 0xDB, (byte) 0xFC, (byte) 0xB7, (byte) 0x89,
9870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x87, (byte) 0x74, (byte) 0xB9, (byte) 0x81, (byte) 0x37, (byte) 0x62,
9880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD1, (byte) 0x07, (byte) 0x0F, (byte) 0x3D, (byte) 0xDF, (byte) 0xA8,
9890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x84, (byte) 0x38, (byte) 0x31, (byte) 0xEB, (byte) 0x17, (byte) 0x3F,
9900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE0, (byte) 0x28, (byte) 0x75, (byte) 0x1F, (byte) 0xE9, (byte) 0x4D,
9910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD3, (byte) 0x62, (byte) 0xFA, (byte) 0xCF, (byte) 0xCC, (byte) 0x2E,
9920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC7, (byte) 0x81, (byte) 0xE1, (byte) 0xEA, (byte) 0xEC, (byte) 0x78,
9930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFE, (byte) 0x19, (byte) 0x59, (byte) 0x54, (byte) 0x1D, (byte) 0x27,
9940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xED, (byte) 0x0C, (byte) 0x54, (byte) 0xDF, (byte) 0xE3, (byte) 0x44,
9950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x31, (byte) 0x21, (byte) 0x31, (byte) 0xA7, (byte) 0x23, (byte) 0xC4,
9960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE2, (byte) 0x69, (byte) 0x8A, (byte) 0xB3, (byte) 0x1A, (byte) 0x72,
9970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4F, (byte) 0x4E, (byte) 0x82, (byte) 0x86, (byte) 0x2D, (byte) 0x2B,
9980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x85, (byte) 0xFE, (byte) 0x4A, (byte) 0x28, (byte) 0x90, (byte) 0xF7,
9990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDF, (byte) 0xD6, (byte) 0xB1, (byte) 0x3E, (byte) 0xC6, (byte) 0xFB,
10000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x76, (byte) 0x7B, (byte) 0x3D, (byte) 0x12, (byte) 0x81, (byte) 0x6E,
10010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFD, (byte) 0x00, (byte) 0x7D, (byte) 0xD0, (byte) 0xDC, (byte) 0x25,
10020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD0, (byte) 0x86, (byte) 0x6C, (byte) 0xE8, (byte) 0x0F, (byte) 0x09,
10030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x82, (byte) 0x74, (byte) 0x89, (byte) 0x79, (byte) 0x69, (byte) 0x73,
10040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x37, (byte) 0x64, (byte) 0xEE, (byte) 0x53, (byte) 0x57, (byte) 0x20,
10050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFA, (byte) 0x0B, (byte) 0x4A, (byte) 0x5A, (byte) 0x4D, (byte) 0x33,
10060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAC, (byte) 0x8B, (byte) 0x04, (byte) 0xA5, (byte) 0x4A, (byte) 0x1A,
10070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9B, (byte) 0x66, (byte) 0xAA, (byte) 0x0B, (byte) 0x3D, (byte) 0x15,
10080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD9, (byte) 0x3E, (byte) 0x2F, (byte) 0xD2, (byte) 0xA1, (byte) 0x28,
10090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x13, (byte) 0x59, (byte) 0x98, (byte) 0xC3, (byte) 0x45, (byte) 0x7C,
10100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEE, (byte) 0x60, (byte) 0xD0, (byte) 0xBD, (byte) 0x42, (byte) 0x16,
10110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x84, (byte) 0x19, (byte) 0xF6, (byte) 0xD9, (byte) 0xF7, (byte) 0x7D,
10120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x77, (byte) 0xAD, (byte) 0x60, (byte) 0xE2, (byte) 0xE3, (byte) 0x22,
10130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB9, (byte) 0xFA, (byte) 0xD5, (byte) 0xFA, (byte) 0x6E, (byte) 0x1F,
10140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x69, (byte) 0x3F, (byte) 0xB1, (byte) 0xA7, (byte) 0x1A, (byte) 0x22,
10150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF7, (byte) 0x31, (byte) 0x97, (byte) 0x68, (byte) 0x62, (byte) 0x0F,
10160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x39, (byte) 0xB0, (byte) 0xE7, (byte) 0x63, (byte) 0xAE, (byte) 0x65,
10170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x69, (byte) 0xD0, (byte) 0xD3, (byte) 0x56, (byte) 0xC9, (byte) 0xA6,
10180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA4, (byte) 0xA5, (byte) 0xA4, (byte) 0x61, (byte) 0xA9, (byte) 0xC4,
10190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x45, (byte) 0xCD, (byte) 0x49, (byte) 0x76, (byte) 0xC8, (byte) 0x53,
10200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x46, (byte) 0xD0, (byte) 0x63, (byte) 0x35, (byte) 0x89, (byte) 0x04,
10210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x22, (byte) 0xD7, (byte) 0xB6, (byte) 0x63, (byte) 0xAF, (byte) 0xC2,
10220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x97, (byte) 0x10, (byte) 0xDF, (byte) 0xDE, (byte) 0xE6, (byte) 0x39,
10230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x25, (byte) 0x2F, (byte) 0xEA, (byte) 0xD8, (byte) 0x56, (byte) 0x5A,
10240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC1, (byte) 0xB8, (byte) 0xCA, (byte) 0xC1, (byte) 0x8A, (byte) 0xB8,
10250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x87, (byte) 0x2F, (byte) 0xCD, (byte) 0x21,
10260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
10270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA1withRSAPSS_NoSalt_Vector2Signature_ParameterSpec =
10280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-1", "MGF1", MGF1ParameterSpec.SHA1, 0, 1);
10290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
10300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
10310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha1 -binary -out digest.bin \
10320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
10330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha1 -pkeyopt rsa_pss_saltlen:234 \
10340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
10350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
10360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA1withRSAPSS_MaxSalt_Vector2Signature = new byte[] {
10370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x49, (byte) 0xDB, (byte) 0xAD, (byte) 0x48, (byte) 0x7C, (byte) 0x06,
10380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x03, (byte) 0x7C, (byte) 0x58, (byte) 0xE1, (byte) 0x38, (byte) 0x20,
10390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x46, (byte) 0x28, (byte) 0x60, (byte) 0x64, (byte) 0x94, (byte) 0x51,
10400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA3, (byte) 0xD1, (byte) 0xC9, (byte) 0x52, (byte) 0xC6, (byte) 0x2A,
10410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB3, (byte) 0xCC, (byte) 0xD6, (byte) 0x19, (byte) 0x50, (byte) 0x99,
10420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x60, (byte) 0x58, (byte) 0xA2, (byte) 0x86, (byte) 0xA8, (byte) 0x74,
10430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x50, (byte) 0x8C, (byte) 0x0E, (byte) 0x32, (byte) 0x58, (byte) 0x56,
10440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6D, (byte) 0x30, (byte) 0x38, (byte) 0xFB, (byte) 0x26, (byte) 0xC3,
10450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFD, (byte) 0x8E, (byte) 0x36, (byte) 0x73, (byte) 0x82, (byte) 0x9A,
10460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB4, (byte) 0xE5, (byte) 0x22, (byte) 0x96, (byte) 0x55, (byte) 0x3C,
10470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x18, (byte) 0xD7, (byte) 0x46, (byte) 0xF1, (byte) 0x7C, (byte) 0xE6,
10480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8E, (byte) 0x0A, (byte) 0x18, (byte) 0xA7, (byte) 0x29, (byte) 0x96,
10490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8D, (byte) 0xFC, (byte) 0x0E, (byte) 0xBE, (byte) 0x91, (byte) 0xA0,
10500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF8, (byte) 0xE2, (byte) 0x70, (byte) 0x5A, (byte) 0xE3, (byte) 0x76,
10510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAC, (byte) 0x18, (byte) 0x10, (byte) 0xB4, (byte) 0xB1, (byte) 0xFF,
10520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x58, (byte) 0xBC, (byte) 0x10, (byte) 0xF5, (byte) 0x88, (byte) 0x2F,
10530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0B, (byte) 0x10, (byte) 0x9D, (byte) 0x52, (byte) 0x2D, (byte) 0x42,
10540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDB, (byte) 0xFD, (byte) 0xA7, (byte) 0x23, (byte) 0x3C, (byte) 0x4B,
10550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB3, (byte) 0xD2, (byte) 0x96, (byte) 0x1B, (byte) 0xCE, (byte) 0xB3,
10560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA3, (byte) 0xC3, (byte) 0x42, (byte) 0xA4, (byte) 0x0E, (byte) 0x35,
10570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5C, (byte) 0xC2, (byte) 0x32, (byte) 0xC7, (byte) 0x8C, (byte) 0xFC,
10580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7F, (byte) 0xE0, (byte) 0xF7, (byte) 0x1D, (byte) 0x38, (byte) 0x21,
10590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3C, (byte) 0xDF, (byte) 0x82, (byte) 0x1A, (byte) 0xBD, (byte) 0x83,
10600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE9, (byte) 0x56, (byte) 0xF0, (byte) 0xF1, (byte) 0x54, (byte) 0x76,
10610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE3, (byte) 0xCE, (byte) 0x86, (byte) 0x69, (byte) 0xC2, (byte) 0x61,
10620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6D, (byte) 0x8E, (byte) 0xF5, (byte) 0xA3, (byte) 0x61, (byte) 0xCA,
10630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x16, (byte) 0xCB, (byte) 0x7A, (byte) 0xF5, (byte) 0xBF, (byte) 0x36,
10640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCB, (byte) 0x7D, (byte) 0xB1, (byte) 0xE9, (byte) 0x70, (byte) 0x41,
10650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCF, (byte) 0x89, (byte) 0x51, (byte) 0x13, (byte) 0xCC, (byte) 0x95,
10660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x50, (byte) 0xC8, (byte) 0xB6, (byte) 0x30, (byte) 0x35, (byte) 0xE3,
10670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x13, (byte) 0x08, (byte) 0xF6, (byte) 0xBE, (byte) 0x20, (byte) 0xF1,
10680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x48, (byte) 0x4D, (byte) 0x46, (byte) 0x95, (byte) 0xFE, (byte) 0x9E,
10690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD2, (byte) 0xD5, (byte) 0x29, (byte) 0x81, (byte) 0x2E, (byte) 0x0F,
10700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6F, (byte) 0xA7, (byte) 0x02, (byte) 0x15, (byte) 0xCA, (byte) 0x75,
10710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x77, (byte) 0x29, (byte) 0x7C, (byte) 0x3A, (byte) 0xE3, (byte) 0x2B,
10720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD7, (byte) 0x3D, (byte) 0x5C, (byte) 0x94, (byte) 0x3B, (byte) 0x2A,
10730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x91, (byte) 0xDB, (byte) 0xFA, (byte) 0x69, (byte) 0x47, (byte) 0x1C,
10740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2C, (byte) 0x46, (byte) 0x49, (byte) 0xE6, (byte) 0x37, (byte) 0x5D,
10750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x78, (byte) 0x71, (byte) 0x76, (byte) 0xC1, (byte) 0xB6, (byte) 0x2E,
10760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4E, (byte) 0x3C, (byte) 0x83, (byte) 0x6F, (byte) 0x82, (byte) 0xC3,
10770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD8, (byte) 0x50, (byte) 0xD7, (byte) 0x1B, (byte) 0xAF, (byte) 0xF9,
10780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE3, (byte) 0xF1, (byte) 0x47, (byte) 0xC8, (byte) 0x12, (byte) 0x86,
10790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x82, (byte) 0x9D, (byte) 0x3F, (byte) 0xCE,
10800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
10810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA1withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec =
10820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-1", "MGF1", MGF1ParameterSpec.SHA1, 234, 1);
1083906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1084906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    /*
1085906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha224 -binary -out digest.bin \
1086906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
1087906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha224 -pkeyopt rsa_pss_saltlen:28 \
1088906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
1089906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     */
1090906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    private static final byte[] SHA224withRSAPSS_Vector2Signature = new byte[] {
1091906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x86, (byte) 0x41, (byte) 0xCC, (byte) 0x4B, (byte) 0x82, (byte) 0x74,
1092906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x04, (byte) 0x43, (byte) 0x8C, (byte) 0xAB, (byte) 0xF6, (byte) 0x3B,
1093906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xFB, (byte) 0x94, (byte) 0xBC, (byte) 0x4C, (byte) 0x0A, (byte) 0xFE,
1094906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0F, (byte) 0x4F, (byte) 0x0F, (byte) 0x9F, (byte) 0x84, (byte) 0x35,
1095906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x57, (byte) 0x8B, (byte) 0x8D, (byte) 0xC3, (byte) 0x58, (byte) 0xA6,
1096906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x70, (byte) 0xAC, (byte) 0x40, (byte) 0x6D, (byte) 0xBC, (byte) 0xC1,
1097906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6A, (byte) 0xFA, (byte) 0x31, (byte) 0x3B, (byte) 0x7A, (byte) 0x23,
1098906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCA, (byte) 0x1F, (byte) 0xCD, (byte) 0xA7, (byte) 0xE3, (byte) 0xD6,
1099906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x7C, (byte) 0x2C, (byte) 0xF3, (byte) 0x6F, (byte) 0xF5, (byte) 0x82,
1100906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9E, (byte) 0x18, (byte) 0x70, (byte) 0x90, (byte) 0xE6, (byte) 0xA3,
1101906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x44, (byte) 0x61, (byte) 0xB6, (byte) 0x46, (byte) 0x9B, (byte) 0x0D,
1102906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE5, (byte) 0x3C, (byte) 0xAE, (byte) 0x22, (byte) 0xF4, (byte) 0x87,
1103906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB7, (byte) 0x03, (byte) 0xD8, (byte) 0x42, (byte) 0x33, (byte) 0x4E,
1104906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCC, (byte) 0x7A, (byte) 0xDF, (byte) 0xD7, (byte) 0x57, (byte) 0xEB,
1105906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x51, (byte) 0x6C, (byte) 0xB1, (byte) 0x99, (byte) 0x4D, (byte) 0x94,
1106906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x82, (byte) 0xA7, (byte) 0x69, (byte) 0x85, (byte) 0x8D, (byte) 0x82,
1107906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x18, (byte) 0xE4, (byte) 0x53, (byte) 0xF5, (byte) 0x9F, (byte) 0x82,
1108906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x1C, (byte) 0xE1, (byte) 0x25, (byte) 0x1C, (byte) 0x8E, (byte) 0xE7,
1109906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC1, (byte) 0xEC, (byte) 0xBE, (byte) 0x3F, (byte) 0xC3, (byte) 0xED,
1110906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x41, (byte) 0x89, (byte) 0x94, (byte) 0x13, (byte) 0x11, (byte) 0x75,
1111906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x3F, (byte) 0x38, (byte) 0x52, (byte) 0x58, (byte) 0xAB, (byte) 0x88,
1112906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x01, (byte) 0x30, (byte) 0xB4, (byte) 0xCD, (byte) 0x45, (byte) 0x3E,
1113906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x1A, (byte) 0x5F, (byte) 0x36, (byte) 0xF8, (byte) 0x51, (byte) 0x90,
1114906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6E, (byte) 0x6F, (byte) 0x31, (byte) 0x9D, (byte) 0x40, (byte) 0x90,
1115906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x1A, (byte) 0xA8, (byte) 0x10, (byte) 0xEF, (byte) 0x9D, (byte) 0xF8,
1116906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB0, (byte) 0x03, (byte) 0x01, (byte) 0xFB, (byte) 0xD8, (byte) 0x3D,
1117906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x83, (byte) 0x79, (byte) 0x01, (byte) 0xA7, (byte) 0x82, (byte) 0xC2,
1118906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x46, (byte) 0x35, (byte) 0x68, (byte) 0xD2, (byte) 0x08, (byte) 0x81,
1119906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x31, (byte) 0x14, (byte) 0xE8, (byte) 0x13, (byte) 0x8C, (byte) 0xD4,
1120906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC4, (byte) 0xCB, (byte) 0xB9, (byte) 0x85, (byte) 0x25, (byte) 0x93,
1121906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x40, (byte) 0x88, (byte) 0x34, (byte) 0x11, (byte) 0xDA, (byte) 0xFF,
1122906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xEF, (byte) 0x4D, (byte) 0xDC, (byte) 0x31, (byte) 0x74, (byte) 0x7B,
1123906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x5E, (byte) 0xA7, (byte) 0x51, (byte) 0x15, (byte) 0x13, (byte) 0xB1,
1124906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9E, (byte) 0x06, (byte) 0x51, (byte) 0xBA, (byte) 0x11, (byte) 0xDA,
1125906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x64, (byte) 0x1B, (byte) 0x78, (byte) 0x76, (byte) 0x57, (byte) 0x96,
1126906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF3, (byte) 0x1B, (byte) 0x86, (byte) 0xB2, (byte) 0xF3, (byte) 0x66,
1127906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x64, (byte) 0x2B, (byte) 0x04, (byte) 0x81, (byte) 0x8C, (byte) 0xDC,
1128906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE0, (byte) 0xEA, (byte) 0x66, (byte) 0x62, (byte) 0x44, (byte) 0x31,
1129906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA2, (byte) 0x19, (byte) 0xF1, (byte) 0x77, (byte) 0x67, (byte) 0x58,
1130906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x18, (byte) 0x5B, (byte) 0xCB, (byte) 0xBA, (byte) 0x28, (byte) 0x91,
1131906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x47, (byte) 0x5B, (byte) 0x4F, (byte) 0x17, (byte) 0x23, (byte) 0x2A,
1132906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE4, (byte) 0xB0, (byte) 0xAE, (byte) 0x82, (byte) 0x4E, (byte) 0xCA,
1133906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA6, (byte) 0x12, (byte) 0xCA, (byte) 0x70,
1134906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    };
11350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA224withRSAPSS_Vector2Signature_ParameterSpec =
11360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), 28, 1);
11370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
11380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
11390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha224 -binary -out digest.bin \
11400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
11410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha224 -pkeyopt rsa_pss_saltlen:0 \
11420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
11430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
11440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA224withRSAPSS_NoSalt_Vector2Signature = new byte[] {
11450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD8, (byte) 0x38, (byte) 0x48, (byte) 0xCD, (byte) 0xA4, (byte) 0x09,
11460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x36, (byte) 0x35, (byte) 0x47, (byte) 0x55, (byte) 0xDB, (byte) 0x6C,
11470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2D, (byte) 0x83, (byte) 0x17, (byte) 0x10, (byte) 0x3E, (byte) 0xCE,
11480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x95, (byte) 0x02, (byte) 0x58, (byte) 0xCE, (byte) 0xA8, (byte) 0x02,
11490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x44, (byte) 0xB7, (byte) 0xE4, (byte) 0x32, (byte) 0x3D, (byte) 0x50,
11500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE1, (byte) 0x8C, (byte) 0xF3, (byte) 0x24, (byte) 0x6F, (byte) 0xA4,
11510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2D, (byte) 0xD7, (byte) 0xFB, (byte) 0x70, (byte) 0x97, (byte) 0xBE,
11520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xED, (byte) 0x27, (byte) 0x2D, (byte) 0x22, (byte) 0xDC, (byte) 0x62,
11530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x97, (byte) 0x66, (byte) 0x39, (byte) 0xE0, (byte) 0x36, (byte) 0x5F,
11540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x07, (byte) 0x78, (byte) 0xAF, (byte) 0x5E, (byte) 0xDC, (byte) 0xFD,
11550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x21, (byte) 0xA8, (byte) 0xD5, (byte) 0xA7, (byte) 0xD1, (byte) 0xBA,
11560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x1C, (byte) 0xDA, (byte) 0xCA, (byte) 0x80, (byte) 0x72, (byte) 0x8A,
11570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDD, (byte) 0x5C, (byte) 0x16, (byte) 0x6A, (byte) 0x47, (byte) 0xFC,
11580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x11, (byte) 0x42, (byte) 0x7E, (byte) 0x4E, (byte) 0x3F, (byte) 0x49,
11590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCF, (byte) 0x2F, (byte) 0x54, (byte) 0xD7, (byte) 0x13, (byte) 0x76,
11600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0xE9, (byte) 0x2A, (byte) 0x29, (byte) 0xCC, (byte) 0x73,
11610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDB, (byte) 0xE5, (byte) 0xDE, (byte) 0x48, (byte) 0xA2, (byte) 0xE9,
11620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD1, (byte) 0xD0, (byte) 0x35, (byte) 0xFE, (byte) 0xA1, (byte) 0x1C,
11630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x13, (byte) 0x04, (byte) 0x75, (byte) 0x77, (byte) 0xF4, (byte) 0x55,
11640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x03, (byte) 0xC4, (byte) 0x6D, (byte) 0xAC, (byte) 0x25, (byte) 0x1D,
11650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x57, (byte) 0xFF, (byte) 0x0D, (byte) 0xE0, (byte) 0x91, (byte) 0xEA,
11660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF6, (byte) 0x1F, (byte) 0x3F, (byte) 0x69, (byte) 0xD6, (byte) 0x00,
11670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBD, (byte) 0x89, (byte) 0xEA, (byte) 0xD3, (byte) 0x31, (byte) 0x80,
11680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5E, (byte) 0x04, (byte) 0x4C, (byte) 0x59, (byte) 0xDE, (byte) 0xD0,
11690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x62, (byte) 0x93, (byte) 0x3B, (byte) 0xC9, (byte) 0x9F, (byte) 0xE7,
11700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x69, (byte) 0xC0, (byte) 0xB8, (byte) 0xED, (byte) 0xBF, (byte) 0x0D,
11710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x60, (byte) 0x28, (byte) 0x55, (byte) 0x20, (byte) 0x0C, (byte) 0x9F,
11720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA2, (byte) 0x42, (byte) 0x34, (byte) 0x95, (byte) 0xAE, (byte) 0xF8,
11730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x67, (byte) 0x7C, (byte) 0xF1, (byte) 0xA0, (byte) 0xC0, (byte) 0x74,
11740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF2, (byte) 0xDF, (byte) 0x75, (byte) 0x5B, (byte) 0x6E, (byte) 0x2F,
11750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFB, (byte) 0x1F, (byte) 0xDD, (byte) 0xC3, (byte) 0xD3, (byte) 0x90,
11760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0A, (byte) 0x33, (byte) 0xF6, (byte) 0x03, (byte) 0x16, (byte) 0xC4,
11770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF8, (byte) 0xED, (byte) 0xB7, (byte) 0x45, (byte) 0x39, (byte) 0x5D,
11780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7C, (byte) 0xF8, (byte) 0x82, (byte) 0xCE, (byte) 0x7D, (byte) 0xFB,
11790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x02, (byte) 0x2D, (byte) 0xE0, (byte) 0x96, (byte) 0x35, (byte) 0x60,
11800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0xBC, (byte) 0x35, (byte) 0x80, (byte) 0x4C, (byte) 0x39,
11810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7C, (byte) 0xE7, (byte) 0xD4, (byte) 0xB4, (byte) 0x19, (byte) 0xD1,
11820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE5, (byte) 0x8E, (byte) 0x6D, (byte) 0x25, (byte) 0x0C, (byte) 0xB9,
11830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0C, (byte) 0x8D, (byte) 0x45, (byte) 0xE4, (byte) 0x67, (byte) 0x73,
11840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCF, (byte) 0x87, (byte) 0x7C, (byte) 0x78, (byte) 0xAA, (byte) 0xB9,
11850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x42, (byte) 0xAE, (byte) 0x7F, (byte) 0xB8, (byte) 0xEC, (byte) 0x4F,
11860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD2, (byte) 0x85, (byte) 0x01, (byte) 0x80, (byte) 0x00, (byte) 0xBD,
11870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF5, (byte) 0xEA, (byte) 0x44, (byte) 0x6D,
11880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
11890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA224withRSAPSS_NoSalt_Vector2Signature_ParameterSpec =
11900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), 0, 1);
11910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
11920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
11930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha224 -binary -out digest.bin \
11940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
11950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha224 -pkeyopt rsa_pss_saltlen:226 \
11960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
11970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
11980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA224withRSAPSS_MaxSalt_Vector2Signature = new byte[] {
11990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2C, (byte) 0x19, (byte) 0x5E, (byte) 0x63, (byte) 0xC5, (byte) 0x32,
12000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC3, (byte) 0xC7, (byte) 0x52, (byte) 0xE9, (byte) 0x69, (byte) 0x4C,
12010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x04, (byte) 0xE5, (byte) 0x4A, (byte) 0xF2, (byte) 0x72, (byte) 0x78,
12020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBF, (byte) 0xC5, (byte) 0x8D, (byte) 0x5A, (byte) 0x71, (byte) 0xEF,
12030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA9, (byte) 0x58, (byte) 0x77, (byte) 0x94, (byte) 0x49, (byte) 0x71,
12040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBF, (byte) 0x45, (byte) 0x3E, (byte) 0xA4, (byte) 0x2E, (byte) 0x33,
12050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9B, (byte) 0x4E, (byte) 0xA4, (byte) 0x95, (byte) 0x07, (byte) 0x9C,
12060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAA, (byte) 0xC4, (byte) 0xA8, (byte) 0x60, (byte) 0xBC, (byte) 0xCD,
12070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC3, (byte) 0x45, (byte) 0xE6, (byte) 0xBC, (byte) 0xAD, (byte) 0xB6,
12080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF3, (byte) 0x0E, (byte) 0xF6, (byte) 0xD5, (byte) 0xCF, (byte) 0x33,
12090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA3, (byte) 0x82, (byte) 0x62, (byte) 0x52, (byte) 0x95, (byte) 0xA8,
12100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0E, (byte) 0xD4, (byte) 0xAC, (byte) 0x1F, (byte) 0x9A, (byte) 0xDC,
12110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x00, (byte) 0xD6, (byte) 0x78, (byte) 0xEA, (byte) 0x53, (byte) 0x00,
12120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x19, (byte) 0xE3, (byte) 0x81, (byte) 0x7C, (byte) 0x7A, (byte) 0x8E,
12130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x30, (byte) 0x57, (byte) 0xB7, (byte) 0x81, (byte) 0xD7, (byte) 0x4D,
12140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x1D, (byte) 0xCB, (byte) 0x99, (byte) 0x8D, (byte) 0xE4, (byte) 0xFA,
12150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6E, (byte) 0x4E, (byte) 0xA6, (byte) 0xDA, (byte) 0x13, (byte) 0x92,
12160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x31, (byte) 0x7C, (byte) 0x2B, (byte) 0x3A, (byte) 0xA0, (byte) 0xF1,
12170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x03, (byte) 0x83, (byte) 0x12, (byte) 0xD1, (byte) 0x23, (byte) 0xED,
12180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC4, (byte) 0x01, (byte) 0x57, (byte) 0x63, (byte) 0xAF, (byte) 0x40,
12190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x15, (byte) 0xEC, (byte) 0xB8, (byte) 0x5A, (byte) 0xCE, (byte) 0x3D,
12200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3E, (byte) 0xCD, (byte) 0xD8, (byte) 0xF3, (byte) 0x76, (byte) 0xCA,
12210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x23, (byte) 0x20, (byte) 0x68, (byte) 0x17, (byte) 0x5B, (byte) 0x7F,
12220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBC, (byte) 0x22, (byte) 0x67, (byte) 0x2A, (byte) 0x91, (byte) 0x05,
12230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB3, (byte) 0x85, (byte) 0x60, (byte) 0xD8, (byte) 0x76, (byte) 0xD5,
12240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2B, (byte) 0x9C, (byte) 0x80, (byte) 0xB6, (byte) 0xEA, (byte) 0x1E,
12250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x05, (byte) 0xC7, (byte) 0x95, (byte) 0x2C, (byte) 0x4F, (byte) 0x14,
12260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5F, (byte) 0xEE, (byte) 0x08, (byte) 0x32, (byte) 0xF7, (byte) 0x12,
12270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2B, (byte) 0xCD, (byte) 0xF3, (byte) 0x83, (byte) 0x7C, (byte) 0xCE,
12280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x04, (byte) 0x8A, (byte) 0x36, (byte) 0x3D, (byte) 0xB2, (byte) 0x97,
12290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x15, (byte) 0xDB, (byte) 0xD6, (byte) 0xFA, (byte) 0x53, (byte) 0x29,
12300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD1, (byte) 0x43, (byte) 0x55, (byte) 0xDD, (byte) 0xAE, (byte) 0xA7,
12310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB4, (byte) 0x2C, (byte) 0xD9, (byte) 0xA7, (byte) 0x74, (byte) 0xA8,
12320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x08, (byte) 0xD6, (byte) 0xC2, (byte) 0x05, (byte) 0xBF, (byte) 0x67,
12330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3B, (byte) 0xBA, (byte) 0x8D, (byte) 0x99, (byte) 0xC1, (byte) 0x14,
12340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x1A, (byte) 0x32, (byte) 0xCA, (byte) 0xD5, (byte) 0xCC, (byte) 0xF9,
12350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x64, (byte) 0x07, (byte) 0x5B, (byte) 0xB8, (byte) 0xA9, (byte) 0x69,
12360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xED, (byte) 0x01, (byte) 0xCD, (byte) 0xD2, (byte) 0x88, (byte) 0x67,
12370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFF, (byte) 0x92, (byte) 0xA3, (byte) 0xC6, (byte) 0x97, (byte) 0x97,
12380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA1, (byte) 0xC5, (byte) 0x15, (byte) 0xC8, (byte) 0xB6, (byte) 0xFE,
12390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4A, (byte) 0x07, (byte) 0x2E, (byte) 0x46, (byte) 0x3F, (byte) 0x27,
12400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB8, (byte) 0xEE, (byte) 0x69, (byte) 0xCB, (byte) 0xDC, (byte) 0x30,
12410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x19, (byte) 0x77, (byte) 0xC5, (byte) 0xEF,
12420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
12430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA224withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec =
12440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), 226, 1);
1245906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1246906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    /*
1247906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha256 -binary -out digest.bin \
1248906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
1249906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha256 -pkeyopt rsa_pss_saltlen:32 \
1250906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
1251906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     */
1252906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    private static final byte[] SHA256withRSAPSS_Vector2Signature = new byte[] {
1253906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x94, (byte) 0x33, (byte) 0xCB, (byte) 0x9E, (byte) 0x2C, (byte) 0x17,
1254906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x46, (byte) 0xB3, (byte) 0x8F, (byte) 0xB7, (byte) 0x93, (byte) 0x98,
1255906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA3, (byte) 0x45, (byte) 0xEA, (byte) 0xD4, (byte) 0x51, (byte) 0x60,
1256906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x3E, (byte) 0x00, (byte) 0xA3, (byte) 0x93, (byte) 0x05, (byte) 0x0F,
1257906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCB, (byte) 0x6E, (byte) 0xFF, (byte) 0xA5, (byte) 0x97, (byte) 0x18,
1258906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF6, (byte) 0xED, (byte) 0x6B, (byte) 0x6C, (byte) 0xAD, (byte) 0x9C,
1259906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x73, (byte) 0x63, (byte) 0x9C, (byte) 0x5B, (byte) 0xA5, (byte) 0xA1,
1260906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x42, (byte) 0xA3, (byte) 0x0E, (byte) 0x32, (byte) 0xF5, (byte) 0xF0,
1261906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x55, (byte) 0xEE, (byte) 0x58, (byte) 0xC1, (byte) 0xBD, (byte) 0x99,
1262906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0A, (byte) 0x2B, (byte) 0xFD, (byte) 0xBD, (byte) 0x1E, (byte) 0x23,
1263906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xEF, (byte) 0x99, (byte) 0x7D, (byte) 0xC1, (byte) 0xE2, (byte) 0xD5,
1264906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x71, (byte) 0x6C, (byte) 0x96, (byte) 0x70, (byte) 0xC3, (byte) 0x75,
1265906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x48, (byte) 0x83, (byte) 0x85, (byte) 0x5E, (byte) 0xC6, (byte) 0x3A,
1266906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xFF, (byte) 0xE5, (byte) 0xF1, (byte) 0x6B, (byte) 0x85, (byte) 0x7B,
1267906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x61, (byte) 0xA6, (byte) 0xB1, (byte) 0xCF, (byte) 0x60, (byte) 0x09,
1268906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x32, (byte) 0xAF, (byte) 0xEF, (byte) 0x95, (byte) 0xA4, (byte) 0x1B,
1269906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD6, (byte) 0xFA, (byte) 0xD0, (byte) 0xD7, (byte) 0x17, (byte) 0xCA,
1270906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB0, (byte) 0x19, (byte) 0x21, (byte) 0x7F, (byte) 0x5E, (byte) 0x9B,
1271906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xBB, (byte) 0xB8, (byte) 0xE0, (byte) 0xB1, (byte) 0x95, (byte) 0xB3,
1272906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xDA, (byte) 0x0B, (byte) 0xB8, (byte) 0xFA, (byte) 0x15, (byte) 0x75,
1273906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x73, (byte) 0x88, (byte) 0xC8, (byte) 0x45, (byte) 0x33, (byte) 0xD1,
1274906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x5C, (byte) 0xB7, (byte) 0xFB, (byte) 0x38, (byte) 0x05, (byte) 0xA0,
1275906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x85, (byte) 0x99, (byte) 0x2C, (byte) 0xB1, (byte) 0xC2, (byte) 0xFE,
1276906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAC, (byte) 0x5D, (byte) 0x2C, (byte) 0x1B, (byte) 0xD3, (byte) 0x42,
1277906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x81, (byte) 0xC8, (byte) 0x1C, (byte) 0xB7, (byte) 0x53, (byte) 0x7E,
1278906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC5, (byte) 0x9F, (byte) 0x84, (byte) 0x97, (byte) 0x6F, (byte) 0x00,
1279906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC3, (byte) 0x5E, (byte) 0x8B, (byte) 0x67, (byte) 0x3D, (byte) 0x9A,
1280906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD0, (byte) 0xE2, (byte) 0x9B, (byte) 0x2D, (byte) 0xC6, (byte) 0xD8,
1281906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xEF, (byte) 0x19, (byte) 0x14, (byte) 0x49, (byte) 0x88, (byte) 0x52,
1282906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF7, (byte) 0x93, (byte) 0xEB, (byte) 0xDB, (byte) 0xB6, (byte) 0x55,
1283906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x05, (byte) 0xB6, (byte) 0xE7, (byte) 0x70, (byte) 0xE4, (byte) 0x5A,
1284906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9E, (byte) 0x80, (byte) 0x78, (byte) 0x48, (byte) 0xA8, (byte) 0xE5,
1285906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x59, (byte) 0x8D, (byte) 0x1C, (byte) 0x5D, (byte) 0x95, (byte) 0x38,
1286906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x25, (byte) 0xFC, (byte) 0x38, (byte) 0xC3, (byte) 0xFF, (byte) 0xE2,
1287906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6F, (byte) 0xE4, (byte) 0xFC, (byte) 0x64, (byte) 0x8B, (byte) 0xCA,
1288906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x91, (byte) 0x5F, (byte) 0x0B, (byte) 0x4E, (byte) 0x9A, (byte) 0xB5,
1289906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x22, (byte) 0x5D, (byte) 0xC5, (byte) 0x5A, (byte) 0x77, (byte) 0xED,
1290906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x23, (byte) 0xE0, (byte) 0x13, (byte) 0x8F, (byte) 0xAC, (byte) 0x13,
1291906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE5, (byte) 0x81, (byte) 0xEE, (byte) 0xD1, (byte) 0xAD, (byte) 0x8A,
1292906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0F, (byte) 0x2B, (byte) 0x4C, (byte) 0xB2, (byte) 0x13, (byte) 0x54,
1293906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x44, (byte) 0x8E, (byte) 0x53, (byte) 0xE2, (byte) 0x33, (byte) 0x14,
1294906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x7F, (byte) 0x9B, (byte) 0xA9, (byte) 0xD3, (byte) 0xBB, (byte) 0xFC,
1295906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAC, (byte) 0xC9, (byte) 0x31, (byte) 0xB6,
1296906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    };
12970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA256withRSAPSS_Vector2Signature_ParameterSpec =
12980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1);
12990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
13000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
13010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha256 -binary -out digest.bin \
13020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
13030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha256 -pkeyopt rsa_pss_saltlen:0 \
13040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
13050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
13060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA256withRSAPSS_NoSalt_Vector2Signature = new byte[] {
13070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4C, (byte) 0xB7, (byte) 0x33, (byte) 0x78, (byte) 0x0A, (byte) 0xA7,
13080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEB, (byte) 0x35, (byte) 0x5E, (byte) 0x99, (byte) 0x8F, (byte) 0xE9,
13090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2A, (byte) 0x3D, (byte) 0x8C, (byte) 0x9B, (byte) 0x19, (byte) 0xC7,
13100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC8, (byte) 0xB8, (byte) 0x10, (byte) 0xC5, (byte) 0x6D, (byte) 0xA4,
13110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x44, (byte) 0x3E, (byte) 0xAB, (byte) 0x90, (byte) 0x82, (byte) 0x70,
13120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFA, (byte) 0x7B, (byte) 0xE6, (byte) 0x06, (byte) 0x36, (byte) 0x06,
13130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x93, (byte) 0x54, (byte) 0x50, (byte) 0xCD, (byte) 0x5F, (byte) 0xAA,
13140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x01, (byte) 0x42, (byte) 0xAD, (byte) 0xB9, (byte) 0x02, (byte) 0x6E,
13150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAE, (byte) 0x60, (byte) 0x00, (byte) 0x60, (byte) 0x55, (byte) 0x1B,
13160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBB, (byte) 0x9E, (byte) 0x03, (byte) 0xB7, (byte) 0x86, (byte) 0x3D,
13170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCC, (byte) 0xFA, (byte) 0x6E, (byte) 0x20, (byte) 0x07, (byte) 0x61,
13180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8F, (byte) 0x53, (byte) 0xC6, (byte) 0x2B, (byte) 0xEF, (byte) 0x8F,
13190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0F, (byte) 0x8B, (byte) 0x80, (byte) 0x22, (byte) 0xDC, (byte) 0x9E,
13200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x20, (byte) 0x4A, (byte) 0x57, (byte) 0xA1, (byte) 0x15, (byte) 0xE0,
13210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x01, (byte) 0x95, (byte) 0xDB, (byte) 0x46, (byte) 0x85, (byte) 0x6D,
13220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x27, (byte) 0x9F, (byte) 0x44, (byte) 0x3B, (byte) 0xB1, (byte) 0x35,
13230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x04, (byte) 0x9D, (byte) 0xF8, (byte) 0xC6, (byte) 0xD7, (byte) 0xD7,
13240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEF, (byte) 0x9A, (byte) 0x53, (byte) 0x5A, (byte) 0x73, (byte) 0xB3,
13250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD0, (byte) 0x32, (byte) 0x39, (byte) 0xE1, (byte) 0x28, (byte) 0x3A,
13260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9D, (byte) 0x69, (byte) 0x4E, (byte) 0x57, (byte) 0xC1, (byte) 0xDF,
13270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFE, (byte) 0x5F, (byte) 0xA8, (byte) 0xFF, (byte) 0xE8, (byte) 0x75,
13280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x85, (byte) 0x33, (byte) 0x90, (byte) 0x83, (byte) 0x3D, (byte) 0x8F,
13290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x15, (byte) 0x47, (byte) 0x16, (byte) 0xF2, (byte) 0x32, (byte) 0xF9,
13300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x46, (byte) 0x96, (byte) 0xCC, (byte) 0x2E, (byte) 0x8F, (byte) 0x27,
13310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3F, (byte) 0xCF, (byte) 0x91, (byte) 0xA6, (byte) 0x9E, (byte) 0xBF,
13320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x42, (byte) 0x2F, (byte) 0xD6, (byte) 0x52, (byte) 0xD7, (byte) 0x3B,
13330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCD, (byte) 0xFE, (byte) 0x0B, (byte) 0x4A, (byte) 0x3B, (byte) 0x19,
13340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x57, (byte) 0x47, (byte) 0x65, (byte) 0x33, (byte) 0xD9, (byte) 0xF7,
13350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE4, (byte) 0xC3, (byte) 0x05, (byte) 0x49, (byte) 0x3C, (byte) 0xC0,
13360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDF, (byte) 0xC1, (byte) 0x54, (byte) 0x18, (byte) 0x8D, (byte) 0xDA,
13370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE4, (byte) 0x59, (byte) 0xE9, (byte) 0x3B, (byte) 0xD6, (byte) 0x89,
13380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x07, (byte) 0x99, (byte) 0xB0, (byte) 0xF4, (byte) 0x09, (byte) 0x0A,
13390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2C, (byte) 0xBA, (byte) 0x0B, (byte) 0xE4, (byte) 0x79, (byte) 0xB1,
13400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDB, (byte) 0xAD, (byte) 0xAB, (byte) 0x5D, (byte) 0xA2, (byte) 0x1E,
13410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x76, (byte) 0x7F, (byte) 0x74, (byte) 0x62, (byte) 0x49, (byte) 0x07,
13420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7A, (byte) 0x5B, (byte) 0xD7, (byte) 0x0F, (byte) 0xA4, (byte) 0x2C,
13430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x36, (byte) 0x13, (byte) 0x42, (byte) 0xBA, (byte) 0xCF, (byte) 0x0A,
13440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFC, (byte) 0xC3, (byte) 0x31, (byte) 0x5E, (byte) 0x06, (byte) 0x84,
13450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8A, (byte) 0x8A, (byte) 0x84, (byte) 0x0D, (byte) 0x48, (byte) 0xBD,
13460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x67, (byte) 0xCF, (byte) 0x04, (byte) 0xB4, (byte) 0xFB, (byte) 0xBB,
13470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x04, (byte) 0x91, (byte) 0xB1, (byte) 0x0A, (byte) 0xA4, (byte) 0x70,
13480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x58, (byte) 0x1A, (byte) 0x9B, (byte) 0x02, (byte) 0x86, (byte) 0xBD,
13490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAE, (byte) 0x77, (byte) 0x97, (byte) 0x1C,
13500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
13510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA256withRSAPSS_NoSalt_Vector2Signature_ParameterSpec =
13520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 0, 1);
13530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
13540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
13550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha256 -binary -out digest.bin \
13560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
13570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha256 -pkeyopt rsa_pss_saltlen:222 \
13580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
13590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
13600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA256withRSAPSS_MaxSalt_Vector2Signature = new byte[] {
13610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3B, (byte) 0x43, (byte) 0xA8, (byte) 0xB5, (byte) 0x34, (byte) 0xD8,
13620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF9, (byte) 0xAD, (byte) 0xDD, (byte) 0x1F, (byte) 0x7A, (byte) 0x73,
13630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBF, (byte) 0xFA, (byte) 0xED, (byte) 0x10, (byte) 0xF3, (byte) 0x16,
13640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCC, (byte) 0xE5, (byte) 0x09, (byte) 0x0F, (byte) 0x68, (byte) 0x02,
13650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE7, (byte) 0x55, (byte) 0x0D, (byte) 0xCF, (byte) 0x1B, (byte) 0x83,
13660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCD, (byte) 0xA2, (byte) 0xD6, (byte) 0x02, (byte) 0xDD, (byte) 0x72,
13670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA6, (byte) 0x5F, (byte) 0x05, (byte) 0x8A, (byte) 0x1E, (byte) 0xA1,
13680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4F, (byte) 0x92, (byte) 0xD9, (byte) 0x09, (byte) 0x19, (byte) 0x6E,
13690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x80, (byte) 0xA0, (byte) 0x47, (byte) 0x98, (byte) 0x5C, (byte) 0xF7,
13700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x34, (byte) 0x52, (byte) 0x7D, (byte) 0x85, (byte) 0xCF, (byte) 0x9F,
13710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEB, (byte) 0xAF, (byte) 0xB4, (byte) 0x53, (byte) 0xF0, (byte) 0x5D,
13720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x28, (byte) 0x87, (byte) 0xAC, (byte) 0xA7, (byte) 0xB4, (byte) 0xCF,
13730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDD, (byte) 0x8B, (byte) 0xA4, (byte) 0xC9, (byte) 0xCA, (byte) 0xAA,
13740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF4, (byte) 0xA8, (byte) 0x25, (byte) 0x26, (byte) 0x34, (byte) 0x11,
13750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x14, (byte) 0x24, (byte) 0x1C, (byte) 0x1C, (byte) 0x50, (byte) 0xC8,
13760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFF, (byte) 0x7E, (byte) 0xFF, (byte) 0x6F, (byte) 0x4F, (byte) 0x14,
13770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB3, (byte) 0x57, (byte) 0x48, (byte) 0x0A, (byte) 0x5A, (byte) 0x95,
13780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0xEB, (byte) 0x71, (byte) 0x4E, (byte) 0x86, (byte) 0xFC,
13790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x38, (byte) 0x1B, (byte) 0x93, (byte) 0x45, (byte) 0x09, (byte) 0x15,
13800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD3, (byte) 0x06, (byte) 0x6B, (byte) 0x9D, (byte) 0x05, (byte) 0x5C,
13810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4A, (byte) 0xB3, (byte) 0x93, (byte) 0xD1, (byte) 0x01, (byte) 0x54,
13820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCC, (byte) 0xED, (byte) 0xBF, (byte) 0x0E, (byte) 0x7E, (byte) 0x33,
13830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x32, (byte) 0xA6, (byte) 0xA5, (byte) 0xF7, (byte) 0x3D, (byte) 0x2E,
13840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCB, (byte) 0x76, (byte) 0xA7, (byte) 0x22, (byte) 0x64, (byte) 0xB8,
13850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x19, (byte) 0x53, (byte) 0xFE, (byte) 0x8C, (byte) 0xC8, (byte) 0x1E,
13860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6C, (byte) 0xEE, (byte) 0x08, (byte) 0x07, (byte) 0x7E, (byte) 0x93,
13870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x43, (byte) 0x1B, (byte) 0xCF, (byte) 0x37, (byte) 0xE4, (byte) 0xAB,
13880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE7, (byte) 0xD7, (byte) 0x83, (byte) 0x8E, (byte) 0x19, (byte) 0xAE,
13890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x05, (byte) 0x51, (byte) 0x91, (byte) 0x10, (byte) 0x7B, (byte) 0x70,
13900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFC, (byte) 0x73, (byte) 0x12, (byte) 0x96, (byte) 0xFA, (byte) 0xD0,
13910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCA, (byte) 0xA3, (byte) 0x59, (byte) 0xA7, (byte) 0xDD, (byte) 0xC3,
13920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x1D, (byte) 0x9C, (byte) 0x7B, (byte) 0x50, (byte) 0xBB, (byte) 0x57,
13930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB8, (byte) 0x86, (byte) 0xF2, (byte) 0xCA, (byte) 0xC4, (byte) 0x86,
13940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7A, (byte) 0x96, (byte) 0x90, (byte) 0x02, (byte) 0xDF, (byte) 0xA0,
13950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x88, (byte) 0x0E, (byte) 0x89, (byte) 0x45, (byte) 0x27, (byte) 0x52,
13960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDA, (byte) 0x86, (byte) 0x42, (byte) 0x4B, (byte) 0x90, (byte) 0xC3,
13970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC1, (byte) 0x41, (byte) 0x60, (byte) 0x5C, (byte) 0x29, (byte) 0x15,
13980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE5, (byte) 0x5C, (byte) 0x43, (byte) 0x9B, (byte) 0x40, (byte) 0xE5,
13990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x04, (byte) 0x1B, (byte) 0x4A, (byte) 0x93, (byte) 0xDD, (byte) 0x55,
14000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC4, (byte) 0xFC, (byte) 0xFE, (byte) 0x0C, (byte) 0x65, (byte) 0x96,
14010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x98, (byte) 0xDE, (byte) 0xC5, (byte) 0x05, (byte) 0xC5, (byte) 0x3E,
14020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB0, (byte) 0x25, (byte) 0x4E, (byte) 0x65, (byte) 0x24, (byte) 0x8D,
14030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4E, (byte) 0x9D, (byte) 0x94, (byte) 0x01,
14040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
14050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA256withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec =
14060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 222, 1);
1407906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1408906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    /*
1409906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha384 -binary -out digest.bin \
1410906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
1411906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha384 -pkeyopt rsa_pss_saltlen:48 \
1412906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
1413906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     */
1414906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    private static final byte[] SHA384withRSAPSS_Vector2Signature = new byte[] {
1415906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x20, (byte) 0xCB, (byte) 0x97, (byte) 0x9C, (byte) 0x2E, (byte) 0x51,
1416906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x59, (byte) 0x56, (byte) 0x9F, (byte) 0x04, (byte) 0x47, (byte) 0x7C,
1417906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x5C, (byte) 0x57, (byte) 0x59, (byte) 0xBC, (byte) 0x43, (byte) 0xD9,
1418906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x4B, (byte) 0xEC, (byte) 0xAC, (byte) 0xB9, (byte) 0x88, (byte) 0xA2,
1419906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x30, (byte) 0x8B, (byte) 0xEE, (byte) 0x2F, (byte) 0xC1, (byte) 0x73,
1420906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF1, (byte) 0x13, (byte) 0xB2, (byte) 0x5E, (byte) 0x1A, (byte) 0xC8,
1421906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD2, (byte) 0xAA, (byte) 0x27, (byte) 0x16, (byte) 0xA1, (byte) 0x14,
1422906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAB, (byte) 0x45, (byte) 0x8A, (byte) 0x7E, (byte) 0x22, (byte) 0x22,
1423906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x2A, (byte) 0x2E, (byte) 0xDA, (byte) 0x6A, (byte) 0x7E, (byte) 0x3F,
1424906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x66, (byte) 0x99, (byte) 0x55, (byte) 0xAF, (byte) 0x2B, (byte) 0x94,
1425906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD8, (byte) 0x6B, (byte) 0xC2, (byte) 0x60, (byte) 0xB5, (byte) 0x55,
1426906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA9, (byte) 0x26, (byte) 0x29, (byte) 0xFC, (byte) 0x17, (byte) 0x56,
1427906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x05, (byte) 0xB7, (byte) 0x48, (byte) 0x2F, (byte) 0xAB, (byte) 0x68,
1428906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCF, (byte) 0x37, (byte) 0x62, (byte) 0x79, (byte) 0x4F, (byte) 0x32,
1429906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x04, (byte) 0xF6, (byte) 0xEA, (byte) 0xBE, (byte) 0x79, (byte) 0x84,
1430906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x73, (byte) 0xEE, (byte) 0x1C, (byte) 0xEE, (byte) 0x9F, (byte) 0x72,
1431906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x7A, (byte) 0xC6, (byte) 0x64, (byte) 0xB4, (byte) 0x4F, (byte) 0xDE,
1432906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0B, (byte) 0x38, (byte) 0x47, (byte) 0x62, (byte) 0xA9, (byte) 0xFD,
1433906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x1B, (byte) 0x75, (byte) 0xEC, (byte) 0xFE, (byte) 0x2D, (byte) 0x04,
1434906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x2D, (byte) 0x0A, (byte) 0xCE, (byte) 0x13, (byte) 0xFA, (byte) 0xDA,
1435906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x3F, (byte) 0x4C, (byte) 0x11, (byte) 0xEA, (byte) 0x02, (byte) 0x00,
1436906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0A, (byte) 0x93, (byte) 0x12, (byte) 0xDC, (byte) 0x60, (byte) 0xE7,
1437906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x52, (byte) 0x90, (byte) 0x8A, (byte) 0xA3, (byte) 0xAE, (byte) 0xC5,
1438906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9A, (byte) 0xD7, (byte) 0xD5, (byte) 0x0D, (byte) 0xBC, (byte) 0x7A,
1439906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xDB, (byte) 0xF4, (byte) 0x10, (byte) 0xE0, (byte) 0xDB, (byte) 0xC0,
1440906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x97, (byte) 0xF1, (byte) 0x84, (byte) 0xCF, (byte) 0x66, (byte) 0xB2,
1441906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x04, (byte) 0x58, (byte) 0x81, (byte) 0xB5, (byte) 0x9B, (byte) 0x4A,
1442906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF9, (byte) 0xD7, (byte) 0xCA, (byte) 0x51, (byte) 0x09, (byte) 0x67,
1443906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x48, (byte) 0x7B, (byte) 0xE5, (byte) 0xE9, (byte) 0x07, (byte) 0x4E,
1444906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6A, (byte) 0xC1, (byte) 0xA6, (byte) 0x68, (byte) 0x90, (byte) 0x17,
1445906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAB, (byte) 0x0E, (byte) 0xFB, (byte) 0x3E, (byte) 0x39, (byte) 0x74,
1446906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x85, (byte) 0x04, (byte) 0x42, (byte) 0x0A, (byte) 0x9E, (byte) 0x02,
1447906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA9, (byte) 0x50, (byte) 0xFF, (byte) 0x23, (byte) 0x2D, (byte) 0x30,
1448906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xDD, (byte) 0x17, (byte) 0xC0, (byte) 0x82, (byte) 0xF7, (byte) 0xBB,
1449906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x3B, (byte) 0x03, (byte) 0xBD, (byte) 0xB1, (byte) 0x96, (byte) 0xCD,
1450906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x71, (byte) 0x3F, (byte) 0x67, (byte) 0x59, (byte) 0x5E, (byte) 0x45,
1451906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xE0, (byte) 0x1C, (byte) 0x80, (byte) 0x52, (byte) 0xD7, (byte) 0xF0,
1452906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC1, (byte) 0xE6, (byte) 0xCF, (byte) 0x59, (byte) 0x13, (byte) 0x25,
1453906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6F, (byte) 0x9F, (byte) 0xBB, (byte) 0xB9, (byte) 0x7F, (byte) 0x7E,
1454906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x7D, (byte) 0x93, (byte) 0xD9, (byte) 0x3F, (byte) 0x95, (byte) 0xB7,
1455906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9A, (byte) 0xDB, (byte) 0xE2, (byte) 0x2C, (byte) 0x53, (byte) 0x83,
1456906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9A, (byte) 0x06, (byte) 0x6D, (byte) 0x22, (byte) 0x81, (byte) 0xB5,
1457906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x63, (byte) 0xAE, (byte) 0x4A, (byte) 0xEE,
1458906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    };
14590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA384withRSAPSS_Vector2Signature_ParameterSpec =
14600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-384", "MGF1", MGF1ParameterSpec.SHA384, 48, 1);
14610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
14620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
14630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha384 -binary -out digest.bin \
14640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
14650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha384 -pkeyopt rsa_pss_saltlen:0 \
14660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
14670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
14680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA384withRSAPSS_NoSalt_Vector2Signature = new byte[] {
14690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x41, (byte) 0x0C, (byte) 0x3A, (byte) 0xEC, (byte) 0xF6, (byte) 0xD9,
14700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8F, (byte) 0xA3, (byte) 0x61, (byte) 0xBB, (byte) 0x03, (byte) 0xED,
14710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD9, (byte) 0x69, (byte) 0x7D, (byte) 0xE1, (byte) 0xE1, (byte) 0x4E,
14720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5E, (byte) 0x71, (byte) 0x4E, (byte) 0x88, (byte) 0x9C, (byte) 0x79,
14730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD3, (byte) 0x71, (byte) 0x28, (byte) 0x07, (byte) 0x28, (byte) 0x19,
14740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x96, (byte) 0x55, (byte) 0x30, (byte) 0x81, (byte) 0x29, (byte) 0x5C,
14750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4A, (byte) 0x18, (byte) 0x69, (byte) 0x36, (byte) 0x74, (byte) 0xAC,
14760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x99, (byte) 0xB1, (byte) 0xBC, (byte) 0xA0, (byte) 0xFC, (byte) 0x17,
14770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA4, (byte) 0xD1, (byte) 0xAE, (byte) 0x84, (byte) 0xA6, (byte) 0x09,
14780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6B, (byte) 0xB3, (byte) 0x02, (byte) 0xB2, (byte) 0x81, (byte) 0x04,
14790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x59, (byte) 0x8C, (byte) 0xCF, (byte) 0xAD, (byte) 0xFB, (byte) 0x76,
14800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6F, (byte) 0xE2, (byte) 0x5E, (byte) 0x09, (byte) 0xE5, (byte) 0xBC,
14810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x54, (byte) 0xBD, (byte) 0x08, (byte) 0xA8, (byte) 0x18, (byte) 0x60,
14820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAF, (byte) 0x09, (byte) 0x67, (byte) 0x15, (byte) 0x03, (byte) 0xA8,
14830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8B, (byte) 0x3F, (byte) 0x31, (byte) 0xB7, (byte) 0x76, (byte) 0xFD,
14840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF6, (byte) 0x82, (byte) 0xC7, (byte) 0x89, (byte) 0xC2, (byte) 0x47,
14850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x80, (byte) 0x06, (byte) 0x4F, (byte) 0x8C, (byte) 0x9C, (byte) 0xD7,
14860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4F, (byte) 0x63, (byte) 0x1E, (byte) 0xF0, (byte) 0x34, (byte) 0xD7,
14870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x91, (byte) 0xD2, (byte) 0x96, (byte) 0x62, (byte) 0xFD, (byte) 0x68,
14880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE3, (byte) 0xE0, (byte) 0xFB, (byte) 0x7D, (byte) 0x0A, (byte) 0xD7,
14890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x52, (byte) 0xFE, (byte) 0xD1, (byte) 0x95, (byte) 0x9E, (byte) 0xD2,
14900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x84, (byte) 0xBE, (byte) 0x3D, (byte) 0x1F, (byte) 0x8C, (byte) 0xC4,
14910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD6, (byte) 0xE3, (byte) 0xCF, (byte) 0xE8, (byte) 0xB3, (byte) 0x82,
14920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x2E, (byte) 0xFA, (byte) 0x39, (byte) 0xA3, (byte) 0x20, (byte) 0x3C,
14930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBE, (byte) 0x6A, (byte) 0xFA, (byte) 0x04, (byte) 0xD2, (byte) 0x74,
14940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x41, (byte) 0xDC, (byte) 0xE8, (byte) 0x0E, (byte) 0xE7, (byte) 0xF2,
14950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x36, (byte) 0xD4, (byte) 0x2E, (byte) 0x6A, (byte) 0xCF, (byte) 0xDF,
14960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8B, (byte) 0x4B, (byte) 0x77, (byte) 0xE8, (byte) 0x0A, (byte) 0x64,
14970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x86, (byte) 0x2C, (byte) 0xCA, (byte) 0x92, (byte) 0x01, (byte) 0xB2,
14980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8A, (byte) 0xB8, (byte) 0xB2, (byte) 0x6C, (byte) 0x0B, (byte) 0x18,
14990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x90, (byte) 0x31, (byte) 0x93, (byte) 0x29, (byte) 0xBA, (byte) 0xB1,
15000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x88, (byte) 0x94, (byte) 0x44, (byte) 0x0B, (byte) 0x38, (byte) 0x64,
15010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC1, (byte) 0xDE, (byte) 0x0B, (byte) 0xD8, (byte) 0xE4, (byte) 0xBA,
15020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0A, (byte) 0x41, (byte) 0x24, (byte) 0x35, (byte) 0xAA, (byte) 0xE3,
15030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x59, (byte) 0x8E, (byte) 0x57, (byte) 0x51, (byte) 0x43, (byte) 0xE1,
15040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9C, (byte) 0xF6, (byte) 0xF8, (byte) 0x16, (byte) 0x68, (byte) 0x83,
15050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x08, (byte) 0x8C, (byte) 0x2D, (byte) 0x40, (byte) 0xD2, (byte) 0xEF,
15060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD6, (byte) 0xAE, (byte) 0x98, (byte) 0x77, (byte) 0xE8, (byte) 0xF2,
15070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC7, (byte) 0x19, (byte) 0x61, (byte) 0xD6, (byte) 0x43, (byte) 0xCD,
15080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x76, (byte) 0x2E, (byte) 0x7A, (byte) 0xCB, (byte) 0x1A, (byte) 0x5D,
15090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x73, (byte) 0x45, (byte) 0xF2, (byte) 0x7C, (byte) 0xD0, (byte) 0x88,
15100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x83, (byte) 0x51, (byte) 0xF3, (byte) 0x19, (byte) 0x0F, (byte) 0xD5,
15110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x40, (byte) 0x3F, (byte) 0xD9, (byte) 0xBF,
15120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
15130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA384withRSAPSS_NoSalt_Vector2Signature_ParameterSpec =
15140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-384", "MGF1", MGF1ParameterSpec.SHA384, 0, 1);
15150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
15160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
15170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha384 -binary -out digest.bin \
15180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
15190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha384 -pkeyopt rsa_pss_saltlen:206 \
15200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
15210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
15220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA384withRSAPSS_MaxSalt_Vector2Signature = new byte[] {
15230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDE, (byte) 0xF7, (byte) 0xC3, (byte) 0x21, (byte) 0x79, (byte) 0x0F,
15240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x55, (byte) 0xD1, (byte) 0x56, (byte) 0x9A, (byte) 0xB0, (byte) 0x08,
15250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA1, (byte) 0x27, (byte) 0xC9, (byte) 0x5E, (byte) 0x64, (byte) 0xF4,
15260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC7, (byte) 0x83, (byte) 0x94, (byte) 0xCA, (byte) 0xBD, (byte) 0x50,
15270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD6, (byte) 0xC5, (byte) 0x56, (byte) 0x94, (byte) 0xBD, (byte) 0x0B,
15280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x55, (byte) 0xE6, (byte) 0x04, (byte) 0xAD, (byte) 0xAF, (byte) 0xAF,
15290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4F, (byte) 0x2D, (byte) 0x91, (byte) 0x7F, (byte) 0xF1, (byte) 0x60,
15300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0C, (byte) 0xEE, (byte) 0xE8, (byte) 0x44, (byte) 0xFC, (byte) 0x69,
15310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x80, (byte) 0x43, (byte) 0xBC, (byte) 0xAB, (byte) 0x83, (byte) 0x35,
15320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB0, (byte) 0xC6, (byte) 0xCB, (byte) 0xE6, (byte) 0x92, (byte) 0x29,
15330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x09, (byte) 0xCF, (byte) 0xDB, (byte) 0xAD, (byte) 0x16, (byte) 0x93,
15340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC7, (byte) 0xBE, (byte) 0x81, (byte) 0x68, (byte) 0x0F, (byte) 0x7B,
15350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC1, (byte) 0xC2, (byte) 0x8C, (byte) 0xBA, (byte) 0x59, (byte) 0x80,
15360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAE, (byte) 0xFB, (byte) 0x60, (byte) 0x22, (byte) 0x28, (byte) 0x36,
15370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBE, (byte) 0x37, (byte) 0x72, (byte) 0x86, (byte) 0x02, (byte) 0x4B,
15380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF9, (byte) 0x14, (byte) 0x5A, (byte) 0x6B, (byte) 0x32, (byte) 0x44,
15390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x72, (byte) 0x33, (byte) 0x2E, (byte) 0x7F, (byte) 0xA1, (byte) 0xFD,
15400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x07, (byte) 0xF2, (byte) 0xD9, (byte) 0x9D, (byte) 0x03, (byte) 0x77,
15410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x17, (byte) 0xFB, (byte) 0x0E, (byte) 0xFF, (byte) 0xF7, (byte) 0x37,
15420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x68, (byte) 0xF6, (byte) 0x8F, (byte) 0x9B, (byte) 0x2C, (byte) 0xEB,
15430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAF, (byte) 0x6C, (byte) 0x50, (byte) 0x9F, (byte) 0x34, (byte) 0xB2,
15440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x52, (byte) 0x3B, (byte) 0x94, (byte) 0x6F, (byte) 0x60, (byte) 0x16,
15450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x52, (byte) 0x0A, (byte) 0xBF, (byte) 0x95, (byte) 0x41, (byte) 0x44,
15460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x83, (byte) 0x91, (byte) 0x85, (byte) 0xA1, (byte) 0xF7, (byte) 0xF9,
15470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x17, (byte) 0x4A, (byte) 0xF7, (byte) 0xF1, (byte) 0xE8, (byte) 0x9C,
15480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x75, (byte) 0x86, (byte) 0x12, (byte) 0x44, (byte) 0x19, (byte) 0x5C,
15490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x65, (byte) 0x31, (byte) 0x89, (byte) 0x2A, (byte) 0xFC, (byte) 0xBE,
15500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE8, (byte) 0xEC, (byte) 0xC9, (byte) 0xD7, (byte) 0x41, (byte) 0xDA,
15510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD9, (byte) 0xC9, (byte) 0x8B, (byte) 0x90, (byte) 0x60, (byte) 0xCC,
15520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB2, (byte) 0x7A, (byte) 0xBA, (byte) 0xA0, (byte) 0xEE, (byte) 0xBE,
15530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9C, (byte) 0xE7, (byte) 0xF2, (byte) 0x27, (byte) 0x92, (byte) 0x9C,
15540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x3C, (byte) 0x0F, (byte) 0x5C, (byte) 0xEE, (byte) 0x38, (byte) 0x48,
15550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xCF, (byte) 0xFF, (byte) 0x33, (byte) 0x35, (byte) 0x80, (byte) 0x99,
15560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0xA7, (byte) 0x5A, (byte) 0x7A, (byte) 0xEA, (byte) 0x96,
15570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x74, (byte) 0x28, (byte) 0x36, (byte) 0x7B, (byte) 0xE1, (byte) 0x33,
15580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7C, (byte) 0x78, (byte) 0xEC, (byte) 0x05, (byte) 0x72, (byte) 0x0E,
15590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0x16, (byte) 0x5C, (byte) 0x77, (byte) 0x58, (byte) 0xA7,
15600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x31, (byte) 0x3F, (byte) 0xBA, (byte) 0x91, (byte) 0xA7, (byte) 0x16,
15610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFC, (byte) 0x31, (byte) 0xCA, (byte) 0x30, (byte) 0xE0, (byte) 0xF4,
15620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0x07, (byte) 0x4A, (byte) 0x9C, (byte) 0x1D, (byte) 0x2B,
15630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4E, (byte) 0xB8, (byte) 0x7C, (byte) 0x67, (byte) 0xCB, (byte) 0x34,
15640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x69, (byte) 0x85, (byte) 0x4E, (byte) 0x99, (byte) 0x41, (byte) 0x8A,
15650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x35, (byte) 0x85, (byte) 0xF2, (byte) 0x1A,
15660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
15670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA384withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec =
15680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-384", "MGF1", MGF1ParameterSpec.SHA384, 206, 1);
1569906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1570906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    /*
1571906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha512 -binary -out digest.bin \
1572906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
1573906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha512 -pkeyopt rsa_pss_saltlen:64 \
1574906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
1575906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin     */
1576906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    private static final byte[] SHA512withRSAPSS_Vector2Signature = new byte[] {
1577906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9F, (byte) 0xED, (byte) 0xF8, (byte) 0xEE, (byte) 0x30, (byte) 0x5F,
1578906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x30, (byte) 0x63, (byte) 0x1D, (byte) 0x86, (byte) 0xD3, (byte) 0xAD,
1579906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x1D, (byte) 0xD8, (byte) 0xD2, (byte) 0x67, (byte) 0xE2, (byte) 0x43,
1580906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x64, (byte) 0x71, (byte) 0x98, (byte) 0x82, (byte) 0x00, (byte) 0x84,
1581906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x2C, (byte) 0x88, (byte) 0x1A, (byte) 0x28, (byte) 0xCD, (byte) 0xA2,
1582906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x34, (byte) 0x17, (byte) 0x0F, (byte) 0x34, (byte) 0x8A, (byte) 0x10,
1583906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x79, (byte) 0x6C, (byte) 0xCB, (byte) 0xDA, (byte) 0x2F, (byte) 0xDF,
1584906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x4D, (byte) 0x98, (byte) 0x01, (byte) 0xE8, (byte) 0xB3, (byte) 0xF5,
1585906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCD, (byte) 0x60, (byte) 0xEA, (byte) 0xDE, (byte) 0xA5, (byte) 0x0C,
1586906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x09, (byte) 0xA1, (byte) 0x4A, (byte) 0xC4, (byte) 0x6B, (byte) 0x09,
1587906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xB3, (byte) 0x37, (byte) 0x1F, (byte) 0x8A, (byte) 0x64, (byte) 0x81,
1588906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x2E, (byte) 0x22, (byte) 0x75, (byte) 0x24, (byte) 0x3B, (byte) 0xC0,
1589906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0E, (byte) 0x1F, (byte) 0x37, (byte) 0xC9, (byte) 0x1E, (byte) 0x6F,
1590906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xAF, (byte) 0x3E, (byte) 0x9B, (byte) 0x3F, (byte) 0xA3, (byte) 0xC3,
1591906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0B, (byte) 0xB9, (byte) 0x83, (byte) 0x60, (byte) 0x02, (byte) 0xC6,
1592906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x29, (byte) 0x83, (byte) 0x09, (byte) 0x16, (byte) 0xD9, (byte) 0x3D,
1593906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x84, (byte) 0x02, (byte) 0x81, (byte) 0x20, (byte) 0xE9, (byte) 0x01,
1594906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x5B, (byte) 0x85, (byte) 0xC8, (byte) 0x81, (byte) 0x25, (byte) 0x6B,
1595906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xCB, (byte) 0x78, (byte) 0x48, (byte) 0x65, (byte) 0x3A, (byte) 0xD6,
1596906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x95, (byte) 0x9B, (byte) 0x62, (byte) 0x2D, (byte) 0x84, (byte) 0x54,
1597906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x12, (byte) 0x94, (byte) 0xB7, (byte) 0xF0, (byte) 0x1C, (byte) 0xB6,
1598906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x59, (byte) 0xCD, (byte) 0xC3, (byte) 0x86, (byte) 0xE6, (byte) 0x63,
1599906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xD7, (byte) 0x99, (byte) 0x9A, (byte) 0xC4, (byte) 0xBF, (byte) 0x8E,
1600906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xDD, (byte) 0x46, (byte) 0x10, (byte) 0xBE, (byte) 0xAB, (byte) 0x78,
1601906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xC6, (byte) 0x30, (byte) 0x47, (byte) 0x23, (byte) 0xB6, (byte) 0x2C,
1602906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x02, (byte) 0x5E, (byte) 0x1F, (byte) 0x07, (byte) 0x96, (byte) 0x54,
1603906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xEE, (byte) 0x28, (byte) 0xC7, (byte) 0xEC, (byte) 0x57, (byte) 0xDB,
1604906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x9E, (byte) 0xEF, (byte) 0xE4, (byte) 0x11, (byte) 0xF8, (byte) 0x04,
1605906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xA9, (byte) 0x26, (byte) 0xC2, (byte) 0x61, (byte) 0xF1, (byte) 0x84,
1606906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xEB, (byte) 0x94, (byte) 0xBD, (byte) 0x48, (byte) 0xCA, (byte) 0xD1,
1607906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x84, (byte) 0xCE, (byte) 0x82, (byte) 0x2E, (byte) 0xF6, (byte) 0x4E,
1608906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x17, (byte) 0x6F, (byte) 0x78, (byte) 0xB9, (byte) 0x0B, (byte) 0xA9,
1609906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x7D, (byte) 0xBC, (byte) 0xE5, (byte) 0xF8, (byte) 0x7D, (byte) 0xA8,
1610906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x76, (byte) 0x7A, (byte) 0x8B, (byte) 0xB5, (byte) 0x05, (byte) 0x42,
1611906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x37, (byte) 0xDA, (byte) 0x15, (byte) 0xE2, (byte) 0xC4, (byte) 0x70,
1612906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x6E, (byte) 0x95, (byte) 0x60, (byte) 0x47, (byte) 0xF9, (byte) 0x0F,
1613906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF4, (byte) 0xA2, (byte) 0x73, (byte) 0xF1, (byte) 0x73, (byte) 0xBD,
1614906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x0B, (byte) 0x9B, (byte) 0x44, (byte) 0xB6, (byte) 0xA9, (byte) 0xAF,
1615906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x50, (byte) 0x2D, (byte) 0x5C, (byte) 0xA3, (byte) 0x72, (byte) 0x6F,
1616906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x85, (byte) 0xE8, (byte) 0x0C, (byte) 0xF9, (byte) 0xE1, (byte) 0xE8,
1617906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF7, (byte) 0xC0, (byte) 0x85, (byte) 0x14, (byte) 0x53, (byte) 0x95,
1618906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0xF9, (byte) 0x9E, (byte) 0x65, (byte) 0x05, (byte) 0xF0, (byte) 0x22,
1619906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        (byte) 0x7F, (byte) 0x4F, (byte) 0x40, (byte) 0x45,
1620906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    };
16210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA512withRSAPSS_Vector2Signature_ParameterSpec =
16220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, 64, 1);
16230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
16240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
16250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha512 -binary -out digest.bin \
16260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
16270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha512 -pkeyopt rsa_pss_saltlen:64 \
16280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
16290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
16300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA512withRSAPSS_NoSalt_Vector2Signature = new byte[] {
16310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x49, (byte) 0xA3, (byte) 0xBC, (byte) 0x2E, (byte) 0x67, (byte) 0x96,
16320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA5, (byte) 0x3E, (byte) 0x39, (byte) 0x46, (byte) 0xD6, (byte) 0xA1,
16330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA0, (byte) 0x4F, (byte) 0x3A, (byte) 0x03, (byte) 0x8F, (byte) 0x62,
16340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF2, (byte) 0xD8, (byte) 0x90, (byte) 0xAD, (byte) 0xE2, (byte) 0x3B,
16350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4F, (byte) 0x98, (byte) 0x88, (byte) 0x51, (byte) 0x41, (byte) 0x09,
16360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x23, (byte) 0xEB, (byte) 0xF4, (byte) 0x5D, (byte) 0x6A, (byte) 0x22,
16370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x12, (byte) 0x12, (byte) 0xDC, (byte) 0x27, (byte) 0xE9, (byte) 0xF7,
16380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x64, (byte) 0xA3, (byte) 0xDE, (byte) 0x3A, (byte) 0xB0, (byte) 0xD6,
16390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF2, (byte) 0xC6, (byte) 0xBC, (byte) 0x0B, (byte) 0xA2, (byte) 0xA1,
16400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAA, (byte) 0xB0, (byte) 0x51, (byte) 0xDA, (byte) 0x4F, (byte) 0x28,
16410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xA8, (byte) 0xEB, (byte) 0x34, (byte) 0x60, (byte) 0x37, (byte) 0xF7,
16420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x50, (byte) 0x7D, (byte) 0xB8, (byte) 0xE7, (byte) 0x24, (byte) 0x8E,
16430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAC, (byte) 0x03, (byte) 0x31, (byte) 0xB8, (byte) 0xE0, (byte) 0xDB,
16440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x97, (byte) 0xE9, (byte) 0x1B, (byte) 0x7E, (byte) 0x27, (byte) 0x99,
16450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x93, (byte) 0x4D, (byte) 0x46, (byte) 0xB3, (byte) 0xFE, (byte) 0xD6,
16460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x23, (byte) 0xB3, (byte) 0xAB, (byte) 0x3E, (byte) 0x33, (byte) 0xA1,
16470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x10, (byte) 0x4E, (byte) 0x34, (byte) 0x27, (byte) 0x58, (byte) 0x25,
16480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB7, (byte) 0xBA, (byte) 0xEE, (byte) 0xBE, (byte) 0xE0, (byte) 0x6E,
16490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x54, (byte) 0xF7, (byte) 0x73, (byte) 0x7B, (byte) 0x5A, (byte) 0x9C,
16500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x74, (byte) 0xEA, (byte) 0xC7, (byte) 0x7E, (byte) 0xC6, (byte) 0xF7,
16510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD5, (byte) 0x32, (byte) 0x0E, (byte) 0x28, (byte) 0x99, (byte) 0xD8,
16520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEF, (byte) 0x97, (byte) 0x62, (byte) 0x8A, (byte) 0xE3, (byte) 0x16,
16530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAD, (byte) 0xE2, (byte) 0xF4, (byte) 0x11, (byte) 0x91, (byte) 0x17,
16540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF3, (byte) 0x32, (byte) 0x90, (byte) 0xCB, (byte) 0x3C, (byte) 0x89,
16550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF4, (byte) 0x20, (byte) 0xF1, (byte) 0x2D, (byte) 0x74, (byte) 0x22,
16560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x50, (byte) 0x64, (byte) 0xC2, (byte) 0xF4, (byte) 0xC4, (byte) 0x0D,
16570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x18, (byte) 0x6A, (byte) 0x02, (byte) 0x52, (byte) 0x14, (byte) 0x85,
16580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x67, (byte) 0xA4, (byte) 0x08, (byte) 0xE5, (byte) 0xBF, (byte) 0x65,
16590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x15, (byte) 0xB3, (byte) 0x5A, (byte) 0x88, (byte) 0xEB, (byte) 0xD4,
16600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x75, (byte) 0xF9, (byte) 0x52, (byte) 0x73, (byte) 0xA0, (byte) 0x5E,
16610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xBA, (byte) 0x37, (byte) 0x6A, (byte) 0x61, (byte) 0x2B, (byte) 0x16,
16620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8A, (byte) 0xA8, (byte) 0x00, (byte) 0xBB, (byte) 0x4D, (byte) 0xFA,
16630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x04, (byte) 0xB8, (byte) 0xAB, (byte) 0x4D, (byte) 0xA4, (byte) 0xFC,
16640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9D, (byte) 0xCF, (byte) 0x63, (byte) 0x83, (byte) 0x34, (byte) 0xAE,
16650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAE, (byte) 0xA6, (byte) 0x77, (byte) 0x73, (byte) 0xA2, (byte) 0xB5,
16660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x77, (byte) 0xAC, (byte) 0x00, (byte) 0x03, (byte) 0x06, (byte) 0xD4,
16670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xDF, (byte) 0x81, (byte) 0x61, (byte) 0xCE, (byte) 0x8E, (byte) 0xC1,
16680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xD5, (byte) 0x99, (byte) 0xD5, (byte) 0x2F, (byte) 0xE8, (byte) 0x27,
16690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFA, (byte) 0x84, (byte) 0x7E, (byte) 0x57, (byte) 0xF1, (byte) 0xC9,
16700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEB, (byte) 0x4F, (byte) 0xF9, (byte) 0x92, (byte) 0xC6, (byte) 0xD0,
16710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x25, (byte) 0x8A, (byte) 0x16, (byte) 0xD0, (byte) 0xEC, (byte) 0xE5,
16720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x33, (byte) 0xA6, (byte) 0xF9, (byte) 0xD5, (byte) 0x0C, (byte) 0x7B,
16730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEC, (byte) 0xC6, (byte) 0x58, (byte) 0x45,
16740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
16750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA512withRSAPSS_NoSalt_Vector2Signature_ParameterSpec =
16760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, 0, 1);
16770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
16780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    /*
16790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     * echo "This is a signed message from Kenny Root." | openssl sha512 -binary -out digest.bin \
16800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     && openssl pkeyutl -sign -in digest.bin -inkey privkey.pem \
16810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *         -pkeyopt rsa_padding_mode:pss -pkeyopt digest:sha512 -pkeyopt rsa_pss_saltlen:190 \
16820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     *     | recode ../x1 | sed 's/0x/(byte) 0x/g'
16830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin     */
16840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final byte[] SHA512withRSAPSS_MaxSalt_Vector2Signature = new byte[] {
16850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x90, (byte) 0x92, (byte) 0x45, (byte) 0xA1, (byte) 0x1E, (byte) 0x0F,
16860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5F, (byte) 0xF6, (byte) 0x8F, (byte) 0xA0, (byte) 0xBE, (byte) 0x34,
16870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x29, (byte) 0x62, (byte) 0xBE, (byte) 0x41, (byte) 0x80, (byte) 0xF0,
16880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB8, (byte) 0x9F, (byte) 0x29, (byte) 0x63, (byte) 0x89, (byte) 0x26,
16890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC2, (byte) 0x22, (byte) 0x1F, (byte) 0x60, (byte) 0xB6, (byte) 0xFC,
16900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5A, (byte) 0x3E, (byte) 0x99, (byte) 0xB8, (byte) 0xC6, (byte) 0x3B,
16910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x67, (byte) 0x33, (byte) 0x97, (byte) 0x19, (byte) 0xC6, (byte) 0xFF,
16920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0C, (byte) 0xA9, (byte) 0x04, (byte) 0x5A, (byte) 0xF0, (byte) 0x02,
16930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x9A, (byte) 0x19, (byte) 0x0F, (byte) 0xEA, (byte) 0x77, (byte) 0x0D,
16940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x56, (byte) 0x38, (byte) 0x0A, (byte) 0xED, (byte) 0x4E, (byte) 0xB7,
16950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x57, (byte) 0xBD, (byte) 0xC9, (byte) 0xA3, (byte) 0xE8, (byte) 0xC0,
16960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7D, (byte) 0xF6, (byte) 0xA3, (byte) 0x4B, (byte) 0x61, (byte) 0x45,
16970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x06, (byte) 0x5E, (byte) 0x56, (byte) 0xF5, (byte) 0xEF, (byte) 0x76,
16980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x6B, (byte) 0xB7, (byte) 0xD4, (byte) 0xBB, (byte) 0xA4, (byte) 0x3C,
16990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x52, (byte) 0xF8, (byte) 0x06, (byte) 0x67, (byte) 0xF7, (byte) 0xC3,
17000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8C, (byte) 0x5E, (byte) 0xDF, (byte) 0xFE, (byte) 0x30, (byte) 0x2E,
17010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF8, (byte) 0x59, (byte) 0x3C, (byte) 0x3B, (byte) 0xEA, (byte) 0xA0,
17020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x5D, (byte) 0x8F, (byte) 0x18, (byte) 0x73, (byte) 0x1A, (byte) 0x2D,
17030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB1, (byte) 0x55, (byte) 0x07, (byte) 0xC8, (byte) 0x33, (byte) 0xED,
17040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x8A, (byte) 0x5E, (byte) 0xC3, (byte) 0xAE, (byte) 0x51, (byte) 0x31,
17050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xC4, (byte) 0xFA, (byte) 0xE8, (byte) 0xE9, (byte) 0xBE, (byte) 0x2E,
17060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x28, (byte) 0xAA, (byte) 0xED, (byte) 0xA8, (byte) 0x4B, (byte) 0xA3,
17070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x13, (byte) 0xB9, (byte) 0x82, (byte) 0x57, (byte) 0xD1, (byte) 0x72,
17080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0D, (byte) 0xA7, (byte) 0xF8, (byte) 0x67, (byte) 0xB8, (byte) 0x55,
17090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xF3, (byte) 0x06, (byte) 0xAE, (byte) 0xA7, (byte) 0x69, (byte) 0x66,
17100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x0B, (byte) 0x80, (byte) 0x56, (byte) 0x65, (byte) 0xC7, (byte) 0xE9,
17110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x60, (byte) 0xDC, (byte) 0x2D, (byte) 0x4B, (byte) 0x26, (byte) 0xA9,
17120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xED, (byte) 0x54, (byte) 0x79, (byte) 0x9E, (byte) 0x55, (byte) 0x1D,
17130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xEE, (byte) 0x78, (byte) 0x49, (byte) 0xA1, (byte) 0x1F, (byte) 0x9B,
17140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x37, (byte) 0xC0, (byte) 0xBA, (byte) 0xE6, (byte) 0x4B, (byte) 0x3B,
17150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xAF, (byte) 0x12, (byte) 0x99, (byte) 0x32, (byte) 0x14, (byte) 0x8C,
17160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4D, (byte) 0xEB, (byte) 0x08, (byte) 0xA4, (byte) 0xE3, (byte) 0xC6,
17170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x37, (byte) 0x8B, (byte) 0x6E, (byte) 0x7C, (byte) 0xEC, (byte) 0xA3,
17180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x78, (byte) 0xED, (byte) 0x4E, (byte) 0x36, (byte) 0xBC, (byte) 0xA2,
17190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x7D, (byte) 0x11, (byte) 0x0E, (byte) 0xD0, (byte) 0x53, (byte) 0x14,
17200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x93, (byte) 0x16, (byte) 0x54, (byte) 0x45, (byte) 0x79, (byte) 0x7A,
17210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x1A, (byte) 0xA1, (byte) 0xEC, (byte) 0xF3, (byte) 0x12, (byte) 0x3F,
17220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xFE, (byte) 0x68, (byte) 0xFF, (byte) 0x5A, (byte) 0x3F, (byte) 0xE7,
17230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x13, (byte) 0x37, (byte) 0xEB, (byte) 0x60, (byte) 0x0A, (byte) 0x8E,
17240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4F, (byte) 0x54, (byte) 0x46, (byte) 0x19, (byte) 0x82, (byte) 0xBF,
17250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xB7, (byte) 0xD2, (byte) 0x19, (byte) 0x71, (byte) 0x78, (byte) 0x38,
17260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0x4C, (byte) 0xE3, (byte) 0xC4, (byte) 0xEA, (byte) 0x8F, (byte) 0x9B,
17270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        (byte) 0xE5, (byte) 0xBA, (byte) 0x06, (byte) 0xFC,
17280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    };
17290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static final PSSParameterSpec SHA512withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec =
17300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, 190, 1);
1731906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
17325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testGetCommonInstances_Success() throws Exception {
17335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull(Signature.getInstance("SHA1withRSA"));
17345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull(Signature.getInstance("SHA256withRSA"));
17355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull(Signature.getInstance("SHA384withRSA"));
17365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull(Signature.getInstance("SHA512withRSA"));
17377501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertNotNull(Signature.getInstance("NONEwithRSA"));
17385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull(Signature.getInstance("MD5withRSA"));
17395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull(Signature.getInstance("SHA1withDSA"));
17405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
17415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA1withRSA_Key_Success() throws Exception {
17435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
17445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
17455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
17465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
17485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
17495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
17505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must match expected signature",
17525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA1withRSA_Vector1Signature));
17535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
17545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA256withRSA_Key_Success() throws Exception {
17565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
17575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
17585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
17595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA256withRSA");
17615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
17625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
17635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must match expected signature",
17655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA256withRSA_Vector2Signature));
17665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
17675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA384withRSA_Key_Success() throws Exception {
17695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
17705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
17715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
17725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA384withRSA");
17745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
17755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
17765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must match expected signature",
17785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA384withRSA_Vector2Signature));
17795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
17805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA512withRSA_Key_Success() throws Exception {
17825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
17835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
17845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
17855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA512withRSA");
17875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
17885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
17895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must match expected signature",
17915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA512withRSA_Vector2Signature));
17925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
17935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_MD5withRSA_Key_Success() throws Exception {
17955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
17965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
17975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
17985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
17995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("MD5withRSA");
18005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
18015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
18025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
18035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must match expected signature",
18045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(MD5withRSA_Vector2Signature));
18055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
18065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
1807906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testVerify_SHA1withRSAPSS_Key_Success() throws Exception {
1808906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
1809906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
1810906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
1811906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1812906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA1withRSA/PSS");
1813906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
18140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
18150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA1withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
1816906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
1817906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1818906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify",
1819906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                sig.verify(SHA1withRSAPSS_Vector2Signature));
1820906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
1821906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
18220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA1withRSAPSS_NoSalt_Key_Success() throws Exception {
18230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
18240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
18250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
18260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA1withRSA/PSS");
18280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
18290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA1withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
18300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
18310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
18330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA1withRSAPSS_NoSalt_Vector2Signature));
18340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
18350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA1withRSAPSS_MaxSalt_Key_Success() throws Exception {
18370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
18380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
18390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
18400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA1withRSA/PSS");
18420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
18430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA1withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
18440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
18450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
18470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA1withRSAPSS_MaxSalt_Vector2Signature));
18480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
18490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
1850906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testVerify_SHA224withRSAPSS_Key_Success() throws Exception {
1851906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
1852906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
1853906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
1854906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1855906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA224withRSA/PSS");
1856906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
18570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
18580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA224withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
1859906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
1860906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1861906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify",
1862906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                sig.verify(SHA224withRSAPSS_Vector2Signature));
1863906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
1864906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
18650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA224withRSAPSS_NoSalt_Key_Success() throws Exception {
18660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
18670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
18680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
18690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA224withRSA/PSS");
18710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
18720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA224withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
18730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
18740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
18760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA224withRSAPSS_NoSalt_Vector2Signature));
18770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
18780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA224withRSAPSS_MaxSalt_Key_Success() throws Exception {
18800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
18810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
18820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
18830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA224withRSA/PSS");
18850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
18860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA224withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
18870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
18880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
18890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
18900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA224withRSAPSS_MaxSalt_Vector2Signature));
18910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
18920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
1893906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testVerify_SHA256withRSAPSS_Key_Success() throws Exception {
1894906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
1895906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
1896906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
1897906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1898906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA256withRSA/PSS");
1899906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
19000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
19010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA256withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
1902906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
1903906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1904906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify",
1905906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                sig.verify(SHA256withRSAPSS_Vector2Signature));
1906906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
1907906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
19080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA256withRSAPSS_NoSalt_Key_Success() throws Exception {
19090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
19100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
19110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
19120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA256withRSA/PSS");
19140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
19150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA256withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
19160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
19170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
19190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA256withRSAPSS_NoSalt_Vector2Signature));
19200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
19210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA256withRSAPSS_MaxSalt_Key_Success() throws Exception {
19230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
19240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
19250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
19260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA256withRSA/PSS");
19280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
19290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA256withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
19300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
19310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
19330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA256withRSAPSS_MaxSalt_Vector2Signature));
19340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
19350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
1936906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testVerify_SHA384withRSAPSS_Key_Success() throws Exception {
1937906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
1938906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
1939906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
1940906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1941906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA384withRSA/PSS");
1942906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
19430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
19440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA384withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
1945906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
1946906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1947906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify",
1948906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                sig.verify(SHA384withRSAPSS_Vector2Signature));
1949906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
1950906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
19510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA384withRSAPSS_NoSalt_Key_Success() throws Exception {
19520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
19530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
19540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
19550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA384withRSA/PSS");
19570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
19580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA384withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
19590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
19600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
19620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA384withRSAPSS_NoSalt_Vector2Signature));
19630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
19640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA384withRSAPSS_MaxSalt_Key_Success() throws Exception {
19660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
19670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
19680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
19690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA384withRSA/PSS");
19710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
19720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA384withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
19730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
19740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
19760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA384withRSAPSS_MaxSalt_Vector2Signature));
19770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
19780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
1979906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testVerify_SHA512withRSAPSS_Key_Success() throws Exception {
1980906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
1981906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
1982906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
1983906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1984906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA512withRSA/PSS");
1985906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
19860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
19870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA512withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
1988906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
1989906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
1990906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify",
1991906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                sig.verify(SHA512withRSAPSS_Vector2Signature));
1992906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
1993906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
19940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA512withRSAPSS_NoSalt_Key_Success() throws Exception {
19950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
19960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
19970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
19980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
19990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA512withRSA/PSS");
20000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
20010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA512withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
20020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
20030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
20040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
20050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA512withRSAPSS_NoSalt_Vector2Signature));
20060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
20070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
20080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testVerify_SHA512withRSAPSS_MaxSalt_Key_Success() throws Exception {
20090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
20100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
20110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(keySpec);
20120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
20130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA512withRSA/PSS");
20140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
20150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA512withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
20160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
20170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
20180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify",
20190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                sig.verify(SHA512withRSAPSS_MaxSalt_Vector2Signature));
20200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
20210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
20225b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA1withRSA_Key_InitSignThenInitVerify_Success() throws Exception {
20235b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
20245b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
20255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
20265b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
20275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
20295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent);
20305b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PrivateKey privKey = kf.generatePrivate(privKeySpec);
20315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
20335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        // Start a signing operation
20355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
20365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
20375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        // Switch to verify
20395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
20405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
20415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must match expected signature",
20435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA1withRSA_Vector1Signature));
20445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
20455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA1withRSA_Key_TwoMessages_Success() throws Exception {
20475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
20485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
20495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
20505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
20525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
20535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
20555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("First signature must match expected signature",
20565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA1withRSA_Vector1Signature));
20575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
20595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Second signature must match expected signature",
20605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                sig.verify(SHA1withRSA_Vector2Signature));
20615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
20625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA1withRSA_Key_WrongExpectedSignature_Failure() throws Exception {
20645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
20655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec keySpec = new RSAPublicKeySpec(RSA_2048_modulus, RSA_2048_publicExponent);
20665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(keySpec);
20675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
20695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
20705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
20715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertFalse("Signature should fail to verify", sig.verify(SHA1withRSA_Vector2Signature));
20735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
20745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA1withRSA_CrtKeyWithPublicExponent_Success() throws Exception {
20765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
20775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(RSA_2048_modulus,
20785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent, RSA_2048_privateExponent, null, null, null, null, null);
20795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        // The RI fails on this key which is totally unreasonable.
20815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        final PrivateKey privKey;
20825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
20835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            privKey = kf.generatePrivate(keySpec);
20845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        } catch (NullPointerException e) {
20855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            if (StandardNames.IS_RI) {
20865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                return;
20875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            } else {
20885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                fail("Private key should be created");
20895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                return;
20905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            }
20915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
20925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
20945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
20955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
20965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
20975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
20985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
20995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature should match expected",
21005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                Arrays.equals(signature, SHA1withRSA_Vector1Signature));
21015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
21035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
21045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
21055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
21065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
21075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
21085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
21095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21105b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA1withRSA_CrtKey_NoPrivateExponent_Failure() throws Exception {
21115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
21125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(RSA_2048_modulus,
21135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent, null, RSA_2048_primeP, RSA_2048_primeQ, null, null, null);
21145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        // Failing on this key early is okay.
21165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        final PrivateKey privKey;
21175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
21185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            privKey = kf.generatePrivate(keySpec);
21195b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        } catch (NullPointerException e) {
21205b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            return;
2121746a236e2be5dee62c482e27f4c682496d071d8bKenny Root        } catch (InvalidKeySpecException e) {
2122746a236e2be5dee62c482e27f4c682496d071d8bKenny Root            return;
21235b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
21245b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
21265b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
21285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            sig.initSign(privKey);
21295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            fail("Should throw error when private exponent is not available");
21300a156e0126e8015f2791e9a7dd48bbdaeae0c335Brian Carlstrom        } catch (InvalidKeyException expected) {
21315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
21325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
21335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA1withRSA_CrtKey_NoModulus_Failure() throws Exception {
21355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
21365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(null, RSA_2048_publicExponent,
21375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent, RSA_2048_primeP, RSA_2048_primeQ, null, null, null);
21385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        // Failing on this key early is okay.
21405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        final PrivateKey privKey;
21415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
21425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            privKey = kf.generatePrivate(keySpec);
21435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        } catch (NullPointerException e) {
21445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            return;
2145746a236e2be5dee62c482e27f4c682496d071d8bKenny Root        } catch (InvalidKeySpecException e) {
2146746a236e2be5dee62c482e27f4c682496d071d8bKenny Root            return;
21475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
21485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
21505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
21525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            sig.initSign(privKey);
21535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            fail("Should throw error when modulus is not available");
21540a156e0126e8015f2791e9a7dd48bbdaeae0c335Brian Carlstrom        } catch (InvalidKeyException expected) {
21555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
21565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
21575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA1withRSA_Key_EmptyKey_Failure() throws Exception {
21595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
21605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(null, null);
21615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        // Failing on this key early is okay.
21635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        final PrivateKey privKey;
21645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
21655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            privKey = kf.generatePrivate(keySpec);
21665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        } catch (NullPointerException e) {
21675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            return;
2168746a236e2be5dee62c482e27f4c682496d071d8bKenny Root        } catch (InvalidKeySpecException e) {
2169746a236e2be5dee62c482e27f4c682496d071d8bKenny Root            return;
21705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
21715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
21735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        try {
21755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            sig.initSign(privKey);
21765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root            fail("Should throw error when key is empty");
21770a156e0126e8015f2791e9a7dd48bbdaeae0c335Brian Carlstrom        } catch (InvalidKeyException expected) {
21785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        }
21795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
21805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA1withRSA_Key_Success() throws Exception {
21825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
21835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
21845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent);
21855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
21865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
21885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
21895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
21905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
21925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
21935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature should match expected",
21945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                Arrays.equals(signature, SHA1withRSA_Vector1Signature));
21955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
21965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
21975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
21985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
21995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
22005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector1Data);
22015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
22025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
22035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22049d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public void testSign_SHA224withRSA_Key_Success() throws Exception {
22059d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
22069d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
22079d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root                RSA_2048_privateExponent);
22089d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
22099d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        final PrivateKey privKey = kf.generatePrivate(keySpec);
22109d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
22119d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        Signature sig = Signature.getInstance("SHA224withRSA");
22129d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initSign(privKey);
22139d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
22149d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
22159d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        byte[] signature = sig.sign();
22169d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertNotNull("Signature must not be null", signature);
22179d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertTrue("Signature should match expected",
22189d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root                Arrays.equals(signature, SHA224withRSA_Vector2Signature));
22199d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
22209d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
22219d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root                RSA_2048_publicExponent);
22229d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
22239d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initVerify(pubKey);
22249d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
22259d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
22269d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    }
22279d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
22285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA256withRSA_Key_Success() throws Exception {
22295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
22305b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
22315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent);
22325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        final PrivateKey privKey = kf.generatePrivate(keySpec);
22345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA256withRSA");
22365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
22375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
22385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
22405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
22415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature should match expected",
22425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                Arrays.equals(signature, SHA256withRSA_Vector2Signature));
22435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
22455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
22465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
22475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
22485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
22495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
22505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
22515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA384withRSA_Key_Success() throws Exception {
22535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
22545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
22555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent);
22565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
22575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA384withRSA");
22595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
22605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
22615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
22635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
22645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature should match expected",
22655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                Arrays.equals(signature, SHA384withRSA_Vector2Signature));
22665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
22685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
22695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
22705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
22715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
22725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
22735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
22745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA512withRSA_Key_Success() throws Exception {
22765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
22775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
22785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent);
22795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
22805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA512withRSA");
22825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
22835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
22845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
22865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
22875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature should match expected",
22885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                Arrays.equals(signature, SHA512withRSA_Vector2Signature));
22895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
22915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
22925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
22935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
22945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
22955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
22965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
22975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
22985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_MD5withRSA_Key_Success() throws Exception {
22995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
23005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
23015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_privateExponent);
23025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
23035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
23045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("MD5withRSA");
23055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
23065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
23075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
23085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
23095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
23105b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature should match expected",
23115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                Arrays.equals(signature, MD5withRSA_Vector2Signature));
23125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
23135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
23145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root                RSA_2048_publicExponent);
23155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
23165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
23175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
23185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
23195b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
23205b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
2321906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testSign_SHA1withRSAPSS_Key_Success() throws Exception {
2322906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
2323906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
2324906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_privateExponent);
2325906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
2326906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2327906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA1withRSA/PSS");
2328906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initSign(privKey);
2329906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2330906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2331906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        byte[] signature = sig.sign();
2332906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertNotNull("Signature must not be null", signature);
23330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
23340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA1withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
23350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
23370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
23380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
23390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
23400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
23410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
23420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
23430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA1withRSAPSS_NoSalt_Key_Success() throws Exception {
23450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
23460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
23470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
23480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
23490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA1withRSA/PSS");
23510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
23520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA1withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
23530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
23540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
23560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
23570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
23580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA1withRSAPSS_NoSalt_Vector2Signature_ParameterSpec, sig.getParameters());
23590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature should match expected",
23600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                Arrays.equals(signature, SHA1withRSAPSS_NoSalt_Vector2Signature));
2361906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2362906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
2363906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_publicExponent);
2364906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
2365906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
23660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA1withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
23670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
23680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
23690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
23700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA1withRSAPSS_MaxSalt_Key_Success() throws Exception {
23720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
23730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
23740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
23750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
23760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA1withRSA/PSS");
23780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
23790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA1withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
23800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
23810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
23830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
23840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
23850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA1withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec, sig.getParameters());
23860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
23870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
23880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
23890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
23900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig = Signature.getInstance("SHA1withRSA/PSS");
23910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
23920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA1withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
2393906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2394906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
2395906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
2396906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2397906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testSign_SHA224withRSAPSS_Key_Success() throws Exception {
2398906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
2399906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
2400906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_privateExponent);
2401906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
2402906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2403906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA224withRSA/PSS");
2404906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initSign(privKey);
2405906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2406906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2407906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        byte[] signature = sig.sign();
2408906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertNotNull("Signature must not be null", signature);
24090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
24100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA224withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
24110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
24130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
24140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
24150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
24160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
24170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
24180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
24190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA224withRSAPSS_NoSalt_Key_Success() throws Exception {
24210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
24220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
24230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
24240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
24250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA224withRSA/PSS");
24270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
24280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA224withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
24290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
24300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
24320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
24330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
24340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA224withRSAPSS_NoSalt_Vector2Signature_ParameterSpec, sig.getParameters());
24350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature should match expected",
24360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                Arrays.equals(signature, SHA224withRSAPSS_NoSalt_Vector2Signature));
24370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
24390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
24400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
24410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
24420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA224withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
24430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
24440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
24450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
24460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA224withRSAPSS_MaxSalt_Key_Success() throws Exception {
24480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
24490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
24500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
24510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
24520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA224withRSA/PSS");
24540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
24550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA224withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
24560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
24570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
24590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
24600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
24610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA224withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec, sig.getParameters());
2462906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2463906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
2464906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_publicExponent);
2465906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
24660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig = Signature.getInstance("SHA224withRSA/PSS");
2467906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
24680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA224withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
2469906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2470906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
2471906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
2472906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2473906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testSign_SHA256withRSAPSS_Key_Success() throws Exception {
2474906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
2475906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
2476906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_privateExponent);
2477906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
2478906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2479906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA256withRSA/PSS");
2480906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initSign(privKey);
2481906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2482906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2483906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        byte[] signature = sig.sign();
2484906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertNotNull("Signature must not be null", signature);
24850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
24860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA256withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
24870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
24890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
24900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
24910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
24920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
24930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
24940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
24950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
24960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA256withRSAPSS_NoSalt_Key_Success() throws Exception {
24970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
24980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
24990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
25000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
25010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA256withRSA/PSS");
25030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
25040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA256withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
25050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
25060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
25080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
25090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
25100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA256withRSAPSS_NoSalt_Vector2Signature_ParameterSpec, sig.getParameters());
25110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature should match expected",
25120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                Arrays.equals(signature, SHA256withRSAPSS_NoSalt_Vector2Signature));
2513906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2514906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
2515906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_publicExponent);
2516906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
2517906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
25180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA256withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
25190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
25200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
25210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
25220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA256withRSAPSS_MaxSalt_Key_Success() throws Exception {
25240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
25250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
25260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
25270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
25280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA256withRSA/PSS");
25300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
25310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA256withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
25320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
25330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
25350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
25360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
25370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA256withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec, sig.getParameters());
25380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
25400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
25410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
25420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig = Signature.getInstance("SHA256withRSA/PSS");
25430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
25440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA256withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
2545906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2546906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
2547906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
2548906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2549906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testSign_SHA384withRSAPSS_Key_Success() throws Exception {
2550906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
2551906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
2552906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_privateExponent);
2553906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
2554906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2555906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA384withRSA/PSS");
2556906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initSign(privKey);
2557906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2558906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2559906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        byte[] signature = sig.sign();
2560906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertNotNull("Signature must not be null", signature);
25610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
25620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA384withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
25630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
25650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
25660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
25670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
25680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
25690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
25700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
25710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA384withRSAPSS_NoSalt_Key_Success() throws Exception {
25730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
25740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
25750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
25760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
25770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA384withRSA/PSS");
25790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
25800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA384withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
25810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
25820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
25840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
25850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
25860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA384withRSAPSS_NoSalt_Vector2Signature_ParameterSpec, sig.getParameters());
25870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature should match expected",
25880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                Arrays.equals(signature, SHA384withRSAPSS_NoSalt_Vector2Signature));
2589906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2590906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
2591906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_publicExponent);
2592906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
2593906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
25940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA384withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
25950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
25960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
25970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
25980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
25990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA384withRSAPSS_MaxSalt_Key_Success() throws Exception {
26000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
26010bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
26020bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
26030bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
26040bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26050bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA384withRSA/PSS");
26060bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
26070bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA384withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
26080bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
26090bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26100bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
26110bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
26120bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
26130bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA384withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec, sig.getParameters());
26140bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26150bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
26160bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
26170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
26180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig = Signature.getInstance("SHA384withRSA/PSS");
26190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
26200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA384withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
2621906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2622906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
2623906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
2624906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2625906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    public void testSign_SHA512withRSAPSS_Key_Success() throws Exception {
2626906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
2627906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
2628906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_privateExponent);
2629906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
2630906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2631906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        Signature sig = Signature.getInstance("SHA512withRSA/PSS");
2632906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initSign(privKey);
2633906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2634906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2635906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        byte[] signature = sig.sign();
2636906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertNotNull("Signature must not be null", signature);
26370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
26380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA512withRSAPSS_Vector2Signature_ParameterSpec, sig.getParameters());
2639906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
2640906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
2641906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin                RSA_2048_publicExponent);
2642906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
2643906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.initVerify(pubKey);
2644906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        sig.update(Vector2Data);
2645906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
2646906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin    }
2647906d4ce7d4e661ca2fd49ecb712f8db2278eb41aAlex Klyubin
26480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA512withRSAPSS_NoSalt_Key_Success() throws Exception {
26490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
26500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
26510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
26520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
26530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA512withRSA/PSS");
26550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
26560bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA512withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
26570bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
26580bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26590bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
26600bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
26610bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
26620bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA512withRSAPSS_NoSalt_Vector2Signature_ParameterSpec, sig.getParameters());
26630bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature should match expected",
26640bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                Arrays.equals(signature, SHA512withRSAPSS_NoSalt_Vector2Signature));
26650bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26660bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
26670bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
26680bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
26690bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
26700bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA512withRSAPSS_NoSalt_Vector2Signature_ParameterSpec);
26710bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
26720bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
26730bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
26740bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26750bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    public void testSign_SHA512withRSAPSS_MaxSalt_Key_Success() throws Exception {
26760bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        KeyFactory kf = KeyFactory.getInstance("RSA");
26770bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
26780bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_privateExponent);
26790bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PrivateKey privKey = kf.generatePrivate(keySpec);
26800bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26810bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        Signature sig = Signature.getInstance("SHA512withRSA/PSS");
26820bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initSign(privKey);
26830bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA512withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
26840bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
26850bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26860bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        byte[] signature = sig.sign();
26870bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull("Signature must not be null", signature);
26880bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSAlgorithmParametersEquals(
26890bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                SHA512withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec, sig.getParameters());
26900bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
26910bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
26920bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                RSA_2048_publicExponent);
26930bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PublicKey pubKey = kf.generatePublic(pubKeySpec);
26940bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig = Signature.getInstance("SHA512withRSA/PSS");
26950bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.initVerify(pubKey);
26960bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.setParameter(SHA512withRSAPSS_MaxSalt_Vector2Signature_ParameterSpec);
26970bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        sig.update(Vector2Data);
26980bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertTrue("Signature must verify correctly", sig.verify(signature));
26990bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
27000bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
27017501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testSign_NONEwithRSA_Key_Success() throws Exception {
27027501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
27037501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
27047501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_privateExponent);
27057501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
27067501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27077501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
27087501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initSign(privKey);
27097501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.update(Vector1Data);
27107501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27117501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        byte[] signature = sig.sign();
27127501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertNotNull("Signature must not be null", signature);
27137501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertTrue("Signature should match expected",
27147501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                Arrays.equals(signature, NONEwithRSA_Vector1Signature));
27157501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27167501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
27177501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_publicExponent);
27187501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
27197501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initVerify(pubKey);
27207501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.update(Vector1Data);
27217501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
27227501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
27237501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27247501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testVerify_NONEwithRSA_Key_WrongSignature_Failure() throws Exception {
27257501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
27267501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27277501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
27287501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_publicExponent);
27297501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
27307501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27317501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
27327501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initVerify(pubKey);
27337501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.update(Vector1Data);
27347501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertFalse("Invalid signature must not verify", sig.verify("Invalid".getBytes()));
27357501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
27367501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27377501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testSign_NONEwithRSA_Key_DataTooLarge_Failure() throws Exception {
27387501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
27397501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
27407501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_privateExponent);
27417501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
27427501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27437501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
27447501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initSign(privKey);
27457501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27467501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        final int oneTooBig = RSA_2048_modulus.bitLength() - 10;
27477501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        for (int i = 0; i < oneTooBig; i++) {
27487501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.update((byte) i);
27497501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
27507501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27517501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        try {
27527501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.sign();
27537501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            fail("Should throw exception when data is too large");
27540a156e0126e8015f2791e9a7dd48bbdaeae0c335Brian Carlstrom        } catch (SignatureException expected) {
27557501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
27567501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
27577501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27587501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testSign_NONEwithRSA_Key_DataTooLarge_SingleByte_Failure() throws Exception {
27597501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
27607501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(RSA_2048_modulus,
27617501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_privateExponent);
27627501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
27637501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27647501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
27657501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initSign(privKey);
27667501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27677501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        // This should make it two bytes too big.
27687501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        final int oneTooBig = RSA_2048_modulus.bitLength() - 10;
27697501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        for (int i = 0; i < oneTooBig; i++) {
27707501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.update((byte) i);
27717501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
27727501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27737501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        try {
27747501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.sign();
27757501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            fail("Should throw exception when data is too large");
27760a156e0126e8015f2791e9a7dd48bbdaeae0c335Brian Carlstrom        } catch (SignatureException expected) {
27777501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
27787501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
27797501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27807501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testVerify_NONEwithRSA_Key_DataTooLarge_Failure() throws Exception {
27817501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
27827501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27837501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
27847501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_publicExponent);
27857501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
27867501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27877501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
27887501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initVerify(pubKey);
27897501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27907501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        // This should make it one bytes too big.
27917501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        final int oneTooBig = RSA_2048_modulus.bitLength() + 1;
27927501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        final byte[] vector = new byte[oneTooBig];
27937501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        for (int i = 0; i < oneTooBig; i++) {
27947501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            vector[i] = (byte) Vector1Data[i % Vector1Data.length];
27957501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
27967501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.update(vector);
27977501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
27987501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertFalse("Should not verify when signature is too large",
27997501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                sig.verify(NONEwithRSA_Vector1Signature));
28007501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
28017501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28027501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testVerify_NONEwithRSA_Key_DataTooLarge_SingleByte_Failure() throws Exception {
28037501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
28047501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28057501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
28067501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_publicExponent);
28077501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
28087501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28097501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
28107501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initVerify(pubKey);
28117501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28127501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        // This should make it twice as big as it should be.
28137501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        final int tooBig = RSA_2048_modulus.bitLength() * 2;
28147501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        for (int i = 0; i < tooBig; i++) {
28157501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.update((byte) Vector1Data[i % Vector1Data.length]);
28167501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
28177501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28187501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertFalse("Should not verify when signature is too large",
28197501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                sig.verify(NONEwithRSA_Vector1Signature));
28207501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
28217501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28227501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testVerify_NONEwithRSA_Key_SignatureTooSmall_Failure() throws Exception {
28237501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
28247501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28257501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
28267501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_publicExponent);
28277501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
28287501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28297501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
28307501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initVerify(pubKey);
28317501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.update(Vector1Data);
28327501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28337501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        assertFalse("Invalid signature should not verify", sig.verify("Invalid sig".getBytes()));
28347501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
28357501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28367501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    public void testVerify_NONEwithRSA_Key_SignatureTooLarge_Failure() throws Exception {
28377501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        KeyFactory kf = KeyFactory.getInstance("RSA");
28387501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28397501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(RSA_2048_modulus,
28407501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                RSA_2048_publicExponent);
28417501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
28427501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28437501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        Signature sig = Signature.getInstance("NONEwithRSA");
28447501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.initVerify(pubKey);
28457501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        sig.update(Vector1Data);
28467501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28477501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        byte[] invalidSignature = new byte[NONEwithRSA_Vector1Signature.length * 2];
28487501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        System.arraycopy(NONEwithRSA_Vector1Signature, 0, invalidSignature, 0,
28497501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                NONEwithRSA_Vector1Signature.length);
28507501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        System.arraycopy(NONEwithRSA_Vector1Signature, 0, invalidSignature,
28517501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root                NONEwithRSA_Vector1Signature.length, NONEwithRSA_Vector1Signature.length);
28527501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28537501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        try {
28547501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            sig.verify(invalidSignature);
28557501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root            fail("Should throw exception when signature is too large");
28560a156e0126e8015f2791e9a7dd48bbdaeae0c335Brian Carlstrom        } catch (SignatureException expected) {
28577501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root        }
28587501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root    }
28597501e29e0182accf28cc317870a3bbe1e25f4bfaKenny Root
28605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    /*
28615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * These tests were generated with this DSA private key:
28625b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     *
28635b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * -----BEGIN DSA PRIVATE KEY-----
28645b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * MIIBugIBAAKBgQCeYcKJ73epThNnZB8JAf4kE1Pgt5CoTnb+iYJ/esU8TgwgVTCV
28655b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * QoXhQH0njwcN6NyZ77MHlDTWfP+cvmnT60Q3UO9J+OJb2NEQhJfq46UcwE5pynA9
28665b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * eLkW5f5hXYpasyxhtgE70AF8Mo3h82kOi1jGzwCU+EkqS+raAP9L0L5AIwIVAL/u
28675b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * qg8SNFBy+GAT2PFBARClL1dfAoGAd9R6EsyBfn7rOvvmhm1aEB2tqU+5A10hGuQw
28685b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * lXWOzV7RvQpF7uf3a2UCYNAurz28B90rjjPAk4DZK6dxV3a8jrng1/QjjUEal08s
28695b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * G9VLZuj60lANF6s0MT2kiNiOqKduFwO3D2h8ZHuSuGPkmmcYgSfUCxNI031O9qiP
28705b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * VhctCFECgYAz7i1DhjRGUkCdYQd5tVaI42lhXOV71MTYPbuFOIxTL/hny7Z0PZWR
28715b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * A1blmYE6vrArDEhzpmRvDJZSIMzMfJjUIGu1KO73zpo9siK0xY0/sw5r3QC9txP2
28725b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * 2Mv3BUIl5TLrs9outQJ0VMwldY2fElgCLWcSVkH44qZwWir1cq+cIwIUEGPDardb
28735b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * pNvWlWgTDD6a6ZTby+M=
28745b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * -----END DSA PRIVATE KEY-----
28755b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     *
28765b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     */
28775b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
28785b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger DSA_priv = new BigInteger(new byte[] {
28795b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x10, (byte) 0x63, (byte) 0xc3, (byte) 0x6a, (byte) 0xb7, (byte) 0x5b, (byte) 0xa4, (byte) 0xdb,
28805b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd6, (byte) 0x95, (byte) 0x68, (byte) 0x13, (byte) 0x0c, (byte) 0x3e, (byte) 0x9a, (byte) 0xe9,
28815b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x94, (byte) 0xdb, (byte) 0xcb, (byte) 0xe3,
28825b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
28835b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
28845b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger DSA_pub = new BigInteger(new byte[] {
28855b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x33, (byte) 0xee, (byte) 0x2d, (byte) 0x43, (byte) 0x86, (byte) 0x34, (byte) 0x46, (byte) 0x52,
28865b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x40, (byte) 0x9d, (byte) 0x61, (byte) 0x07, (byte) 0x79, (byte) 0xb5, (byte) 0x56, (byte) 0x88,
28875b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe3, (byte) 0x69, (byte) 0x61, (byte) 0x5c, (byte) 0xe5, (byte) 0x7b, (byte) 0xd4, (byte) 0xc4,
28885b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd8, (byte) 0x3d, (byte) 0xbb, (byte) 0x85, (byte) 0x38, (byte) 0x8c, (byte) 0x53, (byte) 0x2f,
28895b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf8, (byte) 0x67, (byte) 0xcb, (byte) 0xb6, (byte) 0x74, (byte) 0x3d, (byte) 0x95, (byte) 0x91,
28905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x03, (byte) 0x56, (byte) 0xe5, (byte) 0x99, (byte) 0x81, (byte) 0x3a, (byte) 0xbe, (byte) 0xb0,
28915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2b, (byte) 0x0c, (byte) 0x48, (byte) 0x73, (byte) 0xa6, (byte) 0x64, (byte) 0x6f, (byte) 0x0c,
28925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x96, (byte) 0x52, (byte) 0x20, (byte) 0xcc, (byte) 0xcc, (byte) 0x7c, (byte) 0x98, (byte) 0xd4,
28935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x20, (byte) 0x6b, (byte) 0xb5, (byte) 0x28, (byte) 0xee, (byte) 0xf7, (byte) 0xce, (byte) 0x9a,
28945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3d, (byte) 0xb2, (byte) 0x22, (byte) 0xb4, (byte) 0xc5, (byte) 0x8d, (byte) 0x3f, (byte) 0xb3,
28955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x0e, (byte) 0x6b, (byte) 0xdd, (byte) 0x00, (byte) 0xbd, (byte) 0xb7, (byte) 0x13, (byte) 0xf6,
28965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd8, (byte) 0xcb, (byte) 0xf7, (byte) 0x05, (byte) 0x42, (byte) 0x25, (byte) 0xe5, (byte) 0x32,
28975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xeb, (byte) 0xb3, (byte) 0xda, (byte) 0x2e, (byte) 0xb5, (byte) 0x02, (byte) 0x74, (byte) 0x54,
28985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xcc, (byte) 0x25, (byte) 0x75, (byte) 0x8d, (byte) 0x9f, (byte) 0x12, (byte) 0x58, (byte) 0x02,
28995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2d, (byte) 0x67, (byte) 0x12, (byte) 0x56, (byte) 0x41, (byte) 0xf8, (byte) 0xe2, (byte) 0xa6,
29005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x70, (byte) 0x5a, (byte) 0x2a, (byte) 0xf5, (byte) 0x72, (byte) 0xaf, (byte) 0x9c, (byte) 0x23,
29015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
29025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger DSA_P = new BigInteger(new byte[] {
29045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x00, (byte) 0x9e, (byte) 0x61, (byte) 0xc2, (byte) 0x89, (byte) 0xef, (byte) 0x77, (byte) 0xa9,
29055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4e, (byte) 0x13, (byte) 0x67, (byte) 0x64, (byte) 0x1f, (byte) 0x09, (byte) 0x01, (byte) 0xfe,
29065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x24, (byte) 0x13, (byte) 0x53, (byte) 0xe0, (byte) 0xb7, (byte) 0x90, (byte) 0xa8, (byte) 0x4e,
29075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x76, (byte) 0xfe, (byte) 0x89, (byte) 0x82, (byte) 0x7f, (byte) 0x7a, (byte) 0xc5, (byte) 0x3c,
29085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x4e, (byte) 0x0c, (byte) 0x20, (byte) 0x55, (byte) 0x30, (byte) 0x95, (byte) 0x42, (byte) 0x85,
29095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xe1, (byte) 0x40, (byte) 0x7d, (byte) 0x27, (byte) 0x8f, (byte) 0x07, (byte) 0x0d, (byte) 0xe8,
29105b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xdc, (byte) 0x99, (byte) 0xef, (byte) 0xb3, (byte) 0x07, (byte) 0x94, (byte) 0x34, (byte) 0xd6,
29115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x7c, (byte) 0xff, (byte) 0x9c, (byte) 0xbe, (byte) 0x69, (byte) 0xd3, (byte) 0xeb, (byte) 0x44,
29125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x37, (byte) 0x50, (byte) 0xef, (byte) 0x49, (byte) 0xf8, (byte) 0xe2, (byte) 0x5b, (byte) 0xd8,
29135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd1, (byte) 0x10, (byte) 0x84, (byte) 0x97, (byte) 0xea, (byte) 0xe3, (byte) 0xa5, (byte) 0x1c,
29145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc0, (byte) 0x4e, (byte) 0x69, (byte) 0xca, (byte) 0x70, (byte) 0x3d, (byte) 0x78, (byte) 0xb9,
29155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x16, (byte) 0xe5, (byte) 0xfe, (byte) 0x61, (byte) 0x5d, (byte) 0x8a, (byte) 0x5a, (byte) 0xb3,
29165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2c, (byte) 0x61, (byte) 0xb6, (byte) 0x01, (byte) 0x3b, (byte) 0xd0, (byte) 0x01, (byte) 0x7c,
29175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x32, (byte) 0x8d, (byte) 0xe1, (byte) 0xf3, (byte) 0x69, (byte) 0x0e, (byte) 0x8b, (byte) 0x58,
29185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xc6, (byte) 0xcf, (byte) 0x00, (byte) 0x94, (byte) 0xf8, (byte) 0x49, (byte) 0x2a, (byte) 0x4b,
29195b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xea, (byte) 0xda, (byte) 0x00, (byte) 0xff, (byte) 0x4b, (byte) 0xd0, (byte) 0xbe, (byte) 0x40,
29205b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x23,
29215b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
29225b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29235b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger DSA_Q = new BigInteger(new byte[] {
29245b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x00, (byte) 0xbf, (byte) 0xee, (byte) 0xaa, (byte) 0x0f, (byte) 0x12, (byte) 0x34, (byte) 0x50,
29255b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x72, (byte) 0xf8, (byte) 0x60, (byte) 0x13, (byte) 0xd8, (byte) 0xf1, (byte) 0x41, (byte) 0x01,
29265b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x10, (byte) 0xa5, (byte) 0x2f, (byte) 0x57, (byte) 0x5f,
29275b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
29285b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29295b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    private static final BigInteger DSA_G = new BigInteger(new byte[] {
29305b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x77, (byte) 0xd4, (byte) 0x7a, (byte) 0x12, (byte) 0xcc, (byte) 0x81, (byte) 0x7e, (byte) 0x7e,
29315b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xeb, (byte) 0x3a, (byte) 0xfb, (byte) 0xe6, (byte) 0x86, (byte) 0x6d, (byte) 0x5a, (byte) 0x10,
29325b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1d, (byte) 0xad, (byte) 0xa9, (byte) 0x4f, (byte) 0xb9, (byte) 0x03, (byte) 0x5d, (byte) 0x21,
29335b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x1a, (byte) 0xe4, (byte) 0x30, (byte) 0x95, (byte) 0x75, (byte) 0x8e, (byte) 0xcd, (byte) 0x5e,
29345b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd1, (byte) 0xbd, (byte) 0x0a, (byte) 0x45, (byte) 0xee, (byte) 0xe7, (byte) 0xf7, (byte) 0x6b,
29355b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x65, (byte) 0x02, (byte) 0x60, (byte) 0xd0, (byte) 0x2e, (byte) 0xaf, (byte) 0x3d, (byte) 0xbc,
29365b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x07, (byte) 0xdd, (byte) 0x2b, (byte) 0x8e, (byte) 0x33, (byte) 0xc0, (byte) 0x93, (byte) 0x80,
29375b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xd9, (byte) 0x2b, (byte) 0xa7, (byte) 0x71, (byte) 0x57, (byte) 0x76, (byte) 0xbc, (byte) 0x8e,
29385b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xb9, (byte) 0xe0, (byte) 0xd7, (byte) 0xf4, (byte) 0x23, (byte) 0x8d, (byte) 0x41, (byte) 0x1a,
29395b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x97, (byte) 0x4f, (byte) 0x2c, (byte) 0x1b, (byte) 0xd5, (byte) 0x4b, (byte) 0x66, (byte) 0xe8,
29405b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xfa, (byte) 0xd2, (byte) 0x50, (byte) 0x0d, (byte) 0x17, (byte) 0xab, (byte) 0x34, (byte) 0x31,
29415b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x3d, (byte) 0xa4, (byte) 0x88, (byte) 0xd8, (byte) 0x8e, (byte) 0xa8, (byte) 0xa7, (byte) 0x6e,
29425b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x17, (byte) 0x03, (byte) 0xb7, (byte) 0x0f, (byte) 0x68, (byte) 0x7c, (byte) 0x64, (byte) 0x7b,
29435b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x92, (byte) 0xb8, (byte) 0x63, (byte) 0xe4, (byte) 0x9a, (byte) 0x67, (byte) 0x18, (byte) 0x81,
29445b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x27, (byte) 0xd4, (byte) 0x0b, (byte) 0x13, (byte) 0x48, (byte) 0xd3, (byte) 0x7d, (byte) 0x4e,
29455b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xf6, (byte) 0xa8, (byte) 0x8f, (byte) 0x56, (byte) 0x17, (byte) 0x2d, (byte) 0x08, (byte) 0x51,
29465b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    });
29475b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29485b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    /**
29495b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * A possible signature using SHA1withDSA of Vector2Data. Note that DSS is
29505b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * randomized, so this won't be the exact signature you'll get out of
29515b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     * another signing operation unless you use a fixed RNG.
29525b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root     */
29535b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public static final byte[] SHA1withDSA_Vector2Signature = new byte[] {
29545b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x30, (byte) 0x2d, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x88, (byte) 0xef, (byte) 0xac,
29555b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x2b, (byte) 0x8b, (byte) 0xe2, (byte) 0x61, (byte) 0xc6, (byte) 0x2b, (byte) 0xea, (byte) 0xd5,
29565b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x96, (byte) 0xbc, (byte) 0xb0, (byte) 0xa1, (byte) 0x30, (byte) 0x0c, (byte) 0x1f, (byte) 0xed,
29575b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x11, (byte) 0x02, (byte) 0x14, (byte) 0x15, (byte) 0xc4, (byte) 0xfc, (byte) 0x82, (byte) 0x6f,
29585b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0x17, (byte) 0xdc, (byte) 0x87, (byte) 0x82, (byte) 0x75, (byte) 0x23, (byte) 0xd4, (byte) 0x58,
29595b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        (byte) 0xdc, (byte) 0x73, (byte) 0x3d, (byte) 0xf3, (byte) 0x51, (byte) 0xc0, (byte) 0x57,
29605b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    };
29615b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29629d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    /**
29639d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * A possible signature using SHA224withDSA of Vector2Data. Note that DSS is
29649d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * randomized, so this won't be the exact signature you'll get out of
29659d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * another signing operation unless you use a fixed RNG.
29669d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     */
29679d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public static final byte[] SHA224withDSA_Vector2Signature = new byte[] {
29689d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x30, (byte) 0x2D, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0xAD, (byte) 0xE5, (byte) 0x6D,
29699d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xF5, (byte) 0x11, (byte) 0x8D, (byte) 0x2E, (byte) 0x62, (byte) 0x5D, (byte) 0x98, (byte) 0x8A,
29709d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xC4, (byte) 0x88, (byte) 0x7E, (byte) 0xE6, (byte) 0xA3, (byte) 0x44, (byte) 0x99, (byte) 0xEF,
29719d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x49, (byte) 0x02, (byte) 0x14, (byte) 0x15, (byte) 0x3E, (byte) 0x32, (byte) 0xD6, (byte) 0xF9,
29729d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x79, (byte) 0x2C, (byte) 0x60, (byte) 0x6E, (byte) 0xF9, (byte) 0xA9, (byte) 0x78, (byte) 0xE7,
29739d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x4B, (byte) 0x87, (byte) 0x08, (byte) 0x96, (byte) 0x60, (byte) 0xDE, (byte) 0xB5
29749d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    };
29759d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
29769d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    /**
29779d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * A possible signature using SHA256withDSA of Vector2Data. Note that DSS is
29789d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * randomized, so this won't be the exact signature you'll get out of
29799d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     * another signing operation unless you use a fixed RNG.
29809d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root     */
29819d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public static final byte[] SHA256withDSA_Vector2Signature = new byte[] {
29829d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x30, (byte) 0x2D, (byte) 0x02, (byte) 0x14, (byte) 0x0A, (byte) 0xB1, (byte) 0x74, (byte) 0x45,
29839d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0xE1, (byte) 0x63, (byte) 0x43, (byte) 0x68, (byte) 0x65, (byte) 0xBC, (byte) 0xCA, (byte) 0x45,
29849d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x27, (byte) 0x11, (byte) 0x4D, (byte) 0x52, (byte) 0xFB, (byte) 0x22, (byte) 0x93, (byte) 0xDD,
29859d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x98, (byte) 0x32, (byte) 0x1A, (byte) 0x16, (byte) 0x77,
29869d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x49, (byte) 0xA7, (byte) 0x78, (byte) 0xFD, (byte) 0xE0, (byte) 0xF7, (byte) 0x71, (byte) 0xD4,
29879d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        (byte) 0x80, (byte) 0x50, (byte) 0xA7, (byte) 0xDD, (byte) 0x94, (byte) 0xD1, (byte) 0x6C
29889d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    };
29899d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
29905b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testSign_SHA1withDSA_Key_Success() throws Exception {
29915b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("DSA");
29925b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        DSAPrivateKeySpec keySpec = new DSAPrivateKeySpec(DSA_priv, DSA_P, DSA_Q, DSA_G);
29935b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
29945b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29955b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withDSA");
29965b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initSign(privKey);
29975b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
29985b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
29995b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        byte[] signature = sig.sign();
30005b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertNotNull("Signature must not be null", signature);
30015b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
30025b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(DSA_pub, DSA_P, DSA_Q, DSA_G);
30035b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
30045b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
30055b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
30065b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
30075b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
30085b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
30095b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    public void testVerify_SHA1withDSA_Key_Success() throws Exception {
30105b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        KeyFactory kf = KeyFactory.getInstance("DSA");
30115b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(DSA_pub, DSA_P, DSA_Q, DSA_G);
30125b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
30135b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root
30145b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        Signature sig = Signature.getInstance("SHA1withDSA");
30155b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.initVerify(pubKey);
30165b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        sig.update(Vector2Data);
30175b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root        assertTrue("Signature must verify correctly", sig.verify(SHA1withDSA_Vector2Signature));
30185b57eb538f8da8e97cf88a310d75d14dfc91624cKenny Root    }
3019eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom
30209d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public void testSign_SHA224withDSA_Key_Success() throws Exception {
30219d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        KeyFactory kf = KeyFactory.getInstance("DSA");
30229d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        DSAPrivateKeySpec keySpec = new DSAPrivateKeySpec(DSA_priv, DSA_P, DSA_Q, DSA_G);
30239d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
30249d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30259d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        Signature sig = Signature.getInstance("SHA224withDSA");
30269d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initSign(privKey);
30279d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
30289d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30299d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        byte[] signature = sig.sign();
30309d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertNotNull("Signature must not be null", signature);
30319d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30329d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(DSA_pub, DSA_P, DSA_Q, DSA_G);
30339d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
30349d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initVerify(pubKey);
30359d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
30369d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
30379d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    }
30389d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30399d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public void testVerify_SHA224withDSA_Key_Success() throws Exception {
30409d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        KeyFactory kf = KeyFactory.getInstance("DSA");
30419d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(DSA_pub, DSA_P, DSA_Q, DSA_G);
30429d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
30439d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30449d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        Signature sig = Signature.getInstance("SHA224withDSA");
30459d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initVerify(pubKey);
30469d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
30479d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertTrue("Signature must verify correctly", sig.verify(SHA224withDSA_Vector2Signature));
30489d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    }
30499d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30509d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public void testSign_SHA256withDSA_Key_Success() throws Exception {
30519d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        KeyFactory kf = KeyFactory.getInstance("DSA");
30529d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        DSAPrivateKeySpec keySpec = new DSAPrivateKeySpec(DSA_priv, DSA_P, DSA_Q, DSA_G);
30539d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PrivateKey privKey = kf.generatePrivate(keySpec);
30549d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30559d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        Signature sig = Signature.getInstance("SHA256withDSA");
30569d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initSign(privKey);
30579d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
30589d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30599d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        byte[] signature = sig.sign();
30609d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertNotNull("Signature must not be null", signature);
30619d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30629d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(DSA_pub, DSA_P, DSA_Q, DSA_G);
30639d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
30649d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initVerify(pubKey);
30659d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
30669d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertTrue("Signature must verify correctly", sig.verify(signature));
30679d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    }
30689d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30699d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    public void testVerify_SHA256withDSA_Key_Success() throws Exception {
30709d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        KeyFactory kf = KeyFactory.getInstance("DSA");
30719d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        DSAPublicKeySpec pubKeySpec = new DSAPublicKeySpec(DSA_pub, DSA_P, DSA_Q, DSA_G);
30729d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        PublicKey pubKey = kf.generatePublic(pubKeySpec);
30739d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
30749d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        Signature sig = Signature.getInstance("SHA256withDSA");
30759d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.initVerify(pubKey);
30769d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        sig.update(Vector2Data);
30779d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        assertTrue("Signature must verify correctly", sig.verify(SHA256withDSA_Vector2Signature));
30789d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root    }
30799d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root
3080eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    // NetscapeCertRequest looks up Signature algorithms by OID from
3081eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    // BC but BC version 1.47 had registration bugs and MD5withRSA was
3082eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    // overlooked.  http://b/7453821
3083eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    public void testGetInstanceFromOID() throws Exception {
30849d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        if (StandardNames.IS_RI) {
30859d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root            return;
30869d72aaddcedda0eb4519f84805d2212fcc25ebafKenny Root        }
3087eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.2.840.113549.1.1.4");  // MD5withRSA
3088eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.2.840.113549.1.1.5");  // SHA1withRSA
3089eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.3.14.3.2.29");         // SHA1withRSA
3090eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.2.840.113549.1.1.11"); // SHA256withRSA
3091eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.2.840.113549.1.1.12"); // SHA384withRSA
3092eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.2.840.113549.1.1.13"); // SHA512withRSA
3093eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertBouncyCastleSignatureFromOID("1.2.840.10040.4.3");     // SHA1withDSA
3094eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    }
3095eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom
3096eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    private void assertBouncyCastleSignatureFromOID(String oid) throws Exception {
3097eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        Signature signature = Signature.getInstance(oid, "BC");
3098eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertNotNull(oid, signature);
3099eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom        assertEquals(oid, signature.getAlgorithm());
3100eef7e9357c272a9154f007e8bee2a09eed66d101Brian Carlstrom    }
310178f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
310278f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root    private final int THREAD_COUNT = 10;
310378f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
310478f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root    private void testSignature_MultipleThreads_Misuse(final Signature s) throws Exception {
310578f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        ExecutorService es = Executors.newFixedThreadPool(THREAD_COUNT);
310678f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
310778f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        final CountDownLatch latch = new CountDownLatch(THREAD_COUNT);
310878f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        final byte[] message = new byte[64];
310978f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
311078f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        for (int i = 0; i < THREAD_COUNT; i++) {
311178f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root            es.submit(new Callable<Void>() {
311278f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                @Override
311378f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                public Void call() throws Exception {
311478f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                    // Try to make sure all the threads are ready first.
311578f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                    latch.countDown();
311678f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                    latch.await();
311778f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
311878f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                    for (int j = 0; j < 100; j++) {
311978f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                        s.update(message);
312078f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                        s.sign();
312178f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                    }
312278f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root
312378f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                    return null;
312478f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root                }
312578f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root            });
312678f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        }
312778f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        es.shutdown();
312878f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root        assertTrue("Test should not timeout", es.awaitTermination(1, TimeUnit.MINUTES));
312978f45cf50a1f76ca2d671dc7b2710ce488ebdaa9Kenny Root    }
3130740ce7567788129602de81396af56c03b838c157Adam Langley
3131740ce7567788129602de81396af56c03b838c157Adam Langley    public void testArbitraryCurve() throws Exception {
3132740ce7567788129602de81396af56c03b838c157Adam Langley        // These are the parameters for the BitCoin curve (secp256k1). See
3133740ce7567788129602de81396af56c03b838c157Adam Langley        // https://en.bitcoin.it/wiki/Secp256k1.
3134740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger p = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16);
3135740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger a = BigInteger.valueOf(0);
3136740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger b = BigInteger.valueOf(7);
3137740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger x = new BigInteger("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16);
3138740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger y = new BigInteger("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16);
3139740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger order = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16);
3140740ce7567788129602de81396af56c03b838c157Adam Langley        final int cofactor = 1;
3141740ce7567788129602de81396af56c03b838c157Adam Langley
3142740ce7567788129602de81396af56c03b838c157Adam Langley        final ECParameterSpec spec = new ECParameterSpec(new EllipticCurve(new ECFieldFp(p), a, b), new ECPoint(x, y), order, cofactor);
3143740ce7567788129602de81396af56c03b838c157Adam Langley        final KeyFactory factory = KeyFactory.getInstance("EC");
3144740ce7567788129602de81396af56c03b838c157Adam Langley
3145740ce7567788129602de81396af56c03b838c157Adam Langley        // $ openssl ecparam -name secp256k1 -genkey > key.pem
3146740ce7567788129602de81396af56c03b838c157Adam Langley        // $ openssl ec -text -noout < key.pem
3147740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger Px = new BigInteger("2d45572747a625db5fd23b30f97044a682f2d42d31959295043c1fa0034c8ed3", 16);
3148740ce7567788129602de81396af56c03b838c157Adam Langley        final BigInteger Py = new BigInteger("4d330f52e4bba00145a331041c8bbcf300c4fbfdf3d63d8de7608155b2793808", 16);
3149740ce7567788129602de81396af56c03b838c157Adam Langley
3150740ce7567788129602de81396af56c03b838c157Adam Langley        final ECPublicKeySpec keySpec = new ECPublicKeySpec(new ECPoint(Px, Py), spec);
3151740ce7567788129602de81396af56c03b838c157Adam Langley        final PublicKey pub = factory.generatePublic(keySpec);
3152740ce7567788129602de81396af56c03b838c157Adam Langley
3153740ce7567788129602de81396af56c03b838c157Adam Langley        // $ echo -n "Satoshi Nakamoto" > signed
3154740ce7567788129602de81396af56c03b838c157Adam Langley        // $ openssl dgst -ecdsa-with-SHA1 -sign key.pem -out sig signed
3155740ce7567788129602de81396af56c03b838c157Adam Langley        final byte[] SIGNATURE = hexToBytes("304402205b41ece6dcc1c5bfcfdae74658d99c08c5e783f3926c11ecc1a8bea5d95cdf27022061a7d5fc687287e2e02dd7c6723e2e27fe0555f789590a37e96b1bb0355b4df0");
3156740ce7567788129602de81396af56c03b838c157Adam Langley
3157740ce7567788129602de81396af56c03b838c157Adam Langley        Signature ecdsaVerify = Signature.getInstance("SHA1withECDSA");
3158740ce7567788129602de81396af56c03b838c157Adam Langley        ecdsaVerify.initVerify(pub);
3159740ce7567788129602de81396af56c03b838c157Adam Langley        ecdsaVerify.update("Satoshi Nakamoto".getBytes("UTF-8"));
3160740ce7567788129602de81396af56c03b838c157Adam Langley        boolean result = ecdsaVerify.verify(SIGNATURE);
3161740ce7567788129602de81396af56c03b838c157Adam Langley        assertEquals(true, result);
3162740ce7567788129602de81396af56c03b838c157Adam Langley
3163740ce7567788129602de81396af56c03b838c157Adam Langley        ecdsaVerify = Signature.getInstance("SHA1withECDSA");
3164740ce7567788129602de81396af56c03b838c157Adam Langley        ecdsaVerify.initVerify(pub);
3165740ce7567788129602de81396af56c03b838c157Adam Langley        ecdsaVerify.update("Not Satoshi Nakamoto".getBytes("UTF-8"));
3166740ce7567788129602de81396af56c03b838c157Adam Langley        result = ecdsaVerify.verify(SIGNATURE);
3167740ce7567788129602de81396af56c03b838c157Adam Langley        assertEquals(false, result);
3168740ce7567788129602de81396af56c03b838c157Adam Langley    }
3169b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
3170b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root    /**
3171b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root     * When an instance of a Signature is obtained, it's actually wrapped in an
3172b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root     * implementation that makes sure the correct SPI is selected and then calls
3173b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root     * through to the underlying SPI. We need to make sure that all methods on
3174b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root     * the delegate are wrapped and don't call directly into
3175b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root     * {@link SignatureSpi}.
3176b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root     */
3177b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root    public void testSignatureDelegateOverridesAllMethods() throws Exception {
3178b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        Signature sig = Signature.getInstance("SHA1withRSA");
3179b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
3180b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        /*
3181b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root         * Make sure we're dealing with a delegate and not an actual instance of
3182b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root         * Signature.
3183b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root         */
3184b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        Class<?> sigClass = sig.getClass();
3185b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        assertFalse(sigClass.equals(SignatureSpi.class));
3186b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        assertFalse(sigClass.equals(Signature.class));
3187b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
3188b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        List<String> methodsNotOverridden = new ArrayList<String>();
3189b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
3190b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        for (Method spiMethod : SignatureSpi.class.getDeclaredMethods()) {
3191b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root            try {
3192b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root                sigClass.getDeclaredMethod(spiMethod.getName(), spiMethod.getParameterTypes());
3193b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root            } catch (NoSuchMethodException e) {
3194b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root                methodsNotOverridden.add(spiMethod.toString());
3195b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root            }
3196b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        }
3197b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
3198b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        assertEquals(Collections.EMPTY_LIST, methodsNotOverridden);
3199b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root    }
3200b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
3201b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root    public void testGetParameters_IsCalled() throws Exception {
320218d5ad8501ee2091ffe67da23376323fa734617aKenny Root        Provider provider = spy(new MockableProvider());
320318d5ad8501ee2091ffe67da23376323fa734617aKenny Root        Provider.Service service = spy(new Provider.Service(provider, "Signature",
320418d5ad8501ee2091ffe67da23376323fa734617aKenny Root                "FAKEFORGETPARAMETERS", "fake", null, null));
320518d5ad8501ee2091ffe67da23376323fa734617aKenny Root        MockableSignatureSpi signatureSpi = mock(MockableSignatureSpi.class);
3206b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
320718d5ad8501ee2091ffe67da23376323fa734617aKenny Root        // Since these are spies, we want to use the doReturn(...) syntax to
320818d5ad8501ee2091ffe67da23376323fa734617aKenny Root        // avoid calling the real methods.
320918d5ad8501ee2091ffe67da23376323fa734617aKenny Root        doReturn(service).when(provider).getService(service.getType(), service.getAlgorithm());
321018d5ad8501ee2091ffe67da23376323fa734617aKenny Root        doReturn(signatureSpi).when(service).newInstance(null);
3211b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
321218d5ad8501ee2091ffe67da23376323fa734617aKenny Root        Signature sig = Signature.getInstance(service.getAlgorithm(), provider);
3213b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        sig.getParameters();
321418d5ad8501ee2091ffe67da23376323fa734617aKenny Root        verify(signatureSpi).engineGetParameters();
3215b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root    }
3216b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
32170bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static void assertPSSAlgorithmParametersEquals(
32180bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            PSSParameterSpec expectedSpec, AlgorithmParameters actual)
32190bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                    throws InvalidParameterSpecException {
32200bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertNotNull(actual);
32210bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertEqualsIgnoreCase("PSS", actual.getAlgorithm());
32220bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        PSSParameterSpec actualSpec = actual.getParameterSpec(PSSParameterSpec.class);
32230bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertPSSParameterSpecEquals(expectedSpec, actualSpec);
32240bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
32250bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
32260bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static void assertPSSParameterSpecEquals(
32270bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            PSSParameterSpec expected, PSSParameterSpec actual) {
32280bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertEqualsIgnoreCase(expected.getDigestAlgorithm(), actual.getDigestAlgorithm());
32290bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertEqualsIgnoreCase(expected.getMGFAlgorithm(), actual.getMGFAlgorithm());
32300bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        if (!"MGF1".equalsIgnoreCase(expected.getMGFAlgorithm())) {
32310bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            fail("Unsupported MGF algorithm: " + expected.getMGFAlgorithm());
32320bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        }
32330bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        MGF1ParameterSpec expectedMgfParams = (MGF1ParameterSpec) expected.getMGFParameters();
32340bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        MGF1ParameterSpec actualMgfParams = (MGF1ParameterSpec) actual.getMGFParameters();
32350bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertEqualsIgnoreCase(
32360bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                expectedMgfParams.getDigestAlgorithm(), actualMgfParams.getDigestAlgorithm());
32370bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertEquals(expected.getSaltLength(), actual.getSaltLength());
32380bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        assertEquals(expected.getTrailerField(), actual.getTrailerField());
32390bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
32400bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
32410bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    private static void assertEqualsIgnoreCase(String expected, String actual) {
32420bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        if (expected == null) {
32430bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            if (actual == null) {
32440bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                return;
32450bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            }
32460bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            fail("Expected null, actual: <" + actual + ">");
32470bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        } else if (actual == null) {
32480bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            fail("Expected: <" + expected + ">, actual: null");
32490bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        } else {
32500bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            if (!expected.equalsIgnoreCase(actual)) {
32510bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin                fail("Expected: <" + expected + ">, actual: <" + actual + ">");
32520bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin            }
32530bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin        }
32540bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin    }
32550bf58e2added89123fa2b6eaef75f9a3d94dcfbcAlex Klyubin
325618d5ad8501ee2091ffe67da23376323fa734617aKenny Root    public static class MockableProvider extends Provider {
325718d5ad8501ee2091ffe67da23376323fa734617aKenny Root        protected MockableProvider() {
325818d5ad8501ee2091ffe67da23376323fa734617aKenny Root            super("MockableProvider", 1.0, "Used by Mockito");
3259b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        }
326018d5ad8501ee2091ffe67da23376323fa734617aKenny Root    }
3261b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
326218d5ad8501ee2091ffe67da23376323fa734617aKenny Root    public static class MockableSignatureSpi extends SignatureSpi {
326318d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
326418d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public void engineInitVerify(PublicKey publicKey) throws InvalidKeyException {
326518d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
326618d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3267b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
326818d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
326918d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public void engineInitSign(PrivateKey privateKey) throws InvalidKeyException {
327018d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
327118d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3272b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
327318d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
327418d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public void engineUpdate(byte b) throws SignatureException {
327518d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
327618d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3277b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
327818d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
327918d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public void engineUpdate(byte[] b, int off, int len) throws SignatureException {
328018d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
328118d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3282b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
328318d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
328418d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public byte[] engineSign() throws SignatureException {
328518d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
328618d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3287b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
328818d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
328918d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public boolean engineVerify(byte[] sigBytes) throws SignatureException {
329018d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
329118d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3292b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
329318d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
329418d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public void engineSetParameter(String param, Object value) throws InvalidParameterException {
329518d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
329618d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3297b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
329818d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
329918d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public Object engineGetParameter(String param) throws InvalidParameterException {
330018d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
330118d5ad8501ee2091ffe67da23376323fa734617aKenny Root        }
3302b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root
330318d5ad8501ee2091ffe67da23376323fa734617aKenny Root        @Override
330418d5ad8501ee2091ffe67da23376323fa734617aKenny Root        public AlgorithmParameters engineGetParameters() {
330518d5ad8501ee2091ffe67da23376323fa734617aKenny Root            throw new UnsupportedOperationException();
3306b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root        }
3307b131e0c6c504ea2d1527f7843d63501139f696a0Kenny Root    }
330857f2cc03ff2cf5d2f6413c5410680b4908d7301dBrian Carlstrom}
3309