Module: OPP::Signature
- Defined in:
- lib/opp/signature.rb
Class Method Summary collapse
- .sign(document, private_key:) ⇒ Object
- .verify(document, public_key:) ⇒ Object
- .verify!(document, public_key:) ⇒ Object
Class Method Details
.sign(document, private_key:) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/opp/signature.rb', line 7 def sign(document, private_key:) unsigned = unsigned_document(document) bytes = KeyPair.from_private_key(private_key) .sign(Canonicalization.canonicalize(unsigned)) unsigned.merge( "signature" => { "algorithm" => "ed25519", "value" => Base64URL.encode(bytes) } ) rescue InvalidEncodingError => error raise InvalidSignatureError, error. end |
.verify(document, public_key:) ⇒ Object
22 23 24 25 26 |
# File 'lib/opp/signature.rb', line 22 def verify(document, public_key:) verify!(document, public_key:) rescue InvalidSignatureError false end |
.verify!(document, public_key:) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/opp/signature.rb', line 28 def verify!(document, public_key:) unsigned, signature = split(document) unless signature["algorithm"] == "ed25519" raise InvalidSignatureError, "unsupported signature algorithm" end bytes = Base64URL.decode(signature["value"], length: 64) verify_key = Ed25519::VerifyKey.new(PublicKey.decode(public_key)) verify_key.verify(bytes, Canonicalization.canonicalize(unsigned)) true rescue Ed25519::VerifyError, InvalidEncodingError, InvalidPublicKeyError => error raise InvalidSignatureError, error. end |