use of io.nem.symbol.core.crypto.KeyPair in project nem2-sdk-java by nemtech.
the class TransferTransactionIntegrationTest method standaloneCreatePersistentDelegationRequestTransaction.
@ParameterizedTest
@EnumSource(RepositoryType.class)
public void standaloneCreatePersistentDelegationRequestTransaction(RepositoryType type) {
KeyPair signingKeyPair = KeyPair.random();
KeyPair vrfPrivateKey = KeyPair.random();
KeyPair recipientKeyPair = KeyPair.random();
TransferTransaction transferTransaction = TransferTransactionFactory.createPersistentDelegationRequestTransaction(getNetworkType(), getDeadline(), signingKeyPair.getPrivateKey(), vrfPrivateKey.getPrivateKey(), recipientKeyPair.getPublicKey()).maxFee(maxFee).build();
TransferTransaction processed = announceAndValidate(type, signerAccount, transferTransaction);
assertPersistentDelegationTransaction(recipientKeyPair, signingKeyPair, vrfPrivateKey, processed);
TransferTransaction restTransaction = (TransferTransaction) get(getRepositoryFactory(type).createTransactionRepository().getTransaction(TransactionGroup.CONFIRMED, processed.getTransactionInfo().get().getHash().get()));
assertPersistentDelegationTransaction(recipientKeyPair, signingKeyPair, vrfPrivateKey, restTransaction);
}
use of io.nem.symbol.core.crypto.KeyPair in project nem2-sdk-java by nemtech.
the class EncryptedMessage method create.
/**
* Helper constructor that allow users to easily encrypt a message using the SDK provided {@link
* CryptoEngine} and {@link BlockCipher}.
*
* <p>Note, the strategy to encrypt and decrypt should be shared between the different SDKs. A
* client may send a transaction using a sdk and the recipient may be using a different one.
*
* <p>The strategy is:
*
* <p>"plain text" string - utf8 byte array - encrypted byte array - hex string (the encrypted
* message string)
*
* @param plainTextMessage Plain message to be encrypted
* @param senderPrivateKey Sender private key
* @param recipientPublicKey Recipient public key
* @return EncryptedMessage
*/
public static EncryptedMessage create(String plainTextMessage, PrivateKey senderPrivateKey, PublicKey recipientPublicKey) {
CryptoEngine engine = CryptoEngines.defaultEngine();
KeyPair sender = KeyPair.fromPrivate(senderPrivateKey);
KeyPair recipient = KeyPair.onlyPublic(recipientPublicKey, engine);
BlockCipher blockCipher = engine.createBlockCipher(sender, recipient);
return new EncryptedMessage(ConvertUtils.toHex(blockCipher.encrypt(StringEncoder.getBytes(plainTextMessage))));
}
use of io.nem.symbol.core.crypto.KeyPair in project nem2-sdk-java by nemtech.
the class Ed25519DsaSignerTest method signReturnsExpectedSignature.
@Test
public void signReturnsExpectedSignature() {
// Arrange:
final CryptoEngine engine = this.getCryptoEngine();
final KeyPair keyPair = KeyPair.random(engine);
for (int i = 0; i < 20; i++) {
final DsaSigner dsaSigner = this.getDsaSigner(keyPair);
final byte[] input = RandomUtils.generateRandomBytes();
// Act:
final Signature signature1 = dsaSigner.sign(input);
final Signature signature2 = MathUtils.sign(keyPair, input);
// Assert:
Assertions.assertEquals(signature1, signature2);
}
}
use of io.nem.symbol.core.crypto.KeyPair in project nem2-sdk-java by nemtech.
the class Ed25519DsaSignerTest method makeCanonicalMakesNonCanonicalSignatureCanonical.
@Test
public void makeCanonicalMakesNonCanonicalSignatureCanonical() {
// Arrange:
final CryptoEngine engine = this.getCryptoEngine();
final KeyPair kp = KeyPair.random(engine);
final DsaSigner dsaSigner = this.getDsaSigner(kp);
final byte[] input = RandomUtils.generateRandomBytes();
// Act:
final Signature signature = dsaSigner.sign(input);
final BigInteger nonCanonicalS = engine.getCurve().getGroupOrder().add(signature.getS());
final Signature nonCanonicalSignature = new Signature(signature.getR(), nonCanonicalS);
Assertions.assertFalse(dsaSigner.isCanonicalSignature(nonCanonicalSignature));
final Signature canonicalSignature = dsaSigner.makeSignatureCanonical(nonCanonicalSignature);
// Assert:
Assertions.assertTrue(dsaSigner.isCanonicalSignature(canonicalSignature));
}
use of io.nem.symbol.core.crypto.KeyPair in project nem2-sdk-java by nemtech.
the class Ed25519DsaSignerTest method replacingRWithGroupOrderPlusRInSignatureRuinsSignature.
@Test
public void replacingRWithGroupOrderPlusRInSignatureRuinsSignature() {
// Arrange:
final CryptoEngine engine = this.getCryptoEngine();
final BigInteger groupOrder = engine.getCurve().getGroupOrder();
final KeyPair kp = KeyPair.random(engine);
final DsaSigner dsaSigner = this.getDsaSigner(kp);
Signature signature;
byte[] input;
while (true) {
input = RandomUtils.generateRandomBytes();
signature = dsaSigner.sign(input);
if (signature.getR().add(groupOrder).compareTo(BigInteger.ONE.shiftLeft(256)) < 0) {
break;
}
}
// Act:
final Signature signature2 = new Signature(groupOrder.add(signature.getR()), signature.getS());
// Assert:
Assertions.assertFalse(dsaSigner.verify(input, signature2));
}
Aggregations