summaryrefslogtreecommitdiff
path: root/bip-0075
diff options
context:
space:
mode:
authorLuke Dashjr <luke-jr+git@utopios.org>2016-03-17 05:23:41 +0000
committerLuke Dashjr <luke-jr+git@utopios.org>2016-03-17 05:23:41 +0000
commit24de1f450eb43f800937c73ca8765f73687d03f4 (patch)
tree1ec0ebab13514b1fcf9b011022c534de584b69fd /bip-0075
parent3979dbd6daf30d55d7bb115ebdc6228b8eec4b78 (diff)
parent19845126ec697f043a23f382a2653c0bdd10a6a3 (diff)
downloadbips-24de1f450eb43f800937c73ca8765f73687d03f4.tar.xz
Merge BIP 75
Diffstat (limited to 'bip-0075')
-rw-r--r--bip-0075/bip70-extension.pngbin0 -> 88989 bytes
-rw-r--r--bip-0075/encrypted-invoice-request-process.pngbin0 -> 164633 bytes
-rw-r--r--bip-0075/invoice-request-process.pngbin0 -> 107506 bytes
-rwxr-xr-xbip-0075/mobile-sf-encrypted-ir-without-payment.pngbin0 -> 106744 bytes
-rwxr-xr-xbip-0075/mobile-sf-ir-with-payment.pngbin0 -> 113169 bytes
-rwxr-xr-xbip-0075/mobile-sf-ir-without-payment.pngbin0 -> 92902 bytes
-rw-r--r--bip-0075/paymentrequest.proto102
7 files changed, 102 insertions, 0 deletions
diff --git a/bip-0075/bip70-extension.png b/bip-0075/bip70-extension.png
new file mode 100644
index 0000000..d235992
--- /dev/null
+++ b/bip-0075/bip70-extension.png
Binary files differ
diff --git a/bip-0075/encrypted-invoice-request-process.png b/bip-0075/encrypted-invoice-request-process.png
new file mode 100644
index 0000000..beb5df1
--- /dev/null
+++ b/bip-0075/encrypted-invoice-request-process.png
Binary files differ
diff --git a/bip-0075/invoice-request-process.png b/bip-0075/invoice-request-process.png
new file mode 100644
index 0000000..47a4fac
--- /dev/null
+++ b/bip-0075/invoice-request-process.png
Binary files differ
diff --git a/bip-0075/mobile-sf-encrypted-ir-without-payment.png b/bip-0075/mobile-sf-encrypted-ir-without-payment.png
new file mode 100755
index 0000000..af66a4d
--- /dev/null
+++ b/bip-0075/mobile-sf-encrypted-ir-without-payment.png
Binary files differ
diff --git a/bip-0075/mobile-sf-ir-with-payment.png b/bip-0075/mobile-sf-ir-with-payment.png
new file mode 100755
index 0000000..c668eac
--- /dev/null
+++ b/bip-0075/mobile-sf-ir-with-payment.png
Binary files differ
diff --git a/bip-0075/mobile-sf-ir-without-payment.png b/bip-0075/mobile-sf-ir-without-payment.png
new file mode 100755
index 0000000..ab18d0f
--- /dev/null
+++ b/bip-0075/mobile-sf-ir-without-payment.png
Binary files differ
diff --git a/bip-0075/paymentrequest.proto b/bip-0075/paymentrequest.proto
new file mode 100644
index 0000000..1c9cc8e
--- /dev/null
+++ b/bip-0075/paymentrequest.proto
@@ -0,0 +1,102 @@
+//
+// Simple Bitcoin Payment Protocol messages
+//
+// Use fields 1000+ for extensions;
+// to avoid conflicts, register extensions via pull-req at
+// https://github.com/bitcoin/bips/bip-0070/extensions.mediawiki
+//
+
+package payments;
+option java_package = "org.bitcoin.protocols.payments";
+option java_outer_classname = "Protos";
+
+// Generalized form of "send payment to this/these bitcoin addresses"
+message Output {
+ optional uint64 amount = 1 [default = 0]; // amount is integer-number-of-satoshis
+ required bytes script = 2; // usually one of the standard Script forms
+}
+message PaymentDetails {
+ optional string network = 1 [default = "main"]; // "main" or "test"
+ repeated Output outputs = 2; // Where payment should be sent
+ required uint64 time = 3; // Timestamp; when payment request created
+ optional uint64 expires = 4; // Timestamp; when this request should be considered invalid
+ optional string memo = 5; // Human-readable description of request for the customer
+ optional string payment_url = 6; // URL to send Payment and get PaymentACK
+ optional bytes merchant_data = 7; // Arbitrary data to include in the Payment message
+ optional uint64 subtractable_fee = 1000; // How many Satoshis can be subtracted from the requested amount and instead applied towards the fee
+ optional uint64 fee_per_kb = 1001; // Minimum transaction fee that must be included with the transaction in order for it to be accepted with zero confirmations.
+ optional bool replace_by_fee = 1002; // Indicates the sender can enable the Replace By Fee flag for this transaction and the receiver will still consider it accepted with zero confirmations. Otherwise, RBF transactions will not be accepted by the receiver until they are confirmed.
+}
+message PaymentRequest {
+ optional uint32 payment_details_version = 1 [default = 1];
+ optional string pki_type = 2 [default = "none"]; // none / x509+sha256 / x509+sha1
+ optional bytes pki_data = 3; // depends on pki_type
+ required bytes serialized_payment_details = 4; // PaymentDetails
+ optional bytes signature = 5; // pki-dependent signature
+}
+message X509Certificates {
+ repeated bytes certificate = 1; // DER-encoded X.509 certificate chain
+}
+message Payment {
+ optional bytes merchant_data = 1; // From PaymentDetails.merchant_data
+ repeated bytes transactions = 2; // Signed transactions that satisfy PaymentDetails.outputs
+ repeated Output refund_to = 3; // Where to send refunds, if a refund is necessary
+ optional string memo = 4; // Human-readable message for the merchant
+}
+message PaymentACK {
+ required Payment payment = 1; // Payment message that triggered this ACK
+ optional string memo = 2; // Human-readable message for customer
+}
+
+// BIP-IR Extensions
+
+message InvoiceRequest {
+ required bytes sender_public_key = 1; // Sender's EC Public Key
+ optional uint64 amount = 3 [default = 0]; // amount is integer-number-of-satoshis
+ optional string pki_type = 4 [default = "none"]; // none / x509+sha256
+ optional bytes pki_data = 5; // Depends on pki_type
+ optional string memo = 6; // Human-readable description of invoice request for the receiver
+ optional string notification_url = 7; // URL to notify on EncryptedPaymentRequest ready
+ optional bytes signature = 8; // PKI-dependent signature
+}
+
+message EncryptedInvoiceRequest {
+ required bytes encrypted_invoice_request = 1; // AES-256-CBC Encrypted InvoiceRequest as defined in InvoiceRequest Spec
+ required bytes invoice_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized InvoiceRequest (used for authentication)
+ required bytes sender_public_key = 3; // Sender's EC Public Key
+ required bytes receiver_public_key = 4; // Receiver's EC Public Key
+ required uint64 nonce = 5; // Microseconds since epoch
+ optional bytes identifier = 6; // Unique key to identify this entire exchange on the server. invoice_request_hash SHOULD be used by default
+ optional bytes signature = 7; // Signature of this message using Sender's EC key
+}
+
+message EncryptedPaymentRequest {
+ required bytes encrypted_payment_request = 1; // AES-256-CBC Encrypted PaymentRequest as defined in InvoiceRequest Spec
+ required bytes payment_request_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized PaymentRequest (used for authentication)
+ required bytes receiver_public_key = 3; // Receiver's EC Public Key
+ required bytes sender_public_key = 4; // Sender's EC Public Key
+ required uint64 nonce = 5; // Microseconds since epoch
+ optional bool requires_payment_message = 6 [default = false]; // Requires Payment/PaymentACK message exchange
+ optional bytes signature = 7; // Signature of this message using Receiver's EC key
+ optional bytes identifier = 8; // MUST use the identifier specified with the InvoiceRequest if the PaymentRequest is in response to an InvoiceRequest. Otherwise, use payment_request_hash or other unique value.
+}
+
+message EncryptedPayment {
+ required bytes encrypted_payment = 1; // AES-256-CBC Encrypted BIP70 Payment as defined in InvoiceRequest Spec
+ required bytes payment_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 Payment
+ required bytes sender_public_key = 3; // Sender's EC Public Key
+ required bytes receiver_public_key = 4; // Receiver's EC Public Key
+ required uint64 nonce = 5; // Microseconds since epoch
+ required bytes signature = 6; // Signature over EncryptedPayment with Sender's EC Key
+ optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any.
+}
+
+message EncryptedPaymentACK {
+ required bytes encrypted_payment_ack = 1; // AES-256-CBC Encrypted BIP70 PaymentACK as defined in InvoiceRequest Spec
+ required bytes payment_ack_hash = 2; // SHA256 Hash of Non-Encrypted, Serialized BIP70 PaymentACK
+ required bytes receiver_public_key = 3; // Receiver's EC Public Key
+ required bytes sender_public_key = 4; // Sender's EC Public Key
+ required uint64 nonce = 5; // Microseconds since epoch
+ required bytes signature = 6; // Signature over EncryptedPaymentACK with Receiver's EC Key
+ optional bytes identifier = 7; // Use the identifier specified with the EncryptedPaymentRequest, if any.
+}