[mainnet] Add signing/verifying Aleo values
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