#use"crylib.ml";; #use"input.ml";; let rabinencrypt m n = bpowmod m b2 n;; let rabindecrypt c p q n = let (yp,yq) = bexteuclid p q in let mp = bpowmod c (bdiv (bsucc p) b4) p in let mq = bpowmod c (bdiv (bsucc q) b4) q in let yppmq = bmult (bmult yp p) mq in let yqqmp = bmult (bmult yq q) mp in let r = (badd yppmq yqqmp) % n in let s = (bsub yppmq yqqmp) % n in let negr = bsub n r in let negs = bsub n s in (r, negr, s, negs);; let rabindecrypt' c p q n = let (yp,yq) = bexteuclid p q in .< let c' = .~ c in .~(let mp = bpowmod' .. (bdiv (bsucc p) b4) p in let mq = bpowmod' .. (bdiv (bsucc q) b4) q in let yppmq = bmult' (bmult yp p) mq in let yqqmp = bmult' (bmult yq q) mp in .< let yppmq' = .~ yppmq in let yqqmp' = .~ yqqmp in let r = (badd yppmq' yqqmp') % n in let s = (bsub yppmq' yqqmp') % n in let negr = bsub n r in let negs = bsub n s in (r, negr, s, negs)>.)>.;; let (yp,yq) = bexteuclid p155 q155;; let ypp = bmult yp p155;; let yqq = bmult yq q155;; let p14 = bdiv (bsucc p155) b4;; let q14 = bdiv (bsucc q155) b4;; let rabindecrypt2 c = let mp = bpowmod c p14 p155 in let mq = bpowmod c q14 q155 in let r = (badd (bmult ypp mq) (bmult yqq mp)) % n155 in let s = (bsub (bmult ypp mq) (bmult yqq mp)) % n155 in let negr = bsub n155 r in let negs = bsub n155 s in (r, negr, s, negs);; let c = rabinencrypt m511 n155;; Trx.init_times();; let u1 = Trx.time more "u1" (fun () -> rabindecrypt c p155 q155 n155);; let u2 = Trx.time more "u2" (fun () -> rabindecrypt2 c);; let t1 = Trx.time less "t1" (fun () -> .< fun x -> .~(rabindecrypt' .. p155 q155 n155) >.);; let co = Trx.time less "co" (fun () -> .! t1);; let t2 = Trx.time more "t2" (fun () -> co c);; Trx.print_times();;