2 * Copyright (c) 2016 Brocade Communication Systems and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.callhome.protocol;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertThrows;
13 import org.junit.Test;
15 public class AuthorizedKeysDecoderTest {
16 private final AuthorizedKeysDecoder instance = new AuthorizedKeysDecoder();
19 public void authorizedKeysDecoderValidRSAKey() throws Exception {
21 final var rsaStr = "AAAAB3NzaC1yc2EAAAADAQABAAABAQCvLigTfPZMqOQwHp051Co4lwwPwO21NFIXWgjQmCPEgRTqQpe"
22 + "i7qQaxlLGkrIPjZtJQRgCuC+Sg8HFw1YpUaMybN0nFInInQLp/qe0yc9ByDZM2G86NX6W5W3+j87I8F"
23 + "h1dnMov1iJ0DFVn8RLwdEGjreiZCRyJOMuHghh6y4EG7W8BwmZrse17zhSpc2wFOVhxeZnYAQFEw6g4"
24 + "8LutFRDpoTjGgz1nz/L4zcaUxxigs8wdY+qTTOHxSTxlLqwSZPFLyYrV2KJ9mKahMuYUy6o2b8snsjv"
25 + "nSjyK0kY+U0C6c8fmPDFUc0RqJqfdnsIUyh11U8d3NZdaFWg0UW0SNK3";
27 final var serverKey = instance.decodePublicKey(rsaStr);
29 assertEquals("RSA", serverKey.getAlgorithm());
33 public void authorizedKeysDecoderInvalidRSAKey() {
35 final var rsaStr = "AAAB3NzaC1yc2EAAAADAQABAAABAQCvLigTfPZMqOQwHp051Co4lwwPwO21NFIXWgjQmCPEgRTqQpei"
36 + "7qQaxlLGkrIPjZtJQRgCuC+Sg8HFw1YpUaMybN0nFInInQLp/qe0yc9ByDZM2G86NX6W5W3+j87I8Fh"
37 + "1dnMov1iJ0DFVn8RLwdEGjreiZCRyJOMuHghh6y4EG7W8BwmZrse17zhSpc2wFOVhxeZnYAQFEw6g48"
38 + "LutFRDpoTjGgz1nz/L4zcaUxxigs8wdY+qTTOHxSTxlLqwSZPFLyYrV2KJ9mKahMuYUy6o2b8snsjvn"
39 + "SjyK0kY+U0C6c8fmPDFUc0RqJqfdnsIUyh11U8d3NZdaFWg0UW0SNK3";
41 final var ex = assertThrows(StringIndexOutOfBoundsException.class, () -> instance.decodePublicKey(rsaStr));
42 assertEquals("offset 4, count 476, length 278", ex.getMessage());
46 public void authorizedKeysDecoderValidDSAKey() throws Exception {
48 final var dsaStr = "AAAAB3NzaC1kc3MAAACBANkM1e45lxlyV24QyWBAoESlHzhYYJUfk/yUd0+Dv28okyO71DmnJesYyUz"
49 + "sKDpnFLlnFhxTTUGSg90fdrdubLFkRTGnHhweegMCf6kU1xyE3U6bpyMdiOXH7fOS6Q2B+qtaQRB4R5"
50 + "TEhdoJX648Ng+YZvLwdbZh3r/et4P46b3DAAAAFQDcu6qp67XRpzMoOS2fIL+VOxvmDwAAAIAeT3d/h"
51 + "bvzPoL8wV52gPtWJMU2EGoX/LJwc86Vn52NlxXB1EQSzZI50PgCKEckS80lj4GXO1ZyuBhdsBEz4rDt"
52 + "AIdZGW5z7WxTfcz0G2dOWmNOBqvu7j9ngfPrgtDVHYV2VL/4VpbmoPgkQLfbA9NWb6US2RnTO46rGbG"
53 + "urigDMQAAAIEAiI3REuOJAmgDow6HxbN0FM+RCe1JYDwJIsCRRK4JA9oYV4Pg897xqypOeXogutVu9u"
54 + "sfcOJI6uk5OwwLqIUSaU+flgmL0LOXv4lH4+URqs7Or8+ABFTcVGGCxg0I3gwhlY2Vjc9nyHY15wqBY"
55 + "dUxLbe8HC6EQp9uwlLlb8LQ6a0=";
57 final var serverKey = instance.decodePublicKey(dsaStr);
59 assertEquals("DSA", serverKey.getAlgorithm());
63 public void authorizedKeysDecoderInvalidDSAKey() {
65 final var dsaStr = "AAAAB3Nzakc3MAAACBANkM1e45lxlyV24QyWBAoESlHzhYYJUfk/yUd0+Dv28okyO71DmnJesYyUzsK"
66 + "DpnFLlnFhxTTUGSg90fdrdubLFkRTGnHhweegMCf6kU1xyE3U6bpyMdiOXH7fOS6Q2B+qtaQRB4R5TE"
67 + "hdoJX648Ng+YZvLwdbZh3r/et4P46b3DAAAAFQDcu6qp67XRpzMoOS2fIL+VOxvmDwAAAIAeT3d/hbv"
68 + "zPoL8wV52gPtWJMU2EGoX/LJwc86Vn52NlxXB1EQSzZI50PgCKEckS80lj4GXO1ZyuBhdsBEz4rDtAI"
69 + "dZGW5z7WxTfcz0G2dOWmNOBqvu7j9ngfPrgtDVHYV2VL/4VpbmoPgkQLfbA9NWb6US2RnTO46rGbGur"
70 + "igDMQAAAIEAiI3REuOJAmgDow6HxbN0FM+RCe1JYDwJIsCRRK4JA9oYV4Pg897xqypOeXogutVu9usf"
71 + "cOJI6uk5OwwLqIUSaU+flgmL0LOXv4lH4+URqs7Or8+ABFTcVGGCxg0I3gwhlY2Vjc9nyHY15wqBYdU"
72 + "xLbe8HC6EQp9uwlLlb8LQ6a0=";
74 final var ex = assertThrows(IllegalArgumentException.class, () -> instance.decodePublicKey(dsaStr));
75 assertEquals("Last unit does not have enough valid bits", ex.getMessage());
79 public void authorizedKeysDecoderValidEcDSAKey() throws Exception {
81 final var ecdsaStr = "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAP4dTrlwZmz8bZ1f901qWuFk7Y"
82 + "elrL2WJG0jrCEAPo9UNM1wywpqjbaYUfoq+cevhLZaukDQ4N2Evux+YQ2zz0=";
84 final var serverKey = instance.decodePublicKey(ecdsaStr);
86 assertEquals("EC", serverKey.getAlgorithm());
90 public void authorizedKeysDecoderInvalidEcDSAKey() {
92 final var ecdsaStr = "AAAAE2VjZHNhLXNoItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAP4dTrlwZmz8bZ1f901qWuFk7Yel"
93 + "rL2WJG0jrCEAPo9UNM1wywpqjbaYUfoq+cevhLZaukDQ4N2Evux+YQ2zz0=";
95 final var ex = assertThrows(IllegalArgumentException.class, () -> instance.decodePublicKey(ecdsaStr));
96 assertEquals("Last unit does not have enough valid bits", ex.getMessage());
100 public void authorizedKeysDecoderInvalidKeyType() {
102 final var ed25519Str = "AAAAC3NzaC1lZDI1NTE5AAAAICIvyX9C+u3KZmJ8x4DuqJg1iAKOPObCgkX9plrvu29R";
104 final var ex = assertThrows(IllegalArgumentException.class, () -> instance.decodePublicKey(ed25519Str));
105 assertEquals("Unknown decode key type ssh-ed25519 in " + ed25519Str, ex.getMessage());
109 public void decodingOfBlankInputIsCaughtAsAnError() {
111 final var ex = assertThrows(IllegalArgumentException.class, () -> instance.decodePublicKey(""));
112 assertEquals("No Base64 part to decode in ", ex.getMessage());