Module: StarkCore::Utils::Parse
- Defined in:
- lib/utils/parse.rb
Class Method Summary collapse
- .get_public_key_pem(sdk_version:, host:, api_version:, user:, language:, timeout:, refresh: false, **query) ⇒ Object
- .parse_and_verify(content:, signature:, sdk_version:, api_version:, host:, resource: nil, user:, language:, timeout:, key: nil) ⇒ Object
- .verify(content:, signature:, sdk_version:, api_version:, host:, user:, language:, timeout:) ⇒ Object
- .verify_signature(content:, signature:, sdk_version:, host:, api_version:, user:, language:, timeout:, refresh: false) ⇒ Object
Class Method Details
.get_public_key_pem(sdk_version:, host:, api_version:, user:, language:, timeout:, refresh: false, **query) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/utils/parse.rb', line 61 def self.get_public_key_pem(sdk_version:, host:, api_version:, user:, language:, timeout:, refresh: false, **query) public_key = StarkCore::Utils::Cache.starkbank_public_key return public_key unless (public_key.nil? || refresh) pem = StarkCore::Utils::Rest.get_raw( sdk_version: sdk_version, host: host, api_version: api_version, path: "public-key", user: user, language: language, timeout: timeout, query: {"limit": 1}, prefix: nil, raiseException: true ).json['publicKeys'][0]['content'] public_key = EllipticCurve::PublicKey.fromPem(pem) StarkCore::Utils::Cache.starkbank_public_key = public_key return public_key end |
.parse_and_verify(content:, signature:, sdk_version:, api_version:, host:, resource: nil, user:, language:, timeout:, key: nil) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/utils/parse.rb', line 13 def self.parse_and_verify(content:, signature:, sdk_version:, api_version:, host:, resource: nil, user:, language:, timeout:, key: nil) content = verify(content: content, signature: signature, sdk_version: sdk_version, api_version: api_version, host: host, user: user, language: language, timeout: timeout) json = JSON.parse(content) json = JSON.parse(content)[key] unless key.nil? StarkCore::Utils::API.from_api_json(resource[:resource_maker], json) end |
.verify(content:, signature:, sdk_version:, api_version:, host:, user:, language:, timeout:) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/utils/parse.rb', line 24 def self.verify(content:, signature:, sdk_version:, api_version:, host:, user:, language:, timeout:) begin signature = EllipticCurve::Signature.fromBase64(signature) rescue raise(StarkCore::Error::InvalidSignatureError, 'The provided signature is not valid') end if verify_signature(content: content, signature: signature, sdk_version: sdk_version, host: host, api_version: api_version, user: user, language: language, timeout: timeout) return content end if verify_signature(content: content, signature: signature, sdk_version: sdk_version, host: host, api_version: api_version, user: user, language: language, timeout: timeout, refresh: true) return content end raise(StarkCore::Error::InvalidSignatureError, 'The provided signature and content do not match the Stark bank public key') end |
.verify_signature(content:, signature:, sdk_version:, host:, api_version:, user:, language:, timeout:, refresh: false) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/utils/parse.rb', line 47 def self.verify_signature(content:, signature:, sdk_version:, host:, api_version:, user:, language:, timeout:, refresh: false) public_key = get_public_key_pem( sdk_version: sdk_version, host: host, api_version: api_version, user: user, language: language, timeout: timeout, refresh: refresh ) return EllipticCurve::Ecdsa.verify(content, signature, public_key) end |