Created
April 20, 2023 14:51
-
-
Save asanso/8b0749dfa0470e468119811bc3f4687a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 57, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"# BLS12-381 sage implementation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 58, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 59, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"True" | |
] | |
}, | |
"execution_count": 59, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"p in Primes()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 60, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"# G1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 61, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Elliptic Curve defined by y^2 = x^3 + 4 over Finite Field of size 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787" | |
] | |
}, | |
"execution_count": 61, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"E1 = EllipticCurve(GF(p), [0, 4])\n", | |
"E1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"3 * 11^2 * 10177^2 * 859267^2 * 52437899^2 * 52435875175126190479447740508185965837690552500527637822603658699938581184513" | |
] | |
}, | |
"execution_count": 62, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"factor(E1.order())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 63, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"E1cofactor = 0x396c8c005555e1568c00aaab0000aaab" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 64, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"3 * 11^2 * 10177^2 * 859267^2 * 52437899^2" | |
] | |
}, | |
"execution_count": 64, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"factor(E1cofactor)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 65, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"order = 52435875175126190479447740508185965837690552500527637822603658699938581184513" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 77, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(3006311963586652835656762133460128766163260646573370711678967253222264983490593288693517955057088185894226975257034 : 190532816206323054320525886194094175795290992649002582138245867770654111424551066147978049852962252452029105685383 : 1)" | |
] | |
}, | |
"execution_count": 77, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"Pa = E1cofactor * E1.random_point()\n", | |
"Pa" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 67, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"assert Pa.order() == order" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 68, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"# G2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 69, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Finite Field in i of size 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787^2" | |
] | |
}, | |
"execution_count": 69, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"_.<I> = GF(p)[]\n", | |
"K.<i> = GF(p^2, modulus=I^2+1)\n", | |
"K" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 70, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Elliptic Curve defined by y^2 = x^3 + (4*i+4) over Finite Field in i of size 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787^2" | |
] | |
}, | |
"execution_count": 70, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"E2 = EllipticCurve(K, [0, 4*(i+1)])\n", | |
"E2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 71, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"E2order = E2.order()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 72, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"E2cofactor = 0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 73, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"13^2 * 23^2 * 2713 * 11953 * 262069 * 402096035359507321594726366720466575392706800671181159425656785868777272553337714697862511267018014931937703598282857976535744623203249" | |
] | |
}, | |
"execution_count": 73, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"factor(E2cofactor)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 74, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
"assert order*E2cofactor == E2order" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 78, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(3556974607485379506450942071186834848318733278412474767063158158341978728914539372133478039285472233842208924967491*i + 480020083071892448841766069008778524550836399842721415032934076185502765160008572267669855479828669097337168440585 : 2311949564102525834818129998052757219383414673614672803112797707945036274848515620111320569650610401297048611324209*i + 3321138396901700800616131492234377510325735277629746819727785681965062147862156539714231834693308501169920600662845 : 1)" | |
] | |
}, | |
"execution_count": 78, | |
"metadata": { | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"Pb = E2cofactor * E2.random_point()\n", | |
"Pb" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 0, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
], | |
"source": [ | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "SageMath 9.3", | |
"language": "sagemath", | |
"metadata": { | |
"cocalc": { | |
"description": "Open-source mathematical software system", | |
"priority": 10, | |
"url": "https://www.sagemath.org/" | |
} | |
}, | |
"name": "sage-9.3", | |
"resource_dir": "/ext/jupyter/kernels/sage-9.3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.9.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment