Ask Your Question

Computing element norm from its conjugates in towered extension fields

asked 2021-12-15 16:23:38 +0200

mmagician gravatar image

updated 2022-10-15 13:41:12 +0200

FrédéricC gravatar image


I'm trying to compute the norm of an element by using the product of its conjugates. This works fine for extensions of prime fields, but seems to give me results different than expected for extension towers.

Example from BLS12-381 curve:

field_modulus = 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787                                                                          

Fp = GF(field_modulus)
R.<x> = Fp[]
Fp2.<u> = Fp.extension(x^2 + 1)
R2.<y> = Fp2[]
Fp6.<v> = Fp2.extension(y^3 - (u+1))
# This works for Fp2, which is an extension of a prime field
elem_fp2 = Fp2([1, 1])
fp2_norm_from_conjugates = elem_fp2 * elem_fp2 ^ field_modulus
elem_fp2.norm() == fp2_norm_from_conjugates
# But not for the towered extension Fp6  
elem_fp6 = Fp6([1, 1, Fp2([2, 3])])
fp6_norm_from_conjugates = elem_fp6 * (elem_fp6 ^ field_modulus) * (elem_fp6 ^ (field_modulus^2))
elem_fp6.norm() == fp6_norm_from_conjugates
# False

What I am expecting from the above is that norm() maps an element from the extension field to an element in the base field, i.e. elem_fp2.norm() to return an element of Fp and elem_fp6.norm() an element of Fp2. This is indeed true when I use the norm() method (which, under the hood uses matrix().determinant()), but fails when using the element's conjugates in the towered field.

(I'm using pages 57-58 of the [Finite Fields] (https :// book as reference, which states that I should just be able to multiply the elements and all its conjugates to get the norm): \alpha * \alpha^q * ... * \alpha^(q^m-1)

Am I doing something wrong?

edit retag flag offensive close merge delete


Welcome to Ask Sage! Thank you for your question.

slelievre gravatar imageslelievre ( 2021-12-15 16:33:19 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2021-12-15 16:49:27 +0200

Max Alekseyev gravatar image

If you check the parent of elem_fp6, you'll see:

Univariate Quotient Polynomial Ring in v over Finite Field in u of size 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787^2 with modulus ...

Correspondingly, rather than using field_modulus in computing fp6_norm_from_conjugates, you need to use its square:

field_modulus2 = field_modulus^2
fp6_norm_from_conjugates = elem_fp6 * (elem_fp6 ^ field_modulus2) * (elem_fp6 ^ (field_modulus2^2))
edit flag offensive delete link more


That's great, works like a charm.

mmagician gravatar imagemmagician ( 2021-12-16 11:43:18 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2021-12-15 16:23:38 +0200

Seen: 89 times

Last updated: Dec 15 '21