Class: Signing
- Inherits:
-
Object
- Object
- Signing
- Defined in:
- lib/credify/signing.rb
Instance Attribute Summary collapse
-
#signing_key ⇒ Object
readonly
Returns the value of attribute signing_key.
Instance Method Summary collapse
-
#export_seed ⇒ String
export_seed.
-
#generate_approval_token(client_id, entity_id, approved_scopes, offer_code = nil) ⇒ String
generate_approval_token.
-
#generate_claim_token(provider_id, entity_id, scope_name, claim) ⇒ Hash
generate_claim_token.
-
#generate_jwt(payload) ⇒ String
generate_jwt.
-
#generate_key_pair ⇒ Boolean
generate_key_pair.
-
#generate_request_token(client_id, encryption_public_key, scopes, offer_code = nil) ⇒ String
generate_request_token.
-
#import_seed(seed) ⇒ Boolean
import_seed.
-
#parse_jwt(jwt) ⇒ Hash
parse_jwt.
-
#sign(message) ⇒ String
sign.
-
#verify(signature, message) ⇒ Boolean
verify.
-
#verify_jwt(jwt) ⇒ Boolean
verify_jwt.
Instance Attribute Details
#signing_key ⇒ Object (readonly)
Returns the value of attribute signing_key.
8 9 10 |
# File 'lib/credify/signing.rb', line 8 def signing_key @signing_key end |
Instance Method Details
#export_seed ⇒ String
export_seed
56 57 58 59 60 61 |
# File 'lib/credify/signing.rb', line 56 def export_seed if @signing_key.nil? raise Exception.new 'Please pass signing key' end Credify::Helpers.short_urlsafe_encode64(@signing_key.seed) end |
#generate_approval_token(client_id, entity_id, approved_scopes, offer_code = nil) ⇒ String
generate_approval_token
111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/credify/signing.rb', line 111 def generate_approval_token(client_id, entity_id, approved_scopes, offer_code = nil) # minus 60 just in case this timestamp could collide one in the server side. now = Time.now.to_i - 60 payload = { client_id: client_id, iat: now, iss: entity_id, scopes: approved_scopes.join(' ') } unless offer_code.nil? payload[:offer_code] = offer_code end generate_jwt(payload) end |
#generate_claim_token(provider_id, entity_id, scope_name, claim) ⇒ Hash
generate_claim_token
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/credify/signing.rb', line 133 def generate_claim_token(provider_id, entity_id, scope_name, claim) # minus 60 just in case this timestamp could collide one in the server side. now = Time.now.to_i - 60 commitment = Credify::Helpers.generate_commitment data = claim[:"#{scope_name}:commitment"] = commitment scope_hash = Credify::Helpers.sha256(data) puts scope_hash payload = { iat: now, iss: provider_id, user_id: entity_id, scope_name: scope_name, scope_hash: scope_hash } token = generate_jwt(payload) { token: token, commitment: commitment } end |
#generate_jwt(payload) ⇒ String
generate_jwt
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/credify/signing.rb', line 67 def generate_jwt(payload) if payload.empty? raise Exception.new 'Invalid payload' end header = { alg: 'EdDSA', typ: 'JWT' } = (header, payload) signature = sign() << '.' << signature end |
#generate_key_pair ⇒ Boolean
generate_key_pair
13 14 15 16 |
# File 'lib/credify/signing.rb', line 13 def generate_key_pair @signing_key = Ed25519::SigningKey.generate @signing_key.nil? end |
#generate_request_token(client_id, encryption_public_key, scopes, offer_code = nil) ⇒ String
generate_request_token
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/credify/signing.rb', line 158 def generate_request_token(client_id, encryption_public_key, scopes, offer_code = nil) unless scopes.include?('openid') raise Exception 'scopes need to contain openid' end # minus 60 just in case this timestamp could collide one in the server side. now = Time.now.to_i - 60 payload = { iat: now, iss: client_id, encryption_public_key: encryption_public_key, scopes: scopes.join(' ') } unless offer_code.nil? payload[:offer_code] = offer_code end generate_jwt(payload) end |
#import_seed(seed) ⇒ Boolean
import_seed
22 23 24 25 26 |
# File 'lib/credify/signing.rb', line 22 def import_seed(seed) binary = Credify::Helpers.short_urlsafe_decode64(seed) @signing_key = Ed25519::SigningKey.new(binary) @signing_key.nil? end |
#parse_jwt(jwt) ⇒ Hash
parse_jwt
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/credify/signing.rb', line 84 def parse_jwt(jwt) components = jwt.split('.') unless components.length == 3 raise Exception 'JST is invalid' end header = JSON.parse(Credify::Helpers.short_urlsafe_decode64(components[0])) payload = JSON.parse(Credify::Helpers.short_urlsafe_decode64(components[1])) { header: header, payload: payload, signature: components[2] } end |
#sign(message) ⇒ String
sign
32 33 34 35 36 37 38 |
# File 'lib/credify/signing.rb', line 32 def sign() if @signing_key.nil? raise Exception.new 'Please pass signing key' end signature = @signing_key.sign() Credify::Helpers.short_urlsafe_encode64(signature) end |
#verify(signature, message) ⇒ Boolean
verify
45 46 47 48 49 50 51 |
# File 'lib/credify/signing.rb', line 45 def verify(signature, ) if @signing_key.nil? raise Exception.new 'Please pass signing key' end raw_sign = Credify::Helpers.short_urlsafe_decode64(signature) @signing_key.verify_key.verify raw_sign, end |
#verify_jwt(jwt) ⇒ Boolean
verify_jwt
99 100 101 102 |
# File 'lib/credify/signing.rb', line 99 def verify_jwt(jwt) = (jwt[:header], jwt[:payload]) verify(jwt[:signature], ) end |