1 package org.metricshub.ipmi.core.coding.security;
2
3 /*-
4 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5 * IPMI Java Client
6 * ჻჻჻჻჻჻
7 * Copyright 2023 Verax Systems, MetricsHub
8 * ჻჻჻჻჻჻
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Lesser Public License for more details.
18 *
19 * You should have received a copy of the GNU General Lesser Public
20 * License along with this program. If not, see
21 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
22 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
23 */
24
25 import javax.crypto.NoSuchPaddingException;
26 import java.security.InvalidKeyException;
27 import java.security.NoSuchAlgorithmException;
28
29 /**
30 * Interface for Confidentiality Algorithms. All classes extending this one must
31 * implement constructor(byte[]).
32 */
33 public abstract class ConfidentialityAlgorithm {
34 protected byte[] sik;
35
36 /**
37 * Initializes Confidentiality Algorithm
38 *
39 * @param sik
40 * - Session Integrity Key calculated during the opening of the
41 * session or user password if 'one-key' logins are enabled.
42 * @param authenticationAlgorithm
43 * - Algorithm used for authentication.
44 * @throws InvalidKeyException
45 * - when initiation of the algorithm fails
46 * @throws NoSuchAlgorithmException
47 * - when initiation of the algorithm fails
48 * @throws NoSuchPaddingException
49 * - when initiation of the algorithm fails
50 */
51 public void initialize(byte[] sik, AuthenticationAlgorithm authenticationAlgorithm) throws InvalidKeyException,
52 NoSuchAlgorithmException, NoSuchPaddingException {
53 this.sik = sik;
54 }
55
56 /**
57 * Returns the algorithm's ID.
58 */
59 public abstract byte getCode();
60
61 /**
62 * Encrypts the data.
63 *
64 * @param data
65 * - payload to be encrypted
66 * @return encrypted data encapsulated in COnfidentiality Header and
67 * Trailer.
68 * @throws InvalidKeyException
69 * - when initiation of the algorithm fails
70 */
71 public abstract byte[] encrypt(byte[] data) throws InvalidKeyException;
72
73 /**
74 * Decrypts the data.
75 *
76 * @param data
77 * - encrypted data encapsulated in COnfidentiality Header and
78 * Trailer.
79 * @return decrypted data.
80 * @throws IllegalArgumentException
81 * - when initiation of the algorithm fails
82 */
83 public abstract byte[] decrypt(byte[] data);
84
85 /**
86 * Calculates size of the confidentiality header and trailer specific for
87 * the algorithm.
88 *
89 * @param payloadSize
90 * - size of the data that will be encrypted
91 */
92 public abstract int getConfidentialityOverheadSize(int payloadSize);
93 }