SigningKey.sm 1006 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/ruby
  2. var Ed25519 = require('Crypt::PK::Ed25519')
  3. class SigningKey() {
  4. has key = Ed25519.new.generate_key
  5. method keyFromPublic(String public) {
  6. key = Ed25519.new
  7. key.import_key_raw(pack('H*', public), 'public')
  8. self
  9. }
  10. method keyFromPrivate(String private) {
  11. key = Ed25519.new
  12. key.import_key_raw(pack('H*', private), 'private')
  13. self
  14. }
  15. method load(String file) {
  16. var private = File(file).read
  17. self.keyFromPrivate(private)
  18. }
  19. method store(String file) {
  20. File(file).write(self.getPrivate)
  21. self
  22. }
  23. method getPublic() {
  24. unpack('H*', key.export_key_raw('public'))
  25. }
  26. method getPrivate() {
  27. unpack('H*', key.export_key_raw('private'))
  28. }
  29. method sign(String message) {
  30. unpack('H*', key.sign_message(message))
  31. }
  32. method verify(String sig, String message) {
  33. key.verify_message(pack('H*', sig), message) ? true : false
  34. }
  35. }