From 4b2a620b385398f636e90a5e6a0690697588db33 Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Thu, 2 Jul 2020 09:04:30 +0300 Subject: [PATCH 1/3] Bug 564819 - API revision | conditions | stream codecs review - start redesigning StreamCodec interface - invite `NamedData`-based coverage for public string literals (encryption algorithm and key size) Signed-off-by: elena.parovyshnaya --- .../META-INF/MANIFEST.MF | 1 + .../passage/lic/api/io/StreamCodec.java | 4 +- .../lic/internal/api/LicensedProduct.java | 4 +- .../internal/api/io/DigestExpectation.java | 47 ++++++++++++ .../internal/api/io/EncryptionAlgorithm.java | 72 +++++++++++++++++++ .../internal/api/io/EncryptionKeySize.java | 66 +++++++++++++++++ .../lic/internal/api/io/StreamCodec.java | 66 +++++++++++++++++ .../passage/lic/base/LicensingProperties.java | 21 +++++- .../mining/SecurityKeyAlgorithm.java | 52 ++++++++++++++ .../conditions/mining/SecurityKeySize.java | 51 +++++++++++++ .../base/io/BaseDigestExpectation.java | 39 ++++++++++ .../META-INF/MANIFEST.MF | 1 + .../eclipse/passage/lic/bc/BcProperties.java | 31 ++++++++ .../lic/internal/bc/BcStreamCodec.java | 62 ++++++++++++++++ .../META-INF/MANIFEST.MF | 2 +- ...eLicensedProductServiceIdContractTest.java | 26 +++++++ .../requirements}/RequirementsTest.java | 4 +- .../requirements}/SabotagedFramework.java | 3 +- .../tests/requirements/Unsatisfiable.java | 2 +- .../RequirementsFromCapabilityTest.java | 2 +- 20 files changed, 547 insertions(+), 9 deletions(-) create mode 100644 bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java create mode 100644 bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionAlgorithm.java create mode 100644 bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionKeySize.java create mode 100644 bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java create mode 100644 bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeyAlgorithm.java create mode 100644 bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeySize.java create mode 100644 bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/BaseDigestExpectation.java create mode 100644 bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java create mode 100644 tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/BaseLicensedProductServiceIdContractTest.java rename tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/{ => tests/requirements}/RequirementsTest.java (89%) rename tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/{ => tests/requirements}/SabotagedFramework.java (95%) rename tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/{ => internal}/base/tests/requirements/Unsatisfiable.java (93%) diff --git a/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF index 879271f4b..1e09c73b9 100644 --- a/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF @@ -25,6 +25,7 @@ Export-Package: org.eclipse.passage.lic.api, org.eclipse.passage.lic.base", org.eclipse.passage.lic.internal.api.conditions;x-friends:="org.eclipse.passage.lic.base", org.eclipse.passage.lic.internal.api.conditions.mining;x-internal:=true, + org.eclipse.passage.lic.internal.api.io;x-internal:=true, org.eclipse.passage.lic.internal.api.registry;x-friends:="org.eclipse.passage.lic.base", org.eclipse.passage.lic.internal.api.requirements;x-friends:="org.eclipse.passage.lic.base", org.eclipse.passage.lic.internal.api.restrictions;x-friends:="org.eclipse.passage.lic.base", diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/api/io/StreamCodec.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/api/io/StreamCodec.java index ebd5fc2a8..467956de0 100644 --- a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/api/io/StreamCodec.java +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/api/io/StreamCodec.java @@ -20,9 +20,11 @@ /** * Coder and decoder for licensing data, used by {@link ConditionMiner} - * + * + * @deprecated use internal.StreamCodec * @since 0.4.0 */ +@Deprecated public interface StreamCodec { /** diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/LicensedProduct.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/LicensedProduct.java index 6b28a3984..4acece31f 100644 --- a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/LicensedProduct.java +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/LicensedProduct.java @@ -12,7 +12,9 @@ *******************************************************************************/ package org.eclipse.passage.lic.internal.api; -public interface LicensedProduct { +import org.eclipse.passage.lic.internal.api.registry.ServiceId; + +public interface LicensedProduct extends ServiceId { String identifier(); diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java new file mode 100644 index 000000000..162196921 --- /dev/null +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/DigestExpectation.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.api.io; + +public interface DigestExpectation { + + /** + * @return is there is any expectation at all + */ + boolean expected(); + + /** + *

