note description: "Summary description for {TEST_EC_BINARY}." author: "" date: "$Date$" revision: "$Revision$" class TEST_EC_BINARY inherit EQA_TEST_SET feature -- Binary math test_sec_t_multiply local d: INTEGER_X g: EC_POINT_F2M curve: EC_CURVE_F2M q: EC_POINT_F2M q_x_solution: INTEGER_X q_y_solution: INTEGER_X q_solution: EC_POINT_F2M correct: BOOLEAN do create d.make_from_hex_string ("00000003 A41434AA 99C2EF40 C8495B2E D9739CB2 155A1E0D") create g.make_sec_t163k1 create curve.make_sec_t163k1 create q_x_solution.make_from_hex_string ("00000003 7D529FA3 7E42195F 10111127 FFB2BB38 644806BC") create q_y_solution.make_from_hex_string ("00000004 47026EEE 8B34157F 3EB51BE5 185D2BE0 249ED776") create q_solution.make_curve_x_y (create {EC_FIELD_ELEMENT_F2M}.make (q_x_solution), create {EC_FIELD_ELEMENT_F2M}.make (q_y_solution)) q := g.product_value (d, curve) correct := q ~ q_solution assert ("test sec t multiply", correct) end test_sec_t_sign local d: INTEGER_X k: INTEGER_X e: INTEGER_X r_x_solution: INTEGER_X r_y_solution: INTEGER_X r_solution: EC_POINT_F2M curve: EC_CURVE_F2M r: INTEGER_X s: INTEGER_X s_solution: INTEGER_X r_point: EC_POINT_F2M r_int_solution: INTEGER_X correct: BOOLEAN g: EC_POINT_F2M do create curve.make_sec_t163k1 create g.make_sec_t163k1 create d.make_from_hex_string ("00000003 A41434AA 99C2EF40 C8495B2E D9739CB2 155A1E0D") create k.make_from_string ("936523985789236956265265265235675811949404040044") create r_x_solution.make_from_hex_string ("00000004 994D2C41 AA30E529 52B0A94E C6511328 C502DA9B") create r_y_solution.make_from_hex_string ("00000003 1FC936D7 3163B858 BBC5326D 77C19839 46405264") create e.make_from_hex_string ("A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D") create r_int_solution.make_from_hex_string ("994D2C41 AA30E529 52AEA846 2370471B 2B0A34AC") create s_solution.make_from_hex_string ("00000001 52F95CA1 5DA1997A 8C449E00 CD2AA2AC CB988D7F") create r_solution.make_curve_x_y (create {EC_FIELD_ELEMENT_F2M}.make (r_x_solution), create {EC_FIELD_ELEMENT_F2M}.make (r_y_solution)) r_point := g.product_value (k, curve) correct := r_point ~ r_solution assert ("test set t sign 1", correct) r := r_point.x.x \\ curve.n correct := r_int_solution ~ r assert ("test set t sign 2", correct) s := (k.inverse_value (curve.n) * (r * d + e)) \\ curve.n correct := s ~ s_solution assert ("test set t sign 3", correct) end test_sec_t_verify local q: EC_POINT_F2M d: INTEGER_X curve: EC_CURVE_F2M e: INTEGER_X r: INTEGER_X s: INTEGER_X u1: INTEGER_X u2: INTEGER_X u1_solution: INTEGER_X u2_solution: INTEGER_X correct: BOOLEAN u1g: EC_POINT_F2M u1g_solution: EC_POINT_F2M u1g_x: INTEGER_X u1g_y: INTEGER_X u2q: EC_POINT_F2M u2q_solution: EC_POINT_F2M u2q_x: INTEGER_X u2q_y: INTEGER_X r_x: INTEGER_X r_y: INTEGER_X r_solution: EC_POINT_F2M r_point: EC_POINT_F2M g: EC_POINT_F2M v: INTEGER_X do create curve.make_sec_t163k1 create d.make_from_hex_string ("00000003 A41434AA 99C2EF40 C8495B2E D9739CB2 155A1E0D") create r.make_from_hex_string ("994D2C41 AA30E529 52AEA846 2370471B 2B0A34AC") create s.make_from_hex_string ("00000001 52F95CA1 5DA1997A 8C449E00 CD2AA2AC CB988D7F") create e.make_from_hex_string ("A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D") create u1_solution.make_from_string ("5658067548292182333034494350975093404971930311298") create u2_solution.make_from_string ("2390570840421010673757367220187439778211658217319") create u1g_x.make_from_hex_string ("00000005 1B4B9235 90399545 34D77469 AC7434D7 45BE784D") create u1g_y.make_from_hex_string ("00000001 C657D070 935987CA 79976B31 6ED2F533 41058956") create u2q_x.make_from_hex_string ("07FD04AF 05DCAF73 39F6F89C 52EF27FE 94699AED") create u2q_y.make_from_hex_string ("AA84BE48 C0F1256F A31AAADD F4ADDDD5 AD1F0E14") create r_x.make_from_hex_string ("00000004 994D2C41 AA30E529 52B0A94E C6511328 C502DA9B") create r_y.make_from_hex_string ("00000003 1FC936D7 3163B858 BBC5326D 77C19839 46405264") create u1g_solution.make_curve_x_y (create {EC_FIELD_ELEMENT_F2M}.make (u1g_x), create {EC_FIELD_ELEMENT_F2M}.make (u1g_y)) create u2q_solution.make_curve_x_y (create {EC_FIELD_ELEMENT_F2M}.make (u2q_x), create {EC_FIELD_ELEMENT_F2M}.make (u2q_y)) create r_solution.make_curve_x_y (create {EC_FIELD_ELEMENT_F2M}.make (r_x), create {EC_FIELD_ELEMENT_F2M}.make (r_y)) create g.make_sec_t163k1 q := g.product_value (d, curve) u1 := (e * s.inverse_value (curve.n) \\ curve.n) u2 := (r * s.inverse_value (curve.n) \\ curve.n) correct := u1 ~ u1_solution assert ("test sec t verify 1", correct) correct := u2 ~ u2_solution assert ("test sec t verify 2", correct) u1g := g.product_value (u1, curve) correct := u1g ~ u1g_solution assert ("test sec t verify 3", correct) u2q := q.product_value (u2, curve) correct := u2q ~ u2q_solution assert ("test sec t verify 4", correct) r_point := u1g.plus_value (u2q, curve) correct := r_point ~ r_solution v := r_point.x.x \\ curve.n correct := v ~ r assert ("test sec t verify 5", correct) end feature --Polynomial reflexive tests test_sec_t113r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t113r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t113r1 reflexive", correct) end test_sec_t113r2_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t113r2 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t113r2 reflexive", correct) end test_sec_t131r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t131r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t131r1 reflexive", correct) end test_sec_t131r2_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t131r2 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t131r2 reflexive", correct) end test_sec_t163k1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t163k1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t163k1 reflexive", correct) end test_sec_t163r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t163r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t163r1 reflexive", correct) end test_sec_t163r2_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t163r2 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t163r2 reflexive", correct) end test_sec_t193r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t193r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t193r1 reflexive", correct) end test_sec_t193r2_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t193r2 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t193r2 reflexive", correct) end test_sec_t233k1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t233k1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t233k1 reflexive", correct) end test_sec_t233r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t233r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t233r1 reflexive", correct) end test_sec_t239k1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t239k1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t239k1 reflexive", correct) end test_sec_t283k1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t283k1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t283k1 reflexive", correct) end test_sec_t283r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t283r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t283r1 reflexive", correct) end test_sec_t409k1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t409k1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t409k1 reflexive", correct) end test_sec_t409r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t409r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t409r1 reflexive", correct) end test_sec_t571k1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t571k1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t571k1 reflexive", correct) end test_sec_t571r1_reflexive local key: EC_KEY_PAIR message: INTEGER_X signature: TUPLE [r: INTEGER_X s: INTEGER_X] correct: BOOLEAN do create key.make_sec_t571r1 create message.make_random_max (key.private.params.n) signature := key.private.sign (message) correct := key.public.verify (message, signature) assert ("test sec t571r1 reflexive", correct) end test_reduce_1 local one: INTEGER_X a: INTEGER_X b: INTEGER_X n: INTEGER_X curve: EC_CURVE_F2M element: EC_FIELD_ELEMENT_F2M expected: INTEGER_X do create expected.make_from_hex_string ("13b6c2e54bb8c935c13fab54639da") create one.make_from_hex_string ("54505401551104100555400451414110050100000151441011150550") create a.make_from_hex_string ("3088250ca6e7c7fe649ce85820f7") create b.make_from_hex_string ("e8bee4d3e2260744188be0e9c723") create n.make_from_hex_string ("100000000000000d9ccec8a39e56f") create curve.make (0x71, 9, 0, 0, a, b, n) create element.make (one) element.reduce (one, curve) assert ("test reduce 1", one ~ expected) end test_square_1 local one: INTEGER_X a: INTEGER_X b: INTEGER_X n: INTEGER_X curve: EC_CURVE_F2M element: EC_FIELD_ELEMENT_F2M expected: INTEGER_X do create one.make_from_hex_string ("ece1f5243f82d99431001da4573c") create expected.make_from_hex_string ("13b6c2e54bb8c935c13fab54639da") create a.make_from_hex_string ("3088250ca6e7c7fe649ce85820f7") create b.make_from_hex_string ("e8bee4d3e2260744188be0e9c723") create n.make_from_hex_string ("100000000000000d9ccec8a39e56f") create curve.make (0x71, 9, 0, 0, a, b, n) create element.make (one) element.square (curve) assert ("test square 1", element.x ~ expected) end test_square_2 local parameters: EC_DOMAIN_PARAMETERS_F2M one: INTEGER_X element: EC_FIELD_ELEMENT_F2M expected: INTEGER_X do create one.make_from_hex_string ("3 ffffffff ffffffff ffffffff ffffffff") create expected.make_from_hex_string ("aaaaaaaaaaaaaaaaaaaaaaaaaaaabfee") create parameters.make_sec_t131r1 create element.make (one) element.square (parameters.curve) assert ("test square 2", element.x ~ expected) end test_square_3 local parameters: EC_DOMAIN_PARAMETERS_F2M one: INTEGER_X element: EC_FIELD_ELEMENT_F2M expected: INTEGER_X do create parameters.make_sec_t131r1 create one.make_from_hex_string ("b11acac3b1c28415a4e733010375a5b8") create expected.make_from_hex_string ("18b11dd51ffe1f2aeef0ec79fae0b67f7") create element.make (one) element.square (parameters.curve) assert ("test square 3", element.x ~ expected) end test_product_1 local curve: EC_CURVE_F2M one: EC_POINT_F2M expected: EC_POINT_F2M multiplicand: INTEGER_X do create one.make_curve_x_y (create {INTEGER_X}.make_from_hex_string ("9d73616f35f4ab1407d73562c10f"), create {INTEGER_X}.make_from_hex_string ("a52830277958ee84d1315ed31886")) create expected.make_curve_x_y (create {INTEGER_X}.make_from_hex_string ("1a42d8acf7568670dfd067fde38ff"), create {INTEGER_X}.make_from_hex_string ("11747870124d247a94b527a2fbc2e")) create multiplicand.make_from_hex_string ("a077518c809013ae8ec6baecd515") create curve.make (0x71, 9, 0, 0, create {INTEGER_X}.make_from_hex_string ("3088250ca6e7c7fe649ce85820f7"), create {INTEGER_X}.make_from_hex_string ("e8bee4d3e2260744188be0e9c723"), create {INTEGER_X}.make_from_hex_string ("100000000000000d9ccec8a39e56f")) one.product (multiplicand, curve) assert ("test product 1", one ~ expected) end test_product_2 local curve: EC_CURVE_F2M one: EC_FIELD_ELEMENT_F2M expected: EC_FIELD_ELEMENT_F2M multiplicand: INTEGER_X do create one.make (create {INTEGER_X}.make_from_hex_string ("a52830277958ee84d1315ed31886")) create multiplicand.make_from_hex_string ("fa499cd55090de5385193e34792c") create expected.make (create {INTEGER_X}.make_from_hex_string ("7192944b0a76728036d728c69633")) create curve.make (0x71, 9, 0, 0, create {INTEGER_X}.make_from_hex_string ("3088250ca6e7c7fe649ce85820f7"), create {INTEGER_X}.make_from_hex_string ("e8bee4d3e2260744188be0e9c723"), create {INTEGER_X}.make_from_hex_string ("100000000000000d9ccec8a39e56f")) one.product (multiplicand, curve) assert ("test product 2", one ~ expected) end end