Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
package com.microsoft.azure.keyvault.extensions;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -70,15 +72,16 @@ public IKey get() throws InterruptedException, ExecutionException {
throw new InterruptedException();
}

// TODO: Concurrency
for (IKeyResolver resolver : _resolvers) {
Future<IKey> futureKey = resolver.resolveKeyAsync(_kid);

_result = futureKey.get();

if (_result != null) {
break;
}
synchronized( _resolvers ) {
for (IKeyResolver resolver : _resolvers) {
Future<IKey> futureKey = resolver.resolveKeyAsync(_kid);

_result = futureKey.get();

if (_result != null) {
break;
}
}
}

// Mark done
Expand All @@ -95,15 +98,16 @@ public IKey get(long timeout, TimeUnit unit) throws InterruptedException, Execut
throw new InterruptedException();
}

// TODO: Concurrency
for (IKeyResolver resolver : _resolvers) {
Future<IKey> futureKey = resolver.resolveKeyAsync(_kid);

_result = futureKey.get(timeout, unit);

if (_result != null) {
break;
}
synchronized( _resolvers ) {
for (IKeyResolver resolver : _resolvers) {
Future<IKey> futureKey = resolver.resolveKeyAsync(_kid);

_result = futureKey.get(timeout, unit);

if (_result != null) {
break;
}
}
}

// Mark done
Expand All @@ -113,16 +117,18 @@ public IKey get(long timeout, TimeUnit unit) throws InterruptedException, Execut
}
}

private final ArrayList<IKeyResolver> _resolvers;
private final List<IKeyResolver> _resolvers;

public AggregateKeyResolver() {
// TODO: Concurrency
_resolvers = new ArrayList<IKeyResolver>();

_resolvers = Collections.synchronizedList(new ArrayList<IKeyResolver>());
}

