Skip to content
Snippets Groups Projects
Commit 63aa979e authored by Thai Duong's avatar Thai Duong
Browse files

Make KeysetHandle.getKeyset() package-private.

This is part of an effort to ensure that users cannot freely read/write
cleartext keysets.

Change-Id: Ib694a33279808938a0b8923f920a2ed99ad7be9c
ORIGINAL_AUTHOR=Thai Duong <thaidn@google.com>
GitOrigin-RevId: 8682d887f14a7286650bdbd3f26c83a4a4087990
parent 4c626dd5
No related branches found
No related tags found
No related merge requests found
......@@ -50,6 +50,13 @@ public final class KeysetHandle {
return new KeysetHandle(keyset);
}
/**
* @return the actual keyset data.
*/
Keyset getKeyset() {
return keyset;
}
/**
* Creates keyset handles from an encrypted keyset obtained via {@code reader}.
* Users that need to load cleartext keysets can use {@code CleartextKeysetHandle}.
......@@ -76,13 +83,6 @@ public final class KeysetHandle {
.getKeysetHandle();
}
/**
* @return the actual keyset data.
*/
public Keyset getKeyset() {
return keyset;
}
/**
* @return the {@code KeysetInfo} that doesn't contain actual key material.
*/
......
......@@ -29,7 +29,6 @@ import java.io.InputStream;
* keysets in proto binary format from common storage systems.
*/
public final class KeysetReaders {
public static KeysetReader withInputStream(InputStream stream) {
return new InputStreamKeysetReader(stream);
}
......
......@@ -40,6 +40,7 @@ import com.google.crypto.tink.proto.EciesAeadHkdfParams;
import com.google.crypto.tink.proto.EciesAeadHkdfPrivateKey;
import com.google.crypto.tink.proto.EciesAeadHkdfPublicKey;
import com.google.crypto.tink.proto.EllipticCurveType;
import com.google.crypto.tink.proto.EncryptedKeyset;
import com.google.crypto.tink.proto.HashType;
import com.google.crypto.tink.proto.HmacKey;
import com.google.crypto.tink.proto.HmacParams;
......@@ -217,10 +218,27 @@ public class TestUtil {
}
}
/**
* @return a {@code KeysetReader} from a {@code handle}.
*/
public static KeysetReader createKeysetReader(KeysetHandle handle) throws Exception {
return new KeysetReader() {
@Override
public Keyset read() throws IOException {
return handle.getKeyset();
}
@Override
public EncryptedKeyset readEncrypted() throws IOException {
throw new IOException("Not Implemented");
}
};
}
/**
* @return a keyset handle from a {@code keyset}.
*/
public static KeysetHandle createKeysetHandle(final Keyset keyset) throws Exception {
public static KeysetHandle createKeysetHandle(Keyset keyset) throws Exception {
return KeysetHandle.fromKeyset(keyset);
}
......
......@@ -33,6 +33,7 @@ import com.google.crypto.tink.proto.HashType;
import com.google.crypto.tink.proto.KeyData;
import com.google.crypto.tink.proto.KeyStatusType;
import com.google.crypto.tink.proto.KeyTemplate;
import com.google.crypto.tink.proto.Keyset;
import com.google.crypto.tink.proto.Keyset.Key;
import com.google.crypto.tink.proto.OutputPrefixType;
import com.google.crypto.tink.subtle.Random;
......@@ -103,7 +104,8 @@ public class EciesAeadHkdfPrivateKeyManagerTest {
public void testGetPublicKeyData() throws Exception {
KeysetHandle privateHandle = KeysetHandle.generateNew(
HybridKeyTemplates.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM);
KeyData privateKeyData = privateHandle.getKeyset().getKey(0).getKeyData();
Keyset keyset = TestUtil.createKeysetReader(privateHandle).read();
KeyData privateKeyData = keyset.getKey(0).getKeyData();
EciesAeadHkdfPrivateKeyManager privateManager = new EciesAeadHkdfPrivateKeyManager();
KeyData publicKeyData = privateManager.getPublicKeyData(privateKeyData.getValue());
assertEquals(EciesAeadHkdfPublicKeyManager.TYPE_URL, publicKeyData.getTypeUrl());
......
......@@ -34,6 +34,7 @@ import com.google.crypto.tink.proto.EllipticCurveType;
import com.google.crypto.tink.proto.HashType;
import com.google.crypto.tink.proto.KeyData;
import com.google.crypto.tink.proto.KeyTemplate;
import com.google.crypto.tink.proto.Keyset;
import com.google.crypto.tink.subtle.EcUtil;
import com.google.crypto.tink.subtle.Random;
import com.google.protobuf.ByteString;
......@@ -297,7 +298,8 @@ public class EcdsaSignKeyManagerTest {
public void testGetPublicKeyData() throws Exception {
KeysetHandle privateHandle = KeysetHandle.generateNew(
SignatureKeyTemplates.ECDSA_P256);
KeyData privateKeyData = privateHandle.getKeyset().getKey(0).getKeyData();
Keyset keyset = TestUtil.createKeysetReader(privateHandle).read();
KeyData privateKeyData = keyset.getKey(0).getKeyData();
EcdsaSignKeyManager privateManager = new EcdsaSignKeyManager();
KeyData publicKeyData = privateManager.getPublicKeyData(privateKeyData.getValue());
assertEquals(EcdsaVerifyKeyManager.TYPE_URL, publicKeyData.getTypeUrl());
......
......@@ -24,9 +24,11 @@ import static org.junit.Assert.fail;
import com.google.crypto.tink.KeysetHandle;
import com.google.crypto.tink.PublicKeySign;
import com.google.crypto.tink.PublicKeyVerify;
import com.google.crypto.tink.TestUtil;
import com.google.crypto.tink.proto.Ed25519PrivateKey;
import com.google.crypto.tink.proto.KeyData;
import com.google.crypto.tink.proto.KeyTemplate;
import com.google.crypto.tink.proto.Keyset;
import com.google.crypto.tink.subtle.Ed25519Sign;
import com.google.crypto.tink.subtle.Ed25519Verify;
import com.google.crypto.tink.subtle.Random;
......@@ -81,7 +83,8 @@ public class Ed25519PrivateKeyManagerTest {
public void testGetPublicKeyData() throws Exception {
KeysetHandle privateHandle = KeysetHandle.generateNew(
SignatureKeyTemplates.ED25519);
KeyData privateKeyData = privateHandle.getKeyset().getKey(0).getKeyData();
Keyset keyset = TestUtil.createKeysetReader(privateHandle).read();
KeyData privateKeyData = keyset.getKey(0).getKeyData();
Ed25519PrivateKeyManager privateManager = new Ed25519PrivateKeyManager();
KeyData publicKeyData = privateManager.getPublicKeyData(privateKeyData.getValue());
assertEquals(Ed25519PublicKeyManager.TYPE_URL, publicKeyData.getTypeUrl());
......
......@@ -21,7 +21,6 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.crypto.tink.Aead;
import com.google.crypto.tink.CleartextKeysetHandle;
import com.google.crypto.tink.KeysetHandle;
import com.google.crypto.tink.KeysetReaders;
import com.google.crypto.tink.TestUtil;
......@@ -93,9 +92,7 @@ public class CreateCommandTest {
outFormat = "BINARY";
CreateCommand.create(outputStream, outFormat, credentialFile, keyTemplate,
gcpKmsMasterKeyValue, awsKmsMasterKeyValue);
KeysetHandle handle = CleartextKeysetHandle.fromKeysetReader(
KeysetReaders.withBytes(outputStream.toByteArray()));
keyset = handle.getKeyset();
keyset = KeysetReaders.withBytes(outputStream.toByteArray()).read();
assertEquals(1, keyset.getKeyCount());
assertEquals(keyset.getPrimaryKeyId(), keyset.getKey(0).getKeyId());
assertTrue(keyset.getKey(0).hasKeyData());
......@@ -137,19 +134,8 @@ public class CreateCommandTest {
Aead masterKey = new GcpKmsAead(
GcpKmsClient.fromServiceAccount(credentialFile),
gcpKmsMasterKeyValue);
KeysetHandle handle = KeysetHandle
.fromKeysetReader(KeysetReaders.withBytes(outputStream.toByteArray()), masterKey);
Keyset keyset = handle.getKeyset();
assertEquals(1, keyset.getKeyCount());
assertEquals(keyset.getPrimaryKeyId(), keyset.getKey(0).getKeyId());
assertTrue(keyset.getKey(0).hasKeyData());
assertEquals(typeUrl, keyset.getKey(0).getKeyData().getTypeUrl());
assertEquals(KeyStatusType.ENABLED, keyset.getKey(0).getStatus());
assertEquals(OutputPrefixType.TINK, keyset.getKey(0).getOutputPrefixType());
AesGcmKey aesGcmKey = AesGcmKey.parseFrom(keyset.getKey(0).getKeyData().getValue());
assertEquals(16, aesGcmKey.getKeyValue().size());
KeysetHandle handle = KeysetHandle.fromKeysetReader(
KeysetReaders.withBytes(outputStream.toByteArray()), masterKey);
keysetInfo = handle.getKeysetInfo();
assertEquals(1, keysetInfo.getKeyInfoCount());
assertEquals(keysetInfo.getPrimaryKeyId(), keysetInfo.getKeyInfo(0).getKeyId());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment