python-sdk icon indicating copy to clipboard operation
python-sdk copied to clipboard

[mainnet] Add signing/verifying Aleo values

Open Meshiest opened this issue 1 year ago • 0 comments

Same as #37 but for mainnet

Description

Signing/verifying aleo values is present in the snarkOS CLI and the leo CLI. Verification is present in leo.

As Aleo does not natively support byte-encoded messages, this feature is necessary for generating signatures programmatically for Aleo/Leo programs. The original sign and verify functions have not been altered for backwards compatibility.

Features

This PR add the following functions (where 5field is a valid Aleo value

  • Account.sign_value("5field")
  • Account.verify_value(Signature, "5field")
  • Signature.sign_value(PrivateKey, "5field")
  • Signature.verify_value(Address, "5field")
  • PrivateKey.sign_value("5field")

These functions automatically convert the string value into an Aleo value, then the Aleo value into Fields, which can be signed/verified natively. This is in part to bring parity closer to the CLI implementations, but also so a Value would not need to be constructed for every sign/verify.

Docs & Testing

Docs were updated to include a copy of the sign/verify function usage, but with sign_value and verify_value. Tests were also updated to include the new functions.

Validation

Signatures produced by this code have additionally been tested against the following program on Leo Playground:

program helloworld_pq56kj9.aleo {
  transition main(public a: address, b: signature, c: field) -> bool {
      return b.verify(a, c);
  }
}

Signature generation:

>>> import aleo
>>> key = aleo.PrivateKey.from_string('APrivateKey1zkp3dQx4WASWYQVWKkq14v3RoQDfY2kbLssUj7iifi1VUQ6')
>>> str(key.sign_value('5field'))
'sign1zfmsaxvjajwje6ekk00wd0kyjc6p3j9xmkhkmc79064ge26q7ypenhsmwuel4gzx2jfpgl0lw9vqln74ljvtr00zkum0z0pe7tvd7qravkjwgtm3t90lvxdrjjl07td0k4w5sysm7w22lfhfkqgdk690pcu5an22wssu4q6d3754cljxugdnrnccneldp79m3j5drzxs0s4sxwet8kv'
$ leo run main aleo184vuwr5u7u0ha5f5k44067dd2uaqewxx6pe5ltha5pv99wvhfqxqv339h4 sign1zfmsaxvjajwje6ekk00wd0kyjc6p3j9xmkhkmc79064ge26q7ypenhsmwuel
4gzx2jfpgl0lw9vqln74ljvtr00zkum0z0pe7tvd7qravkjwgtm3t90lvxdrjjl07td0k4w5sysm7w22lfhfkqgdk690pcu5an22wssu4q6d3754cljxugdnrnccneldp79m3j5drzxs0s4s
xwet8kv 5field

image

Meshiest avatar Apr 16 '24 01:04 Meshiest