use of com.google.crypto.tink.proto.EciesHkdfKemParams in project tink by google.
the class EciesAeadHkdfPrivateKeyManager method newKey.
/**
* @param keyFormat {@code EciesAeadHkdfKeyFormat} proto
* @return new {@code EciesAeadHkdfPrivateKey} proto
*/
@Override
public MessageLite newKey(MessageLite keyFormat) throws GeneralSecurityException {
if (!(keyFormat instanceof EciesAeadHkdfKeyFormat)) {
throw new GeneralSecurityException("expected EciesAeadHkdfKeyFormat proto");
}
EciesAeadHkdfKeyFormat eciesKeyFormat = (EciesAeadHkdfKeyFormat) keyFormat;
HybridUtil.validate(eciesKeyFormat.getParams());
EciesHkdfKemParams kemParams = eciesKeyFormat.getParams().getKemParams();
KeyPair keyPair = EllipticCurves.generateKeyPair(HybridUtil.toCurveType(kemParams.getCurveType()));
ECPublicKey pubKey = (ECPublicKey) keyPair.getPublic();
ECPrivateKey privKey = (ECPrivateKey) keyPair.getPrivate();
ECPoint w = pubKey.getW();
// Creates EciesAeadHkdfPublicKey.
EciesAeadHkdfPublicKey eciesPublicKey = EciesAeadHkdfPublicKey.newBuilder().setVersion(VERSION).setParams(eciesKeyFormat.getParams()).setX(ByteString.copyFrom(w.getAffineX().toByteArray())).setY(ByteString.copyFrom(w.getAffineY().toByteArray())).build();
// Creates EciesAeadHkdfPrivateKey.
return EciesAeadHkdfPrivateKey.newBuilder().setVersion(VERSION).setPublicKey(eciesPublicKey).setKeyValue(ByteString.copyFrom(privKey.getS().toByteArray())).build();
}
use of com.google.crypto.tink.proto.EciesHkdfKemParams in project tink by google.
the class HybridKeyTemplatesTest method testECIES_P256_HKDF_HMAC_SHA256_AES128_GCM.
@Test
public void testECIES_P256_HKDF_HMAC_SHA256_AES128_GCM() throws Exception {
KeyTemplate template = HybridKeyTemplates.ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM;
assertEquals(EciesAeadHkdfPrivateKeyManager.TYPE_URL, template.getTypeUrl());
assertEquals(OutputPrefixType.TINK, template.getOutputPrefixType());
EciesAeadHkdfKeyFormat format = EciesAeadHkdfKeyFormat.parseFrom(template.getValue());
assertTrue(format.hasParams());
assertTrue(format.getParams().hasKemParams());
assertTrue(format.getParams().hasDemParams());
assertTrue(format.getParams().getDemParams().hasAeadDem());
assertEquals(EcPointFormat.UNCOMPRESSED, format.getParams().getEcPointFormat());
EciesHkdfKemParams kemParams = format.getParams().getKemParams();
assertEquals(EllipticCurveType.NIST_P256, kemParams.getCurveType());
assertEquals(HashType.SHA256, kemParams.getHkdfHashType());
assertTrue(kemParams.getHkdfSalt().isEmpty());
assertEquals(AeadKeyTemplates.AES128_GCM.toString(), format.getParams().getDemParams().getAeadDem().toString());
}
use of com.google.crypto.tink.proto.EciesHkdfKemParams in project tink by google.
the class HybridKeyTemplatesTest method testECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256.
@Test
public void testECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256() throws Exception {
KeyTemplate template = HybridKeyTemplates.ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256;
assertEquals(EciesAeadHkdfPrivateKeyManager.TYPE_URL, template.getTypeUrl());
assertEquals(OutputPrefixType.TINK, template.getOutputPrefixType());
EciesAeadHkdfKeyFormat format = EciesAeadHkdfKeyFormat.parseFrom(template.getValue());
assertTrue(format.hasParams());
assertTrue(format.getParams().hasKemParams());
assertTrue(format.getParams().hasDemParams());
assertTrue(format.getParams().getDemParams().hasAeadDem());
assertEquals(EcPointFormat.UNCOMPRESSED, format.getParams().getEcPointFormat());
EciesHkdfKemParams kemParams = format.getParams().getKemParams();
assertEquals(EllipticCurveType.NIST_P256, kemParams.getCurveType());
assertEquals(HashType.SHA256, kemParams.getHkdfHashType());
assertTrue(kemParams.getHkdfSalt().isEmpty());
assertEquals(AeadKeyTemplates.AES128_CTR_HMAC_SHA256.toString(), format.getParams().getDemParams().getAeadDem().toString());
}
use of com.google.crypto.tink.proto.EciesHkdfKemParams in project tink by google.
the class EciesAeadHkdfPrivateKeyManagerTest method createPrimitive.
@Test
public void createPrimitive() throws Exception {
EciesAeadHkdfPrivateKey key = createValidKey();
HybridDecrypt hybridDecrypt = manager.getPrimitive(key, HybridDecrypt.class);
EciesAeadHkdfParams eciesParams = key.getPublicKey().getParams();
EciesHkdfKemParams kemParams = eciesParams.getKemParams();
ECPublicKey recipientPublicKey = EllipticCurves.getEcPublicKey(HybridUtil.toCurveType(kemParams.getCurveType()), key.getPublicKey().getX().toByteArray(), key.getPublicKey().getY().toByteArray());
EciesAeadHkdfDemHelper demHelper = new RegistryEciesAeadHkdfDemHelper(eciesParams.getDemParams().getAeadDem());
HybridEncrypt hybridEncrypt = new EciesAeadHkdfHybridEncrypt(recipientPublicKey, kemParams.getHkdfSalt().toByteArray(), HybridUtil.toHmacAlgo(kemParams.getHkdfHashType()), HybridUtil.toPointFormatType(eciesParams.getEcPointFormat()), demHelper);
byte[] message = Random.randBytes(20);
byte[] contextInfo = Random.randBytes(20);
assertThat(hybridDecrypt.decrypt(hybridEncrypt.encrypt(message, contextInfo), contextInfo)).isEqualTo(message);
}
use of com.google.crypto.tink.proto.EciesHkdfKemParams in project tink by google.
the class EciesAeadHkdfPrivateKeyManagerTest method testRawEciesP256HkdfHmacSha256Aes128GcmCompressedTemplate.
@Test
public void testRawEciesP256HkdfHmacSha256Aes128GcmCompressedTemplate() throws Exception {
KeyTemplate template = EciesAeadHkdfPrivateKeyManager.rawEciesP256HkdfHmacSha256Aes128GcmCompressedTemplate();
assertEquals(new EciesAeadHkdfPrivateKeyManager().getKeyType(), template.getTypeUrl());
assertEquals(KeyTemplate.OutputPrefixType.RAW, template.getOutputPrefixType());
EciesAeadHkdfKeyFormat format = EciesAeadHkdfKeyFormat.parseFrom(template.getValue(), ExtensionRegistryLite.getEmptyRegistry());
assertThat(format.hasParams()).isTrue();
assertThat(format.getParams().hasKemParams()).isTrue();
assertThat(format.getParams().hasDemParams()).isTrue();
assertThat(format.getParams().getDemParams().hasAeadDem()).isTrue();
assertThat(format.getParams().getEcPointFormat()).isEqualTo(EcPointFormat.COMPRESSED);
EciesHkdfKemParams kemParams = format.getParams().getKemParams();
assertThat(kemParams.getCurveType()).isEqualTo(EllipticCurveType.NIST_P256);
assertThat(kemParams.getHkdfHashType()).isEqualTo(HashType.SHA256);
assertThat(kemParams.getHkdfSalt()).isEmpty();
assertThat(format.getParams().getDemParams().getAeadDem().toString()).isEqualTo(AeadKeyTemplates.AES128_GCM.toString());
}
Aggregations