def special_signing( kL, kR, A, M ): # private/secret key left and right sides kL & kR, public key A, and message M in bytes r = h512(kR + M) r = int.from_bytes(r, 'little') % ed25519.l # base order n R = ed25519.encodepoint(ed25519.scalarmultbase(r)) x = int.from_bytes(h512(R + A + M), 'little') S = ed25519.encodeint((r + (x * int.from_bytes(kL, 'little'))) % ed25519.l) return R + S
def intToHex(i): return binascii.hexlify(ed25519.encodeint(i)) #hexlify does bytes to hex
def Signature(m, sk): #note this seems to return nicely sized version of the signature #contrast with, i.e. tweetnacl.. sk2 = ed25519.encodeint(MiniNero.hexToInt(sk)) pk = ed25519.publickey(sk2) return binascii.hexlify(ed25519.signature(m, sk2, pk))
def HexSigningPubKey(s): return binascii.hexlify(ed25519.publickey(ed25519.encodeint(MiniNero.hexToInt(s))))
def Signature(m, sk): sk2 = ed25519.encodeint(MiniNero.hexToInt(sk)) pk = ed25519.publickey(sk2) return binascii.hexlify(ed25519.signature(m, sk2, pk))
def int2hex(int): ## converts an integer to a little endian encoded hex string return hexlify(ed25519.encodeint(int))
import ed25519 sk = 32 * chr(0) pk = ed25519.publickey(sk) print "publickey for 0 is", pk.encode('hex') for i in [0, 1, 10]: print "encodeint %d = %s" % (i, ed25519.encodeint(i).encode('hex')) for p in [ (0, 0), (1, 1), (10, 0), (1, 10), (9639205628789703341510410801487549615560488670885798085067615194958049462616, 18930617471878267742194159801949745215346600387277955685031939302387136031291 ) ]: print "encodepoint %s = %s" % (repr(p), ed25519.encodepoint(p).encode('hex')) msg = "This is a secret message" sig = ed25519.signature(msg, sk, pk) print 'signature("%s") = %s' % (msg, sig.encode('hex')) try: ed25519.checkvalid(sig, msg, pk) print 'check signature result: true' except: print 'check signature result: false'