diff --git a/README.md b/README.md index 581a073..96e443f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ What we provide: * Networking layers * [Protocol Buffers][4] wiring and definitions * Key signing with [EC cryptography][5] +* Transfer data from originator VASP in [Sygna Bridge][8] ## Travel Rule @@ -57,6 +58,7 @@ A graph of the workflow is probably the best way to visualize what is going on. ![Transact ID Workflow](images/workflow_transactid.png) +![Transfer with Sygna Bridge Workflow](images/workflow_sygna_bridge.png) ## Quick Start @@ -906,3 +908,4 @@ data class AddressInformation @JvmOverloads constructor( [5]: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography [6]: https://www.sec.gov/about/offices/ocie/aml2007/31cfr103.33g.pdf [7]: https://www.occ.treas.gov/topics/supervision-and-examination/bsa/index-bsa.html +[8]: https://developers.sygna.io/reference#bridge-3 diff --git a/build.gradle b/build.gradle index dd2beab..764f99c 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ ext { kotlinReflectVersion = "1.3.70" groupId = 'com.netki' - versionRelease = '1.0.0-beta4' + versionRelease = '1.0.0-beta5' artifactId = 'transactid' } diff --git a/images/workflow_sygna_bridge.png b/images/workflow_sygna_bridge.png new file mode 100644 index 0000000..2de835b Binary files /dev/null and b/images/workflow_sygna_bridge.png differ diff --git a/src/main/java/com/netki/bip75/protocol/Messages.java b/src/main/java/com/netki/bip75/protocol/Messages.java index b59bd07..a4dae49 100644 --- a/src/main/java/com/netki/bip75/protocol/Messages.java +++ b/src/main/java/com/netki/bip75/protocol/Messages.java @@ -1,5 +1,5 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! -// source: payment.proto +// source: main/proto/payment.proto package com.netki.bip75.protocol; @@ -984,11 +984,68 @@ com.netki.bip75.protocol.Messages.OutputOrBuilder getOriginatorsAddressesOrBuild */ com.google.protobuf.ByteString getRecipientChainAddressBytes(); + + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 14; + * @return Whether the sygnaTransferId field is set. + */ + boolean hasSygnaTransferId(); + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 14; + * @return The sygnaTransferId. + */ + java.lang.String getSygnaTransferId(); + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 14; + * @return The bytes for sygnaTransferId. + */ + com.google.protobuf.ByteString + getSygnaTransferIdBytes(); + + /** + * optional bytes sygna_encrypted_originators = 15; + * @return Whether the sygnaEncryptedOriginators field is set. + */ + boolean hasSygnaEncryptedOriginators(); + /** + * optional bytes sygna_encrypted_originators = 15; + * @return The sygnaEncryptedOriginators. + */ + com.google.protobuf.ByteString getSygnaEncryptedOriginators(); + + /** + * optional string sygna_api_key = 16; + * @return Whether the sygnaApiKey field is set. + */ + boolean hasSygnaApiKey(); + /** + * optional string sygna_api_key = 16; + * @return The sygnaApiKey. + */ + java.lang.String getSygnaApiKey(); + /** + * optional string sygna_api_key = 16; + * @return The bytes for sygnaApiKey. + */ + com.google.protobuf.ByteString + getSygnaApiKeyBytes(); } /** * Protobuf type {@code payments.InvoiceRequest} */ - public static final class InvoiceRequest extends + public static final class InvoiceRequest extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.InvoiceRequest) InvoiceRequestOrBuilder { @@ -1010,6 +1067,9 @@ private InvoiceRequest() { senderEvCert_ = com.google.protobuf.ByteString.EMPTY; recipientVaspName_ = ""; recipientChainAddress_ = ""; + sygnaTransferId_ = ""; + sygnaEncryptedOriginators_ = com.google.protobuf.ByteString.EMPTY; + sygnaApiKey_ = ""; } @java.lang.Override @@ -1155,6 +1215,23 @@ private InvoiceRequest( recipientChainAddress_ = bs; break; } + case 114: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000200; + sygnaTransferId_ = bs; + break; + } + case 122: { + bitField0_ |= 0x00000400; + sygnaEncryptedOriginators_ = input.readBytes(); + break; + } + case 130: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000800; + sygnaApiKey_ = bs; + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -1210,6 +1287,7 @@ private InvoiceRequest( * optional uint64 amount = 1 [default = 0]; * @return Whether the amount field is set. */ + @java.lang.Override public boolean hasAmount() { return ((bitField0_ & 0x00000001) != 0); } @@ -1221,6 +1299,7 @@ public boolean hasAmount() { * optional uint64 amount = 1 [default = 0]; * @return The amount. */ + @java.lang.Override public long getAmount() { return amount_; } @@ -1235,6 +1314,7 @@ public long getAmount() { * optional string memo = 2; * @return Whether the memo field is set. */ + @java.lang.Override public boolean hasMemo() { return ((bitField0_ & 0x00000002) != 0); } @@ -1246,6 +1326,7 @@ public boolean hasMemo() { * optional string memo = 2; * @return The memo. */ + @java.lang.Override public java.lang.String getMemo() { java.lang.Object ref = memo_; if (ref instanceof java.lang.String) { @@ -1268,6 +1349,7 @@ public java.lang.String getMemo() { * optional string memo = 2; * @return The bytes for memo. */ + @java.lang.Override public com.google.protobuf.ByteString getMemoBytes() { java.lang.Object ref = memo_; @@ -1292,6 +1374,7 @@ public java.lang.String getMemo() { * optional string notification_url = 3; * @return Whether the notificationUrl field is set. */ + @java.lang.Override public boolean hasNotificationUrl() { return ((bitField0_ & 0x00000004) != 0); } @@ -1303,6 +1386,7 @@ public boolean hasNotificationUrl() { * optional string notification_url = 3; * @return The notificationUrl. */ + @java.lang.Override public java.lang.String getNotificationUrl() { java.lang.Object ref = notificationUrl_; if (ref instanceof java.lang.String) { @@ -1325,6 +1409,7 @@ public java.lang.String getNotificationUrl() { * optional string notification_url = 3; * @return The bytes for notificationUrl. */ + @java.lang.Override public com.google.protobuf.ByteString getNotificationUrlBytes() { java.lang.Object ref = notificationUrl_; @@ -1348,6 +1433,7 @@ public java.lang.String getNotificationUrl() { * * repeated .payments.Originator originators = 4; */ + @java.lang.Override public java.util.List getOriginatorsList() { return originators_; } @@ -1358,6 +1444,7 @@ public java.util.List getOriginato * * repeated .payments.Originator originators = 4; */ + @java.lang.Override public java.util.List getOriginatorsOrBuilderList() { return originators_; @@ -1369,6 +1456,7 @@ public java.util.List getOriginato * * repeated .payments.Originator originators = 4; */ + @java.lang.Override public int getOriginatorsCount() { return originators_.size(); } @@ -1379,6 +1467,7 @@ public int getOriginatorsCount() { * * repeated .payments.Originator originators = 4; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Originator getOriginators(int index) { return originators_.get(index); } @@ -1389,6 +1478,7 @@ public com.netki.bip75.protocol.Messages.Originator getOriginators(int index) { * * repeated .payments.Originator originators = 4; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.OriginatorOrBuilder getOriginatorsOrBuilder( int index) { return originators_.get(index); @@ -1403,6 +1493,7 @@ public com.netki.bip75.protocol.Messages.OriginatorOrBuilder getOriginatorsOrBui * * repeated .payments.Beneficiary beneficiaries = 5; */ + @java.lang.Override public java.util.List getBeneficiariesList() { return beneficiaries_; } @@ -1413,6 +1504,7 @@ public java.util.List getBenefici * * repeated .payments.Beneficiary beneficiaries = 5; */ + @java.lang.Override public java.util.List getBeneficiariesOrBuilderList() { return beneficiaries_; @@ -1424,6 +1516,7 @@ public java.util.List getBenefici * * repeated .payments.Beneficiary beneficiaries = 5; */ + @java.lang.Override public int getBeneficiariesCount() { return beneficiaries_.size(); } @@ -1434,6 +1527,7 @@ public int getBeneficiariesCount() { * * repeated .payments.Beneficiary beneficiaries = 5; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Beneficiary getBeneficiaries(int index) { return beneficiaries_.get(index); } @@ -1444,6 +1538,7 @@ public com.netki.bip75.protocol.Messages.Beneficiary getBeneficiaries(int index) * * repeated .payments.Beneficiary beneficiaries = 5; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOrBuilder( int index) { return beneficiaries_.get(index); @@ -1458,6 +1553,7 @@ public com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOr * * repeated .payments.Output originatorsAddresses = 6; */ + @java.lang.Override public java.util.List getOriginatorsAddressesList() { return originatorsAddresses_; } @@ -1468,6 +1564,7 @@ public java.util.List getOriginatorsAd * * repeated .payments.Output originatorsAddresses = 6; */ + @java.lang.Override public java.util.List getOriginatorsAddressesOrBuilderList() { return originatorsAddresses_; @@ -1479,6 +1576,7 @@ public java.util.List getOriginatorsAd * * repeated .payments.Output originatorsAddresses = 6; */ + @java.lang.Override public int getOriginatorsAddressesCount() { return originatorsAddresses_.size(); } @@ -1489,6 +1587,7 @@ public int getOriginatorsAddressesCount() { * * repeated .payments.Output originatorsAddresses = 6; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Output getOriginatorsAddresses(int index) { return originatorsAddresses_.get(index); } @@ -1499,6 +1598,7 @@ public com.netki.bip75.protocol.Messages.Output getOriginatorsAddresses(int inde * * repeated .payments.Output originatorsAddresses = 6; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.OutputOrBuilder getOriginatorsAddressesOrBuilder( int index) { return originatorsAddresses_.get(index); @@ -1524,6 +1624,7 @@ public com.netki.bip75.protocol.Messages.AttestationType convert(java.lang.Integ * repeated .payments.AttestationType attestationsRequested = 7; * @return A list containing the attestationsRequested. */ + @java.lang.Override public java.util.List getAttestationsRequestedList() { return new com.google.protobuf.Internal.ListAdapter< java.lang.Integer, com.netki.bip75.protocol.Messages.AttestationType>(attestationsRequested_, attestationsRequested_converter_); @@ -1534,7 +1635,9 @@ public java.util.List getAtte * * * repeated .payments.AttestationType attestationsRequested = 7; + * @return The count of attestationsRequested. */ + @java.lang.Override public int getAttestationsRequestedCount() { return attestationsRequested_.size(); } @@ -1547,6 +1650,7 @@ public int getAttestationsRequestedCount() { * @param index The index of the element to return. * @return The attestationsRequested at the given index. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.AttestationType getAttestationsRequested(int index) { return attestationsRequested_converter_.convert(attestationsRequested_.get(index)); } @@ -1561,6 +1665,7 @@ public com.netki.bip75.protocol.Messages.AttestationType getAttestationsRequeste * optional string sender_pki_type = 8 [default = "none"]; * @return Whether the senderPkiType field is set. */ + @java.lang.Override public boolean hasSenderPkiType() { return ((bitField0_ & 0x00000008) != 0); } @@ -1572,6 +1677,7 @@ public boolean hasSenderPkiType() { * optional string sender_pki_type = 8 [default = "none"]; * @return The senderPkiType. */ + @java.lang.Override public java.lang.String getSenderPkiType() { java.lang.Object ref = senderPkiType_; if (ref instanceof java.lang.String) { @@ -1594,6 +1700,7 @@ public java.lang.String getSenderPkiType() { * optional string sender_pki_type = 8 [default = "none"]; * @return The bytes for senderPkiType. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPkiTypeBytes() { java.lang.Object ref = senderPkiType_; @@ -1618,6 +1725,7 @@ public java.lang.String getSenderPkiType() { * optional bytes sender_pki_data = 9; * @return Whether the senderPkiData field is set. */ + @java.lang.Override public boolean hasSenderPkiData() { return ((bitField0_ & 0x00000010) != 0); } @@ -1629,6 +1737,7 @@ public boolean hasSenderPkiData() { * optional bytes sender_pki_data = 9; * @return The senderPkiData. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPkiData() { return senderPkiData_; } @@ -1643,6 +1752,7 @@ public com.google.protobuf.ByteString getSenderPkiData() { * optional bytes sender_signature = 10; * @return Whether the senderSignature field is set. */ + @java.lang.Override public boolean hasSenderSignature() { return ((bitField0_ & 0x00000020) != 0); } @@ -1654,6 +1764,7 @@ public boolean hasSenderSignature() { * optional bytes sender_signature = 10; * @return The senderSignature. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderSignature() { return senderSignature_; } @@ -1668,6 +1779,7 @@ public com.google.protobuf.ByteString getSenderSignature() { * optional bytes sender_ev_cert = 11; * @return Whether the senderEvCert field is set. */ + @java.lang.Override public boolean hasSenderEvCert() { return ((bitField0_ & 0x00000040) != 0); } @@ -1679,6 +1791,7 @@ public boolean hasSenderEvCert() { * optional bytes sender_ev_cert = 11; * @return The senderEvCert. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderEvCert() { return senderEvCert_; } @@ -1693,6 +1806,7 @@ public com.google.protobuf.ByteString getSenderEvCert() { * optional string recipient_vasp_name = 12; * @return Whether the recipientVaspName field is set. */ + @java.lang.Override public boolean hasRecipientVaspName() { return ((bitField0_ & 0x00000080) != 0); } @@ -1704,6 +1818,7 @@ public boolean hasRecipientVaspName() { * optional string recipient_vasp_name = 12; * @return The recipientVaspName. */ + @java.lang.Override public java.lang.String getRecipientVaspName() { java.lang.Object ref = recipientVaspName_; if (ref instanceof java.lang.String) { @@ -1726,6 +1841,7 @@ public java.lang.String getRecipientVaspName() { * optional string recipient_vasp_name = 12; * @return The bytes for recipientVaspName. */ + @java.lang.Override public com.google.protobuf.ByteString getRecipientVaspNameBytes() { java.lang.Object ref = recipientVaspName_; @@ -1750,6 +1866,7 @@ public java.lang.String getRecipientVaspName() { * optional string recipient_chain_address = 13; * @return Whether the recipientChainAddress field is set. */ + @java.lang.Override public boolean hasRecipientChainAddress() { return ((bitField0_ & 0x00000100) != 0); } @@ -1761,6 +1878,7 @@ public boolean hasRecipientChainAddress() { * optional string recipient_chain_address = 13; * @return The recipientChainAddress. */ + @java.lang.Override public java.lang.String getRecipientChainAddress() { java.lang.Object ref = recipientChainAddress_; if (ref instanceof java.lang.String) { @@ -1783,6 +1901,7 @@ public java.lang.String getRecipientChainAddress() { * optional string recipient_chain_address = 13; * @return The bytes for recipientChainAddress. */ + @java.lang.Override public com.google.protobuf.ByteString getRecipientChainAddressBytes() { java.lang.Object ref = recipientChainAddress_; @@ -1797,6 +1916,133 @@ public java.lang.String getRecipientChainAddress() { } } + public static final int SYGNA_TRANSFER_ID_FIELD_NUMBER = 14; + private volatile java.lang.Object sygnaTransferId_; + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 14; + * @return Whether the sygnaTransferId field is set. + */ + @java.lang.Override + public boolean hasSygnaTransferId() { + return ((bitField0_ & 0x00000200) != 0); + } + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 14; + * @return The sygnaTransferId. + */ + @java.lang.Override + public java.lang.String getSygnaTransferId() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaTransferId_ = s; + } + return s; + } + } + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 14; + * @return The bytes for sygnaTransferId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSygnaTransferIdBytes() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaTransferId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SYGNA_ENCRYPTED_ORIGINATORS_FIELD_NUMBER = 15; + private com.google.protobuf.ByteString sygnaEncryptedOriginators_; + /** + * optional bytes sygna_encrypted_originators = 15; + * @return Whether the sygnaEncryptedOriginators field is set. + */ + @java.lang.Override + public boolean hasSygnaEncryptedOriginators() { + return ((bitField0_ & 0x00000400) != 0); + } + /** + * optional bytes sygna_encrypted_originators = 15; + * @return The sygnaEncryptedOriginators. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSygnaEncryptedOriginators() { + return sygnaEncryptedOriginators_; + } + + public static final int SYGNA_API_KEY_FIELD_NUMBER = 16; + private volatile java.lang.Object sygnaApiKey_; + /** + * optional string sygna_api_key = 16; + * @return Whether the sygnaApiKey field is set. + */ + @java.lang.Override + public boolean hasSygnaApiKey() { + return ((bitField0_ & 0x00000800) != 0); + } + /** + * optional string sygna_api_key = 16; + * @return The sygnaApiKey. + */ + @java.lang.Override + public java.lang.String getSygnaApiKey() { + java.lang.Object ref = sygnaApiKey_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaApiKey_ = s; + } + return s; + } + } + /** + * optional string sygna_api_key = 16; + * @return The bytes for sygnaApiKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSygnaApiKeyBytes() { + java.lang.Object ref = sygnaApiKey_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaApiKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -1862,6 +2108,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (((bitField0_ & 0x00000100) != 0)) { com.google.protobuf.GeneratedMessageV3.writeString(output, 13, recipientChainAddress_); } + if (((bitField0_ & 0x00000200) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 14, sygnaTransferId_); + } + if (((bitField0_ & 0x00000400) != 0)) { + output.writeBytes(15, sygnaEncryptedOriginators_); + } + if (((bitField0_ & 0x00000800) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 16, sygnaApiKey_); + } unknownFields.writeTo(output); } @@ -1923,6 +2178,16 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000100) != 0)) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, recipientChainAddress_); } + if (((bitField0_ & 0x00000200) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, sygnaTransferId_); + } + if (((bitField0_ & 0x00000400) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(15, sygnaEncryptedOriginators_); + } + if (((bitField0_ & 0x00000800) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(16, sygnaApiKey_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -1990,6 +2255,21 @@ public boolean equals(final java.lang.Object obj) { if (!getRecipientChainAddress() .equals(other.getRecipientChainAddress())) return false; } + if (hasSygnaTransferId() != other.hasSygnaTransferId()) return false; + if (hasSygnaTransferId()) { + if (!getSygnaTransferId() + .equals(other.getSygnaTransferId())) return false; + } + if (hasSygnaEncryptedOriginators() != other.hasSygnaEncryptedOriginators()) return false; + if (hasSygnaEncryptedOriginators()) { + if (!getSygnaEncryptedOriginators() + .equals(other.getSygnaEncryptedOriginators())) return false; + } + if (hasSygnaApiKey() != other.hasSygnaApiKey()) return false; + if (hasSygnaApiKey()) { + if (!getSygnaApiKey() + .equals(other.getSygnaApiKey())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -2054,6 +2334,18 @@ public int hashCode() { hash = (37 * hash) + RECIPIENT_CHAIN_ADDRESS_FIELD_NUMBER; hash = (53 * hash) + getRecipientChainAddress().hashCode(); } + if (hasSygnaTransferId()) { + hash = (37 * hash) + SYGNA_TRANSFER_ID_FIELD_NUMBER; + hash = (53 * hash) + getSygnaTransferId().hashCode(); + } + if (hasSygnaEncryptedOriginators()) { + hash = (37 * hash) + SYGNA_ENCRYPTED_ORIGINATORS_FIELD_NUMBER; + hash = (53 * hash) + getSygnaEncryptedOriginators().hashCode(); + } + if (hasSygnaApiKey()) { + hash = (37 * hash) + SYGNA_API_KEY_FIELD_NUMBER; + hash = (53 * hash) + getSygnaApiKey().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -2228,6 +2520,12 @@ public Builder clear() { bitField0_ = (bitField0_ & ~0x00000800); recipientChainAddress_ = ""; bitField0_ = (bitField0_ & ~0x00001000); + sygnaTransferId_ = ""; + bitField0_ = (bitField0_ & ~0x00002000); + sygnaEncryptedOriginators_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00004000); + sygnaApiKey_ = ""; + bitField0_ = (bitField0_ & ~0x00008000); return this; } @@ -2324,6 +2622,18 @@ public com.netki.bip75.protocol.Messages.InvoiceRequest buildPartial() { to_bitField0_ |= 0x00000100; } result.recipientChainAddress_ = recipientChainAddress_; + if (((from_bitField0_ & 0x00002000) != 0)) { + to_bitField0_ |= 0x00000200; + } + result.sygnaTransferId_ = sygnaTransferId_; + if (((from_bitField0_ & 0x00004000) != 0)) { + to_bitField0_ |= 0x00000400; + } + result.sygnaEncryptedOriginators_ = sygnaEncryptedOriginators_; + if (((from_bitField0_ & 0x00008000) != 0)) { + to_bitField0_ |= 0x00000800; + } + result.sygnaApiKey_ = sygnaApiKey_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -2498,6 +2808,19 @@ public Builder mergeFrom(com.netki.bip75.protocol.Messages.InvoiceRequest other) recipientChainAddress_ = other.recipientChainAddress_; onChanged(); } + if (other.hasSygnaTransferId()) { + bitField0_ |= 0x00002000; + sygnaTransferId_ = other.sygnaTransferId_; + onChanged(); + } + if (other.hasSygnaEncryptedOriginators()) { + setSygnaEncryptedOriginators(other.getSygnaEncryptedOriginators()); + } + if (other.hasSygnaApiKey()) { + bitField0_ |= 0x00008000; + sygnaApiKey_ = other.sygnaApiKey_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -2547,6 +2870,7 @@ public Builder mergeFrom( * optional uint64 amount = 1 [default = 0]; * @return Whether the amount field is set. */ + @java.lang.Override public boolean hasAmount() { return ((bitField0_ & 0x00000001) != 0); } @@ -2558,6 +2882,7 @@ public boolean hasAmount() { * optional uint64 amount = 1 [default = 0]; * @return The amount. */ + @java.lang.Override public long getAmount() { return amount_; } @@ -3974,6 +4299,7 @@ public Builder setSenderPkiTypeBytes( * optional bytes sender_pki_data = 9; * @return Whether the senderPkiData field is set. */ + @java.lang.Override public boolean hasSenderPkiData() { return ((bitField0_ & 0x00000100) != 0); } @@ -3985,6 +4311,7 @@ public boolean hasSenderPkiData() { * optional bytes sender_pki_data = 9; * @return The senderPkiData. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPkiData() { return senderPkiData_; } @@ -4030,6 +4357,7 @@ public Builder clearSenderPkiData() { * optional bytes sender_signature = 10; * @return Whether the senderSignature field is set. */ + @java.lang.Override public boolean hasSenderSignature() { return ((bitField0_ & 0x00000200) != 0); } @@ -4041,6 +4369,7 @@ public boolean hasSenderSignature() { * optional bytes sender_signature = 10; * @return The senderSignature. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderSignature() { return senderSignature_; } @@ -4086,6 +4415,7 @@ public Builder clearSenderSignature() { * optional bytes sender_ev_cert = 11; * @return Whether the senderEvCert field is set. */ + @java.lang.Override public boolean hasSenderEvCert() { return ((bitField0_ & 0x00000400) != 0); } @@ -4097,6 +4427,7 @@ public boolean hasSenderEvCert() { * optional bytes sender_ev_cert = 11; * @return The senderEvCert. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderEvCert() { return senderEvCert_; } @@ -4348,49 +4679,283 @@ public Builder setRecipientChainAddressBytes( onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + private java.lang.Object sygnaTransferId_ = ""; + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 14; + * @return Whether the sygnaTransferId field is set. + */ + public boolean hasSygnaTransferId() { + return ((bitField0_ & 0x00002000) != 0); } - - - // @@protoc_insertion_point(builder_scope:payments.InvoiceRequest) - } - - // @@protoc_insertion_point(class_scope:payments.InvoiceRequest) - private static final com.netki.bip75.protocol.Messages.InvoiceRequest DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.netki.bip75.protocol.Messages.InvoiceRequest(); - } - - public static com.netki.bip75.protocol.Messages.InvoiceRequest getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public InvoiceRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new InvoiceRequest(input, extensionRegistry); + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 14; + * @return The sygnaTransferId. + */ + public java.lang.String getSygnaTransferId() { + java.lang.Object ref = sygnaTransferId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaTransferId_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 14; + * @return The bytes for sygnaTransferId. + */ + public com.google.protobuf.ByteString + getSygnaTransferIdBytes() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaTransferId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 14; + * @param value The sygnaTransferId to set. + * @return This builder for chaining. + */ + public Builder setSygnaTransferId( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00002000; + sygnaTransferId_ = value; + onChanged(); + return this; + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 14; + * @return This builder for chaining. + */ + public Builder clearSygnaTransferId() { + bitField0_ = (bitField0_ & ~0x00002000); + sygnaTransferId_ = getDefaultInstance().getSygnaTransferId(); + onChanged(); + return this; + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 14; + * @param value The bytes for sygnaTransferId to set. + * @return This builder for chaining. + */ + public Builder setSygnaTransferIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00002000; + sygnaTransferId_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString sygnaEncryptedOriginators_ = com.google.protobuf.ByteString.EMPTY; + /** + * optional bytes sygna_encrypted_originators = 15; + * @return Whether the sygnaEncryptedOriginators field is set. + */ + @java.lang.Override + public boolean hasSygnaEncryptedOriginators() { + return ((bitField0_ & 0x00004000) != 0); + } + /** + * optional bytes sygna_encrypted_originators = 15; + * @return The sygnaEncryptedOriginators. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSygnaEncryptedOriginators() { + return sygnaEncryptedOriginators_; + } + /** + * optional bytes sygna_encrypted_originators = 15; + * @param value The sygnaEncryptedOriginators to set. + * @return This builder for chaining. + */ + public Builder setSygnaEncryptedOriginators(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00004000; + sygnaEncryptedOriginators_ = value; + onChanged(); + return this; + } + /** + * optional bytes sygna_encrypted_originators = 15; + * @return This builder for chaining. + */ + public Builder clearSygnaEncryptedOriginators() { + bitField0_ = (bitField0_ & ~0x00004000); + sygnaEncryptedOriginators_ = getDefaultInstance().getSygnaEncryptedOriginators(); + onChanged(); + return this; + } + + private java.lang.Object sygnaApiKey_ = ""; + /** + * optional string sygna_api_key = 16; + * @return Whether the sygnaApiKey field is set. + */ + public boolean hasSygnaApiKey() { + return ((bitField0_ & 0x00008000) != 0); + } + /** + * optional string sygna_api_key = 16; + * @return The sygnaApiKey. + */ + public java.lang.String getSygnaApiKey() { + java.lang.Object ref = sygnaApiKey_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaApiKey_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string sygna_api_key = 16; + * @return The bytes for sygnaApiKey. + */ + public com.google.protobuf.ByteString + getSygnaApiKeyBytes() { + java.lang.Object ref = sygnaApiKey_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaApiKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string sygna_api_key = 16; + * @param value The sygnaApiKey to set. + * @return This builder for chaining. + */ + public Builder setSygnaApiKey( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00008000; + sygnaApiKey_ = value; + onChanged(); + return this; + } + /** + * optional string sygna_api_key = 16; + * @return This builder for chaining. + */ + public Builder clearSygnaApiKey() { + bitField0_ = (bitField0_ & ~0x00008000); + sygnaApiKey_ = getDefaultInstance().getSygnaApiKey(); + onChanged(); + return this; + } + /** + * optional string sygna_api_key = 16; + * @param value The bytes for sygnaApiKey to set. + * @return This builder for chaining. + */ + public Builder setSygnaApiKeyBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00008000; + sygnaApiKey_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:payments.InvoiceRequest) + } + + // @@protoc_insertion_point(class_scope:payments.InvoiceRequest) + private static final com.netki.bip75.protocol.Messages.InvoiceRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.netki.bip75.protocol.Messages.InvoiceRequest(); + } + + public static com.netki.bip75.protocol.Messages.InvoiceRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public InvoiceRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new InvoiceRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { return PARSER; } @@ -4574,11 +5139,51 @@ com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOrBuilder * @return The senderSignature. */ com.google.protobuf.ByteString getSenderSignature(); + + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 8; + * @return Whether the sygnaTransferId field is set. + */ + boolean hasSygnaTransferId(); + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 8; + * @return The sygnaTransferId. + */ + java.lang.String getSygnaTransferId(); + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 8; + * @return The bytes for sygnaTransferId. + */ + com.google.protobuf.ByteString + getSygnaTransferIdBytes(); + + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return Whether the sygnaEncryptedBeneficiaries field is set. + */ + boolean hasSygnaEncryptedBeneficiaries(); + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return The sygnaEncryptedBeneficiaries. + */ + com.google.protobuf.ByteString getSygnaEncryptedBeneficiaries(); } /** * Protobuf type {@code payments.PaymentRequest} */ - public static final class PaymentRequest extends + public static final class PaymentRequest extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.PaymentRequest) PaymentRequestOrBuilder { @@ -4595,6 +5200,8 @@ private PaymentRequest() { senderPkiType_ = "none"; senderPkiData_ = com.google.protobuf.ByteString.EMPTY; senderSignature_ = com.google.protobuf.ByteString.EMPTY; + sygnaTransferId_ = ""; + sygnaEncryptedBeneficiaries_ = com.google.protobuf.ByteString.EMPTY; } @java.lang.Override @@ -4698,6 +5305,17 @@ private PaymentRequest( senderSignature_ = input.readBytes(); break; } + case 66: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000020; + sygnaTransferId_ = bs; + break; + } + case 74: { + bitField0_ |= 0x00000040; + sygnaEncryptedBeneficiaries_ = input.readBytes(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -4743,6 +5361,7 @@ private PaymentRequest( * optional uint32 payment_details_version = 1 [default = 1]; * @return Whether the paymentDetailsVersion field is set. */ + @java.lang.Override public boolean hasPaymentDetailsVersion() { return ((bitField0_ & 0x00000001) != 0); } @@ -4750,6 +5369,7 @@ public boolean hasPaymentDetailsVersion() { * optional uint32 payment_details_version = 1 [default = 1]; * @return The paymentDetailsVersion. */ + @java.lang.Override public int getPaymentDetailsVersion() { return paymentDetailsVersion_; } @@ -4764,6 +5384,7 @@ public int getPaymentDetailsVersion() { * required bytes serialized_payment_details = 2; * @return Whether the serializedPaymentDetails field is set. */ + @java.lang.Override public boolean hasSerializedPaymentDetails() { return ((bitField0_ & 0x00000002) != 0); } @@ -4775,6 +5396,7 @@ public boolean hasSerializedPaymentDetails() { * required bytes serialized_payment_details = 2; * @return The serializedPaymentDetails. */ + @java.lang.Override public com.google.protobuf.ByteString getSerializedPaymentDetails() { return serializedPaymentDetails_; } @@ -4788,6 +5410,7 @@ public com.google.protobuf.ByteString getSerializedPaymentDetails() { * * repeated .payments.Beneficiary beneficiaries = 3; */ + @java.lang.Override public java.util.List getBeneficiariesList() { return beneficiaries_; } @@ -4798,6 +5421,7 @@ public java.util.List getBenefici * * repeated .payments.Beneficiary beneficiaries = 3; */ + @java.lang.Override public java.util.List getBeneficiariesOrBuilderList() { return beneficiaries_; @@ -4809,6 +5433,7 @@ public java.util.List getBenefici * * repeated .payments.Beneficiary beneficiaries = 3; */ + @java.lang.Override public int getBeneficiariesCount() { return beneficiaries_.size(); } @@ -4819,6 +5444,7 @@ public int getBeneficiariesCount() { * * repeated .payments.Beneficiary beneficiaries = 3; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Beneficiary getBeneficiaries(int index) { return beneficiaries_.get(index); } @@ -4829,6 +5455,7 @@ public com.netki.bip75.protocol.Messages.Beneficiary getBeneficiaries(int index) * * repeated .payments.Beneficiary beneficiaries = 3; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOrBuilder( int index) { return beneficiaries_.get(index); @@ -4854,6 +5481,7 @@ public com.netki.bip75.protocol.Messages.AttestationType convert(java.lang.Integ * repeated .payments.AttestationType attestationsRequested = 4; * @return A list containing the attestationsRequested. */ + @java.lang.Override public java.util.List getAttestationsRequestedList() { return new com.google.protobuf.Internal.ListAdapter< java.lang.Integer, com.netki.bip75.protocol.Messages.AttestationType>(attestationsRequested_, attestationsRequested_converter_); @@ -4864,7 +5492,9 @@ public java.util.List getAtte * * * repeated .payments.AttestationType attestationsRequested = 4; + * @return The count of attestationsRequested. */ + @java.lang.Override public int getAttestationsRequestedCount() { return attestationsRequested_.size(); } @@ -4877,6 +5507,7 @@ public int getAttestationsRequestedCount() { * @param index The index of the element to return. * @return The attestationsRequested at the given index. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.AttestationType getAttestationsRequested(int index) { return attestationsRequested_converter_.convert(attestationsRequested_.get(index)); } @@ -4891,6 +5522,7 @@ public com.netki.bip75.protocol.Messages.AttestationType getAttestationsRequeste * required string sender_pki_type = 5 [default = "none"]; * @return Whether the senderPkiType field is set. */ + @java.lang.Override public boolean hasSenderPkiType() { return ((bitField0_ & 0x00000004) != 0); } @@ -4902,6 +5534,7 @@ public boolean hasSenderPkiType() { * required string sender_pki_type = 5 [default = "none"]; * @return The senderPkiType. */ + @java.lang.Override public java.lang.String getSenderPkiType() { java.lang.Object ref = senderPkiType_; if (ref instanceof java.lang.String) { @@ -4924,6 +5557,7 @@ public java.lang.String getSenderPkiType() { * required string sender_pki_type = 5 [default = "none"]; * @return The bytes for senderPkiType. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPkiTypeBytes() { java.lang.Object ref = senderPkiType_; @@ -4948,6 +5582,7 @@ public java.lang.String getSenderPkiType() { * optional bytes sender_pki_data = 6; * @return Whether the senderPkiData field is set. */ + @java.lang.Override public boolean hasSenderPkiData() { return ((bitField0_ & 0x00000008) != 0); } @@ -4959,6 +5594,7 @@ public boolean hasSenderPkiData() { * optional bytes sender_pki_data = 6; * @return The senderPkiData. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPkiData() { return senderPkiData_; } @@ -4973,6 +5609,7 @@ public com.google.protobuf.ByteString getSenderPkiData() { * optional bytes sender_signature = 7; * @return Whether the senderSignature field is set. */ + @java.lang.Override public boolean hasSenderSignature() { return ((bitField0_ & 0x00000010) != 0); } @@ -4984,10 +5621,90 @@ public boolean hasSenderSignature() { * optional bytes sender_signature = 7; * @return The senderSignature. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderSignature() { return senderSignature_; } + public static final int SYGNA_TRANSFER_ID_FIELD_NUMBER = 8; + private volatile java.lang.Object sygnaTransferId_; + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 8; + * @return Whether the sygnaTransferId field is set. + */ + @java.lang.Override + public boolean hasSygnaTransferId() { + return ((bitField0_ & 0x00000020) != 0); + } + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 8; + * @return The sygnaTransferId. + */ + @java.lang.Override + public java.lang.String getSygnaTransferId() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaTransferId_ = s; + } + return s; + } + } + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 8; + * @return The bytes for sygnaTransferId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSygnaTransferIdBytes() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaTransferId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SYGNA_ENCRYPTED_BENEFICIARIES_FIELD_NUMBER = 9; + private com.google.protobuf.ByteString sygnaEncryptedBeneficiaries_; + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return Whether the sygnaEncryptedBeneficiaries field is set. + */ + @java.lang.Override + public boolean hasSygnaEncryptedBeneficiaries() { + return ((bitField0_ & 0x00000040) != 0); + } + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return The sygnaEncryptedBeneficiaries. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSygnaEncryptedBeneficiaries() { + return sygnaEncryptedBeneficiaries_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -5037,6 +5754,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (((bitField0_ & 0x00000010) != 0)) { output.writeBytes(7, senderSignature_); } + if (((bitField0_ & 0x00000020) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 8, sygnaTransferId_); + } + if (((bitField0_ & 0x00000040) != 0)) { + output.writeBytes(9, sygnaEncryptedBeneficiaries_); + } unknownFields.writeTo(output); } @@ -5078,6 +5801,13 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeBytesSize(7, senderSignature_); } + if (((bitField0_ & 0x00000020) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, sygnaTransferId_); + } + if (((bitField0_ & 0x00000040) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(9, sygnaEncryptedBeneficiaries_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -5121,6 +5851,16 @@ public boolean equals(final java.lang.Object obj) { if (!getSenderSignature() .equals(other.getSenderSignature())) return false; } + if (hasSygnaTransferId() != other.hasSygnaTransferId()) return false; + if (hasSygnaTransferId()) { + if (!getSygnaTransferId() + .equals(other.getSygnaTransferId())) return false; + } + if (hasSygnaEncryptedBeneficiaries() != other.hasSygnaEncryptedBeneficiaries()) return false; + if (hasSygnaEncryptedBeneficiaries()) { + if (!getSygnaEncryptedBeneficiaries() + .equals(other.getSygnaEncryptedBeneficiaries())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -5160,6 +5900,14 @@ public int hashCode() { hash = (37 * hash) + SENDER_SIGNATURE_FIELD_NUMBER; hash = (53 * hash) + getSenderSignature().hashCode(); } + if (hasSygnaTransferId()) { + hash = (37 * hash) + SYGNA_TRANSFER_ID_FIELD_NUMBER; + hash = (53 * hash) + getSygnaTransferId().hashCode(); + } + if (hasSygnaEncryptedBeneficiaries()) { + hash = (37 * hash) + SYGNA_ENCRYPTED_BENEFICIARIES_FIELD_NUMBER; + hash = (53 * hash) + getSygnaEncryptedBeneficiaries().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -5312,6 +6060,10 @@ public Builder clear() { bitField0_ = (bitField0_ & ~0x00000020); senderSignature_ = com.google.protobuf.ByteString.EMPTY; bitField0_ = (bitField0_ & ~0x00000040); + sygnaTransferId_ = ""; + bitField0_ = (bitField0_ & ~0x00000080); + sygnaEncryptedBeneficiaries_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000100); return this; } @@ -5374,6 +6126,14 @@ public com.netki.bip75.protocol.Messages.PaymentRequest buildPartial() { to_bitField0_ |= 0x00000010; } result.senderSignature_ = senderSignature_; + if (((from_bitField0_ & 0x00000080) != 0)) { + to_bitField0_ |= 0x00000020; + } + result.sygnaTransferId_ = sygnaTransferId_; + if (((from_bitField0_ & 0x00000100) != 0)) { + to_bitField0_ |= 0x00000040; + } + result.sygnaEncryptedBeneficiaries_ = sygnaEncryptedBeneficiaries_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -5476,6 +6236,14 @@ public Builder mergeFrom(com.netki.bip75.protocol.Messages.PaymentRequest other) if (other.hasSenderSignature()) { setSenderSignature(other.getSenderSignature()); } + if (other.hasSygnaTransferId()) { + bitField0_ |= 0x00000080; + sygnaTransferId_ = other.sygnaTransferId_; + onChanged(); + } + if (other.hasSygnaEncryptedBeneficiaries()) { + setSygnaEncryptedBeneficiaries(other.getSygnaEncryptedBeneficiaries()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -5522,6 +6290,7 @@ public Builder mergeFrom( * optional uint32 payment_details_version = 1 [default = 1]; * @return Whether the paymentDetailsVersion field is set. */ + @java.lang.Override public boolean hasPaymentDetailsVersion() { return ((bitField0_ & 0x00000001) != 0); } @@ -5529,6 +6298,7 @@ public boolean hasPaymentDetailsVersion() { * optional uint32 payment_details_version = 1 [default = 1]; * @return The paymentDetailsVersion. */ + @java.lang.Override public int getPaymentDetailsVersion() { return paymentDetailsVersion_; } @@ -5563,6 +6333,7 @@ public Builder clearPaymentDetailsVersion() { * required bytes serialized_payment_details = 2; * @return Whether the serializedPaymentDetails field is set. */ + @java.lang.Override public boolean hasSerializedPaymentDetails() { return ((bitField0_ & 0x00000002) != 0); } @@ -5574,6 +6345,7 @@ public boolean hasSerializedPaymentDetails() { * required bytes serialized_payment_details = 2; * @return The serializedPaymentDetails. */ + @java.lang.Override public com.google.protobuf.ByteString getSerializedPaymentDetails() { return serializedPaymentDetails_; } @@ -6153,6 +6925,7 @@ public Builder setSenderPkiTypeBytes( * optional bytes sender_pki_data = 6; * @return Whether the senderPkiData field is set. */ + @java.lang.Override public boolean hasSenderPkiData() { return ((bitField0_ & 0x00000020) != 0); } @@ -6164,6 +6937,7 @@ public boolean hasSenderPkiData() { * optional bytes sender_pki_data = 6; * @return The senderPkiData. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPkiData() { return senderPkiData_; } @@ -6209,6 +6983,7 @@ public Builder clearSenderPkiData() { * optional bytes sender_signature = 7; * @return Whether the senderSignature field is set. */ + @java.lang.Override public boolean hasSenderSignature() { return ((bitField0_ & 0x00000040) != 0); } @@ -6220,6 +6995,7 @@ public boolean hasSenderSignature() { * optional bytes sender_signature = 7; * @return The senderSignature. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderSignature() { return senderSignature_; } @@ -6255,6 +7031,156 @@ public Builder clearSenderSignature() { onChanged(); return this; } + + private java.lang.Object sygnaTransferId_ = ""; + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 8; + * @return Whether the sygnaTransferId field is set. + */ + public boolean hasSygnaTransferId() { + return ((bitField0_ & 0x00000080) != 0); + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 8; + * @return The sygnaTransferId. + */ + public java.lang.String getSygnaTransferId() { + java.lang.Object ref = sygnaTransferId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaTransferId_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 8; + * @return The bytes for sygnaTransferId. + */ + public com.google.protobuf.ByteString + getSygnaTransferIdBytes() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaTransferId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 8; + * @param value The sygnaTransferId to set. + * @return This builder for chaining. + */ + public Builder setSygnaTransferId( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + sygnaTransferId_ = value; + onChanged(); + return this; + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 8; + * @return This builder for chaining. + */ + public Builder clearSygnaTransferId() { + bitField0_ = (bitField0_ & ~0x00000080); + sygnaTransferId_ = getDefaultInstance().getSygnaTransferId(); + onChanged(); + return this; + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 8; + * @param value The bytes for sygnaTransferId to set. + * @return This builder for chaining. + */ + public Builder setSygnaTransferIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + sygnaTransferId_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString sygnaEncryptedBeneficiaries_ = com.google.protobuf.ByteString.EMPTY; + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return Whether the sygnaEncryptedBeneficiaries field is set. + */ + @java.lang.Override + public boolean hasSygnaEncryptedBeneficiaries() { + return ((bitField0_ & 0x00000100) != 0); + } + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return The sygnaEncryptedBeneficiaries. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSygnaEncryptedBeneficiaries() { + return sygnaEncryptedBeneficiaries_; + } + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @param value The sygnaEncryptedBeneficiaries to set. + * @return This builder for chaining. + */ + public Builder setSygnaEncryptedBeneficiaries(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000100; + sygnaEncryptedBeneficiaries_ = value; + onChanged(); + return this; + } + /** + * optional bytes sygna_encrypted_beneficiaries = 9; + * @return This builder for chaining. + */ + public Builder clearSygnaEncryptedBeneficiaries() { + bitField0_ = (bitField0_ & ~0x00000100); + sygnaEncryptedBeneficiaries_ = getDefaultInstance().getSygnaEncryptedBeneficiaries(); + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -6520,11 +7446,40 @@ com.netki.bip75.protocol.Messages.OriginatorOrBuilder getOriginatorsOrBuilder( */ com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOrBuilder( int index); + + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 7; + * @return Whether the sygnaTransferId field is set. + */ + boolean hasSygnaTransferId(); + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 7; + * @return The sygnaTransferId. + */ + java.lang.String getSygnaTransferId(); + /** + *
+     * sygna specific fields
+     * 
+ * + * optional string sygna_transfer_id = 7; + * @return The bytes for sygnaTransferId. + */ + com.google.protobuf.ByteString + getSygnaTransferIdBytes(); } /** * Protobuf type {@code payments.Payment} */ - public static final class Payment extends + public static final class Payment extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.Payment) PaymentOrBuilder { @@ -6540,6 +7495,7 @@ private Payment() { memo_ = ""; originators_ = java.util.Collections.emptyList(); beneficiaries_ = java.util.Collections.emptyList(); + sygnaTransferId_ = ""; } @java.lang.Override @@ -6619,6 +7575,12 @@ private Payment( input.readMessage(com.netki.bip75.protocol.Messages.Beneficiary.PARSER, extensionRegistry)); break; } + case 58: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000004; + sygnaTransferId_ = bs; + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -6674,6 +7636,7 @@ private Payment( * optional bytes merchant_data = 1; * @return Whether the merchantData field is set. */ + @java.lang.Override public boolean hasMerchantData() { return ((bitField0_ & 0x00000001) != 0); } @@ -6685,6 +7648,7 @@ public boolean hasMerchantData() { * optional bytes merchant_data = 1; * @return The merchantData. */ + @java.lang.Override public com.google.protobuf.ByteString getMerchantData() { return merchantData_; } @@ -6699,6 +7663,7 @@ public com.google.protobuf.ByteString getMerchantData() { * repeated bytes transactions = 2; * @return A list containing the transactions. */ + @java.lang.Override public java.util.List getTransactionsList() { return transactions_; @@ -6736,6 +7701,7 @@ public com.google.protobuf.ByteString getTransactions(int index) { * * repeated .payments.Output refund_to = 3; */ + @java.lang.Override public java.util.List getRefundToList() { return refundTo_; } @@ -6746,6 +7712,7 @@ public java.util.List getRefundToList( * * repeated .payments.Output refund_to = 3; */ + @java.lang.Override public java.util.List getRefundToOrBuilderList() { return refundTo_; @@ -6757,6 +7724,7 @@ public java.util.List getRefundToList( * * repeated .payments.Output refund_to = 3; */ + @java.lang.Override public int getRefundToCount() { return refundTo_.size(); } @@ -6767,6 +7735,7 @@ public int getRefundToCount() { * * repeated .payments.Output refund_to = 3; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Output getRefundTo(int index) { return refundTo_.get(index); } @@ -6777,6 +7746,7 @@ public com.netki.bip75.protocol.Messages.Output getRefundTo(int index) { * * repeated .payments.Output refund_to = 3; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.OutputOrBuilder getRefundToOrBuilder( int index) { return refundTo_.get(index); @@ -6792,6 +7762,7 @@ public com.netki.bip75.protocol.Messages.OutputOrBuilder getRefundToOrBuilder( * optional string memo = 4; * @return Whether the memo field is set. */ + @java.lang.Override public boolean hasMemo() { return ((bitField0_ & 0x00000002) != 0); } @@ -6803,6 +7774,7 @@ public boolean hasMemo() { * optional string memo = 4; * @return The memo. */ + @java.lang.Override public java.lang.String getMemo() { java.lang.Object ref = memo_; if (ref instanceof java.lang.String) { @@ -6825,6 +7797,7 @@ public java.lang.String getMemo() { * optional string memo = 4; * @return The bytes for memo. */ + @java.lang.Override public com.google.protobuf.ByteString getMemoBytes() { java.lang.Object ref = memo_; @@ -6848,6 +7821,7 @@ public java.lang.String getMemo() { * * repeated .payments.Originator originators = 5; */ + @java.lang.Override public java.util.List getOriginatorsList() { return originators_; } @@ -6858,6 +7832,7 @@ public java.util.List getOriginato * * repeated .payments.Originator originators = 5; */ + @java.lang.Override public java.util.List getOriginatorsOrBuilderList() { return originators_; @@ -6869,6 +7844,7 @@ public java.util.List getOriginato * * repeated .payments.Originator originators = 5; */ + @java.lang.Override public int getOriginatorsCount() { return originators_.size(); } @@ -6879,6 +7855,7 @@ public int getOriginatorsCount() { * * repeated .payments.Originator originators = 5; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Originator getOriginators(int index) { return originators_.get(index); } @@ -6889,6 +7866,7 @@ public com.netki.bip75.protocol.Messages.Originator getOriginators(int index) { * * repeated .payments.Originator originators = 5; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.OriginatorOrBuilder getOriginatorsOrBuilder( int index) { return originators_.get(index); @@ -6903,6 +7881,7 @@ public com.netki.bip75.protocol.Messages.OriginatorOrBuilder getOriginatorsOrBui * * repeated .payments.Beneficiary beneficiaries = 6; */ + @java.lang.Override public java.util.List getBeneficiariesList() { return beneficiaries_; } @@ -6913,40 +7892,104 @@ public java.util.List getBenefici * * repeated .payments.Beneficiary beneficiaries = 6; */ + @java.lang.Override public java.util.List getBeneficiariesOrBuilderList() { return beneficiaries_; } /** *
-     * Beneficiaries of the InvoiceRequest
+     * Beneficiaries of the InvoiceRequest
+     * 
+ * + * repeated .payments.Beneficiary beneficiaries = 6; + */ + @java.lang.Override + public int getBeneficiariesCount() { + return beneficiaries_.size(); + } + /** + *
+     * Beneficiaries of the InvoiceRequest
+     * 
+ * + * repeated .payments.Beneficiary beneficiaries = 6; + */ + @java.lang.Override + public com.netki.bip75.protocol.Messages.Beneficiary getBeneficiaries(int index) { + return beneficiaries_.get(index); + } + /** + *
+     * Beneficiaries of the InvoiceRequest
+     * 
+ * + * repeated .payments.Beneficiary beneficiaries = 6; + */ + @java.lang.Override + public com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOrBuilder( + int index) { + return beneficiaries_.get(index); + } + + public static final int SYGNA_TRANSFER_ID_FIELD_NUMBER = 7; + private volatile java.lang.Object sygnaTransferId_; + /** + *
+     * sygna specific fields
      * 
* - * repeated .payments.Beneficiary beneficiaries = 6; + * optional string sygna_transfer_id = 7; + * @return Whether the sygnaTransferId field is set. */ - public int getBeneficiariesCount() { - return beneficiaries_.size(); + @java.lang.Override + public boolean hasSygnaTransferId() { + return ((bitField0_ & 0x00000004) != 0); } /** *
-     * Beneficiaries of the InvoiceRequest
+     * sygna specific fields
      * 
* - * repeated .payments.Beneficiary beneficiaries = 6; + * optional string sygna_transfer_id = 7; + * @return The sygnaTransferId. */ - public com.netki.bip75.protocol.Messages.Beneficiary getBeneficiaries(int index) { - return beneficiaries_.get(index); + @java.lang.Override + public java.lang.String getSygnaTransferId() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaTransferId_ = s; + } + return s; + } } /** *
-     * Beneficiaries of the InvoiceRequest
+     * sygna specific fields
      * 
* - * repeated .payments.Beneficiary beneficiaries = 6; + * optional string sygna_transfer_id = 7; + * @return The bytes for sygnaTransferId. */ - public com.netki.bip75.protocol.Messages.BeneficiaryOrBuilder getBeneficiariesOrBuilder( - int index) { - return beneficiaries_.get(index); + @java.lang.Override + public com.google.protobuf.ByteString + getSygnaTransferIdBytes() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaTransferId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } } private byte memoizedIsInitialized = -1; @@ -6993,6 +8036,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) for (int i = 0; i < beneficiaries_.size(); i++) { output.writeMessage(6, beneficiaries_.get(i)); } + if (((bitField0_ & 0x00000004) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 7, sygnaTransferId_); + } unknownFields.writeTo(output); } @@ -7030,6 +8076,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(6, beneficiaries_.get(i)); } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, sygnaTransferId_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -7063,6 +8112,11 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getOriginatorsList())) return false; if (!getBeneficiariesList() .equals(other.getBeneficiariesList())) return false; + if (hasSygnaTransferId() != other.hasSygnaTransferId()) return false; + if (hasSygnaTransferId()) { + if (!getSygnaTransferId() + .equals(other.getSygnaTransferId())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -7098,6 +8152,10 @@ public int hashCode() { hash = (37 * hash) + BENEFICIARIES_FIELD_NUMBER; hash = (53 * hash) + getBeneficiariesList().hashCode(); } + if (hasSygnaTransferId()) { + hash = (37 * hash) + SYGNA_TRANSFER_ID_FIELD_NUMBER; + hash = (53 * hash) + getSygnaTransferId().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -7258,6 +8316,8 @@ public Builder clear() { } else { beneficiariesBuilder_.clear(); } + sygnaTransferId_ = ""; + bitField0_ = (bitField0_ & ~0x00000040); return this; } @@ -7326,6 +8386,10 @@ public com.netki.bip75.protocol.Messages.Payment buildPartial() { } else { result.beneficiaries_ = beneficiariesBuilder_.build(); } + if (((from_bitField0_ & 0x00000040) != 0)) { + to_bitField0_ |= 0x00000004; + } + result.sygnaTransferId_ = sygnaTransferId_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -7471,6 +8535,11 @@ public Builder mergeFrom(com.netki.bip75.protocol.Messages.Payment other) { } } } + if (other.hasSygnaTransferId()) { + bitField0_ |= 0x00000040; + sygnaTransferId_ = other.sygnaTransferId_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -7520,6 +8589,7 @@ public Builder mergeFrom( * optional bytes merchant_data = 1; * @return Whether the merchantData field is set. */ + @java.lang.Override public boolean hasMerchantData() { return ((bitField0_ & 0x00000001) != 0); } @@ -7531,6 +8601,7 @@ public boolean hasMerchantData() { * optional bytes merchant_data = 1; * @return The merchantData. */ + @java.lang.Override public com.google.protobuf.ByteString getMerchantData() { return merchantData_; } @@ -8723,6 +9794,114 @@ public com.netki.bip75.protocol.Messages.Beneficiary.Builder addBeneficiariesBui } return beneficiariesBuilder_; } + + private java.lang.Object sygnaTransferId_ = ""; + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 7; + * @return Whether the sygnaTransferId field is set. + */ + public boolean hasSygnaTransferId() { + return ((bitField0_ & 0x00000040) != 0); + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 7; + * @return The sygnaTransferId. + */ + public java.lang.String getSygnaTransferId() { + java.lang.Object ref = sygnaTransferId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + sygnaTransferId_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 7; + * @return The bytes for sygnaTransferId. + */ + public com.google.protobuf.ByteString + getSygnaTransferIdBytes() { + java.lang.Object ref = sygnaTransferId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + sygnaTransferId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 7; + * @param value The sygnaTransferId to set. + * @return This builder for chaining. + */ + public Builder setSygnaTransferId( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + sygnaTransferId_ = value; + onChanged(); + return this; + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 7; + * @return This builder for chaining. + */ + public Builder clearSygnaTransferId() { + bitField0_ = (bitField0_ & ~0x00000040); + sygnaTransferId_ = getDefaultInstance().getSygnaTransferId(); + onChanged(); + return this; + } + /** + *
+       * sygna specific fields
+       * 
+ * + * optional string sygna_transfer_id = 7; + * @param value The bytes for sygnaTransferId to set. + * @return This builder for chaining. + */ + public Builder setSygnaTransferIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + sygnaTransferId_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -8839,7 +10018,7 @@ public interface PaymentACKOrBuilder extends /** * Protobuf type {@code payments.PaymentACK} */ - public static final class PaymentACK extends + public static final class PaymentACK extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.PaymentACK) PaymentACKOrBuilder { @@ -8945,6 +10124,7 @@ private PaymentACK( * required .payments.Payment payment = 1; * @return Whether the payment field is set. */ + @java.lang.Override public boolean hasPayment() { return ((bitField0_ & 0x00000001) != 0); } @@ -8956,6 +10136,7 @@ public boolean hasPayment() { * required .payments.Payment payment = 1; * @return The payment. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Payment getPayment() { return payment_ == null ? com.netki.bip75.protocol.Messages.Payment.getDefaultInstance() : payment_; } @@ -8966,6 +10147,7 @@ public com.netki.bip75.protocol.Messages.Payment getPayment() { * * required .payments.Payment payment = 1; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.PaymentOrBuilder getPaymentOrBuilder() { return payment_ == null ? com.netki.bip75.protocol.Messages.Payment.getDefaultInstance() : payment_; } @@ -8980,6 +10162,7 @@ public com.netki.bip75.protocol.Messages.PaymentOrBuilder getPaymentOrBuilder() * optional string memo = 2; * @return Whether the memo field is set. */ + @java.lang.Override public boolean hasMemo() { return ((bitField0_ & 0x00000002) != 0); } @@ -8991,6 +10174,7 @@ public boolean hasMemo() { * optional string memo = 2; * @return The memo. */ + @java.lang.Override public java.lang.String getMemo() { java.lang.Object ref = memo_; if (ref instanceof java.lang.String) { @@ -9013,6 +10197,7 @@ public java.lang.String getMemo() { * optional string memo = 2; * @return The bytes for memo. */ + @java.lang.Override public com.google.protobuf.ByteString getMemoBytes() { java.lang.Object ref = memo_; @@ -9776,7 +10961,7 @@ com.netki.bip75.protocol.Messages.AttestationOrBuilder getAttestationsOrBuilder( /** * Protobuf type {@code payments.Beneficiary} */ - public static final class Beneficiary extends + public static final class Beneficiary extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.Beneficiary) BeneficiaryOrBuilder { @@ -9881,6 +11066,7 @@ private Beneficiary( * required bool primary_for_transaction = 1 [default = true]; * @return Whether the primaryForTransaction field is set. */ + @java.lang.Override public boolean hasPrimaryForTransaction() { return ((bitField0_ & 0x00000001) != 0); } @@ -9892,6 +11078,7 @@ public boolean hasPrimaryForTransaction() { * required bool primary_for_transaction = 1 [default = true]; * @return The primaryForTransaction. */ + @java.lang.Override public boolean getPrimaryForTransaction() { return primaryForTransaction_; } @@ -9905,6 +11092,7 @@ public boolean getPrimaryForTransaction() { * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public java.util.List getAttestationsList() { return attestations_; } @@ -9915,6 +11103,7 @@ public java.util.List getAttestat * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public java.util.List getAttestationsOrBuilderList() { return attestations_; @@ -9926,6 +11115,7 @@ public java.util.List getAttestat * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public int getAttestationsCount() { return attestations_.size(); } @@ -9936,6 +11126,7 @@ public int getAttestationsCount() { * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Attestation getAttestations(int index) { return attestations_.get(index); } @@ -9946,6 +11137,7 @@ public com.netki.bip75.protocol.Messages.Attestation getAttestations(int index) * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.AttestationOrBuilder getAttestationsOrBuilder( int index) { return attestations_.get(index); @@ -10337,6 +11529,7 @@ public Builder mergeFrom( * required bool primary_for_transaction = 1 [default = true]; * @return Whether the primaryForTransaction field is set. */ + @java.lang.Override public boolean hasPrimaryForTransaction() { return ((bitField0_ & 0x00000001) != 0); } @@ -10348,6 +11541,7 @@ public boolean hasPrimaryForTransaction() { * required bool primary_for_transaction = 1 [default = true]; * @return The primaryForTransaction. */ + @java.lang.Override public boolean getPrimaryForTransaction() { return primaryForTransaction_; } @@ -10815,7 +12009,7 @@ com.netki.bip75.protocol.Messages.AttestationOrBuilder getAttestationsOrBuilder( /** * Protobuf type {@code payments.Originator} */ - public static final class Originator extends + public static final class Originator extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.Originator) OriginatorOrBuilder { @@ -10920,6 +12114,7 @@ private Originator( * required bool primary_for_transaction = 1 [default = true]; * @return Whether the primaryForTransaction field is set. */ + @java.lang.Override public boolean hasPrimaryForTransaction() { return ((bitField0_ & 0x00000001) != 0); } @@ -10931,6 +12126,7 @@ public boolean hasPrimaryForTransaction() { * required bool primary_for_transaction = 1 [default = true]; * @return The primaryForTransaction. */ + @java.lang.Override public boolean getPrimaryForTransaction() { return primaryForTransaction_; } @@ -10944,6 +12140,7 @@ public boolean getPrimaryForTransaction() { * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public java.util.List getAttestationsList() { return attestations_; } @@ -10954,6 +12151,7 @@ public java.util.List getAttestat * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public java.util.List getAttestationsOrBuilderList() { return attestations_; @@ -10965,6 +12163,7 @@ public java.util.List getAttestat * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public int getAttestationsCount() { return attestations_.size(); } @@ -10975,6 +12174,7 @@ public int getAttestationsCount() { * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Attestation getAttestations(int index) { return attestations_.get(index); } @@ -10985,6 +12185,7 @@ public com.netki.bip75.protocol.Messages.Attestation getAttestations(int index) * * repeated .payments.Attestation attestations = 2; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.AttestationOrBuilder getAttestationsOrBuilder( int index) { return attestations_.get(index); @@ -11376,6 +12577,7 @@ public Builder mergeFrom( * required bool primary_for_transaction = 1 [default = true]; * @return Whether the primaryForTransaction field is set. */ + @java.lang.Override public boolean hasPrimaryForTransaction() { return ((bitField0_ & 0x00000001) != 0); } @@ -11387,6 +12589,7 @@ public boolean hasPrimaryForTransaction() { * required bool primary_for_transaction = 1 [default = true]; * @return The primaryForTransaction. */ + @java.lang.Override public boolean getPrimaryForTransaction() { return primaryForTransaction_; } @@ -11877,7 +13080,7 @@ public interface AttestationOrBuilder extends /** * Protobuf type {@code payments.Attestation} */ - public static final class Attestation extends + public static final class Attestation extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.Attestation) AttestationOrBuilder { @@ -11995,7 +13198,7 @@ private Attestation( * optional .payments.AttestationType attestation = 1; * @return Whether the attestation field is set. */ - public boolean hasAttestation() { + @java.lang.Override public boolean hasAttestation() { return ((bitField0_ & 0x00000001) != 0); } /** @@ -12006,7 +13209,7 @@ public boolean hasAttestation() { * optional .payments.AttestationType attestation = 1; * @return The attestation. */ - public com.netki.bip75.protocol.Messages.AttestationType getAttestation() { + @java.lang.Override public com.netki.bip75.protocol.Messages.AttestationType getAttestation() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.AttestationType result = com.netki.bip75.protocol.Messages.AttestationType.valueOf(attestation_); return result == null ? com.netki.bip75.protocol.Messages.AttestationType.LEGAL_PERSON_PRIMARY_NAME : result; @@ -12022,6 +13225,7 @@ public com.netki.bip75.protocol.Messages.AttestationType getAttestation() { * optional string pki_type = 2 [default = "none"]; * @return Whether the pkiType field is set. */ + @java.lang.Override public boolean hasPkiType() { return ((bitField0_ & 0x00000002) != 0); } @@ -12033,6 +13237,7 @@ public boolean hasPkiType() { * optional string pki_type = 2 [default = "none"]; * @return The pkiType. */ + @java.lang.Override public java.lang.String getPkiType() { java.lang.Object ref = pkiType_; if (ref instanceof java.lang.String) { @@ -12055,6 +13260,7 @@ public java.lang.String getPkiType() { * optional string pki_type = 2 [default = "none"]; * @return The bytes for pkiType. */ + @java.lang.Override public com.google.protobuf.ByteString getPkiTypeBytes() { java.lang.Object ref = pkiType_; @@ -12079,6 +13285,7 @@ public java.lang.String getPkiType() { * optional bytes pki_data = 3; * @return Whether the pkiData field is set. */ + @java.lang.Override public boolean hasPkiData() { return ((bitField0_ & 0x00000004) != 0); } @@ -12090,6 +13297,7 @@ public boolean hasPkiData() { * optional bytes pki_data = 3; * @return The pkiData. */ + @java.lang.Override public com.google.protobuf.ByteString getPkiData() { return pkiData_; } @@ -12104,6 +13312,7 @@ public com.google.protobuf.ByteString getPkiData() { * optional bytes signature = 4; * @return Whether the signature field is set. */ + @java.lang.Override public boolean hasSignature() { return ((bitField0_ & 0x00000008) != 0); } @@ -12115,6 +13324,7 @@ public boolean hasSignature() { * optional bytes signature = 4; * @return The signature. */ + @java.lang.Override public com.google.protobuf.ByteString getSignature() { return signature_; } @@ -12517,7 +13727,7 @@ public Builder mergeFrom( * optional .payments.AttestationType attestation = 1; * @return Whether the attestation field is set. */ - public boolean hasAttestation() { + @java.lang.Override public boolean hasAttestation() { return ((bitField0_ & 0x00000001) != 0); } /** @@ -12528,6 +13738,7 @@ public boolean hasAttestation() { * optional .payments.AttestationType attestation = 1; * @return The attestation. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.AttestationType getAttestation() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.AttestationType result = com.netki.bip75.protocol.Messages.AttestationType.valueOf(attestation_); @@ -12683,6 +13894,7 @@ public Builder setPkiTypeBytes( * optional bytes pki_data = 3; * @return Whether the pkiData field is set. */ + @java.lang.Override public boolean hasPkiData() { return ((bitField0_ & 0x00000004) != 0); } @@ -12694,6 +13906,7 @@ public boolean hasPkiData() { * optional bytes pki_data = 3; * @return The pkiData. */ + @java.lang.Override public com.google.protobuf.ByteString getPkiData() { return pkiData_; } @@ -12739,6 +13952,7 @@ public Builder clearPkiData() { * optional bytes signature = 4; * @return Whether the signature field is set. */ + @java.lang.Override public boolean hasSignature() { return ((bitField0_ & 0x00000008) != 0); } @@ -12750,6 +13964,7 @@ public boolean hasSignature() { * optional bytes signature = 4; * @return The signature. */ + @java.lang.Override public com.google.protobuf.ByteString getSignature() { return signature_; } @@ -13033,7 +14248,7 @@ com.netki.bip75.protocol.Messages.OutputOrBuilder getBeneficiariesAddressesOrBui /** * Protobuf type {@code payments.PaymentDetails} */ - public static final class PaymentDetails extends + public static final class PaymentDetails extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.PaymentDetails) PaymentDetailsOrBuilder { @@ -13169,6 +14384,7 @@ private PaymentDetails( * optional string network = 1 [default = "main"]; * @return Whether the network field is set. */ + @java.lang.Override public boolean hasNetwork() { return ((bitField0_ & 0x00000001) != 0); } @@ -13180,6 +14396,7 @@ public boolean hasNetwork() { * optional string network = 1 [default = "main"]; * @return The network. */ + @java.lang.Override public java.lang.String getNetwork() { java.lang.Object ref = network_; if (ref instanceof java.lang.String) { @@ -13202,6 +14419,7 @@ public java.lang.String getNetwork() { * optional string network = 1 [default = "main"]; * @return The bytes for network. */ + @java.lang.Override public com.google.protobuf.ByteString getNetworkBytes() { java.lang.Object ref = network_; @@ -13225,6 +14443,7 @@ public java.lang.String getNetwork() { * * repeated .payments.Output beneficiariesAddresses = 2; */ + @java.lang.Override public java.util.List getBeneficiariesAddressesList() { return beneficiariesAddresses_; } @@ -13235,6 +14454,7 @@ public java.util.List getBeneficiaries * * repeated .payments.Output beneficiariesAddresses = 2; */ + @java.lang.Override public java.util.List getBeneficiariesAddressesOrBuilderList() { return beneficiariesAddresses_; @@ -13246,6 +14466,7 @@ public java.util.List getBeneficiaries * * repeated .payments.Output beneficiariesAddresses = 2; */ + @java.lang.Override public int getBeneficiariesAddressesCount() { return beneficiariesAddresses_.size(); } @@ -13256,6 +14477,7 @@ public int getBeneficiariesAddressesCount() { * * repeated .payments.Output beneficiariesAddresses = 2; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.Output getBeneficiariesAddresses(int index) { return beneficiariesAddresses_.get(index); } @@ -13266,6 +14488,7 @@ public com.netki.bip75.protocol.Messages.Output getBeneficiariesAddresses(int in * * repeated .payments.Output beneficiariesAddresses = 2; */ + @java.lang.Override public com.netki.bip75.protocol.Messages.OutputOrBuilder getBeneficiariesAddressesOrBuilder( int index) { return beneficiariesAddresses_.get(index); @@ -13281,6 +14504,7 @@ public com.netki.bip75.protocol.Messages.OutputOrBuilder getBeneficiariesAddress * required uint64 time = 3; * @return Whether the time field is set. */ + @java.lang.Override public boolean hasTime() { return ((bitField0_ & 0x00000002) != 0); } @@ -13292,6 +14516,7 @@ public boolean hasTime() { * required uint64 time = 3; * @return The time. */ + @java.lang.Override public long getTime() { return time_; } @@ -13306,6 +14531,7 @@ public long getTime() { * optional uint64 expires = 4; * @return Whether the expires field is set. */ + @java.lang.Override public boolean hasExpires() { return ((bitField0_ & 0x00000004) != 0); } @@ -13317,6 +14543,7 @@ public boolean hasExpires() { * optional uint64 expires = 4; * @return The expires. */ + @java.lang.Override public long getExpires() { return expires_; } @@ -13331,6 +14558,7 @@ public long getExpires() { * optional string memo = 5; * @return Whether the memo field is set. */ + @java.lang.Override public boolean hasMemo() { return ((bitField0_ & 0x00000008) != 0); } @@ -13342,6 +14570,7 @@ public boolean hasMemo() { * optional string memo = 5; * @return The memo. */ + @java.lang.Override public java.lang.String getMemo() { java.lang.Object ref = memo_; if (ref instanceof java.lang.String) { @@ -13364,6 +14593,7 @@ public java.lang.String getMemo() { * optional string memo = 5; * @return The bytes for memo. */ + @java.lang.Override public com.google.protobuf.ByteString getMemoBytes() { java.lang.Object ref = memo_; @@ -13388,6 +14618,7 @@ public java.lang.String getMemo() { * optional string payment_url = 6; * @return Whether the paymentUrl field is set. */ + @java.lang.Override public boolean hasPaymentUrl() { return ((bitField0_ & 0x00000010) != 0); } @@ -13399,6 +14630,7 @@ public boolean hasPaymentUrl() { * optional string payment_url = 6; * @return The paymentUrl. */ + @java.lang.Override public java.lang.String getPaymentUrl() { java.lang.Object ref = paymentUrl_; if (ref instanceof java.lang.String) { @@ -13421,6 +14653,7 @@ public java.lang.String getPaymentUrl() { * optional string payment_url = 6; * @return The bytes for paymentUrl. */ + @java.lang.Override public com.google.protobuf.ByteString getPaymentUrlBytes() { java.lang.Object ref = paymentUrl_; @@ -13445,6 +14678,7 @@ public java.lang.String getPaymentUrl() { * optional bytes merchant_data = 7; * @return Whether the merchantData field is set. */ + @java.lang.Override public boolean hasMerchantData() { return ((bitField0_ & 0x00000020) != 0); } @@ -13456,6 +14690,7 @@ public boolean hasMerchantData() { * optional bytes merchant_data = 7; * @return The merchantData. */ + @java.lang.Override public com.google.protobuf.ByteString getMerchantData() { return merchantData_; } @@ -14395,6 +15630,7 @@ public com.netki.bip75.protocol.Messages.Output.Builder addBeneficiariesAddresse * required uint64 time = 3; * @return Whether the time field is set. */ + @java.lang.Override public boolean hasTime() { return ((bitField0_ & 0x00000004) != 0); } @@ -14406,6 +15642,7 @@ public boolean hasTime() { * required uint64 time = 3; * @return The time. */ + @java.lang.Override public long getTime() { return time_; } @@ -14448,6 +15685,7 @@ public Builder clearTime() { * optional uint64 expires = 4; * @return Whether the expires field is set. */ + @java.lang.Override public boolean hasExpires() { return ((bitField0_ & 0x00000008) != 0); } @@ -14459,6 +15697,7 @@ public boolean hasExpires() { * optional uint64 expires = 4; * @return The expires. */ + @java.lang.Override public long getExpires() { return expires_; } @@ -14717,6 +15956,7 @@ public Builder setPaymentUrlBytes( * optional bytes merchant_data = 7; * @return Whether the merchantData field is set. */ + @java.lang.Override public boolean hasMerchantData() { return ((bitField0_ & 0x00000040) != 0); } @@ -14728,6 +15968,7 @@ public boolean hasMerchantData() { * optional bytes merchant_data = 7; * @return The merchantData. */ + @java.lang.Override public com.google.protobuf.ByteString getMerchantData() { return merchantData_; } @@ -14880,7 +16121,7 @@ public interface OutputOrBuilder extends /** * Protobuf type {@code payments.Output} */ - public static final class Output extends + public static final class Output extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.Output) OutputOrBuilder { @@ -14990,6 +16231,7 @@ private Output( * optional uint64 amount = 1 [default = 0]; * @return Whether the amount field is set. */ + @java.lang.Override public boolean hasAmount() { return ((bitField0_ & 0x00000001) != 0); } @@ -15001,6 +16243,7 @@ public boolean hasAmount() { * optional uint64 amount = 1 [default = 0]; * @return The amount. */ + @java.lang.Override public long getAmount() { return amount_; } @@ -15015,6 +16258,7 @@ public long getAmount() { * optional bytes script = 2; * @return Whether the script field is set. */ + @java.lang.Override public boolean hasScript() { return ((bitField0_ & 0x00000002) != 0); } @@ -15026,6 +16270,7 @@ public boolean hasScript() { * optional bytes script = 2; * @return The script. */ + @java.lang.Override public com.google.protobuf.ByteString getScript() { return script_; } @@ -15040,7 +16285,7 @@ public com.google.protobuf.ByteString getScript() { * optional .payments.CurrencyType currency = 3; * @return Whether the currency field is set. */ - public boolean hasCurrency() { + @java.lang.Override public boolean hasCurrency() { return ((bitField0_ & 0x00000004) != 0); } /** @@ -15051,7 +16296,7 @@ public boolean hasCurrency() { * optional .payments.CurrencyType currency = 3; * @return The currency. */ - public com.netki.bip75.protocol.Messages.CurrencyType getCurrency() { + @java.lang.Override public com.netki.bip75.protocol.Messages.CurrencyType getCurrency() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.CurrencyType result = com.netki.bip75.protocol.Messages.CurrencyType.valueOf(currency_); return result == null ? com.netki.bip75.protocol.Messages.CurrencyType.BITCOIN : result; @@ -15430,6 +16675,7 @@ public Builder mergeFrom( * optional uint64 amount = 1 [default = 0]; * @return Whether the amount field is set. */ + @java.lang.Override public boolean hasAmount() { return ((bitField0_ & 0x00000001) != 0); } @@ -15441,6 +16687,7 @@ public boolean hasAmount() { * optional uint64 amount = 1 [default = 0]; * @return The amount. */ + @java.lang.Override public long getAmount() { return amount_; } @@ -15483,6 +16730,7 @@ public Builder clearAmount() { * optional bytes script = 2; * @return Whether the script field is set. */ + @java.lang.Override public boolean hasScript() { return ((bitField0_ & 0x00000002) != 0); } @@ -15494,6 +16742,7 @@ public boolean hasScript() { * optional bytes script = 2; * @return The script. */ + @java.lang.Override public com.google.protobuf.ByteString getScript() { return script_; } @@ -15539,7 +16788,7 @@ public Builder clearScript() { * optional .payments.CurrencyType currency = 3; * @return Whether the currency field is set. */ - public boolean hasCurrency() { + @java.lang.Override public boolean hasCurrency() { return ((bitField0_ & 0x00000004) != 0); } /** @@ -15550,6 +16799,7 @@ public boolean hasCurrency() { * optional .payments.CurrencyType currency = 3; * @return The currency. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.CurrencyType getCurrency() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.CurrencyType result = com.netki.bip75.protocol.Messages.CurrencyType.valueOf(currency_); @@ -15771,7 +17021,7 @@ public interface ProtocolMessageOrBuilder extends /** * Protobuf type {@code payments.ProtocolMessage} */ - public static final class ProtocolMessage extends + public static final class ProtocolMessage extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.ProtocolMessage) ProtocolMessageOrBuilder { @@ -15901,6 +17151,7 @@ private ProtocolMessage( * required uint64 version = 1 [default = 1]; * @return Whether the version field is set. */ + @java.lang.Override public boolean hasVersion() { return ((bitField0_ & 0x00000001) != 0); } @@ -15912,6 +17163,7 @@ public boolean hasVersion() { * required uint64 version = 1 [default = 1]; * @return The version. */ + @java.lang.Override public long getVersion() { return version_; } @@ -15926,6 +17178,7 @@ public long getVersion() { * required uint64 status_code = 2 [default = 1]; * @return Whether the statusCode field is set. */ + @java.lang.Override public boolean hasStatusCode() { return ((bitField0_ & 0x00000002) != 0); } @@ -15937,6 +17190,7 @@ public boolean hasStatusCode() { * required uint64 status_code = 2 [default = 1]; * @return The statusCode. */ + @java.lang.Override public long getStatusCode() { return statusCode_; } @@ -15951,7 +17205,7 @@ public long getStatusCode() { * required .payments.ProtocolMessageType message_type = 3; * @return Whether the messageType field is set. */ - public boolean hasMessageType() { + @java.lang.Override public boolean hasMessageType() { return ((bitField0_ & 0x00000004) != 0); } /** @@ -15962,7 +17216,7 @@ public boolean hasMessageType() { * required .payments.ProtocolMessageType message_type = 3; * @return The messageType. */ - public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { + @java.lang.Override public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.ProtocolMessageType result = com.netki.bip75.protocol.Messages.ProtocolMessageType.valueOf(messageType_); return result == null ? com.netki.bip75.protocol.Messages.ProtocolMessageType.UNKNOWN_MESSAGE_TYPE : result; @@ -15978,6 +17232,7 @@ public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { * required bytes serialized_message = 4; * @return Whether the serializedMessage field is set. */ + @java.lang.Override public boolean hasSerializedMessage() { return ((bitField0_ & 0x00000008) != 0); } @@ -15989,6 +17244,7 @@ public boolean hasSerializedMessage() { * required bytes serialized_message = 4; * @return The serializedMessage. */ + @java.lang.Override public com.google.protobuf.ByteString getSerializedMessage() { return serializedMessage_; } @@ -16003,6 +17259,7 @@ public com.google.protobuf.ByteString getSerializedMessage() { * optional string status_message = 5; * @return Whether the statusMessage field is set. */ + @java.lang.Override public boolean hasStatusMessage() { return ((bitField0_ & 0x00000010) != 0); } @@ -16014,6 +17271,7 @@ public boolean hasStatusMessage() { * optional string status_message = 5; * @return The statusMessage. */ + @java.lang.Override public java.lang.String getStatusMessage() { java.lang.Object ref = statusMessage_; if (ref instanceof java.lang.String) { @@ -16036,6 +17294,7 @@ public java.lang.String getStatusMessage() { * optional string status_message = 5; * @return The bytes for statusMessage. */ + @java.lang.Override public com.google.protobuf.ByteString getStatusMessageBytes() { java.lang.Object ref = statusMessage_; @@ -16060,6 +17319,7 @@ public java.lang.String getStatusMessage() { * required bytes identifier = 6; * @return Whether the identifier field is set. */ + @java.lang.Override public boolean hasIdentifier() { return ((bitField0_ & 0x00000020) != 0); } @@ -16071,6 +17331,7 @@ public boolean hasIdentifier() { * required bytes identifier = 6; * @return The identifier. */ + @java.lang.Override public com.google.protobuf.ByteString getIdentifier() { return identifier_; } @@ -16560,6 +17821,7 @@ public Builder mergeFrom( * required uint64 version = 1 [default = 1]; * @return Whether the version field is set. */ + @java.lang.Override public boolean hasVersion() { return ((bitField0_ & 0x00000001) != 0); } @@ -16571,6 +17833,7 @@ public boolean hasVersion() { * required uint64 version = 1 [default = 1]; * @return The version. */ + @java.lang.Override public long getVersion() { return version_; } @@ -16613,6 +17876,7 @@ public Builder clearVersion() { * required uint64 status_code = 2 [default = 1]; * @return Whether the statusCode field is set. */ + @java.lang.Override public boolean hasStatusCode() { return ((bitField0_ & 0x00000002) != 0); } @@ -16624,6 +17888,7 @@ public boolean hasStatusCode() { * required uint64 status_code = 2 [default = 1]; * @return The statusCode. */ + @java.lang.Override public long getStatusCode() { return statusCode_; } @@ -16666,7 +17931,7 @@ public Builder clearStatusCode() { * required .payments.ProtocolMessageType message_type = 3; * @return Whether the messageType field is set. */ - public boolean hasMessageType() { + @java.lang.Override public boolean hasMessageType() { return ((bitField0_ & 0x00000004) != 0); } /** @@ -16677,6 +17942,7 @@ public boolean hasMessageType() { * required .payments.ProtocolMessageType message_type = 3; * @return The messageType. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.ProtocolMessageType result = com.netki.bip75.protocol.Messages.ProtocolMessageType.valueOf(messageType_); @@ -16724,6 +17990,7 @@ public Builder clearMessageType() { * required bytes serialized_message = 4; * @return Whether the serializedMessage field is set. */ + @java.lang.Override public boolean hasSerializedMessage() { return ((bitField0_ & 0x00000008) != 0); } @@ -16735,6 +18002,7 @@ public boolean hasSerializedMessage() { * required bytes serialized_message = 4; * @return The serializedMessage. */ + @java.lang.Override public com.google.protobuf.ByteString getSerializedMessage() { return serializedMessage_; } @@ -16888,6 +18156,7 @@ public Builder setStatusMessageBytes( * required bytes identifier = 6; * @return Whether the identifier field is set. */ + @java.lang.Override public boolean hasIdentifier() { return ((bitField0_ & 0x00000020) != 0); } @@ -16899,6 +18168,7 @@ public boolean hasIdentifier() { * required bytes identifier = 6; * @return The identifier. */ + @java.lang.Override public com.google.protobuf.ByteString getIdentifier() { return identifier_; } @@ -17194,7 +18464,7 @@ public interface EncryptedProtocolMessageOrBuilder extends /** * Protobuf type {@code payments.EncryptedProtocolMessage} */ - public static final class EncryptedProtocolMessage extends + public static final class EncryptedProtocolMessage extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:payments.EncryptedProtocolMessage) EncryptedProtocolMessageOrBuilder { @@ -17347,6 +18617,7 @@ private EncryptedProtocolMessage( * required uint64 version = 1 [default = 1]; * @return Whether the version field is set. */ + @java.lang.Override public boolean hasVersion() { return ((bitField0_ & 0x00000001) != 0); } @@ -17358,6 +18629,7 @@ public boolean hasVersion() { * required uint64 version = 1 [default = 1]; * @return The version. */ + @java.lang.Override public long getVersion() { return version_; } @@ -17372,6 +18644,7 @@ public long getVersion() { * required uint64 status_code = 2 [default = 1]; * @return Whether the statusCode field is set. */ + @java.lang.Override public boolean hasStatusCode() { return ((bitField0_ & 0x00000002) != 0); } @@ -17383,6 +18656,7 @@ public boolean hasStatusCode() { * required uint64 status_code = 2 [default = 1]; * @return The statusCode. */ + @java.lang.Override public long getStatusCode() { return statusCode_; } @@ -17397,7 +18671,7 @@ public long getStatusCode() { * required .payments.ProtocolMessageType message_type = 3; * @return Whether the messageType field is set. */ - public boolean hasMessageType() { + @java.lang.Override public boolean hasMessageType() { return ((bitField0_ & 0x00000004) != 0); } /** @@ -17408,7 +18682,7 @@ public boolean hasMessageType() { * required .payments.ProtocolMessageType message_type = 3; * @return The messageType. */ - public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { + @java.lang.Override public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.ProtocolMessageType result = com.netki.bip75.protocol.Messages.ProtocolMessageType.valueOf(messageType_); return result == null ? com.netki.bip75.protocol.Messages.ProtocolMessageType.UNKNOWN_MESSAGE_TYPE : result; @@ -17424,6 +18698,7 @@ public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { * required bytes encrypted_message = 4; * @return Whether the encryptedMessage field is set. */ + @java.lang.Override public boolean hasEncryptedMessage() { return ((bitField0_ & 0x00000008) != 0); } @@ -17435,6 +18710,7 @@ public boolean hasEncryptedMessage() { * required bytes encrypted_message = 4; * @return The encryptedMessage. */ + @java.lang.Override public com.google.protobuf.ByteString getEncryptedMessage() { return encryptedMessage_; } @@ -17449,6 +18725,7 @@ public com.google.protobuf.ByteString getEncryptedMessage() { * required bytes receiver_public_key = 5; * @return Whether the receiverPublicKey field is set. */ + @java.lang.Override public boolean hasReceiverPublicKey() { return ((bitField0_ & 0x00000010) != 0); } @@ -17460,6 +18737,7 @@ public boolean hasReceiverPublicKey() { * required bytes receiver_public_key = 5; * @return The receiverPublicKey. */ + @java.lang.Override public com.google.protobuf.ByteString getReceiverPublicKey() { return receiverPublicKey_; } @@ -17474,6 +18752,7 @@ public com.google.protobuf.ByteString getReceiverPublicKey() { * required bytes sender_public_key = 6; * @return Whether the senderPublicKey field is set. */ + @java.lang.Override public boolean hasSenderPublicKey() { return ((bitField0_ & 0x00000020) != 0); } @@ -17485,6 +18764,7 @@ public boolean hasSenderPublicKey() { * required bytes sender_public_key = 6; * @return The senderPublicKey. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPublicKey() { return senderPublicKey_; } @@ -17499,6 +18779,7 @@ public com.google.protobuf.ByteString getSenderPublicKey() { * required uint64 nonce = 7; * @return Whether the nonce field is set. */ + @java.lang.Override public boolean hasNonce() { return ((bitField0_ & 0x00000040) != 0); } @@ -17510,6 +18791,7 @@ public boolean hasNonce() { * required uint64 nonce = 7; * @return The nonce. */ + @java.lang.Override public long getNonce() { return nonce_; } @@ -17524,6 +18806,7 @@ public long getNonce() { * required bytes identifier = 8; * @return Whether the identifier field is set. */ + @java.lang.Override public boolean hasIdentifier() { return ((bitField0_ & 0x00000080) != 0); } @@ -17535,6 +18818,7 @@ public boolean hasIdentifier() { * required bytes identifier = 8; * @return The identifier. */ + @java.lang.Override public com.google.protobuf.ByteString getIdentifier() { return identifier_; } @@ -17549,6 +18833,7 @@ public com.google.protobuf.ByteString getIdentifier() { * optional string status_message = 9; * @return Whether the statusMessage field is set. */ + @java.lang.Override public boolean hasStatusMessage() { return ((bitField0_ & 0x00000100) != 0); } @@ -17560,6 +18845,7 @@ public boolean hasStatusMessage() { * optional string status_message = 9; * @return The statusMessage. */ + @java.lang.Override public java.lang.String getStatusMessage() { java.lang.Object ref = statusMessage_; if (ref instanceof java.lang.String) { @@ -17582,6 +18868,7 @@ public java.lang.String getStatusMessage() { * optional string status_message = 9; * @return The bytes for statusMessage. */ + @java.lang.Override public com.google.protobuf.ByteString getStatusMessageBytes() { java.lang.Object ref = statusMessage_; @@ -17606,6 +18893,7 @@ public java.lang.String getStatusMessage() { * optional bytes signature = 10; * @return Whether the signature field is set. */ + @java.lang.Override public boolean hasSignature() { return ((bitField0_ & 0x00000200) != 0); } @@ -17617,6 +18905,7 @@ public boolean hasSignature() { * optional bytes signature = 10; * @return The signature. */ + @java.lang.Override public com.google.protobuf.ByteString getSignature() { return signature_; } @@ -18228,6 +19517,7 @@ public Builder mergeFrom( * required uint64 version = 1 [default = 1]; * @return Whether the version field is set. */ + @java.lang.Override public boolean hasVersion() { return ((bitField0_ & 0x00000001) != 0); } @@ -18239,6 +19529,7 @@ public boolean hasVersion() { * required uint64 version = 1 [default = 1]; * @return The version. */ + @java.lang.Override public long getVersion() { return version_; } @@ -18281,6 +19572,7 @@ public Builder clearVersion() { * required uint64 status_code = 2 [default = 1]; * @return Whether the statusCode field is set. */ + @java.lang.Override public boolean hasStatusCode() { return ((bitField0_ & 0x00000002) != 0); } @@ -18292,6 +19584,7 @@ public boolean hasStatusCode() { * required uint64 status_code = 2 [default = 1]; * @return The statusCode. */ + @java.lang.Override public long getStatusCode() { return statusCode_; } @@ -18334,7 +19627,7 @@ public Builder clearStatusCode() { * required .payments.ProtocolMessageType message_type = 3; * @return Whether the messageType field is set. */ - public boolean hasMessageType() { + @java.lang.Override public boolean hasMessageType() { return ((bitField0_ & 0x00000004) != 0); } /** @@ -18345,6 +19638,7 @@ public boolean hasMessageType() { * required .payments.ProtocolMessageType message_type = 3; * @return The messageType. */ + @java.lang.Override public com.netki.bip75.protocol.Messages.ProtocolMessageType getMessageType() { @SuppressWarnings("deprecation") com.netki.bip75.protocol.Messages.ProtocolMessageType result = com.netki.bip75.protocol.Messages.ProtocolMessageType.valueOf(messageType_); @@ -18392,6 +19686,7 @@ public Builder clearMessageType() { * required bytes encrypted_message = 4; * @return Whether the encryptedMessage field is set. */ + @java.lang.Override public boolean hasEncryptedMessage() { return ((bitField0_ & 0x00000008) != 0); } @@ -18403,6 +19698,7 @@ public boolean hasEncryptedMessage() { * required bytes encrypted_message = 4; * @return The encryptedMessage. */ + @java.lang.Override public com.google.protobuf.ByteString getEncryptedMessage() { return encryptedMessage_; } @@ -18448,6 +19744,7 @@ public Builder clearEncryptedMessage() { * required bytes receiver_public_key = 5; * @return Whether the receiverPublicKey field is set. */ + @java.lang.Override public boolean hasReceiverPublicKey() { return ((bitField0_ & 0x00000010) != 0); } @@ -18459,6 +19756,7 @@ public boolean hasReceiverPublicKey() { * required bytes receiver_public_key = 5; * @return The receiverPublicKey. */ + @java.lang.Override public com.google.protobuf.ByteString getReceiverPublicKey() { return receiverPublicKey_; } @@ -18504,6 +19802,7 @@ public Builder clearReceiverPublicKey() { * required bytes sender_public_key = 6; * @return Whether the senderPublicKey field is set. */ + @java.lang.Override public boolean hasSenderPublicKey() { return ((bitField0_ & 0x00000020) != 0); } @@ -18515,6 +19814,7 @@ public boolean hasSenderPublicKey() { * required bytes sender_public_key = 6; * @return The senderPublicKey. */ + @java.lang.Override public com.google.protobuf.ByteString getSenderPublicKey() { return senderPublicKey_; } @@ -18560,6 +19860,7 @@ public Builder clearSenderPublicKey() { * required uint64 nonce = 7; * @return Whether the nonce field is set. */ + @java.lang.Override public boolean hasNonce() { return ((bitField0_ & 0x00000040) != 0); } @@ -18571,6 +19872,7 @@ public boolean hasNonce() { * required uint64 nonce = 7; * @return The nonce. */ + @java.lang.Override public long getNonce() { return nonce_; } @@ -18613,6 +19915,7 @@ public Builder clearNonce() { * required bytes identifier = 8; * @return Whether the identifier field is set. */ + @java.lang.Override public boolean hasIdentifier() { return ((bitField0_ & 0x00000080) != 0); } @@ -18624,6 +19927,7 @@ public boolean hasIdentifier() { * required bytes identifier = 8; * @return The identifier. */ + @java.lang.Override public com.google.protobuf.ByteString getIdentifier() { return identifier_; } @@ -18777,6 +20081,7 @@ public Builder setStatusMessageBytes( * optional bytes signature = 10; * @return Whether the signature field is set. */ + @java.lang.Override public boolean hasSignature() { return ((bitField0_ & 0x00000200) != 0); } @@ -18788,6 +20093,7 @@ public boolean hasSignature() { * optional bytes signature = 10; * @return The signature. */ + @java.lang.Override public com.google.protobuf.ByteString getSignature() { return signature_; } @@ -18940,84 +20246,89 @@ public com.netki.bip75.protocol.Messages.EncryptedProtocolMessage getDefaultInst descriptor; static { java.lang.String[] descriptorData = { - "\n\rpayment.proto\022\010payments\"\266\003\n\016InvoiceReq" + - "uest\022\021\n\006amount\030\001 \001(\004:\0010\022\014\n\004memo\030\002 \001(\t\022\030\n" + - "\020notification_url\030\003 \001(\t\022)\n\013originators\030\004" + - " \003(\0132\024.payments.Originator\022,\n\rbeneficiar" + - "ies\030\005 \003(\0132\025.payments.Beneficiary\022.\n\024orig" + - "inatorsAddresses\030\006 \003(\0132\020.payments.Output" + - "\0228\n\025attestationsRequested\030\007 \003(\0162\031.paymen" + - "ts.AttestationType\022\035\n\017sender_pki_type\030\010 " + - "\001(\t:\004none\022\027\n\017sender_pki_data\030\t \001(\014\022\030\n\020se" + - "nder_signature\030\n \001(\014\022\026\n\016sender_ev_cert\030\013" + - " \001(\014\022\033\n\023recipient_vasp_name\030\014 \001(\t\022\037\n\027rec" + - "ipient_chain_address\030\r \001(\t\"\222\002\n\016PaymentRe" + - "quest\022\"\n\027payment_details_version\030\001 \001(\r:\001" + - "1\022\"\n\032serialized_payment_details\030\002 \002(\014\022,\n" + - "\rbeneficiaries\030\003 \003(\0132\025.payments.Benefici" + - "ary\0228\n\025attestationsRequested\030\004 \003(\0162\031.pay" + - "ments.AttestationType\022\035\n\017sender_pki_type" + - "\030\005 \002(\t:\004none\022\027\n\017sender_pki_data\030\006 \001(\014\022\030\n" + - "\020sender_signature\030\007 \001(\014\"\302\001\n\007Payment\022\025\n\rm" + - "erchant_data\030\001 \001(\014\022\024\n\014transactions\030\002 \003(\014" + - "\022#\n\trefund_to\030\003 \003(\0132\020.payments.Output\022\014\n" + - "\004memo\030\004 \001(\t\022)\n\013originators\030\005 \003(\0132\024.payme" + - "nts.Originator\022,\n\rbeneficiaries\030\006 \003(\0132\025." + - "payments.Beneficiary\">\n\nPaymentACK\022\"\n\007pa" + - "yment\030\001 \002(\0132\021.payments.Payment\022\014\n\004memo\030\002" + - " \001(\t\"a\n\013Beneficiary\022%\n\027primary_for_trans" + - "action\030\001 \002(\010:\004true\022+\n\014attestations\030\002 \003(\013" + - "2\025.payments.Attestation\"`\n\nOriginator\022%\n" + - "\027primary_for_transaction\030\001 \002(\010:\004true\022+\n\014" + - "attestations\030\002 \003(\0132\025.payments.Attestatio" + - "n\"z\n\013Attestation\022.\n\013attestation\030\001 \001(\0162\031." + - "payments.AttestationType\022\026\n\010pki_type\030\002 \001" + - "(\t:\004none\022\020\n\010pki_data\030\003 \001(\014\022\021\n\tsignature\030" + - "\004 \001(\014\"\262\001\n\016PaymentDetails\022\025\n\007network\030\001 \001(" + - "\t:\004main\0220\n\026beneficiariesAddresses\030\002 \003(\0132" + - "\020.payments.Output\022\014\n\004time\030\003 \002(\004\022\017\n\007expir" + - "es\030\004 \001(\004\022\014\n\004memo\030\005 \001(\t\022\023\n\013payment_url\030\006 " + - "\001(\t\022\025\n\rmerchant_data\030\007 \001(\014\"U\n\006Output\022\021\n\006" + - "amount\030\001 \001(\004:\0010\022\016\n\006script\030\002 \001(\014\022(\n\010curre" + - "ncy\030\003 \001(\0162\026.payments.CurrencyType\"\272\001\n\017Pr" + - "otocolMessage\022\022\n\007version\030\001 \002(\004:\0011\022\026\n\013sta" + - "tus_code\030\002 \002(\004:\0011\0223\n\014message_type\030\003 \002(\0162" + - "\035.payments.ProtocolMessageType\022\032\n\022serial" + - "ized_message\030\004 \002(\014\022\026\n\016status_message\030\005 \001" + - "(\t\022\022\n\nidentifier\030\006 \002(\014\"\234\002\n\030EncryptedProt" + - "ocolMessage\022\022\n\007version\030\001 \002(\004:\0011\022\026\n\013statu" + - "s_code\030\002 \002(\004:\0011\0223\n\014message_type\030\003 \002(\0162\035." + - "payments.ProtocolMessageType\022\031\n\021encrypte" + - "d_message\030\004 \002(\014\022\033\n\023receiver_public_key\030\005" + - " \002(\014\022\031\n\021sender_public_key\030\006 \002(\014\022\r\n\005nonce" + - "\030\007 \002(\004\022\022\n\nidentifier\030\010 \002(\014\022\026\n\016status_mes" + - "sage\030\t \001(\t\022\021\n\tsignature\030\n \001(\014*w\n\023Protoco" + - "lMessageType\022\030\n\024UNKNOWN_MESSAGE_TYPE\020\000\022\023" + - "\n\017INVOICE_REQUEST\020\001\022\023\n\017PAYMENT_REQUEST\020\002" + - "\022\013\n\007PAYMENT\020\003\022\017\n\013PAYMENT_ACK\020\004*\241\006\n\017Attes" + - "tationType\022\035\n\031LEGAL_PERSON_PRIMARY_NAME\020" + - "\000\022\037\n\033LEGAL_PERSON_SECONDARY_NAME\020\001\022\026\n\022AD" + - "DRESS_DEPARTMENT\020\002\022\032\n\026ADDRESS_SUB_DEPART" + - "MENT\020\003\022\027\n\023ADDRESS_STREET_NAME\020\004\022\033\n\027ADDRE" + - "SS_BUILDING_NUMBER\020\005\022\031\n\025ADDRESS_BUILDING" + - "_NAME\020\006\022\021\n\rADDRESS_FLOOR\020\007\022\023\n\017ADDRESS_PO" + - "STBOX\020\010\022\020\n\014ADDRESS_ROOM\020\t\022\024\n\020ADDRESS_POS" + - "TCODE\020\n\022\025\n\021ADDRESS_TOWN_NAME\020\013\022\036\n\032ADDRES" + - "S_TOWN_LOCATION_NAME\020\014\022\031\n\025ADDRESS_DISTRI" + - "CT_NAME\020\r\022 \n\034ADDRESS_COUNTRY_SUB_DIVISIO" + - "N\020\016\022\030\n\024ADDRESS_ADDRESS_LINE\020\017\022\023\n\017ADDRESS" + - "_COUNTRY\020\020\022\035\n\031NATURAL_PERSON_FIRST_NAME\020" + - "\021\022\034\n\030NATURAL_PERSON_LAST_NAME\020\022\022!\n\035BENEF" + - "ICIARY_PERSON_FIRST_NAME\020\023\022 \n\034BENEFICIAR" + - "Y_PERSON_LAST_NAME\020\024\022\016\n\nBIRTH_DATE\020\025\022\017\n\013" + - "BIRTH_PLACE\020\026\022\030\n\024COUNTRY_OF_RESIDENCE\020\027\022" + - "\023\n\017ISSUING_COUNTRY\020\030\022\036\n\032NATIONAL_IDENTIF" + - "IER_NUMBER\020\031\022\027\n\023NATIONAL_IDENTIFIER\020\032\022\022\n" + - "\016ACCOUNT_NUMBER\020\033\022\033\n\027CUSTOMER_IDENTIFICA" + - "TION\020\034\022\032\n\026REGISTRATION_AUTHORITY\020\035*I\n\014Cu" + - "rrencyType\022\013\n\007BITCOIN\020\000\022\014\n\010ETHEREUM\020\001\022\014\n" + - "\010LITECOIN\020\002\022\020\n\014BITCOIN_CASH\020\003B$\n\030com.net" + - "ki.bip75.protocolB\010Messages" + "\n\030main/proto/payment.proto\022\010payments\"\215\004\n" + + "\016InvoiceRequest\022\021\n\006amount\030\001 \001(\004:\0010\022\014\n\004me" + + "mo\030\002 \001(\t\022\030\n\020notification_url\030\003 \001(\t\022)\n\013or" + + "iginators\030\004 \003(\0132\024.payments.Originator\022,\n" + + "\rbeneficiaries\030\005 \003(\0132\025.payments.Benefici" + + "ary\022.\n\024originatorsAddresses\030\006 \003(\0132\020.paym" + + "ents.Output\0228\n\025attestationsRequested\030\007 \003" + + "(\0162\031.payments.AttestationType\022\035\n\017sender_" + + "pki_type\030\010 \001(\t:\004none\022\027\n\017sender_pki_data\030" + + "\t \001(\014\022\030\n\020sender_signature\030\n \001(\014\022\026\n\016sende" + + "r_ev_cert\030\013 \001(\014\022\033\n\023recipient_vasp_name\030\014" + + " \001(\t\022\037\n\027recipient_chain_address\030\r \001(\t\022\031\n" + + "\021sygna_transfer_id\030\016 \001(\t\022#\n\033sygna_encryp" + + "ted_originators\030\017 \001(\014\022\025\n\rsygna_api_key\030\020" + + " \001(\t\"\324\002\n\016PaymentRequest\022\"\n\027payment_detai" + + "ls_version\030\001 \001(\r:\0011\022\"\n\032serialized_paymen" + + "t_details\030\002 \002(\014\022,\n\rbeneficiaries\030\003 \003(\0132\025" + + ".payments.Beneficiary\0228\n\025attestationsReq" + + "uested\030\004 \003(\0162\031.payments.AttestationType\022" + + "\035\n\017sender_pki_type\030\005 \002(\t:\004none\022\027\n\017sender" + + "_pki_data\030\006 \001(\014\022\030\n\020sender_signature\030\007 \001(" + + "\014\022\031\n\021sygna_transfer_id\030\010 \001(\t\022%\n\035sygna_en" + + "crypted_beneficiaries\030\t \001(\014\"\335\001\n\007Payment\022" + + "\025\n\rmerchant_data\030\001 \001(\014\022\024\n\014transactions\030\002" + + " \003(\014\022#\n\trefund_to\030\003 \003(\0132\020.payments.Outpu" + + "t\022\014\n\004memo\030\004 \001(\t\022)\n\013originators\030\005 \003(\0132\024.p" + + "ayments.Originator\022,\n\rbeneficiaries\030\006 \003(" + + "\0132\025.payments.Beneficiary\022\031\n\021sygna_transf" + + "er_id\030\007 \001(\t\">\n\nPaymentACK\022\"\n\007payment\030\001 \002" + + "(\0132\021.payments.Payment\022\014\n\004memo\030\002 \001(\t\"a\n\013B" + + "eneficiary\022%\n\027primary_for_transaction\030\001 " + + "\002(\010:\004true\022+\n\014attestations\030\002 \003(\0132\025.paymen" + + "ts.Attestation\"`\n\nOriginator\022%\n\027primary_" + + "for_transaction\030\001 \002(\010:\004true\022+\n\014attestati" + + "ons\030\002 \003(\0132\025.payments.Attestation\"z\n\013Atte" + + "station\022.\n\013attestation\030\001 \001(\0162\031.payments." + + "AttestationType\022\026\n\010pki_type\030\002 \001(\t:\004none\022" + + "\020\n\010pki_data\030\003 \001(\014\022\021\n\tsignature\030\004 \001(\014\"\262\001\n" + + "\016PaymentDetails\022\025\n\007network\030\001 \001(\t:\004main\0220" + + "\n\026beneficiariesAddresses\030\002 \003(\0132\020.payment" + + "s.Output\022\014\n\004time\030\003 \002(\004\022\017\n\007expires\030\004 \001(\004\022" + + "\014\n\004memo\030\005 \001(\t\022\023\n\013payment_url\030\006 \001(\t\022\025\n\rme" + + "rchant_data\030\007 \001(\014\"U\n\006Output\022\021\n\006amount\030\001 " + + "\001(\004:\0010\022\016\n\006script\030\002 \001(\014\022(\n\010currency\030\003 \001(\016" + + "2\026.payments.CurrencyType\"\272\001\n\017ProtocolMes" + + "sage\022\022\n\007version\030\001 \002(\004:\0011\022\026\n\013status_code\030" + + "\002 \002(\004:\0011\0223\n\014message_type\030\003 \002(\0162\035.payment" + + "s.ProtocolMessageType\022\032\n\022serialized_mess" + + "age\030\004 \002(\014\022\026\n\016status_message\030\005 \001(\t\022\022\n\nide" + + "ntifier\030\006 \002(\014\"\234\002\n\030EncryptedProtocolMessa" + + "ge\022\022\n\007version\030\001 \002(\004:\0011\022\026\n\013status_code\030\002 " + + "\002(\004:\0011\0223\n\014message_type\030\003 \002(\0162\035.payments." + + "ProtocolMessageType\022\031\n\021encrypted_message" + + "\030\004 \002(\014\022\033\n\023receiver_public_key\030\005 \002(\014\022\031\n\021s" + + "ender_public_key\030\006 \002(\014\022\r\n\005nonce\030\007 \002(\004\022\022\n" + + "\nidentifier\030\010 \002(\014\022\026\n\016status_message\030\t \001(" + + "\t\022\021\n\tsignature\030\n \001(\014*w\n\023ProtocolMessageT" + + "ype\022\030\n\024UNKNOWN_MESSAGE_TYPE\020\000\022\023\n\017INVOICE" + + "_REQUEST\020\001\022\023\n\017PAYMENT_REQUEST\020\002\022\013\n\007PAYME" + + "NT\020\003\022\017\n\013PAYMENT_ACK\020\004*\241\006\n\017AttestationTyp" + + "e\022\035\n\031LEGAL_PERSON_PRIMARY_NAME\020\000\022\037\n\033LEGA" + + "L_PERSON_SECONDARY_NAME\020\001\022\026\n\022ADDRESS_DEP" + + "ARTMENT\020\002\022\032\n\026ADDRESS_SUB_DEPARTMENT\020\003\022\027\n" + + "\023ADDRESS_STREET_NAME\020\004\022\033\n\027ADDRESS_BUILDI" + + "NG_NUMBER\020\005\022\031\n\025ADDRESS_BUILDING_NAME\020\006\022\021" + + "\n\rADDRESS_FLOOR\020\007\022\023\n\017ADDRESS_POSTBOX\020\010\022\020" + + "\n\014ADDRESS_ROOM\020\t\022\024\n\020ADDRESS_POSTCODE\020\n\022\025" + + "\n\021ADDRESS_TOWN_NAME\020\013\022\036\n\032ADDRESS_TOWN_LO" + + "CATION_NAME\020\014\022\031\n\025ADDRESS_DISTRICT_NAME\020\r" + + "\022 \n\034ADDRESS_COUNTRY_SUB_DIVISION\020\016\022\030\n\024AD" + + "DRESS_ADDRESS_LINE\020\017\022\023\n\017ADDRESS_COUNTRY\020" + + "\020\022\035\n\031NATURAL_PERSON_FIRST_NAME\020\021\022\034\n\030NATU" + + "RAL_PERSON_LAST_NAME\020\022\022!\n\035BENEFICIARY_PE" + + "RSON_FIRST_NAME\020\023\022 \n\034BENEFICIARY_PERSON_" + + "LAST_NAME\020\024\022\016\n\nBIRTH_DATE\020\025\022\017\n\013BIRTH_PLA" + + "CE\020\026\022\030\n\024COUNTRY_OF_RESIDENCE\020\027\022\023\n\017ISSUIN" + + "G_COUNTRY\020\030\022\036\n\032NATIONAL_IDENTIFIER_NUMBE" + + "R\020\031\022\027\n\023NATIONAL_IDENTIFIER\020\032\022\022\n\016ACCOUNT_" + + "NUMBER\020\033\022\033\n\027CUSTOMER_IDENTIFICATION\020\034\022\032\n" + + "\026REGISTRATION_AUTHORITY\020\035*I\n\014CurrencyTyp" + + "e\022\013\n\007BITCOIN\020\000\022\014\n\010ETHEREUM\020\001\022\014\n\010LITECOIN" + + "\020\002\022\020\n\014BITCOIN_CASH\020\003B$\n\030com.netki.bip75." + + "protocolB\010Messages" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -19028,19 +20339,19 @@ public com.netki.bip75.protocol.Messages.EncryptedProtocolMessage getDefaultInst internal_static_payments_InvoiceRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_payments_InvoiceRequest_descriptor, - new java.lang.String[] { "Amount", "Memo", "NotificationUrl", "Originators", "Beneficiaries", "OriginatorsAddresses", "AttestationsRequested", "SenderPkiType", "SenderPkiData", "SenderSignature", "SenderEvCert", "RecipientVaspName", "RecipientChainAddress", }); + new java.lang.String[] { "Amount", "Memo", "NotificationUrl", "Originators", "Beneficiaries", "OriginatorsAddresses", "AttestationsRequested", "SenderPkiType", "SenderPkiData", "SenderSignature", "SenderEvCert", "RecipientVaspName", "RecipientChainAddress", "SygnaTransferId", "SygnaEncryptedOriginators", "SygnaApiKey", }); internal_static_payments_PaymentRequest_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_payments_PaymentRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_payments_PaymentRequest_descriptor, - new java.lang.String[] { "PaymentDetailsVersion", "SerializedPaymentDetails", "Beneficiaries", "AttestationsRequested", "SenderPkiType", "SenderPkiData", "SenderSignature", }); + new java.lang.String[] { "PaymentDetailsVersion", "SerializedPaymentDetails", "Beneficiaries", "AttestationsRequested", "SenderPkiType", "SenderPkiData", "SenderSignature", "SygnaTransferId", "SygnaEncryptedBeneficiaries", }); internal_static_payments_Payment_descriptor = getDescriptor().getMessageTypes().get(2); internal_static_payments_Payment_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_payments_Payment_descriptor, - new java.lang.String[] { "MerchantData", "Transactions", "RefundTo", "Memo", "Originators", "Beneficiaries", }); + new java.lang.String[] { "MerchantData", "Transactions", "RefundTo", "Memo", "Originators", "Beneficiaries", "SygnaTransferId", }); internal_static_payments_PaymentACK_descriptor = getDescriptor().getMessageTypes().get(3); internal_static_payments_PaymentACK_fieldAccessorTable = new diff --git a/src/main/java/com/netki/bip75/service/impl/Bip75ServiceNetki.kt b/src/main/java/com/netki/bip75/service/impl/Bip75ServiceNetki.kt index a61b21f..73be99a 100644 --- a/src/main/java/com/netki/bip75/service/impl/Bip75ServiceNetki.kt +++ b/src/main/java/com/netki/bip75/service/impl/Bip75ServiceNetki.kt @@ -3,9 +3,7 @@ package com.netki.bip75.service.impl import com.netki.address.info.service.AddressInformationService import com.netki.bip75.protocol.Messages import com.netki.bip75.service.Bip75Service -import com.netki.exceptions.InvalidCertificateChainException -import com.netki.exceptions.InvalidCertificateException -import com.netki.exceptions.InvalidSignatureException +import com.netki.exceptions.* import com.netki.model.* import com.netki.security.CertificateValidator import com.netki.util.* @@ -27,15 +25,19 @@ internal class Bip75ServiceNetki( * {@inheritDoc} */ override fun createInvoiceRequest(invoiceRequestParameters: InvoiceRequestParameters): ByteArray { - - invoiceRequestParameters.originatorParameters.validate(true, OwnerType.ORIGINATOR) - invoiceRequestParameters.beneficiaryParameters?.validate(false, OwnerType.BENEFICIARY) + if(invoiceRequestParameters.sygnaParameters != null){ + invoiceRequestParameters.sygnaParameters.validate(OwnerType.ORIGINATOR) + }else{ + invoiceRequestParameters.originatorParameters.validate(true, OwnerType.ORIGINATOR) + invoiceRequestParameters.beneficiaryParameters?.validate(false, OwnerType.BENEFICIARY) + } val messageInvoiceRequestBuilder = invoiceRequestParameters.toMessageInvoiceRequestBuilderUnsigned( invoiceRequestParameters.senderParameters, invoiceRequestParameters.attestationsRequested, - invoiceRequestParameters.recipientParameters + invoiceRequestParameters.recipientParameters, + invoiceRequestParameters.sygnaParameters ) invoiceRequestParameters.beneficiaryParameters?.forEach { beneficiary -> @@ -209,14 +211,19 @@ internal class Bip75ServiceNetki( */ override fun createPaymentRequest(paymentRequestParameters: PaymentRequestParameters): ByteArray { - paymentRequestParameters.beneficiaryParameters.validate(true, OwnerType.BENEFICIARY) + if(paymentRequestParameters.sygnaParameters != null){ + paymentRequestParameters.sygnaParameters.validate(OwnerType.BENEFICIARY) + }else{ + paymentRequestParameters.beneficiaryParameters.validate(true, OwnerType.BENEFICIARY) + } val messagePaymentRequestBuilder = paymentRequestParameters .toMessagePaymentDetails() .toPaymentRequest( paymentRequestParameters.senderParameters, paymentRequestParameters.paymentParametersVersion, - paymentRequestParameters.attestationsRequested + paymentRequestParameters.attestationsRequested, + paymentRequestParameters.sygnaParameters ) paymentRequestParameters.beneficiaryParameters.forEach { beneficiary -> @@ -354,8 +361,12 @@ internal class Bip75ServiceNetki( * {@inheritDoc} */ override fun createPayment(paymentParameters: PaymentParameters): ByteArray { - paymentParameters.originatorParameters.validate(true, OwnerType.ORIGINATOR) - paymentParameters.beneficiaryParameters?.validate(false, OwnerType.BENEFICIARY) + if(paymentParameters.sygnaParameters != null){ + paymentParameters.sygnaParameters.validate(null) + }else{ + paymentParameters.originatorParameters?.validate(true, OwnerType.ORIGINATOR) + paymentParameters.beneficiaryParameters?.validate(false, OwnerType.BENEFICIARY) + } val paymentBuilder = paymentParameters.toMessagePaymentBuilder() @@ -369,7 +380,7 @@ internal class Bip75ServiceNetki( paymentBuilder.addBeneficiaries(beneficiaryMessage) } - paymentParameters.originatorParameters.forEach { originator -> + paymentParameters.originatorParameters?.forEach { originator -> val originatorMessage = originator.toMessageOriginatorBuilderWithoutAttestations() originator.pkiDataParametersSets.forEach { pkiData -> diff --git a/src/main/java/com/netki/exceptions/InvalidSygnaOwnerException.kt b/src/main/java/com/netki/exceptions/InvalidSygnaOwnerException.kt new file mode 100644 index 0000000..f4c6a7b --- /dev/null +++ b/src/main/java/com/netki/exceptions/InvalidSygnaOwnerException.kt @@ -0,0 +1,9 @@ +package com.netki.exceptions + +/** + * Represents an error when a sygna owners is not valid. + */ +class InvalidSygnaOwnerException : Exception { + constructor(message: String?) : super(message) + constructor(message: String?, cause: Throwable?) : super(message, cause) +} diff --git a/src/main/java/com/netki/exceptions/InvalidSygnaTransferIDException.kt b/src/main/java/com/netki/exceptions/InvalidSygnaTransferIDException.kt new file mode 100644 index 0000000..488d0e9 --- /dev/null +++ b/src/main/java/com/netki/exceptions/InvalidSygnaTransferIDException.kt @@ -0,0 +1,9 @@ +package com.netki.exceptions + +/** + * Represents an error when a sygna transfer id is not valid. + */ +class InvalidSygnaTransferIDException : Exception { + constructor(message: String?) : super(message) + constructor(message: String?, cause: Throwable?) : super(message, cause) +} diff --git a/src/main/java/com/netki/model/InvoiceRequest.kt b/src/main/java/com/netki/model/InvoiceRequest.kt index 88f3130..b510989 100644 --- a/src/main/java/com/netki/model/InvoiceRequest.kt +++ b/src/main/java/com/netki/model/InvoiceRequest.kt @@ -73,5 +73,17 @@ data class InvoiceRequest @JvmOverloads constructor( /** * Metadata for the protocol message. */ - val protocolMessageMetadata: ProtocolMessageMetadata + val protocolMessageMetadata: ProtocolMessageMetadata, + /** + * Specific ID for Sygna Bridge + */ + val sygnaTransferId: String? = null, + /** + * Originators' encrypted account for Sygna Bridge + */ + val sygnaEncryptedOriginators: String? = null, + /** + * Specific Sygna Bridge API key for /netki + */ + val sygnaApiKey: String? = null ) diff --git a/src/main/java/com/netki/model/InvoiceRequestParameters.kt b/src/main/java/com/netki/model/InvoiceRequestParameters.kt index b9ddaad..0b9c625 100644 --- a/src/main/java/com/netki/model/InvoiceRequestParameters.kt +++ b/src/main/java/com/netki/model/InvoiceRequestParameters.kt @@ -12,7 +12,7 @@ data class InvoiceRequestParameters @JvmOverloads constructor( /** * List of originators for this transaction. */ - val originatorParameters: List, + val originatorParameters: List = emptyList(), /** * The sender of the protocol message. @@ -22,7 +22,7 @@ data class InvoiceRequestParameters @JvmOverloads constructor( /** * List of attestations requested for the transaction. */ - val attestationsRequested: List, + val attestationsRequested: List = emptyList(), /** * Integer-number-of-satoshis. @@ -57,5 +57,9 @@ data class InvoiceRequestParameters @JvmOverloads constructor( /** * Status and information of the protocol message status, by default "OK". */ - val messageInformation: MessageInformation = MessageInformation() + val messageInformation: MessageInformation = MessageInformation(), + /** + * Sygna specific parameters + */ + val sygnaParameters: SygnaParameters? = null ) diff --git a/src/main/java/com/netki/model/Payment.kt b/src/main/java/com/netki/model/Payment.kt index a82e12b..66b0875 100644 --- a/src/main/java/com/netki/model/Payment.kt +++ b/src/main/java/com/netki/model/Payment.kt @@ -39,5 +39,9 @@ data class Payment @JvmOverloads constructor( /** * Metadata for the protocol message. */ - val protocolMessageMetadata: ProtocolMessageMetadata? = null + val protocolMessageMetadata: ProtocolMessageMetadata? = null, + /** + * Specific ID for Sygna Bridge + */ + val sygnaTransferId: String? = null ) diff --git a/src/main/java/com/netki/model/PaymentParameters.kt b/src/main/java/com/netki/model/PaymentParameters.kt index cbed33d..04a83b8 100644 --- a/src/main/java/com/netki/model/PaymentParameters.kt +++ b/src/main/java/com/netki/model/PaymentParameters.kt @@ -31,7 +31,7 @@ data class PaymentParameters @JvmOverloads constructor( /** * List of originators for this transaction. */ - val originatorParameters: List, + val originatorParameters: List? = emptyList(), /** * List of beneficiaries for this transaction. @@ -51,5 +51,9 @@ data class PaymentParameters @JvmOverloads constructor( /** * Status and information of the protocol message status, by default "OK". */ - val messageInformation: MessageInformation = MessageInformation() + val messageInformation: MessageInformation = MessageInformation(), + /** + * Sygna specific parameters + */ + val sygnaParameters: SygnaParameters? = null ) diff --git a/src/main/java/com/netki/model/PaymentRequest.kt b/src/main/java/com/netki/model/PaymentRequest.kt index f7a7fb0..68e39d1 100644 --- a/src/main/java/com/netki/model/PaymentRequest.kt +++ b/src/main/java/com/netki/model/PaymentRequest.kt @@ -76,5 +76,13 @@ data class PaymentRequest @JvmOverloads constructor( /** * Metadata for the protocol message. */ - val protocolMessageMetadata: ProtocolMessageMetadata + val protocolMessageMetadata: ProtocolMessageMetadata, + /** + * Specific ID for Sygna Bridge + */ + val sygnaTransferId: String? = null, + /** + * Beneficiaries' encrypted account for Sygna Bridge + */ + val sygnaEncryptedBeneficiaries: String? = null ) diff --git a/src/main/java/com/netki/model/PaymentRequestParameters.kt b/src/main/java/com/netki/model/PaymentRequestParameters.kt index 9b96287..827e5b9 100644 --- a/src/main/java/com/netki/model/PaymentRequestParameters.kt +++ b/src/main/java/com/netki/model/PaymentRequestParameters.kt @@ -48,7 +48,7 @@ data class PaymentRequestParameters @JvmOverloads constructor( /** * List of beneficiaries for this transaction. */ - val beneficiaryParameters: List, + val beneficiaryParameters: List = emptyList(), /** * The sender of the protocol message. @@ -58,7 +58,7 @@ data class PaymentRequestParameters @JvmOverloads constructor( /** * List of attestations requested for the transaction. */ - val attestationsRequested: List, + val attestationsRequested: List = emptyList(), /** * Information of the recipient of the message. @@ -73,5 +73,9 @@ data class PaymentRequestParameters @JvmOverloads constructor( /** * Version of the PaymentDetails message. */ - val paymentParametersVersion: Int = 1 + val paymentParametersVersion: Int = 1, + /** + * Sygna specific parameters + */ + val sygnaParameters: SygnaParameters? = null ) diff --git a/src/main/java/com/netki/model/SygnaParameters.kt b/src/main/java/com/netki/model/SygnaParameters.kt new file mode 100644 index 0000000..c6134cf --- /dev/null +++ b/src/main/java/com/netki/model/SygnaParameters.kt @@ -0,0 +1,33 @@ +package com.netki.model + +/** + * Data of the Sygna to be used to create a message. + */ +data class SygnaParameters @JvmOverloads constructor( + /** + * Specific ID for Sygna Bridge + */ + val sygnaTransferId: String? = null, + /** + * Originators' encrypted account for Sygna Bridge + * + * @see + * ECIES Encrypting an Decrypting + * + * Please encrypt your originators' account to prevent data breach + */ + val sygnaEncryptedOriginators: String? = null, + /** + * Beneficiaries' encrypted account for Sygna Bridge + * + * @see + * ECIES Encrypting an Decrypting + * + * Please encrypt your beneficiaries' account to prevent data breach + */ + val sygnaEncryptedBeneficiaries: String? = null, + /** + * Specific Sygna Bridge API key for api.sygna.io/netki + */ + val sygnaApiKey: String? = null +) diff --git a/src/main/java/com/netki/util/ErrorInformation.kt b/src/main/java/com/netki/util/ErrorInformation.kt index 71dc9f5..ffd5b4f 100644 --- a/src/main/java/com/netki/util/ErrorInformation.kt +++ b/src/main/java/com/netki/util/ErrorInformation.kt @@ -47,4 +47,7 @@ object ErrorInformation { const val ENCRYPTION_INVALID_ERROR = "Unable to decrypt the message with the given keys, error: %s" const val DECRYPTION_MISSING_RECIPIENT_KEYS_ERROR = "To decrypt the message you need to have the recipient's private key in your RecipientParameters.EncryptionParameters object." + const val SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR = "To transfer to Sygna VASP, the sygnaTransferId field should not be empty" + const val SYGNA_VALIDATION_ENCRYPTED_ORIGINATORS_EMPTY_ERROR = "To transfer to Sygna VASP, the sygnaEncryptedOriginators field should not be empty" + const val SYGNA_VALIDATION_ENCRYPTED_BENEFICIARIES_EMPTY_ERROR = "To transfer to Sygna VASP, the sygnaEncryptedBeneficiaries field should not be empty" } diff --git a/src/main/java/com/netki/util/MessagesExtensions.kt b/src/main/java/com/netki/util/MessagesExtensions.kt index 9b8c705..86d53a7 100644 --- a/src/main/java/com/netki/util/MessagesExtensions.kt +++ b/src/main/java/com/netki/util/MessagesExtensions.kt @@ -3,9 +3,7 @@ package com.netki.util import com.google.protobuf.ByteString import com.google.protobuf.GeneratedMessageV3 import com.netki.bip75.protocol.Messages -import com.netki.exceptions.EncryptionException -import com.netki.exceptions.InvalidObjectException -import com.netki.exceptions.InvalidOwnersException +import com.netki.exceptions.* import com.netki.model.* import com.netki.security.CryptoModule import com.netki.security.EncryptionModule @@ -23,7 +21,8 @@ import java.util.* internal fun InvoiceRequestParameters.toMessageInvoiceRequestBuilderUnsigned( senderParameters: SenderParameters, attestationsRequested: List, - recipientParameters: RecipientParameters? + recipientParameters: RecipientParameters?, + sygnaParameters: SygnaParameters? ): Messages.InvoiceRequest.Builder { val invoiceRequestBuilder = Messages.InvoiceRequest.newBuilder() .setAmount(this.amount ?: 0) @@ -47,6 +46,13 @@ internal fun InvoiceRequestParameters.toMessageInvoiceRequestBuilderUnsigned( invoiceRequestBuilder.recipientVaspName = recipientParameters.vaspName } + sygnaParameters?.let { + invoiceRequestBuilder.sygnaTransferId = it.sygnaTransferId ?: "" + invoiceRequestBuilder.sygnaEncryptedOriginators = + it.sygnaEncryptedOriginators?.hexStringToByteString() ?: "".toByteString() + invoiceRequestBuilder.sygnaApiKey = it.sygnaApiKey ?: "" + } + return invoiceRequestBuilder } @@ -90,7 +96,11 @@ internal fun Messages.InvoiceRequest.toInvoiceRequest(protocolMessageMetadata: P senderEvCert = this.senderEvCert.toStringLocal(), recipientVaspName = this.recipientVaspName, recipientChainAddress = this.recipientChainAddress, - protocolMessageMetadata = protocolMessageMetadata + protocolMessageMetadata = protocolMessageMetadata, + sygnaTransferId = this.sygnaTransferId, + sygnaEncryptedOriginators = this.sygnaEncryptedOriginators?.toHex(), + sygnaApiKey = this.sygnaApiKey + ) } @@ -144,7 +154,9 @@ internal fun Messages.PaymentRequest.toPaymentRequest(protocolMessageMetadata: P senderPkiType = this.senderPkiType.getType(), senderPkiData = this.senderPkiData.toStringLocal(), senderSignature = this.senderSignature.toStringLocal(), - protocolMessageMetadata = protocolMessageMetadata + protocolMessageMetadata = protocolMessageMetadata, + sygnaTransferId = this.sygnaTransferId, + sygnaEncryptedBeneficiaries = this.sygnaEncryptedBeneficiaries?.toHex() ) } @@ -158,7 +170,8 @@ internal fun Messages.PaymentRequest.toPaymentRequest(protocolMessageMetadata: P internal fun Messages.PaymentDetails.toPaymentRequest( senderParameters: SenderParameters, paymentParametersVersion: Int, - attestationsRequested: List + attestationsRequested: List, + sygnaParameters: SygnaParameters? ): Messages.PaymentRequest.Builder { val paymentRequestBuilder = Messages.PaymentRequest.newBuilder() .setPaymentDetailsVersion(paymentParametersVersion) @@ -171,6 +184,12 @@ internal fun Messages.PaymentDetails.toPaymentRequest( paymentRequestBuilder.addAttestationsRequested(it.toAttestationType()) } + sygnaParameters?.let { + paymentRequestBuilder.sygnaTransferId = it.sygnaTransferId ?: "" + paymentRequestBuilder.sygnaEncryptedBeneficiaries = + it.sygnaEncryptedBeneficiaries?.hexStringToByteString() ?: "".toByteString() + } + return paymentRequestBuilder } @@ -185,7 +204,7 @@ internal fun PaymentRequestParameters.toMessagePaymentDetails(): Messages.Paymen .setTime(this.time.time) .setExpires(this.expires?.time ?: 0) .setMemo(this.memo) - .setPaymentUrl(this.paymentUrl) + .setPaymentUrl(this.paymentUrl?:"") .setMerchantData(this.merchantData?.toByteString()) this.beneficiariesAddresses.forEach { output -> @@ -239,6 +258,10 @@ internal fun PaymentParameters.toMessagePaymentBuilder(): Messages.Payment.Build messagePaymentBuilder.addRefundTo(output.toMessageOutput()) } + this.sygnaParameters?.let { + messagePaymentBuilder.sygnaTransferId = it.sygnaTransferId ?: "" + } + return messagePaymentBuilder } @@ -268,6 +291,8 @@ internal fun Payment.toMessagePayment(): Messages.Payment { messagePaymentBuilder.addOriginators(originator.toMessageOriginator()) } + messagePaymentBuilder.sygnaTransferId = this.sygnaTransferId ?: "" + return messagePaymentBuilder.build() } @@ -304,7 +329,8 @@ internal fun Messages.Payment.toPayment(protocolMessageMetadata: ProtocolMessage memo = this.memo, beneficiaries = beneficiaries, originators = originators, - protocolMessageMetadata = protocolMessageMetadata + protocolMessageMetadata = protocolMessageMetadata, + sygnaTransferId = this.sygnaTransferId ) } @@ -1255,3 +1281,35 @@ internal fun ByteArray.changeStatus(statusCode: StatusCode, statusMessage: Strin throw InvalidObjectException(PARSE_BINARY_MESSAGE_INVALID_INPUT.format(exception.message)) } } + +internal fun ByteString.toHex(): String { + val byteArray = this.toByteArray() + return byteArray.joinToString("") { "%02x".format(it) } +} + +internal fun String.hexStringToByteString(): ByteString { + val byteArray = ByteArray(this.length / 2) { + this.substring(it * 2, it * 2 + 2).toInt(16).toByte() + } + return byteArray.toByteString() +} + +/** + * Validate if sygnaParameters is valid. + * + * @throws InvalidSygnaTransferIDException if sygnaTransferId is not valid. + * @throws InvalidOwnersException if sygnaEncryptedOriginators or sygnaEncryptedBeneficiaries is not valid. + */ +internal fun SygnaParameters.validate(ownerType: OwnerType?) { + if (this.sygnaTransferId.isNullOrBlank()) { + throw InvalidSygnaTransferIDException(ErrorInformation.SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR) + } + + if ((ownerType?.equals(OwnerType.ORIGINATOR) == true) && this.sygnaEncryptedOriginators.isNullOrBlank()) { + throw InvalidSygnaOwnerException(ErrorInformation.SYGNA_VALIDATION_ENCRYPTED_ORIGINATORS_EMPTY_ERROR) + } + + if ((ownerType?.equals(OwnerType.BENEFICIARY) == true) && this.sygnaEncryptedBeneficiaries.isNullOrBlank()) { + throw InvalidSygnaOwnerException(ErrorInformation.SYGNA_VALIDATION_ENCRYPTED_BENEFICIARIES_EMPTY_ERROR) + } +} \ No newline at end of file diff --git a/src/main/proto/payment.proto b/src/main/proto/payment.proto index 0bd613b..a73f967 100644 --- a/src/main/proto/payment.proto +++ b/src/main/proto/payment.proto @@ -19,6 +19,10 @@ message InvoiceRequest { optional bytes sender_ev_cert = 11; // Sender's EV cert optional string recipient_vasp_name = 12; // Recipient's vasp name optional string recipient_chain_address = 13; // Recipient's chain address + // sygna specific fields + optional string sygna_transfer_id = 14; + optional bytes sygna_encrypted_originators = 15; + optional string sygna_api_key = 16; } message PaymentRequest { @@ -29,6 +33,9 @@ message PaymentRequest { required string sender_pki_type = 5 [default = "none"]; // none / x509+sha256 optional bytes sender_pki_data = 6; // Sender's pki data, depends on pki_type optional bytes sender_signature = 7; // Sender's Signature of the whole message + // sygna specific fields + optional string sygna_transfer_id = 8; + optional bytes sygna_encrypted_beneficiaries = 9; } message Payment { @@ -38,6 +45,8 @@ message Payment { optional string memo = 4; // Human-readable message for the merchant repeated Originator originators = 5; // Originators of the InvoiceRequest repeated Beneficiary beneficiaries = 6; // Beneficiaries of the InvoiceRequest + // sygna specific fields + optional string sygna_transfer_id = 7; } message PaymentACK { diff --git a/src/test/java/com/netki/TransactIdTest.kt b/src/test/java/com/netki/TransactIdTest.kt index ceb134f..17281a1 100644 --- a/src/test/java/com/netki/TransactIdTest.kt +++ b/src/test/java/com/netki/TransactIdTest.kt @@ -1,10 +1,7 @@ package com.netki import com.netki.bip75.protocol.Messages -import com.netki.exceptions.EncryptionException -import com.netki.exceptions.InvalidCertificateChainException -import com.netki.exceptions.InvalidObjectException -import com.netki.exceptions.InvalidSignatureException +import com.netki.exceptions.* import com.netki.model.* import com.netki.util.ErrorInformation.CERTIFICATE_VALIDATION_INVALID_OWNER_CERTIFICATE_CA import com.netki.util.ErrorInformation.CERTIFICATE_VALIDATION_INVALID_SENDER_CERTIFICATE_CA @@ -12,6 +9,9 @@ import com.netki.util.ErrorInformation.ENCRYPTION_MISSING_RECIPIENT_KEYS_ERROR import com.netki.util.ErrorInformation.ENCRYPTION_MISSING_SENDER_KEYS_ERROR import com.netki.util.ErrorInformation.SIGNATURE_VALIDATION_INVALID_OWNER_SIGNATURE import com.netki.util.ErrorInformation.SIGNATURE_VALIDATION_INVALID_SENDER_SIGNATURE +import com.netki.util.ErrorInformation.SYGNA_VALIDATION_ENCRYPTED_BENEFICIARIES_EMPTY_ERROR +import com.netki.util.ErrorInformation.SYGNA_VALIDATION_ENCRYPTED_ORIGINATORS_EMPTY_ERROR +import com.netki.util.ErrorInformation.SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR import com.netki.util.TestData import com.netki.util.TestData.Attestations.INVALID_ATTESTATION import com.netki.util.TestData.Attestations.REQUESTED_ATTESTATIONS @@ -33,12 +33,17 @@ import com.netki.util.TestData.Payment.MEMO import com.netki.util.TestData.Payment.MEMO_PAYMENT_ACK import com.netki.util.TestData.Payment.Output.OUTPUTS import com.netki.util.TestData.Payment.PAYMENT +import com.netki.util.TestData.Payment.SYGNA_PAYMENT import com.netki.util.TestData.Recipients.RECIPIENTS_PARAMETERS import com.netki.util.TestData.Recipients.RECIPIENTS_PARAMETERS_WITH_ENCRYPTION import com.netki.util.TestData.Senders.SENDER_PKI_NONE import com.netki.util.TestData.Senders.SENDER_PKI_X509SHA256 import com.netki.util.TestData.Senders.SENDER_PKI_X509SHA256_INVALID_CERTIFICATE import com.netki.util.TestData.Senders.SENDER_PKI_X509SHA256_WITH_ENCRYPTION +import com.netki.util.TestData.SygnaParameters.SYGNA_API_KEY +import com.netki.util.TestData.SygnaParameters.SYGNA_ENCRYPTED_BENEFICIARIES +import com.netki.util.TestData.SygnaParameters.SYGNA_ENCRYPTED_ORIGINATORS +import com.netki.util.TestData.SygnaParameters.SYGNA_TRANSFER_ID import com.netki.util.getSerializedMessage import com.netki.util.toAttestationType import com.netki.util.toByteString @@ -745,6 +750,103 @@ internal class TransactIdTest { assert(exception.message?.contains("Invalid object for") ?: false) } + @Test + fun `Create and parse InvoiceRequestBinary with Sygna format to InvoiceRequest`() { + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID, + sygnaEncryptedOriginators = SYGNA_ENCRYPTED_ORIGINATORS, + sygnaApiKey = SYGNA_API_KEY + ) + val sender = SENDER_PKI_X509SHA256 + val invoiceRequestParameters = InvoiceRequestParameters( + amount = 1000, + memo = "memo", + notificationUrl = "notificationUrl", + originatorsAddresses = OUTPUTS, + originatorParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val invoiceRequestBinary = transactId.createInvoiceRequest(invoiceRequestParameters) + + val invoiceRequest = transactId.parseInvoiceRequest(invoiceRequestBinary) + + assert(invoiceRequestParameters.amount == invoiceRequest.amount) + assert(invoiceRequestParameters.memo == invoiceRequest.memo) + assert(invoiceRequestParameters.notificationUrl == invoiceRequest.notificationUrl) + assert(REQUESTED_ATTESTATIONS.size == invoiceRequest.attestationsRequested.size) + assert(OUTPUTS.size == invoiceRequest.originatorsAddresses.size) + + assert(sender.pkiDataParameters?.type == invoiceRequest.senderPkiType) + assert(sender.pkiDataParameters?.certificatePem == invoiceRequest.senderPkiData) + assert(!invoiceRequest.senderSignature.isNullOrBlank()) + assert(!invoiceRequest.protocolMessageMetadata.identifier.isBlank()) + assert(invoiceRequest.protocolMessageMetadata.version == 1L) + assert(invoiceRequest.protocolMessageMetadata.statusCode == StatusCode.OK) + assert(invoiceRequest.protocolMessageMetadata.statusMessage.isEmpty()) + assert(invoiceRequest.protocolMessageMetadata.messageType == MessageType.INVOICE_REQUEST) + assert(!invoiceRequest.senderEvCert.isNullOrBlank()) + + assert(sygnaParameters.sygnaTransferId == invoiceRequest.sygnaTransferId) + assert(sygnaParameters.sygnaEncryptedOriginators == invoiceRequest.sygnaEncryptedOriginators) + assert(sygnaParameters.sygnaApiKey == invoiceRequest.sygnaApiKey) + + assertTrue(transactId.isInvoiceRequestValid(invoiceRequestBinary)) + } + + @Test + fun `Create and parse InvoiceRequestBinary with Sygna format to InvoiceRequest, SygnaParameters with invalid sygnaTransferId`() { + val sygnaParameters = SygnaParameters( + sygnaEncryptedOriginators = SYGNA_ENCRYPTED_ORIGINATORS, + sygnaApiKey = SYGNA_API_KEY + ) + val sender = SENDER_PKI_X509SHA256 + val invoiceRequestParameters = InvoiceRequestParameters( + amount = 1000, + memo = "memo", + notificationUrl = "notificationUrl", + originatorsAddresses = OUTPUTS, + originatorParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaTransferIDException::class.java) { + transactId.createInvoiceRequest(invoiceRequestParameters) + } + + assert(exception.message == SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR) + } + + @Test + fun `Create and parse InvoiceRequestBinary with Sygna format to InvoiceRequest, sygnaParameters with invalid sygnaEncryptedOriginators`() { + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID, + sygnaApiKey = SYGNA_API_KEY + ) + val sender = SENDER_PKI_X509SHA256 + val invoiceRequestParameters = InvoiceRequestParameters( + amount = 1000, + memo = "memo", + notificationUrl = "notificationUrl", + originatorsAddresses = OUTPUTS, + originatorParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaOwnerException::class.java) { + transactId.createInvoiceRequest(invoiceRequestParameters) + } + + assert(exception.message == SYGNA_VALIDATION_ENCRYPTED_ORIGINATORS_EMPTY_ERROR) + } + + @Test fun `Create and validate PaymentRequestBinary, Owners and Sender with PkiData`() { val beneficiaries = listOf( @@ -1429,6 +1531,108 @@ internal class TransactIdTest { assert(paymentRequest.protocolMessageMetadata.nonce!! > 0L) } + @Test + fun `Create and parse PaymentRequestBinary with Sygna format to PaymentRequest`() { + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID, + sygnaEncryptedBeneficiaries = SYGNA_ENCRYPTED_BENEFICIARIES + ) + val sender = SENDER_PKI_X509SHA256 + val paymentRequestParameters = PaymentRequestParameters( + network = "main", + beneficiariesAddresses = OUTPUTS, + time = Timestamp(System.currentTimeMillis()), + expires = Timestamp(System.currentTimeMillis()), + memo = "memo", + paymentUrl = "www.payment.url/test", + merchantData = "merchant data", + beneficiaryParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val paymentRequestBinary = transactId.createPaymentRequest(paymentRequestParameters) + + val paymentRequest = transactId.parsePaymentRequest(paymentRequestBinary) + + assert(paymentRequest.network == paymentRequestParameters.network) + assert(paymentRequest.time == paymentRequestParameters.time) + assert(paymentRequest.expires == paymentRequestParameters.expires) + assert(paymentRequest.memo == paymentRequestParameters.memo) + assert(paymentRequest.paymentUrl == paymentRequestParameters.paymentUrl) + assert(paymentRequest.merchantData == paymentRequestParameters.merchantData) + assert(paymentRequest.beneficiariesAddresses.size == paymentRequestParameters.beneficiariesAddresses.size) + + assert(sender.pkiDataParameters?.type == paymentRequest.senderPkiType) + assert(sender.pkiDataParameters?.certificatePem == paymentRequest.senderPkiData) + assert(!paymentRequest.senderSignature.isNullOrBlank()) + assert(!paymentRequest.protocolMessageMetadata.identifier.isBlank()) + assert(paymentRequest.protocolMessageMetadata.version == 1L) + assert(paymentRequest.protocolMessageMetadata.statusCode == StatusCode.OK) + assert(paymentRequest.protocolMessageMetadata.statusMessage.isEmpty()) + assert(paymentRequest.protocolMessageMetadata.messageType == MessageType.PAYMENT_REQUEST) + + assert(paymentRequest.sygnaTransferId == paymentRequestParameters.sygnaParameters?.sygnaTransferId) + assert(paymentRequest.sygnaEncryptedBeneficiaries == paymentRequestParameters.sygnaParameters?.sygnaEncryptedBeneficiaries) + + assertTrue(transactId.isPaymentRequestValid(paymentRequestBinary)) + } + + @Test + fun `Create and parse PaymentRequestBinary to PaymentRequest with Sygna format, SygnaParameters with invalid sygnaTransferId`() { + val sygnaParameters = SygnaParameters( + sygnaEncryptedBeneficiaries = SYGNA_ENCRYPTED_BENEFICIARIES + ) + val sender = SENDER_PKI_X509SHA256 + val paymentRequestParameters = PaymentRequestParameters( + network = "main", + beneficiariesAddresses = OUTPUTS, + time = Timestamp(System.currentTimeMillis()), + expires = Timestamp(System.currentTimeMillis()), + memo = "memo", + paymentUrl = "www.payment.url/test", + merchantData = "merchant data", + beneficiaryParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaTransferIDException::class.java) { + transactId.createPaymentRequest(paymentRequestParameters) + } + + assert(exception.message == SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR) + } + + @Test + fun `Create and parse PaymentRequestBinary to PaymentRequest with Sygna format, SygnaParameters with invalid sygnaEncryptedBeneficiaries`() { + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID + ) + val sender = SENDER_PKI_X509SHA256 + val paymentRequestParameters = PaymentRequestParameters( + network = "main", + beneficiariesAddresses = OUTPUTS, + time = Timestamp(System.currentTimeMillis()), + expires = Timestamp(System.currentTimeMillis()), + memo = "memo", + paymentUrl = "www.payment.url/test", + merchantData = "merchant data", + beneficiaryParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaOwnerException::class.java) { + transactId.createPaymentRequest(paymentRequestParameters) + } + + assert(exception.message == SYGNA_VALIDATION_ENCRYPTED_BENEFICIARIES_EMPTY_ERROR) + } + @Test fun `Create and validate PaymentBinary`() { val originators = listOf( @@ -1737,6 +1941,62 @@ internal class TransactIdTest { } } + @Test + fun `Create and parse PaymentBinary with Sygna format to Payment`() { + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID + ) + val paymentParameters = PaymentParameters( + merchantData = "merchant data", + transactions = arrayListOf( + "transaction1".toByteArray(), + "transaction2".toByteArray() + ), + outputs = OUTPUTS, + memo = MEMO, + originatorParameters = emptyList(), + sygnaParameters = sygnaParameters + ) + + val paymentBinary = transactId.createPayment(paymentParameters) + val payment = transactId.parsePayment(paymentBinary) + + assert(payment.merchantData == paymentParameters.merchantData) + assert(payment.transactions.size == paymentParameters.transactions.size) + assert(payment.outputs == paymentParameters.outputs) + assert(payment.memo == paymentParameters.memo) + assert(!payment.protocolMessageMetadata!!.identifier.isBlank()) + assert(payment.protocolMessageMetadata?.version == 1L) + assert(payment.protocolMessageMetadata?.statusCode == StatusCode.OK) + assert(payment.protocolMessageMetadata?.statusMessage.isNullOrBlank()) + assert(payment.protocolMessageMetadata?.messageType == MessageType.PAYMENT) + assert(payment.sygnaTransferId == sygnaParameters.sygnaTransferId) + + assertTrue(transactId.isPaymentValid(paymentBinary)) + } + + @Test + fun `Create and parse PaymentBinary with Sygna format to Payment, sygnaParameters with invalid sygnaTransferId`() { + val sygnaParameters = SygnaParameters() + val paymentParameters = PaymentParameters( + merchantData = "merchant data", + transactions = arrayListOf( + "transaction1".toByteArray(), + "transaction2".toByteArray() + ), + outputs = OUTPUTS, + memo = MEMO, + originatorParameters = emptyList(), + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaTransferIDException::class.java) { + transactId.createPayment(paymentParameters) + } + + assert(exception.message == SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR) + } + @Test fun `Create and validate PaymentAckBinary`() { val paymentAckParameters = PaymentAckParameters( @@ -1935,6 +2195,31 @@ internal class TransactIdTest { assert(paymentAck.protocolMessageMetadata.nonce!! > 0L) } + @Test + fun `Create and parse PaymentAckBinary to PaymentAck with Sygna format`() { + val paymentAckParameters = PaymentAckParameters( + payment = SYGNA_PAYMENT, + memo = MEMO_PAYMENT_ACK + ) + val paymentBinary = transactId.createPaymentAck(paymentAckParameters) + val paymentAck = transactId.parsePaymentAck(paymentBinary) + + assert(paymentAck.payment.merchantData == SYGNA_PAYMENT.merchantData) + assert(paymentAck.payment.transactions.size == SYGNA_PAYMENT.transactions.size) + assert(paymentAck.payment.outputs == SYGNA_PAYMENT.outputs) + assert(paymentAck.payment.memo == SYGNA_PAYMENT.memo) + assert(paymentAck.payment.protocolMessageMetadata == null) + assert(paymentAck.memo == MEMO_PAYMENT_ACK) + assert(!paymentAck.protocolMessageMetadata.identifier.isBlank()) + assert(paymentAck.protocolMessageMetadata.version == 1L) + assert(paymentAck.protocolMessageMetadata.statusCode == StatusCode.OK) + assert(paymentAck.protocolMessageMetadata.statusMessage.isEmpty()) + assert(paymentAck.protocolMessageMetadata.messageType == MessageType.PAYMENT_ACK) + assert(paymentAck.payment.sygnaTransferId == SYGNA_PAYMENT.sygnaTransferId) + + assertTrue(transactId.isPaymentAckValid(paymentBinary)) + } + @Test fun `Change status from OK to CANCEL to InvoiceRequest`() { val originators = listOf( diff --git a/src/test/java/com/netki/bip75/main/impl/Bip75NetkiTest.kt b/src/test/java/com/netki/bip75/main/impl/Bip75NetkiTest.kt index 52772d9..3f7dbeb 100644 --- a/src/test/java/com/netki/bip75/main/impl/Bip75NetkiTest.kt +++ b/src/test/java/com/netki/bip75/main/impl/Bip75NetkiTest.kt @@ -5,13 +5,15 @@ import com.netki.address.info.service.AddressInformationService import com.netki.bip75.service.impl.Bip75ServiceNetki import com.netki.exceptions.AddressProviderErrorException import com.netki.exceptions.AddressProviderUnauthorizedException -import com.netki.model.AddressCurrency -import com.netki.model.AddressInformation -import com.netki.model.InvoiceRequestParameters -import com.netki.model.PaymentRequestParameters +import com.netki.exceptions.InvalidSygnaOwnerException +import com.netki.exceptions.InvalidSygnaTransferIDException +import com.netki.model.* import com.netki.security.CertificateValidator import com.netki.util.ErrorInformation.ADDRESS_INFORMATION_INTERNAL_ERROR_PROVIDER import com.netki.util.ErrorInformation.ADDRESS_INFORMATION_NOT_AUTHORIZED_ERROR_PROVIDER +import com.netki.util.ErrorInformation.SYGNA_VALIDATION_ENCRYPTED_BENEFICIARIES_EMPTY_ERROR +import com.netki.util.ErrorInformation.SYGNA_VALIDATION_ENCRYPTED_ORIGINATORS_EMPTY_ERROR +import com.netki.util.ErrorInformation.SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR import com.netki.util.TestData import com.netki.util.TestData.Address.ADDRESS_INFORMATION import com.netki.util.TestData.Attestations.REQUESTED_ATTESTATIONS @@ -22,6 +24,10 @@ import com.netki.util.TestData.Originators.NO_PRIMARY_ORIGINATOR_PKI_X509SHA256 import com.netki.util.TestData.Originators.PRIMARY_ORIGINATOR_PKI_X509SHA256 import com.netki.util.TestData.Recipients.RECIPIENTS_PARAMETERS import com.netki.util.TestData.Senders.SENDER_PKI_X509SHA256 +import com.netki.util.TestData.SygnaParameters.SYGNA_TRANSFER_ID +import com.netki.util.TestData.SygnaParameters.SYGNA_ENCRYPTED_ORIGINATORS +import com.netki.util.TestData.SygnaParameters.SYGNA_API_KEY +import com.netki.util.TestData.SygnaParameters.SYGNA_ENCRYPTED_BENEFICIARIES import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test @@ -81,6 +87,56 @@ internal class Bip75NetkiTest { assertEquals(invoiceRequest.originatorsAddresses.size, invoiceRequestData.originatorsAddresses.size) assertTrue(invoiceRequest.recipientChainAddress.isNullOrBlank()) assertTrue(invoiceRequest.recipientVaspName.isNullOrBlank()) + assertTrue(invoiceRequest.sygnaTransferId.isNullOrBlank()) + assertTrue(invoiceRequest.sygnaEncryptedOriginators.isNullOrBlank()) + assertTrue(invoiceRequest.sygnaApiKey.isNullOrBlank()) + invoiceRequest.originatorsAddresses.forEach { output -> + run { + assert(!output.addressInformation?.identifier.isNullOrBlank()) + assertNotNull(output.addressInformation?.alerts) + assert(!output.addressInformation?.currencyVerbose.isNullOrBlank()) + assert(!output.addressInformation?.earliestTransactionTime.isNullOrBlank()) + assert(!output.addressInformation?.latestTransactionTime.isNullOrBlank()) + } + } + } + + @Test + fun `Create and parse InvoiceRequest binary with Sygna format`() { + `when`( + mockAddressInformationService.getAddressInformation( + any(AddressCurrency::class.java), + anyString() + ) + ).thenReturn(ADDRESS_INFORMATION) + + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID, + sygnaEncryptedOriginators = SYGNA_ENCRYPTED_ORIGINATORS, + sygnaApiKey = SYGNA_API_KEY + ) + val sender = SENDER_PKI_X509SHA256 + val invoiceRequestData = InvoiceRequestParameters( + amount = 1000, + memo = "memo", + notificationUrl = "notificationUrl", + originatorsAddresses = TestData.Payment.Output.OUTPUTS, + originatorParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val invoiceRequestBinary = transactId.createInvoiceRequest(invoiceRequestData) + + val invoiceRequest = bip75Netki.parseInvoiceRequestWithAddressesInfo(invoiceRequestBinary) + + assertEquals(invoiceRequest.originatorsAddresses.size, invoiceRequestData.originatorsAddresses.size) + assertTrue(invoiceRequest.recipientChainAddress.isNullOrBlank()) + assertTrue(invoiceRequest.recipientVaspName.isNullOrBlank()) + assertEquals(invoiceRequest.sygnaTransferId, invoiceRequestData.sygnaParameters?.sygnaTransferId) + assertEquals(invoiceRequest.sygnaEncryptedOriginators, invoiceRequestData.sygnaParameters?.sygnaEncryptedOriginators) + assertEquals(invoiceRequest.sygnaApiKey, invoiceRequestData.sygnaParameters?.sygnaApiKey) invoiceRequest.originatorsAddresses.forEach { output -> run { assert(!output.addressInformation?.identifier.isNullOrBlank()) @@ -268,6 +324,67 @@ internal class Bip75NetkiTest { } } + @Test + fun `Create and parse InvoiceRequest binary with Sygna Format throwing InvalidSygnaTransferIDException`() { + `when`( + mockAddressInformationService.getAddressInformation( + any(AddressCurrency::class.java), + anyString() + ) + ).thenReturn(ADDRESS_INFORMATION) + + val sygnaParameters = SygnaParameters() + val sender = SENDER_PKI_X509SHA256 + val invoiceRequestData = InvoiceRequestParameters( + amount = 1000, + memo = "memo", + notificationUrl = "notificationUrl", + originatorsAddresses = TestData.Payment.Output.OUTPUTS, + originatorParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaTransferIDException::class.java) { + transactId.createInvoiceRequest(invoiceRequestData) + } + + assert(exception.message != null && exception.message!! == (SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR)) + } + + @Test + fun `Create and parse InvoiceRequest binary with Sygna Format throwing InvalidSygnaOwnerException`() { + `when`( + mockAddressInformationService.getAddressInformation( + any(AddressCurrency::class.java), + anyString() + ) + ).thenReturn(ADDRESS_INFORMATION) + + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID + ) + val sender = SENDER_PKI_X509SHA256 + val invoiceRequestData = InvoiceRequestParameters( + amount = 1000, + memo = "memo", + notificationUrl = "notificationUrl", + originatorsAddresses = TestData.Payment.Output.OUTPUTS, + originatorParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaOwnerException::class.java) { + transactId.createInvoiceRequest(invoiceRequestData) + } + + assert(exception.message != null && exception.message!! == (SYGNA_VALIDATION_ENCRYPTED_ORIGINATORS_EMPTY_ERROR)) + } + + @Test fun `Create and parse PaymentRequest binary and fetch AddressInformation`() { `when`( @@ -300,6 +417,8 @@ internal class Bip75NetkiTest { val paymentRequest = bip75Netki.parsePaymentRequestWithAddressesInfo(paymentRequestBinary) assertEquals(paymentRequest.beneficiariesAddresses.size, paymentRequestParameters.beneficiariesAddresses.size) + assertTrue(paymentRequest.sygnaTransferId.isNullOrBlank()) + assertTrue(paymentRequest.sygnaEncryptedBeneficiaries.isNullOrBlank()) paymentRequest.beneficiariesAddresses.forEach { output -> run { assert(!output.addressInformation?.identifier.isNullOrBlank()) @@ -352,6 +471,53 @@ internal class Bip75NetkiTest { } } + @Test + fun `Create and parse PaymentRequest binary with Sygna format`() { + `when`( + mockAddressInformationService.getAddressInformation( + any(AddressCurrency::class.java), + anyString() + ) + ).thenReturn(ADDRESS_INFORMATION) + + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID, + sygnaEncryptedBeneficiaries = SYGNA_ENCRYPTED_BENEFICIARIES + ) + val sender = SENDER_PKI_X509SHA256 + val paymentRequestParameters = PaymentRequestParameters( + network = "main", + beneficiariesAddresses = TestData.Payment.Output.OUTPUTS, + time = Timestamp(System.currentTimeMillis()), + expires = Timestamp(System.currentTimeMillis()), + memo = "memo", + paymentUrl = "www.payment.url/test", + merchantData = "merchant data", + beneficiaryParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val paymentRequestBinary = bip75Netki.createPaymentRequest(paymentRequestParameters) + + val paymentRequest = bip75Netki.parsePaymentRequestWithAddressesInfo(paymentRequestBinary) + + assertEquals(paymentRequest.beneficiariesAddresses.size, paymentRequestParameters.beneficiariesAddresses.size) + assertEquals(paymentRequest.sygnaTransferId, paymentRequestParameters.sygnaParameters?.sygnaTransferId) + assertEquals(paymentRequest.sygnaEncryptedBeneficiaries, paymentRequestParameters.sygnaParameters?.sygnaEncryptedBeneficiaries) + + paymentRequest.beneficiariesAddresses.forEach { output -> + run { + assert(!output.addressInformation?.identifier.isNullOrBlank()) + assertNotNull(output.addressInformation?.alerts) + assert(!output.addressInformation?.currencyVerbose.isNullOrBlank()) + assert(!output.addressInformation?.earliestTransactionTime.isNullOrBlank()) + assert(!output.addressInformation?.latestTransactionTime.isNullOrBlank()) + } + } + } + @Test fun `Create and parse PaymentRequest binary and fetch AddressInformation throwing Unauthorized error`() { `when`( @@ -439,5 +605,71 @@ internal class Bip75NetkiTest { assert(exception.message != null && exception.message!!.contains("Provider internal error for address:")) } + @Test + fun `Create and parse PaymentRequest binary with Sygna format throwing InvalidSygnaTransferIDException`() { + `when`( + mockAddressInformationService.getAddressInformation( + any(AddressCurrency::class.java), + anyString() + ) + ).thenReturn(ADDRESS_INFORMATION) + + val sygnaParameters = SygnaParameters() + val sender = SENDER_PKI_X509SHA256 + val paymentRequestParameters = PaymentRequestParameters( + network = "main", + beneficiariesAddresses = TestData.Payment.Output.OUTPUTS, + time = Timestamp(System.currentTimeMillis()), + expires = Timestamp(System.currentTimeMillis()), + memo = "memo", + paymentUrl = "www.payment.url/test", + merchantData = "merchant data", + beneficiaryParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaTransferIDException::class.java) { + bip75Netki.createPaymentRequest(paymentRequestParameters) + } + + assert(exception.message != null && exception.message!! == SYGNA_VALIDATION_TRANSFER_ID_EMPTY_ERROR) + } + + @Test + fun `Create and parse PaymentRequest binary with Sygna format throwing InvalidSygnaOwnerException`() { + `when`( + mockAddressInformationService.getAddressInformation( + any(AddressCurrency::class.java), + anyString() + ) + ).thenReturn(ADDRESS_INFORMATION) + + val sygnaParameters = SygnaParameters( + sygnaTransferId = SYGNA_TRANSFER_ID + ) + val sender = SENDER_PKI_X509SHA256 + val paymentRequestParameters = PaymentRequestParameters( + network = "main", + beneficiariesAddresses = TestData.Payment.Output.OUTPUTS, + time = Timestamp(System.currentTimeMillis()), + expires = Timestamp(System.currentTimeMillis()), + memo = "memo", + paymentUrl = "www.payment.url/test", + merchantData = "merchant data", + beneficiaryParameters = emptyList(), + senderParameters = sender, + attestationsRequested = REQUESTED_ATTESTATIONS, + sygnaParameters = sygnaParameters + ) + + val exception = assertThrows(InvalidSygnaOwnerException::class.java) { + bip75Netki.createPaymentRequest(paymentRequestParameters) + } + + assert(exception.message != null && exception.message!! == SYGNA_VALIDATION_ENCRYPTED_BENEFICIARIES_EMPTY_ERROR) + } + private fun any(type: Class): T = Mockito.any(type) } diff --git a/src/test/java/com/netki/util/TestData.kt b/src/test/java/com/netki/util/TestData.kt index e814fb0..3b1d8bb 100644 --- a/src/test/java/com/netki/util/TestData.kt +++ b/src/test/java/com/netki/util/TestData.kt @@ -158,6 +158,24 @@ internal object TestData { ) ) + val SYGNA_PAYMENT = Payment( + merchantData = "merchant data", + transactions = arrayListOf( + "transaction1".toByteArray(), + "transaction2".toByteArray() + ), + outputs = OUTPUTS, + memo = MEMO, + sygnaTransferId = "03509afc922c99b9a0f16e89f4129e9504cf8f5ffb76048aee693aaa29f68b26", + protocolMessageMetadata = ProtocolMessageMetadata( + 1, + StatusCode.OK, + MessageType.PAYMENT, + "", + "randomIdentifier" + ) + ) + object Output { val OUTPUTS = listOf( Output(1000, "Script 1", AddressCurrency.BITCOIN), @@ -999,4 +1017,11 @@ internal object TestData { CryptoModule.objectToPublicKeyPem(keysSender.public) ) } + + object SygnaParameters { + const val SYGNA_TRANSFER_ID = "03509afc922c99b9a0f16e89f4129e9504cf8f5ffb76048aee693aaa29f68b26" + const val SYGNA_ENCRYPTED_ORIGINATORS = "df94fd292fdbb3e23b512334ded22169b4a483a6269f9add2e3fcf" + const val SYGNA_ENCRYPTED_BENEFICIARIES = "16a7bdd4420ab592da5a868f9913a9572b5f58fb2a5b289f7f53" + const val SYGNA_API_KEY = "092ce11d949af34d439b2fc40c2e9d4c80c19e01a2c955661096671d23a6c57a" + } }