note description: "Objects that ..." author: "Colin LeMahieu" date: "$Date$" revision: "$Revision$" quote: "When the government's boot is on your throat, whether it is a left boot or a right boot is of no consequence. - Gary Lloyd" class EC_CURVE_F2M inherit EC_CURVE redefine is_equal, a, b end STANDARD_CURVES undefine is_equal end F2M_REPRESENTATIONS undefine is_equal end create make, make_sec_t113r1, make_sec_t113r2, make_sec_t131r1, make_sec_t131r2, make_sec_t163k1, make_sec_t163r1, make_sec_t163r2, make_sec_t193r1, make_sec_t193r2, make_sec_t233k1, make_sec_t233r1, make_sec_t239k1, make_sec_t283k1, make_sec_t283r1, make_sec_t409k1, make_sec_t409r1, make_sec_t571k1, make_sec_t571r1, make_k163, make_k233, make_k283, make_k409, make_k571, make_b163, make_b233, make_b283, make_b409, make_b571 feature -- SEC curves make_sec_t113r1 do m := sec_t113r1_m k1 := sec_t113r1_k1 k2 := sec_t113r1_k2 k3 := sec_t113r1_k3 n := sec_t113r1_r create a.make (sec_t113r1_a) create b.make (sec_t113r1_b) end make_sec_t113r2 do m := sec_t113r2_m k1 := sec_t113r2_k1 k2 := sec_t113r2_k2 k3 := sec_t113r2_k3 n := sec_t113r2_r create a.make (sec_t113r2_a) create b.make (sec_t113r2_b) end make_sec_t131r1 do m := sec_t131r1_m k1 := sec_t131r1_k1 k2 := sec_t131r1_k2 k3 := sec_t131r1_k3 n := sec_t131r1_r create a.make (sec_t131r1_a) create b.make (sec_t131r1_b) end make_sec_t131r2 do m := sec_t131r2_m k1 := sec_t131r2_k1 k2 := sec_t131r2_k2 k3 := sec_t131r2_k3 n := sec_t131r2_r create a.make (sec_t131r2_a) create b.make (sec_t131r2_b) end make_sec_t163k1 do m := sec_t163k1_m k1 := sec_t163k1_k1 k2 := sec_t163k1_k2 k3 := sec_t163k1_k3 n := sec_t163k1_r create a.make (sec_t163k1_a) create b.make (sec_t163k1_b) end make_sec_t163r1 do m := sec_t163r1_m k1 := sec_t163r1_k1 k2 := sec_t163r1_k2 k3 := sec_t163r1_k3 n := sec_t163r1_r create a.make (sec_t163r1_a) create b.make (sec_t163r1_b) end make_sec_t163r2 do m := sec_t163r2_m k1 := sec_t163r2_k1 k2 := sec_t163r2_k2 k3 := sec_t163r2_k3 n := sec_t163r1_r create a.make (sec_t163r2_a) create b.make (sec_t163r2_b) end make_sec_t193r1 do m := sec_t193r1_m k1 := sec_t193r1_k1 k2 := sec_t193r1_k2 k3 := sec_t193r1_k3 n := sec_t193r1_r create a.make (sec_t193r1_a) create b.make (sec_t193r1_b) end make_sec_t193r2 do m := sec_t193r2_m k1 := sec_t193r2_k1 k2 := sec_t193r2_k2 k3 := sec_t193r2_k3 n := sec_t193r2_r create a.make (sec_t193r2_a) create b.make (sec_t193r2_b) end make_sec_t233k1 do m := sec_t233k1_m k1 := sec_t233k1_k1 k2 := sec_t233k1_k2 k3 := sec_t233k1_k3 n := sec_t233k1_r create a.make (sec_t233k1_a) create b.make (sec_t233k1_b) end make_sec_t233r1 do m := sec_t233r1_m k1 := sec_t233r1_k1 k2 := sec_t233r1_k2 k3 := sec_t233r1_k3 n := sec_t233r1_r create a.make (sec_t233r1_a) create b.make (sec_t233r1_b) end make_sec_t239k1 do m := sec_t239k1_m k1 := sec_t239k1_k1 k2 := sec_t239k1_k2 k3 := sec_t239k1_k3 n := sec_t239k1_r create a.make (sec_t239k1_a) create b.make (sec_t239k1_b) end make_sec_t283k1 do m := sec_t283k1_m k1 := sec_t283k1_k1 k2 := sec_t283k1_k2 k3 := sec_t283k1_k3 n := sec_t283k1_r create a.make (sec_t283k1_a) create b.make (sec_t283k1_b) end make_sec_t283r1 do m := sec_t283r1_m k1 := sec_t283r1_k1 k2 := sec_t283r1_k2 k3 := sec_t283r1_k3 n := sec_t283r1_r create a.make (sec_t283r1_a) create b.make (sec_t283r1_b) end make_sec_t409k1 do m := sec_t409k1_m k1 := sec_t409k1_k1 k2 := sec_t409k1_k2 k3 := sec_t409k1_k3 n := sec_t409k1_r create a.make (sec_t409k1_a) create b.make (sec_t409k1_b) end make_sec_t409r1 do m := sec_t409r1_m k1 := sec_t409r1_k1 k2 := sec_t409r1_k2 k3 := sec_t409r1_k3 n := sec_t409r1_r create a.make (sec_t409r1_a) create b.make (sec_t409r1_b) end make_sec_t571k1 do m := sec_t571k1_m k1 := sec_t571k1_k1 k2 := sec_t571k1_k2 k3 := sec_t571k1_k3 n := sec_t571k1_r create a.make (sec_t571k1_a) create b.make (sec_t571k1_b) end make_sec_t571r1 do m := sec_t571r1_m k1 := sec_t571r1_k1 k2 := sec_t571r1_k2 k3 := sec_t571r1_k3 n := sec_t571r1_r create a.make (sec_t571r1_a) create b.make (sec_t571r1_b) end feature -- FIPS curves make_k163 do m := k163_m k1 := k163_k1 k2 := k163_k2 k3 := k163_k3 n := k163_r create a.make (k163_a) create b.make (k163_b) end make_k233 do m := k233_m k1 := k233_k1 k2 := k233_k2 k3 := k233_k3 n := k233_r create a.make (k233_a) create b.make (k233_b) end make_k283 do m := k283_m k1 := k283_k1 k2 := k283_k2 k3 := k283_k3 n := k283_r create a.make (k283_a) create b.make (k283_b) end make_k409 do m := k409_m k1 := k409_k1 k2 := k409_k2 k3 := k409_k3 n := k409_r create a.make (k409_a) create b.make (k409_b) end make_k571 do m := k571_m k1 := k571_k1 k2 := k571_k2 k3 := k571_k3 n := k571_r create a.make (k571_a) create b.make (k571_b) end make_b163 do m := b163_m k1 := b163_k1 k2 := b163_k2 k3 := b163_k3 n := b163_r create a.make (b163_a) create b.make (b163_b) end make_b233 do m := b233_m k1 := b233_k1 k2 := b233_k2 k3 := b233_k3 n := b233_r create a.make (b233_a) create b.make (b233_b) end make_b283 do m := b283_m k1 := b283_k1 k2 := b283_k2 k3 := b283_k3 n := b283_r create a.make (b283_a) create b.make (b283_b) end make_b409 do m := b409_m k1 := b409_k1 k2 := b409_k2 k3 := b409_k3 n := b409_r create a.make (b409_a) create b.make (b409_b) end make_b571 do m := b571_m k1 := b571_k1 k2 := b571_k2 k3 := b571_k3 n := b571_r create a.make (b571_a) create b.make (b571_b) end make (m_new: INTEGER_32 k1_new: INTEGER_32 k2_new: INTEGER_32 k3_new: INTEGER_32 a_a: EC_FIELD_ELEMENT_F2M b_a: EC_FIELD_ELEMENT_F2M n_a: INTEGER_X) require K1_greater_Than_zero: k1_new > 0 k2_and_k3_equal_zero: (k2_new = 0) implies (k3_new = 0) k2_greater_than_k1: (k2_new /= 0) implies (k2_new > k1_new) k3_greater_than_k2: (k3_new /= 0) implies (k3_new > k2_new) do m := m_new k1 := k1_new k2 := k2_new k3 := k3_new a := a_a b := b_a n := n_a end feature -- F2M components m: INTEGER_32 n: INTEGER_X k1: INTEGER_32 k2: INTEGER_32 k3: INTEGER_32 feature representation: INTEGER do if k2 = 0 then result := TPB else result := PPB end end is_equal (other: like current): BOOLEAN do Result := (m = other.m) and (k1 = other.k1) and (k2 = other.k2) and (k3 = other.k3) and a.x ~ other.a.x and b.x ~ other.b.x end a: EC_FIELD_ELEMENT_F2M b: EC_FIELD_ELEMENT_F2M invariant -- k2_smaller: k2 = 0 implies k2 < k3 -- k2_zero: k2 = 0 implies k2 /= 0 K1_greater_Than_zero: k1 > 0 k2_and_k3_equal_zero: (k2 = 0) implies (k3 = 0) k2_greater_than_k1: (k2 /= 0) implies (k2 > k1) k3_greater_than_k2: (k3 /= 0) implies (k3 > k2) end