public void Add(IKeyResolver resolver) {
// TODO: Concurrency
_resolvers.add(resolver);

synchronized( _resolvers ) {
_resolvers.add(resolver);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

package com.microsoft.azure.keyvault.extensions;

import java.security.Provider;
import java.util.concurrent.Future;

import org.apache.commons.codec.binary.Base64;
Expand All @@ -32,6 +33,8 @@

public class KeyVaultKeyResolver implements IKeyResolver {

static final Base64 _base64 = new Base64(-1, null, true);

class FutureKeyFromKey extends FutureAdapter<KeyBundle, IKey> {

protected FutureKeyFromKey(Future<KeyBundle> inner) {
Expand All @@ -49,9 +52,8 @@ protected IKey translate(KeyBundle keyBundle) {
}
}

static class FutureKeyFromSecret extends FutureAdapter<Secret, IKey> {
class FutureKeyFromSecret extends FutureAdapter<Secret, IKey> {

static final Base64 _base64 = new Base64(-1, null, true);

protected FutureKeyFromSecret(Future<Secret> inner) {
super(inner);
Expand All @@ -64,7 +66,7 @@ protected IKey translate(Secret secretBundle) {
byte[] keyBytes = _base64.decode(secretBundle.getValue());

if (keyBytes != null) {
return new SymmetricKey(secretBundle.getId(), keyBytes);
return new SymmetricKey(secretBundle.getId(), keyBytes, _provider );
}
}

Expand All @@ -73,9 +75,16 @@ protected IKey translate(Secret secretBundle) {
}

private final KeyVaultClient _client;
private final Provider _provider;

public KeyVaultKeyResolver(KeyVaultClient client) {
_client = client;
_client = client;
_provider = null;
}

public KeyVaultKeyResolver(KeyVaultClient client, Provider provider) {
_client = client;
_provider = provider;
}

private Future<IKey> resolveKeyFromSecretAsync(String kid) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public Future<byte[]> decryptAsync(final byte[] ciphertext, final byte[] iv, fin
ICryptoTransform transform = null;

try {
transform = algo.CreateDecryptor(_key, iv, authenticationData);
transform = algo.CreateDecryptor(_key, iv, authenticationData, _provider );
} catch (Exception e) {
return new FutureExecutionException<byte[]>(e);
}
Expand Down Expand Up @@ -219,7 +219,7 @@ public Future<Triple<byte[], byte[], String>> encryptAsync(final byte[] plaintex
ICryptoTransform transform = null;

try {
transform = algo.CreateEncryptor(_key, iv, authenticationData);
transform = algo.CreateEncryptor(_key, iv, authenticationData, _provider);
} catch (Exception e) {
return new FutureExecutionException<Triple<byte[], byte[], String>>(e);
}
Expand Down Expand Up @@ -320,13 +320,11 @@ public Future<byte[]> unwrapKeyAsync(final byte[] encryptedKey, final String alg

@Override
public Future<Pair<byte[], String>> signAsync(final byte[] digest, final String algorithm) {
// TODO Auto-generated method stub
return null;
}

@Override
public Future<Boolean> verifyAsync(final byte[] digest, final byte[] signature, final String algorithm) {
// TODO Auto-generated method stub
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ public abstract class SignatureAlgorithm extends Algorithm {

protected SignatureAlgorithm(String name) {
super(name);
// TODO Auto-generated constructor stub
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ public byte[] doFinal(byte[] plaintext) throws IllegalBlockSizeException, BadPad

protected AesCbc(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,16 @@
import static org.junit.Assert.fail;

import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

import org.apache.commons.codec.binary.Base64;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.microsoft.azure.keyvault.core.IKey;
Expand All @@ -34,7 +39,34 @@
//See the Apache License, Version 2.0 for the specific language
//governing permissions and limitations under the License.

public class KeyVaultKeyResolverTest extends KeyVaultExtensionsIntegrationTestBase {
public class KeyVaultKeyResolverBCProviderTest extends KeyVaultExtensionsIntegrationTestBase {

private Provider _provider = null;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
try {
_provider = (Provider) Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider").newInstance();
} catch (ClassNotFoundException ex) {
throw new RuntimeException(ex.getMessage());
} catch (IllegalAccessException ex) {
throw new RuntimeException(ex.getMessage());
} catch (InstantiationException ex) {
throw new RuntimeException(ex.getMessage());
}
}

@After
public void tearDown() throws Exception {
}

private static final String KEY_NAME = "JavaExtensionKey";
private static final String SECRET_NAME = "JavaExtensionSecret";
Expand All @@ -53,7 +85,7 @@ public void KeyVault_KeyVaultKeyResolver_Key() throws InterruptedException, Exec
try
{
// ctor with client
KeyVaultKeyResolver resolver = new KeyVaultKeyResolver( keyVaultClient );
KeyVaultKeyResolver resolver = new KeyVaultKeyResolver( keyVaultClient, _provider );

Future<IKey> baseKeyFuture = resolver.resolveKeyAsync( bundle.getKeyIdentifier().getBaseIdentifier() );
Future<IKey> versionKeyFuture = resolver.resolveKeyAsync( bundle.getKeyIdentifier().getIdentifier() );
Expand Down Expand Up @@ -157,7 +189,7 @@ public void KeyVault_KeyVaultKeyResolver_Secret192Base64() throws InterruptedExc
try
{
// ctor with client
KeyVaultKeyResolver resolver = new KeyVaultKeyResolver( keyVaultClient );
KeyVaultKeyResolver resolver = new KeyVaultKeyResolver( keyVaultClient, _provider );

IKey baseKey = resolver.resolveKeyAsync( secret.getSecretIdentifier().getBaseIdentifier() ).get();
IKey versionKey = resolver.resolveKeyAsync( secret.getSecretIdentifier().getIdentifier() ).get();
Expand Down Expand Up @@ -221,7 +253,7 @@ public void KeyVault_KeyVaultKeyResolver_Secret256Base64() throws InterruptedExc
try
{
// ctor with client
KeyVaultKeyResolver resolver = new KeyVaultKeyResolver( keyVaultClient );
KeyVaultKeyResolver resolver = new KeyVaultKeyResolver( keyVaultClient, _provider );

IKey baseKey = resolver.resolveKeyAsync( secret.getSecretIdentifier().getBaseIdentifier() ).get();
IKey versionKey = resolver.resolveKeyAsync( secret.getSecretIdentifier().getIdentifier() ).get();
Expand Down
Loading