mirror of
https://github.com/hierynomus/sshj.git
synced 2025-12-06 15:20:54 +03:00
Updated KeyProviderUtil, KeyFormat, KeyProviderUtilTest and test resources to properly differentiate between PKCS5 and PKCS8 file formats.
This commit is contained in:
@@ -19,6 +19,7 @@ package net.schmizz.sshj.userauth.keyprovider;
|
|||||||
* @version $Id:$
|
* @version $Id:$
|
||||||
*/
|
*/
|
||||||
public enum KeyFormat {
|
public enum KeyFormat {
|
||||||
|
PKCS5,
|
||||||
PKCS8,
|
PKCS8,
|
||||||
OpenSSH,
|
OpenSSH,
|
||||||
PuTTY,
|
PuTTY,
|
||||||
|
|||||||
@@ -96,9 +96,10 @@ public class KeyProviderUtil {
|
|||||||
if (separatePubKey) {
|
if (separatePubKey) {
|
||||||
// Can delay asking for password since have unencrypted pubkey
|
// Can delay asking for password since have unencrypted pubkey
|
||||||
return KeyFormat.OpenSSH;
|
return KeyFormat.OpenSSH;
|
||||||
} else {
|
} else if (header.indexOf("BEGIN PRIVATE KEY") != -1 || header.indexOf("BEGIN ENCRYPTED PRIVATE KEY") != -1) {
|
||||||
// More general
|
|
||||||
return KeyFormat.PKCS8;
|
return KeyFormat.PKCS8;
|
||||||
|
} else {
|
||||||
|
return KeyFormat.PKCS5;
|
||||||
}
|
}
|
||||||
} else if (header.startsWith("PuTTY-User-Key-File-")) {
|
} else if (header.startsWith("PuTTY-User-Key-File-")) {
|
||||||
return KeyFormat.PuTTY;
|
return KeyFormat.PuTTY;
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ public class KeyProviderUtilTest {
|
|||||||
assertEquals(KeyFormat.OpenSSH, format);
|
assertEquals(KeyFormat.OpenSSH, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPkcs5() throws IOException {
|
||||||
|
KeyFormat format = KeyProviderUtil.detectKeyFileFormat(new File(ROOT, "pkcs5"));
|
||||||
|
assertEquals(KeyFormat.PKCS5, format);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPkcs8() throws IOException {
|
public void testPkcs8() throws IOException {
|
||||||
KeyFormat format = KeyProviderUtil.detectKeyFileFormat(new File(ROOT, "pkcs8"));
|
KeyFormat format = KeyProviderUtil.detectKeyFileFormat(new File(ROOT, "pkcs8"));
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C)2009 - SSHJ Contributors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package net.schmizz.sshj.keyprovider;
|
||||||
|
|
||||||
|
import net.schmizz.sshj.common.KeyType;
|
||||||
|
import net.schmizz.sshj.userauth.keyprovider.FileKeyProvider;
|
||||||
|
import net.schmizz.sshj.userauth.keyprovider.PKCS5KeyFile;
|
||||||
|
import net.schmizz.sshj.util.KeyUtil;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
public class PKCS5KeyFileTest {
|
||||||
|
|
||||||
|
static final FileKeyProvider rsa = new PKCS5KeyFile();
|
||||||
|
|
||||||
|
static final String modulus = "a19f65e93926d9a2f5b52072db2c38c54e6cf0113d31fa92ff827b0f3bec609c45ea84264c88e64adba11ff093ed48ee0ed297757654b0884ab5a7e28b3c463bc9074b32837a2b69b61d914abf1d74ccd92b20fa44db3b31fb208c0dd44edaeb4ab097118e8ee374b6727b89ad6ce43f1b70c5a437ccebc36d2dad8ae973caad15cd89ae840fdae02cae42d241baef8fda8aa6bbaa54fd507a23338da6f06f61b34fb07d560e63fbce4a39c073e28573c2962cedb292b14b80d1b4e67b0465f2be0e38526232d0a7f88ce91a055fde082038a87ed91f3ef5ff971e30ea6cccf70d38498b186621c08f8fdceb8632992b480bf57fc218e91f2ca5936770fe9469";
|
||||||
|
static final String pubExp = "23";
|
||||||
|
static final String privExp = "57bcee2e2656eb2c94033d802dd62d726c6705fabad1fd0df86b67600a96431301620d395cbf5871c7af3d3974dfe5c30f5c60d95d7e6e75df69ed6c5a36a9c8aef554b5058b76a719b8478efa08ad1ebf08c8c25fe4b9bc0bfbb9be5d4f60e6213b4ab1c26ad33f5bba7d93e1cd65f65f5a79eb6ebfb32f930a2b0244378b4727acf83b5fb376c38d4abecc5dc3fc399e618e792d4c745d2dbbb9735242e5033129f2985ca3e28fa33cad2afe3e70e1b07ed2b6ec8a3f843fb4bffe3385ad211c6600618488f4ac70397e8eb036b82d811283dc728504cddbe1533c4dd31b1ec99ffa74fd0e3883a9cb3e2315cc1a56f55d38ed40520dd9ec91b4d2dd790d1b";
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp()
|
||||||
|
throws UnsupportedEncodingException, GeneralSecurityException {
|
||||||
|
rsa.init(new File("src/test/resources/id_rsa"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testKeys()
|
||||||
|
throws IOException, GeneralSecurityException {
|
||||||
|
assertEquals(KeyUtil.newRSAPublicKey(modulus, pubExp), rsa.getPublic());
|
||||||
|
assertEquals(KeyUtil.newRSAPrivateKey(modulus, privExp), rsa.getPrivate());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testType()
|
||||||
|
throws IOException {
|
||||||
|
assertEquals(rsa.getType(), KeyType.RSA);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
15
src/test/resources/keyformats/pkcs5
Normal file
15
src/test/resources/keyformats/pkcs5
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIICXQIBAAKBgQCm2IJ9gWDkPTlQ37NNUB0za5mCsQ8bi++8fyEqw7wl8ZNBh3qt
|
||||||
|
TcnL+m+NZfQjUC0BXic7PcMLVm4A3ID2IAZQM+axfq9aL4huWerm4ua6tvdt4gQK
|
||||||
|
oL1+8JFmdFvFw5pWW/NZHtkIprbVf7KtYrU27WmMhXruN071UzqLsw08cwIDAQAB
|
||||||
|
AoGAHQ7cOyuLSnT3RISRX8eyLkBxLffUX8HRcQzbI+2PGTSnpuQHk6NWn/Xv87pr
|
||||||
|
+LKABBr3zjOFgrX81p2QwEz3jDxNXzbOeZzhuvGXCX5GocuEO4n5EhDvXRDF4uht
|
||||||
|
uvVV5FsQv/sTOR0PNo1nELiAA8k3NYDxraB83q7wtsmErtECQQDYWMnq8mwRe49d
|
||||||
|
jIXNKJeNiuLUYxO3CLI/vx279gDKlKrt677trr1e7JZqm/DapEWG511tw3cW63gQ
|
||||||
|
+qxtgkw1AkEAxW0UeaNaJd7DApqwGAcS1JkygCKwzQ4ns/Co15qUgMkqCkmQU9AU
|
||||||
|
/zQpt2+BjdYVe50r/nr8K1KYwrBsyndrBwJBALe90N+FvFqswfoFmq2/R9eimTsg
|
||||||
|
WmIdNKYHPs2gBNQIp5MhoSpkOdkgvi8U+d33nkUQwryyQbZpjbN98mufOfECQEML
|
||||||
|
eBiW0NZrf+4yefqu7EYmgG/jWAdK91C0OaJ+bFAQAKbdtJXB5F+GZ2RUCbsRKNqB
|
||||||
|
1Z7mRRyxQA9dupRHWaECQQCM9bbCtfGesgvZlhBavlWavu8iCvJlAbGdf5QMlFQE
|
||||||
|
kABmZg84Fy3NUFCD+RXCuatb4Oo9P/WPIbjYiC4p0hLJ
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN ENCRYPTED PRIVATE KEY-----
|
||||||
MIICXQIBAAKBgQCm2IJ9gWDkPTlQ37NNUB0za5mCsQ8bi++8fyEqw7wl8ZNBh3qt
|
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIjU/bh7L5QOQCAggA
|
||||||
TcnL+m+NZfQjUC0BXic7PcMLVm4A3ID2IAZQM+axfq9aL4huWerm4ua6tvdt4gQK
|
MBQGCCqGSIb3DQMHBAiNTcqc0NzYuwSCAoBtM9PXHkaG+ylhY7qkeiZlVcMY0k6i
|
||||||
oL1+8JFmdFvFw5pWW/NZHtkIprbVf7KtYrU27WmMhXruN071UzqLsw08cwIDAQAB
|
AfqQxROZvjUuwh/fcZBjRDsYoesN/H2WpRPF507KwXUAT8PG4Qeu+1WrQdXd7jt+
|
||||||
AoGAHQ7cOyuLSnT3RISRX8eyLkBxLffUX8HRcQzbI+2PGTSnpuQHk6NWn/Xv87pr
|
GCBAKi2FMm3FgLPVsCwquMKagpCbFHJty9f0YbgZLxvcI036GNPMN5JTRIuyZbYu
|
||||||
+LKABBr3zjOFgrX81p2QwEz3jDxNXzbOeZzhuvGXCX5GocuEO4n5EhDvXRDF4uht
|
mQJ7HvA9KKpkdVHp1YrRKqyn5RXUA0Zb1QeHkynMq+GTTWODZhRkETNT/humBbbU
|
||||||
uvVV5FsQv/sTOR0PNo1nELiAA8k3NYDxraB83q7wtsmErtECQQDYWMnq8mwRe49d
|
JUMNiLKYOyUkIXoU9n3C4fh8yFL3lZXsE5SQnpph/3qjIfcrs3Pz1mqBGPoGmkWV
|
||||||
jIXNKJeNiuLUYxO3CLI/vx279gDKlKrt677trr1e7JZqm/DapEWG511tw3cW63gQ
|
Zmi5JBQZqfTV7W8xdMEc+WEYAgBE/0rzVypSQi8Ow+jLXiYt4i1dMK97YB0h8Tll
|
||||||
+qxtgkw1AkEAxW0UeaNaJd7DApqwGAcS1JkygCKwzQ4ns/Co15qUgMkqCkmQU9AU
|
dpYH2XTalpdeG5uGxdiQhWCNaCSSYQuLTfr1pQIbiYBeK7mB2pBWHGjU7SnqeN6r
|
||||||
/zQpt2+BjdYVe50r/nr8K1KYwrBsyndrBwJBALe90N+FvFqswfoFmq2/R9eimTsg
|
3LN4G2Kc0ovutlJgprZicfaawzIENUOqMCXa62tjUK6mYXWOcKEnKoqB+vQ31Q8g
|
||||||
WmIdNKYHPs2gBNQIp5MhoSpkOdkgvi8U+d33nkUQwryyQbZpjbN98mufOfECQEML
|
HBdsGbJOFTVQEaiiZM9CluIpwjBVsTpMD82L7D4Upd2WdakAcGE/26TlcjZ55R4p
|
||||||
eBiW0NZrf+4yefqu7EYmgG/jWAdK91C0OaJ+bFAQAKbdtJXB5F+GZ2RUCbsRKNqB
|
h5/rtWekKTKkistlmGWqFrT4Gxwi5hVBFwxb5/+2/iAyZCMdGQkIr4KuzQYliu3J
|
||||||
1Z7mRRyxQA9dupRHWaECQQCM9bbCtfGesgvZlhBavlWavu8iCvJlAbGdf5QMlFQE
|
eo5qvNmg0fD7xiQZPWgRJyoteSn6fzZIBzpkmoQsAf83vhz6FVoPtfI0QGkQlzlV
|
||||||
kABmZg84Fy3NUFCD+RXCuatb4Oo9P/WPIbjYiC4p0hLJ
|
IxEHGmlZ7ETja4TvbMENqBerNnaadSThsKfZ01evdPc8uRJ7P0d72VFcm5kW04eL
|
||||||
-----END RSA PRIVATE KEY-----
|
fzLS40uqQgWx3Aq4wXTzVcOZnU9c7ljRBMkqHE9YmnN85DnoidOATAOIIbEzyevA
|
||||||
|
1VeceIYVQTs7YH/WVtlNsfb7VtpvWQZHq3wjLnr+t8rQEnZSYeJ+0mPA
|
||||||
|
-----END ENCRYPTED PRIVATE KEY-----
|
||||||
|
|||||||
Reference in New Issue
Block a user