ceremonyclient/bedlam/apps/garbled/examples/montgomery.qcl
Cassandra Heart e51992f3e8
OT
2025-03-23 21:11:16 -05:00

40 lines
706 B
Go

// -*- go -*-
//
// RSA encryption with Montgomery modular multiplication.
//
// ./garbled -e -v -i 0x321af130 examples/montgomery.qcl
// ./garbled -v -i 0x6d7472,9,0xd60b2b09,0x10001 examples/montgomery.qcl
package main
import (
"math"
)
type Size = uint64
type Garbler struct {
msg Size
privShare Size
pubN Size
pubE Size
}
func main(g Garbler, privShare Size) (uint, uint) {
priv := g.privShare + privShare
cipher := Encrypt(g.msg, g.pubE, g.pubN)
plain := Decrypt(cipher, priv, g.pubN)
return cipher, plain
}
func Encrypt(msg, e, n uint) uint {
return math.ExpMontgomery(msg, e, n)
}
func Decrypt(cipher, d, n uint) uint {
return math.ExpMontgomery(cipher, d, n)
}