--- /dev/null
+/*
+ * ============LICENSE_START==========================================
+ * Copyright (c) 2019 PANTHEON.tech s.r.o.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ *
+ */
+package org.onap.ccsdk.distribution.lighty;
+
+import java.nio.charset.Charset;
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.xml.bind.DatatypeConverter;
+import org.onap.ccsdk.sli.core.dblib.DBLIBResourceProvider;
+import org.onap.ccsdk.sli.core.dblib.DBLIBResourceProviderLighty;
+import org.opendaylight.aaa.encrypt.AAAEncryptionService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Custom implementation of the {@link AAAEncryptionService}. Original class {@link DBLIBResourceProvider} was accessing
+ * instance of this interface via OGSi (BundleContext) and java reflection. The implementation of
+ * the {@link AAAEncryptionService} has to be injected via constructor into the lighty.io version of the class with
+ * removed OSGi dependency {@link DBLIBResourceProviderLighty}.
+ */
+public class AAAEncryptionServiceLightyImpl implements AAAEncryptionService {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AAAEncryptionServiceLightyImpl.class);
+
+ private final Cipher encryptCipher;
+ private final Cipher decryptCipher;
+
+ public AAAEncryptionServiceLightyImpl(Cipher encryptCipher, Cipher decryptCipher) {
+ this.encryptCipher = encryptCipher;
+ this.decryptCipher = decryptCipher;
+ }
+
+ @Override
+ public String encrypt(String data) {
+ if (data != null && data.length() != 0 ) {
+ try {
+ synchronized (encryptCipher) {
+ byte[] cryptobytes = encryptCipher.doFinal(data.getBytes(Charset.defaultCharset()));
+ String cryptostring = DatatypeConverter.printBase64Binary(cryptobytes);
+ return cryptostring;
+ }
+ } catch (IllegalBlockSizeException | BadPaddingException e) {
+ LOG.error("Failed to encrypt data.", e);
+ return data;
+ }
+ } else {
+ LOG.warn("data is empty or null.");
+ return data;
+ }
+ }
+
+ @Override
+ public byte[] encrypt(byte[] data) {
+ if (data != null && data.length != 0) {
+ try {
+ synchronized (encryptCipher) {
+ return encryptCipher.doFinal(data);
+ }
+ } catch (IllegalBlockSizeException | BadPaddingException e) {
+ LOG.error("Failed to encrypt data.", e);
+ return data;
+ }
+ } else {
+ LOG.warn("data is empty or null.");
+ return data;
+ }
+ }
+
+ @Override
+ public String decrypt(String encryptedData) {
+ if (encryptedData != null && encryptedData.length() != 0) {
+ try {
+ byte[] cryptobytes = DatatypeConverter.parseBase64Binary(encryptedData);
+ byte[] clearbytes = decryptCipher.doFinal(cryptobytes);
+ return new String(clearbytes, Charset.defaultCharset());
+ } catch (IllegalBlockSizeException | BadPaddingException e) {
+ LOG.error("Failed to decrypt encoded data", e);
+ return encryptedData;
+ }
+ } else {
+ LOG.warn("encryptedData is empty or null.");
+ return encryptedData;
+ }
+ }
+
+ @Override
+ public byte[] decrypt(byte[] encryptedData) {
+ if (encryptedData != null && encryptedData.length != 0) {
+ try {
+ return decryptCipher.doFinal(encryptedData);
+ } catch (IllegalBlockSizeException | BadPaddingException e) {
+ LOG.error("Failed to decrypt encoded data", e);
+ return encryptedData;
+ }
+ } else {
+ LOG.warn("encryptedData is empty or null.");
+ return encryptedData;
+ }
+ }
+
+}