Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix unit tests to work with FIPS certified Bouncy Castle #132

Merged
merged 1 commit into from
Oct 23, 2019
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

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except
* in compliance with the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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.
*/

package com.amazonaws.encryptionsdk.internal;

import java.security.SecureRandom;

public class RandomBytesGenerator {
private static final SecureRandom RND = new SecureRandom();

/* Some Providers (such as the FIPS certified Bouncy Castle) enforce a
* maximum number of bytes that may be requested from SecureRandom. If
* the requested len is larger than this value, the Secure Random will
* be called multiple times to achieve the requested total length. */
private static final int MAX_BYTES = 1 << 15;

/**
* Generates a byte array of random data of the given length.
*
* @param len The length of the byte array.
* @return The byte array.
*/
public static byte[] generate(final int len) {
final byte[] result = new byte[len];
int bytesGenerated = 0;

while (bytesGenerated < len) {
final int requestSize = Math.min(MAX_BYTES, len - bytesGenerated);
final byte[] request = new byte[requestSize];
RND.nextBytes(request);
System.arraycopy(request, 0, result, bytesGenerated, requestSize);
bytesGenerated += requestSize;
}

return result;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,12 @@ public class StaticMasterKey extends MasterKey<StaticMasterKey> {
/**
* Encryption algorithm for the master key-pair
*/
private static final String MASTER_KEY_ENCRYPTION_ALGORITHM = "RSA";
private static final String MASTER_KEY_ENCRYPTION_ALGORITHM = "RSA/ECB/PKCS1Padding";

/**
* Encryption algorithm for the KeyFactory
*/
private static final String MASTER_KEY_ALGORITHM = "RSA";

/**
* Encryption algorithm for the randomly generated data key
Expand Down Expand Up @@ -95,7 +100,7 @@ public StaticMasterKey(@Nonnull final String keyId) {
this.keyId_ = Objects.requireNonNull(keyId);

try {
KeyFactory keyFactory = KeyFactory.getInstance(MASTER_KEY_ENCRYPTION_ALGORITHM);
KeyFactory keyFactory = KeyFactory.getInstance(MASTER_KEY_ALGORITHM);
KeySpec publicKeySpec = new X509EncodedKeySpec(publicKey_v1);
PublicKey pubKey = keyFactory.generatePublic(publicKeySpec);
KeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKey_v1);
Expand Down