Module: Mpp
- Extended by:
- T::Sig
- Defined in:
- lib/mpp/store.rb,
lib/mpp.rb,
lib/mpp/json.rb,
lib/mpp/units.rb,
lib/mpp/client.rb,
lib/mpp/errors.rb,
lib/mpp/server.rb,
lib/mpp/expires.rb,
lib/mpp/parsing.rb,
lib/mpp/receipt.rb,
lib/mpp/version.rb,
lib/mpp/challenge.rb,
lib/mpp/credential.rb,
lib/mpp/body_digest.rb,
lib/mpp/challenge_id.rb,
lib/mpp/methods/tempo.rb,
lib/mpp/server/intent.rb,
lib/mpp/server/method.rb,
lib/mpp/server/verify.rb,
lib/mpp/challenge_echo.rb,
lib/mpp/extensions/mcp.rb,
lib/mpp/methods/stripe.rb,
lib/mpp/secure_compare.rb,
lib/mpp/server/defaults.rb,
lib/mpp/client/transport.rb,
lib/mpp/server/decorator.rb,
lib/mpp/methods/tempo/rpc.rb,
lib/mpp/server/middleware.rb,
lib/mpp/server/mpp_handler.rb,
lib/mpp/methods/tempo/proof.rb,
lib/mpp/extensions/mcp/types.rb,
lib/mpp/extensions/mcp/errors.rb,
lib/mpp/extensions/mcp/verify.rb,
lib/mpp/methods/tempo/account.rb,
lib/mpp/methods/tempo/intents.rb,
lib/mpp/methods/tempo/schemas.rb,
lib/mpp/methods/tempo/defaults.rb,
lib/mpp/methods/tempo/keychain.rb,
lib/mpp/methods/stripe/defaults.rb,
lib/mpp/extensions/mcp/constants.rb,
lib/mpp/extensions/mcp/decorator.rb,
lib/mpp/methods/tempo/attribution.rb,
lib/mpp/methods/tempo/transaction.rb,
lib/mpp/extensions/mcp/capabilities.rb,
lib/mpp/methods/tempo/client_method.rb,
lib/mpp/methods/stripe/charge_intent.rb,
lib/mpp/methods/stripe/client_method.rb,
lib/mpp/methods/stripe/stripe_method.rb,
lib/mpp/methods/tempo/fee_payer_envelope.rb
Overview
typed: false frozen_string_literal: true
Defined Under Namespace
Modules: BodyDigest, Client, Expires, Extensions, Json, Methods, Parsing, Server, Units
Classes: BadRequestError, Challenge, ChallengeEcho, Credential, InvalidChallengeError, InvalidPayloadError, MalformedCredentialError, MemoryStore, ParseError, PaymentActionRequiredError, PaymentError, PaymentExpiredError, PaymentInsufficientError, PaymentMethodUnsupportedError, PaymentRequiredError, Receipt, VerificationError, VerificationFailedError
Constant Summary
collapse
- BASE_URI =
"https://paymentauth.org/problems"
- VERSION =
"0.1.1"
Class Method Summary
collapse
-
.b64url_encode(data) ⇒ Object
-
.b64url_encode_bytes(data) ⇒ Object
-
.create(method:, realm: nil, secret_key: nil) ⇒ Object
-
.generate_challenge_id(secret_key:, realm:, method:, intent:, request:, expires: nil, digest: nil, opaque: nil) ⇒ Object
-
.secure_compare(a, b) ⇒ Object
Class Method Details
.b64url_encode(data) ⇒ Object
45
46
47
|
# File 'lib/mpp/challenge_id.rb', line 45
def b64url_encode(data)
Base64.urlsafe_encode64(data.encode(Encoding::UTF_8), padding: false)
end
|
.b64url_encode_bytes(data) ⇒ Object
51
52
53
|
# File 'lib/mpp/challenge_id.rb', line 51
def b64url_encode_bytes(data)
Base64.urlsafe_encode64(data, padding: false)
end
|
.create(method:, realm: nil, secret_key: nil) ⇒ Object
43
44
45
|
# File 'lib/mpp.rb', line 43
def self.create(method:, realm: nil, secret_key: nil)
Server::MppHandler.create(method: method, realm: realm, secret_key: secret_key)
end
|
.generate_challenge_id(secret_key:, realm:, method:, intent:, request:, expires: nil, digest: nil, opaque: nil) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/mpp/challenge_id.rb', line 18
def generate_challenge_id(secret_key:, realm:, method:, intent:, request:, expires: nil, digest: nil, opaque: nil)
request_json = Json.compact_encode(request)
request_b64 = b64url_encode(request_json)
opaque_b64 = if opaque
opaque_json = Json.compact_encode(opaque)
b64url_encode(opaque_json)
else
""
end
hmac_input = [
realm,
method,
intent,
request_b64,
expires || "",
digest || "",
opaque_b64
].join("|")
mac = OpenSSL::HMAC.digest("SHA256", secret_key.encode(Encoding::UTF_8), hmac_input.encode(Encoding::UTF_8))
Base64.urlsafe_encode64(mac, padding: false)
end
|
.secure_compare(a, b) ⇒ Object
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/mpp/secure_compare.rb', line 15
def secure_compare(a, b)
return false if a.nil? || b.nil?
a_bytes = a.encode(Encoding::UTF_8)
b_bytes = b.encode(Encoding::UTF_8)
return false unless a_bytes.bytesize == b_bytes.bytesize
OpenSSL.fixed_length_secure_compare(a_bytes, b_bytes)
end
|