+ * In the case we actually expect input digest to be verified, here actual + * digest expectation is supplied. + *

+ *

+ * Is not designed to be called if there are no expectations at all. Thus, is + * not designed to ever return {@code null}. + *

+ */ + byte[] value(); + + public static final class None implements DigestExpectation { + + @Override + public boolean expected() { + return false; + } + + @Override + public byte[] value() { + throw new UnsupportedOperationException(); + } + + } +} diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionAlgorithm.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionAlgorithm.java new file mode 100644 index 000000000..5a66b0b32 --- /dev/null +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionAlgorithm.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.api.io; + +import java.util.Objects; + +public abstract class EncryptionAlgorithm { + + private final String name; + + public EncryptionAlgorithm(String name) { + Objects.requireNonNull(name, "EncryptionAlgorithm::name"); //$NON-NLS-1$ + this.name = name.toUpperCase(); + } + + @Override + public boolean equals(Object object) { + if (!getClass().isInstance(object)) { + return false; + } + return name.equals(((EncryptionAlgorithm) object).name()); + } + + public String name() { + return name; + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public String toString() { + return name; + } + + public static final class RSA extends EncryptionAlgorithm { + + public RSA() { + super("RSA"); //$NON-NLS-1$ + } + + } + + public static final class Default extends EncryptionAlgorithm { + + public Default() { + super(new RSA().name()); + } + + } + + public static final class Of extends EncryptionAlgorithm { + + public Of(String name) { + super(name); + } + + } + +} diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionKeySize.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionKeySize.java new file mode 100644 index 000000000..648060296 --- /dev/null +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/EncryptionKeySize.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.api.io; + +import java.util.Objects; + +public abstract class EncryptionKeySize { + + private final int size; + + public EncryptionKeySize(int size) { + if (size <= 0) { + throw new IllegalArgumentException("EncryptionKeySize::size must be positiv"); //$NON-NLS-1$ + } + this.size = size; + } + + @Override + public boolean equals(Object object) { + if (!getClass().isInstance(object)) { + return false; + } + return size == ((EncryptionKeySize) object).size(); + } + + public int size() { + return size; + } + + @Override + public int hashCode() { + return Objects.hash(size); + } + + @Override + public String toString() { + return Integer.toString(size); + } + + public static final class Default extends EncryptionKeySize { + + public Default() { + super(1024); + } + + } + + public static final class Of extends EncryptionKeySize { + + public Of(int size) { + super(size); + } + + } + +} diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java new file mode 100644 index 000000000..e88dc1f53 --- /dev/null +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java @@ -0,0 +1,66 @@ +package org.eclipse.passage.lic.internal.api.io; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.eclipse.passage.lic.internal.api.LicensedProduct; +import org.eclipse.passage.lic.internal.api.conditions.mining.MinedConditions; +import org.eclipse.passage.lic.internal.api.registry.Service; + +/** + * Coder and decoder for licensing data, used by {@link MinedConditions} to read + * licensing conditions data from encoded streams (like license text) + */ +public interface StreamCodec extends Service { + /** + * Identifier of an encoding algorithm used by the codec. + */ + EncryptionAlgorithm algorithm(); + + /** + * Encoding key size. + */ + EncryptionKeySize keySize(); + + /** + * Create a public/private keys pair and store them to {@code publicKeyPath} and + * {@code privateKeyPath} respectively. + * + * @param publicKeyPath file system path for public key to be generated + * @param privateKeyPath file system path for private key to be generated + * @param username of the keys owner user + * @param password of the keys owner user + * @throws IOException in case of any i/o misbehavior + */ + void createKeyPair(String publicKeyPath, String privateKeyPath, String username, String password) + throws IOException; + + /** + * Encode {@code input} stream data with a private key retrieved form the given + * {@code key} stream. Fill {@code output} stream with the encoded data. + * + * @param input source of data to be encoded + * @param output target stream to place encoded data into + * @param key source for a private key + * @param username of the private key owner user + * @param password of the private key owner user + * @throws IOException in case of any i/o misbehavior + */ + void encode(InputStream input, OutputStream output, InputStream key, String username, String password) + throws IOException; + + /** + * Decode the {@code input} stream with the public key and store decoded + * data to {@code output} stream. + * + * @param input source stream with encoded data + * @param output target stream for decoded data + * @param key stream containing the public key for decoding + * @param digest expected digest for public key source stream {@code key} to be + * validated prior decoding + * @throws IOException in case of any i/o denial or misbehavior + */ + void decode(InputStream input, OutputStream output, InputStream key, DigestExpectation digest) throws IOException; + +} diff --git a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/LicensingProperties.java b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/LicensingProperties.java index 5231d423e..fe8038b23 100644 --- a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/LicensingProperties.java +++ b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/base/LicensingProperties.java @@ -18,7 +18,11 @@ import java.util.Locale; import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType; +import org.eclipse.passage.lic.internal.api.io.EncryptionAlgorithm; +import org.eclipse.passage.lic.internal.api.io.EncryptionKeySize; import org.eclipse.passage.lic.internal.base.conditions.mining.LicensingContentType; +import org.eclipse.passage.lic.internal.base.conditions.mining.SecurityKeyAlgorithm; +import org.eclipse.passage.lic.internal.base.conditions.mining.SecurityKeySize; import org.eclipse.passage.lic.internal.base.i18n.BaseMessages; @SuppressWarnings("restriction") @@ -116,10 +120,25 @@ public final class LicensingProperties { @Deprecated public static final String LICENSING_CONTENT_TYPE_XML = "application/xml"; //$NON-NLS-1$ + /** + * @deprecated use {@link SecurityKeyAlgorithm} + */ + @Deprecated public static final String LICENSING_SECURITY_KEY_ALGO = "licensing.security.key.algo"; //$NON-NLS-1$ + /** + * @deprecated use {@link EncryptionAlgorithm.RSA} + */ + @Deprecated public static final String LICENSING_SECURITY_KEY_ALGO_RSA = "RSA"; //$NON-NLS-1$ - + /** + * @deprecated use {@link SecurityKeySize} + */ + @Deprecated public static final String LICENSING_SECURITY_KEY_SIZE = "licensing.security.key.size"; //$NON-NLS-1$ + /** + * @deprecated use {@link EncryptionKeySize.Of} + */ + @Deprecated public static final int LICENSING_SECURITY_KEY_SIZE_1024 = 1024; public static final String LICENSING_SECURITY_HASH_ALGO = "licensing.security.hash.algo"; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeyAlgorithm.java b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeyAlgorithm.java new file mode 100644 index 000000000..7b8e134df --- /dev/null +++ b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeyAlgorithm.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.base.conditions.mining; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; + +import org.eclipse.passage.lic.internal.api.io.EncryptionAlgorithm; +import org.eclipse.passage.lic.internal.base.BaseNamedData; + +@SuppressWarnings("restriction") +public final class SecurityKeyAlgorithm extends BaseNamedData { + + public SecurityKeyAlgorithm(Function retrieve) { + super(retrieve); + } + + public SecurityKeyAlgorithm(Map container) { + super(key -> Optional.ofNullable(container.get(key))// + .map(String::valueOf) // + .map(String::trim) // + .filter(value -> !value.isEmpty())// + .map(EncryptionAlgorithm.Of::new)// + .map(EncryptionAlgorithm.class::cast) // just for compiler + .orElseGet(EncryptionAlgorithm.Default::new)); + } + + public SecurityKeyAlgorithm(EncryptionAlgorithm value) { + super(key -> value); + } + + public SecurityKeyAlgorithm(String algorithm) { + super(key -> new EncryptionAlgorithm.Of(algorithm)); + } + + @Override + public String key() { + return "licensing.security.key.algo"; //$NON-NLS-1$ + } + +} diff --git a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeySize.java b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeySize.java new file mode 100644 index 000000000..1c95b7814 --- /dev/null +++ b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/conditions/mining/SecurityKeySize.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.base.conditions.mining; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; + +import org.eclipse.passage.lic.internal.api.io.EncryptionKeySize; +import org.eclipse.passage.lic.internal.base.BaseNamedData; + +@SuppressWarnings("restriction") +public final class SecurityKeySize extends BaseNamedData { + + public SecurityKeySize(Function retrieve) { + super(retrieve); + } + + public SecurityKeySize(Map container) { + super(key -> Optional.ofNullable(container.get(key))// + .filter(Integer.class::isInstance) // + .map(Integer.class::cast) // + .map(EncryptionKeySize.Of::new)// + .map(EncryptionKeySize.class::cast) // for compiler + .orElseGet(EncryptionKeySize.Default::new)); + } + + public SecurityKeySize(EncryptionKeySize value) { + super(key -> value); + } + + public SecurityKeySize(int size) { + super(key -> new EncryptionKeySize.Of(size)); + } + + @Override + public String key() { + return "licensing.security.key.size"; //$NON-NLS-1$ + } + +} diff --git a/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/BaseDigestExpectation.java b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/BaseDigestExpectation.java new file mode 100644 index 000000000..ff12dfaab --- /dev/null +++ b/bundles/org.eclipse.passage.lic.base/src/org/eclipse/passage/lic/internal/base/io/BaseDigestExpectation.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.base.io; + +import java.util.Objects; + +import org.eclipse.passage.lic.internal.api.io.DigestExpectation; + +@SuppressWarnings("restriction") +public final class BaseDigestExpectation implements DigestExpectation { + + private final byte[] digest; + + public BaseDigestExpectation(byte[] digest) { + Objects.requireNonNull(digest, "BaseDigestExpectation::digest. Use None if there is no actual expectations."); //$NON-NLS-1$ + this.digest = digest; + } + + @Override + public boolean expected() { + return true; + } + + @Override + public byte[] value() { + return digest; + } + +} diff --git a/bundles/org.eclipse.passage.lic.bc/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lic.bc/META-INF/MANIFEST.MF index 56bb437b2..da7c57f47 100644 --- a/bundles/org.eclipse.passage.lic.bc/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.passage.lic.bc/META-INF/MANIFEST.MF @@ -15,4 +15,5 @@ Require-Bundle: org.bouncycastle.bcpg;bundle-version="1.59.0", org.eclipse.passage.lic.api;bundle-version="0.0.0", org.eclipse.passage.lic.base;bundle-version="0.0.0" Export-Package: org.eclipse.passage.lic.bc, + org.eclipse.passage.lic.internal.bc;x-internal:=true, org.eclipse.passage.lic.internal.bc.i18n;x-internal:=true diff --git a/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/bc/BcProperties.java b/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/bc/BcProperties.java index 1ff2077d7..57b91b2e0 100644 --- a/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/bc/BcProperties.java +++ b/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/bc/BcProperties.java @@ -15,16 +15,42 @@ import java.util.Map; import org.eclipse.passage.lic.base.LicensingProperties; +import org.eclipse.passage.lic.internal.api.io.EncryptionAlgorithm; +import org.eclipse.passage.lic.internal.api.io.EncryptionKeySize; +import org.eclipse.passage.lic.internal.base.NamedData; +import org.eclipse.passage.lic.internal.base.conditions.mining.SecurityKeyAlgorithm; +import org.eclipse.passage.lic.internal.base.conditions.mining.SecurityKeySize; +/** + * @deprecated instead of string literals use {@link EncryptionAlgorithm}, + * {@link EncryptionKeySize} and appropriate {@link NamedData} + * implementations: {@link SecurityKeyAlgorithm} and + * {@link SecurityKeySize} + */ +@Deprecated +@SuppressWarnings("restriction") public final class BcProperties { + /** + * @deprecated use {@link EncryptionAlgorithm.Default} + */ + @Deprecated public static final String KEY_ALGO_DEFAULT = LicensingProperties.LICENSING_SECURITY_KEY_ALGO_RSA; + /** + * @deprecated use {@link EncryptionKeySize.Default} + */ + @Deprecated public static final int KEY_SIZE_DEFAULT = LicensingProperties.LICENSING_SECURITY_KEY_SIZE_1024; private BcProperties() { // block } + /** + * @deprecated use {@link SecurityKeyAlgorithm} : + * {@code new SecurityKeyAlgorithm(properties)} + */ + @Deprecated public static String extractKeyAlgo(Map properties) { if (properties == null) { return KEY_ALGO_DEFAULT; @@ -36,6 +62,11 @@ public static String extractKeyAlgo(Map properties) { return KEY_ALGO_DEFAULT; } + /** + * @deprecated use {@link SecurityKeySize} : + * {@code new SecurityKeySize(properties)} + */ + @Deprecated public static int extractKeySize(Map properties) { if (properties == null) { return KEY_SIZE_DEFAULT; diff --git a/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java b/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java new file mode 100644 index 000000000..e9895544a --- /dev/null +++ b/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java @@ -0,0 +1,62 @@ +package org.eclipse.passage.lic.internal.bc; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.eclipse.passage.lic.internal.api.LicensedProduct; +import org.eclipse.passage.lic.internal.api.io.DigestExpectation; +import org.eclipse.passage.lic.internal.api.io.EncryptionAlgorithm; +import org.eclipse.passage.lic.internal.api.io.EncryptionKeySize; +import org.eclipse.passage.lic.internal.api.io.StreamCodec; + +@SuppressWarnings("restriction") +public final class BcStreamCodec implements StreamCodec { + + private final LicensedProduct product; + private final EncryptionAlgorithm algorithm; + private final EncryptionKeySize keySize; + + public BcStreamCodec(LicensedProduct product, EncryptionAlgorithm algorithm, EncryptionKeySize keySize) { + this.product = product; + this.algorithm = algorithm; + this.keySize = keySize; + } + + @Override + public LicensedProduct id() { + return product; + } + + @Override + public EncryptionAlgorithm algorithm() { + return algorithm; + } + + @Override + public EncryptionKeySize keySize() { + return keySize; + } + + @Override + public void createKeyPair(String publicKeyPath, String privateKeyPath, String username, String password) + throws IOException { + // TODO Auto-generated method stub + + } + + @Override + public void encode(InputStream input, OutputStream output, InputStream key, String username, String password) + throws IOException { + // TODO Auto-generated method stub + + } + + @Override + public void decode(InputStream input, OutputStream output, InputStream key, DigestExpectation digest) + throws IOException { + // TODO Auto-generated method stub + + } + +} diff --git a/tests/org.eclipse.passage.lic.base.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.passage.lic.base.tests/META-INF/MANIFEST.MF index 2df731b34..fa04d9c6e 100644 --- a/tests/org.eclipse.passage.lic.base.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.passage.lic.base.tests/META-INF/MANIFEST.MF @@ -10,4 +10,4 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.junit;bundle-version="0.0.0", org.eclipse.passage.lic.base;bundle-version="0.0.0", org.eclipse.passage.lic.api.tests;bundle-version="0.1.0" -Export-Package: org.eclipse.passage.lic.base.tests.requirements +Export-Package: org.eclipse.passage.lic.internal.base.tests.requirements;x-internal:=true diff --git a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/BaseLicensedProductServiceIdContractTest.java b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/BaseLicensedProductServiceIdContractTest.java new file mode 100644 index 000000000..673b974af --- /dev/null +++ b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/BaseLicensedProductServiceIdContractTest.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.internal.base; + +import org.eclipse.passage.lic.api.tests.registry.ServiceIdContractTest; +import org.eclipse.passage.lic.internal.api.registry.ServiceId; + +@SuppressWarnings("restriction") +public class BaseLicensedProductServiceIdContractTest extends ServiceIdContractTest { + + @Override + protected ServiceId ofSameData() { + return new BaseLicensedProduct("product", "vesion"); //$NON-NLS-1$//$NON-NLS-2$ + } + +} diff --git a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/RequirementsTest.java b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/RequirementsTest.java similarity index 89% rename from tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/RequirementsTest.java rename to tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/RequirementsTest.java index b11274bd4..cd5b1dec6 100644 --- a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/RequirementsTest.java +++ b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/RequirementsTest.java @@ -10,15 +10,15 @@ * Contributors: * ArSysOp - initial API and implementation *******************************************************************************/ -package org.eclipse.passage.lic.internal.base; +package org.eclipse.passage.lic.internal.base.tests.requirements; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Set; -import org.eclipse.passage.lic.base.tests.requirements.Unsatisfiable; import org.eclipse.passage.lic.internal.api.requirements.Requirement; +import org.eclipse.passage.lic.internal.base.Requirements; import org.junit.Test; @SuppressWarnings("restriction") diff --git a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/SabotagedFramework.java b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/SabotagedFramework.java similarity index 95% rename from tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/SabotagedFramework.java rename to tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/SabotagedFramework.java index eabeb61b5..d9cf96248 100644 --- a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/SabotagedFramework.java +++ b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/SabotagedFramework.java @@ -10,7 +10,7 @@ * Contributors: * ArSysOp - initial API and implementation *******************************************************************************/ -package org.eclipse.passage.lic.internal.base; +package org.eclipse.passage.lic.internal.base.tests.requirements; import java.util.ArrayList; @@ -23,6 +23,7 @@ import org.eclipse.passage.lic.internal.api.registry.StringServiceId; import org.eclipse.passage.lic.internal.api.requirements.ResolvedRequirements; import org.eclipse.passage.lic.internal.api.requirements.ResolvedRequirementsRegistry; +import org.eclipse.passage.lic.internal.base.BaseLicensedProduct; import org.eclipse.passage.lic.internal.base.registry.ReadOnlyRegistry; @SuppressWarnings("restriction") diff --git a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/base/tests/requirements/Unsatisfiable.java b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/Unsatisfiable.java similarity index 93% rename from tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/base/tests/requirements/Unsatisfiable.java rename to tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/Unsatisfiable.java index fee81d595..2deb5aec0 100644 --- a/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/base/tests/requirements/Unsatisfiable.java +++ b/tests/org.eclipse.passage.lic.base.tests/src/org/eclipse/passage/lic/internal/base/tests/requirements/Unsatisfiable.java @@ -10,7 +10,7 @@ * Contributors: * ArSysOp - initial API and implementation *******************************************************************************/ -package org.eclipse.passage.lic.base.tests.requirements; +package org.eclipse.passage.lic.internal.base.tests.requirements; import java.util.function.Predicate; diff --git a/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/requirements/RequirementsFromCapabilityTest.java b/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/requirements/RequirementsFromCapabilityTest.java index c87ffdb6e..07dafb2f0 100644 --- a/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/requirements/RequirementsFromCapabilityTest.java +++ b/tests/org.eclipse.passage.lic.equinox.tests/src/org/eclipse/passage/lic/internal/equinox/requirements/RequirementsFromCapabilityTest.java @@ -18,8 +18,8 @@ import java.util.Set; import java.util.stream.Collectors; -import org.eclipse.passage.lic.base.tests.requirements.Unsatisfiable; import org.eclipse.passage.lic.internal.api.requirements.Requirement; +import org.eclipse.passage.lic.internal.base.tests.requirements.Unsatisfiable; import org.junit.Test; @SuppressWarnings("restriction") From 8ac9acd2c7dcbbd6c066a9a7d8a3304e345d44fb Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Thu, 2 Jul 2020 09:06:56 +0300 Subject: [PATCH 2/3] Bug 564819 - API revision | conditions | stream codecs review - add missing license header Signed-off-by: elena.parovyshnaya --- .../passage/lic/internal/api/io/StreamCodec.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java index e88dc1f53..89e5ff0bb 100644 --- a/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java +++ b/bundles/org.eclipse.passage.lic.api/src/org/eclipse/passage/lic/internal/api/io/StreamCodec.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ package org.eclipse.passage.lic.internal.api.io; import java.io.IOException; From ef5066284711e9684a045dda8b2cf0769ebaa7da Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Thu, 2 Jul 2020 09:07:45 +0300 Subject: [PATCH 3/3] Bug 564819 - API revision | conditions | stream codecs review - add missing license header Signed-off-by: elena.parovyshnaya --- .../passage/lic/internal/bc/BcStreamCodec.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java b/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java index e9895544a..094386c38 100644 --- a/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java +++ b/bundles/org.eclipse.passage.lic.bc/src/org/eclipse/passage/lic/internal/bc/BcStreamCodec.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ package org.eclipse.passage.lic.internal.bc; import java.io.IOException;